<?xml version="1.0" encoding="UTF-8"?>
<rss version="2.0">
  <channel>
    <title>기록 박물관</title>
    <link>https://noogoonaa.tistory.com/</link>
    <description> &amp;zwj;  개발,   일상,   리뷰 블로그</description>
    <language>ko</language>
    <pubDate>Tue, 12 May 2026 04:44:22 +0900</pubDate>
    <generator>TISTORY</generator>
    <ttl>100</ttl>
    <managingEditor>방현준</managingEditor>
    <image>
      <title>기록 박물관</title>
      <url>https://tistory1.daumcdn.net/tistory/3386734/attach/b931c68fb4bb4b439e2d164b1c0b1c09</url>
      <link>https://noogoonaa.tistory.com</link>
    </image>
    <item>
      <title>`개발자의 하루를 바꾸는 코파일럿 &amp;amp; 챗GPT` 읽고서..</title>
      <link>https://noogoonaa.tistory.com/130</link>
      <description>&lt;h3 data-ke-size=&quot;size23&quot;&gt;`개발자의 하루를 바꾸는 코파일럿 &amp;amp; 챗GPT`를 구매한 이유&lt;/h3&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;나는 Chat GPT를 애용한다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;Chat GPT가 막 입소문 돌기 시작했을 때 부터 애용을 했는데, 알고리즘부터 코드 검수, 심지어 단위 테스트까지 척척해주는 GPT를 볼 때마다 너무 사랑스러웠다.&lt;/p&gt;
&lt;p style=&quot;color: #333333; text-align: start;&quot; data-ke-size=&quot;size16&quot;&gt;하지만, 최근 Chat&lt;span&gt;&amp;nbsp;&lt;/span&gt;GPT를 사용하면서 GPT가 멍청해진것 같이 느껴졌다.&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&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-origin-width=&quot;1320&quot; data-origin-height=&quot;1216&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/bQeu1P/btsBipXIUHr/WF7Ca1i334zYhKJNVtbwv1/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/bQeu1P/btsBipXIUHr/WF7Ca1i334zYhKJNVtbwv1/img.png&quot; data-alt=&quot;나만 그런게 아닌가보다...&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/bQeu1P/btsBipXIUHr/WF7Ca1i334zYhKJNVtbwv1/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FbQeu1P%2FbtsBipXIUHr%2FWF7Ca1i334zYhKJNVtbwv1%2Fimg.png&quot; onerror=&quot;this.onerror=null; this.src='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png'; this.srcset='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png';&quot; loading=&quot;lazy&quot; width=&quot;1320&quot; height=&quot;1216&quot; data-origin-width=&quot;1320&quot; data-origin-height=&quot;1216&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;/p&gt;
&lt;p style=&quot;color: #333333; text-align: start;&quot; data-ke-size=&quot;size16&quot;&gt;특히, 틀린말을 정답처럼 말하는게 혈압이 올라, 기존의 결제하던 Chat GPT를 해지하고 최근 추천 받았던 코파일럿으로 갈아탔다.&lt;/p&gt;
&lt;p style=&quot;color: #333333; text-align: start;&quot; data-ke-size=&quot;size16&quot;&gt;(VSCode에 플러그인이 정식으로 출시했다는것도 한 몫 한듯 하다ㅋㅋㅋ)&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;amp; 챗GPT`이라는 책을 발견하게 되었고, 이건 나에게 도움을 주겠다 싶어서 냉큼 구매해버렸다!!&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-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;hr contenteditable=&quot;false&quot; data-ke-type=&quot;horizontalRule&quot; data-ke-style=&quot;style1&quot; /&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;h3 data-ke-size=&quot;size23&quot;&gt;`개발자의 하루를 바꾸는 코파일럿 &amp;amp; 챗GPT`를 읽고나서&lt;/h3&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-filename=&quot;KakaoTalk_Photo_2023-12-02-21-49-10.jpeg&quot; data-origin-width=&quot;3000&quot; data-origin-height=&quot;4000&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/rcoYv/btsBisz74vx/McHt8Ws90V30u0TtyrKsHK/img.jpg&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/rcoYv/btsBisz74vx/McHt8Ws90V30u0TtyrKsHK/img.jpg&quot; data-alt=&quot;표지는 이쁘다, 그래서 끌렸다..&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/rcoYv/btsBisz74vx/McHt8Ws90V30u0TtyrKsHK/img.jpg&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FrcoYv%2FbtsBisz74vx%2FMcHt8Ws90V30u0TtyrKsHK%2Fimg.jpg&quot; onerror=&quot;this.onerror=null; this.src='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png'; this.srcset='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png';&quot; loading=&quot;lazy&quot; width=&quot;860&quot; height=&quot;1147&quot; data-filename=&quot;KakaoTalk_Photo_2023-12-02-21-49-10.jpeg&quot; data-origin-width=&quot;3000&quot; data-origin-height=&quot;4000&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;/p&gt;
&lt;p data-ke-size=&quot;size18&quot;&gt;&lt;b&gt;Chat GPT 혹은 코파일럿을 사용해서 더 나은 방법을 알고 싶어 이 책을 구매하고 싶으신 거라면 차라리 다른책을 사거나 남들이 작성한 블로그를 보는게 더 도움될 것이다.&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;이 책의 전반적인 내용은 하나의 시뮬레이션을 가져와서 코파일럿과 Chat GPT한테 `나, 이거 모르는데 답변해줘`라고 한 후, 그걸 각 툴마다 비교해서 어떤게 좋다 어떤게 나쁘다 이런식의 내용이 전반으로 가득차 있다.&lt;/p&gt;
&lt;p style=&quot;color: #333333; text-align: start;&quot; data-ke-size=&quot;size16&quot;&gt;&lt;i&gt;(물론, 마지막에 단위테스트 내용은 좀 볼만했지만, 그외에는 대충훑고 넘기기 바빴다...)&lt;/i&gt;&lt;/p&gt;
&lt;p style=&quot;color: #333333; text-align: start;&quot; data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p style=&quot;color: #333333; text-align: start;&quot; data-ke-size=&quot;size16&quot;&gt;제목은 그럴싸하게 `개발자의 하루를 바꾸는`이라고 적혀있지만, 전혀 바꾸지 못할것 같은 내용에 너무 실망이 큰 책이었다...&lt;/p&gt;
&lt;p style=&quot;color: #333333; text-align: start;&quot; data-ke-size=&quot;size16&quot;&gt;여러모로 참 아쉬운 책이다...&lt;/p&gt;
&lt;p style=&quot;color: #333333; text-align: start;&quot; data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;</description>
      <category>리뷰 및 사용 TIP</category>
      <category>개발자의 하루를 바꾸는 코파일럿 &amp;amp; 챗GPT</category>
      <category>리뷰</category>
      <category>책</category>
      <author>방현준</author>
      <guid isPermaLink="true">https://noogoonaa.tistory.com/130</guid>
      <comments>https://noogoonaa.tistory.com/130#entry130comment</comments>
      <pubDate>Sat, 2 Dec 2023 22:15:10 +0900</pubDate>
    </item>
    <item>
      <title>ECR 커맨드</title>
      <link>https://noogoonaa.tistory.com/129</link>
      <description>&lt;p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-filename=&quot;TIL.jpeg&quot; data-origin-width=&quot;1272&quot; data-origin-height=&quot;718&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/9LX7q/btr1nwX07v2/fFlMCfbF3AhXkuki4cu0jk/img.jpg&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/9LX7q/btr1nwX07v2/fFlMCfbF3AhXkuki4cu0jk/img.jpg&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/9LX7q/btr1nwX07v2/fFlMCfbF3AhXkuki4cu0jk/img.jpg&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2F9LX7q%2Fbtr1nwX07v2%2FfFlMCfbF3AhXkuki4cu0jk%2Fimg.jpg&quot; onerror=&quot;this.onerror=null; this.src='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png'; this.srcset='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png';&quot; loading=&quot;lazy&quot; width=&quot;1272&quot; height=&quot;718&quot; data-filename=&quot;TIL.jpeg&quot; data-origin-width=&quot;1272&quot; data-origin-height=&quot;718&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;- `aws configure sso`&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;- 로그인&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;- `aws ec2 describe-instances --profile bhj`&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;- `export AWS_PROFILE=bhj`&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;- `aws&amp;nbsp;ecr&amp;nbsp;get-login-password&amp;nbsp;--region&amp;nbsp;ap-northeast-2&amp;nbsp;|&amp;nbsp;sudo&amp;nbsp;docker&amp;nbsp;login&amp;nbsp;--username&amp;nbsp;AWS&amp;nbsp;--password-stdin&amp;nbsp;621342946888.dkr.ecr.ap-northeast-2.amazonaws.com`&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;</description>
      <category>TIL(Today I Learned)</category>
      <author>방현준</author>
      <guid isPermaLink="true">https://noogoonaa.tistory.com/129</guid>
      <comments>https://noogoonaa.tistory.com/129#entry129comment</comments>
      <pubDate>Wed, 1 Mar 2023 19:05:25 +0900</pubDate>
    </item>
    <item>
      <title>AWS로 배운 것</title>
      <link>https://noogoonaa.tistory.com/128</link>
      <description>&lt;p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-filename=&quot;TIL.jpeg&quot; data-origin-width=&quot;1272&quot; data-origin-height=&quot;718&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/Fvs0E/btr0IvMCBdO/pQTkYh98zYVsUNMmaKG6E0/img.jpg&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/Fvs0E/btr0IvMCBdO/pQTkYh98zYVsUNMmaKG6E0/img.jpg&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/Fvs0E/btr0IvMCBdO/pQTkYh98zYVsUNMmaKG6E0/img.jpg&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FFvs0E%2Fbtr0IvMCBdO%2FpQTkYh98zYVsUNMmaKG6E0%2Fimg.jpg&quot; onerror=&quot;this.onerror=null; this.src='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png'; this.srcset='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png';&quot; loading=&quot;lazy&quot; width=&quot;1272&quot; height=&quot;718&quot; data-filename=&quot;TIL.jpeg&quot; data-origin-width=&quot;1272&quot; data-origin-height=&quot;718&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;/p&gt;
&lt;hr contenteditable=&quot;false&quot; data-ke-type=&quot;horizontalRule&quot; data-ke-style=&quot;style1&quot; /&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;원래는 퍼블릭 - DMZ - 프라이빗으로 나뉘어져 있지만, 현재는 퍼블릭(DMZ) - 프라이빗으로 바뀜&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;---&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;aws에는 session manager란게 있다, 프라이빗 서브넷에 접근을 용이하게 하는 것, 프라이빗은 ssh 로 접근이 불가능하다. 할 순 있지만, vpn을 쓰는등 암튼 복잠함.... 그래서 session manager를 이용하는게 편하다. 하지만 session manager는 IAM 롤AmazonSSMManagedInstanceCore을 설정해야하고 VPC 엔드포인트를 ssm, ssmmessage, ec2message를 설정해야함..&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;---&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;베스쳔 호스트는 프라이빗 서브넷이 외부로 나가는 트래픽을 보낼때 사용하는 통로다 하지만, 이것은 인스턴스이기에 최근에는 잘 사용 안하는듯... 대신 NAT 게이트웨이를 사용함. NAT 게이트웨이도 똑같이 프라이빗 서브넷이 외부로 나가는 트래픽을 보낼때 사용하는 통로이지만, 둘이 뭔 차인지는 찾아봐야 할듯??&lt;/p&gt;</description>
      <category>TIL(Today I Learned)</category>
      <author>방현준</author>
      <guid isPermaLink="true">https://noogoonaa.tistory.com/128</guid>
      <comments>https://noogoonaa.tistory.com/128#entry128comment</comments>
      <pubDate>Sat, 25 Feb 2023 21:41:30 +0900</pubDate>
    </item>
    <item>
      <title>IP 클래스 방식이란?</title>
      <link>https://noogoonaa.tistory.com/127</link>
      <description>&lt;h2 data-ke-size=&quot;size26&quot;&gt;사전지식&lt;/h2&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;아래 내용에는 옥텟이란 용어가 나옵니다.&lt;/p&gt;
&lt;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://noogoonaa.tistory.com/126&quot;&gt;https://noogoonaa.tistory.com/126&lt;/a&gt;&lt;/p&gt;
&lt;figure id=&quot;og_1674837530628&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;옥텟(Octet)이란?&quot; data-og-description=&quot;옥텟(Octet)이란? 옥텟이란, IP주소를 이진법으로 변환하여 8개씩 나눈 비트 단위를 옥텟이라고 합니다. 왜 옥텟이라는 용어가 생겼을까? 사실 CS공부를 하신 분들이라면 다 1바이트가 8비트라는 것&quot; data-og-host=&quot;noogoonaa.tistory.com&quot; data-og-source-url=&quot;https://noogoonaa.tistory.com/126&quot; data-og-url=&quot;https://noogoonaa.tistory.com/126&quot; data-og-image=&quot;https://scrap.kakaocdn.net/dn/mCioz/hyRq42Na5c/Q76NDIKRbrQcm3ZqKF00Hk/img.jpg?width=800&amp;amp;height=475&amp;amp;face=0_0_800_475,https://scrap.kakaocdn.net/dn/NU8Eo/hyRpB81pBJ/PKmqrzKiy11WVkH9vFHuc0/img.jpg?width=800&amp;amp;height=475&amp;amp;face=0_0_800_475,https://scrap.kakaocdn.net/dn/bMxYrG/hyRq5AC51Q/M5QivLKxvYpBPWhN3gGHO1/img.jpg?width=1540&amp;amp;height=916&amp;amp;face=0_0_1540_916&quot;&gt;&lt;a href=&quot;https://noogoonaa.tistory.com/126&quot; target=&quot;_blank&quot; rel=&quot;noopener&quot; data-source-url=&quot;https://noogoonaa.tistory.com/126&quot;&gt;
&lt;div class=&quot;og-image&quot; style=&quot;background-image: url('https://scrap.kakaocdn.net/dn/mCioz/hyRq42Na5c/Q76NDIKRbrQcm3ZqKF00Hk/img.jpg?width=800&amp;amp;height=475&amp;amp;face=0_0_800_475,https://scrap.kakaocdn.net/dn/NU8Eo/hyRpB81pBJ/PKmqrzKiy11WVkH9vFHuc0/img.jpg?width=800&amp;amp;height=475&amp;amp;face=0_0_800_475,https://scrap.kakaocdn.net/dn/bMxYrG/hyRq5AC51Q/M5QivLKxvYpBPWhN3gGHO1/img.jpg?width=1540&amp;amp;height=916&amp;amp;face=0_0_1540_916');&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;옥텟(Octet)이란?&lt;/p&gt;
&lt;p class=&quot;og-desc&quot; data-ke-size=&quot;size16&quot;&gt;옥텟(Octet)이란? 옥텟이란, IP주소를 이진법으로 변환하여 8개씩 나눈 비트 단위를 옥텟이라고 합니다. 왜 옥텟이라는 용어가 생겼을까? 사실 CS공부를 하신 분들이라면 다 1바이트가 8비트라는 것&lt;/p&gt;
&lt;p class=&quot;og-host&quot; data-ke-size=&quot;size16&quot;&gt;noogoonaa.tistory.com&lt;/p&gt;
&lt;/div&gt;
&lt;/a&gt;&lt;/figure&gt;
&lt;hr contenteditable=&quot;false&quot; data-ke-type=&quot;horizontalRule&quot; data-ke-style=&quot;style5&quot; /&gt;
&lt;h2 data-ke-size=&quot;size26&quot;&gt;IP 클래스 방식이란?&lt;/h2&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-filename=&quot;maxresdefault.jpg&quot; data-origin-width=&quot;1280&quot; data-origin-height=&quot;720&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/BxSou/btrXnucqy9u/3TjTE5YEH5eTDkqXVeSa4k/img.jpg&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/BxSou/btrXnucqy9u/3TjTE5YEH5eTDkqXVeSa4k/img.jpg&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/BxSou/btrXnucqy9u/3TjTE5YEH5eTDkqXVeSa4k/img.jpg&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FBxSou%2FbtrXnucqy9u%2F3TjTE5YEH5eTDkqXVeSa4k%2Fimg.jpg&quot; onerror=&quot;this.onerror=null; this.src='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png'; this.srcset='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png';&quot; loading=&quot;lazy&quot; width=&quot;1280&quot; height=&quot;720&quot; data-filename=&quot;maxresdefault.jpg&quot; data-origin-width=&quot;1280&quot; data-origin-height=&quot;720&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;IP 클래스 방식은, 전통적인 IP 할당 방식으로, A 클래스, B 클래스, C클래스 세가지의 클래스 기반으로 IP를 나누어 할당하는 방식입니다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;1993년도에 적용된 CIDR 방식 이전에 사용하던 방식으로, 각 클래스는 각각의 용도에 맞춰 효율적으로 쪼개 놓았다가 필요한 곳이 생기면 쪼개놓은 IP대역을 나눠주는 방식으로 IP를 할당하였습니다.&lt;/p&gt;
&lt;hr contenteditable=&quot;false&quot; data-ke-type=&quot;horizontalRule&quot; data-ke-style=&quot;style1&quot; /&gt;
&lt;h2 data-ke-size=&quot;size26&quot;&gt;각 클래스별 용도&lt;/h2&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-filename=&quot;IP-classes-01.gif&quot; data-origin-width=&quot;381&quot; data-origin-height=&quot;161&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/bOleoJ/btrXmI3lJ0d/EakmbZ31qIHGprryNupK31/img.gif&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/bOleoJ/btrXmI3lJ0d/EakmbZ31qIHGprryNupK31/img.gif&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/bOleoJ/btrXmI3lJ0d/EakmbZ31qIHGprryNupK31/img.gif&quot; srcset=&quot;https://blog.kakaocdn.net/dn/bOleoJ/btrXmI3lJ0d/EakmbZ31qIHGprryNupK31/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;381&quot; height=&quot;161&quot; data-filename=&quot;IP-classes-01.gif&quot; data-origin-width=&quot;381&quot; data-origin-height=&quot;161&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;클래스는 위에서 이야기했다 시피, 3가지의 클래스 기반으로 나누어져 있다고 했습니다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;(D클래스(멀티캐스트 용)와 E클래스(여유 분)도 있지만, 특수용이기에 이렇게만 알아두시면 됩니다)&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;각 클래스는 옥텟 범위로 나뉘어 지는데, 이 옥텟 범위로 나뉘지면서, A클래스, B클래스, C클래스로 나뉘어 집니다.&lt;/p&gt;
&lt;hr contenteditable=&quot;false&quot; data-ke-type=&quot;horizontalRule&quot; data-ke-style=&quot;style1&quot; /&gt;
&lt;h2 data-ke-size=&quot;size26&quot;&gt;A 클래스&lt;/h2&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock widthContent&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-filename=&quot;IP_addressing_4.jpg&quot; data-origin-width=&quot;441&quot; data-origin-height=&quot;126&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/k4ydB/btrXooP5HUi/QGMXm9owaUr4nXUQ2M5Mk0/img.jpg&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/k4ydB/btrXooP5HUi/QGMXm9owaUr4nXUQ2M5Mk0/img.jpg&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/k4ydB/btrXooP5HUi/QGMXm9owaUr4nXUQ2M5Mk0/img.jpg&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2Fk4ydB%2FbtrXooP5HUi%2FQGMXm9owaUr4nXUQ2M5Mk0%2Fimg.jpg&quot; onerror=&quot;this.onerror=null; this.src='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png'; this.srcset='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png';&quot; loading=&quot;lazy&quot; width=&quot;441&quot; height=&quot;126&quot; data-filename=&quot;IP_addressing_4.jpg&quot; data-origin-width=&quot;441&quot; data-origin-height=&quot;126&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;A클래스는 첫번째 옥텟에서 0~127 대역까지만 네트워크 영역으로 가지고 나머지는 호스트 영역으로 가져가는 클래스입니다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;(단, 여기서 첫번째 옥텟의 첫번째 비트는 0으로 고정입니다.)&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;그렇기에, 할당 할 수 있는 IP가 가장 많은 클래스 이고(반 이상 네트워크 영역을 차지하기에&amp;hellip;) 약 1,600만개의 호스트를 가질 수 입니다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;대규모 네트워크를 가질 경우 할당되어지는 클래스입니다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;그리고, 127.0.0.0은 루프백 주소로 사용되어집니다.&lt;/p&gt;
&lt;h4 data-ke-size=&quot;size20&quot;&gt;A클래스 계산&lt;/h4&gt;
&lt;p data-ke-size=&quot;size14&quot;&gt;&lt;span style=&quot;color: #ee2323;&quot;&gt;(만약 정확한 계산을 어떻게 하는지 알고싶으신 분은 아래 내용을 보시면 되시고 아니라면 B클래스 섹션으로 넘어가도 됩니다)&lt;/span&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size14&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;네트워크 영역(0~127)을 제외한 나머지 호스트 영역은 3옥텟으로 24비트를 가집니다(1옥텟당 8비트이므로..)&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;즉 호스트 영역에서 만들 수 있는 가지수는 2^24입니다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;그렇기에 2^24을 계산하면 16,777,216개가 나오고 A 클래스의 네트워크 영역 0~127 이므로 계산식을 다시하면 (2^24) * 128이 됩니다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;그럼 할당 가능한 IP수는 2,147,483,648이 됩니다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;다만, 여기서 16,777,216 - 2를 해주어야 우리가 실제 사용가능한 IP갯수가 나옵니다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;왜냐하면 호스트 주소가 모두 0인경우 네트워크 주소로, 모두 1인경우는 브로드캐스트 주소로 사용되어지기 때문입니다.&lt;/p&gt;
&lt;hr contenteditable=&quot;false&quot; data-ke-type=&quot;horizontalRule&quot; data-ke-style=&quot;style1&quot; /&gt;
&lt;h2 data-ke-size=&quot;size26&quot;&gt;B 클래스&lt;/h2&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock widthContent&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-filename=&quot;IP_addressing_5.jpg&quot; data-origin-width=&quot;471&quot; data-origin-height=&quot;126&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/1rsyI/btrXom5N3bg/8o95Qhntwy9nj6osPWyNnk/img.jpg&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/1rsyI/btrXom5N3bg/8o95Qhntwy9nj6osPWyNnk/img.jpg&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/1rsyI/btrXom5N3bg/8o95Qhntwy9nj6osPWyNnk/img.jpg&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2F1rsyI%2FbtrXom5N3bg%2F8o95Qhntwy9nj6osPWyNnk%2Fimg.jpg&quot; onerror=&quot;this.onerror=null; this.src='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png'; this.srcset='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png';&quot; loading=&quot;lazy&quot; width=&quot;471&quot; height=&quot;126&quot; data-filename=&quot;IP_addressing_5.jpg&quot; data-origin-width=&quot;471&quot; data-origin-height=&quot;126&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;B클래스는 A클래스 다음으로 IP가 많은 클래스이며, 중규모의 네트워크입니다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;첫번째 옥텟(128~191)과 두번째 옥텟(0~256)을 네트워크 영역으로 가지며 나머지 세번째, 네번째 옥텟을 호스트 영역으로 가집니다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;(단, 여기서 첫번째 옥텟의 첫번째 비트는 1, 두번째 비트는 0으로 고정입니다.)&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;따라서 약 65,000개의 호스트 영역을 가질 수 있고, 할당 가능한 IP는 약 10억개 입니다.&lt;/p&gt;
&lt;h4 data-ke-size=&quot;size20&quot;&gt;B 클래스 계산&lt;/h4&gt;
&lt;p data-ke-size=&quot;size14&quot;&gt;&lt;span style=&quot;color: #ee2323;&quot;&gt;(만약 정확한 계산을 어떻게 하는지 알고싶으신 분은 아래 내용을 보시면 되시고 아니라면 C클래스 섹션으로 넘어가도 됩니다)&lt;/span&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size14&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;호스트 영역은 A클래스와 계산법은 똑같습니다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;따라서 2^16로 계산하면 65,536개가 나오고&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;네트워크 영역은 첫번째 옥텟이 128~191개이므로 64개의 네트워크 영역을 가지고 두번째 옥텟은 256개를 가지니 64 * 256을 계산하면 16,384개가 나옵니다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;그럼 아까와 마찬가지로 65,534 * 16,386를 계산하면 할당 가능한 IP수가 나오는데 그 값은 1,073,741,824 입니다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;여기서 1,073,741,824 - 2를 하면 1,073,741,822개가 실제 사용 가능한 IP입니다.&lt;/p&gt;
&lt;hr contenteditable=&quot;false&quot; data-ke-type=&quot;horizontalRule&quot; data-ke-style=&quot;style1&quot; /&gt;
&lt;h2 data-ke-size=&quot;size26&quot;&gt;C 클래스&lt;/h2&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock widthContent&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-filename=&quot;IP_addressing_6.jpg&quot; data-origin-width=&quot;521&quot; data-origin-height=&quot;126&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/UEAhM/btrXn5QLyHQ/hCThOEdQseBR4Cscrlkhhk/img.jpg&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/UEAhM/btrXn5QLyHQ/hCThOEdQseBR4Cscrlkhhk/img.jpg&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/UEAhM/btrXn5QLyHQ/hCThOEdQseBR4Cscrlkhhk/img.jpg&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FUEAhM%2FbtrXn5QLyHQ%2FhCThOEdQseBR4Cscrlkhhk%2Fimg.jpg&quot; onerror=&quot;this.onerror=null; this.src='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png'; this.srcset='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png';&quot; loading=&quot;lazy&quot; width=&quot;521&quot; height=&quot;126&quot; data-filename=&quot;IP_addressing_6.jpg&quot; data-origin-width=&quot;521&quot; data-origin-height=&quot;126&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;C클래스는 소규모 네트워크이고, 첫번째 옥텟 범위가 192~233으로 32개의 네트워크 영역 그리고 두번째 옥텟(0~255) 세번째 옥텟(0~255)을 네트워크 영역으로 가지는 클래스입니다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;(단, 여기서 첫번째 옥텟의 첫번째 비트는 1, 두번째 비트는 1, 세번째 비트는 0으로 고정입니다.)&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;따라서 약 256개의 호스트 영역을 가질 수 있고, 할당 가능한 IP는 약 5억개 입니다&lt;/p&gt;
&lt;h4 data-ke-size=&quot;size20&quot;&gt;C 클래스 계산&lt;/h4&gt;
&lt;p data-ke-size=&quot;size14&quot;&gt;&lt;span style=&quot;color: #ee2323;&quot;&gt;(만약 정확한 계산을 어떻게 하는지 알고싶으신 분은 아래 내용을 보시면 되시고 아니라면 다음 섹션으로 넘어가시는걸 추천드립니다)&lt;/span&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size14&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;네트워크 영역의 첫번째 옥텟은 32개의 네트워크 영역을 가지고 나머지는 256개씩 가지기에 32256256을 계산하면 2,097,152개가 나옵니다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;호스트 영역은 위에서 말씀 드렸다시피 256개가 나오므로 실제 할당 가능한 IP는 2,097,152 * 256을 하면 536,870,912개가 나옵니다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;여기서 536,870,912 - 2를 해서 사용가능한 IP 갯수는 536,870,910입니다.&lt;/p&gt;
&lt;hr contenteditable=&quot;false&quot; data-ke-type=&quot;horizontalRule&quot; data-ke-style=&quot;style1&quot; /&gt;
&lt;h2 data-ke-size=&quot;size26&quot;&gt;IP 클래스 방식의 한계&lt;/h2&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock widthContent&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-filename=&quot;img1.daumcdn.jpg&quot; data-origin-width=&quot;400&quot; data-origin-height=&quot;223&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/cP9RZy/btrXnJApig8/isYdn81Atwq4ui8H2hDN30/img.jpg&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/cP9RZy/btrXnJApig8/isYdn81Atwq4ui8H2hDN30/img.jpg&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/cP9RZy/btrXnJApig8/isYdn81Atwq4ui8H2hDN30/img.jpg&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FcP9RZy%2FbtrXnJApig8%2FisYdn81Atwq4ui8H2hDN30%2Fimg.jpg&quot; onerror=&quot;this.onerror=null; this.src='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png'; this.srcset='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png';&quot; loading=&quot;lazy&quot; width=&quot;400&quot; height=&quot;223&quot; data-filename=&quot;img1.daumcdn.jpg&quot; data-origin-width=&quot;400&quot; data-origin-height=&quot;223&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;IP 클래스의 한계는 너무 명확했습니다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;3가지의 클래스를 가지고 IP를 할당하다 보니, IP가 너무 많아, 사용되어지지 않는 IP가 존재하거나, IP가 부족해져 그 상위 클래스로 올라가버리면서 또 낭비하는 IP가 많아지게 되는거죠&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;그렇기에 앞서 설명한 3개의 클래스만 존재하는 할당 방식은 전혀 유연적이게 대응을 할 수 없었습니다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;하지만, 인간은 항상 발전하는 동물이기에 그 다음에 나온 방식이 CIDR입니다.&lt;/p&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;i&gt;&lt;span style=&quot;color: #9d9d9d;&quot;&gt;(CIDR은 추후 포스팅 하겠습니다)&lt;/span&gt;&lt;/i&gt;&lt;/p&gt;
&lt;hr contenteditable=&quot;false&quot; data-ke-type=&quot;horizontalRule&quot; data-ke-style=&quot;style5&quot; /&gt;
&lt;h2 data-ke-size=&quot;size26&quot;&gt;출처&lt;/h2&gt;
&lt;ul style=&quot;list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li&gt;&lt;a href=&quot;https://brunch.co.kr/@swimjiy/44&quot;&gt;https://brunch.co.kr/@swimjiy/44&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://velog.io/@kimyeji203/네트워크-IP-주소에-대해서#사용-가능한-호스트-개수-파악&quot;&gt;https://velog.io/@kimyeji203/네트워크-IP-주소에-대해서#사용-가능한-호스트-개수-파악&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://bamdule.tistory.com/193#recentComments&quot;&gt;https://bamdule.tistory.com/193#recentComments&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://inpa.tistory.com/entry/WEB-IP-클래스-서브넷-마스크-서브넷팅-총정리#IP_주소_클래스&quot;&gt;https://inpa.tistory.com/entry/WEB-IP-클래스-서브넷-마스크-서브넷팅-총정리#IP_주소_클래스&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://jhnyang.tistory.com/503&quot;&gt;https://jhnyang.tistory.com/503&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;</description>
      <category>네트워크</category>
      <author>방현준</author>
      <guid isPermaLink="true">https://noogoonaa.tistory.com/127</guid>
      <comments>https://noogoonaa.tistory.com/127#entry127comment</comments>
      <pubDate>Sat, 28 Jan 2023 01:55:05 +0900</pubDate>
    </item>
    <item>
      <title>옥텟(Octet)이란?</title>
      <link>https://noogoonaa.tistory.com/126</link>
      <description>&lt;h2 data-ke-size=&quot;size26&quot;&gt;옥텟(Octet)이란?&lt;/h2&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-filename=&quot;b50e591eb888a.jpg&quot; data-origin-width=&quot;1540&quot; data-origin-height=&quot;916&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/bklcAn/btrXn69XYjw/pmFu8cQYeJNhRrIG3M7551/img.jpg&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/bklcAn/btrXn69XYjw/pmFu8cQYeJNhRrIG3M7551/img.jpg&quot; data-alt=&quot;출처 :&amp;amp;amp;nbsp;https://imweb.me/blog?idx=102&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/bklcAn/btrXn69XYjw/pmFu8cQYeJNhRrIG3M7551/img.jpg&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FbklcAn%2FbtrXn69XYjw%2FpmFu8cQYeJNhRrIG3M7551%2Fimg.jpg&quot; onerror=&quot;this.onerror=null; this.src='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png'; this.srcset='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png';&quot; loading=&quot;lazy&quot; width=&quot;1540&quot; height=&quot;916&quot; data-filename=&quot;b50e591eb888a.jpg&quot; data-origin-width=&quot;1540&quot; data-origin-height=&quot;916&quot;/&gt;&lt;/span&gt;&lt;figcaption&gt;출처 :&amp;amp;nbsp;https://imweb.me/blog?idx=102&lt;/figcaption&gt;
&lt;/figure&gt;
&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;옥텟이란, IP주소를 이진법으로 변환하여 8개씩 나눈 비트 단위를 옥텟이라고 합니다.&lt;/p&gt;
&lt;hr contenteditable=&quot;false&quot; data-ke-type=&quot;horizontalRule&quot; data-ke-style=&quot;style1&quot; /&gt;
&lt;h2 data-ke-size=&quot;size26&quot;&gt;왜 옥텟이라는 용어가 생겼을까?&lt;/h2&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;사실 CS공부를 하신 분들이라면 다 1바이트가 8비트라는 것을 아실겁니다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;그럼 여기서 갑자기 의문이 들 수 있습니다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;그냥 8비트를 의미하는거라면 바이트를 사용해도 되는데 왜 옥텟이라는 용어를 만들었을까 하구요..&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;사실 과거에는 바이트가 무조건 8비트라는 개념이 존재하지 않았습니다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;4비트, 7비트 등 다양했죠&amp;hellip;. &lt;br /&gt;&lt;span style=&quot;color: #9d9d9d;&quot;&gt;&lt;i&gt;(왜냐하면 바이트의 저장해야하는 문자가 기술이 발전함에 따라 증가했으므로&amp;hellip;.)&lt;/i&gt;&lt;/span&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;그렇기에 8비트를 정확히 지칭하는 단어가 존재하지 않아, 옥텟이라는 단위를 만들게 된 것입니다.&lt;/p&gt;
&lt;hr contenteditable=&quot;false&quot; data-ke-type=&quot;horizontalRule&quot; data-ke-style=&quot;style1&quot; /&gt;
&lt;h2 data-ke-size=&quot;size26&quot;&gt;옥텟은 그럼 지금도 사용하는 용어입니까?&lt;/h2&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-origin-width=&quot;712&quot; data-origin-height=&quot;510&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/2l1k6/btrXmkPsUDq/rDeBb45r1PtCHkajHnvll0/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/2l1k6/btrXmkPsUDq/rDeBb45r1PtCHkajHnvll0/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/2l1k6/btrXmkPsUDq/rDeBb45r1PtCHkajHnvll0/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2F2l1k6%2FbtrXmkPsUDq%2FrDeBb45r1PtCHkajHnvll0%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;712&quot; height=&quot;510&quot; data-origin-width=&quot;712&quot; data-origin-height=&quot;510&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;킹 갓 제너럴 엠페럴 충무공 챗 GPT A.K.A 갓 GPT 님께서 아직 여전히 사용하신다고 합니다. &lt;br /&gt;다만, 이제는 일반적으로 1바이트가 8비트로 고정이 되었기에 보통은 바이트로 사용하는경우가 많고 옥텟은 역사속으로 사라져 가는 느낌입니다. &lt;br /&gt;&lt;span style=&quot;color: #9d9d9d;&quot;&gt;&lt;i&gt;(혹시 모르죠&amp;hellip;바이트가 또 10비트가 된다면 옥텟을 다시 사용할지도요&amp;hellip;.)&lt;/i&gt;&lt;/span&gt;&lt;/p&gt;
&lt;hr contenteditable=&quot;false&quot; data-ke-type=&quot;horizontalRule&quot; data-ke-style=&quot;style1&quot; /&gt;
&lt;h3 data-ke-size=&quot;size23&quot;&gt;출처&lt;/h3&gt;
&lt;ul style=&quot;list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li&gt;&lt;a href=&quot;https://chat.openai.com/chat&quot; target=&quot;_blank&quot; rel=&quot;noopener&quot;&gt;https://chat.openai.com/chat&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://imweb.me/blog?idx=102&quot;&gt;https://imweb.me/blog?idx=102&lt;/a&gt;&amp;nbsp;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://perfectacle.github.io/2017/08/07/why-1byte-is-8bit/&quot; target=&quot;_blank&quot; rel=&quot;noopener&quot;&gt;https://perfectacle.github.io/2017/08/07/why-1byte-is-8bit/&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://hyoje420.tistory.com/10&quot; target=&quot;_blank&quot; rel=&quot;noopener&quot;&gt;https://hyoje420.tistory.com/10&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;</description>
      <category>네트워크</category>
      <author>방현준</author>
      <guid isPermaLink="true">https://noogoonaa.tistory.com/126</guid>
      <comments>https://noogoonaa.tistory.com/126#entry126comment</comments>
      <pubDate>Sat, 28 Jan 2023 00:05:49 +0900</pubDate>
    </item>
    <item>
      <title>Canvas애니메이션을 구현할 때 갤럭시 혹은 아이폰 디바이스에서 애니메이션 속도가 다른 이슈 해결하는 법</title>
      <link>https://noogoonaa.tistory.com/125</link>
      <description>&lt;p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-filename=&quot;1_sQuSbqYHW-38cJXo3RsvWA.png&quot; data-origin-width=&quot;1240&quot; data-origin-height=&quot;700&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/drGT0t/btrW6qAjGUB/hLP6am4iLCVnK2fi5zf8G0/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/drGT0t/btrW6qAjGUB/hLP6am4iLCVnK2fi5zf8G0/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/drGT0t/btrW6qAjGUB/hLP6am4iLCVnK2fi5zf8G0/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FdrGT0t%2FbtrW6qAjGUB%2FhLP6am4iLCVnK2fi5zf8G0%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;1240&quot; height=&quot;700&quot; data-filename=&quot;1_sQuSbqYHW-38cJXo3RsvWA.png&quot; data-origin-width=&quot;1240&quot; data-origin-height=&quot;700&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;/p&gt;
&lt;blockquote data-ke-style=&quot;style2&quot;&gt;만약 이전 글을 보시지 않았다면, 보시고 오는것을 추천드립니다.&lt;/blockquote&gt;
&lt;figure id=&quot;og_1674553855009&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;Next.js(React.js)에서 Canvas 사용법 with Typescript&quot; data-og-description=&quot;여는 글 최근 Next.js에서 Canvas를 사용할 일이 있었습니다. 기존에 바닐라 자바스크립트에서는 공부를 했었지만, Next.js로는 해본적이 없었고, 따로 정리된 블로그가 딱히 없었습니다. 그래서 최근&quot; data-og-host=&quot;noogoonaa.tistory.com&quot; data-og-source-url=&quot;https://noogoonaa.tistory.com/124&quot; data-og-url=&quot;https://noogoonaa.tistory.com/124&quot; data-og-image=&quot;https://scrap.kakaocdn.net/dn/bLmHPh/hyRoAVd26H/cfIR7CQe6K9y6pQqK4NRWK/img.png?width=800&amp;amp;height=451&amp;amp;face=0_0_800_451,https://scrap.kakaocdn.net/dn/cts3Xp/hyRm3Y0YD1/COq5JL9K2llTU8CzPolxUK/img.png?width=800&amp;amp;height=451&amp;amp;face=0_0_800_451,https://scrap.kakaocdn.net/dn/cmrY6g/hyRoyQEvwe/SlN5HJYXlpCGQjLvnmsPK0/img.png?width=1240&amp;amp;height=700&amp;amp;face=0_0_1240_700&quot;&gt;&lt;a href=&quot;https://noogoonaa.tistory.com/124&quot; target=&quot;_blank&quot; rel=&quot;noopener&quot; data-source-url=&quot;https://noogoonaa.tistory.com/124&quot;&gt;
&lt;div class=&quot;og-image&quot; style=&quot;background-image: url('https://scrap.kakaocdn.net/dn/bLmHPh/hyRoAVd26H/cfIR7CQe6K9y6pQqK4NRWK/img.png?width=800&amp;amp;height=451&amp;amp;face=0_0_800_451,https://scrap.kakaocdn.net/dn/cts3Xp/hyRm3Y0YD1/COq5JL9K2llTU8CzPolxUK/img.png?width=800&amp;amp;height=451&amp;amp;face=0_0_800_451,https://scrap.kakaocdn.net/dn/cmrY6g/hyRoyQEvwe/SlN5HJYXlpCGQjLvnmsPK0/img.png?width=1240&amp;amp;height=700&amp;amp;face=0_0_1240_700');&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;Next.js(React.js)에서 Canvas 사용법 with Typescript&lt;/p&gt;
&lt;p class=&quot;og-desc&quot; data-ke-size=&quot;size16&quot;&gt;여는 글 최근 Next.js에서 Canvas를 사용할 일이 있었습니다. 기존에 바닐라 자바스크립트에서는 공부를 했었지만, Next.js로는 해본적이 없었고, 따로 정리된 블로그가 딱히 없었습니다. 그래서 최근&lt;/p&gt;
&lt;p class=&quot;og-host&quot; data-ke-size=&quot;size16&quot;&gt;noogoonaa.tistory.com&lt;/p&gt;
&lt;/div&gt;
&lt;/a&gt;&lt;/figure&gt;
&lt;hr contenteditable=&quot;false&quot; data-ke-type=&quot;horizontalRule&quot; data-ke-style=&quot;style5&quot; /&gt;
&lt;h2 data-ke-size=&quot;size26&quot;&gt;여는 글&lt;/h2&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;최근 Canvas로 개발을 진행하면서, 여러 문제들을 맞닥뜨렸습니다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;그중에서 가장 골치아팠던 문제중 하나가, 이번 주제입니다&lt;/p&gt;
&lt;hr contenteditable=&quot;false&quot; data-ke-type=&quot;horizontalRule&quot; data-ke-style=&quot;style1&quot; /&gt;
&lt;h2 data-ke-size=&quot;size26&quot;&gt;문제의 발단&lt;/h2&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;프로젝트를 진행하면 보통 개인 디바이스를 통해서 확인을 하는경우가 많습니다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;저의 디바이스는 갤럭시 S22 울트라이기에 주 테스트는 갤럭시에서 진행했습니다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;어느정도 테스트 가능한 개발이 완료되었고 IOS 테스트 폰에서 테스트를 진행해 보니, 이상하게 화면 터치 시 갤럭시와 IOS의 canvas 애니메이션이 다른것을 발견했습니다.&lt;/p&gt;
&lt;hr contenteditable=&quot;false&quot; data-ke-type=&quot;horizontalRule&quot; data-ke-style=&quot;style1&quot; /&gt;
&lt;h2 data-ke-size=&quot;size26&quot;&gt;사전지식&lt;/h2&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;기본적으로 여러분들이 60Hz이상의 주사율을 가진 모니터를 사용하지 않는 이상 디스플레이는 1초에 최대 60번의 렌더링을합니다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;그렇기에 &lt;b&gt;requestAnimationFrame&lt;/b&gt;을 사용하면 초당 60번 호출된다는 것이 그 이유입니다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;만약, 여러분들이 144 Hz 게임용 모니터를 사용한다면?&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;1초에 최대 144번의 렌더링이 이루어지는 것이고 &lt;b&gt;requestAnimationFrame&lt;/b&gt;또한, 144번 호출되는것이지요.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;그럼 이 내용을 잘 이해하셨다는 가정하의 아래 이야기 해보겠습니다.&lt;/p&gt;
&lt;hr contenteditable=&quot;false&quot; data-ke-type=&quot;horizontalRule&quot; data-ke-style=&quot;style1&quot; /&gt;
&lt;h2 data-ke-size=&quot;size26&quot;&gt;캔버스 애니메이션이 다른 이유&lt;/h2&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;일단 캔버스 애니메이션이 다른 이유는 제가 파악하기로는 두가지가 있습니다. &lt;br /&gt;&lt;i&gt;&lt;span style=&quot;color: #9d9d9d;&quot;&gt;(더 있을 순 있지만, 제가 찾아본 바로는 아래 두가지가 최대였습니다&amp;hellip; 시간이 지나면, 더 생길수도&amp;hellip;)&lt;/span&gt;&lt;/i&gt;&lt;/p&gt;
&lt;hr contenteditable=&quot;false&quot; data-ke-type=&quot;horizontalRule&quot; data-ke-style=&quot;style1&quot; /&gt;
&lt;h4 data-ke-size=&quot;size20&quot;&gt;첫번째로는 ios 디바이스가 저전력 모드일 경우입니다.&lt;/h4&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;기본적으로 아이폰 13프로 이상 모델에서는 ProMotion기술이 적용되어 최소 10Hz에서 최대 120Hz까지 가변 주사율이 적용됩니다. &lt;br /&gt;(웹 브라우저에서는 60Hz 고정인것 같습니다.)&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;하지만, 아이폰에서 배터리 저전력 모드로 들어가게 되면 10Hz ~ 60Hz 주사율로 고정이 됩니다. 웹 브라우저에서는 60Hz를 다 해주진 않는것 같구요.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;따라서 안드로이드에서는 빠른데, ios에선 느린 현상이 발생하는 겁니다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;figure data-ke-type=&quot;video&quot; data-ke-style=&quot;alignCenter&quot; data-video-host=&quot;kakaotv&quot; data-video-url=&quot;https://tv.kakao.com/v/435280224&quot; data-video-thumbnail=&quot;https://scrap.kakaocdn.net/dn/t3tkU/hyRoKQ4YDy/DVR7sq6iU9YPVv4aeHiOn0/img.jpg?width=888&amp;amp;height=1920&amp;amp;face=0_0_888_1920,https://scrap.kakaocdn.net/dn/kL4l9/hyRncPcwq3/0LH5K4X9UWMPcFISsTf3W0/img.jpg?width=888&amp;amp;height=1920&amp;amp;face=0_0_888_1920&quot; data-video-width=&quot;860&quot; data-video-height=&quot;1859&quot; data-video-origin-width=&quot;860&quot; data-video-origin-height=&quot;1859&quot; data-ke-mobilestyle=&quot;widthContent&quot; data-video-play-service=&quot;daum_tistory&quot;&gt;&lt;iframe src=&quot;https://play-tv.kakao.com/embed/player/cliplink/435280224?service=daum_tistory&quot; width=&quot;860&quot; height=&quot;1859&quot; frameborder=&quot;0&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;&amp;nbsp;&lt;/p&gt;
&lt;h4 data-ke-size=&quot;size20&quot;&gt;두번째로는 디스플레이 클릭시 안드로이드의 가변적 120hz 적용으로 인한 주사율 차이입니다.&lt;/h4&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;갤럭시도 120Hz 디스플레이를 지원하고있고, 120Hz 프레임 활성화를 시켜놓으면 부분적으로(화면 클릭 혹은 스크롤 시) 120Hz로 올려줍니다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;그렇기에, 유저가 그냥 애니메이션을 볼 땐 갤럭시에서 60Hz의 주사율을 고정하고 아이폰 또한 60Hz로 같은 프레임으로 보게 되지만, 클릭을 하게 되면 갤럭시 120Hz, 아이폰 60Hz로 상이판 프레임을 보게 됩니다.&lt;/p&gt;
&lt;figure data-ke-type=&quot;video&quot; data-ke-style=&quot;alignCenter&quot; data-video-host=&quot;kakaotv&quot; data-video-url=&quot;https://tv.kakao.com/v/435280239&quot; data-video-thumbnail=&quot;https://scrap.kakaocdn.net/dn/xJxJK/hyRoGA9GrI/adqTG4Y8lgzYuEFDC2kqw0/img.jpg?width=910&amp;amp;height=1844&amp;amp;face=0_0_910_1844,https://scrap.kakaocdn.net/dn/2S1Es/hyRncIskS8/cbDxn4MKT2n5jOofkuBh7k/img.jpg?width=910&amp;amp;height=1844&amp;amp;face=0_0_910_1844&quot; data-video-width=&quot;860&quot; data-video-height=&quot;1743&quot; data-video-origin-width=&quot;860&quot; data-video-origin-height=&quot;1743&quot; data-ke-mobilestyle=&quot;widthContent&quot; data-video-play-service=&quot;daum_tistory&quot;&gt;&lt;iframe src=&quot;https://play-tv.kakao.com/embed/player/cliplink/435280239?service=daum_tistory&quot; width=&quot;860&quot; height=&quot;1743&quot; frameborder=&quot;0&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;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;그럼, 이것을 어떻게 해결해야 할까요?&lt;/p&gt;
&lt;hr contenteditable=&quot;false&quot; data-ke-type=&quot;horizontalRule&quot; data-ke-style=&quot;style1&quot; /&gt;
&lt;h2 data-ke-size=&quot;size26&quot;&gt;ios 디바이스가 저전력 모드일 경우 해결 방법&lt;/h2&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;이건, 현재로서는 답이 없습니다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;네이티브가 아닌 브라우저에서 이 문제를 해결하기 위해서 할 수 있는 방법으로는 유저에게 저전력 모드를 꺼 달라고 호소하는 방법밖에는요&amp;hellip;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;i&gt;&lt;span style=&quot;color: #9d9d9d;&quot;&gt;(시간이 지나, 다른 방법이 나올수도 있습니다 :0)&lt;/span&gt;&lt;/i&gt;&lt;/p&gt;
&lt;hr contenteditable=&quot;false&quot; data-ke-type=&quot;horizontalRule&quot; data-ke-style=&quot;style1&quot; /&gt;
&lt;h2 data-ke-size=&quot;size26&quot;&gt;디스플레이 클릭시 갤럭시의 가변적 120hz 적용 이슈 해결&lt;/h2&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;저전력 모드 이슈의 경우는 아직까진 해결법이 없지만 이 이슈는 해결 방법이 있습니다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;120Hz를 60Hz로 강제로 맞추는 방법으로 해결이 가능합니다.&lt;/p&gt;
&lt;hr contenteditable=&quot;false&quot; data-ke-type=&quot;horizontalRule&quot; data-ke-style=&quot;style1&quot; /&gt;
&lt;h2 data-ke-size=&quot;size26&quot;&gt;테스트 용 프로젝트 생성&lt;/h2&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;기본적인 테스트 프로젝트는 이 포스팅을 확인하여 만들어주세요&lt;/p&gt;
&lt;figure id=&quot;og_1674554479756&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;Next.js(React.js)에서 Canvas 사용법 with Typescript&quot; data-og-description=&quot;여는 글 최근 Next.js에서 Canvas를 사용할 일이 있었습니다. 기존에 바닐라 자바스크립트에서는 공부를 했었지만, Next.js로는 해본적이 없었고, 따로 정리된 블로그가 딱히 없었습니다. 그래서 최근&quot; data-og-host=&quot;noogoonaa.tistory.com&quot; data-og-source-url=&quot;https://noogoonaa.tistory.com/124&quot; data-og-url=&quot;https://noogoonaa.tistory.com/124&quot; data-og-image=&quot;https://scrap.kakaocdn.net/dn/bLmHPh/hyRoAVd26H/cfIR7CQe6K9y6pQqK4NRWK/img.png?width=800&amp;amp;height=451&amp;amp;face=0_0_800_451,https://scrap.kakaocdn.net/dn/cts3Xp/hyRm3Y0YD1/COq5JL9K2llTU8CzPolxUK/img.png?width=800&amp;amp;height=451&amp;amp;face=0_0_800_451,https://scrap.kakaocdn.net/dn/cmrY6g/hyRoyQEvwe/SlN5HJYXlpCGQjLvnmsPK0/img.png?width=1240&amp;amp;height=700&amp;amp;face=0_0_1240_700&quot;&gt;&lt;a href=&quot;https://noogoonaa.tistory.com/124&quot; target=&quot;_blank&quot; rel=&quot;noopener&quot; data-source-url=&quot;https://noogoonaa.tistory.com/124&quot;&gt;
&lt;div class=&quot;og-image&quot; style=&quot;background-image: url('https://scrap.kakaocdn.net/dn/bLmHPh/hyRoAVd26H/cfIR7CQe6K9y6pQqK4NRWK/img.png?width=800&amp;amp;height=451&amp;amp;face=0_0_800_451,https://scrap.kakaocdn.net/dn/cts3Xp/hyRm3Y0YD1/COq5JL9K2llTU8CzPolxUK/img.png?width=800&amp;amp;height=451&amp;amp;face=0_0_800_451,https://scrap.kakaocdn.net/dn/cmrY6g/hyRoyQEvwe/SlN5HJYXlpCGQjLvnmsPK0/img.png?width=1240&amp;amp;height=700&amp;amp;face=0_0_1240_700');&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;Next.js(React.js)에서 Canvas 사용법 with Typescript&lt;/p&gt;
&lt;p class=&quot;og-desc&quot; data-ke-size=&quot;size16&quot;&gt;여는 글 최근 Next.js에서 Canvas를 사용할 일이 있었습니다. 기존에 바닐라 자바스크립트에서는 공부를 했었지만, Next.js로는 해본적이 없었고, 따로 정리된 블로그가 딱히 없었습니다. 그래서 최근&lt;/p&gt;
&lt;p class=&quot;og-host&quot; data-ke-size=&quot;size16&quot;&gt;noogoonaa.tistory.com&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;pages/index.tsx&lt;/p&gt;
&lt;pre class=&quot;javascript&quot; data-ke-language=&quot;javascript&quot;&gt;&lt;code&gt;import { NextPage } from &quot;next&quot;;
import Canvas from &quot;@/components/Canvas&quot;;
import useCanvas from &quot;@/hooks/Canvas/useCanvas&quot;;

// 해당 코드 추가
let i = 0;

const Home: NextPage = () =&amp;gt; {
    const onAnimation = (ctx: CanvasRenderingContext2D) =&amp;gt; {
        ctx.clearRect(0, 0, 500, 500);
        // 상자가 애니메이션 되도록 처리
        ctx.fillRect(i % 300, 20, 30, 30);

        // 애니메이션 처리를 위한 부분
        i = i += 1 * 5;
    };

    const { canvasRef } = useCanvas({
        animate: onAnimation,
    });

    return (
        &amp;lt;&amp;gt;
            &amp;lt;Canvas canvasRef={canvasRef} /&amp;gt;
        &amp;lt;/&amp;gt;
    );
};

export default Home;&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;위에서 보던 영상과 같은 역할을 하는 프로젝트를 완성하였습니다.&lt;/p&gt;
&lt;hr contenteditable=&quot;false&quot; data-ke-type=&quot;horizontalRule&quot; data-ke-style=&quot;style1&quot; /&gt;
&lt;h2 data-ke-size=&quot;size26&quot;&gt;requestAnimationFrame 사전 지식&lt;/h2&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;requestAnimationFrame은 브라우저가 화면을 그리기 이전에, 호출되어지는 API입니다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;이 API는 콜백함수를 실행할 때, 하나의 인자를 전달해주는데,&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;DOMHighResTimeStamp라는 값을 같이 넘겨줍니다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;복잡하게 파고들면 어렵기에 간단히 말해서 requestAnimationFrame에 전달된 콜백 함수가 호출되는 timestamp라고 이해하면 편합니다.&lt;/p&gt;
&lt;hr contenteditable=&quot;false&quot; data-ke-type=&quot;horizontalRule&quot; data-ke-style=&quot;style1&quot; /&gt;
&lt;h2 data-ke-size=&quot;size26&quot;&gt;강제로 프레임을 낮추는 함수 작성&lt;/h2&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;먼저 다 작성한 코드를 보여드리겠습니다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;hooks/Canvas/useCanvas.tsx&lt;/p&gt;
&lt;pre class=&quot;typescript&quot;&gt;&lt;code&gt;import { RefObject, useEffect, useRef, useState } from &quot;react&quot;;

interface InitialProps {
	animate: (ctx: CanvasRenderingContext2D) =&amp;gt; void;
}

function useCanvas({ animate }: InitialProps) {
	const canvasRef: RefObject&amp;lt;HTMLCanvasElement&amp;gt; =
		useRef&amp;lt;HTMLCanvasElement&amp;gt;(null);
	const [ctx, setCtx] = useState&amp;lt;CanvasRenderingContext2D | null&amp;gt;(null);

	useEffect(() =&amp;gt; {
		if (canvasRef?.current) {
			const canvas = canvasRef.current;
			const context = canvas.getContext(&quot;2d&quot;);

			setCtx(context);
		}
	}, []);

	useEffect(() =&amp;gt; {
		let requestId: number;

		const callBackReqestAnimation = (fps: number) =&amp;gt; {
			let fpsInterval = 1000 / fps;
			let prevRenderTimestamp: number;

			const cb = (timestamp: number) =&amp;gt; {
				if (prevRenderTimestamp === undefined) {
					prevRenderTimestamp = window.performance.now();
				}

				const elapsed = timestamp - prevRenderTimestamp;

				if (elapsed &amp;gt;= fpsInterval) {
					prevRenderTimestamp = timestamp - (elapsed % fpsInterval);
					if (ctx) animate(ctx);
				}
				requestId = window.requestAnimationFrame(cb);
			};
			return cb;
		};

		const initRequestAnimation = (callback: (timestamp: number) =&amp;gt; void) =&amp;gt; {
			requestId = window.requestAnimationFrame(callback);
		};

		initRequestAnimation(callBackReqestAnimation(60));

		return () =&amp;gt; {
			window.cancelAnimationFrame(requestId);
		};
	}, [ctx, animate]);

	return {
		canvasRef,
	};
}

export default useCanvas;
&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;만약 이해가 되신다면 당신은 천재! 아래 내용은 더이상 안보셔도 됩니다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;하지만, 전 처음에 이해가 잘 안갔기에 한번 자세히 요목조목 뜯어 보겠습니다.&lt;/p&gt;
&lt;hr contenteditable=&quot;false&quot; data-ke-type=&quot;horizontalRule&quot; data-ke-style=&quot;style1&quot; /&gt;
&lt;h2 data-ke-size=&quot;size26&quot;&gt;자세히 살펴보기&lt;/h2&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 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;아까 사전지식 섹션에서 제가 브라우저는 초당 60프레임을 기준으로 렌더링 한다고 했습니다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;하지만, 문제가 되는것은 120Hz입니다.&lt;/p&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;120프레임 중 어떠한 조건에 한하여 애니메이션을 그리거나 안그리면 됩니다. 해당 로직으 바로 이 로직입니다.&lt;/p&gt;
&lt;pre class=&quot;typescript&quot;&gt;&lt;code&gt;...
const callBackReqestAnimation = (fps: number) =&amp;gt; {
	let fpsInterval = 1000 / fps;
	let prevRenderTimestamp: number;
	const cb = (timestamp: number) =&amp;gt; {
		if (prevRenderTimestamp === undefined) {
			prevRenderTimestamp = window.performance.now();
		}

		const elapsed = timestamp - prevRenderTimestamp;

		if (elapsed &amp;gt;= fpsInterval) {
			prevRenderTimestamp = timestamp - (elapsed % fpsInterval);
			if (ctx) animate(ctx);
		}
		requestId = window.requestAnimationFrame(cb);
	};
	return cb;
};
...
&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;1초는 1000ms입니다. 그렇다면 우리가 60프레임을 그릴경우 몇 밀리초마다 화면을 렌더링 해줘야 할까요?&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;바로 16.66666667(이하 17밀리 초)밀리 초 마다 화면을 그려주어야 합니다. 그 로직이 아래 로직입니다.&lt;/p&gt;
&lt;pre class=&quot;typescript&quot;&gt;&lt;code&gt;...
const callBackReqestAnimation = (fps: number) =&amp;gt; {
	// 1000밀리 초 / 원하는 프레임 = 렌더링 해야될 밀리초 값
	let fpsInterval = 1000 / fps;
	...
};
...
&lt;/code&gt;&lt;/pre&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;자 이제, 우리는 17밀리초마다 화면을 그려주어야 한다는것을 알 수 있게 되었습니다.&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;아까, 제가 requestAnimationFrame이 받는 콜백 매게변수로 타임스탬프 인자를 하나 전달해 준다고 했습니다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;그럼 이 함수를 가지고 현재 시간이 렌더링을 해야하는 순간인지 아닌지를 판단할 수 있게 됩니다.&lt;/p&gt;
&lt;pre class=&quot;typescript&quot;&gt;&lt;code&gt;**...
let fpsInterval = 1000 / fps;
let prevRenderTimestamp: number;
const cb = (timestamp: number) =&amp;gt; {
	// 만약 이전에 한번도 렌더링 된 값이 없다면 현재 시간을 넣어줌
	if (prevRenderTimestamp === undefined) {
		prevRenderTimestamp = window.performance.now();
	}

	// 현재 시간 - 이전 렌더링 된 시간 = 이전 렌더링 이후 경과된 시간
	const elapsed = timestamp - prevRenderTimestamp;

	// 이전 렌더링 이후 경과된 시간이 과연 렌더링 하는 시간과 같은지 판단하는 조건
	// 예를들어 17밀리초 마다 한번씩 그려야 하는데 경과된 시간이 13밀리초라면 그리지 않음
	// 하지만, 17밀리초 마다 한번씩 그려야 하는데 경과된 시간이 26밀리초라면 그림
	if (elapsed &amp;gt;= fpsInterval) {
		// 다음 렌더링 해야될 시간
		// 17밀리초마다 그려야 하지만 26밀리초에 그렸다면 남은 9밀리초는 다음 렌더링 시간에서 제외
		prevRenderTimestamp = timestamp - (elapsed % fpsInterval);

		// 렌더링
		if (ctx) animate(ctx);
	}
	requestId = window.requestAnimationFrame(cb);
};
...**
&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;그럼 어디 진짜 잘 동작하는지 확인을 해보겠습니다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;figure data-ke-type=&quot;video&quot; data-ke-style=&quot;alignCenter&quot; data-video-host=&quot;kakaotv&quot; data-video-url=&quot;https://tv.kakao.com/v/435280454&quot; data-video-thumbnail=&quot;https://scrap.kakaocdn.net/dn/YJvwr/hyRnchoYeL/9AtjV6ExOiedyy6hsmzHc0/img.jpg?width=644&amp;amp;height=1310&amp;amp;face=0_0_644_1310,https://scrap.kakaocdn.net/dn/JNrhl/hyRm1UrUF0/fdLHTje8cLlkRCsHdri1L1/img.jpg?width=644&amp;amp;height=1310&amp;amp;face=0_0_644_1310&quot; data-video-width=&quot;644&quot; data-video-height=&quot;1310&quot; data-video-origin-width=&quot;644&quot; data-video-origin-height=&quot;1310&quot; data-ke-mobilestyle=&quot;widthContent&quot; data-video-play-service=&quot;daum_tistory&quot;&gt;&lt;iframe src=&quot;https://play-tv.kakao.com/embed/player/cliplink/435280454?service=daum_tistory&quot; width=&quot;644&quot; height=&quot;1310&quot; frameborder=&quot;0&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;화면이 120hz까지 올라가도 애니메이션이 빨라지지 않는것을 확인할 수 있습니다.&lt;/p&gt;
&lt;hr contenteditable=&quot;false&quot; data-ke-type=&quot;horizontalRule&quot; data-ke-style=&quot;style1&quot; /&gt;
&lt;h2 data-ke-size=&quot;size26&quot;&gt;기술적인 한계&lt;/h2&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;이 코드에는 극명한 기술적인 한계가 존재합니다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;바로 주사율이 렌더링하는 주사율 보다 낮을때는 대응이 어렵다는 것 입니다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;이 부분은, 추후 좋은 방법이 있다면 또 공유하도록 하겠습니다.&lt;/p&gt;
&lt;hr contenteditable=&quot;false&quot; data-ke-type=&quot;horizontalRule&quot; data-ke-style=&quot;style5&quot; /&gt;
&lt;h2 data-ke-size=&quot;size26&quot;&gt;마무리&lt;/h2&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;생각보다 글이 많이 길어졌습니다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;로직을 설명하니 이렇게 길어지는군요&amp;hellip;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;다음에는 더 짧은 글을 작성할 수 있도록 노력해보겠습니다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;감사합니다.&lt;/p&gt;</description>
      <category>프로그래밍 언어/웹 프론트엔드</category>
      <author>방현준</author>
      <guid isPermaLink="true">https://noogoonaa.tistory.com/125</guid>
      <comments>https://noogoonaa.tistory.com/125#entry125comment</comments>
      <pubDate>Tue, 24 Jan 2023 18:58:51 +0900</pubDate>
    </item>
    <item>
      <title>Next.js(React.js)에서 Canvas 사용법 with Typescript</title>
      <link>https://noogoonaa.tistory.com/124</link>
      <description>&lt;p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-filename=&quot;edited_1_sQuSbqYHW-38cJXo3RsvWA.png&quot; data-origin-width=&quot;1240&quot; data-origin-height=&quot;700&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/ccCvwJ/btrW38GmWnX/4eEOt1pGPbsGIqO3OBOaL1/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/ccCvwJ/btrW38GmWnX/4eEOt1pGPbsGIqO3OBOaL1/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/ccCvwJ/btrW38GmWnX/4eEOt1pGPbsGIqO3OBOaL1/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FccCvwJ%2FbtrW38GmWnX%2F4eEOt1pGPbsGIqO3OBOaL1%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;1240&quot; height=&quot;700&quot; data-filename=&quot;edited_1_sQuSbqYHW-38cJXo3RsvWA.png&quot; data-origin-width=&quot;1240&quot; data-origin-height=&quot;700&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;/p&gt;
&lt;h2 data-ke-size=&quot;size26&quot;&gt;여는 글&lt;/h2&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;최근 Next.js에서 Canvas를 사용할 일이 있었습니다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;기존에 바닐라 자바스크립트에서는 공부를 했었지만, Next.js로는 해본적이 없었고, 따로 정리된 블로그가 딱히 없었습니다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;그래서 최근에 사용하면서 가장 사용하기 좋았던 방식을 한번 공유해 보도록 하겠습니다.&lt;/p&gt;
&lt;hr contenteditable=&quot;false&quot; data-ke-type=&quot;horizontalRule&quot; data-ke-style=&quot;style5&quot; /&gt;
&lt;h2 data-ke-size=&quot;size26&quot;&gt;Canvas란?&lt;/h2&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;Canvas는 HTML태그중 하나로 브라우저에서 도형 혹은 이미지들을 렌더링할 수 있는 요소중 하나입니다. 주로 게임 혹은 그래픽적인 요소를 브라우저에서 표현할 때 사용합니다.&lt;/p&gt;
&lt;hr contenteditable=&quot;false&quot; data-ke-type=&quot;horizontalRule&quot; data-ke-style=&quot;style1&quot; /&gt;
&lt;h2 data-ke-size=&quot;size26&quot;&gt;프로젝트 셋팅&lt;/h2&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;터미널에서 프로젝트를 타입스크립트로 생성합니다.&lt;/p&gt;
&lt;pre class=&quot;bash&quot; data-ke-language=&quot;bash&quot;&gt;&lt;code&gt;yarn create next-app canvas_example --typescript
---
✔ Would you like to use ESLint with this project? &amp;hellip; Yes
✔ Would you like to use `src/` directory with this project? &amp;hellip; No
✔ Would you like to use experimental `app/` directory with this project? &amp;hellip; No
✔ What import alias would you like configured? &amp;hellip; @/*&lt;/code&gt;&lt;/pre&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;pages/index.tsx&lt;/p&gt;
&lt;pre class=&quot;javascript&quot; data-ke-language=&quot;javascript&quot;&gt;&lt;code&gt;import { NextPage } from &quot;next&quot;;

const Home: NextPage = () =&amp;gt; {
  return (
    &amp;lt;div&amp;gt;테스트&amp;lt;/div&amp;gt;
  )
};

export default Home;&lt;/code&gt;&lt;/pre&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;styles/globals.css&lt;/p&gt;
&lt;pre id=&quot;code_1674484718874&quot; class=&quot;css&quot; data-ke-language=&quot;css&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;body {
	margin: 0;
}&lt;/code&gt;&lt;/pre&gt;
&lt;hr contenteditable=&quot;false&quot; data-ke-type=&quot;horizontalRule&quot; data-ke-style=&quot;style1&quot; /&gt;
&lt;h2 data-ke-size=&quot;size26&quot;&gt;Canvas 컴포넌트 생성 및 적용&lt;/h2&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;캔버스 태그를 가지는 컴포넌트를 생성하고 적용해보도록 합시다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;components/Canvas/index.tsx&lt;/p&gt;
&lt;pre class=&quot;routeros&quot;&gt;&lt;code&gt;const Canvas: React.FC = () =&amp;gt; {
	return &amp;lt;canvas width={500} height={500} /&amp;gt;;
};

export default Canvas;
&lt;/code&gt;&lt;/pre&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;pages/index.tsx&lt;/p&gt;
&lt;pre class=&quot;routeros&quot;&gt;&lt;code&gt;import Canvas from &quot;@/components/Canvas&quot;;
import { NextPage } from &quot;next&quot;;

const Home: NextPage = () =&amp;gt; {
    return &amp;lt;Canvas /&amp;gt;;
};

export default Home;
&lt;/code&gt;&lt;/pre&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;그러면 아래 사진처럼 canvas가 생성 된 것을 확인할 수 있습니다.&lt;/p&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-filename=&quot;blob&quot; data-origin-width=&quot;770&quot; data-origin-height=&quot;301&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/cbrhIs/btrWWsFRC1v/i9krEqHZuCJC8h5xBpraC0/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/cbrhIs/btrWWsFRC1v/i9krEqHZuCJC8h5xBpraC0/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/cbrhIs/btrWWsFRC1v/i9krEqHZuCJC8h5xBpraC0/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FcbrhIs%2FbtrWWsFRC1v%2Fi9krEqHZuCJC8h5xBpraC0%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;770&quot; height=&quot;301&quot; data-filename=&quot;blob&quot; data-origin-width=&quot;770&quot; data-origin-height=&quot;301&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;/p&gt;
&lt;hr contenteditable=&quot;false&quot; data-ke-type=&quot;horizontalRule&quot; data-ke-style=&quot;style1&quot; /&gt;
&lt;h2 data-ke-size=&quot;size26&quot;&gt;Canvas에 사각형 그리기&lt;/h2&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;우리는 canvas를 생성하는 컴포넌트를 만들었습니다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;하지만, canvas만 만든다고 해서 canvas를 사용할 수 있는것은 아닙니다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;그래서 컨텍스트를 받고 그 컨텍스트를 이용해 작은 사각형 하나를 만들어 보도록 하겠습니다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;components/Canvas/index.tsx&lt;/p&gt;
&lt;pre class=&quot;javascript&quot;&gt;&lt;code&gt;import React, { RefObject, useEffect, useRef, useState } from &quot;react&quot;;

const Canvas: React.FC = () =&amp;gt; {
	const canvasRef: RefObject&amp;lt;HTMLCanvasElement&amp;gt; =
		useRef&amp;lt;HTMLCanvasElement&amp;gt;(null);
	const [ctx, setCtx] = useState&amp;lt;CanvasRenderingContext2D | null&amp;gt;(null);

	// 컨텍스트 셋팅
	useEffect(() =&amp;gt; {
		if (canvasRef?.current) {
			const canvas = canvasRef.current;
			const context = canvas.getContext(&quot;2d&quot;);

			setCtx(context);
		}
	}, [canvasRef]);

	useEffect(() =&amp;gt; {
		let requestAnimationId: number;

		// 애니메이션 처리
		const onAnimation = () =&amp;gt; {
			if (ctx) {
				ctx.fillRect(20, 20, 30, 30);
			}
			requestAnimationId = window.requestAnimationFrame(onAnimation);
		};

		// 리퀘스트 애니메이션 초기화
		requestAnimationId = window.requestAnimationFrame(onAnimation);

		return () =&amp;gt; {
			// 기존 리퀘스트 애니메이션 캔슬
			window.cancelAnimationFrame(requestAnimationId);
		};
	}, [ctx]);

	return &amp;lt;canvas ref={canvasRef} width={500} height={500} /&amp;gt;;
};

export default Canvas;
&lt;/code&gt;&lt;/pre&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;코드가 길긴 하지만, 바닐라 자바스크립트에서 canvas를 사용해 보셨고, 리액트를 사용해 보셨다면 충분히 이해가 갈 코드입니다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;실행해보면 결과는 아래와 같습니다.&lt;/p&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-filename=&quot;blob&quot; data-origin-width=&quot;700&quot; data-origin-height=&quot;617&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/bZ3Puz/btrWXjWpktB/vNiZoaN0EwY5VtrlV972dK/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/bZ3Puz/btrWXjWpktB/vNiZoaN0EwY5VtrlV972dK/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/bZ3Puz/btrWXjWpktB/vNiZoaN0EwY5VtrlV972dK/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FbZ3Puz%2FbtrWXjWpktB%2FvNiZoaN0EwY5VtrlV972dK%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;700&quot; height=&quot;617&quot; data-filename=&quot;blob&quot; data-origin-width=&quot;700&quot; data-origin-height=&quot;617&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;/p&gt;
&lt;hr contenteditable=&quot;false&quot; data-ke-type=&quot;horizontalRule&quot; data-ke-style=&quot;style1&quot; /&gt;
&lt;h2 data-ke-size=&quot;size26&quot;&gt;Custom Hook을 사용하여 비즈니스 로직 분리&lt;/h2&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;우리는 canvas를 사용하여 사각형을 그렸습니다.&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;hooks/Canvas/useCanvas.tsx&lt;/p&gt;
&lt;pre class=&quot;javascript&quot;&gt;&lt;code&gt;import { RefObject, useEffect, useRef, useState } from &quot;react&quot;;

interface InitialProps {
	animate: (ctx: CanvasRenderingContext2D) =&amp;gt; void;
}

function useCanvas({ animate }: InitialProps) {
	const canvasRef: RefObject&amp;lt;HTMLCanvasElement&amp;gt; =
		useRef&amp;lt;HTMLCanvasElement&amp;gt;(null);
	const [ctx, setCtx] = useState&amp;lt;CanvasRenderingContext2D | null&amp;gt;(null);

	// 컨텍스트 셋팅
	useEffect(() =&amp;gt; {
		if (canvasRef?.current) {
			const canvas = canvasRef.current;
			const context = canvas.getContext(&quot;2d&quot;);

			setCtx(context);
		}
	}, []);

	// 애니메이션 처리
	useEffect(() =&amp;gt; {
		let requestId: number;

		const RequestAnimation = (ctx: CanvasRenderingContext2D | null) =&amp;gt; () =&amp;gt; {
			if (ctx) {
				animate(ctx);
			}
			// 애니메이션 콜백 반복
			requestId = window.requestAnimationFrame(RequestAnimation(ctx));
		};

		// 애니메이션 초기화
		requestId = window.requestAnimationFrame(RequestAnimation(ctx));

		return () =&amp;gt; {
			window.cancelAnimationFrame(requestId);
		};
	}, [ctx, animate]);

	return {
		canvasRef,
	};
}

export default useCanvas;
&lt;/code&gt;&lt;/pre&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;components/Canvas/index.tsx&lt;/p&gt;
&lt;pre class=&quot;routeros&quot;&gt;&lt;code&gt;import React, { RefObject } from &quot;react&quot;;

interface CanvasProps {
	canvasRef: RefObject&amp;lt;HTMLCanvasElement&amp;gt;;
}

const Canvas: React.FC&amp;lt;CanvasProps&amp;gt; = ({ canvasRef }) =&amp;gt; {
	return &amp;lt;canvas ref={canvasRef} width={500} height={500} /&amp;gt;;
};

export default Canvas;
&lt;/code&gt;&lt;/pre&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;pages/index.tsx&lt;/p&gt;
&lt;pre class=&quot;javascript&quot;&gt;&lt;code&gt;import { NextPage } from &quot;next&quot;;
import Canvas from &quot;@/components/Canvas&quot;;
import useCanvas from &quot;@/hooks/Canvas/useCanvas&quot;;

const Home: NextPage = () =&amp;gt; {
	// 애니메이션 처리 함수
	const onAnimation = (ctx: CanvasRenderingContext2D) =&amp;gt; {
		ctx.fillRect(20, 20, 30, 30);
	};

	const { canvasRef } = useCanvas({
		animate: onAnimation,
	});

	return &amp;lt;Canvas canvasRef={canvasRef} /&amp;gt;;
};

export default Home;
&lt;/code&gt;&lt;/pre&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;이제 컴포넌트가 아닌, Canvas 컴포넌트를 사용하는 곳에서도 애니메이션 핸들링이 가능해졌습니다.&lt;/p&gt;
&lt;hr contenteditable=&quot;false&quot; data-ke-type=&quot;horizontalRule&quot; data-ke-style=&quot;style1&quot; /&gt;
&lt;h3 data-ke-size=&quot;size23&quot;&gt;최종코드&lt;/h3&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;pages/index.tsx&lt;/p&gt;
&lt;pre&gt;&lt;code&gt;import { NextPage } from &quot;next&quot;;
import Canvas from &quot;@/components/Canvas&quot;;
import useCanvas from &quot;@/hooks/Canvas/useCanvas&quot;;

const Home: NextPage = () =&amp;gt; {
	// 애니메이션 처리 함수
	const onAnimation = (ctx: CanvasRenderingContext2D) =&amp;gt; {
		ctx.fillRect(20, 20, 30, 30);
	};

	const { canvasRef } = useCanvas({
		animate: onAnimation,
	});

	return &amp;lt;Canvas canvasRef={canvasRef} /&amp;gt;;
};

export default Home;
&lt;/code&gt;&lt;/pre&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;hooks/Canvas/useCanvas.tsx&lt;/p&gt;
&lt;pre&gt;&lt;code&gt;import { RefObject, useEffect, useRef, useState } from &quot;react&quot;;

interface InitialProps {
	animate: (ctx: CanvasRenderingContext2D) =&amp;gt; void;
}

function useCanvas({ animate }: InitialProps) {
	const canvasRef: RefObject&amp;lt;HTMLCanvasElement&amp;gt; =
		useRef&amp;lt;HTMLCanvasElement&amp;gt;(null);
	const [ctx, setCtx] = useState&amp;lt;CanvasRenderingContext2D | null&amp;gt;(null);

	// 컨텍스트 셋팅
	useEffect(() =&amp;gt; {
		if (canvasRef?.current) {
			const canvas = canvasRef.current;
			const context = canvas.getContext(&quot;2d&quot;);

			setCtx(context);
		}
	}, []);

	// 애니메이션 처리
	useEffect(() =&amp;gt; {
		let requestId: number;

		const RequestAnimation = (ctx: CanvasRenderingContext2D | null) =&amp;gt; () =&amp;gt; {
			if (ctx) {
				animate(ctx);
			}
			// 애니메이션 콜백 반복
			requestId = window.requestAnimationFrame(RequestAnimation(ctx));
		};

		// 애니메이션 초기화
		requestId = window.requestAnimationFrame(RequestAnimation(ctx));

		return () =&amp;gt; {
			window.cancelAnimationFrame(requestId);
		};
	}, [ctx, animate]);

	return {
		canvasRef,
	};
}

export default useCanvas;
&lt;/code&gt;&lt;/pre&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;components/Canvas/index.tsx&lt;/p&gt;
&lt;pre&gt;&lt;code&gt;import React, { RefObject } from &quot;react&quot;;

interface CanvasProps {
	canvasRef: RefObject&amp;lt;HTMLCanvasElement&amp;gt;;
}

const Canvas: React.FC&amp;lt;CanvasProps&amp;gt; = ({ canvasRef }) =&amp;gt; {
	return &amp;lt;canvas ref={canvasRef} width={500} height={500} /&amp;gt;;
};

export default Canvas;
&lt;/code&gt;&lt;/pre&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;styles/globals.css&lt;/p&gt;
&lt;pre id=&quot;code_1674545141080&quot; data-ke-language=&quot;css&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;body {
	margin: 0;
}&lt;/code&gt;&lt;/pre&gt;</description>
      <category>프로그래밍 언어/웹 프론트엔드</category>
      <author>방현준</author>
      <guid isPermaLink="true">https://noogoonaa.tistory.com/124</guid>
      <comments>https://noogoonaa.tistory.com/124#entry124comment</comments>
      <pubDate>Mon, 23 Jan 2023 23:42:20 +0900</pubDate>
    </item>
    <item>
      <title>[TIL] 작은 이미지 반복보다는 큰 이미지를 한번에 그리는게 성능에 좋다</title>
      <link>https://noogoonaa.tistory.com/123</link>
      <description>&lt;p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-filename=&quot;TIL.jpeg&quot; data-origin-width=&quot;1272&quot; data-origin-height=&quot;718&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/beQVWY/btrPQ4dw7zi/kGg5EEna6ylKLFr9AFKPE1/img.jpg&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/beQVWY/btrPQ4dw7zi/kGg5EEna6ylKLFr9AFKPE1/img.jpg&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/beQVWY/btrPQ4dw7zi/kGg5EEna6ylKLFr9AFKPE1/img.jpg&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FbeQVWY%2FbtrPQ4dw7zi%2FkGg5EEna6ylKLFr9AFKPE1%2Fimg.jpg&quot; onerror=&quot;this.onerror=null; this.src='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png'; this.srcset='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png';&quot; loading=&quot;lazy&quot; width=&quot;1272&quot; height=&quot;718&quot; data-filename=&quot;TIL.jpeg&quot; data-origin-width=&quot;1272&quot; data-origin-height=&quot;718&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;백그라운드가 패턴 방식이라 작은 이미지를 사용하여 이미지 사이즈를 낮추고&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;로드된 이미지를 여러번 반복하여 그리려고 했는데&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;찾아보니까 큰 이미지를 한번 로드해서 한번에 그리는게 더 웹 성능이 좋다고 한다&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;(나중에 정리해봐야겠다...)&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;참고&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;a href=&quot;https://stackoverflow.com/questions/14410994/images-in-browsers-performance-for-background-repeat-css&quot; target=&quot;_blank&quot; rel=&quot;noopener&quot;&gt;https://stackoverflow.com/questions/14410994/images-in-browsers-performance-for-background-repeat-css&lt;/a&gt;&lt;/p&gt;</description>
      <author>방현준</author>
      <guid isPermaLink="true">https://noogoonaa.tistory.com/123</guid>
      <comments>https://noogoonaa.tistory.com/123#entry123comment</comments>
      <pubDate>Fri, 28 Oct 2022 22:41:35 +0900</pubDate>
    </item>
    <item>
      <title>[TIL] 캔버스에서 elipse를 자제하자</title>
      <link>https://noogoonaa.tistory.com/122</link>
      <description>&lt;p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-filename=&quot;TIL.jpeg&quot; data-origin-width=&quot;1272&quot; data-origin-height=&quot;718&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/bScrMl/btrPP6DksiH/bksTu5IoS3LJqhtTzK9H6K/img.jpg&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/bScrMl/btrPP6DksiH/bksTu5IoS3LJqhtTzK9H6K/img.jpg&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/bScrMl/btrPP6DksiH/bksTu5IoS3LJqhtTzK9H6K/img.jpg&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FbScrMl%2FbtrPP6DksiH%2FbksTu5IoS3LJqhtTzK9H6K%2Fimg.jpg&quot; onerror=&quot;this.onerror=null; this.src='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png'; this.srcset='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png';&quot; loading=&quot;lazy&quot; width=&quot;1272&quot; height=&quot;718&quot; data-filename=&quot;TIL.jpeg&quot; data-origin-width=&quot;1272&quot; data-origin-height=&quot;718&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;좀 더 확인해봐야겠지만,&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;elipse는 연산이 꽤 걸리나보다&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;일단 기본적으로 총 12번의 연산이 필요하니까...&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;canvas에서 5개 쓰니까 프레임 드랍이 심하네...&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;(요거 나중에 한번 정리해봐야겠다...)&lt;/p&gt;</description>
      <category>TIL(Today I Learned)</category>
      <author>방현준</author>
      <guid isPermaLink="true">https://noogoonaa.tistory.com/122</guid>
      <comments>https://noogoonaa.tistory.com/122#entry122comment</comments>
      <pubDate>Fri, 28 Oct 2022 22:39:28 +0900</pubDate>
    </item>
    <item>
      <title>vscode(visual studio code)에서 이미지, 스타일(css, scss)등의 경로를 찾지 못하는 오류</title>
      <link>https://noogoonaa.tistory.com/121</link>
      <description>&lt;p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-filename=&quot;TIL.jpeg&quot; data-origin-width=&quot;1272&quot; data-origin-height=&quot;718&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/sXiSj/btrO0pwD6Ml/drZXQSd61uwzt2pxZkagv1/img.jpg&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/sXiSj/btrO0pwD6Ml/drZXQSd61uwzt2pxZkagv1/img.jpg&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/sXiSj/btrO0pwD6Ml/drZXQSd61uwzt2pxZkagv1/img.jpg&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FsXiSj%2FbtrO0pwD6Ml%2FdrZXQSd61uwzt2pxZkagv1%2Fimg.jpg&quot; onerror=&quot;this.onerror=null; this.src='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png'; this.srcset='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png';&quot; loading=&quot;lazy&quot; width=&quot;1272&quot; height=&quot;718&quot; data-filename=&quot;TIL.jpeg&quot; data-origin-width=&quot;1272&quot; data-origin-height=&quot;718&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;/p&gt;
&lt;hr contenteditable=&quot;false&quot; data-ke-type=&quot;horizontalRule&quot; data-ke-style=&quot;style6&quot; /&gt;
&lt;h3 data-ke-size=&quot;size23&quot;&gt;파일경로&lt;/h3&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-origin-width=&quot;496&quot; data-origin-height=&quot;190&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/Hnpz2/btrOZ89MDPg/xLzwwBb3DnwiyfhVc52K0K/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/Hnpz2/btrOZ89MDPg/xLzwwBb3DnwiyfhVc52K0K/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/Hnpz2/btrOZ89MDPg/xLzwwBb3DnwiyfhVc52K0K/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FHnpz2%2FbtrOZ89MDPg%2FxLzwwBb3DnwiyfhVc52K0K%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;496&quot; height=&quot;190&quot; data-origin-width=&quot;496&quot; data-origin-height=&quot;190&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;/p&gt;
&lt;hr contenteditable=&quot;false&quot; data-ke-type=&quot;horizontalRule&quot; data-ke-style=&quot;style1&quot; /&gt;
&lt;h3 data-ke-size=&quot;size23&quot;&gt;오류내용&lt;/h3&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;아래 사진처럼 VSCode(Visual Studio Code)에서 스타일 경로를 찾지 못하는 이슈가 발생했다.&lt;br /&gt;&lt;br /&gt;&lt;/p&gt;
&lt;p&gt;&lt;img style=&quot;text-align: center; caret-color: transparent; font-family: -apple-system, BlinkMacSystemFont, 'Helvetica Neue', 'Apple SD Gothic Neo', Arial, sans-serif; letter-spacing: 0px;&quot; src=&quot;https://blog.kakaocdn.net/dn/6o3mq/btrOZ98GJPJ/svQkKcZOoyhjGuSJk4VmWK/img.png&quot; width=&quot;524&quot; height=&quot;398&quot; data-origin-width=&quot;1412&quot; data-origin-height=&quot;1072&quot; data-is-animation=&quot;false&quot; /&gt;&lt;/p&gt;
&lt;hr contenteditable=&quot;false&quot; data-ke-type=&quot;horizontalRule&quot; data-ke-style=&quot;style1&quot; /&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;h3 data-ke-size=&quot;size23&quot;&gt;오류 해결&lt;/h3&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;이러한 현상이 발생하는 이유는 VSCode에서 경로를 제안하기 때문이다.&lt;br /&gt;따라서 &lt;a href=&quot;https://marketplace.visualstudio.com/items?itemName=christian-kohler.path-intellisense&quot; target=&quot;_blank&quot; rel=&quot;noopener&quot;&gt;Path Intellisense&lt;/a&gt; 확장 프로그램을 (설치가 안되어 있을 경우) 설치한 후&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;VSCode 설정으로 들어 간 후&lt;/p&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-origin-width=&quot;1122&quot; data-origin-height=&quot;736&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/dc3PEe/btrO1vXe7ST/Roc8Nro0TZbCd6Yshnkel0/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/dc3PEe/btrO1vXe7ST/Roc8Nro0TZbCd6Yshnkel0/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/dc3PEe/btrO1vXe7ST/Roc8Nro0TZbCd6Yshnkel0/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2Fdc3PEe%2FbtrO1vXe7ST%2FRoc8Nro0TZbCd6Yshnkel0%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;612&quot; height=&quot;401&quot; data-origin-width=&quot;1122&quot; data-origin-height=&quot;736&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;검색창에 typescript.suggest.paths를 입력해 주고 VSCode 자체 경로 제안을 해제해 준다.&lt;/p&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-origin-width=&quot;1444&quot; data-origin-height=&quot;542&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/SO6U2/btrOZJh7SFC/k9Wf9N4Arl0khYxkDeTZM0/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/SO6U2/btrOZJh7SFC/k9Wf9N4Arl0khYxkDeTZM0/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/SO6U2/btrOZJh7SFC/k9Wf9N4Arl0khYxkDeTZM0/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FSO6U2%2FbtrOZJh7SFC%2Fk9Wf9N4Arl0khYxkDeTZM0%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;1444&quot; height=&quot;542&quot; data-origin-width=&quot;1444&quot; data-origin-height=&quot;542&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;그럼 아래 사진처럼 정상적으로 나오게 된다.&lt;/p&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-origin-width=&quot;1376&quot; data-origin-height=&quot;1122&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/NfQQv/btrOZ823xp5/XYJluxMD1YrbuUn8EVZCC1/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/NfQQv/btrOZ823xp5/XYJluxMD1YrbuUn8EVZCC1/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/NfQQv/btrOZ823xp5/XYJluxMD1YrbuUn8EVZCC1/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FNfQQv%2FbtrOZ823xp5%2FXYJluxMD1YrbuUn8EVZCC1%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;1376&quot; height=&quot;1122&quot; data-origin-width=&quot;1376&quot; data-origin-height=&quot;1122&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;/p&gt;</description>
      <category>TIL(Today I Learned)</category>
      <author>방현준</author>
      <guid isPermaLink="true">https://noogoonaa.tistory.com/121</guid>
      <comments>https://noogoonaa.tistory.com/121#entry121comment</comments>
      <pubDate>Tue, 18 Oct 2022 23:48:58 +0900</pubDate>
    </item>
    <item>
      <title>FEConf 2022 참석 후기</title>
      <link>https://noogoonaa.tistory.com/120</link>
      <description>&lt;h3 data-ke-size=&quot;size23&quot;&gt;여는 글&lt;/h3&gt;
&lt;p&gt;&lt;figure class=&quot;imagegridblock&quot;&gt;
  &lt;div class=&quot;image-container&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/lsBGj/btrN5a1K20P/NYsVlfu5Zfo1EUWNaSSsKK/img.jpg&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/lsBGj/btrN5a1K20P/NYsVlfu5Zfo1EUWNaSSsKK/img.jpg&quot; data-is-animation=&quot;false&quot; data-origin-width=&quot;3000&quot; data-origin-height=&quot;4000&quot; data-filename=&quot;KakaoTalk_Photo_2022-10-08-21-15-06 023.jpeg&quot; style=&quot;width: 35.5814%; margin-right: 10px;&quot; data-widthpercent=&quot;36&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/lsBGj/btrN5a1K20P/NYsVlfu5Zfo1EUWNaSSsKK/img.jpg&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FlsBGj%2FbtrN5a1K20P%2FNYsVlfu5Zfo1EUWNaSSsKK%2Fimg.jpg&quot; onerror=&quot;this.onerror=null; this.src='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png'; this.srcset='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png';&quot; loading=&quot;lazy&quot; width=&quot;3000&quot; height=&quot;4000&quot;/&gt;&lt;/span&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/dct85J/btrN4ZMVCYx/60tsGKknSK5nA15mKglN41/img.jpg&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/dct85J/btrN4ZMVCYx/60tsGKknSK5nA15mKglN41/img.jpg&quot; data-is-animation=&quot;false&quot; data-origin-width=&quot;4000&quot; data-origin-height=&quot;3000&quot; data-filename=&quot;KakaoTalk_Photo_2022-10-08-21-15-06 022.jpeg&quot; data-widthpercent=&quot;64&quot; style=&quot;width: 63.2558%;&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/dct85J/btrN4ZMVCYx/60tsGKknSK5nA15mKglN41/img.jpg&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2Fdct85J%2FbtrN4ZMVCYx%2F60tsGKknSK5nA15mKglN41%2Fimg.jpg&quot; onerror=&quot;this.onerror=null; this.src='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png'; this.srcset='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png';&quot; loading=&quot;lazy&quot; width=&quot;4000&quot; height=&quot;3000&quot;/&gt;&lt;/span&gt;&lt;/div&gt;
&lt;/figure&gt;
&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;2022년 10월 08일 토요일&lt;br /&gt;FEConf 2022를 다녀왔습니다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;컨퍼런스를 다녀왔으면 후기를 써야하는것이 인지상정!&lt;br /&gt;후기를 작성하도록 하겠습니다.&lt;br /&gt;Let's get it!&lt;/p&gt;
&lt;hr contenteditable=&quot;false&quot; data-ke-type=&quot;horizontalRule&quot; data-ke-style=&quot;style6&quot; /&gt;
&lt;h3 data-ke-size=&quot;size23&quot;&gt;&lt;span style=&quot;font-family: AppleSDGothicNeo-Regular, 'Malgun Gothic', '맑은 고딕', dotum, 돋움, sans-serif;&quot;&gt;FEConf 2022 그리고 그 치열한 티켓팅&lt;/span&gt;&lt;/h3&gt;
&lt;p&gt;&lt;figure class=&quot;imagegridblock&quot;&gt;
  &lt;div class=&quot;image-container&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/buvpKs/btrN5atWNoU/IeyUF255II8R3RJifw1Jh0/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/buvpKs/btrN5atWNoU/IeyUF255II8R3RJifw1Jh0/img.png&quot; data-is-animation=&quot;false&quot; data-origin-width=&quot;2142&quot; data-origin-height=&quot;1808&quot; data-filename=&quot;메인페이지.png&quot; style=&quot;width: 54.5599%; margin-right: 10px;&quot; data-widthpercent=&quot;55.2&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/buvpKs/btrN5atWNoU/IeyUF255II8R3RJifw1Jh0/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FbuvpKs%2FbtrN5atWNoU%2FIeyUF255II8R3RJifw1Jh0%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;2142&quot; height=&quot;1808&quot;/&gt;&lt;/span&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/IeiOf/btrN5FHciX7/sB8ZSF0NbkJZaYLOZUVFPK/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/IeiOf/btrN5FHciX7/sB8ZSF0NbkJZaYLOZUVFPK/img.png&quot; data-origin-width=&quot;898&quot; data-origin-height=&quot;934&quot; data-is-animation=&quot;false&quot; data-filename=&quot;티켓 구매.png&quot; data-widthpercent=&quot;44.8&quot; style=&quot;width: 44.2774%;&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/IeiOf/btrN5FHciX7/sB8ZSF0NbkJZaYLOZUVFPK/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FIeiOf%2FbtrN5FHciX7%2FsB8ZSF0NbkJZaYLOZUVFPK%2Fimg.png&quot; onerror=&quot;this.onerror=null; this.src='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png'; this.srcset='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png';&quot; loading=&quot;lazy&quot; width=&quot;898&quot; height=&quot;934&quot;/&gt;&lt;/span&gt;&lt;/div&gt;
&lt;/figure&gt;
&lt;figure class=&quot;imagegridblock&quot;&gt;
  &lt;div class=&quot;image-container&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/udMnD/btrN9lH1vsD/EjclAceSFfedJyFOJTZzG0/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/udMnD/btrN9lH1vsD/EjclAceSFfedJyFOJTZzG0/img.png&quot; data-origin-width=&quot;1294&quot; data-origin-height=&quot;342&quot; data-is-animation=&quot;false&quot; data-filename=&quot;티켓팅 실패 1.png&quot; style=&quot;width: 44.4004%; margin-right: 10px;&quot; data-widthpercent=&quot;44.92&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/udMnD/btrN9lH1vsD/EjclAceSFfedJyFOJTZzG0/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FudMnD%2FbtrN9lH1vsD%2FEjclAceSFfedJyFOJTZzG0%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;1294&quot; height=&quot;342&quot;/&gt;&lt;/span&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/nuncz/btrN3TzXPmr/1whi3ONfYzBdp8XunGCFdK/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/nuncz/btrN3TzXPmr/1whi3ONfYzBdp8XunGCFdK/img.png&quot; data-is-animation=&quot;false&quot; data-origin-width=&quot;1336&quot; data-origin-height=&quot;288&quot; data-filename=&quot;티켓팅 실패 2.png&quot; style=&quot;width: 54.4368%;&quot; data-widthpercent=&quot;55.08&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/nuncz/btrN3TzXPmr/1whi3ONfYzBdp8XunGCFdK/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2Fnuncz%2FbtrN3TzXPmr%2F1whi3ONfYzBdp8XunGCFdK%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;1336&quot; height=&quot;288&quot;/&gt;&lt;/span&gt;&lt;/div&gt;
&lt;/figure&gt;
&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;font-family: AppleSDGothicNeo-Regular, 'Malgun Gothic', '맑은 고딕', dotum, 돋움, sans-serif;&quot;&gt;2022년 코로나 시기에 참석하는 두번째 오프라인 컨퍼런스 FEConf2022! &lt;/span&gt;&lt;br /&gt;&lt;span style=&quot;font-family: AppleSDGothicNeo-Regular, 'Malgun Gothic', '맑은 고딕', dotum, 돋움, sans-serif;&quot;&gt;처음 세션 리스트를 볼 때 아 이건 꼭 참석해야겠다는 생각이 들었습니다.&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;font-family: AppleSDGothicNeo-Regular, 'Malgun Gothic', '맑은 고딕', dotum, 돋움, sans-serif;&quot;&gt;그리고 운이 좋게도 티켓팅에 성공했습니다. &lt;/span&gt;&lt;br /&gt;&lt;span style=&quot;font-family: AppleSDGothicNeo-Regular, 'Malgun Gothic', '맑은 고딕', dotum, 돋움, sans-serif;&quot;&gt;하지만, 아쉽게도 같이 가기로 한 회사 동료들은 티켓팅에 실패해 이번엔 저 혼자 다녀오게 되었습니다. &lt;/span&gt;&lt;br /&gt;&lt;span style=&quot;font-family: AppleSDGothicNeo-Regular, 'Malgun Gothic', '맑은 고딕', dotum, 돋움, sans-serif;&quot;&gt;(외로운 컨퍼런스&amp;hellip;.)&lt;/span&gt;&lt;/p&gt;
&lt;hr contenteditable=&quot;false&quot; data-ke-type=&quot;horizontalRule&quot; data-ke-style=&quot;style1&quot; /&gt;
&lt;h3 data-ke-size=&quot;size23&quot;&gt;&lt;span style=&quot;font-family: AppleSDGothicNeo-Regular, 'Malgun Gothic', '맑은 고딕', dotum, 돋움, sans-serif;&quot;&gt;FEConf 2022 세션 및 참여한 세션&lt;/span&gt;&lt;/h3&gt;
&lt;h4 data-ke-size=&quot;size20&quot;&gt;&lt;span style=&quot;font-family: AppleSDGothicNeo-Regular, 'Malgun Gothic', '맑은 고딕', dotum, 돋움, sans-serif;&quot;&gt;A Track&lt;/span&gt;&lt;/h4&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-filename=&quot;발표 세션 A Track.png&quot; data-origin-width=&quot;2266&quot; data-origin-height=&quot;1708&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/dsQS6f/btrN4E96koD/JPHylwAfkF6p0SDayRyZL0/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/dsQS6f/btrN4E96koD/JPHylwAfkF6p0SDayRyZL0/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/dsQS6f/btrN4E96koD/JPHylwAfkF6p0SDayRyZL0/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FdsQS6f%2FbtrN4E96koD%2FJPHylwAfkF6p0SDayRyZL0%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;2266&quot; height=&quot;1708&quot; data-filename=&quot;발표 세션 A Track.png&quot; data-origin-width=&quot;2266&quot; data-origin-height=&quot;1708&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;/p&gt;
&lt;h4 data-ke-size=&quot;size20&quot;&gt;&lt;span style=&quot;font-family: AppleSDGothicNeo-Regular, 'Malgun Gothic', '맑은 고딕', dotum, 돋움, sans-serif;&quot;&gt;B Track&lt;/span&gt;&lt;/h4&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-filename=&quot;발표 세션 B Track.png&quot; data-origin-width=&quot;2094&quot; data-origin-height=&quot;1728&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/QuWxv/btrN6nM5mtQ/d0Mu3cEv1Y6tskNUkAubs1/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/QuWxv/btrN6nM5mtQ/d0Mu3cEv1Y6tskNUkAubs1/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/QuWxv/btrN6nM5mtQ/d0Mu3cEv1Y6tskNUkAubs1/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FQuWxv%2FbtrN6nM5mtQ%2Fd0Mu3cEv1Y6tskNUkAubs1%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;2094&quot; height=&quot;1728&quot; data-filename=&quot;발표 세션 B Track.png&quot; data-origin-width=&quot;2094&quot; data-origin-height=&quot;1728&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;font-family: AppleSDGothicNeo-Regular, 'Malgun Gothic', '맑은 고딕', dotum, 돋움, sans-serif;&quot;&gt;FEConf는 총 2트랙(A track, B track)으로 구성되어져 있었습니다. &lt;br /&gt;이 두 트랙 중 마음에 드는 세션에 참여하여 듣는데 저는 아래와 같은 트랙을 들었습니다.&lt;/span&gt;&lt;/p&gt;
&lt;ul style=&quot;list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li&gt;&lt;span style=&quot;font-family: AppleSDGothicNeo-Regular, 'Malgun Gothic', '맑은 고딕', dotum, 돋움, sans-serif;&quot;&gt;Design System, 형태를 넘어서&lt;/span&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;font-family: AppleSDGothicNeo-Regular, 'Malgun Gothic', '맑은 고딕', dotum, 돋움, sans-serif;&quot;&gt;이소영(flex)&lt;/span&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt;&lt;span style=&quot;font-family: AppleSDGothicNeo-Regular, 'Malgun Gothic', '맑은 고딕', dotum, 돋움, sans-serif;&quot;&gt;@webtoon/psd 라이브러리 개발기&lt;/span&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;font-family: AppleSDGothicNeo-Regular, 'Malgun Gothic', '맑은 고딕', dotum, 돋움, sans-serif;&quot;&gt;이동현(네이버웹툰)/강예형(네이버웹툰)&lt;/span&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt;&lt;span style=&quot;font-family: AppleSDGothicNeo-Regular, 'Malgun Gothic', '맑은 고딕', dotum, 돋움, sans-serif;&quot;&gt;프론트엔드 DDD를 만나다&lt;/span&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;font-family: AppleSDGothicNeo-Regular, 'Malgun Gothic', '맑은 고딕', dotum, 돋움, sans-serif;&quot;&gt;박세문(라포랩스)&lt;/span&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt;&lt;span style=&quot;font-family: AppleSDGothicNeo-Regular, 'Malgun Gothic', '맑은 고딕', dotum, 돋움, sans-serif;&quot;&gt;텍스트 에디터? 그게 뭘 만드는 건데?&lt;/span&gt;
&lt;ul style=&quot;list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li&gt;&lt;span style=&quot;font-family: AppleSDGothicNeo-Regular, 'Malgun Gothic', '맑은 고딕', dotum, 돋움, sans-serif;&quot;&gt;노용구(네이버)&lt;/span&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt;&lt;span style=&quot;font-family: AppleSDGothicNeo-Regular, 'Malgun Gothic', '맑은 고딕', dotum, 돋움, sans-serif;&quot;&gt;Edge Computing으로 프론트엔드 포텐셜 끌어올리기&lt;/span&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;font-family: AppleSDGothicNeo-Regular, 'Malgun Gothic', '맑은 고딕', dotum, 돋움, sans-serif;&quot;&gt;김혜성(당근마켓)&lt;/span&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;/ul&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;font-family: AppleSDGothicNeo-Regular, 'Malgun Gothic', '맑은 고딕', dotum, 돋움, sans-serif;&quot;&gt;그럼 간단한 회고에 들어가보겠습니다.&lt;/span&gt;&lt;/p&gt;
&lt;hr contenteditable=&quot;false&quot; data-ke-type=&quot;horizontalRule&quot; data-ke-style=&quot;style1&quot; /&gt;
&lt;h3 data-ke-size=&quot;size23&quot;&gt;&lt;span style=&quot;font-family: AppleSDGothicNeo-Regular, 'Malgun Gothic', '맑은 고딕', dotum, 돋움, sans-serif;&quot;&gt;Design System, 형태를 넘어서&lt;/span&gt;&lt;/h3&gt;
&lt;p&gt;&lt;figure class=&quot;imagegridblock&quot;&gt;
  &lt;div class=&quot;image-container&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/bHqGqU/btrN32KrMGW/STP0skfKsD947s8V7M4uD0/img.jpg&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/bHqGqU/btrN32KrMGW/STP0skfKsD947s8V7M4uD0/img.jpg&quot; data-is-animation=&quot;false&quot; data-origin-width=&quot;4000&quot; data-origin-height=&quot;3000&quot; data-filename=&quot;KakaoTalk_Photo_2022-10-08-21-15-06 010.jpeg&quot; style=&quot;width: 49.4186%; margin-right: 10px;&quot; data-widthpercent=&quot;50&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/bHqGqU/btrN32KrMGW/STP0skfKsD947s8V7M4uD0/img.jpg&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FbHqGqU%2FbtrN32KrMGW%2FSTP0skfKsD947s8V7M4uD0%2Fimg.jpg&quot; onerror=&quot;this.onerror=null; this.src='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png'; this.srcset='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png';&quot; loading=&quot;lazy&quot; width=&quot;4000&quot; height=&quot;3000&quot;/&gt;&lt;/span&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/dxyBvw/btrN384GH7a/vd8QeJTxT1PnSWcF4QcK8K/img.jpg&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/dxyBvw/btrN384GH7a/vd8QeJTxT1PnSWcF4QcK8K/img.jpg&quot; data-is-animation=&quot;false&quot; data-origin-width=&quot;4000&quot; data-origin-height=&quot;3000&quot; data-filename=&quot;KakaoTalk_Photo_2022-10-08-21-15-06 011.jpeg&quot; style=&quot;width: 49.4186%;&quot; data-widthpercent=&quot;50&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/dxyBvw/btrN384GH7a/vd8QeJTxT1PnSWcF4QcK8K/img.jpg&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FdxyBvw%2FbtrN384GH7a%2Fvd8QeJTxT1PnSWcF4QcK8K%2Fimg.jpg&quot; onerror=&quot;this.onerror=null; this.src='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png'; this.srcset='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png';&quot; loading=&quot;lazy&quot; width=&quot;4000&quot; height=&quot;3000&quot;/&gt;&lt;/span&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/dp5jfH/btrN4DwzERn/hhdGltsEFKy6nKv1qxDaEK/img.jpg&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/dp5jfH/btrN4DwzERn/hhdGltsEFKy6nKv1qxDaEK/img.jpg&quot; data-is-animation=&quot;false&quot; data-origin-width=&quot;4000&quot; data-origin-height=&quot;3000&quot; data-filename=&quot;KakaoTalk_Photo_2022-10-08-21-15-06 012.jpeg&quot; style=&quot;width: 49.4186%; margin-right: 10px; margin-top: 10px;&quot; data-widthpercent=&quot;50&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/dp5jfH/btrN4DwzERn/hhdGltsEFKy6nKv1qxDaEK/img.jpg&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2Fdp5jfH%2FbtrN4DwzERn%2FhhdGltsEFKy6nKv1qxDaEK%2Fimg.jpg&quot; onerror=&quot;this.onerror=null; this.src='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png'; this.srcset='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png';&quot; loading=&quot;lazy&quot; width=&quot;4000&quot; height=&quot;3000&quot;/&gt;&lt;/span&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/bPLZSL/btrN3TzXWnV/wCG4aqhOGWJFavzC3WvSB1/img.jpg&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/bPLZSL/btrN3TzXWnV/wCG4aqhOGWJFavzC3WvSB1/img.jpg&quot; data-is-animation=&quot;false&quot; data-origin-width=&quot;4000&quot; data-origin-height=&quot;3000&quot; data-filename=&quot;KakaoTalk_Photo_2022-10-08-21-15-06 015.jpeg&quot; style=&quot;width: 49.4186%; margin-top: 10px;&quot; data-widthpercent=&quot;50&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/bPLZSL/btrN3TzXWnV/wCG4aqhOGWJFavzC3WvSB1/img.jpg&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FbPLZSL%2FbtrN3TzXWnV%2FwCG4aqhOGWJFavzC3WvSB1%2Fimg.jpg&quot; onerror=&quot;this.onerror=null; this.src='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png'; this.srcset='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png';&quot; loading=&quot;lazy&quot; width=&quot;4000&quot; height=&quot;3000&quot;/&gt;&lt;/span&gt;&lt;/div&gt;
&lt;/figure&gt;
&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;font-family: AppleSDGothicNeo-Regular, 'Malgun Gothic', '맑은 고딕', dotum, 돋움, sans-serif;&quot;&gt;사내에서 디자인 시스템을 개발한다고 하면 한번쯤은 고민했던 커스텀의 다양성을 플렉슬은 어떻게 해결해 나갔는지에 대한 이야기를 담은 세션이었습니다.&lt;/span&gt;&lt;/p&gt;
&lt;h4 data-ke-size=&quot;size20&quot;&gt;&lt;span style=&quot;font-family: AppleSDGothicNeo-Regular, 'Malgun Gothic', '맑은 고딕', dotum, 돋움, sans-serif;&quot;&gt;내용&lt;/span&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;span style=&quot;font-family: AppleSDGothicNeo-Regular, 'Malgun Gothic', '맑은 고딕', dotum, 돋움, sans-serif;&quot;&gt;디자인 시스템의 주요목표는 개발 및 디자인의 효율화를 높이기 위함&lt;/span&gt;&lt;/li&gt;
&lt;li&gt;&lt;span style=&quot;font-family: AppleSDGothicNeo-Regular, 'Malgun Gothic', '맑은 고딕', dotum, 돋움, sans-serif;&quot;&gt;하지만, 디자인 시스템은 곧 커스텀의 제약을 둔다는 의미임&lt;/span&gt;&lt;/li&gt;
&lt;li&gt;&lt;span style=&quot;font-family: AppleSDGothicNeo-Regular, 'Malgun Gothic', '맑은 고딕', dotum, 돋움, sans-serif;&quot;&gt;커스텀의 제약을 줌 으로써 효율화는 증대가 되지만, 기능을 추가할 경우 복잡성이 증가할 수 있음&lt;/span&gt;&lt;/li&gt;
&lt;li&gt;&lt;span style=&quot;font-family: AppleSDGothicNeo-Regular, 'Malgun Gothic', '맑은 고딕', dotum, 돋움, sans-serif;&quot;&gt;디자인 시스템의 복잡성이 증가할수록 디자인시스템의 코드와 성능의 병목이 발생할 수 있음&lt;/span&gt;
&lt;ul style=&quot;list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li&gt;&lt;span style=&quot;font-family: AppleSDGothicNeo-Regular, 'Malgun Gothic', '맑은 고딕', dotum, 돋움, sans-serif;&quot;&gt;if-else, if-else&amp;hellip;.&lt;/span&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt;&lt;span style=&quot;font-family: AppleSDGothicNeo-Regular, 'Malgun Gothic', '맑은 고딕', dotum, 돋움, sans-serif;&quot;&gt;디자인 시스템을 4가지의 요소로 분리&lt;/span&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;font-family: AppleSDGothicNeo-Regular, 'Malgun Gothic', '맑은 고딕', dotum, 돋움, sans-serif;&quot;&gt;형태(기본 스타일)&lt;/span&gt;&lt;/li&gt;
&lt;li&gt;&lt;span style=&quot;font-family: AppleSDGothicNeo-Regular, 'Malgun Gothic', '맑은 고딕', dotum, 돋움, sans-serif;&quot;&gt;기능&lt;/span&gt;&lt;/li&gt;
&lt;li&gt;&lt;span style=&quot;font-family: AppleSDGothicNeo-Regular, 'Malgun Gothic', '맑은 고딕', dotum, 돋움, sans-serif;&quot;&gt;점근성&lt;/span&gt;&lt;/li&gt;
&lt;li&gt;&lt;span style=&quot;font-family: AppleSDGothicNeo-Regular, 'Malgun Gothic', '맑은 고딕', dotum, 돋움, sans-serif;&quot;&gt;커스텀&lt;/span&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt;&lt;span style=&quot;font-family: AppleSDGothicNeo-Regular, 'Malgun Gothic', '맑은 고딕', dotum, 돋움, sans-serif;&quot;&gt;플렉슬의 리니어 디자인 시스템의 원칙&lt;/span&gt;
&lt;ul style=&quot;list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li&gt;&lt;span style=&quot;font-family: AppleSDGothicNeo-Regular, 'Malgun Gothic', '맑은 고딕', dotum, 돋움, sans-serif;&quot;&gt;기능은 형태와 독립적으로 구성&lt;/span&gt;
&lt;ul style=&quot;list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li&gt;&lt;span style=&quot;font-family: AppleSDGothicNeo-Regular, 'Malgun Gothic', '맑은 고딕', dotum, 돋움, sans-serif;&quot;&gt;체크박스와 라디오 버튼 같은 경우 형태만 다를 뿐 기능은 같을 수 밖에 없다.&lt;/span&gt;&lt;/li&gt;
&lt;li&gt;&lt;span style=&quot;font-family: AppleSDGothicNeo-Regular, 'Malgun Gothic', '맑은 고딕', dotum, 돋움, sans-serif;&quot;&gt;이런 경우는 트리거 컴포넌트를 이용해서 비즈니스 로직과 컴포넌트를 분리하여 사용한다.&lt;/span&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt;&lt;span style=&quot;font-family: AppleSDGothicNeo-Regular, 'Malgun Gothic', '맑은 고딕', dotum, 돋움, sans-serif;&quot;&gt;시스템에서 기본적으로 정의한 기본 동작을 보장한다&lt;/span&gt;
&lt;ul style=&quot;list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li&gt;&lt;span style=&quot;font-family: AppleSDGothicNeo-Regular, 'Malgun Gothic', '맑은 고딕', dotum, 돋움, sans-serif;&quot;&gt;기본 기능의 추가는 신중하게 정해야 한다.&lt;/span&gt;&lt;/li&gt;
&lt;li&gt;&lt;span style=&quot;font-family: AppleSDGothicNeo-Regular, 'Malgun Gothic', '맑은 고딕', dotum, 돋움, sans-serif;&quot;&gt;기본 기능이 적을 경우&lt;/span&gt;
&lt;ul style=&quot;list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li&gt;&lt;span style=&quot;font-family: AppleSDGothicNeo-Regular, 'Malgun Gothic', '맑은 고딕', dotum, 돋움, sans-serif;&quot;&gt;파편화 발생&lt;/span&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt;&lt;span style=&quot;font-family: AppleSDGothicNeo-Regular, 'Malgun Gothic', '맑은 고딕', dotum, 돋움, sans-serif;&quot;&gt;기본 기능이 많을 경우&lt;/span&gt;
&lt;ul style=&quot;list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li&gt;&lt;span style=&quot;font-family: AppleSDGothicNeo-Regular, 'Malgun Gothic', '맑은 고딕', dotum, 돋움, sans-serif;&quot;&gt;병목 발생&lt;/span&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt;&lt;span style=&quot;font-family: AppleSDGothicNeo-Regular, 'Malgun Gothic', '맑은 고딕', dotum, 돋움, sans-serif;&quot;&gt;컴포넌트의 기본 기능이 아닌것은 정의하지 않는다.&lt;/span&gt;&lt;/li&gt;
&lt;li&gt;&lt;span style=&quot;font-family: AppleSDGothicNeo-Regular, 'Malgun Gothic', '맑은 고딕', dotum, 돋움, sans-serif;&quot;&gt;구체적인 타입을 정의 하지 말고 넓게 가져가자&lt;/span&gt;
&lt;ul style=&quot;list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li&gt;&lt;span style=&quot;font-family: AppleSDGothicNeo-Regular, 'Malgun Gothic', '맑은 고딕', dotum, 돋움, sans-serif;&quot;&gt;완성형을 지향하지 말고 조합형을 지향하자&lt;/span&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt;&lt;span style=&quot;font-family: AppleSDGothicNeo-Regular, 'Malgun Gothic', '맑은 고딕', dotum, 돋움, sans-serif;&quot;&gt;최소한의 제약만 가진다&lt;/span&gt;
&lt;ul style=&quot;list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li&gt;&lt;span style=&quot;font-family: AppleSDGothicNeo-Regular, 'Malgun Gothic', '맑은 고딕', dotum, 돋움, sans-serif;&quot;&gt;자유로운 커스텀 영역이 존재할 수 있다&lt;/span&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt;&lt;span style=&quot;font-family: AppleSDGothicNeo-Regular, 'Malgun Gothic', '맑은 고딕', dotum, 돋움, sans-serif;&quot;&gt;그러나 이러한 방식은 결국 잦은 반복을 발생하고 피로도가 증가하게 된다.&lt;/span&gt;
&lt;ul style=&quot;list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li&gt;&lt;span style=&quot;font-family: AppleSDGothicNeo-Regular, 'Malgun Gothic', '맑은 고딕', dotum, 돋움, sans-serif;&quot;&gt;플렉슬은 이러한 경우 확장성으로 빼고 패키지 형태로 제공하도록 하고 있다.&lt;/span&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;/ul&gt;
&lt;h4 data-ke-size=&quot;size20&quot;&gt;&lt;span style=&quot;font-family: AppleSDGothicNeo-Regular, 'Malgun Gothic', '맑은 고딕', dotum, 돋움, sans-serif;&quot;&gt;좋았던 점&lt;/span&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;span style=&quot;font-family: AppleSDGothicNeo-Regular, 'Malgun Gothic', '맑은 고딕', dotum, 돋움, sans-serif;&quot;&gt;다저안 시스템을 개발할 때 한번쯤 고민하게 되는 커스텀에 대한 문제점을 플렉슬에서는 어떻게 처리하고 있는지 잘 알 수 있었음&lt;/span&gt;&lt;/li&gt;
&lt;li&gt;&lt;span style=&quot;font-family: AppleSDGothicNeo-Regular, 'Malgun Gothic', '맑은 고딕', dotum, 돋움, sans-serif;&quot;&gt;디자인 시스템을 단순한 컴포넌트 모음집이 아닌 다양한 관점에서 볼 수 있는 세션이었음&lt;/span&gt;&lt;/li&gt;
&lt;li&gt;&lt;span style=&quot;font-family: AppleSDGothicNeo-Regular, 'Malgun Gothic', '맑은 고딕', dotum, 돋움, sans-serif;&quot;&gt;플렉슬의 리니어 디자인 시스템이 어떻게 구현되어 있고 사용되어지고 있는지를 코드로 쉽게 볼 수 있었음&lt;/span&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;h4 data-ke-size=&quot;size20&quot;&gt;&lt;span style=&quot;font-family: AppleSDGothicNeo-Regular, 'Malgun Gothic', '맑은 고딕', dotum, 돋움, sans-serif;&quot;&gt;아쉬웠던 점&lt;/span&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;span style=&quot;font-family: AppleSDGothicNeo-Regular, 'Malgun Gothic', '맑은 고딕', dotum, 돋움, sans-serif;&quot;&gt;플렉슬의 리니어 디자인 시스템이 어떻게 확장성을 제공하고 있는지 알 수 있는 내용이 없어서 아쉬웠음&lt;/span&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;h4 data-ke-size=&quot;size20&quot;&gt;&lt;span style=&quot;font-family: AppleSDGothicNeo-Regular, 'Malgun Gothic', '맑은 고딕', dotum, 돋움, sans-serif;&quot;&gt;후기&lt;/span&gt;&lt;/h4&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;br /&gt;(무려 버전이 3.0이라고 하셨음&amp;hellip;) &lt;br /&gt;사내에는 아직 디자인 시스템을 도입할 여건은 안되지만, &lt;br /&gt;현재 개발되어진 컴포넌트들을 대상으로 오늘 알았던 내용을 적용해 볼 수도 있지 않을까? &lt;br /&gt;라는 생각을 가지게 만드는 세션이었습니다.&lt;/span&gt;&lt;/p&gt;
&lt;hr contenteditable=&quot;false&quot; data-ke-type=&quot;horizontalRule&quot; data-ke-style=&quot;style1&quot; /&gt;
&lt;h3 data-ke-size=&quot;size23&quot;&gt;&lt;span style=&quot;font-family: AppleSDGothicNeo-Regular, 'Malgun Gothic', '맑은 고딕', dotum, 돋움, sans-serif;&quot;&gt;@webtoon/psd 라이브러리 개발기&lt;/span&gt;&lt;/h3&gt;
&lt;p&gt;&lt;figure class=&quot;imagegridblock&quot;&gt;
  &lt;div class=&quot;image-container&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/vcjus/btrN8AZHOZ8/eh64WKE2ykIKmmwGgJlEA1/img.jpg&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/vcjus/btrN8AZHOZ8/eh64WKE2ykIKmmwGgJlEA1/img.jpg&quot; data-is-animation=&quot;false&quot; data-origin-width=&quot;4000&quot; data-origin-height=&quot;3000&quot; data-filename=&quot;KakaoTalk_Photo_2022-10-08-21-15-06 009.jpeg&quot; style=&quot;width: 32.5581%; margin-right: 10px;&quot; data-widthpercent=&quot;33.33&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/vcjus/btrN8AZHOZ8/eh64WKE2ykIKmmwGgJlEA1/img.jpg&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2Fvcjus%2FbtrN8AZHOZ8%2Feh64WKE2ykIKmmwGgJlEA1%2Fimg.jpg&quot; onerror=&quot;this.onerror=null; this.src='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png'; this.srcset='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png';&quot; loading=&quot;lazy&quot; width=&quot;4000&quot; height=&quot;3000&quot;/&gt;&lt;/span&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/ePLis3/btrN9qvLF15/xB7xYKLmYhGIHvlNqKHmgK/img.jpg&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/ePLis3/btrN9qvLF15/xB7xYKLmYhGIHvlNqKHmgK/img.jpg&quot; data-is-animation=&quot;false&quot; data-origin-width=&quot;4000&quot; data-origin-height=&quot;3000&quot; data-filename=&quot;KakaoTalk_Photo_2022-10-08-21-15-06 008.jpeg&quot; style=&quot;width: 32.5581%; margin-right: 10px;&quot; data-widthpercent=&quot;33.33&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/ePLis3/btrN9qvLF15/xB7xYKLmYhGIHvlNqKHmgK/img.jpg&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FePLis3%2FbtrN9qvLF15%2FxB7xYKLmYhGIHvlNqKHmgK%2Fimg.jpg&quot; onerror=&quot;this.onerror=null; this.src='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png'; this.srcset='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png';&quot; loading=&quot;lazy&quot; width=&quot;4000&quot; height=&quot;3000&quot;/&gt;&lt;/span&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/oRxTw/btrN32jolFc/uSKWQ3iMvjzDRUjPTRXud0/img.jpg&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/oRxTw/btrN32jolFc/uSKWQ3iMvjzDRUjPTRXud0/img.jpg&quot; data-is-animation=&quot;false&quot; data-origin-width=&quot;4000&quot; data-origin-height=&quot;3000&quot; data-filename=&quot;KakaoTalk_Photo_2022-10-08-21-15-06 007.jpeg&quot; style=&quot;width: 32.5581%;&quot; data-widthpercent=&quot;33.34&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/oRxTw/btrN32jolFc/uSKWQ3iMvjzDRUjPTRXud0/img.jpg&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FoRxTw%2FbtrN32jolFc%2FuSKWQ3iMvjzDRUjPTRXud0%2Fimg.jpg&quot; onerror=&quot;this.onerror=null; this.src='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png'; this.srcset='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png';&quot; loading=&quot;lazy&quot; width=&quot;4000&quot; height=&quot;3000&quot;/&gt;&lt;/span&gt;&lt;/div&gt;
&lt;/figure&gt;
&lt;figure class=&quot;imagegridblock&quot;&gt;
  &lt;div class=&quot;image-container&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/cpXgW0/btrN4wYye9u/EyvjU7DEULTRqzBoJKscX0/img.jpg&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/cpXgW0/btrN4wYye9u/EyvjU7DEULTRqzBoJKscX0/img.jpg&quot; data-is-animation=&quot;false&quot; data-origin-width=&quot;4000&quot; data-origin-height=&quot;3000&quot; data-filename=&quot;KakaoTalk_Photo_2022-10-08-21-15-06 006.jpeg&quot; style=&quot;width: 32.5581%; margin-right: 10px;&quot; data-widthpercent=&quot;33.33&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/cpXgW0/btrN4wYye9u/EyvjU7DEULTRqzBoJKscX0/img.jpg&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FcpXgW0%2FbtrN4wYye9u%2FEyvjU7DEULTRqzBoJKscX0%2Fimg.jpg&quot; onerror=&quot;this.onerror=null; this.src='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png'; this.srcset='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png';&quot; loading=&quot;lazy&quot; width=&quot;4000&quot; height=&quot;3000&quot;/&gt;&lt;/span&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/bt1ME8/btrN39o1SUG/lSqeMLuZzYBukcI7pUqI9k/img.jpg&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/bt1ME8/btrN39o1SUG/lSqeMLuZzYBukcI7pUqI9k/img.jpg&quot; data-is-animation=&quot;false&quot; data-origin-width=&quot;4000&quot; data-origin-height=&quot;3000&quot; data-filename=&quot;KakaoTalk_Photo_2022-10-08-21-15-06 005.jpeg&quot; data-widthpercent=&quot;33.33&quot; style=&quot;width: 32.5581%; margin-right: 10px;&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/bt1ME8/btrN39o1SUG/lSqeMLuZzYBukcI7pUqI9k/img.jpg&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2Fbt1ME8%2FbtrN39o1SUG%2FlSqeMLuZzYBukcI7pUqI9k%2Fimg.jpg&quot; onerror=&quot;this.onerror=null; this.src='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png'; this.srcset='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png';&quot; loading=&quot;lazy&quot; width=&quot;4000&quot; height=&quot;3000&quot;/&gt;&lt;/span&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/ccEEGa/btrN6n0DmW2/XTMSxlZVDXp0OSOyIpuGyK/img.jpg&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/ccEEGa/btrN6n0DmW2/XTMSxlZVDXp0OSOyIpuGyK/img.jpg&quot; data-is-animation=&quot;false&quot; data-origin-width=&quot;4000&quot; data-origin-height=&quot;3000&quot; data-filename=&quot;KakaoTalk_Photo_2022-10-08-21-15-06 003.jpeg&quot; style=&quot;width: 32.5581%;&quot; data-widthpercent=&quot;33.34&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/ccEEGa/btrN6n0DmW2/XTMSxlZVDXp0OSOyIpuGyK/img.jpg&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FccEEGa%2FbtrN6n0DmW2%2FXTMSxlZVDXp0OSOyIpuGyK%2Fimg.jpg&quot; onerror=&quot;this.onerror=null; this.src='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png'; this.srcset='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png';&quot; loading=&quot;lazy&quot; width=&quot;4000&quot; height=&quot;3000&quot;/&gt;&lt;/span&gt;&lt;/div&gt;
&lt;/figure&gt;
&lt;figure class=&quot;imagegridblock&quot;&gt;
  &lt;div class=&quot;image-container&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/vFpcL/btrN3T7K4vZ/ZfOEprwULolj1BmCHVlmO0/img.jpg&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/vFpcL/btrN3T7K4vZ/ZfOEprwULolj1BmCHVlmO0/img.jpg&quot; data-is-animation=&quot;false&quot; data-origin-width=&quot;4000&quot; data-origin-height=&quot;3000&quot; data-filename=&quot;KakaoTalk_Photo_2022-10-08-21-15-06 002.jpeg&quot; data-widthpercent=&quot;50&quot; style=&quot;width: 49.4186%; margin-right: 10px;&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/vFpcL/btrN3T7K4vZ/ZfOEprwULolj1BmCHVlmO0/img.jpg&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FvFpcL%2FbtrN3T7K4vZ%2FZfOEprwULolj1BmCHVlmO0%2Fimg.jpg&quot; onerror=&quot;this.onerror=null; this.src='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png'; this.srcset='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png';&quot; loading=&quot;lazy&quot; width=&quot;4000&quot; height=&quot;3000&quot;/&gt;&lt;/span&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/B8j95/btrOce9Fw4d/pjQHFsbDKbeLZ4Us663aw1/img.jpg&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/B8j95/btrOce9Fw4d/pjQHFsbDKbeLZ4Us663aw1/img.jpg&quot; data-is-animation=&quot;false&quot; data-origin-width=&quot;4000&quot; data-origin-height=&quot;3000&quot; data-filename=&quot;KakaoTalk_Photo_2022-10-08-21-15-06 001.jpeg&quot; style=&quot;width: 49.4186%;&quot; data-widthpercent=&quot;50&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/B8j95/btrOce9Fw4d/pjQHFsbDKbeLZ4Us663aw1/img.jpg&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FB8j95%2FbtrOce9Fw4d%2FpjQHFsbDKbeLZ4Us663aw1%2Fimg.jpg&quot; onerror=&quot;this.onerror=null; this.src='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png'; this.srcset='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png';&quot; loading=&quot;lazy&quot; width=&quot;4000&quot; height=&quot;3000&quot;/&gt;&lt;/span&gt;&lt;/div&gt;
&lt;/figure&gt;
&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;font-family: AppleSDGothicNeo-Regular, 'Malgun Gothic', '맑은 고딕', dotum, 돋움, sans-serif;&quot;&gt;포토샵 파일을 분석하고 이것을 파싱하여 웹 브라우저에서 볼 수 있도록 도와주는 @webtoon/psd라는 라이브러리를 개발한 내용을 공유하는 세션입니다.&lt;/span&gt;&lt;/p&gt;
&lt;h4 data-ke-size=&quot;size20&quot;&gt;&lt;span style=&quot;font-family: AppleSDGothicNeo-Regular, 'Malgun Gothic', '맑은 고딕', dotum, 돋움, sans-serif;&quot;&gt;내용&lt;/span&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;span style=&quot;font-family: AppleSDGothicNeo-Regular, 'Malgun Gothic', '맑은 고딕', dotum, 돋움, sans-serif;&quot;&gt;네이버 웹툰에서 활동하는 작가분들이 psd 파일을 올릴 경우 파일 내용을 미리볼 수 있는 기능이 필요&lt;/span&gt;&lt;/li&gt;
&lt;li&gt;&lt;span style=&quot;font-family: AppleSDGothicNeo-Regular, 'Malgun Gothic', '맑은 고딕', dotum, 돋움, sans-serif;&quot;&gt;psd.js라는 패키지가 존재하지만, 이 패키지는 1메가가 넘는 사이즈이며, 속도도 상당히 느렸음, 심지어 psb(대용량 포토샵 파일) 및 한글 지원이 안되었음&amp;hellip;&lt;/span&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;font-family: AppleSDGothicNeo-Regular, 'Malgun Gothic', '맑은 고딕', dotum, 돋움, sans-serif;&quot;&gt;&lt;a href=&quot;https://www.npmjs.com/package/psd&quot;&gt;https://www.npmjs.com/package/psd&lt;/a&gt;&lt;/span&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt;&lt;span style=&quot;font-family: AppleSDGothicNeo-Regular, 'Malgun Gothic', '맑은 고딕', dotum, 돋움, sans-serif;&quot;&gt;위 제약사항으로 인해 직접 포토샵 파일을 미리볼 수 있는 패키지를 개발하기로 결정&lt;/span&gt;&lt;/li&gt;
&lt;li&gt;&lt;span style=&quot;font-family: AppleSDGothicNeo-Regular, 'Malgun Gothic', '맑은 고딕', dotum, 돋움, sans-serif;&quot;&gt;포토샵의 파일 포맷 구조를 참고하여 바이너리 파일을 직접 분석&lt;/span&gt;
&lt;ul style=&quot;list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li&gt;&lt;span style=&quot;font-family: AppleSDGothicNeo-Regular, 'Malgun Gothic', '맑은 고딕', dotum, 돋움, sans-serif;&quot;&gt;&lt;a href=&quot;https://www.adobe.com/devnet-apps/photoshop/fileformatashtml/&quot;&gt;https://www.adobe.com/devnet-apps/photoshop/fileformatashtml/&lt;/a&gt;&lt;/span&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt;&lt;span style=&quot;font-family: AppleSDGothicNeo-Regular, 'Malgun Gothic', '맑은 고딕', dotum, 돋움, sans-serif;&quot;&gt;분석한 파일을 기반으로 메타데이터를 얻어서 디코딩을 하여 웹에 포토샵 파일의 내용을 출력할 수 있게 됨&lt;/span&gt;
&lt;ul style=&quot;list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li&gt;&lt;span style=&quot;font-family: AppleSDGothicNeo-Regular, 'Malgun Gothic', '맑은 고딕', dotum, 돋움, sans-serif;&quot;&gt;psd.js에 비해 용량은 1/10로 줄었고, 7베 빠른 실행속도와 psb및 한글을 지원할 수 있게 됨&lt;/span&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt;&lt;span style=&quot;font-family: AppleSDGothicNeo-Regular, 'Malgun Gothic', '맑은 고딕', dotum, 돋움, sans-serif;&quot;&gt;또한, 여기서 wasm을 적용하여 디코딩 속도를 단축해 더 빠른 성능을 내기 위해 최적화 진행&lt;/span&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;font-family: AppleSDGothicNeo-Regular, 'Malgun Gothic', '맑은 고딕', dotum, 돋움, sans-serif;&quot;&gt;크롬에서는 자바스크립트 최적화가 꽤 잘되어 있어서 큰 성능을 내지 못하였지만, 파이어폭스, 사파리 등에서는 꽤 큰 성능을 높일 수 있었음&lt;/span&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt;&lt;span style=&quot;font-family: AppleSDGothicNeo-Regular, 'Malgun Gothic', '맑은 고딕', dotum, 돋움, sans-serif;&quot;&gt;자세한 내용은 &lt;a href=&quot;https://d2.naver.com/helloworld/6631477&quot;&gt;https://d2.naver.com/helloworld/6631477&lt;/a&gt; 참고&lt;/span&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;h4 data-ke-size=&quot;size20&quot;&gt;&lt;span style=&quot;font-family: AppleSDGothicNeo-Regular, 'Malgun Gothic', '맑은 고딕', dotum, 돋움, sans-serif;&quot;&gt;좋았던 점&lt;/span&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;span style=&quot;font-family: AppleSDGothicNeo-Regular, 'Malgun Gothic', '맑은 고딕', dotum, 돋움, sans-serif;&quot;&gt;직접 바이너리 파일을 분석하여 이것을 활용하여 라이브러리를 만들었다는 생각을 했다는 점에서 놀라웠음&lt;/span&gt;&lt;/li&gt;
&lt;li&gt;&lt;span style=&quot;font-family: AppleSDGothicNeo-Regular, 'Malgun Gothic', '맑은 고딕', dotum, 돋움, sans-serif;&quot;&gt;wasm을 직접 도입한 이야기를 들을 수 있어서 좋았음&lt;/span&gt;&lt;/li&gt;
&lt;li&gt;&lt;span style=&quot;font-family: AppleSDGothicNeo-Regular, 'Malgun Gothic', '맑은 고딕', dotum, 돋움, sans-serif;&quot;&gt;네이버 웹툰에서 프론트엔드 개발자가 어떠한 일을 하는지 알 수 있었음&lt;/span&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;h4 data-ke-size=&quot;size20&quot;&gt;&lt;span style=&quot;font-family: AppleSDGothicNeo-Regular, 'Malgun Gothic', '맑은 고딕', dotum, 돋움, sans-serif;&quot;&gt;아쉬웠던 점&lt;/span&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;span style=&quot;font-family: AppleSDGothicNeo-Regular, 'Malgun Gothic', '맑은 고딕', dotum, 돋움, sans-serif;&quot;&gt;포토샵 바이너리 분석에 대한 내용이 주를 이루어서 잘 이해가 안가는 부분이 많았음&lt;/span&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;h4 data-ke-size=&quot;size20&quot;&gt;&lt;span style=&quot;font-family: AppleSDGothicNeo-Regular, 'Malgun Gothic', '맑은 고딕', dotum, 돋움, sans-serif;&quot;&gt;후기&lt;/span&gt;&lt;/h4&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;나중에 기회가 된다면 @webtoon/psd 패키지를 한번 까봐야겠습니다.&lt;/span&gt;&lt;/p&gt;
&lt;h4 data-ke-size=&quot;size20&quot;&gt;&lt;span style=&quot;font-family: AppleSDGothicNeo-Regular, 'Malgun Gothic', '맑은 고딕', dotum, 돋움, sans-serif;&quot;&gt;@webtoon/psd&lt;/span&gt;&lt;/h4&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;a href=&quot;https://github.com/webtoon/psd&quot;&gt;https://github.com/webtoon/psd&lt;/a&gt;&lt;/span&gt;&lt;/p&gt;
&lt;hr contenteditable=&quot;false&quot; data-ke-type=&quot;horizontalRule&quot; data-ke-style=&quot;style1&quot; /&gt;
&lt;h3 data-ke-size=&quot;size23&quot;&gt;&lt;span style=&quot;font-family: AppleSDGothicNeo-Regular, 'Malgun Gothic', '맑은 고딕', dotum, 돋움, sans-serif;&quot;&gt;프론트엔드 DDD(Domain Driven Design)를 만나다&lt;/span&gt;&lt;/h3&gt;
&lt;p&gt;&lt;figure class=&quot;imagegridblock&quot;&gt;
  &lt;div class=&quot;image-container&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/exDIyH/btrN9rBsjKa/iIw4ohpU2pEXlgI7gqK2w0/img.jpg&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/exDIyH/btrN9rBsjKa/iIw4ohpU2pEXlgI7gqK2w0/img.jpg&quot; data-is-animation=&quot;false&quot; data-origin-width=&quot;4000&quot; data-origin-height=&quot;3000&quot; data-filename=&quot;KakaoTalk_Photo_2022-10-08-21-15-18 005.jpeg&quot; style=&quot;width: 49.4186%; margin-right: 10px;&quot; data-widthpercent=&quot;50&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/exDIyH/btrN9rBsjKa/iIw4ohpU2pEXlgI7gqK2w0/img.jpg&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FexDIyH%2FbtrN9rBsjKa%2FiIw4ohpU2pEXlgI7gqK2w0%2Fimg.jpg&quot; onerror=&quot;this.onerror=null; this.src='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png'; this.srcset='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png';&quot; loading=&quot;lazy&quot; width=&quot;4000&quot; height=&quot;3000&quot;/&gt;&lt;/span&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/bTD0cc/btrN5kpMdK9/fjAW8wKVNrqoK9NiBXPHZ1/img.jpg&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/bTD0cc/btrN5kpMdK9/fjAW8wKVNrqoK9NiBXPHZ1/img.jpg&quot; data-is-animation=&quot;false&quot; data-origin-width=&quot;4000&quot; data-origin-height=&quot;3000&quot; data-filename=&quot;KakaoTalk_Photo_2022-10-08-21-15-18 004.jpeg&quot; style=&quot;width: 49.4186%;&quot; data-widthpercent=&quot;50&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/bTD0cc/btrN5kpMdK9/fjAW8wKVNrqoK9NiBXPHZ1/img.jpg&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FbTD0cc%2FbtrN5kpMdK9%2FfjAW8wKVNrqoK9NiBXPHZ1%2Fimg.jpg&quot; onerror=&quot;this.onerror=null; this.src='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png'; this.srcset='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png';&quot; loading=&quot;lazy&quot; width=&quot;4000&quot; height=&quot;3000&quot;/&gt;&lt;/span&gt;&lt;/div&gt;
&lt;/figure&gt;
&lt;figure class=&quot;imagegridblock&quot;&gt;
  &lt;div class=&quot;image-container&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/rKTnR/btrN9k3oMJB/6jtMi78LkX78G3SOSEzF4k/img.jpg&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/rKTnR/btrN9k3oMJB/6jtMi78LkX78G3SOSEzF4k/img.jpg&quot; data-is-animation=&quot;false&quot; data-origin-width=&quot;4000&quot; data-origin-height=&quot;3000&quot; data-filename=&quot;KakaoTalk_Photo_2022-10-08-21-15-17 001.jpeg&quot; style=&quot;width: 49.4186%; margin-right: 10px;&quot; data-widthpercent=&quot;50&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/rKTnR/btrN9k3oMJB/6jtMi78LkX78G3SOSEzF4k/img.jpg&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FrKTnR%2FbtrN9k3oMJB%2F6jtMi78LkX78G3SOSEzF4k%2Fimg.jpg&quot; onerror=&quot;this.onerror=null; this.src='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png'; this.srcset='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png';&quot; loading=&quot;lazy&quot; width=&quot;4000&quot; height=&quot;3000&quot;/&gt;&lt;/span&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/bNML89/btrN9sf4Amb/JcdpZ8zfzhnVY5Ajsaidb1/img.jpg&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/bNML89/btrN9sf4Amb/JcdpZ8zfzhnVY5Ajsaidb1/img.jpg&quot; data-is-animation=&quot;false&quot; data-origin-width=&quot;4000&quot; data-origin-height=&quot;3000&quot; data-widthpercent=&quot;50&quot; data-filename=&quot;KakaoTalk_Photo_2022-10-08-21-18-18 029.jpeg&quot; style=&quot;width: 49.4186%;&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/bNML89/btrN9sf4Amb/JcdpZ8zfzhnVY5Ajsaidb1/img.jpg&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FbNML89%2FbtrN9sf4Amb%2FJcdpZ8zfzhnVY5Ajsaidb1%2Fimg.jpg&quot; onerror=&quot;this.onerror=null; this.src='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png'; this.srcset='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png';&quot; loading=&quot;lazy&quot; width=&quot;4000&quot; height=&quot;3000&quot;/&gt;&lt;/span&gt;&lt;/div&gt;
&lt;/figure&gt;
&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-filename=&quot;KakaoTalk_Photo_2022-10-08-21-18-09 026.jpeg&quot; data-origin-width=&quot;4000&quot; data-origin-height=&quot;3000&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/HU9gE/btrN3US9mb2/eaoMei3w04tnUNkFYVFVw0/img.jpg&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/HU9gE/btrN3US9mb2/eaoMei3w04tnUNkFYVFVw0/img.jpg&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/HU9gE/btrN3US9mb2/eaoMei3w04tnUNkFYVFVw0/img.jpg&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FHU9gE%2FbtrN3US9mb2%2FeaoMei3w04tnUNkFYVFVw0%2Fimg.jpg&quot; onerror=&quot;this.onerror=null; this.src='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png'; this.srcset='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png';&quot; loading=&quot;lazy&quot; width=&quot;4000&quot; height=&quot;3000&quot; data-filename=&quot;KakaoTalk_Photo_2022-10-08-21-18-09 026.jpeg&quot; data-origin-width=&quot;4000&quot; data-origin-height=&quot;3000&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;font-family: AppleSDGothicNeo-Regular, 'Malgun Gothic', '맑은 고딕', dotum, 돋움, sans-serif;&quot;&gt;프론트엔드에서 DDD(Domain Driven Design)를 적용하기 위한 기본적인 이론과 컨셉 그리고 실제로 적용을 하면 프로젝트 구조는 어떻게 되는지에 대해서 설명한 세션이다.&lt;/span&gt;&lt;/p&gt;
&lt;h4 data-ke-size=&quot;size20&quot;&gt;&lt;span style=&quot;font-family: AppleSDGothicNeo-Regular, 'Malgun Gothic', '맑은 고딕', dotum, 돋움, sans-serif;&quot;&gt;내용&lt;/span&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;span style=&quot;font-family: AppleSDGothicNeo-Regular, 'Malgun Gothic', '맑은 고딕', dotum, 돋움, sans-serif;&quot;&gt;그동안 백엔드에서는 MSA와 더불어 DDD와 관련한 연구가 꾸준히 되고 있지만, 프론트엔드에서는 그러한 시도가 많이 안되고 있음&lt;/span&gt;&lt;/li&gt;
&lt;li&gt;&lt;span style=&quot;font-family: AppleSDGothicNeo-Regular, 'Malgun Gothic', '맑은 고딕', dotum, 돋움, sans-serif;&quot;&gt;백엔드의 DDD와 프론트엔드의 DDD는 큰 차이가 없음&lt;/span&gt;&lt;/li&gt;
&lt;li&gt;&lt;span style=&quot;font-family: AppleSDGothicNeo-Regular, 'Malgun Gothic', '맑은 고딕', dotum, 돋움, sans-serif;&quot;&gt;DDD(Domain-Driven Design)란, 도메인 패턴을 중심에 놓고 설계하는 방식을 말함&lt;/span&gt;&lt;/li&gt;
&lt;li&gt;&lt;span style=&quot;font-family: AppleSDGothicNeo-Regular, 'Malgun Gothic', '맑은 고딕', dotum, 돋움, sans-serif;&quot;&gt;DDD의 CQRS는 프론트엔드에서 상태관리로 사용하는 Redux의 덕스 패턴과 유사함&lt;/span&gt;&lt;/li&gt;
&lt;li&gt;&lt;span style=&quot;font-family: AppleSDGothicNeo-Regular, 'Malgun Gothic', '맑은 고딕', dotum, 돋움, sans-serif;&quot;&gt;DDD는 두가지의 영역으로 나눌 수 있음&lt;/span&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;font-family: AppleSDGothicNeo-Regular, 'Malgun Gothic', '맑은 고딕', dotum, 돋움, sans-serif;&quot;&gt;Strategic Design&lt;/span&gt;&lt;/li&gt;
&lt;li&gt;&lt;span style=&quot;font-family: AppleSDGothicNeo-Regular, 'Malgun Gothic', '맑은 고딕', dotum, 돋움, sans-serif;&quot;&gt;Tactical Design&lt;/span&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt;&lt;span style=&quot;font-family: AppleSDGothicNeo-Regular, 'Malgun Gothic', '맑은 고딕', dotum, 돋움, sans-serif;&quot;&gt;DDD는 먼저 모든 사람들이 DDD내에서 사용되는 용어를 공통되고 명확하게 정의해야 시간 정약 및 의사소통 에러를 막을 수 있음, 이를 유비쿼터스 랭귀지(Ubiquitous Language)라고 함. 아래는 DDD내에서 주로 사용되는 용어를 나열한 것&lt;/span&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;font-family: AppleSDGothicNeo-Regular, 'Malgun Gothic', '맑은 고딕', dotum, 돋움, sans-serif;&quot;&gt;도메인&lt;/span&gt;&lt;/li&gt;
&lt;li&gt;&lt;span style=&quot;font-family: AppleSDGothicNeo-Regular, 'Malgun Gothic', '맑은 고딕', dotum, 돋움, sans-serif;&quot;&gt;도메인 모델&lt;/span&gt;&lt;/li&gt;
&lt;li&gt;&lt;span style=&quot;font-family: AppleSDGothicNeo-Regular, 'Malgun Gothic', '맑은 고딕', dotum, 돋움, sans-serif;&quot;&gt;Entity&lt;/span&gt;&lt;/li&gt;
&lt;li&gt;&lt;span style=&quot;font-family: AppleSDGothicNeo-Regular, 'Malgun Gothic', '맑은 고딕', dotum, 돋움, sans-serif;&quot;&gt;Value Object&lt;/span&gt;&lt;/li&gt;
&lt;li&gt;&lt;span style=&quot;font-family: AppleSDGothicNeo-Regular, 'Malgun Gothic', '맑은 고딕', dotum, 돋움, sans-serif;&quot;&gt;Aggregate&lt;/span&gt;&lt;/li&gt;
&lt;li&gt;&lt;span style=&quot;font-family: AppleSDGothicNeo-Regular, 'Malgun Gothic', '맑은 고딕', dotum, 돋움, sans-serif;&quot;&gt;Service&lt;/span&gt;&lt;/li&gt;
&lt;li&gt;&lt;span style=&quot;font-family: AppleSDGothicNeo-Regular, 'Malgun Gothic', '맑은 고딕', dotum, 돋움, sans-serif;&quot;&gt;Bounded Context&lt;/span&gt;&lt;/li&gt;
&lt;li&gt;&lt;span style=&quot;font-family: AppleSDGothicNeo-Regular, 'Malgun Gothic', '맑은 고딕', dotum, 돋움, sans-serif;&quot;&gt;Context Map&lt;/span&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt;&lt;span style=&quot;font-family: AppleSDGothicNeo-Regular, 'Malgun Gothic', '맑은 고딕', dotum, 돋움, sans-serif;&quot;&gt;DDD의 레이어드 구조는 총 4가지로 구성되어져 있음&lt;/span&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;font-family: AppleSDGothicNeo-Regular, 'Malgun Gothic', '맑은 고딕', dotum, 돋움, sans-serif;&quot;&gt;User Interface 계층(UI 계층)&lt;/span&gt;&lt;/li&gt;
&lt;li&gt;&lt;span style=&quot;font-family: AppleSDGothicNeo-Regular, 'Malgun Gothic', '맑은 고딕', dotum, 돋움, sans-serif;&quot;&gt;Application 계층&lt;/span&gt;&lt;/li&gt;
&lt;li&gt;&lt;span style=&quot;font-family: AppleSDGothicNeo-Regular, 'Malgun Gothic', '맑은 고딕', dotum, 돋움, sans-serif;&quot;&gt;Domain 계층&lt;/span&gt;&lt;/li&gt;
&lt;li&gt;&lt;span style=&quot;font-family: AppleSDGothicNeo-Regular, 'Malgun Gothic', '맑은 고딕', dotum, 돋움, sans-serif;&quot;&gt;Infrastructure 계층&lt;/span&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt;&lt;span style=&quot;font-family: AppleSDGothicNeo-Regular, 'Malgun Gothic', '맑은 고딕', dotum, 돋움, sans-serif;&quot;&gt;DDD의 헥사고날 아키텍쳐는 각 레이어 마다 어디에도 의존하지 않는 구조를 의미&lt;/span&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;font-family: AppleSDGothicNeo-Regular, 'Malgun Gothic', '맑은 고딕', dotum, 돋움, sans-serif;&quot;&gt;Domain&lt;/span&gt;&lt;/li&gt;
&lt;li&gt;&lt;span style=&quot;font-family: AppleSDGothicNeo-Regular, 'Malgun Gothic', '맑은 고딕', dotum, 돋움, sans-serif;&quot;&gt;Use Cases&lt;/span&gt;&lt;/li&gt;
&lt;li&gt;&lt;span style=&quot;font-family: AppleSDGothicNeo-Regular, 'Malgun Gothic', '맑은 고딕', dotum, 돋움, sans-serif;&quot;&gt;Infrastructure&lt;/span&gt;&lt;/li&gt;
&lt;li&gt;&lt;span style=&quot;font-family: AppleSDGothicNeo-Regular, 'Malgun Gothic', '맑은 고딕', dotum, 돋움, sans-serif;&quot;&gt;Adapter&lt;/span&gt;&lt;/li&gt;
&lt;li&gt;&lt;span style=&quot;font-family: AppleSDGothicNeo-Regular, 'Malgun Gothic', '맑은 고딕', dotum, 돋움, sans-serif;&quot;&gt;UI&lt;/span&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt;&lt;span style=&quot;font-family: AppleSDGothicNeo-Regular, 'Malgun Gothic', '맑은 고딕', dotum, 돋움, sans-serif;&quot;&gt;이 프론트엔드의 DDD 방법론은 복잡한 비즈니스 로직을 간결하게 하기 위한 방법론임, 따라서 엄청나게 복잡한 로직이 아니라면 DDD를 적용할 이유는 없음&lt;/span&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;h4 data-ke-size=&quot;size20&quot;&gt;&lt;span style=&quot;font-family: AppleSDGothicNeo-Regular, 'Malgun Gothic', '맑은 고딕', dotum, 돋움, sans-serif;&quot;&gt;좋았던 점&lt;/span&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;span style=&quot;font-family: AppleSDGothicNeo-Regular, 'Malgun Gothic', '맑은 고딕', dotum, 돋움, sans-serif;&quot;&gt;백엔드에 DDD에 대해서 듣긴 했지만, 아예 모르는 상태였음, 이 세션을 통해서 DDD에 대해서 얕게나마 알 수 있었음&lt;/span&gt;&lt;/li&gt;
&lt;li&gt;&lt;span style=&quot;font-family: AppleSDGothicNeo-Regular, 'Malgun Gothic', '맑은 고딕', dotum, 돋움, sans-serif;&quot;&gt;프론트엔드에서 DDD를 적용할 수 있고, 직접 사용한 예제를 통해 설명하여 더 크게 와닿았음&lt;/span&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;h4 data-ke-size=&quot;size20&quot;&gt;&lt;span style=&quot;font-family: AppleSDGothicNeo-Regular, 'Malgun Gothic', '맑은 고딕', dotum, 돋움, sans-serif;&quot;&gt;아쉬웠던 점&lt;/span&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;span style=&quot;font-family: AppleSDGothicNeo-Regular, 'Malgun Gothic', '맑은 고딕', dotum, 돋움, sans-serif;&quot;&gt;없음&lt;/span&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;h4 data-ke-size=&quot;size20&quot;&gt;&lt;span style=&quot;font-family: AppleSDGothicNeo-Regular, 'Malgun Gothic', '맑은 고딕', dotum, 돋움, sans-serif;&quot;&gt;후기&lt;/span&gt;&lt;/h4&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;제가 이 FEConf에서 들었던 세션중에서 가장 만족스러운 세션이었습니다. &lt;br /&gt;DDD에 대해서 기초부터 예제까지 첨부한 퀄리티 높은 설명이었고 이 세션을 통해서 DDD가 무엇인지, &lt;br /&gt;프론트엔드에서 DDD를 어떻게 적용할 수 있는지에 대해서 알 수 있었습니다. &lt;br /&gt;다만, 세션을 듣는 내내 이게 과연 진짜 필요한 일이 있을까란 생각이 첫번째로 들었고, &lt;br /&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;hr contenteditable=&quot;false&quot; data-ke-type=&quot;horizontalRule&quot; data-ke-style=&quot;style1&quot; /&gt;
&lt;h3 data-ke-size=&quot;size23&quot;&gt;&lt;span style=&quot;font-family: AppleSDGothicNeo-Regular, 'Malgun Gothic', '맑은 고딕', dotum, 돋움, sans-serif;&quot;&gt;텍스트 에디터? 그게 뭘 만드는 건데?&lt;/span&gt;&lt;/h3&gt;
&lt;p&gt;&lt;figure class=&quot;imagegridblock&quot;&gt;
  &lt;div class=&quot;image-container&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/b81vVD/btrN6mHrVP1/1cwPI77ahFHkd8Tu3PYnKk/img.jpg&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/b81vVD/btrN6mHrVP1/1cwPI77ahFHkd8Tu3PYnKk/img.jpg&quot; data-is-animation=&quot;false&quot; data-origin-width=&quot;4000&quot; data-origin-height=&quot;3000&quot; data-filename=&quot;KakaoTalk_Photo_2022-10-08-21-17-20 009.jpeg&quot; style=&quot;width: 63.2558%; margin-right: 10px;&quot; data-widthpercent=&quot;64&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/b81vVD/btrN6mHrVP1/1cwPI77ahFHkd8Tu3PYnKk/img.jpg&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2Fb81vVD%2FbtrN6mHrVP1%2F1cwPI77ahFHkd8Tu3PYnKk%2Fimg.jpg&quot; onerror=&quot;this.onerror=null; this.src='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png'; this.srcset='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png';&quot; loading=&quot;lazy&quot; width=&quot;4000&quot; height=&quot;3000&quot;/&gt;&lt;/span&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/bMWlOJ/btrN5aOg935/xauz2IWKMYjkfYfNfkmmH1/img.jpg&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/bMWlOJ/btrN5aOg935/xauz2IWKMYjkfYfNfkmmH1/img.jpg&quot; data-is-animation=&quot;false&quot; data-origin-width=&quot;3000&quot; data-origin-height=&quot;4000&quot; data-filename=&quot;KakaoTalk_Photo_2022-10-08-21-17-41 016.jpeg&quot; style=&quot;width: 35.5814%;&quot; data-widthpercent=&quot;36&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/bMWlOJ/btrN5aOg935/xauz2IWKMYjkfYfNfkmmH1/img.jpg&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FbMWlOJ%2FbtrN5aOg935%2Fxauz2IWKMYjkfYfNfkmmH1%2Fimg.jpg&quot; onerror=&quot;this.onerror=null; this.src='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png'; this.srcset='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png';&quot; loading=&quot;lazy&quot; width=&quot;3000&quot; height=&quot;4000&quot;/&gt;&lt;/span&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/bbUbTl/btrOcf1OmwX/6xG1w7J702JntKWQHo4Qgk/img.jpg&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/bbUbTl/btrOcf1OmwX/6xG1w7J702JntKWQHo4Qgk/img.jpg&quot; data-is-animation=&quot;false&quot; data-origin-width=&quot;3000&quot; data-origin-height=&quot;4000&quot; data-widthpercent=&quot;26.47&quot; data-filename=&quot;KakaoTalk_Photo_2022-10-08-21-17-37 015.jpeg&quot; style=&quot;width: 25.855%; margin-right: 10px; margin-top: 10px;&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/bbUbTl/btrOcf1OmwX/6xG1w7J702JntKWQHo4Qgk/img.jpg&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FbbUbTl%2FbtrOcf1OmwX%2F6xG1w7J702JntKWQHo4Qgk%2Fimg.jpg&quot; onerror=&quot;this.onerror=null; this.src='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png'; this.srcset='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png';&quot; loading=&quot;lazy&quot; width=&quot;3000&quot; height=&quot;4000&quot;/&gt;&lt;/span&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/bafMzX/btrN4lJH8l2/1ZnnIRRCjHi2D8GLY4sHek/img.jpg&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/bafMzX/btrN4lJH8l2/1ZnnIRRCjHi2D8GLY4sHek/img.jpg&quot; data-is-animation=&quot;false&quot; data-origin-width=&quot;3000&quot; data-origin-height=&quot;4000&quot; data-filename=&quot;KakaoTalk_Photo_2022-10-08-21-17-32 014.jpeg&quot; style=&quot;width: 25.855%; margin-right: 10px; margin-top: 10px;&quot; data-widthpercent=&quot;26.47&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/bafMzX/btrN4lJH8l2/1ZnnIRRCjHi2D8GLY4sHek/img.jpg&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FbafMzX%2FbtrN4lJH8l2%2F1ZnnIRRCjHi2D8GLY4sHek%2Fimg.jpg&quot; onerror=&quot;this.onerror=null; this.src='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png'; this.srcset='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png';&quot; loading=&quot;lazy&quot; width=&quot;3000&quot; height=&quot;4000&quot;/&gt;&lt;/span&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/bx4K4b/btrOcf8zOfd/KxjZEiQQaocmCIQG63LZXK/img.jpg&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/bx4K4b/btrOcf8zOfd/KxjZEiQQaocmCIQG63LZXK/img.jpg&quot; data-is-animation=&quot;false&quot; data-origin-width=&quot;4000&quot; data-origin-height=&quot;3000&quot; data-filename=&quot;KakaoTalk_Photo_2022-10-08-21-17-30 013.jpeg&quot; style=&quot;width: 45.9644%; margin-top: 10px;&quot; data-widthpercent=&quot;47.06&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/bx4K4b/btrOcf8zOfd/KxjZEiQQaocmCIQG63LZXK/img.jpg&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2Fbx4K4b%2FbtrOcf8zOfd%2FKxjZEiQQaocmCIQG63LZXK%2Fimg.jpg&quot; onerror=&quot;this.onerror=null; this.src='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png'; this.srcset='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png';&quot; loading=&quot;lazy&quot; width=&quot;4000&quot; height=&quot;3000&quot;/&gt;&lt;/span&gt;&lt;/div&gt;
&lt;/figure&gt;
&lt;figure class=&quot;imagegridblock&quot;&gt;
  &lt;div class=&quot;image-container&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/CwyWS/btrN4lptzaC/3h6kGah9MSDfkHOrHTIKck/img.jpg&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/CwyWS/btrN4lptzaC/3h6kGah9MSDfkHOrHTIKck/img.jpg&quot; data-is-animation=&quot;false&quot; data-origin-width=&quot;4000&quot; data-origin-height=&quot;3000&quot; data-filename=&quot;KakaoTalk_Photo_2022-10-08-21-17-28 012.jpeg&quot; data-widthpercent=&quot;33.33&quot; style=&quot;width: 32.5581%; margin-right: 10px;&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/CwyWS/btrN4lptzaC/3h6kGah9MSDfkHOrHTIKck/img.jpg&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FCwyWS%2FbtrN4lptzaC%2F3h6kGah9MSDfkHOrHTIKck%2Fimg.jpg&quot; onerror=&quot;this.onerror=null; this.src='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png'; this.srcset='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png';&quot; loading=&quot;lazy&quot; width=&quot;4000&quot; height=&quot;3000&quot;/&gt;&lt;/span&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/b4zHAx/btrN4wRKRgZ/dGZVjddDfbcY4t9C1tl2Zk/img.jpg&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/b4zHAx/btrN4wRKRgZ/dGZVjddDfbcY4t9C1tl2Zk/img.jpg&quot; data-is-animation=&quot;false&quot; data-origin-width=&quot;4000&quot; data-origin-height=&quot;3000&quot; data-filename=&quot;KakaoTalk_Photo_2022-10-08-21-17-25 011.jpeg&quot; data-widthpercent=&quot;33.33&quot; style=&quot;width: 32.5581%; margin-right: 10px;&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/b4zHAx/btrN4wRKRgZ/dGZVjddDfbcY4t9C1tl2Zk/img.jpg&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2Fb4zHAx%2FbtrN4wRKRgZ%2FdGZVjddDfbcY4t9C1tl2Zk%2Fimg.jpg&quot; onerror=&quot;this.onerror=null; this.src='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png'; this.srcset='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png';&quot; loading=&quot;lazy&quot; width=&quot;4000&quot; height=&quot;3000&quot;/&gt;&lt;/span&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/bfRvLK/btrN333EtoM/ckzMkKgq1AmzfA2uQtRDRk/img.jpg&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/bfRvLK/btrN333EtoM/ckzMkKgq1AmzfA2uQtRDRk/img.jpg&quot; data-is-animation=&quot;false&quot; data-origin-width=&quot;4000&quot; data-origin-height=&quot;3000&quot; data-widthpercent=&quot;33.34&quot; data-filename=&quot;KakaoTalk_Photo_2022-10-08-21-17-22 010.jpeg&quot; style=&quot;width: 32.5581%;&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/bfRvLK/btrN333EtoM/ckzMkKgq1AmzfA2uQtRDRk/img.jpg&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FbfRvLK%2FbtrN333EtoM%2FckzMkKgq1AmzfA2uQtRDRk%2Fimg.jpg&quot; onerror=&quot;this.onerror=null; this.src='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png'; this.srcset='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png';&quot; loading=&quot;lazy&quot; width=&quot;4000&quot; height=&quot;3000&quot;/&gt;&lt;/span&gt;&lt;/div&gt;
&lt;/figure&gt;
&lt;figure class=&quot;imagegridblock&quot;&gt;
  &lt;div class=&quot;image-container&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/novWz/btrN5wjeAgG/qRx1RuGkdCbNhVQ83B6yP1/img.jpg&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/novWz/btrN5wjeAgG/qRx1RuGkdCbNhVQ83B6yP1/img.jpg&quot; data-is-animation=&quot;false&quot; data-origin-width=&quot;4000&quot; data-origin-height=&quot;3000&quot; data-filename=&quot;KakaoTalk_Photo_2022-10-08-21-17-18 008.jpeg&quot; style=&quot;width: 32.5581%; margin-right: 10px;&quot; data-widthpercent=&quot;33.33&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/novWz/btrN5wjeAgG/qRx1RuGkdCbNhVQ83B6yP1/img.jpg&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FnovWz%2FbtrN5wjeAgG%2FqRx1RuGkdCbNhVQ83B6yP1%2Fimg.jpg&quot; onerror=&quot;this.onerror=null; this.src='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png'; this.srcset='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png';&quot; loading=&quot;lazy&quot; width=&quot;4000&quot; height=&quot;3000&quot;/&gt;&lt;/span&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/cl9b7Q/btrN8A6sGyK/Kmm5hzCjLiGYo4tjw9Ow1K/img.jpg&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/cl9b7Q/btrN8A6sGyK/Kmm5hzCjLiGYo4tjw9Ow1K/img.jpg&quot; data-is-animation=&quot;false&quot; data-origin-width=&quot;4000&quot; data-origin-height=&quot;3000&quot; data-widthpercent=&quot;33.33&quot; data-filename=&quot;KakaoTalk_Photo_2022-10-08-21-17-16 007.jpeg&quot; style=&quot;width: 32.5581%; margin-right: 10px;&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/cl9b7Q/btrN8A6sGyK/Kmm5hzCjLiGYo4tjw9Ow1K/img.jpg&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2Fcl9b7Q%2FbtrN8A6sGyK%2FKmm5hzCjLiGYo4tjw9Ow1K%2Fimg.jpg&quot; onerror=&quot;this.onerror=null; this.src='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png'; this.srcset='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png';&quot; loading=&quot;lazy&quot; width=&quot;4000&quot; height=&quot;3000&quot;/&gt;&lt;/span&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/2iT0y/btrN4PQ83xF/KNc1jcgz1vN9aGVKN8IckK/img.jpg&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/2iT0y/btrN4PQ83xF/KNc1jcgz1vN9aGVKN8IckK/img.jpg&quot; data-is-animation=&quot;false&quot; data-origin-width=&quot;4000&quot; data-origin-height=&quot;3000&quot; data-filename=&quot;KakaoTalk_Photo_2022-10-08-21-17-13 006.jpeg&quot; style=&quot;width: 32.5581%;&quot; data-widthpercent=&quot;33.34&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/2iT0y/btrN4PQ83xF/KNc1jcgz1vN9aGVKN8IckK/img.jpg&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2F2iT0y%2FbtrN4PQ83xF%2FKNc1jcgz1vN9aGVKN8IckK%2Fimg.jpg&quot; onerror=&quot;this.onerror=null; this.src='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png'; this.srcset='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png';&quot; loading=&quot;lazy&quot; width=&quot;4000&quot; height=&quot;3000&quot;/&gt;&lt;/span&gt;&lt;/div&gt;
&lt;/figure&gt;
&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;color: #333333;&quot;&gt;&lt;span style=&quot;font-family: AppleSDGothicNeo-Regular, 'Malgun Gothic', '맑은 고딕', dotum, 돋움, sans-serif;&quot;&gt;텍스트에디터를 당연하게 생각하는 유저들을 위해 내이버의&amp;nbsp;스마트에디터가 1.0부터 3.0까지 발전하면서 겪게되었던 문제와 해결하던 과정에 대해서 설명하고 &lt;/span&gt;&lt;span style=&quot;background-color: #ffffff; font-family: AppleSDGothicNeo-Regular, 'Malgun Gothic', '맑은 고딕', dotum, 돋움, sans-serif;&quot;&gt;React + contenteditable 기반의 새로운 에디터를 만들게 된 배경과 만들며 겪은 기술적인 도전을 공유하는 세션이었습니다.&lt;/span&gt;&lt;/span&gt;&lt;/p&gt;
&lt;h4 data-ke-size=&quot;size20&quot;&gt;&lt;span style=&quot;font-family: AppleSDGothicNeo-Regular, 'Malgun Gothic', '맑은 고딕', dotum, 돋움, sans-serif;&quot;&gt;&lt;span&gt;&lt;span&gt;내용&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/h4&gt;
&lt;ul style=&quot;list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li&gt;많은 사람들이 텍스트 에디터를 보면서 당연하다고 느끼지만, 사실 그 안에는 많은 기술이 녹아 있음&lt;/li&gt;
&lt;li&gt;그에 따라 네이버의 스마트에디터도 많은 발전을 해왔음&lt;br /&gt;
&lt;ul style=&quot;list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li&gt;1 세대
&lt;ul style=&quot;list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li&gt;단순히 contenteditable을 이용해 HTML요소들을 브라우저가 결정하여 그 요소들을 저장하는 방식으로 이용&lt;/li&gt;
&lt;li&gt;브라우저가 요소들을 결정하기에 각기 브라우저에 따라 표현되는 방식이 달랐음&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt;1.5 세대
&lt;ul style=&quot;list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li&gt;기존 HTML을 단순 저장하던 1세대 방식을 벗어나 문서 모델링(JSON)방식으로 전환&lt;/li&gt;
&lt;li&gt;그에따라 블록별 편집이 가능&lt;/li&gt;
&lt;li&gt;하지만 블록별 편집이기에 마우스 드래그하여 selection시 어색하게 블록별만 selection 처리가 됨&lt;/li&gt;
&lt;li&gt;브라우저 마다 재각기 다른 contenteditable의 selection처리 방식&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt;2세대
&lt;ul style=&quot;list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li&gt;1.5세대의 문제를 해결하기 위해 가상 커서와 input buffer(사용자가 실제 에디터에서 입력하는것 처럼 느끼지만 사실은 다른곳을 입력하는 방식)를 도입하였고 contenteditable(IE지원을 위해...)을 삭제&lt;/li&gt;
&lt;li&gt;가상커서로 인해 어색하게 selection 되던 동작을 해결할 수 있었음&lt;/li&gt;
&lt;li&gt;input buffer 도입으로 브라우저 마다 재각기 다른 selection 처리 방식을 해결할 수 있었음&lt;/li&gt;
&lt;li&gt;다만, 이러한 방식은 브라우저 네이티브 기능(복사, 붙여넣기)과 다국어 지원이 힘듦
&lt;ul style=&quot;list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li&gt;브라우저 네이티브 기능은 크롬에서 열어주지 않기에 익스텐션을 이용하여 설치하도록 유도하여 사용...&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt;3세대
&lt;ul style=&quot;list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li&gt;브라우저 네이티브 기능을 활용하고 다국어를 지원하기 위해 3세대를 개발&lt;/li&gt;
&lt;li&gt;IE지원 종료로 2세대에서 삭제되었던 contenteditable을 다시 사용함&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt;React와 MobX, contenteditable을 사용하여 3.0개발&lt;/li&gt;
&lt;li&gt;다만 React의 vDOM을 별도로 관리하는 방식과 contenteditable의 유저가 dom을 직접 변경하는 방식의 충돌로 React vDOM과 DOM의 싱크가 깨져 이것을 개발자가 직접 제어하도록 함&lt;/li&gt;
&lt;li&gt;Upstream과 Downstream을 나누어 관리하여 vDOM과 DOM의 싱크를 맞춤
&lt;ul style=&quot;list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li&gt;Upstream은 contenteditable기능을 사용하여 DOM의 변화가 필요한 기능(글쓰기 등)을 대응하기위해&amp;nbsp; React의 vDOM 업데이트를 임시 중단하고 Store에만 업데이트 하는 기능&lt;/li&gt;
&lt;li&gt;Downstream은 DOM의 반영되지 않았던 Store 업데이트 사항을 DOM에 반영이 필요한 기능(백스페이스, 엔터 등..)을 대응하기 위한 기능 이때 React의 vDOM은 활성화 되고 MobX의 MutationObserver는 중단 됨&lt;/li&gt;
&lt;li&gt;특허까지 출원했다고 한다 ㄷㄷㄷ&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt;이렇게해서 다국어 지원 및 브라우저 네이티브 기능까지 사용이 가능해졌다고 한다.&lt;/li&gt;
&lt;/ul&gt;
&lt;h4 data-ke-size=&quot;size20&quot;&gt;&lt;span style=&quot;font-family: AppleSDGothicNeo-Regular, 'Malgun Gothic', '맑은 고딕', dotum, 돋움, sans-serif;&quot;&gt;&lt;span&gt;&lt;span&gt;좋았던 점&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/h4&gt;
&lt;ul style=&quot;list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li&gt;React의 vDOM과 실제 DOM의 연결을 끊는다는 발상이 참신했음&lt;/li&gt;
&lt;li&gt;스마트에디터의 발전 과정과 에디터 개발에 겪는 문제점들을 알 수 있었음&lt;/li&gt;
&lt;/ul&gt;
&lt;h4 data-ke-size=&quot;size20&quot;&gt;&lt;span style=&quot;font-family: AppleSDGothicNeo-Regular, 'Malgun Gothic', '맑은 고딕', dotum, 돋움, sans-serif;&quot;&gt;&lt;span&gt;&lt;span&gt;아쉬웠던 점&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/h4&gt;
&lt;ul style=&quot;list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li&gt;없음&lt;/li&gt;
&lt;/ul&gt;
&lt;h4 data-ke-size=&quot;size20&quot;&gt;&lt;span style=&quot;font-family: AppleSDGothicNeo-Regular, 'Malgun Gothic', '맑은 고딕', dotum, 돋움, sans-serif;&quot;&gt;&lt;span&gt;&lt;span&gt;후기&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/h4&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;font-family: AppleSDGothicNeo-Regular, 'Malgun Gothic', '맑은 고딕', dotum, 돋움, sans-serif;&quot;&gt;&lt;span&gt;&lt;span&gt;그동안, 텍스트에디터 하면 당연하다고 생각해왔고, 그게 뭐 어렵겠어? 라는 생각을 많이 가졌습니다. 하지만 이 세션을 듣고나서 텍스트에디터가 상당히 복잡하고 신경써야 할 것이 많구나 라는걸 느꼈습니다. 게다가 참신한 아이디어를 통해 문제를 해결하는것을 보고 제가 가지고 있는 도메인? 관점?을 넓힐 수 있었던 세션이었습니다.&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/p&gt;
&lt;hr contenteditable=&quot;false&quot; data-ke-type=&quot;horizontalRule&quot; data-ke-style=&quot;style1&quot; /&gt;
&lt;h3 data-ke-size=&quot;size23&quot;&gt;&lt;span style=&quot;font-family: AppleSDGothicNeo-Regular, 'Malgun Gothic', '맑은 고딕', dotum, 돋움, sans-serif;&quot;&gt;Edge Computing으로 프론트엔드 포텐셜 끌어올리기&lt;/span&gt;&lt;/h3&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-filename=&quot;KakaoTalk_Photo_2022-10-08-21-17-11 005.jpeg&quot; data-origin-width=&quot;4000&quot; data-origin-height=&quot;3000&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/lfkPw/btrN32RfAks/2VhHomKBY3K24C47qc53hK/img.jpg&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/lfkPw/btrN32RfAks/2VhHomKBY3K24C47qc53hK/img.jpg&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/lfkPw/btrN32RfAks/2VhHomKBY3K24C47qc53hK/img.jpg&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FlfkPw%2FbtrN32RfAks%2F2VhHomKBY3K24C47qc53hK%2Fimg.jpg&quot; onerror=&quot;this.onerror=null; this.src='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png'; this.srcset='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png';&quot; loading=&quot;lazy&quot; width=&quot;4000&quot; height=&quot;3000&quot; data-filename=&quot;KakaoTalk_Photo_2022-10-08-21-17-11 005.jpeg&quot; data-origin-width=&quot;4000&quot; data-origin-height=&quot;3000&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;color: #333333;&quot;&gt;&lt;span style=&quot;background-color: #ffffff;&quot;&gt;엣지 컴퓨팅이라는 기술 트렌드가 가져온, 그리고 앞으로 가져올 웹 개발의 변화들을 사례와 함께 설명합니다. &lt;/span&gt;&lt;span style=&quot;background-color: #ffffff;&quot;&gt;최근 등장한 다양한 엣지 컴퓨팅 플랫폼들을 슬기롭게 응용해서 웹 프론트엔드 개발을 확장하는 방법들을 소개하고, 앞으로 다가올 미래를 이야기하는 세션이었습니다.&lt;/span&gt;&lt;/span&gt;&lt;/p&gt;
&lt;h4 data-ke-size=&quot;size20&quot;&gt;&lt;span style=&quot;font-family: AppleSDGothicNeo-Regular, 'Malgun Gothic', '맑은 고딕', dotum, 돋움, sans-serif;&quot;&gt;&lt;span&gt;&lt;span&gt;내용&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/h4&gt;
&lt;ul style=&quot;list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li&gt;엣지 컴퓨팅의 사전적 의미는 엔드 유저와 가장 가까운 곳에서&amp;nbsp; 수행하는 것&lt;br /&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;CDN&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt;엣지 컴퓨팅은 앞으로 서버를 넘어서 새로운 비젼을 제시할 기술&lt;/li&gt;
&lt;li&gt;엣지 컴퓨팅은 프론트엔드 개발자가 가질 수 있는 가장 강력한 무기중 하나&lt;/li&gt;
&lt;li&gt;엣지와 컴퓨팅 이 두가지를 잡기 위한 문제
&lt;ul style=&quot;list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li&gt;캐시 효율성&lt;/li&gt;
&lt;li&gt;구축 비용&lt;/li&gt;
&lt;li&gt;보안&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt;엣지와 컴퓨팅을 같이 사용하기 위해 필요한 것들
&lt;ul style=&quot;list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li&gt;구조적 동시성
&lt;ul style=&quot;list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li&gt;발전한 프로그래밍 모델(리액트의 서스펜스 등)&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt;컨테이너 및 격리성
&lt;ul style=&quot;list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li&gt;Docker&lt;/li&gt;
&lt;li&gt;Firecracker&lt;/li&gt;
&lt;li&gt;Micro-VM&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt;&amp;nbsp;웹 APIs
&lt;ul style=&quot;list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li&gt;웹 보안 모델&lt;/li&gt;
&lt;li&gt;서비스 워커&lt;/li&gt;
&lt;li&gt;Fetch API&lt;/li&gt;
&lt;li&gt;Cache API&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt;다가오는 미래
&lt;ul style=&quot;list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li&gt;WinterCG(&lt;a href=&quot;https://wintercg.org/&quot; target=&quot;_blank&quot; rel=&quot;noopener&quot;&gt;https://wintercg.org/&lt;/a&gt;)&lt;/li&gt;
&lt;li&gt;Open Source
&lt;ul style=&quot;list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li&gt;Edge Runtime - vercel&lt;/li&gt;
&lt;li&gt;Roll your own javascript runtion - deno&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt;WASM(Web Assembly)
&lt;ul style=&quot;list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li&gt;Wasmtime&lt;/li&gt;
&lt;li&gt;Wasmer&lt;/li&gt;
&lt;li&gt;Lunatic&lt;/li&gt;
&lt;li&gt;WasmEdge&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt;WASI(WebAssembly System Interface)
&lt;ul style=&quot;list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li&gt;&lt;a href=&quot;https://github.com/WordPress/wordpress-wasm&quot; target=&quot;_blank&quot; rel=&quot;noopener&quot;&gt;https://github.com/WordPress/wordpress-wasm&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt;미래를 대비하는 자세
&lt;ul style=&quot;list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li&gt;자바스크립트와 웹 어셈블리의 집중할 것&lt;/li&gt;
&lt;li&gt;신뢰성있고 지속 가능한 보안 모델&lt;/li&gt;
&lt;li&gt;항상 웹의 배팅&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;/ul&gt;
&lt;h4 data-ke-size=&quot;size20&quot;&gt;&lt;span style=&quot;font-family: AppleSDGothicNeo-Regular, 'Malgun Gothic', '맑은 고딕', dotum, 돋움, sans-serif;&quot;&gt;&lt;span&gt;&lt;span&gt;좋았던 점&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/h4&gt;
&lt;ul style=&quot;list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li&gt;앞으로 웹의 미래에 대한 이야기를 들을 수 있었어 좋았음&lt;/li&gt;
&lt;li&gt;최근에 공부하기 시작한 인프라 혹은 네트워크 관련 이야기를 들을 수 있는 세션이었음&lt;/li&gt;
&lt;/ul&gt;
&lt;h4 data-ke-size=&quot;size20&quot;&gt;&lt;span style=&quot;font-family: AppleSDGothicNeo-Regular, 'Malgun Gothic', '맑은 고딕', dotum, 돋움, sans-serif;&quot;&gt;&lt;span&gt;&lt;span&gt;아쉬웠던 점&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/h4&gt;
&lt;ul style=&quot;list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li&gt;세션을 들었지만 정확히 이야기 하고자 하는 방향을 잡기가 어려웠음...
&lt;ul style=&quot;list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li&gt;내가 부족한거라 생각이 들고 좀 더 공부해야 겠음...&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;/ul&gt;
&lt;h4 data-ke-size=&quot;size20&quot;&gt;&lt;span style=&quot;font-family: AppleSDGothicNeo-Regular, 'Malgun Gothic', '맑은 고딕', dotum, 돋움, sans-serif;&quot;&gt;&lt;span&gt;&lt;span&gt;후기&lt;br /&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/h4&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;font-family: AppleSDGothicNeo-Regular, 'Malgun Gothic', '맑은 고딕', dotum, 돋움, sans-serif;&quot;&gt;&lt;span&gt;&lt;span&gt;제가 들었던 마지막 세션이었고 세션 스피커인 김혜성님이 보고 있는 미래가 어떤것이구나를 알 수 있었던 세션이었습니다. 제가 최근 배우고 있는 네트워크 인프라 관련 이야기가 나와서 세션을 충분히 이해할 수 있었지만,&lt;span&gt; 아직까지&amp;nbsp; 미래까지는 볼 수 있는 실력이 아닌지라 크게 와닿지는 않았습니다. 또한, 다 듣고나서 그래서 엣지 컴퓨팅이 뭔데? 라고 물어본다면 사실 잘 모르겠습니다... 좀 난해한? 느낌이 강했던거 같습니다. 그렇다고 지루했던건 아니었고 세션 자체는 꽤 좋았습니다. 마지막 세션 특성상 지루하면 졸기 마련인데 재미있게 이야기를 해주셔서 지루함없이 들을 수 있었습니다.&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/p&gt;
&lt;hr contenteditable=&quot;false&quot; data-ke-type=&quot;horizontalRule&quot; data-ke-style=&quot;style1&quot; /&gt;
&lt;h3 data-ke-size=&quot;size23&quot;&gt;&lt;span style=&quot;font-family: AppleSDGothicNeo-Regular, 'Malgun Gothic', '맑은 고딕', dotum, 돋움, sans-serif;&quot;&gt;럭키드로우&lt;/span&gt;&lt;span style=&quot;font-family: AppleSDGothicNeo-Regular, 'Malgun Gothic', '맑은 고딕', dotum, 돋움, sans-serif;&quot;&gt;&lt;/span&gt;&lt;/h3&gt;
&lt;figure data-ke-type=&quot;video&quot; data-ke-style=&quot;alignCenter&quot; data-video-host=&quot;kakaotv&quot; data-video-url=&quot;https://tv.kakao.com/v/432594468&quot; data-video-thumbnail=&quot;https://scrap.kakaocdn.net/dn/cbwbIH/hyP4Na8cC3/o32SQ1MhKbCzPOAmGOes6K/img.jpg?width=1280&amp;amp;height=720&amp;amp;face=0_0_1280_720,https://scrap.kakaocdn.net/dn/dwywdk/hyP4HBX4JE/oHPQ6fAe8SfkThKBfnHRN1/img.jpg?width=1280&amp;amp;height=720&amp;amp;face=0_0_1280_720&quot; data-video-width=&quot;860&quot; data-video-height=&quot;484&quot; data-video-origin-width=&quot;860&quot; data-video-origin-height=&quot;484&quot; data-ke-mobilestyle=&quot;widthContent&quot; data-video-play-service=&quot;daum_tistory&quot;&gt;&lt;iframe src=&quot;https://play-tv.kakao.com/embed/player/cliplink/432594468?service=daum_tistory&quot; width=&quot;860&quot; height=&quot;484&quot; frameborder=&quot;0&quot; allowfullscreen=&quot;true&quot;&gt;&lt;/iframe&gt;
&lt;figcaption&gt;&lt;/figcaption&gt;
&lt;/figure&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-filename=&quot;KakaoTalk_Photo_2022-10-08-21-16-59 003.jpeg&quot; data-origin-width=&quot;4000&quot; data-origin-height=&quot;3000&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/co4XEc/btrN789XBsV/pEo56iFlwkZDPAWKhizts1/img.jpg&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/co4XEc/btrN789XBsV/pEo56iFlwkZDPAWKhizts1/img.jpg&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/co4XEc/btrN789XBsV/pEo56iFlwkZDPAWKhizts1/img.jpg&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2Fco4XEc%2FbtrN789XBsV%2FpEo56iFlwkZDPAWKhizts1%2Fimg.jpg&quot; onerror=&quot;this.onerror=null; this.src='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png'; this.srcset='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png';&quot; loading=&quot;lazy&quot; width=&quot;4000&quot; height=&quot;3000&quot; data-filename=&quot;KakaoTalk_Photo_2022-10-08-21-16-59 003.jpeg&quot; data-origin-width=&quot;4000&quot; data-origin-height=&quot;3000&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;font-family: AppleSDGothicNeo-Regular, 'Malgun Gothic', '맑은 고딕', dotum, 돋움, sans-serif;&quot;&gt;아쉽게도 나는 럭키하지 못했다 ㅠㅠ&lt;/span&gt;&lt;/p&gt;
&lt;hr contenteditable=&quot;false&quot; data-ke-type=&quot;horizontalRule&quot; data-ke-style=&quot;style6&quot; /&gt;
&lt;h3 data-ke-size=&quot;size23&quot;&gt;&lt;span style=&quot;font-family: AppleSDGothicNeo-Regular, 'Malgun Gothic', '맑은 고딕', dotum, 돋움, sans-serif;&quot;&gt;후기&lt;/span&gt;&lt;/h3&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;font-family: AppleSDGothicNeo-Regular, 'Malgun Gothic', '맑은 고딕', dotum, 돋움, sans-serif;&quot;&gt;FEConf 2022 그동안 유튜브를 통해서 봐왔던 세션들을 오프라인에서 직접 들을 수 있어서 좋았던 컨퍼런스 었습니다. &lt;br /&gt;내년에도 한다면 꼭 또 한번 참석하고 싶은 컨퍼런스이고, 나중에는 저도 스피커로 나올수 있으면 좋겠다라고 생각되어지는 컨퍼런스였습니다. &lt;br /&gt;FEConf를 진행해주셨던 스피커 및 스태프님들 감사합니다.&lt;/span&gt;&lt;/p&gt;</description>
      <category>라이프 로그</category>
      <category>2022</category>
      <category>FEConf</category>
      <category>feconf2022</category>
      <category>컨퍼런스</category>
      <author>방현준</author>
      <guid isPermaLink="true">https://noogoonaa.tistory.com/120</guid>
      <comments>https://noogoonaa.tistory.com/120#entry120comment</comments>
      <pubDate>Sun, 9 Oct 2022 02:40:27 +0900</pubDate>
    </item>
    <item>
      <title>Javasciprt 실행 컨텍스트(execution context)</title>
      <link>https://noogoonaa.tistory.com/119</link>
      <description>&lt;h3 data-ke-size=&quot;size23&quot;&gt;여는 글&lt;/h3&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock widthContent&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-filename=&quot;84fca0d22b53c51eb140c754370a1ca7.gif&quot; data-origin-width=&quot;720&quot; data-origin-height=&quot;480&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/ImTxL/btrMkOeVnzR/jDFfVU4UAtyakvhyX3FQT0/img.gif&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/ImTxL/btrMkOeVnzR/jDFfVU4UAtyakvhyX3FQT0/img.gif&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/ImTxL/btrMkOeVnzR/jDFfVU4UAtyakvhyX3FQT0/img.gif&quot; srcset=&quot;https://blog.kakaocdn.net/dn/ImTxL/btrMkOeVnzR/jDFfVU4UAtyakvhyX3FQT0/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;720&quot; height=&quot;480&quot; data-filename=&quot;84fca0d22b53c51eb140c754370a1ca7.gif&quot; data-origin-width=&quot;720&quot; data-origin-height=&quot;480&quot;/&gt;&lt;/span&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;/p&gt;
&lt;hr contenteditable=&quot;false&quot; data-ke-type=&quot;horizontalRule&quot; data-ke-style=&quot;style1&quot; /&gt;
&lt;h3 data-ke-size=&quot;size23&quot;&gt;실행 컨텍스트(execution context)&lt;/h3&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-filename=&quot;2.png&quot; data-origin-width=&quot;1931&quot; data-origin-height=&quot;1506&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/qMiLQ/btrMkeFeLSK/MP3rZAObStmkU369KY150k/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/qMiLQ/btrMkeFeLSK/MP3rZAObStmkU369KY150k/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/qMiLQ/btrMkeFeLSK/MP3rZAObStmkU369KY150k/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FqMiLQ%2FbtrMkeFeLSK%2FMP3rZAObStmkU369KY150k%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;1931&quot; height=&quot;1506&quot; data-filename=&quot;2.png&quot; data-origin-width=&quot;1931&quot; data-origin-height=&quot;1506&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;실행 컨텍스트는 전역 혹은 함수 내의 작성해 놓은 코드가 실행 가능한 코드(Excutable Code)일 경우, 자바스크립트 엔진이 코드를 실행하기 위해 필요한 환경 정보를 모아놓은 객체입니다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;여기서 환경정보란 아래와 같습니다.&lt;/p&gt;
&lt;h4 data-ke-size=&quot;size20&quot;&gt;변수(Variable)&lt;/h4&gt;
&lt;ul style=&quot;list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li&gt;변수(Variable)에 대한 정보를 알고 있어야 합니다.&lt;/li&gt;
&lt;li&gt;전역 변수, 지역 변수, 매개 변수, 객체의 프로퍼티 등이 변수(Variable) 정보에 속합니다.&lt;/li&gt;
&lt;/ul&gt;
&lt;h4 data-ke-size=&quot;size20&quot;&gt;인자(Argument)&lt;/h4&gt;
&lt;ul style=&quot;list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li&gt;인자(Argument)에 대한 정보를 알고 있어야 합니다.&lt;/li&gt;
&lt;li&gt;인자 객체가 인자(Argument) 정보에 속합니다.&lt;/li&gt;
&lt;li&gt;보통 변수 정보와 쌍으로 보는 경우가 많습니다.&lt;/li&gt;
&lt;/ul&gt;
&lt;h4 data-ke-size=&quot;size20&quot;&gt;Scope&lt;/h4&gt;
&lt;ul style=&quot;list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li&gt;중첩된 스코프 중 내부 스코프에서 외부 스코프에 접근을 위한 정보를 알고 있어야 합니다.&lt;/li&gt;
&lt;/ul&gt;
&lt;h4 data-ke-size=&quot;size20&quot;&gt;This&lt;/h4&gt;
&lt;ul style=&quot;list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li&gt;this값은 함수 호출 패턴에 의해 달라지기에 this가 어떤 객체를 할당하고 있는지에 대한 정보를 알고 있어야 합니다.&lt;/li&gt;
&lt;/ul&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;이 정보들은 실행에 필요한 정보를 형상화 하고 구분하기 위해 물리적 객체의 형태로 관리합니다. &lt;br /&gt;단, 이 값들은 각 실행 컨텍스트 타입에 따라 달라질 수 있습니다.&lt;/p&gt;
&lt;hr contenteditable=&quot;false&quot; data-ke-type=&quot;horizontalRule&quot; data-ke-style=&quot;style1&quot; /&gt;
&lt;h3 data-ke-size=&quot;size23&quot;&gt;코드의 타입&lt;/h3&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;실행 컨텍스트는 자바스크립트 엔진이 동작을 시작하면 그 순간부터 생성되어집니다. &lt;br /&gt;여기서 실행 컨텍스트의 종류가 나뉘어지게 되는데, 각 코드 타입에따라 실행 컨텍스트의 종류가 나뉘어집니다.&lt;/p&gt;
&lt;h4 data-ke-size=&quot;size20&quot;&gt;전역 코드&lt;/h4&gt;
&lt;ul style=&quot;list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li&gt;전역 영역에 존재하는 코드로 window 객체 내부에 작성된 코드를 의미합니다.&lt;/li&gt;
&lt;li&gt;단, 전역에 정의된 함수나 클래스 같은 내부 코드는 전역코드의 포함하지 않습니다.&lt;/li&gt;
&lt;/ul&gt;
&lt;h4 data-ke-size=&quot;size20&quot;&gt;함수 코드&lt;/h4&gt;
&lt;ul style=&quot;list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li&gt;함수 내에 작성된 코드를 의미합니다.&lt;/li&gt;
&lt;li&gt;단, 함수 내부의 중첩된 함수 및 클래스 같은 코드는 호출된 함수코드에 포함하지 않습니다.&lt;/li&gt;
&lt;/ul&gt;
&lt;h4 data-ke-size=&quot;size20&quot;&gt;eval 코드&lt;/h4&gt;
&lt;ul style=&quot;list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li&gt;eval 함수로 실행되는 코드입나다.&lt;/li&gt;
&lt;li&gt;eval 함수의 악의적 특성(XSS 취약점 등..)으로 인해 ES6+에서는 잘 사용하지 않습니다.&lt;/li&gt;
&lt;/ul&gt;
&lt;h4 data-ke-size=&quot;size20&quot;&gt;모듈 코드&lt;/h4&gt;
&lt;ul style=&quot;list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li&gt;모듈로 작성된 내부 코드를 의미합니다.&lt;/li&gt;
&lt;li&gt;모듈 내부의 함수 혹은 클래스는 모듈 코드에 포함되지 않습니다.&lt;/li&gt;
&lt;/ul&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;이 4가지의 코드 타입은 각각 실행 컨텍스트를 생성하는 과정과 관리하는 내용이 다릅니다.&lt;/p&gt;
&lt;hr contenteditable=&quot;false&quot; data-ke-type=&quot;horizontalRule&quot; data-ke-style=&quot;style1&quot; /&gt;
&lt;h3 data-ke-size=&quot;size23&quot;&gt;실행 컨텍스트 타입&lt;/h3&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;위에서 설명했듯이 실행 컨텍스트는 총 4가지의 코드타입에 따라 실행 컨텍스트 타입이 분류될 수 있습니다.&lt;/p&gt;
&lt;h4 data-ke-size=&quot;size20&quot;&gt;전역 실행 컨텍스트(Global Execution Context)(GEC)&lt;/h4&gt;
&lt;ul style=&quot;list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li&gt;전역변수를 관리하기 위한 최상위 스코프를 가지는 실행 컨텍스트&lt;/li&gt;
&lt;li&gt;자바스크립트 엔진이 전역코드를 평가하면 그 이후 전역 실행 컨텍스트가 생성되어짐&lt;/li&gt;
&lt;li&gt;다른말로 전역 객체(Global Object)(GO)라고 불리는 경우도 있음&lt;/li&gt;
&lt;li&gt;window객체, this객체, 빌트인 객체(MATH, String), BOM, DOM, 전역 변수 정보를 가지고 있음&lt;/li&gt;
&lt;/ul&gt;
&lt;h4 data-ke-size=&quot;size20&quot;&gt;함수 실행 컨텍스트(Function Execution Context)(FEC)&lt;/h4&gt;
&lt;ul style=&quot;list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li&gt;지역변수, 매개변수, arguments를 관리하기 위해 지역 스코프를 가지는 실행 컨텍스트&lt;/li&gt;
&lt;li&gt;자바스크립트 엔진이 함수코드를 평가하면 그 이후 함수 실행 컨텍스트가 생성되어짐&lt;/li&gt;
&lt;li&gt;다른말로는 활성 객체(Activation Object)(AO)라고 불리는 경우도 있음&lt;/li&gt;
&lt;li&gt;함수 선언식 정보, 함수의 매개 변수 정보, 변수 정보를 가지고 있음&lt;/li&gt;
&lt;/ul&gt;
&lt;h4 data-ke-size=&quot;size20&quot;&gt;Eval 함수 실행 컨텍스트(Eval Function&amp;nbsp;Execution Contex)&lt;/h4&gt;
&lt;ul style=&quot;list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li&gt;빌트인 함수인 eval 함수가 실행될 때 마다 생성되어지는 컨텍스트&lt;/li&gt;
&lt;li&gt;Eval 함수의 악의적 특성(XSS 취약점 등..)으로 인해 ES6+에서는 잘 사용하지 않음&lt;/li&gt;
&lt;/ul&gt;
&lt;h4 data-ke-size=&quot;size20&quot;&gt;모듈 실행 컨텍스트(Module Execution Contex)&lt;/h4&gt;
&lt;ul style=&quot;list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li&gt;모듈내의 독립적인 스코프를 가지는 실행 컨텍스트&lt;/li&gt;
&lt;li&gt;자바스크립트 엔진이 모듈을 펼가하면 그 이후 모듈 실행 컨텍스트가 생성되어짐&lt;/li&gt;
&lt;li&gt;모듈의 실행이 끝나면 모듈 실행 컨텍스트는 사라짐&lt;/li&gt;
&lt;/ul&gt;
&lt;hr contenteditable=&quot;false&quot; data-ke-type=&quot;horizontalRule&quot; data-ke-style=&quot;style1&quot; /&gt;
&lt;h3 data-ke-size=&quot;size23&quot;&gt;실행 컨텍스트 내부 구성&lt;/h3&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;실행 컨텍스트 내부는 ES5 이전과 ES5 이후로 나뉘어 집니다. &lt;br /&gt;그렇기 때문에 ES5이전과 이후를 비교해서 알 필요가 있습니다.&lt;/p&gt;
&lt;h4 data-ke-size=&quot;size20&quot;&gt;ES5 이전 실행 컨텍스트 구조&lt;/h4&gt;
&lt;pre class=&quot;javascript&quot; data-ke-language=&quot;javascript&quot;&gt;&lt;code&gt;ExecutionContext :{
	변수 객체(Variable Object)
	스코프 체인(Scope Chain)
	this 바인딩(Context Object)
}&lt;/code&gt;&lt;/pre&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;위에 제가 설명한 자바스크립트 엔진이 코드를 실행하기 위해 필요한 정보가 그대로 실행 컨텍스트 내부에 있는 구조입니다.&lt;/p&gt;
&lt;ul style=&quot;list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li&gt;변수 객체(Variable Object) : 변수와 인자 정보를 관리&lt;/li&gt;
&lt;li&gt;스코프 체인(Scope Chain) : 중첩된 스코프 중 내부 스코프에서 외부 스코프에 접근을 위한 정보 관리&lt;/li&gt;
&lt;li&gt;this 바인딩(Context Object) : this가 어떤 객체를 할당하고 있는지에 대한 정보 관리&lt;/li&gt;
&lt;/ul&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;하지만 ES5이후 let과 const같은 block 스코프라는 개념이 추가되면서 이 구조는 더이상 사용하지 않고 새로운 구조로 변경이 되었습니다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;따라서 이러한 내부 구성으로 유지되어 있다는것만 확인후 넘어가도록 하겠습니다.&lt;/p&gt;
&lt;h4 data-ke-size=&quot;size20&quot;&gt;ES5 이후 실행 컨텍스트 구조&lt;/h4&gt;
&lt;pre class=&quot;javascript&quot; data-ke-language=&quot;javascript&quot;&gt;&lt;code&gt;ExecutionContext :{
	LexicalEnvironment:{
		Environment Record
		Outer Environment Reference
	},
	VariableEnvironment:{
		Environment Record
		Outer Environment Reference
	},
	PrivateEnvironment: {
		...
	}
}&lt;/code&gt;&lt;/pre&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;ES5이후 블록 스코프 개념이 추가됨으로 인해 Lexical Environment와 Variable Environment가 생겨났습니다. (PrivateEnvironment에 대해서는 아래에서 따로 다루도록 하겠습니다.)&lt;/p&gt;
&lt;hr contenteditable=&quot;false&quot; data-ke-type=&quot;horizontalRule&quot; data-ke-style=&quot;style1&quot; /&gt;
&lt;h3 data-ke-size=&quot;size23&quot;&gt;Lexical Environment&lt;/h3&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;Lexical Environment는 실행 컨텍스트 내의 유효한 변수 선언 혹은 함수 선언에 대한 식별자를 맵핑하는데 사용하는 구성요소 입니다.&lt;/p&gt;
&lt;h4 data-ke-size=&quot;size20&quot;&gt;외부 환경 레코드(Outer Environment Reference)&lt;/h4&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;외부 실행 컨텍스트를 참조하기 위해 사용되어지는 정보로, ES5이전에 스코프 체인의 역할을 이곳에서 수행합니다.&lt;/p&gt;
&lt;ul style=&quot;list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li&gt;전역 실행 컨텍스트(Global Excution Context) 일 때
&lt;ul style=&quot;list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li&gt;Outer Environment Reference의 값은 참조할 실행 컨텍스트가 없으므로 null값으로 저장&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt;함수 실행 컨텍스트(Function Lexical Environment) 일 때
&lt;ul style=&quot;list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li&gt;Outer Environment Reference의 값은 해당 실행 컨텍스트의 상위 실행 컨텍스트를 참조&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;/ul&gt;
&lt;h4 data-ke-size=&quot;size20&quot;&gt;환경 레코드(Environment Record)&lt;/h4&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;환경 레코드는 변수 선언 및 함수 선언문의 정보를 저장하는 추상 클래스 입니다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;blockquote data-ke-style=&quot;style2&quot;&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;b&gt;여기서 잠깐!&lt;/b&gt;&lt;br /&gt;&lt;br /&gt;추상 클래스란? 추상 클래스 내 정의된 추상 메소드를 하나 이상 포함한 클래스이며, 구현되어 있지 않은 추상 메소드를 포함하고 있기에 상속을 통해 사용이 가능한 클래스입니다.&lt;/p&gt;
&lt;/blockquote&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;Environment Record는 추상 클래스이기에, Environment Record를 상속받는 3가지의 서브 클래스가 존재하며,&lt;br /&gt;그 요소는 아래와 같습니다.&lt;/p&gt;
&lt;ul style=&quot;list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li&gt;Global Environment Record&lt;/li&gt;
&lt;li&gt;Object Environment Record&lt;/li&gt;
&lt;li&gt;Declarative Environment Record&lt;/li&gt;
&lt;/ul&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;그럼 위에 설명드린 실행 컨텍스트를 보기 쉽게 정리한 객체는 아래와 같이 정리할 수 있습니다.&lt;/p&gt;
&lt;pre class=&quot;javascript&quot; data-ke-language=&quot;javascript&quot;&gt;&lt;code&gt;ExecutionContext :{
	LexicalEnvironment:{
		Environment Record :{
			Global Environment Record
			Object Environment Record
			Declarative Environment Record
		}
		Outer Environment Reference
	},
	...
}&lt;/code&gt;&lt;/pre&gt;
&lt;h4 data-ke-size=&quot;size20&quot;&gt;전역 환경 레코드(Global Environment Record)&lt;/h4&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;전역 환경 레코드는 전역 객체와 빌트인 전역 객체, 스크립트 내의 모든 최상위 객체에 접근할 수 있는 식별자를 제공하는 레코드입니다. realm에서 처리되는 레코드이며, 최상위 스코프를 나타내는데 사용되는 레코드 입니다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;이론상 하나의 레코드 이지만, 실제로는&amp;nbsp;declarative Environment Record와&amp;nbsp;object Environment Record 가 합성된 형태로 정의됩니다.&lt;/p&gt;
&lt;h4 data-ke-size=&quot;size20&quot;&gt;객체 환경 레코드(Object Environment Record)&lt;/h4&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;식별자를 특정 객체의 속성으로 취급 할 때 사용되어지는 객체입니다. BindingObject라는 속성을 가지고 있으며 Environment Record에 바인딩 된 객체를 가리킵니다. &lt;br /&gt;IsWithEnvironment속성도 존재하며, 환경 레코드가 with문에 의해 생성되었는지를 나타내는 불리언 값입니다. 다만 with문 사용은 권장하지 않습니다.&lt;/p&gt;
&lt;ul style=&quot;list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li&gt;전역 실행 컨텍스트(Global Excution Context) 일 때
&lt;ul style=&quot;list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li&gt;window 객체 및 전역 빌트인 Object&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt;함수 실행 컨텍스트(Function Lexical Environment) 일 때
&lt;ul style=&quot;list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li&gt;Outer Environment Reference의 값은 해당 실행 컨텍스트의 상위 실행 컨텍스트를 참조&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;/ul&gt;
&lt;h4 data-ke-size=&quot;size20&quot;&gt;선연적 환경 레코드(Declarative Environment Record)&lt;/h4&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;선언적 환경 레코드는 var, const, let, class, module, import, function 등으로 스코프 내에서 선언된 식별자들의 바인딩을 관리하는 레코드 입니다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;선언적 환경 레코드는 추가적으로 2가지의 환경 레코드로 분류 할 수 있는데요, 각 각 함수 환경 레코드(Function Environment Record)와 모듈 환경 레코드(module Environment Record) 이 2가지로 분류되어 집니다.&lt;br /&gt;&lt;br /&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;그럼 실행 컨텍스트의 내부 구조는 아래와 같습니다.&lt;/p&gt;
&lt;pre class=&quot;javascript&quot; data-ke-language=&quot;javascript&quot;&gt;&lt;code&gt;ExecutionContext :{
	LexicalEnvironment:{
		Environment Record :{
			Global Environment Record
			Object Environment Record
			Declarative Environment Record :{
				Function Environment Record,
				Module Environment Record
			}
		}
		Outer Environment Reference
	},
	...
}&lt;/code&gt;&lt;/pre&gt;
&lt;h4 data-ke-size=&quot;size20&quot;&gt;함수 환경 레코드(Function Environment Record)&lt;/h4&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;함수의 최상위 스코프를 나타내는데 사용되는 선언적 환경 레코드입니다.&lt;/p&gt;
&lt;ul style=&quot;list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li&gt;화살표 함수 실행 컨텍스트 일 경우
&lt;ul style=&quot;list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li&gt;this 바인딩 정보를 저장&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt;화살표 함수가 아닐 경우
&lt;ul style=&quot;list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li&gt;super를 참조하는 경우 super 메소드를 실행하는데 필요한 state를 저장&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;/ul&gt;
&lt;h4 data-ke-size=&quot;size20&quot;&gt;모듈 환경 레코드(module Environment Record)&lt;/h4&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;Module의 외부 스코프를 나타낼 때 사용하는 선언적 환경 레코드입니다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;변경 가능, 변경 불가능한 바인딩과 더불어 변경 불가능한 import 바인딩(immutable import binding)을 제공합니다. immutable import binding은 참조하는 외부 레코드의 바인딩에 대해서 간접적으로 접근해 변경하지 못하게합니다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;선언적 환경 레코드의 메서드를 전부 구현하지만, GetBindingValue나 DeleteBinding 같이 바인딩에 직접적으로 접근하는 일부 메서드는 구현 스펙이 다릅니다.&lt;/p&gt;
&lt;hr contenteditable=&quot;false&quot; data-ke-type=&quot;horizontalRule&quot; data-ke-style=&quot;style1&quot; /&gt;
&lt;h3 data-ke-size=&quot;size23&quot;&gt;Variable Environment&lt;/h3&gt;
&lt;pre class=&quot;javascript&quot; data-ke-language=&quot;javascript&quot;&gt;&lt;code&gt;ExecutionContext :{
	LexicalEnvironment:{
		Environment Record :{
			Global Environment Record
			Object Environment Record
			Declarative Environment Record :{
				Function Environment Record,
				Module Environment Record
			}
		}
		Outer Environment Reference
	},
	VariableEnvironment:{
		Environment Record :{
			Global Environment Record
			Object Environment Record
			Declarative Environment Record
		}
		Outer Environment Reference
	},
	...
}&lt;/code&gt;&lt;/pre&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;전반적으로 Lexical Environment와 큰 차이가 없지만, Variable Environment는 var키워드로 생성된 변수 정보만 저장하고, Lexical Environment는 let과 const 키워드로 생성된 변수와 함수 선언의 정보를 저장한다는 차이가 있습니다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;그에 따라, Lexical Environment는 코드를 실행하는 과정에서 실행 컨텍스트 내 정보가 변경 변경될 수 있습니다, 하지만 Variable Environment는 항상 값을 유지합니다.&lt;/p&gt;
&lt;hr contenteditable=&quot;false&quot; data-ke-type=&quot;horizontalRule&quot; data-ke-style=&quot;style1&quot; /&gt;
&lt;h3 data-ke-size=&quot;size23&quot;&gt;직접 코드로 이해해보자!&lt;/h3&gt;
&lt;pre class=&quot;javascript&quot;&gt;&lt;code&gt;console.log(globalValue);
var globalValue = &quot;nowVisible&quot;;

function sayHiOneTime() {
    var isMorning = true;
    let hi = &quot;Good morning!&quot;;
    while (isMorning) {
        var name = &quot;Jack&quot;;
        let question = &quot;How are you?&quot;;
        console.log(`${name} ${hi} ${question}`);
        isMorning = false;
    }
}
sayHiOneTime();
&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock widthContent&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-filename=&quot;1.png&quot; data-origin-width=&quot;764&quot; data-origin-height=&quot;724&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/boM548/btrMnmB0ShR/mK2GHy9FniqWuHvnfMgP0K/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/boM548/btrMnmB0ShR/mK2GHy9FniqWuHvnfMgP0K/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/boM548/btrMnmB0ShR/mK2GHy9FniqWuHvnfMgP0K/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FboM548%2FbtrMnmB0ShR%2FmK2GHy9FniqWuHvnfMgP0K%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;764&quot; height=&quot;724&quot; data-filename=&quot;1.png&quot; data-origin-width=&quot;764&quot; data-origin-height=&quot;724&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;figure class=&quot;imageblock widthContent&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-filename=&quot;2.png&quot; data-origin-width=&quot;764&quot; data-origin-height=&quot;724&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/bZH1Ty/btrMkRo6LlR/Ld4j7dtK01uiBmGDZrErtK/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/bZH1Ty/btrMkRo6LlR/Ld4j7dtK01uiBmGDZrErtK/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/bZH1Ty/btrMkRo6LlR/Ld4j7dtK01uiBmGDZrErtK/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FbZH1Ty%2FbtrMkRo6LlR%2FLd4j7dtK01uiBmGDZrErtK%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;764&quot; height=&quot;724&quot; data-filename=&quot;2.png&quot; data-origin-width=&quot;764&quot; data-origin-height=&quot;724&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;figure class=&quot;imageblock widthContent&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-filename=&quot;3.png&quot; data-origin-width=&quot;764&quot; data-origin-height=&quot;979&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/cTnzK1/btrMjvnbQeo/2bXc1x2dgEbCenakCMRqyk/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/cTnzK1/btrMjvnbQeo/2bXc1x2dgEbCenakCMRqyk/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/cTnzK1/btrMjvnbQeo/2bXc1x2dgEbCenakCMRqyk/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FcTnzK1%2FbtrMjvnbQeo%2F2bXc1x2dgEbCenakCMRqyk%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;764&quot; height=&quot;979&quot; data-filename=&quot;3.png&quot; data-origin-width=&quot;764&quot; data-origin-height=&quot;979&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;figure class=&quot;imageblock widthContent&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-filename=&quot;4.png&quot; data-origin-width=&quot;764&quot; data-origin-height=&quot;979&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/Vhwmo/btrMkNUE9dW/ptHQacvPiHZek5ZCwvbW1k/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/Vhwmo/btrMkNUE9dW/ptHQacvPiHZek5ZCwvbW1k/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/Vhwmo/btrMkNUE9dW/ptHQacvPiHZek5ZCwvbW1k/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FVhwmo%2FbtrMkNUE9dW%2FptHQacvPiHZek5ZCwvbW1k%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;764&quot; height=&quot;979&quot; data-filename=&quot;4.png&quot; data-origin-width=&quot;764&quot; data-origin-height=&quot;979&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;figure class=&quot;imageblock widthContent&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-filename=&quot;5.png&quot; data-origin-width=&quot;764&quot; data-origin-height=&quot;1263&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/bZuXIb/btrMoyCcn2q/jGbG6hI9dexGOslwzvikj1/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/bZuXIb/btrMoyCcn2q/jGbG6hI9dexGOslwzvikj1/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/bZuXIb/btrMoyCcn2q/jGbG6hI9dexGOslwzvikj1/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FbZuXIb%2FbtrMoyCcn2q%2FjGbG6hI9dexGOslwzvikj1%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;764&quot; height=&quot;1263&quot; data-filename=&quot;5.png&quot; data-origin-width=&quot;764&quot; data-origin-height=&quot;1263&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;figure class=&quot;imageblock widthContent&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-filename=&quot;6.png&quot; data-origin-width=&quot;764&quot; data-origin-height=&quot;1263&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/JC5wM/btrMjQLlsy0/wTggRebf7MFRDZZXuPQrh0/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/JC5wM/btrMjQLlsy0/wTggRebf7MFRDZZXuPQrh0/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/JC5wM/btrMjQLlsy0/wTggRebf7MFRDZZXuPQrh0/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FJC5wM%2FbtrMjQLlsy0%2FwTggRebf7MFRDZZXuPQrh0%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;764&quot; height=&quot;1263&quot; data-filename=&quot;6.png&quot; data-origin-width=&quot;764&quot; data-origin-height=&quot;1263&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;figure class=&quot;imageblock widthContent&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-filename=&quot;7.png&quot; data-origin-width=&quot;764&quot; data-origin-height=&quot;983&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/nMrZj/btrMljFJUSo/WMRNny8HFlxzGtBkTEoVt1/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/nMrZj/btrMljFJUSo/WMRNny8HFlxzGtBkTEoVt1/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/nMrZj/btrMljFJUSo/WMRNny8HFlxzGtBkTEoVt1/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FnMrZj%2FbtrMljFJUSo%2FWMRNny8HFlxzGtBkTEoVt1%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;764&quot; height=&quot;983&quot; data-filename=&quot;7.png&quot; data-origin-width=&quot;764&quot; data-origin-height=&quot;983&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;figure class=&quot;imageblock widthContent&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-filename=&quot;8.png&quot; data-origin-width=&quot;764&quot; data-origin-height=&quot;737&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/tNXMo/btrMnKW75cq/kxwBOky7poKau6n4Z4YYP1/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/tNXMo/btrMnKW75cq/kxwBOky7poKau6n4Z4YYP1/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/tNXMo/btrMnKW75cq/kxwBOky7poKau6n4Z4YYP1/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FtNXMo%2FbtrMnKW75cq%2FkxwBOky7poKau6n4Z4YYP1%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;764&quot; height=&quot;737&quot; data-filename=&quot;8.png&quot; data-origin-width=&quot;764&quot; data-origin-height=&quot;737&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;/p&gt;
&lt;hr contenteditable=&quot;false&quot; data-ke-type=&quot;horizontalRule&quot; data-ke-style=&quot;style1&quot; /&gt;
&lt;h3 data-ke-size=&quot;size23&quot;&gt;접근 제한 환경(Private Environment)&lt;/h3&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;ES2019부터 #prefix가 추가되면서 실행 컨텍스트 구성요로소 추가된 환경입니다. 이 접근 제한 환경 레코드는 class키워드로 생성된 가장 근접한 클래스 내에서 Private 필드 혹은 메소드를 가지는 접근 제한 환경 레코드 정보를 가지는 구성요소 입니다. 만약 가장 근접한 클래스가 없다면 이 구성요소는 null값으로 저장되어집니다.&lt;/p&gt;
&lt;h4 data-ke-size=&quot;size20&quot;&gt;접근 제한 환경 레코드(Private Environment Record)&lt;/h4&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;접근 제한 환경 레코드(Private Environment Record)는 클래스 선언과 클래스 표현으로 생성되어진 클래스 내 Private 필드 혹은 메소드를 추적하기 위한 레코드 입니다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;추가적으로 접근 제한 환경 레코드는 OuterPrivateEnvironment와 Names라는 구성요소를 가집니다.&lt;/p&gt;
&lt;ul style=&quot;list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li&gt;OuterPrivateEnvironment
&lt;ul style=&quot;list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li&gt;외부 Private 필드 혹은 메소드를 가지는 클래스의 실행 컨텍스트를 참조하기 위해 사용되어지는 정보를 저장&lt;/li&gt;
&lt;li&gt;만약, 외부에 참조할 클래스가 없다면 null값으로 저장&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt;Names
&lt;ul style=&quot;list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li&gt;실행 컨텍스트 내의 Private한 식별자 정보를 저장&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;/ul&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;그럼 전체적인 실행 컨텍스트의 내부 구조를 객체로 표현하면 아래와 같아집니다.&lt;/p&gt;
&lt;pre class=&quot;javascript&quot; data-ke-language=&quot;javascript&quot;&gt;&lt;code&gt;ExecutionContext :{
	LexicalEnvironment:{
		Environment Record: {
			Global Environment Record
			Object Environment Record
			Declarative Environment Record :{
				Function Environment Record,
				Module Environment Record
			}
		}
		Outer Environment Reference
	},
	VariableEnvironment:{
		Environment Record: {
			Global Environment Record
			Object Environment Record
			Declarative Environment Record
		},
		Outer Environment Reference
	},
	PrivateEnvironment: {
		PrivateEnvironmentRecord: {
			OuterPrivateEnvironment,
			Names
		}
	}
}&lt;/code&gt;&lt;/pre&gt;
&lt;hr contenteditable=&quot;false&quot; data-ke-type=&quot;horizontalRule&quot; data-ke-style=&quot;style6&quot; /&gt;
&lt;h3 data-ke-size=&quot;size23&quot;&gt;마무리&lt;/h3&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;이렇게 실행컨텍스트 내용을 정리하였습니다. &lt;br /&gt;꽤 어려운 내용이라 처음에는 이해가 되질 않았지만, 정리를 하면서 많은것을 배울 수 있었습니다. &lt;br /&gt;만약 잘못된 내용이나 틀린 내용이 존재한다면 댓글로 남겨주시면 감사합니다.&lt;/p&gt;
&lt;h3 data-ke-size=&quot;size23&quot;&gt;참고문서&lt;/h3&gt;
&lt;ul style=&quot;list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li&gt;&lt;a href=&quot;https://262.ecma-international.org/13.0/#sec-execution-contexts&quot;&gt;https://262.ecma-international.org/13.0/#sec-execution-contexts&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://dkje.github.io/2020/08/30/ExecutionContext/&quot;&gt;https://dkje.github.io/2020/08/30/ExecutionContext/&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://roseline.oopy.io/dev/javascript-back-to-the-basic/environment-record&quot;&gt;https://roseline.oopy.io/dev/javascript-back-to-the-basic/environment-record&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://joontae-kim.github.io/2020/10/15/excution-context-2/&quot;&gt;https://joontae-kim.github.io/2020/10/15/excution-context-2/&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://iamsjy17.github.io/javascript/2019/06/10/js33_execution_context.html&quot;&gt;https://iamsjy17.github.io/javascript/2019/06/10/js33_execution_context.html&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;</description>
      <category>프로그래밍 언어/웹 프론트엔드</category>
      <author>방현준</author>
      <guid isPermaLink="true">https://noogoonaa.tistory.com/119</guid>
      <comments>https://noogoonaa.tistory.com/119#entry119comment</comments>
      <pubDate>Sat, 17 Sep 2022 19:32:26 +0900</pubDate>
    </item>
    <item>
      <title>[TIL] ECMA-262 Realm</title>
      <link>https://noogoonaa.tistory.com/118</link>
      <description>&lt;p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-filename=&quot;TIL.jpeg&quot; data-origin-width=&quot;1272&quot; data-origin-height=&quot;718&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/cfdtxN/btrMkR3keDN/vwT4bdyXzKcjeUxghA3bOK/img.jpg&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/cfdtxN/btrMkR3keDN/vwT4bdyXzKcjeUxghA3bOK/img.jpg&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/cfdtxN/btrMkR3keDN/vwT4bdyXzKcjeUxghA3bOK/img.jpg&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FcfdtxN%2FbtrMkR3keDN%2FvwT4bdyXzKcjeUxghA3bOK%2Fimg.jpg&quot; onerror=&quot;this.onerror=null; this.src='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png'; this.srcset='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png';&quot; loading=&quot;lazy&quot; width=&quot;1272&quot; height=&quot;718&quot; data-filename=&quot;TIL.jpeg&quot; data-origin-width=&quot;1272&quot; data-origin-height=&quot;718&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;/p&gt;
&lt;h3 data-ke-size=&quot;size23&quot;&gt;여는글&lt;/h3&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;최근, 실행컨텍스트 내용을 포스팅하기 위해 공부를 하면서 Realm라는 용어를 발견했습니다.&lt;br /&gt;이게 뭔지 몰라서 찾아보니 정보가 많이 없고 죄다 동의어인 &lt;a href=&quot;https://realm.io/?utm_source=google&amp;amp;utm_campaign=search_gs_pl_evergreen_realm_product_prosp-brand_gic-null_ww-multi_ps-all_desktop_eng_lead&amp;amp;utm_term=realm&amp;amp;utm_medium=cpc_paid_search&amp;amp;utm_ad=p&amp;amp;utm_ad_campaign_id=11303420057&amp;amp;adgroup=132586004050&amp;amp;gclid=Cj0KCQjwvZCZBhCiARIsAPXbajsYtvzlndaEO0yQMwINXqDE3yUuv3f81DaP2DyPKJTX927Uew3aYTsaAhv9EALw_wcB&quot; target=&quot;_blank&quot; rel=&quot;noopener&quot;&gt;Realm(DBMS)&lt;/a&gt;만 나오길래&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;a href=&quot;https://262.ecma-international.org/13.0/#realm&quot; target=&quot;_blank&quot; rel=&quot;noopener&quot;&gt;ECMA-262 13th edition&lt;/a&gt;에 나와있는 내용에서 배운 내용을 정리해보려고 합니다&lt;br /&gt;(TIL이기에 많이 짧습니다...)&lt;/p&gt;
&lt;hr contenteditable=&quot;false&quot; data-ke-type=&quot;horizontalRule&quot; data-ke-style=&quot;style1&quot; /&gt;
&lt;h3 data-ke-size=&quot;size23&quot;&gt;Realm&lt;/h3&gt;
&lt;blockquote data-ke-style=&quot;style2&quot;&gt;Before it is evaluated, all ECMAScript code must be associated with a&amp;nbsp;realm. Conceptually, a&amp;nbsp;realm consists of a set of intrinsic objects, an ECMAScript global environment, all of the ECMAScript code that is loaded within the scope of that global environment, and other associated state and resources.&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;ECMAscript사양을 따르는 코드들은 모두 평가과정과 실행과정을 거칩니다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;이 Realm은 ECMAscript 코드가 평가과정을 거치기 전에 연결되어져야하는 고유 객체의 집합입니다.&lt;br /&gt;Realm에 대한 설명이 꽤 추상적이기에 우리와 근접한 부분에서 Realm을 찾자면 아래와 같습니다.&lt;/p&gt;
&lt;ul style=&quot;list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li&gt;브라우저 탭&lt;/li&gt;
&lt;li&gt;브라우저 window&lt;/li&gt;
&lt;li&gt;`window.open()`으로 생성한 팝업&lt;/li&gt;
&lt;li&gt;&lt;span style=&quot;font-family: -apple-system, BlinkMacSystemFont, 'Helvetica Neue', 'Apple SD Gothic Neo', Arial, sans-serif; letter-spacing: 0px;&quot;&gt;&lt;span style=&quot;background-color: #ffffff; color: #232629;&quot;&gt;web worker&lt;/span&gt;&lt;/span&gt;&lt;/li&gt;
&lt;li&gt;&lt;span style=&quot;font-family: -apple-system, BlinkMacSystemFont, 'Helvetica Neue', 'Apple SD Gothic Neo', Arial, sans-serif; letter-spacing: 0px;&quot;&gt;&lt;span style=&quot;background-color: #ffffff; color: #232629;&quot;&gt;&lt;span style=&quot;background-color: #ffffff; color: #232629;&quot;&gt;service workers&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/li&gt;
&lt;li&gt;&lt;span style=&quot;font-family: -apple-system, BlinkMacSystemFont, 'Helvetica Neue', 'Apple SD Gothic Neo', Arial, sans-serif; letter-spacing: 0px;&quot;&gt;&lt;span style=&quot;background-color: #ffffff; color: #232629;&quot;&gt;&lt;span style=&quot;background-color: #ffffff; color: #232629;&quot;&gt;iframe&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/li&gt;
&lt;li&gt;&lt;span style=&quot;font-family: -apple-system, BlinkMacSystemFont, 'Helvetica Neue', 'Apple SD Gothic Neo', Arial, sans-serif; letter-spacing: 0px;&quot;&gt;&lt;span style=&quot;background-color: #ffffff; color: #232629;&quot;&gt;&lt;span style=&quot;background-color: #ffffff; color: #232629;&quot;&gt;기타 등등...&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;font-family: -apple-system, BlinkMacSystemFont, 'Helvetica Neue', 'Apple SD Gothic Neo', Arial, sans-serif; letter-spacing: 0px;&quot;&gt;&lt;span style=&quot;background-color: #ffffff; color: #232629;&quot;&gt;&lt;span style=&quot;background-color: #ffffff; color: #232629;&quot;&gt;위 모든것들이 각자 다른 속성의 Realm입니다.&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style=&quot;font-family: -apple-system, BlinkMacSystemFont, 'Helvetica Neue', 'Apple SD Gothic Neo', Arial, sans-serif; letter-spacing: 0px;&quot;&gt;&lt;span style=&quot;background-color: #ffffff; color: #232629;&quot;&gt;&lt;span style=&quot;background-color: #ffffff; color: #232629;&quot;&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;그럼 이 Realm은 각자의 고유 영역이 있기에 Realm들끼리는 컨트롤을 못하느냐 그건 또 아닙니다.&lt;br /&gt;왜냐하면 `window.open()`으로 팝업을 생성해도 `&lt;span style=&quot;color: #555555;&quot;&gt;window.opener`를 이용해&lt;/span&gt; 통신이 가능하고,&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;iframe또한 `window.parent`로 컨트롤이 가능하기 떄문입니다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;다만, 위에서 말씀드렸듯이 위 예시는 같은 속성의 Realm일 때 가능한 이야기이며,&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;다른 속성의 Realm들 끼리는 컨트롤할 수 없습니다.&lt;/p&gt;
&lt;hr contenteditable=&quot;false&quot; data-ke-type=&quot;horizontalRule&quot; data-ke-style=&quot;style1&quot; /&gt;
&lt;h3 data-ke-size=&quot;size23&quot;&gt;Realm Record 구성 요소&lt;/h3&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;font-family: -apple-system, BlinkMacSystemFont, 'Helvetica Neue', 'Apple SD Gothic Neo', Arial, sans-serif; letter-spacing: 0px;&quot;&gt;&lt;span style=&quot;background-color: #ffffff; color: #232629;&quot;&gt;&lt;span style=&quot;background-color: #ffffff; color: #232629;&quot;&gt;Realm Record의 내부에 구성요소는 아래와 같습니다.&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/p&gt;
&lt;ul style=&quot;list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li&gt;[[Intrinsics]]
&lt;ul style=&quot;list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li&gt;Realm과 연결된 ECMAScript 코드들이 사용하는 Value가 저장되는 레코드입니다.&lt;/li&gt;
&lt;li&gt;Intrinsics에 저장되는 Value는 고유한 이름을 가지는 객체의 레코드값입니다.&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt;[[GlobalObject]]
&lt;ul style=&quot;list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li&gt;Realm내에서 사용되어지는 전역 객체가 저장되는 레코드&lt;/li&gt;
&lt;li&gt;기본적으로 객체(Object) 값이 저장되며, 전역으로 사용되어지는 값이 없다면 null이 저장됩니다.&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt;[[GlobalEnv]]
&lt;ul style=&quot;list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li&gt;실행 컨텍스트(Excution Context)내부 구성요소에 존재하는 전역 환경 레코드(Global Environment Record)&lt;/li&gt;
&lt;li&gt;가장 바깥 스코프를 나타내는데 사용됩니다.&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt;[[TemplateMap]]
&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; color: #111111;&quot;&gt;Template objects are canonicalized separately for each&lt;span&gt;&amp;nbsp;&lt;/span&gt;&lt;/span&gt;&lt;a href=&quot;https://262.ecma-international.org/13.0/#realm&quot;&gt;realm&lt;/a&gt;&lt;span style=&quot;background-color: #ffffff; color: #111111;&quot;&gt;&lt;span&gt;&amp;nbsp;&lt;/span&gt;using its&lt;span&gt;&amp;nbsp;&lt;/span&gt;&lt;/span&gt;&lt;a href=&quot;https://262.ecma-international.org/13.0/#realm-record&quot;&gt;Realm Record&lt;/a&gt;&lt;span style=&quot;background-color: #ffffff; color: #111111;&quot;&gt;'s [[TemplateMap]]. Each [[Site]] value is a&lt;span&gt;&amp;nbsp;&lt;/span&gt;&lt;/span&gt;&lt;a href=&quot;https://262.ecma-international.org/13.0/#sec-syntactic-grammar&quot;&gt;Parse Node&lt;/a&gt;&lt;span style=&quot;background-color: #ffffff; color: #111111;&quot;&gt;&lt;span&gt;&amp;nbsp;&lt;/span&gt;that is a&lt;span&gt;&amp;nbsp;&lt;/span&gt;&lt;/span&gt;&lt;a href=&quot;https://262.ecma-international.org/13.0/#prod-TemplateLiteral&quot;&gt;TemplateLiteral&lt;/a&gt;&lt;span style=&quot;background-color: #ffffff; color: #111111;&quot;&gt;. The associated [[Array]] value is the corresponding template object that is passed to a tag function.&lt;br /&gt;&lt;/span&gt;&lt;span style=&quot;background-color: #ffffff; color: #111111;&quot;&gt;(가장 이해가 안되는 부분이기에, 원문으로 적어놓았습니다... 이해가 되시는 분은 댓글에 설명해주시면 감사하겠습니다 ㅠㅠ)&lt;/span&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt;[[HostDefined]]
&lt;ul style=&quot;list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li&gt;&lt;span style=&quot;color: #000000;&quot;&gt;&lt;span style=&quot;background-color: #fdfdfd;&quot;&gt;Real Record에서 사용하기 위해 예약된 필드입니다.&lt;/span&gt;&lt;/span&gt;&lt;/li&gt;
&lt;li&gt;&lt;span style=&quot;color: #000000;&quot;&gt;&lt;span style=&quot;background-color: #fdfdfd;&quot;&gt;모든 타입의 값이 들어갈 수 있으며 디폴트 값은 &lt;span style=&quot;background-color: #ffffff; color: #111111;&quot;&gt;undefined입니다.&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/li&gt;
&lt;li&gt;&lt;span style=&quot;background-color: #fdfdfd; color: #000000;&quot;&gt;추가적으로 &lt;span style=&quot;background-color: #fdfdfd; color: #000000;&quot;&gt;호스트(D Host Layering Points 외부 소스)에서&amp;nbsp;&lt;/span&gt;추가 정보를 연결하기 위해 해당 필드를 사용하기도 합니다.&lt;/span&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;/ul&gt;
&lt;hr contenteditable=&quot;false&quot; data-ke-type=&quot;horizontalRule&quot; data-ke-style=&quot;style6&quot; /&gt;
&lt;p style=&quot;text-align: center;&quot; data-ke-size=&quot;size14&quot;&gt;&lt;span style=&quot;color: #000000;&quot;&gt;&lt;span style=&quot;background-color: #fdfdfd;&quot;&gt;&lt;span style=&quot;color: #9d9d9d;&quot;&gt;만약 내용이 잘못된 부분이 존재한다면 댓글로 알려주시면 빠르게 수정하겠습니다&lt;/span&gt;&lt;br /&gt;&lt;/span&gt;&lt;/span&gt;&lt;/p&gt;</description>
      <category>TIL(Today I Learned)</category>
      <author>방현준</author>
      <guid isPermaLink="true">https://noogoonaa.tistory.com/118</guid>
      <comments>https://noogoonaa.tistory.com/118#entry118comment</comments>
      <pubDate>Sat, 17 Sep 2022 02:20:19 +0900</pubDate>
    </item>
    <item>
      <title>네트워크 보안의 기본! 방화벽(Firewall)에 대해서 알아보자</title>
      <link>https://noogoonaa.tistory.com/117</link>
      <description>&lt;blockquote data-ke-style=&quot;style2&quot;&gt;해당 내용은 고재성님의 &lt;a href=&quot;https://search.shopping.naver.com/book/catalog/32461021603?cat_id=50010766&amp;amp;frm=PBOKPRO&amp;amp;query=IT+%EC%97%94%EC%A7%80%EB%8B%88%EC%96%B4%EB%A5%BC+%EC%9C%84%ED%95%9C+%EB%84%A4%ED%8A%B8%EC%9B%8C%ED%81%AC+%EC%9E%85%EB%AC%B8&amp;amp;NaPm=ct%3Dl7oxnaso%7Cci%3D15f0a6cff242e033914c3d77a7e1c71aef1c0784%7Ctr%3Dboknx%7Csn%3D95694%7Chk%3D0c707779ac16d8fa7f339d6259ec8e17e3658b0e&quot; target=&quot;_blank&quot; rel=&quot;noopener&quot;&gt;IT 엔지니어를 위한 네트워크 입문&lt;/a&gt; 이라는 책을 읽고 작성한 글입니다.&lt;/blockquote&gt;
&lt;figure id=&quot;og_1662392711773&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;IT 엔지니어를 위한 네트워크 입문 : 네이버 도서&quot; data-og-description=&quot;네이버 도서 상세정보를 제공합니다.&quot; data-og-host=&quot;search.shopping.naver.com&quot; data-og-source-url=&quot;https://search.shopping.naver.com/book/catalog/32461021603?cat_id=50010766&amp;amp;frm=PBOKPRO&amp;amp;query=IT+%EC%97%94%EC%A7%80%EB%8B%88%EC%96%B4%EB%A5%BC+%EC%9C%84%ED%95%9C+%EB%84%A4%ED%8A%B8%EC%9B%8C%ED%81%AC+%EC%9E%85%EB%AC%B8&amp;amp;NaPm=ct%3Dl7oxnaso%7Cci%3D15f0a6cff242e033914c3d77a7e1c71aef1c0784%7Ctr%3Dboknx%7Csn%3D95694%7Chk%3D0c707779ac16d8fa7f339d6259ec8e17e3658b0e&quot; data-og-url=&quot;https://search.shopping.naver.com/book/catalog/32461021603&quot; data-og-image=&quot;https://scrap.kakaocdn.net/dn/bSJ6DR/hyPHfePRLw/qI0pfzOnhdkyH9DuA7AKWK/img.jpg?width=799&amp;amp;height=1027&amp;amp;face=0_0_799_1027,https://scrap.kakaocdn.net/dn/eAZRC/hyPHtKU7a2/QFSz7x3XXGMTcXHKg2Unu0/img.jpg?width=640&amp;amp;height=853&amp;amp;face=0_0_640_853,https://scrap.kakaocdn.net/dn/cwaTx9/hyPHkUKTYr/mo4qJbkTmjzJRfueswJLkk/img.jpg?width=300&amp;amp;height=422&amp;amp;face=0_0_300_422&quot;&gt;&lt;a href=&quot;https://search.shopping.naver.com/book/catalog/32461021603?cat_id=50010766&amp;amp;frm=PBOKPRO&amp;amp;query=IT+%EC%97%94%EC%A7%80%EB%8B%88%EC%96%B4%EB%A5%BC+%EC%9C%84%ED%95%9C+%EB%84%A4%ED%8A%B8%EC%9B%8C%ED%81%AC+%EC%9E%85%EB%AC%B8&amp;amp;NaPm=ct%3Dl7oxnaso%7Cci%3D15f0a6cff242e033914c3d77a7e1c71aef1c0784%7Ctr%3Dboknx%7Csn%3D95694%7Chk%3D0c707779ac16d8fa7f339d6259ec8e17e3658b0e&quot; target=&quot;_blank&quot; rel=&quot;noopener&quot; data-source-url=&quot;https://search.shopping.naver.com/book/catalog/32461021603?cat_id=50010766&amp;amp;frm=PBOKPRO&amp;amp;query=IT+%EC%97%94%EC%A7%80%EB%8B%88%EC%96%B4%EB%A5%BC+%EC%9C%84%ED%95%9C+%EB%84%A4%ED%8A%B8%EC%9B%8C%ED%81%AC+%EC%9E%85%EB%AC%B8&amp;amp;NaPm=ct%3Dl7oxnaso%7Cci%3D15f0a6cff242e033914c3d77a7e1c71aef1c0784%7Ctr%3Dboknx%7Csn%3D95694%7Chk%3D0c707779ac16d8fa7f339d6259ec8e17e3658b0e&quot;&gt;
&lt;div class=&quot;og-image&quot; style=&quot;background-image: url('https://scrap.kakaocdn.net/dn/bSJ6DR/hyPHfePRLw/qI0pfzOnhdkyH9DuA7AKWK/img.jpg?width=799&amp;amp;height=1027&amp;amp;face=0_0_799_1027,https://scrap.kakaocdn.net/dn/eAZRC/hyPHtKU7a2/QFSz7x3XXGMTcXHKg2Unu0/img.jpg?width=640&amp;amp;height=853&amp;amp;face=0_0_640_853,https://scrap.kakaocdn.net/dn/cwaTx9/hyPHkUKTYr/mo4qJbkTmjzJRfueswJLkk/img.jpg?width=300&amp;amp;height=422&amp;amp;face=0_0_300_422');&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;IT 엔지니어를 위한 네트워크 입문 : 네이버 도서&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;search.shopping.naver.com&lt;/p&gt;
&lt;/div&gt;
&lt;/a&gt;&lt;/figure&gt;
&lt;hr contenteditable=&quot;false&quot; data-ke-type=&quot;horizontalRule&quot; data-ke-style=&quot;style6&quot; /&gt;
&lt;h2 data-ke-size=&quot;size26&quot;&gt;✏️ 여는글&lt;/h2&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;여러분은 방화벽에 대해서 얼마나 알고 있나요?&lt;br /&gt;저는 그동안 방화벽을 그저 귀찮은 존재로 알고 있었습니다.&lt;br /&gt;(윈도우 방화벽으로 인해 힘들었던 기억들..ㅠㅠ)&lt;br /&gt;하지만 이번의 방화벽에 대해서 공부를 하면서 아주 중요하고도 중요한 녀석이라는 사실을 깨달았죠&lt;br /&gt;그럼 방화벽에 대해서 한번 알아보도록 하겠습니다.&lt;/p&gt;
&lt;hr contenteditable=&quot;false&quot; data-ke-type=&quot;horizontalRule&quot; data-ke-style=&quot;style1&quot; /&gt;
&lt;h2 data-ke-size=&quot;size26&quot;&gt;  방화벽(Firewall)이란?&lt;/h2&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-filename=&quot;HardwareFirewall.gif&quot; data-origin-width=&quot;600&quot; data-origin-height=&quot;338&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/zHavT/btrLnsdHz0L/pUhUMDgzDTBZfyoyZT1ju1/img.gif&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/zHavT/btrLnsdHz0L/pUhUMDgzDTBZfyoyZT1ju1/img.gif&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/zHavT/btrLnsdHz0L/pUhUMDgzDTBZfyoyZT1ju1/img.gif&quot; srcset=&quot;https://blog.kakaocdn.net/dn/zHavT/btrLnsdHz0L/pUhUMDgzDTBZfyoyZT1ju1/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;600&quot; height=&quot;338&quot; data-filename=&quot;HardwareFirewall.gif&quot; data-origin-width=&quot;600&quot; data-origin-height=&quot;338&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&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;br /&gt;따라서, 트래픽을 관리하며 보안을 담당하는 장비들을 넓은 의미에서 모두 방화벽이라고 볼 수 있지만, 많은 네트워크 보안 장비들은 각각의 그 목적과 동작 방식에 따라 많이 다릅니다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;br /&gt;일반적으로 네트워크 3계층(네트워크 계층), 4계층(전송 계층)에서 동작하며, 패킷의 헤더를 조사하는 상태 기반 패킷 검사(Stateful Packet Inspection, SPI)로 동작하거나, 패킷의 헤더 뿐만 아니라 컨텐츠까지 조사하는 심층 기반 패킷 검사(Deep Packet Inspection, DPI)로 동작하는 장비를 방화벽이라고 칭합니다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;br /&gt;이 SPI와 DPI와 관련된 내용은 아래에서 정리할 테니, 여기선 이런게 있다고만 생각하고 넘어가도록 하겠습니다.&lt;/p&gt;
&lt;hr contenteditable=&quot;false&quot; data-ke-type=&quot;horizontalRule&quot; data-ke-style=&quot;style1&quot; /&gt;
&lt;h2 data-ke-size=&quot;size26&quot;&gt;  초기의 방화벽은?&lt;/h2&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;사실 이 SPI나, DPI같은 기술은 비교적 최근에 나온 기술들입니다. &lt;br /&gt;이 SPI나, DPI같은 기술이 나오기 전의 방화벽은 굉장히 단순했습니다. &lt;br /&gt;초기 방화벽의 동작 방식은 패킷이 들어오면 패킷 내 3계층, 4계층 헤더에 존재하는 5개의 주요필드들을 가지고 정보를 분석합니다.&lt;br /&gt;그 5가지 주요필드들은 아래와 같습니다.&lt;/p&gt;
&lt;ul style=&quot;list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li&gt;출발지 IP(Source IP)
&lt;ul style=&quot;list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li&gt;데이터를 전달하는 목적지의 IP&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt;출발지 Port(Source Port)
&lt;ul style=&quot;list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li&gt;데이터를 전달하는 목적지의 포트번호&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt;도착지 IP(Destination IP)
&lt;ul style=&quot;list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li&gt;데이터를 전달받는 목적지의 IP&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt;도착지 Port(Destination Port)
&lt;ul style=&quot;list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li&gt;데이터를 전달받는 목적지의 포트번호&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt;프로토콜 번호(Protocol No)
&lt;ul style=&quot;list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li&gt;3계층 프로토콜 지시자로 TCP및 UDP를 지정할 때 사용합니다.&lt;/li&gt;
&lt;li&gt;TCP는 6, UDO는 17입니다.&amp;nbsp;&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;/ul&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;위 5가지의 주요 필드를 일컫는 말로 5-튜플(5-Tuple)이라고 합니다.&lt;br /&gt;이러한 5-튜플을 분석하여, 방화벽에 일치된 정책이 있으면 패킷을 허용하거나 차단합니다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;그저 장비의 등록된 정책만으로 패킷 필터링 기능을 가진 초기의&amp;nbsp;방화벽을 무상태 기반 패킷 검사(Stateless Packet Inspection) 혹은 무상태 기반 패킷 필터링(Stateless Packet Filtering) 방화벽 이라고 합니다.&lt;/p&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;그에따라 3~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;따라서 현대의 SPI및 DPI 기술이 나오게 된것입니다.&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;span&gt;무상태 기반 패킷 필터링(Stateless Packet Filtering) 방화벽&lt;span&gt; 기능이 추가되어 나오는 장비들도 꽤 있습니다.&lt;/span&gt;&lt;/span&gt;&lt;/p&gt;
&lt;hr contenteditable=&quot;false&quot; data-ke-type=&quot;horizontalRule&quot; data-ke-style=&quot;style1&quot; /&gt;
&lt;h2 data-ke-size=&quot;size26&quot;&gt;  현대의 방화벽 기술들 SPI와 DPI&lt;/h2&gt;
&lt;h4 data-ke-size=&quot;size20&quot;&gt;상태 기반 패킷 검사(Stateful Packet Inspection, SPI)&lt;/h4&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;먼저 SPI부터 설명드리도록 하겠습니다. SPI는 Stateful Packet Inspection(상태 기반 패킷 검사)의 준말이며, 패킷의 헤더 정보를 조사하고 3계층에서 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;SPI는 패킷의 헤더 정보만으로 트래픽을 판단하고 패킷의 페이로드까지는 살펴볼 수 없기 때문에, 정교한 분석은 어렵습니다. 하지만, 헤더 정보만 분석하기에 그 만큼 빠른 분석이 가능하며 대용량 트래픽을 쉽게 그리고 빠르게 처리할 수 있는 장점이 있습니다. 따라서 최근 대용량 트래픽 서비스가 많아지고 있기에 아래 설명할 DPI에 비해 상대적으로 많이 사용하는 기술입니다.&lt;/p&gt;
&lt;h4 data-ke-size=&quot;size20&quot;&gt;심층 기반 패킷 검사(Deep Packet Inspection, DPI)&lt;/h4&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;DPI는 Deep Packet Inspection(심층 기반 패킷 검사)의 준말이며, 패킷의 헤더뿐만 아니라 페이로드까지 정보를 조사하고 3계층에서 7계층까지 분석하여 트래픽 허용여부를 판단하는 기술입니다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;DPI는 콘텐츠가 담겨 있는 페이로드까지 조사를 하기에, 데이터 보호 및 프라이버시 이슈를 야기하지만, 보안이 가장 중요한 상황에서는 종종 쓰이는 기술입니다. 다만, 이 기술은 분석성이 높기에 비용이 많이 들어가게되고, SPI에 비해 많이 느리기 때문에, 잘 사용하지 않고 있습니다.&lt;/p&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;table style=&quot;border-collapse: collapse; width: 100%;&quot; border=&quot;1&quot; data-ke-align=&quot;alignLeft&quot;&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td style=&quot;width: 25%; text-align: center;&quot;&gt;구분&lt;/td&gt;
&lt;td style=&quot;width: 25%; text-align: center;&quot;&gt;SPI&lt;/td&gt;
&lt;td style=&quot;width: 25%; text-align: center;&quot;&gt;DPI&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td style=&quot;width: 25%; text-align: center;&quot;&gt;분석 계층&lt;/td&gt;
&lt;td style=&quot;width: 25%; text-align: center;&quot;&gt;3~4계층&lt;/td&gt;
&lt;td style=&quot;width: 25%; text-align: center;&quot;&gt;3~7계층&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td style=&quot;width: 25%; text-align: center;&quot;&gt;처리 속도&lt;/td&gt;
&lt;td style=&quot;width: 25%; text-align: center;&quot;&gt;빠름&lt;/td&gt;
&lt;td style=&quot;width: 25%; text-align: center;&quot;&gt;느림&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td style=&quot;width: 25%; text-align: center;&quot;&gt;분석성&lt;/td&gt;
&lt;td style=&quot;width: 25%; text-align: center;&quot;&gt;낮음&lt;/td&gt;
&lt;td style=&quot;width: 25%; text-align: center;&quot;&gt;높음&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td style=&quot;width: 25%; text-align: center;&quot;&gt;비용&lt;/td&gt;
&lt;td style=&quot;width: 25%; text-align: center;&quot;&gt;낮음&lt;/td&gt;
&lt;td style=&quot;width: 25%; text-align: center;&quot;&gt;높음&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;또한, 아래 영상을 통해 지금까지 배웠던 내용을 2분만에 되새겨봅시다.&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=5geL5yHpa2Q&quot; data-video-thumbnail=&quot;https://scrap.kakaocdn.net/dn/dVMvPO/hyPHkf9pVk/RAxn10DZ96kxpPwKobnf41/img.jpg?width=1280&amp;amp;height=720&amp;amp;face=0_0_1280_720&quot; data-video-width=&quot;860&quot; data-video-height=&quot;484&quot; data-video-origin-width=&quot;860&quot; data-video-origin-height=&quot;484&quot; data-ke-mobilestyle=&quot;widthContent&quot;&gt;&lt;iframe src=&quot;https://www.youtube.com/embed/5geL5yHpa2Q&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;hr contenteditable=&quot;false&quot; data-ke-type=&quot;horizontalRule&quot; data-ke-style=&quot;style1&quot; /&gt;
&lt;h2 data-ke-size=&quot;size26&quot;&gt;  방화벽 동작 방식&lt;/h2&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-filename=&quot;128654321-c71b04b0-7515-4bdb-9d06-e12c468a2f07.png&quot; data-origin-width=&quot;1796&quot; data-origin-height=&quot;1284&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/LWMsB/btrLwH7NPJv/xIpsRMFsVjJNYItXWBe7Ek/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/LWMsB/btrLwH7NPJv/xIpsRMFsVjJNYItXWBe7Ek/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/LWMsB/btrLwH7NPJv/xIpsRMFsVjJNYItXWBe7Ek/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FLWMsB%2FbtrLwH7NPJv%2FxIpsRMFsVjJNYItXWBe7Ek%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;1796&quot; height=&quot;1284&quot; data-filename=&quot;128654321-c71b04b0-7515-4bdb-9d06-e12c468a2f07.png&quot; data-origin-width=&quot;1796&quot; data-origin-height=&quot;1284&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;자 이제, 방화벽이 어떻게 동작하는지를 배워보도록 하겠습니다. 방화벽이 패킷을 처리하는 순서는 아래와 같습니다.&lt;/p&gt;
&lt;ol style=&quot;list-style-type: decimal;&quot; data-ke-list-type=&quot;decimal&quot;&gt;
&lt;li&gt;장비에 패킷이 들어오면 우선 세션 테이블을 확인합니다.
&lt;ol style=&quot;list-style-type: decimal;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li&gt;조건에 맞는 세션 정보가 세션 테이블에 있을 때
&lt;ol style=&quot;list-style-type: decimal;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li&gt;(2번으로 이동)&lt;/li&gt;
&lt;/ol&gt;
&lt;/li&gt;
&lt;li&gt;조건에 맞는 세션 정보가 세션 테이블에 없을 때
&lt;ol style=&quot;list-style-type: decimal;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li&gt;방화벽 정책을 확인합니다.
&lt;ol style=&quot;list-style-type: decimal;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li&gt;방화벽 정책을 첫번째 부터 마지막까지 모두 확인 후 허용 정책이 없을 때
&lt;ol style=&quot;list-style-type: decimal;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li&gt;임시적인 거부(Implicit Denial) 규칙을 참고해 차단합니다.&lt;/li&gt;
&lt;/ol&gt;
&lt;/li&gt;
&lt;li&gt;방화벽 정책을 확인하는 중 허용 정책이 존재할 때
&lt;ol style=&quot;list-style-type: decimal;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li&gt;세션 테이블의 기록&lt;/li&gt;
&lt;/ol&gt;
&lt;/li&gt;
&lt;/ol&gt;
&lt;/li&gt;
&lt;/ol&gt;
&lt;/li&gt;
&lt;/ol&gt;
&lt;/li&gt;
&lt;li&gt;포워딩 테이블을 확인
&lt;ol style=&quot;list-style-type: decimal;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li&gt;조건에 맞는 정보가 포워딩 테이블에 있을 때
&lt;ol style=&quot;list-style-type: decimal;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li&gt;조건에 맞는 정보가 포워딩 테이블에 없을 떄&lt;/li&gt;
&lt;/ol&gt;
&lt;/li&gt;
&lt;li&gt;패킷을 폐기합니다.
&lt;ol style=&quot;list-style-type: decimal;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li&gt;적절한 인터페이스로 패킷을 포워딩합니다.&lt;/li&gt;
&lt;/ol&gt;
&lt;/li&gt;
&lt;/ol&gt;
&lt;/li&gt;
&lt;/ol&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;SPI엔진 혹은 DPI엔진을 가진 방화벽은 세션 인지 기능이 있어 5-Tuple과 더불어 3계층 ~ 4계층의 세부적인 필드도 함께 확인합니다. &lt;br /&gt;그에따라 무상태 기반 패킷 필터링에 비해 세션을 추가로 인지하고 세션 테이블에 정보를 저장하므로 세션을 로깅하기가 쉽습니다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;대부분 방화벽은 통신 전체의 세션을 로그로 저장할 수 있어 보안사고 시 이러한 세션 로그를 기반으로 어떤 통신이 문제가 있었는지 판단할 수 있습니다.&lt;/p&gt;
&lt;hr contenteditable=&quot;false&quot; data-ke-type=&quot;horizontalRule&quot; data-ke-style=&quot;style1&quot; /&gt;
&lt;h2 data-ke-size=&quot;size26&quot;&gt;  방화벽의 한계&lt;/h2&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;초기의 방화벽은 전문적인 지식으로 한정된 네트워크에서 힘들게 유지되던 시기를 지나 현재는 SPI및 DPI 방화벽 엔진들로 인해 많은 공격을 쉽게 방어할 수 있게 되었습니다. &lt;br /&gt;그렇기에 현대에는 많은 서비스에서 방화벽을 사용되자, 해커들의 해킹 방식은 계정 탈취에서 서비스 중단쪽으로 바뀌고, DDOS및 웜 공격등이 해킹에 새로운 트렌드로 바뀌었습니다. &lt;br /&gt;이에 따라 방화벽을 우회하는 다양한 공격이 개발되고 인터넷 서비스가 마비되면서 방화벽의 한계가 명확히 드러났습니다. &lt;br /&gt;현재는 이러한 공격에 방어를 위해 IPS 등과 같은 보안장비가 개발되어 왔지만, 해커의 공격들이 매우 다양해 그에 따른 취약점도 지속적으로 발생하고 있습니다.&lt;/p&gt;
&lt;hr contenteditable=&quot;false&quot; data-ke-type=&quot;horizontalRule&quot; data-ke-style=&quot;style5&quot; /&gt;
&lt;h2 data-ke-size=&quot;size26&quot;&gt;참고문서&lt;/h2&gt;
&lt;ul style=&quot;list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li&gt;&lt;a href=&quot;https://www.milesweb.in/blog/technology-hub/difference-between-hardware-firewall-and-software-firewalls/&quot; target=&quot;_blank&quot; rel=&quot;noopener&quot;&gt;https://www.milesweb.in/blog/technology-hub/difference-between-hardware-firewall-and-software-firewalls/&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://blog.naver.com/printf7/221365884108&quot; target=&quot;_blank&quot; rel=&quot;noopener&quot;&gt;https://blog.naver.com/printf7/221365884108&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://blog.pages.kr/454&quot; target=&quot;_blank&quot; rel=&quot;noopener&quot;&gt;https://blog.pages.kr/454&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://m.blog.naver.com/PostView.naver?isHttpsRedirect=true&amp;amp;blogId=wind1237&amp;amp;logNo=221394425752&quot;&gt;https://m.blog.naver.com/PostView.naver?isHttpsRedirect=true&amp;amp;blogId=wind1237&amp;amp;logNo=221394425752&lt;/a&gt;&amp;nbsp;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://kb.synology.com/ko-kr/SRM/tutorial/What_is_SPI_firewall&quot; target=&quot;_blank&quot; rel=&quot;noopener&quot;&gt;https://kb.synology.com/ko-kr/SRM/tutorial/What_is_SPI_firewall&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://ensxoddl.tistory.com/268&quot; target=&quot;_blank&quot; rel=&quot;noopener&quot;&gt;https://ensxoddl.tistory.com/268&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;</description>
      <category>네트워크</category>
      <author>방현준</author>
      <guid isPermaLink="true">https://noogoonaa.tistory.com/117</guid>
      <comments>https://noogoonaa.tistory.com/117#entry117comment</comments>
      <pubDate>Tue, 6 Sep 2022 01:12:13 +0900</pubDate>
    </item>
    <item>
      <title>Javascript를 다중 스레드 처럼 사용하기 - 웹 워커(Web Worker), 공유메모리(SharedArrayBuffer), Atomics 객체 정리</title>
      <link>https://noogoonaa.tistory.com/116</link>
      <description>&lt;blockquote data-ke-style=&quot;style2&quot;&gt;해당 내용은 &lt;a href=&quot;http://hacks.mozilla.or.kr/2017/11/a-cartoon-intro-to-arraybuffers-and-sharedarraybuffers/&quot;&gt;만화로 소개하는 ArrayBuffer 와 SharedArrayBuffer&lt;/a&gt;와 &lt;a href=&quot;https://search.shopping.naver.com/book/catalog/33703422622?cat_id=50010881&amp;amp;frm=PBOKMOD&amp;amp;query=%EC%9B%B9+%EA%B0%9C%EB%B0%9C%EC%9E%90%EB%A5%BC+%EC%9C%84%ED%95%9C+%EC%9E%90%EB%B0%94%EC%8A%A4%ED%81%AC%EB%A6%BD%ED%8A%B8%EC%9D%98+%EB%AA%A8%EB%93%A0+%EA%B2%83&amp;amp;NaPm=ct%3Dl7d2a7dc%7Cci%3Dedc92d8827a6358422281bb8ef861959ca480bba%7Ctr%3Dboknx%7Csn%3D95694%7Chk%3D1b0a2479bd5996e2c8882310e21e2ed9427cd2cc&quot;&gt;T.J 크라우더의 웹 개발자를 위한 자바스크립트의 모든 것&lt;/a&gt;이라는 책을 읽고 작성한 글입니다.&lt;/blockquote&gt;
&lt;figure id=&quot;og_1661765489943&quot; contenteditable=&quot;false&quot; data-ke-type=&quot;opengraph&quot; data-ke-align=&quot;alignCenter&quot; data-og-type=&quot;website&quot; data-og-title=&quot;웹 개발자를 위한 자바스크립트의 모든 것 : 네이버 도서&quot; data-og-description=&quot;네이버 도서 상세정보를 제공합니다.&quot; data-og-host=&quot;search.shopping.naver.com&quot; data-og-source-url=&quot;https://search.shopping.naver.com/book/catalog/33703422622?cat_id=50010881&amp;amp;frm=PBOKMOD&amp;amp;query=%EC%9B%B9+%EA%B0%9C%EB%B0%9C%EC%9E%90%EB%A5%BC+%EC%9C%84%ED%95%9C+%EC%9E%90%EB%B0%94%EC%8A%A4%ED%81%AC%EB%A6%BD%ED%8A%B8%EC%9D%98+%EB%AA%A8%EB%93%A0+%EA%B2%83&amp;amp;NaPm=ct%3Dl7d2a7dc%7Cci%3Dedc92d8827a6358422281bb8ef861959ca480bba%7Ctr%3Dboknx%7Csn%3D95694%7Chk%3D1b0a2479bd5996e2c8882310e21e2ed9427cd2cc&quot; data-og-url=&quot;https://search.shopping.naver.com/book/catalog/33703422622&quot; data-og-image=&quot;https://scrap.kakaocdn.net/dn/b8uW0F/hyPDfdZddJ/kKrO8mqoYsD4A0h4Rc9Qwk/img.jpg?width=690&amp;amp;height=886&amp;amp;face=0_0_690_886,https://scrap.kakaocdn.net/dn/bZQ9TF/hyPDesB4sJ/kk5l0y8xwDcizCQRldG32k/img.jpg?width=300&amp;amp;height=439&amp;amp;face=0_0_300_439,https://scrap.kakaocdn.net/dn/bK2Ae0/hyPC7mIiBu/0i220956dWSa6xanQN6040/img.jpg?width=300&amp;amp;height=413&amp;amp;face=0_0_300_413&quot;&gt;&lt;a href=&quot;https://search.shopping.naver.com/book/catalog/33703422622?cat_id=50010881&amp;amp;frm=PBOKMOD&amp;amp;query=%EC%9B%B9+%EA%B0%9C%EB%B0%9C%EC%9E%90%EB%A5%BC+%EC%9C%84%ED%95%9C+%EC%9E%90%EB%B0%94%EC%8A%A4%ED%81%AC%EB%A6%BD%ED%8A%B8%EC%9D%98+%EB%AA%A8%EB%93%A0+%EA%B2%83&amp;amp;NaPm=ct%3Dl7d2a7dc%7Cci%3Dedc92d8827a6358422281bb8ef861959ca480bba%7Ctr%3Dboknx%7Csn%3D95694%7Chk%3D1b0a2479bd5996e2c8882310e21e2ed9427cd2cc&quot; target=&quot;_blank&quot; rel=&quot;noopener&quot; data-source-url=&quot;https://search.shopping.naver.com/book/catalog/33703422622?cat_id=50010881&amp;amp;frm=PBOKMOD&amp;amp;query=%EC%9B%B9+%EA%B0%9C%EB%B0%9C%EC%9E%90%EB%A5%BC+%EC%9C%84%ED%95%9C+%EC%9E%90%EB%B0%94%EC%8A%A4%ED%81%AC%EB%A6%BD%ED%8A%B8%EC%9D%98+%EB%AA%A8%EB%93%A0+%EA%B2%83&amp;amp;NaPm=ct%3Dl7d2a7dc%7Cci%3Dedc92d8827a6358422281bb8ef861959ca480bba%7Ctr%3Dboknx%7Csn%3D95694%7Chk%3D1b0a2479bd5996e2c8882310e21e2ed9427cd2cc&quot;&gt;
&lt;div class=&quot;og-image&quot; style=&quot;background-image: url('https://scrap.kakaocdn.net/dn/b8uW0F/hyPDfdZddJ/kKrO8mqoYsD4A0h4Rc9Qwk/img.jpg?width=690&amp;amp;height=886&amp;amp;face=0_0_690_886,https://scrap.kakaocdn.net/dn/bZQ9TF/hyPDesB4sJ/kk5l0y8xwDcizCQRldG32k/img.jpg?width=300&amp;amp;height=439&amp;amp;face=0_0_300_439,https://scrap.kakaocdn.net/dn/bK2Ae0/hyPC7mIiBu/0i220956dWSa6xanQN6040/img.jpg?width=300&amp;amp;height=413&amp;amp;face=0_0_300_413');&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;search.shopping.naver.com&lt;/p&gt;
&lt;/div&gt;
&lt;/a&gt;&lt;/figure&gt;
&lt;hr contenteditable=&quot;false&quot; data-ke-type=&quot;horizontalRule&quot; data-ke-style=&quot;style6&quot; /&gt;
&lt;h2 data-ke-size=&quot;size26&quot;&gt;&lt;b&gt;여는글&lt;/b&gt;&lt;/h2&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;여러분들은 자바스크립트가 싱글 스레드로 동작하는것을 알고 있으신가요?아마 어느정도 자바스크립트의 이해도가 있는 프론트엔드 개발자라면 자바스크립트는 싱글 스레드 언어란 것을 알고 있을겁니다.하지만, 이 말이 맞는 말이기도 하고, 틀린 말이기도 합니다.왜냐하면 웹 워커로 메인스레드와 워커 스레드를 만들 어 사용할 수 있기 때문이죠.&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;480&quot; data-origin-height=&quot;355&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/KIwiA/btrKURJ8tUq/8Dt6KyrZtVwFCmVeK0WctK/img.jpg&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/KIwiA/btrKURJ8tUq/8Dt6KyrZtVwFCmVeK0WctK/img.jpg&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/KIwiA/btrKURJ8tUq/8Dt6KyrZtVwFCmVeK0WctK/img.jpg&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FKIwiA%2FbtrKURJ8tUq%2F8Dt6KyrZtVwFCmVeK0WctK%2Fimg.jpg&quot; onerror=&quot;this.onerror=null; this.src='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png'; this.srcset='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png';&quot; loading=&quot;lazy&quot; width=&quot;480&quot; height=&quot;355&quot; data-origin-width=&quot;480&quot; data-origin-height=&quot;355&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;/p&gt;
&lt;hr contenteditable=&quot;false&quot; data-ke-type=&quot;horizontalRule&quot; data-ke-style=&quot;style1&quot; /&gt;
&lt;h2 data-ke-size=&quot;size26&quot;&gt;웹 워커(Web Worker)&lt;/h2&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-filename=&quot;eN5kePr9U0aZMgCyekhJ.jpg&quot; data-origin-width=&quot;741&quot; data-origin-height=&quot;425&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/ram1Y/btrKOiQnCfc/Fnm85SivsVTcKvk0Z1SfPk/img.jpg&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/ram1Y/btrKOiQnCfc/Fnm85SivsVTcKvk0Z1SfPk/img.jpg&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/ram1Y/btrKOiQnCfc/Fnm85SivsVTcKvk0Z1SfPk/img.jpg&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2Fram1Y%2FbtrKOiQnCfc%2FFnm85SivsVTcKvk0Z1SfPk%2Fimg.jpg&quot; onerror=&quot;this.onerror=null; this.src='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png'; this.srcset='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png';&quot; loading=&quot;lazy&quot; width=&quot;741&quot; height=&quot;425&quot; data-filename=&quot;eN5kePr9U0aZMgCyekhJ.jpg&quot; data-origin-width=&quot;741&quot; data-origin-height=&quot;425&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;웹 워커란 웹 브라우저(혹은 노드)에서 워커 쓰레드를 활용할 수 있는 웹 API입니다. 따라서 단일 스레드 기반의 자바스크립트도 이 웹 워커를 사용하면 충분히 멀티스레드가 가능합니다. 다만, 이 웹 워커는 복잡한 연산에는 사용할 수 있지만,&amp;nbsp;Window나&amp;nbsp;Document같은 Dom 객체에 접근할 수 없어서 UI접근이 불가능합니다. 즉 자바스크립트의 단일 스레드는 UI스레드라고 보면 되고, UI스레드가 처리하기 어려운 무거운 연산(AI, games, image encoding, etc)은 웹 워커를 이용해 CPU가 처리한다고 보면 됩니다.&lt;/p&gt;
&lt;hr contenteditable=&quot;false&quot; data-ke-type=&quot;horizontalRule&quot; data-ke-style=&quot;style1&quot; /&gt;
&lt;h2 data-ke-size=&quot;size26&quot;&gt;웹 워커를 활용한 멀티스레드의 문제 그리고 SharedArrayBuffer&lt;/h2&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;스레드를 다뤄봤던 사람들이라면 잘 아시겠지만, 스레드는 각각이 독립적인 단위로 움직입니다. 그러면서 자연적으로 발생하는 문제는 자원 공유가 어렵다는 것 입니다. 따라서 멀티스레드를 지원하는 언어들 중, 대부분이 자원을 공유할 수 있는 방법을 제공했습니다. 하지만, 자바스크립트는 브라우저의 스레드 간 메모리를 공유할 방법을 제공하지 않았습니다(물론 반쪽자리 공유방법인 ArrayBuffer는 존재했습니다&amp;hellip;) 하지만 ES2017에서 포함된 SharedArrayBuffer가 이것을 가능하게 했습니다. 어지럽습니다... ArrayBuffer는 뭐고 SharedArrayBuffer는 뭘까요?&lt;/p&gt;
&lt;hr contenteditable=&quot;false&quot; data-ke-type=&quot;horizontalRule&quot; data-ke-style=&quot;style1&quot; /&gt;
&lt;h2 data-ke-size=&quot;size26&quot;&gt;ArrayBuffer가 뭔가요?&lt;/h2&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-origin-width=&quot;500&quot; data-origin-height=&quot;377&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/sxMOs/btrKU68xbKH/n5xEnZ0p8IjKzApbI1rZf1/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/sxMOs/btrKU68xbKH/n5xEnZ0p8IjKzApbI1rZf1/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/sxMOs/btrKU68xbKH/n5xEnZ0p8IjKzApbI1rZf1/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FsxMOs%2FbtrKU68xbKH%2Fn5xEnZ0p8IjKzApbI1rZf1%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;500&quot; height=&quot;377&quot; data-origin-width=&quot;500&quot; data-origin-height=&quot;377&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;일단 먼저 저희는 ArrayBuffer에 대해서 알고 가야 합니다. ArrayBuffer란 오로지 숫자로만 표현할 수 있는 배열입니다. 실직적인 동작은 Javascript의 배열과 비슷하게 동작합니다. 다만, 이 ArrayBuffer란 녀석은 문자열이나 객체를 받을 수 없고 숫자로 된 바이트열을 값으로 받을 수 있습니다.예를 한번 보도록 하겠습니다.&lt;/p&gt;
&lt;pre id=&quot;code_1661783185111&quot; class=&quot;javascript&quot; data-ke-language=&quot;javascript&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;// 4바이트로 버퍼를 만든 상태, 1byte는 8bit이기 때문에 계산하면 4바이트는 32비트가 된다.
const buffer = new ArrayBuffer(4);

// 32비트의 버퍼를 1바이트당 8비트로 할당을 해주면 총 배열 길이는 4가 되고 
// 각 배열 공간마다 8비트의 공간이 할당된다.
const view = new Int8Array(buffer);
 
console.log(view);
 
view[0] = 256;
view[1] = 257;
view[2] = 258;
view[3] = 259;
 
console.log(view);&lt;/code&gt;&lt;/pre&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;확실히 뭔가 많이 복잡합니다. 여기서 집중해서 볼 부분은 ArrayBuffer로 객체를 생성하는 부분입니다. 이 ArrayBuffer는 생성 될 때 구간을 나누지 않고 전달받은 바이트 열을 그대로 크기만 가지고 버퍼를 만듭니다. 아래 그림처럼 말이죠&lt;/p&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-origin-width=&quot;500&quot; data-origin-height=&quot;61&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/dcPMjF/btrKQhXX2BR/7mNmyRABHKV6tjlbPdK3M0/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/dcPMjF/btrKQhXX2BR/7mNmyRABHKV6tjlbPdK3M0/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/dcPMjF/btrKQhXX2BR/7mNmyRABHKV6tjlbPdK3M0/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FdcPMjF%2FbtrKQhXX2BR%2F7mNmyRABHKV6tjlbPdK3M0%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;500&quot; height=&quot;61&quot; data-origin-width=&quot;500&quot; data-origin-height=&quot;61&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;ArrayBuffer에 담긴 정보를 직접 수정하는건 불가능합니다. 즉, 이 ArrayBuffer는 단순한 이진 데이터 배열에 불과하단 것이죠. 그렇다면 이 이진데이터 덩어리들을 어떻게 사용해야 할까요? 그건 바로 view 라고 불리는 것으로 감싸야 합니다. view 로 표현된 데이터를 typed array (형식화 배열)에 추가할 수 있습니다. JavaScript 는 view 를 다룰 수 있는 다양한 typed array (형식화 배열)을 제공합니다. 예를 들어, 우리는 Int8 typed array (Int8 형식화 배열)를 이용해서 데이터 덩어리를 8-bit 단위의 바이트 값들로 나눌 수 있습니다. 아래 그림처럼 말입니다.&lt;/p&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-origin-width=&quot;500&quot; data-origin-height=&quot;177&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/cgoP2i/btrKU8eaNgW/yPu77Nzrv7NBT2r1akqtT1/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/cgoP2i/btrKU8eaNgW/yPu77Nzrv7NBT2r1akqtT1/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/cgoP2i/btrKU8eaNgW/yPu77Nzrv7NBT2r1akqtT1/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FcgoP2i%2FbtrKU8eaNgW%2FyPu77Nzrv7NBT2r1akqtT1%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;500&quot; height=&quot;177&quot; data-origin-width=&quot;500&quot; data-origin-height=&quot;177&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;이런 방식으로, ArrayBuffer 는 기본적으로 메모리 자체인 것처럼 동작합니다. ArrayBuffer 는 C 같은 랭귀지를 사용할 때처럼 메모리를 직접 다루는 방식과 비슷한 효과를 만들어 냅니다. 그래서 이걸 어디다가 사용하냐구요? 아래에서 더 설명하도록 하겠습니다.&lt;/p&gt;
&lt;hr contenteditable=&quot;false&quot; data-ke-type=&quot;horizontalRule&quot; data-ke-style=&quot;style1&quot; /&gt;
&lt;h2 data-ke-size=&quot;size26&quot;&gt;SharedArrayBuffer가 뭔가요?&lt;/h2&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-origin-width=&quot;500&quot; data-origin-height=&quot;360&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/m0u0T/btrKQjnWhh9/mypSIyiHobOPeifIuBfkx1/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/m0u0T/btrKQjnWhh9/mypSIyiHobOPeifIuBfkx1/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/m0u0T/btrKQjnWhh9/mypSIyiHobOPeifIuBfkx1/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2Fm0u0T%2FbtrKQjnWhh9%2FmypSIyiHobOPeifIuBfkx1%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;500&quot; height=&quot;360&quot; data-origin-width=&quot;500&quot; data-origin-height=&quot;360&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;SharedArrayBuffer란 이름에서 알 수 있다시피, &amp;nbsp;ArrayBuffer를 공유하는 객체입니다. 잘 이해가 안가실겁니다. 이 말의 이해를 위해서 Javascript의 병렬 처리 로직을 조금 설명하고 들어가겠습니다. 개발자들은 기본적으로 유저에게 빠른 결과값을 제공하기 위해 별렬 처리 로직을 이용해 코드를 작성해 왔습니다. Javascript에서도 웹 워커를 이용하여 메인 스레드(UI 스레드)와 보조 스레드(연산 스레드)가 역할을 분리하여 작업을 할 수 있도록 처리되어져 왔고 사용자는 보다 빠른 결과값을 제공 받을 수 있었습니다. 하지만, 웹 워커는 단점이 존재하는데 워커들 즉 스레드 들끼리 메모리를 공유하지 않습니다.&lt;/p&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-origin-width=&quot;500&quot; data-origin-height=&quot;355&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/dr7NHW/btrKT2r7Dpm/k0EtD35dVO8kh41LKWdRz1/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/dr7NHW/btrKT2r7Dpm/k0EtD35dVO8kh41LKWdRz1/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/dr7NHW/btrKT2r7Dpm/k0EtD35dVO8kh41LKWdRz1/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2Fdr7NHW%2FbtrKT2r7Dpm%2Fk0EtD35dVO8kh41LKWdRz1%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;500&quot; height=&quot;355&quot; data-origin-width=&quot;500&quot; data-origin-height=&quot;355&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;이러한 단점은 꽤 크게 다가오는데 만약 우리가 다른 스레드와 어떤 데이터를 공유하고 싶다면, 그 데이터를 복사해서 전달해야만 한다는 뜻입니다. 이 작업은&amp;nbsp;postMessage&amp;nbsp;함수에 의해 처리됩니다. postMessage 에 어떤 객체를 전달하면, postMessage 함수는 그것을 직렬화해서(serialize) 다른 web worker 에 전달합니다. 그러면 데이터를 전달 받은 web worker 가 데이터를 풀어서(deserialize) 메모리에 복사합니다. 하지만 이러한 방법은 매우 느린 작업입니다.&lt;/p&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-origin-width=&quot;500&quot; data-origin-height=&quot;360&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/cxd0Ir/btrKOJmNh9x/ZRbOY8IaltnSnvEOUTIOiK/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/cxd0Ir/btrKOJmNh9x/ZRbOY8IaltnSnvEOUTIOiK/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/cxd0Ir/btrKOJmNh9x/ZRbOY8IaltnSnvEOUTIOiK/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2Fcxd0Ir%2FbtrKOJmNh9x%2FZRbOY8IaltnSnvEOUTIOiK%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;500&quot; height=&quot;360&quot; data-origin-width=&quot;500&quot; data-origin-height=&quot;360&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;ArrayBuffer 같은 메모리의 경우, 메모리 전달하기(transferring memory)라는 것이 가능합니다. 메모리 전달하기란 메모리의 특정 블록 소유권을 다른 web worker 로 이전하는 것입니다. 그러면 원래 해당 메모리 블록을 소유하고 있던 web worker 는 더이상 그 블록에 접근할 수 없게 됩니다. 사실 이러한 방식으로도 충분히 웹 워커 끼리 통신을 할 수 있고 고성능 병렬 처리 코드가 필요한 많지 않은 경우에는 이 방식이 적절하기도 합니다. 하지만 , 우리가 정말 원하는 것은 공유 메모리 (shared memory)입니다. SharedArrayBuffer 가 바로 이 기능을 제공합니다.&lt;/p&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-origin-width=&quot;500&quot; data-origin-height=&quot;349&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/INsHR/btrKQScIY2L/uht12Elsh9r6XIgpjQ3ewk/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/INsHR/btrKQScIY2L/uht12Elsh9r6XIgpjQ3ewk/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/INsHR/btrKQScIY2L/uht12Elsh9r6XIgpjQ3ewk/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FINsHR%2FbtrKQScIY2L%2Fuht12Elsh9r6XIgpjQ3ewk%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;500&quot; height=&quot;349&quot; data-origin-width=&quot;500&quot; data-origin-height=&quot;349&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;SharedArrayBuffer 를 쓰면 2개의 web work (즉 2개의 스레드) 모두가 메모리의 같은 영역을 읽고 쓸 수 있습니다. 이는 더이상 postMessage 를 쓸 때 감수해야 했던 통신 오버헤드와 시간지연을 겪지 않아도 된다는 뜻입니다. 2개의 web worker 모두가 데이터에 즉시 접근할 수 있습니다. 그러면 코드로 한번 확인해 보도록 하겠습니다. 먼저 ArrayBuffer에 코드를 한번 확인해 보도록 하겠습니다.&lt;/p&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;i&gt;test.html&lt;/i&gt;&lt;/p&gt;
&lt;pre id=&quot;code_1661783283261&quot; class=&quot;html xml&quot; data-ke-language=&quot;html&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;&amp;lt;!DOCTYPE html&amp;gt;
&amp;lt;html&amp;gt;
    &amp;lt;head&amp;gt;
        &amp;lt;meta charset=&quot;UTF-8&quot; /&amp;gt;
        &amp;lt;meta http-equiv=&quot;X-UA-Compatible&quot; content=&quot;IE=Edge&quot; /&amp;gt;
        &amp;lt;title&amp;gt;Basic SharedArrayBuffer Example&amp;lt;/title&amp;gt;
    &amp;lt;/head&amp;gt;
    &amp;lt;body&amp;gt;
        &amp;lt;script src=&quot;test-main.js&quot;&amp;gt;&amp;lt;/script&amp;gt;
    &amp;lt;/body&amp;gt;
&amp;lt;/html&amp;gt;&lt;/code&gt;&lt;/pre&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;i&gt;test-main.js&lt;/i&gt;&lt;/p&gt;
&lt;pre id=&quot;code_1661783330182&quot; class=&quot;javascript&quot; data-ke-language=&quot;javascript&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;// ArrayBuffer 메모리
const TYPE = &quot;ArrayBuffer : &quot;;
const buff = new ArrayBuffer(5 * Uint16Array.BYTES_PER_ELEMENT);
const view = new Uint16Array(buff);
 
// SharedArrayBuffer 메모리
// const TYPE = &quot;SharedArrayBuffer : &quot;;
// const buff = new SharedArrayBuffer(5 * Uint16Array.BYTES_PER_ELEMENT);
// const view = new Uint16Array(buff);
 
const worker = new Worker(&quot;./test-worker.js&quot;);
let counter = 0;
console.log(&quot;initial: &quot; + formatArray(view));
worker.addEventListener(&quot;message&quot;, (e) =&amp;gt; {
    if (e.data &amp;amp;&amp;amp; e.data.type === &quot;ping&quot;) {
        console.log(TYPE + &quot;recieve Ping Type =&amp;gt; &quot; + formatArray(view));
        if (++counter &amp;lt; 10) {
            worker.postMessage({ type: &quot;pong&quot; });
        } else {
            console.log(&quot;done&quot;);
        }
    }
});
worker.postMessage({ type: &quot;init&quot;, memoryType: TYPE, memory: view });
 
function formatArray(array) {
    return Array.from(array, (b) =&amp;gt;
        b.toString(16).toUpperCase().padStart(4, &quot;0&quot;)
    ).join(&quot; &quot;);
}&lt;/code&gt;&lt;/pre&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;i&gt;test-worker.js&lt;/i&gt;&lt;/p&gt;
&lt;pre id=&quot;code_1661783341565&quot; class=&quot;javascript&quot; data-ke-language=&quot;javascript&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;let TYPE;
let shared;
let index;
const updateAndPing = () =&amp;gt; {
    ++shared[index];
    index = (index + 1) % shared.length;
    console.log(TYPE + &quot;recieve Pong Type =&amp;gt; &quot; + formatArray(shared));
    this.postMessage({ type: &quot;ping&quot; });
};
this.addEventListener(&quot;message&quot;, (e) =&amp;gt; {
    console.log(&quot;===============구분자================&quot;);
    if (e.data) {
        switch (e.data.type) {
            case &quot;init&quot;:
                shared = e.data.memory;
                TYPE = e.data.memoryType;
                index = 0;
                updateAndPing();
                break;
            case &quot;pong&quot;:
                updateAndPing();
                break;
        }
    }
});
 
function formatArray(array) {
    return Array.from(array, (b) =&amp;gt;
        b.toString(16).toUpperCase().padStart(4, &quot;0&quot;)
    ).join(&quot; &quot;);
}&lt;/code&gt;&lt;/pre&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;background-color: #ffffff; color: #172b4d;&quot;&gt;이 코드는 ArrayBuffer를 사용해서 메모리를 전달하는 방식으로 동작하는 방식입니다. 코드에서 보면 한번 postMessage로 ArrayBuffer메모리를 전달 한 후 워커에서 메모리를 +1씩 증가합니다. 그럼 코드를 실행하면 아래와 같은 결과가 나옵니다.&lt;/span&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-filename=&quot;image2022-8-28_18-24-25.png&quot; data-origin-width=&quot;450&quot; data-origin-height=&quot;764&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/qJ3DQ/btrKQSjo6oW/chw55hk878Exknb8rmbMZk/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/qJ3DQ/btrKQSjo6oW/chw55hk878Exknb8rmbMZk/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/qJ3DQ/btrKQSjo6oW/chw55hk878Exknb8rmbMZk/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FqJ3DQ%2FbtrKQSjo6oW%2Fchw55hk878Exknb8rmbMZk%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;450&quot; height=&quot;764&quot; data-filename=&quot;image2022-8-28_18-24-25.png&quot; data-origin-width=&quot;450&quot; data-origin-height=&quot;764&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;background-color: #ffffff; color: #172b4d;&quot;&gt;그럼 이렇게 워커에서는 계속해서 메모리를 증가시키는데 메인에서는 증가되지 않는 값을 가지고 있게되어집니다. main과 worker가 동시에 메모리를 업데이트 하려면 postMessage를 통해서 지속적으로 메모리를 전달해야할 겁니다. 이 방식은 SharedArrayBuffer에 비해 코스트가 많이 들지만 메모리를 공유함에 따라 발생하는 사이드 이펙트를 줄일 수 있습니다. 이제 ArrayBuffer대신 SharedArrayBuffer를 사용해서 메모리를 공유해 보겠습니다. `test-main.js`에서 2번째줄 ~ 4번째줄까지 주석 처리 후 7번째 줄 ~ 9번째 줄까지 주석을 해제해 줍니다. 그런 다음 코드를 실행하면 아래와 같은 결과가 나옵니다.&lt;/span&gt;&lt;/p&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-filename=&quot;image2022-8-28_18-29-42.png&quot; data-origin-width=&quot;497&quot; data-origin-height=&quot;661&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/cGkGK6/btrKTovv3mk/f3xtH1gyP80WtcO9Uwads0/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/cGkGK6/btrKTovv3mk/f3xtH1gyP80WtcO9Uwads0/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/cGkGK6/btrKTovv3mk/f3xtH1gyP80WtcO9Uwads0/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FcGkGK6%2FbtrKTovv3mk%2Ff3xtH1gyP80WtcO9Uwads0%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;497&quot; height=&quot;661&quot; data-filename=&quot;image2022-8-28_18-29-42.png&quot; data-origin-width=&quot;497&quot; data-origin-height=&quot;661&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;background-color: #ffffff; color: #172b4d;&quot;&gt;메모리의 값을 업데이트 하는 결과는 똑같지만, worker와 main이 정상적으로 결과값을 공유받는것을 알 수 있습니다. 이렇게 2개의 스레드가 메모리를 공유함에 따라 코스트가 ArrayBuffer에 비해 상대적으로 적게 들게됩니다. 다만, 2개 이상의 스레드가 동시에 즉각적으로 접근할 수 있기 때문에 그에 따라서 어떤 위험한 상황을 감수해야 합니다. 즉 레이스 컨디션(race condition)이 발생할 수 있습니다.&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;500&quot; data-origin-height=&quot;201&quot;&gt;&lt;span data-url=&quot;https://2r4s9p1yi1fa2jd7j43zph8r-wpengine.netdna-ssl.com/files/2017/06/02_13-500x201.png&quot; data-phocus=&quot;https://2r4s9p1yi1fa2jd7j43zph8r-wpengine.netdna-ssl.com/files/2017/06/02_13-500x201.png&quot;&gt;&lt;img src=&quot;https://2r4s9p1yi1fa2jd7j43zph8r-wpengine.netdna-ssl.com/files/2017/06/02_13-500x201.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2F2r4s9p1yi1fa2jd7j43zph8r-wpengine.netdna-ssl.com%2Ffiles%2F2017%2F06%2F02_13-500x201.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;500&quot; height=&quot;201&quot; data-origin-width=&quot;500&quot; data-origin-height=&quot;201&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;/p&gt;
&lt;hr contenteditable=&quot;false&quot; data-ke-type=&quot;horizontalRule&quot; data-ke-style=&quot;style1&quot; /&gt;
&lt;h2 data-ke-size=&quot;size26&quot;&gt;스레드를 사용하면 겪게되는 문제! 레이스 컨디션&lt;/h2&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;일단, 레이스 컨디션이 뭔지 부터 알아봅시다. 레이스 컨디션 이란&amp;nbsp;두 개 이상의 스레드가 공유 메모리의 특정 자원을 병행적으로(concurrently) 읽거나 쓸 때, 공용 데이터에 대한 접근이 어떤 순서에 따라 이루어졌는지에 따라 그 실행 결과가 달라지는 상황을 말합니다. 에를 들어볼까요? 아래 그림을 보면 총 2개의 스레드가 열심히 일을 하고 있습니다. 중간에서 파일이 존재하는 지 체크하는 플래그를 공유 메모리로 가지고 있습니다.&lt;/p&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-origin-width=&quot;500&quot; data-origin-height=&quot;400&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/pzG9N/btrKWB1lnk3/Yr0xK3BEBV5HKuh4tAEE20/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/pzG9N/btrKWB1lnk3/Yr0xK3BEBV5HKuh4tAEE20/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/pzG9N/btrKWB1lnk3/Yr0xK3BEBV5HKuh4tAEE20/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FpzG9N%2FbtrKWB1lnk3%2FYr0xK3BEBV5HKuh4tAEE20%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;500&quot; height=&quot;400&quot; data-origin-width=&quot;500&quot; data-origin-height=&quot;400&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;코드는 두번째 스레드가 파일을 읽을 수 있도록 처리해 준 후 첫번째 스래드가 파일을 읽는 코드입니다. fileExists 공유 메모리의 초깃값은 false입니다.&lt;/p&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-origin-width=&quot;500&quot; data-origin-height=&quot;259&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/ciNAVz/btrKUtpkDPT/YQiIME65hmnK5bAKgSM6mk/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/ciNAVz/btrKUtpkDPT/YQiIME65hmnK5bAKgSM6mk/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/ciNAVz/btrKUtpkDPT/YQiIME65hmnK5bAKgSM6mk/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FciNAVz%2FbtrKUtpkDPT%2FYQiIME65hmnK5bAKgSM6mk%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;500&quot; height=&quot;259&quot; data-origin-width=&quot;500&quot; data-origin-height=&quot;259&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;개발자가 작성한 로직대로 잘 움직인다면 첫번째 스레드는 무리없이 원하는 결과인 파일을 로드할 수 있을겁니다.&lt;/p&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-origin-width=&quot;500&quot; data-origin-height=&quot;259&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/bNKWyk/btrKSKyFkoH/PL8P7pavKrVKSwN35KLRN0/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/bNKWyk/btrKSKyFkoH/PL8P7pavKrVKSwN35KLRN0/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/bNKWyk/btrKSKyFkoH/PL8P7pavKrVKSwN35KLRN0/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FbNKWyk%2FbtrKSKyFkoH%2FPL8P7pavKrVKSwN35KLRN0%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;500&quot; height=&quot;259&quot; data-origin-width=&quot;500&quot; data-origin-height=&quot;259&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;하지만 모종의 이유로 첫번째 스레드가 먼저 읽혀지게된다면 첫번째 스레드는 파일을 읽지 못하고 특정 콘솔만 읽고 종료되어질 것입니다. 예시는 그렇게 심각한 문제가 아니지만, 이러한 상황이 엄청 중대한 로직에서 발생했을 때 후 폭풍은 상상도 하기 어려울 것 입니다. 사실 이러한 종류의 레이스 컨디션은 javascript로 서비스를 개발하다보면, 심심치 않게 볼 수 있습니다. 싱글스레드인데도 말이죠... 하지만, 싱글 스레드 코드에서는 발생하지 않는 종류의 레이스 컨디션이 있습니다. 이러한 레이스 컨디션을 막기위해서 Atomics라는 객체가 나오게 되었습니다.&lt;/p&gt;
&lt;hr contenteditable=&quot;false&quot; data-ke-type=&quot;horizontalRule&quot; data-ke-style=&quot;style1&quot; /&gt;
&lt;h2 data-ke-size=&quot;size26&quot;&gt;Atomics 객체&lt;/h2&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;Atomics 객체는 일관되고 순차적인 방식으로 공유 메모리를 관리 및 처리하기 위한 도구를 제공하는 객체입니다.&amp;nbsp;일반적으로 Atomics 객체는 생성자 함수가 아니라 정적메소드 이기 때문에 new 연산자를 사용하여 호출하거나 함수로 직접 호출할 수 없습니다. 또한,&amp;nbsp;레이스 컨디션이나 Stale하지 않은 값을 읽거나 비순차적 쓰기, 티어링같은 경우를 해결하기 위해 쓰이는 객체입니다.&amp;nbsp; 단 SharedArrayBuffer 대상의 원자만 컨트롤할 수 있고 ArrayBuffer는 컨트롤 할 수 없습니다. 그럼 이게 어떻게 동작하는지 알아보도록 하겠습니다.&lt;/p&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-origin-width=&quot;500&quot; data-origin-height=&quot;400&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/4P6oC/btrKWCeSz3s/ttNVO08kun9U3t94idk8TK/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/4P6oC/btrKWCeSz3s/ttNVO08kun9U3t94idk8TK/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/4P6oC/btrKWCeSz3s/ttNVO08kun9U3t94idk8TK/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2F4P6oC%2FbtrKWCeSz3s%2FttNVO08kun9U3t94idk8TK%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;500&quot; height=&quot;400&quot; data-origin-width=&quot;500&quot; data-origin-height=&quot;400&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;위 그림을 보면총 2개의 스레드가 존재합니다. 이 두개의 스레드는 한개의 공유메모리 블락을 공유하고 있습니다.&lt;/p&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-origin-width=&quot;500&quot; data-origin-height=&quot;400&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/baSOO7/btrKQivK9It/pwgqHQI60jIq3T2Yp5KI50/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/baSOO7/btrKQivK9It/pwgqHQI60jIq3T2Yp5KI50/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/baSOO7/btrKQivK9It/pwgqHQI60jIq3T2Yp5KI50/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FbaSOO7%2FbtrKQivK9It%2FpwgqHQI60jIq3T2Yp5KI50%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;500&quot; height=&quot;400&quot; data-origin-width=&quot;500&quot; data-origin-height=&quot;400&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;여기서 두번재 스레드가 공유메모리의 특정 부분이 필요합니다. 그러면 두번째 스레드는 필요한 메모리에 Lock 객체로 메모리를 잠그고, 메모리의 소유권을 흭득합니다.그러면 두번째 스레드가 소유권을 가진 메모리는 다른 스레드들이 접근하지 못하도록 막을 수 있습니다. 해당 코드는 Lock 객체를 획들했을 때만 해당 데이터에 접근하거나 해당 데이터를 수정할 수 있습니다.&lt;/p&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-origin-width=&quot;500&quot; data-origin-height=&quot;400&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/pd2Bm/btrKU8eaSMI/zKrDbOieMHBhayzF7TvzZ0/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/pd2Bm/btrKU8eaSMI/zKrDbOieMHBhayzF7TvzZ0/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/pd2Bm/btrKU8eaSMI/zKrDbOieMHBhayzF7TvzZ0/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2Fpd2Bm%2FbtrKU8eaSMI%2FzKrDbOieMHBhayzF7TvzZ0%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;500&quot; height=&quot;400&quot; data-origin-width=&quot;500&quot; data-origin-height=&quot;400&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;만약 두번째 쓰레드가 메모리를 사용하고 있을 때 첫번째 스레드가 두번째 스레드가 사용중인 메모리가 필요 할 때 첫번째 스레드는 메모리의 Lock이 걸려있는지 확인하고 Lock이 걸려 있으면 Lock이 풀릴때 까지 기다립니다.&lt;/p&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-origin-width=&quot;500&quot; data-origin-height=&quot;400&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/lczMC/btrKMFrq3Yu/eiN4qoh4M8leTMu98Rx4EK/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/lczMC/btrKMFrq3Yu/eiN4qoh4M8leTMu98Rx4EK/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/lczMC/btrKMFrq3Yu/eiN4qoh4M8leTMu98Rx4EK/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FlczMC%2FbtrKMFrq3Yu%2FeiN4qoh4M8leTMu98Rx4EK%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;500&quot; height=&quot;400&quot; data-origin-width=&quot;500&quot; data-origin-height=&quot;400&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;그리고 두번째 스레드가 일을 끝내면, 두번째 스레드는 unlock 함수를 호출할 것입니다. 그럼 lock 함수는 기다리고 있는 첫번째 스레드를 깨워서 데이터에 접근 가능함을 알릴 것입니다.깨어난 스레드는 Lock 객체를 획득해서, 데이터를 쓰는 동안 다른 스레드가 접근하지 못하게 막습니다.&lt;/p&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-origin-width=&quot;500&quot; data-origin-height=&quot;400&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/drOtBu/btrKOIuDFr3/8KDMEeXoDSCSPjf1eVEvk1/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/drOtBu/btrKOIuDFr3/8KDMEeXoDSCSPjf1eVEvk1/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/drOtBu/btrKOIuDFr3/8KDMEeXoDSCSPjf1eVEvk1/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FdrOtBu%2FbtrKOIuDFr3%2F8KDMEeXoDSCSPjf1eVEvk1%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;500&quot; height=&quot;400&quot; data-origin-width=&quot;500&quot; data-origin-height=&quot;400&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;이러면 레이스 컨디션 혹은 티어링 등의 문제가 해결되어 질 수 있습니다.말로 들으면 잘 이해가 안갈 수 있기 때문에 코드를 보며 이해해 보도록 하겠습니다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;i&gt;index.html&lt;/i&gt;&lt;/p&gt;
&lt;pre id=&quot;code_1661783634474&quot; class=&quot;html xml&quot; data-ke-language=&quot;html&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;&amp;lt;!DOCTYPE html&amp;gt;
&amp;lt;html&amp;gt;
    &amp;lt;head&amp;gt;
        &amp;lt;meta charset=&quot;UTF-8&quot; /&amp;gt;
        &amp;lt;title&amp;gt;SharedArrayBuffer demo&amp;lt;/title&amp;gt;
    &amp;lt;/head&amp;gt;
    &amp;lt;body&amp;gt;
        &amp;lt;script src=&quot;main.js&quot;&amp;gt;&amp;lt;/script&amp;gt;
    &amp;lt;/body&amp;gt;
&amp;lt;/html&amp;gt;&lt;/code&gt;&lt;/pre&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;i&gt;main.js&lt;/i&gt;&lt;/p&gt;
&lt;pre id=&quot;code_1661783646926&quot; class=&quot;javascript&quot; data-ke-language=&quot;javascript&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;var arr = new SharedArrayBuffer(256);
new Int16Array(arr)[0] = 0;
var workers = [];
for (let i = 0; i &amp;lt; 1000; i++) workers.push(new Worker(&quot;worker.js&quot;));
workers.forEach((w) =&amp;gt; w.postMessage(new Int16Array(arr)));&lt;/code&gt;&lt;/pre&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;i&gt;worker.js&lt;/i&gt;&lt;/p&gt;
&lt;pre id=&quot;code_1661783655713&quot; class=&quot;javascript&quot; data-ke-language=&quot;javascript&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;onmessage = function (e) {
    /* 레이스 컨디션 발생 =&amp;gt; 마지막 라인의 콘솔로그가 1000이 아님 */
    e.data[0]++;
 
    /* 레이스 컨디션 방지 =&amp;gt; 마지막 라인의 콘솔로그가 1000 임 */
    // Atomics.add(e.data, 0, 1);
 
    console.log(e.data[0]);
};&lt;/code&gt;&lt;/pre&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;여기서 중요하게 볼 부분은 worker.js입니다. Atomic을 사용하면 공유 메모리 사용의 결과값이 보장됩니다. 하지만 Atomics객체를 사용하지 않으면 결과값을 보장하기 어렵습니다. 이렇게, Atomics가 특정 공유 메모리를 접근할 때 그 메모리는 lock을 걸게 되고 해당 메모리의 소유권은 Atomics를 사용한 워커 스레드가 됩니다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;사실 이 예제 코드 아주 단순하기에 Atomics의 개념을 자세히 이해할 수 있는 코드가 아닙니다. Atomics의 개념을 이해하기 위해서는 아래 링크를 참고하는것을 추천 드립니다. (TIP : Atomics.wait, Atomics.notify등 다양한 함수를 이용되어지기에&lt;span&gt;&amp;nbsp;&lt;/span&gt;&lt;a href=&quot;https://intrepidgeeks.com/tutorial/es8-new-features-sharedarraybuffer-object-atomics-object&quot;&gt;링크&lt;/a&gt;를 먼저 보시는것을 추천 드립니다.)&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;figure id=&quot;og_1661783706220&quot; contenteditable=&quot;false&quot; data-ke-type=&quot;opengraph&quot; data-ke-align=&quot;alignCenter&quot; data-og-type=&quot;object&quot; data-og-title=&quot;GitHub - mozilla-spidermonkey/js-lock-and-condition: Simple Lock and Condition Variable Library for JavaScript with SharedArrayB&quot; data-og-description=&quot;Simple Lock and Condition Variable Library for JavaScript with SharedArrayBuffer and Atomics - GitHub - mozilla-spidermonkey/js-lock-and-condition: Simple Lock and Condition Variable Library for Ja...&quot; data-og-host=&quot;github.com&quot; data-og-source-url=&quot;https://github.com/mozilla-spidermonkey/js-lock-and-condition&quot; data-og-url=&quot;https://github.com/mozilla-spidermonkey/js-lock-and-condition&quot; data-og-image=&quot;https://scrap.kakaocdn.net/dn/pm7Rq/hyPC3dI9fw/NqDpinQ2jOxRS1vlT66fUk/img.png?width=1200&amp;amp;height=600&amp;amp;face=0_0_1200_600&quot;&gt;&lt;a href=&quot;https://github.com/mozilla-spidermonkey/js-lock-and-condition&quot; target=&quot;_blank&quot; rel=&quot;noopener&quot; data-source-url=&quot;https://github.com/mozilla-spidermonkey/js-lock-and-condition&quot;&gt;
&lt;div class=&quot;og-image&quot; style=&quot;background-image: url('https://scrap.kakaocdn.net/dn/pm7Rq/hyPC3dI9fw/NqDpinQ2jOxRS1vlT66fUk/img.png?width=1200&amp;amp;height=600&amp;amp;face=0_0_1200_600');&quot;&gt;&amp;nbsp;&lt;/div&gt;
&lt;div class=&quot;og-text&quot;&gt;
&lt;p class=&quot;og-title&quot; data-ke-size=&quot;size16&quot;&gt;GitHub - mozilla-spidermonkey/js-lock-and-condition: Simple Lock and Condition Variable Library for JavaScript with SharedArrayB&lt;/p&gt;
&lt;p class=&quot;og-desc&quot; data-ke-size=&quot;size16&quot;&gt;Simple Lock and Condition Variable Library for JavaScript with SharedArrayBuffer and Atomics - GitHub - mozilla-spidermonkey/js-lock-and-condition: Simple Lock and Condition Variable Library for Ja...&lt;/p&gt;
&lt;p class=&quot;og-host&quot; data-ke-size=&quot;size16&quot;&gt;github.com&lt;/p&gt;
&lt;/div&gt;
&lt;/a&gt;&lt;/figure&gt;
&lt;hr contenteditable=&quot;false&quot; data-ke-type=&quot;horizontalRule&quot; data-ke-style=&quot;style1&quot; /&gt;
&lt;h1&gt;&lt;span&gt;&amp;nbsp;&lt;/span&gt;&lt;span&gt; &lt;span&gt;&amp;nbsp;&lt;/span&gt;&lt;/span&gt;&lt;b&gt;이곳에는 용이 살고 있다!(Here be dragons)&lt;br /&gt;&lt;span&gt;&lt;/span&gt;&lt;/b&gt;&lt;/h1&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-filename=&quot;03_29-768x275-1.png&quot; data-origin-width=&quot;768&quot; data-origin-height=&quot;275&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/EpngI/btrKQjBvMwr/KQ4bwIQ5lU6Fqakuf8v7Qk/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/EpngI/btrKQjBvMwr/KQ4bwIQ5lU6Fqakuf8v7Qk/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/EpngI/btrKQjBvMwr/KQ4bwIQ5lU6Fqakuf8v7Qk/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FEpngI%2FbtrKQjBvMwr%2FKQ4bwIQ5lU6Fqakuf8v7Qk%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;768&quot; height=&quot;275&quot; data-filename=&quot;03_29-768x275-1.png&quot; data-origin-width=&quot;768&quot; data-origin-height=&quot;275&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;Here be dragons라는 말을 아시나요? 관용구로 미 개척지 혹은 용이 사는 위험한 곳이란 뜻입니다. 위 내용들을 설명한 책과 참고문서에서 하나같이 말하는 내용은 이 공유메모리가 과연 필요한지를 생각해 보라고 적혀 있습니다. 그럼 이제 한번 생각해봅시다. 우리는 과연 이러한 공유 메모리가 필요할까요? 아마 대부분의 서비스 개발자는 이러한 기능이 필요 없을 확률이 높을겁니다. 우리가 만약 웹 워커, 공유 메모리, 동시성 기능을 사용했을 때 발생하는 복잡 미묘한 버그로 인해 발생하는 코스트는 어마무시합니다. 따라서, 진짜 필요한 경우를 제외하고는 잘 나와있는 라이브러리를 사용하되 공유메모리를 건드려 서비스를 망가트리는 일은 최대한 자제하는게 좋습니다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;h2 id=&quot;id-웹개발자를위한자바스크립트의모든것공유메모리-참고문서&quot; data-ke-size=&quot;size26&quot;&gt;&lt;b&gt;참고 문서&lt;/b&gt;&lt;/h2&gt;
&lt;ol style=&quot;list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li&gt;&lt;a href=&quot;https://search.shopping.naver.com/book/catalog/33703422622?cat_id=50010881&amp;amp;frm=PBOKMOD&amp;amp;query=%EC%9B%B9+%EA%B0%9C%EB%B0%9C%EC%9E%90%EB%A5%BC+%EC%9C%84%ED%95%9C+%EC%9E%90%EB%B0%94%EC%8A%A4%ED%81%AC%EB%A6%BD%ED%8A%B8%EC%9D%98+%EB%AA%A8%EB%93%A0+%EA%B2%83&amp;amp;NaPm=ct%3Dl7d2a7dc%7Cci%3Dedc92d8827a6358422281bb8ef861959ca480bba%7Ctr%3Dboknx%7Csn%3D95694%7Chk%3D1b0a2479bd5996e2c8882310e21e2ed9427cd2cc&quot;&gt;웹 개발자를 위한 자바스크립트의 모든 것 - T.J 크라우더&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;http://hacks.mozilla.or.kr/2017/11/a-cartoon-intro-to-arraybuffers-and-sharedarraybuffers/&quot;&gt;만화로 소개하는 ArrayBuffer 와 SharedArrayBuffer&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://sshplendid.github.io/blog/dev/js/2018/08/31/js-arraybuffer/&quot;&gt;JavaScript의 ArrayBuffer&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://developer.mozilla.org/ko/docs/Web/JavaScript/Reference/Global_Objects/ArrayBuffer&quot;&gt;MDN ArrayBuffer&lt;/a&gt;&lt;/li&gt;
&lt;/ol&gt;</description>
      <category>프로그래밍 언어/웹 프론트엔드</category>
      <author>방현준</author>
      <guid isPermaLink="true">https://noogoonaa.tistory.com/116</guid>
      <comments>https://noogoonaa.tistory.com/116#entry116comment</comments>
      <pubDate>Mon, 29 Aug 2022 23:36:07 +0900</pubDate>
    </item>
    <item>
      <title>2022 인프콘 후기</title>
      <link>https://noogoonaa.tistory.com/115</link>
      <description>&lt;h2 data-ke-size=&quot;size26&quot;&gt;여는글&lt;/h2&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;오랜만에 개발자 오프라인 컨퍼런스가 열렸습니다!!(그동안 컨퍼런스는 모두 온라인이었는데... 감동) 인프런에서 개최한 인프콘이란 행사였는데 오랜만에 열린 오프라인 컨퍼런스라 그런지 많은 개발자 분들이 신청을 하셨다고 들었습니다. 인프런에서도 이러한 상황에 몰릴걸 예상했는지 인원을 추첨으로 뽑았고 일단 저도 지원을 했는데 감사하게도 당첨이 되었습니다(짝짝짝)&lt;/p&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock widthContent&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-origin-width=&quot;569&quot; data-origin-height=&quot;577&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/cdiCTP/btrKLgwwd23/WrJ4LtfNx33q2ccEX5t8S1/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/cdiCTP/btrKLgwwd23/WrJ4LtfNx33q2ccEX5t8S1/img.png&quot; data-alt=&quot;인프콘 참가자 선정 메일 내용&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/cdiCTP/btrKLgwwd23/WrJ4LtfNx33q2ccEX5t8S1/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FcdiCTP%2FbtrKLgwwd23%2FWrJ4LtfNx33q2ccEX5t8S1%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;569&quot; height=&quot;577&quot; data-origin-width=&quot;569&quot; data-origin-height=&quot;577&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 data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-filename=&quot;KakaoTalk_Photo_2022-08-27-23-07-47 030.png&quot; data-origin-width=&quot;2671&quot; data-origin-height=&quot;4336&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/xiI2y/btrKLfxCk9W/iN3hfh2mIzz8WkKISoOYj0/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/xiI2y/btrKLfxCk9W/iN3hfh2mIzz8WkKISoOYj0/img.png&quot; data-alt=&quot;인프콘 발표 세션&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/xiI2y/btrKLfxCk9W/iN3hfh2mIzz8WkKISoOYj0/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FxiI2y%2FbtrKLfxCk9W%2FiN3hfh2mIzz8WkKISoOYj0%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;2671&quot; height=&quot;4336&quot; data-filename=&quot;KakaoTalk_Photo_2022-08-27-23-07-47 030.png&quot; data-origin-width=&quot;2671&quot; data-origin-height=&quot;4336&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;hr contenteditable=&quot;false&quot; data-ke-type=&quot;horizontalRule&quot; data-ke-style=&quot;style6&quot; /&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;h2 data-ke-size=&quot;size26&quot;&gt;인프콘 참석&lt;/h2&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-filename=&quot;KakaoTalk_Photo_2022-08-27-23-07-46 029.jpeg&quot; data-origin-width=&quot;4000&quot; data-origin-height=&quot;3000&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/23OlL/btrKHvOZI64/A3xrlJ9vBavgUFlh9oSSBk/img.jpg&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/23OlL/btrKHvOZI64/A3xrlJ9vBavgUFlh9oSSBk/img.jpg&quot; data-alt=&quot;코엑스 전경&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/23OlL/btrKHvOZI64/A3xrlJ9vBavgUFlh9oSSBk/img.jpg&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2F23OlL%2FbtrKHvOZI64%2FA3xrlJ9vBavgUFlh9oSSBk%2Fimg.jpg&quot; onerror=&quot;this.onerror=null; this.src='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png'; this.srcset='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png';&quot; loading=&quot;lazy&quot; width=&quot;4000&quot; height=&quot;3000&quot; data-filename=&quot;KakaoTalk_Photo_2022-08-27-23-07-46 029.jpeg&quot; data-origin-width=&quot;4000&quot; data-origin-height=&quot;3000&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;당일 제가 코엑스에 도착한 시각은 대략 11시 40분 이었습니다. 본 행사가 시작되는 시간이 오후 1시이기에 너무 빨리 온게 아닐까 하는 걱정에 행사장에 가보니 이제 막 시작하고 있더라구요. 그래서 참가자 등록을 하고 행사장에 들어가니 꽤 많은 기업부스와 이벤트들이 준비되어져 있었습니다. 인프런측에서 꽤 열심히 준비를 하셨다는게 엿보였습니다. 일단 발도장 부터 찍기 위해 인프콘 포토스팟에서 사진 한장을 찍었습니다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-filename=&quot;edited_KakaoTalk_Photo_2022-08-27-23-07-45 021.jpeg&quot; data-origin-width=&quot;2224&quot; data-origin-height=&quot;1440&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/HkEYH/btrKF6WZRYC/dxnpdp1MKKJVLARGBr7Da1/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/HkEYH/btrKF6WZRYC/dxnpdp1MKKJVLARGBr7Da1/img.png&quot; data-alt=&quot;2022 인프콘 포토스팟&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/HkEYH/btrKF6WZRYC/dxnpdp1MKKJVLARGBr7Da1/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FHkEYH%2FbtrKF6WZRYC%2Fdxnpdp1MKKJVLARGBr7Da1%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;2224&quot; height=&quot;1440&quot; data-filename=&quot;edited_KakaoTalk_Photo_2022-08-27-23-07-45 021.jpeg&quot; data-origin-width=&quot;2224&quot; data-origin-height=&quot;1440&quot;/&gt;&lt;/span&gt;&lt;figcaption&gt;2022 인프콘 포토스팟&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;사람들이 많이 없을 때 이벤트와 기업부스를 참여하면서 느꼈던건 사람들이 많아지면서 이 이벤트의 줄들이 너무 길다는 것 였습니다. 저는 빨리 와서 전부 참여할 수 있었는데 늦게 오신분들은 참여를 못하고 있더라구요 (일찍 온게 신의 한수였습니다) 그리고 이 이벤트에 참여를 하면 룰렛같은것을 돌리는데 스티커 부터해서 과자, 책, 인프런 강의권 등등 많은 상품을 주었기 때문에 인프콘에 좋은 인상을 받을 수 있었습니다. 그렇게 이벤트에 참석도 하고 기업부스에서 이야기도 하면서 기다리다보니 어느덧 1시가 되었고 인프콘 시작을 알리는 오프닝 세션에 참석했습니다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;&lt;figure class=&quot;imagegridblock&quot;&gt;
  &lt;div class=&quot;image-container&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/bn7kWp/btrKHZoNvD1/TiYX13O3SMi0zoygPLaOj0/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/bn7kWp/btrKHZoNvD1/TiYX13O3SMi0zoygPLaOj0/img.png&quot; data-is-animation=&quot;false&quot; data-origin-width=&quot;2250&quot; data-origin-height=&quot;2250&quot; data-filename=&quot;edited_KakaoTalk_Photo_2022-08-27-23-07-46 025.jpeg&quot; data-widthpercent=&quot;50&quot; style=&quot;width: 49.4186%; margin-right: 10px;&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/bn7kWp/btrKHZoNvD1/TiYX13O3SMi0zoygPLaOj0/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2Fbn7kWp%2FbtrKHZoNvD1%2FTiYX13O3SMi0zoygPLaOj0%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;2250&quot; height=&quot;2250&quot;/&gt;&lt;/span&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/slduE/btrKMoOESwy/gAXXc92QDu7JXHAskYXTwK/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/slduE/btrKMoOESwy/gAXXc92QDu7JXHAskYXTwK/img.png&quot; data-is-animation=&quot;false&quot; data-origin-width=&quot;2250&quot; data-origin-height=&quot;2250&quot; data-filename=&quot;edited_KakaoTalk_Photo_2022-08-27-23-07-46 024.jpeg&quot; data-widthpercent=&quot;50&quot; style=&quot;width: 49.4186%;&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/slduE/btrKMoOESwy/gAXXc92QDu7JXHAskYXTwK/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FslduE%2FbtrKMoOESwy%2FgAXXc92QDu7JXHAskYXTwK%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;2250&quot; height=&quot;2250&quot;/&gt;&lt;/span&gt;&lt;/div&gt;
  &lt;figcaption&gt;기업 부스들이 이렇게 즐비해 있다&lt;/figcaption&gt;
&lt;/figure&gt;
&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;&lt;figure class=&quot;imagegridblock&quot;&gt;
  &lt;div class=&quot;image-container&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/bmgIAF/btrKF7O8kKV/OUNMnSVxNShYv9j52iTev1/img.jpg&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/bmgIAF/btrKF7O8kKV/OUNMnSVxNShYv9j52iTev1/img.jpg&quot; data-is-animation=&quot;false&quot; data-origin-width=&quot;4000&quot; data-origin-height=&quot;3000&quot; data-filename=&quot;KakaoTalk_Photo_2022-08-27-23-07-46 023.jpeg&quot; data-widthpercent=&quot;57.14&quot; style=&quot;width: 56.4784%; margin-right: 10px;&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/bmgIAF/btrKF7O8kKV/OUNMnSVxNShYv9j52iTev1/img.jpg&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FbmgIAF%2FbtrKF7O8kKV%2FOUNMnSVxNShYv9j52iTev1%2Fimg.jpg&quot; onerror=&quot;this.onerror=null; this.src='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png'; this.srcset='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png';&quot; loading=&quot;lazy&quot; width=&quot;4000&quot; height=&quot;3000&quot;/&gt;&lt;/span&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/cKbyuM/btrKGSxbZjm/b8QWy3BoFsea36oZYGkS51/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/cKbyuM/btrKGSxbZjm/b8QWy3BoFsea36oZYGkS51/img.png&quot; data-is-animation=&quot;false&quot; data-origin-width=&quot;2250&quot; data-origin-height=&quot;2250&quot; data-filename=&quot;edited_KakaoTalk_Photo_2022-08-27-23-07-46 026.jpeg&quot; data-widthpercent=&quot;42.86&quot; style=&quot;width: 42.3588%;&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/cKbyuM/btrKGSxbZjm/b8QWy3BoFsea36oZYGkS51/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FcKbyuM%2FbtrKGSxbZjm%2Fb8QWy3BoFsea36oZYGkS51%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;2250&quot; height=&quot;2250&quot;/&gt;&lt;/span&gt;&lt;/div&gt;
  &lt;figcaption&gt;행사장 메인, 룰렛을 돌려서 상품을 얻을 수 있었다&lt;/figcaption&gt;
&lt;/figure&gt;
&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-filename=&quot;edited_KakaoTalk_Photo_2022-08-27-23-07-45 022.jpeg&quot; data-origin-width=&quot;2250&quot; data-origin-height=&quot;2250&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/bi3SCU/btrKK9xqYok/k4a4vjEO3gHURNmqY0B4jk/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/bi3SCU/btrKK9xqYok/k4a4vjEO3gHURNmqY0B4jk/img.png&quot; data-alt=&quot;참가자 등록을 하면 주는 굿즈와 옷&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/bi3SCU/btrKK9xqYok/k4a4vjEO3gHURNmqY0B4jk/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2Fbi3SCU%2FbtrKK9xqYok%2Fk4a4vjEO3gHURNmqY0B4jk%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;2250&quot; height=&quot;2250&quot; data-filename=&quot;edited_KakaoTalk_Photo_2022-08-27-23-07-45 022.jpeg&quot; data-origin-width=&quot;2250&quot; data-origin-height=&quot;2250&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;hr contenteditable=&quot;false&quot; data-ke-type=&quot;horizontalRule&quot; data-ke-style=&quot;style6&quot; /&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;h2 data-ke-size=&quot;size26&quot;&gt;오프닝&lt;/h2&gt;
&lt;p&gt;&lt;figure class=&quot;imagegridblock&quot;&gt;
  &lt;div class=&quot;image-container&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/oNPzm/btrKMoVqyjG/erm8A5kDXx8NuL0OOgLo0k/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/oNPzm/btrKMoVqyjG/erm8A5kDXx8NuL0OOgLo0k/img.png&quot; data-is-animation=&quot;false&quot; data-origin-width=&quot;1766&quot; data-origin-height=&quot;1612&quot; data-filename=&quot;edited_edited_KakaoTalk_Photo_2022-08-27-23-07-45 018.jpeg&quot; style=&quot;width: 51.6869%; margin-right: 10px;&quot; data-widthpercent=&quot;52.29&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/oNPzm/btrKMoVqyjG/erm8A5kDXx8NuL0OOgLo0k/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FoNPzm%2FbtrKMoVqyjG%2Ferm8A5kDXx8NuL0OOgLo0k%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;1766&quot; height=&quot;1612&quot;/&gt;&lt;/span&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/brgAWh/btrKHaj2n3r/xQPLP8IKkFkQVttpZh1ec0/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/brgAWh/btrKHaj2n3r/xQPLP8IKkFkQVttpZh1ec0/img.png&quot; data-is-animation=&quot;false&quot; data-origin-width=&quot;1606&quot; data-origin-height=&quot;1607&quot; data-filename=&quot;edited_KakaoTalk_Photo_2022-08-27-23-07-44 017.jpeg&quot; style=&quot;width: 47.1503%;&quot; data-widthpercent=&quot;47.71&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/brgAWh/btrKHaj2n3r/xQPLP8IKkFkQVttpZh1ec0/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FbrgAWh%2FbtrKHaj2n3r%2FxQPLP8IKkFkQVttpZh1ec0%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;1606&quot; height=&quot;1607&quot;/&gt;&lt;/span&gt;&lt;/div&gt;
&lt;/figure&gt;
&lt;figure class=&quot;imagegridblock&quot;&gt;
  &lt;div class=&quot;image-container&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/dEuent/btrKLaiOFq1/c7B1Vkw1aUEe3hgKVZQ0E0/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/dEuent/btrKLaiOFq1/c7B1Vkw1aUEe3hgKVZQ0E0/img.png&quot; data-is-animation=&quot;false&quot; data-origin-width=&quot;2250&quot; data-origin-height=&quot;2250&quot; data-filename=&quot;edited_KakaoTalk_Photo_2022-08-27-23-07-44 014.jpeg&quot; style=&quot;width: 32.5581%; margin-right: 10px;&quot; data-widthpercent=&quot;33.33&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/dEuent/btrKLaiOFq1/c7B1Vkw1aUEe3hgKVZQ0E0/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FdEuent%2FbtrKLaiOFq1%2Fc7B1Vkw1aUEe3hgKVZQ0E0%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;2250&quot; height=&quot;2250&quot;/&gt;&lt;/span&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/BKGL0/btrKHvVOhLk/iIw7cubZX25KMTvvg9hU61/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/BKGL0/btrKHvVOhLk/iIw7cubZX25KMTvvg9hU61/img.png&quot; data-is-animation=&quot;false&quot; data-origin-width=&quot;1252&quot; data-origin-height=&quot;1252&quot; data-filename=&quot;edited_KakaoTalk_Photo_2022-08-27-23-07-44 015.jpeg&quot; style=&quot;width: 32.5581%; margin-right: 10px;&quot; data-widthpercent=&quot;33.33&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/BKGL0/btrKHvVOhLk/iIw7cubZX25KMTvvg9hU61/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FBKGL0%2FbtrKHvVOhLk%2FiIw7cubZX25KMTvvg9hU61%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;1252&quot; height=&quot;1252&quot;/&gt;&lt;/span&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/bK8SEJ/btrKHxlLY5L/za2BybKjpKyRGkVeoMqFs1/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/bK8SEJ/btrKHxlLY5L/za2BybKjpKyRGkVeoMqFs1/img.png&quot; data-is-animation=&quot;false&quot; data-origin-width=&quot;1800&quot; data-origin-height=&quot;1800&quot; data-filename=&quot;edited_KakaoTalk_Photo_2022-08-27-23-07-44 016.jpeg&quot; style=&quot;width: 32.5581%;&quot; data-widthpercent=&quot;33.34&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/bK8SEJ/btrKHxlLY5L/za2BybKjpKyRGkVeoMqFs1/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FbK8SEJ%2FbtrKHxlLY5L%2Fza2BybKjpKyRGkVeoMqFs1%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;1800&quot; height=&quot;1800&quot;/&gt;&lt;/span&gt;&lt;/div&gt;
  &lt;figcaption&gt;오프닝&lt;/figcaption&gt;
&lt;/figure&gt;
&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;1시가 되니, 인프콘의 시작을 알리는 오프닝이 시작되었습니다. 처음에는 인프런에 CEO이신 이형주님이 진행을 하셨는데 꽤 많이 긴장이 되셨는지, 많이 떠시는 모습이 보였습니다. 그렇게 CEO분이 인프런을 만든 이유 목적, 나아갈 미래등을 설명한 후 뒤 이어 유튜브 개발바닥의 향로님으로 유명한 인프랩 CTO 이동욱님이 오프닝을 진행하였고 인프랩 커뮤니티 리드 홍연의님의 오프닝을 마지막으로 오프닝이 끝나고 본격적으로 컨퍼런스가 시작되었습니다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;hr contenteditable=&quot;false&quot; data-ke-type=&quot;horizontalRule&quot; data-ke-style=&quot;style6&quot; /&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;h2 data-ke-size=&quot;size26&quot;&gt;만들면서 배우는 리액트 : 기초 (발표자 : 진유림님)&lt;/h2&gt;
&lt;p&gt;&lt;figure class=&quot;imagegridblock&quot;&gt;
  &lt;div class=&quot;image-container&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/6hwiE/btrKF7VWkLF/boh91tOnB3Im07fTgoksOK/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/6hwiE/btrKF7VWkLF/boh91tOnB3Im07fTgoksOK/img.png&quot; data-is-animation=&quot;false&quot; data-origin-width=&quot;2250&quot; data-origin-height=&quot;2250&quot; data-filename=&quot;edited_KakaoTalk_Photo_2022-08-27-23-07-44 012.jpeg&quot; data-widthpercent=&quot;50&quot; style=&quot;width: 49.4186%; margin-right: 10px;&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/6hwiE/btrKF7VWkLF/boh91tOnB3Im07fTgoksOK/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2F6hwiE%2FbtrKF7VWkLF%2Fboh91tOnB3Im07fTgoksOK%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;2250&quot; height=&quot;2250&quot;/&gt;&lt;/span&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/puuI3/btrKIrk3uBP/kCDfLmyrcNHfEKedUpJn41/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/puuI3/btrKIrk3uBP/kCDfLmyrcNHfEKedUpJn41/img.png&quot; data-is-animation=&quot;false&quot; data-origin-width=&quot;1806&quot; data-origin-height=&quot;1806&quot; data-filename=&quot;edited_KakaoTalk_Photo_2022-08-27-23-07-44 013.jpeg&quot; data-widthpercent=&quot;50&quot; style=&quot;width: 49.4186%;&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/puuI3/btrKIrk3uBP/kCDfLmyrcNHfEKedUpJn41/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FpuuI3%2FbtrKIrk3uBP%2FkCDfLmyrcNHfEKedUpJn41%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;1806&quot; height=&quot;1806&quot;/&gt;&lt;/span&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/c7Y8Ia/btrKGxGOPLk/gfiJdVLMMkFbefDmNGRt21/img.jpg&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/c7Y8Ia/btrKGxGOPLk/gfiJdVLMMkFbefDmNGRt21/img.jpg&quot; data-is-animation=&quot;false&quot; data-origin-width=&quot;4000&quot; data-origin-height=&quot;3000&quot; data-filename=&quot;KakaoTalk_Photo_2022-08-27-23-07-44 010.jpeg&quot; style=&quot;width: 63.2558%; margin-right: 10px; margin-top: 10px;&quot; data-widthpercent=&quot;64&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/c7Y8Ia/btrKGxGOPLk/gfiJdVLMMkFbefDmNGRt21/img.jpg&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2Fc7Y8Ia%2FbtrKGxGOPLk%2FgfiJdVLMMkFbefDmNGRt21%2Fimg.jpg&quot; onerror=&quot;this.onerror=null; this.src='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png'; this.srcset='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png';&quot; loading=&quot;lazy&quot; width=&quot;4000&quot; height=&quot;3000&quot;/&gt;&lt;/span&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/cpLmeD/btrKGQGbmMS/MAhtzEt3UBuLpIrc5ntJY0/img.jpg&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/cpLmeD/btrKGQGbmMS/MAhtzEt3UBuLpIrc5ntJY0/img.jpg&quot; data-is-animation=&quot;false&quot; data-origin-width=&quot;3000&quot; data-origin-height=&quot;4000&quot; data-filename=&quot;KakaoTalk_Photo_2022-08-27-23-07-44 011.jpeg&quot; style=&quot;width: 35.5814%; margin-top: 10px;&quot; data-widthpercent=&quot;36&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/cpLmeD/btrKGQGbmMS/MAhtzEt3UBuLpIrc5ntJY0/img.jpg&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FcpLmeD%2FbtrKGQGbmMS%2FMAhtzEt3UBuLpIrc5ntJY0%2Fimg.jpg&quot; onerror=&quot;this.onerror=null; this.src='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png'; this.srcset='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png';&quot; loading=&quot;lazy&quot; width=&quot;3000&quot; height=&quot;4000&quot;/&gt;&lt;/span&gt;&lt;/div&gt;
  &lt;figcaption&gt;만들면서 배우는 리액트 : 기초&lt;/figcaption&gt;
&lt;/figure&gt;
&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;처음 참여한 세션은 핸즈온 세션인 &quot;&lt;b&gt;만들면서 배우는 리액트 : 기초&quot; &lt;/b&gt;라는 세션이었습니다. 저는 사실 이 세션을 가장 기다렸습니다. 왜냐하면 이 세션에서 하려는 목적을 잘못 이해했기 때문이죠... 저는 바닐라 자바스크립트로 리액트의 hooks나 상태관리 같은것을 만들면서 이해하는 세션인줄 알았지만, 단순히 npm을 사용하지 않고 CDN으로 React 라이브러리를 호출해서 React를 구성하는 과정이었습니다. 따라서 리액트를 많이 다뤄본 저한테는 크게 의미없는 세션이었고, 도움이 되지 않았던 세션이었습니다. 하지만 세션 자체는 참 좋았습니다. 내용도 좋았고, 발표도 매끄러웠으며, 실습도 꽤 괜찮았죠.(다만, 저한테만 안맞았을뿐...) 이 세션은 리액트를 배우지 않았거나 이제 입문한 사람에게는 좋았던 내용이었습니다. 인프런에 강의도 올라와 있다고 하니 한번 찾아보시는것도 좋아보입니다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;hr contenteditable=&quot;false&quot; data-ke-type=&quot;horizontalRule&quot; data-ke-style=&quot;style6&quot; /&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;h3 data-ke-size=&quot;size23&quot;&gt;우리는 오늘도 성장합니다 - 인프랩 프론트엔드 업무 프로세스 변천사 (발표자 : 장우현님)&lt;/h3&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-filename=&quot;KakaoTalk_Photo_2022-08-27-23-07-44 009.jpeg&quot; data-origin-width=&quot;4000&quot; data-origin-height=&quot;3000&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/EwpY3/btrKHdnAkdh/Z4PGdsNzyeWK8iHZl3TEkk/img.jpg&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/EwpY3/btrKHdnAkdh/Z4PGdsNzyeWK8iHZl3TEkk/img.jpg&quot; data-alt=&quot;우리는 오늘도 성장합니다&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/EwpY3/btrKHdnAkdh/Z4PGdsNzyeWK8iHZl3TEkk/img.jpg&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FEwpY3%2FbtrKHdnAkdh%2FZ4PGdsNzyeWK8iHZl3TEkk%2Fimg.jpg&quot; onerror=&quot;this.onerror=null; this.src='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png'; this.srcset='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png';&quot; loading=&quot;lazy&quot; width=&quot;4000&quot; height=&quot;3000&quot; data-filename=&quot;KakaoTalk_Photo_2022-08-27-23-07-44 009.jpeg&quot; data-origin-width=&quot;4000&quot; data-origin-height=&quot;3000&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;15분 정도의 세션이었지만, 인프런이 어떻게 애자일 하고 있는지에 알 수 있던 세션이었습니다. 다만, 좀 늦게 참여하였기에 초반 내용을 잘 못들었지만, 인프런의 채용 서비스인 랠릿을 개발할 때 어떻게 애자일을 하고 있고, 기존의 QA만 들어가면 늘어나던 이슈를 데일리스크럼 및 개발자 테스트를 통해서 QA에서 발생하는 이슈 갯수를 줄일수 있었던 경험을 소개하는 좋은 세션이었습니다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;hr contenteditable=&quot;false&quot; data-ke-type=&quot;horizontalRule&quot; data-ke-style=&quot;style6&quot; /&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;h3 data-ke-size=&quot;size23&quot;&gt;AWS로 알아보는 서비스 아키텍처의 변화와 진화 (발표자 : 송주영님)&lt;/h3&gt;
&lt;p&gt;&lt;figure class=&quot;imagegridblock&quot;&gt;
  &lt;div class=&quot;image-container&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/xdRTa/btrKGoiKVtu/XU0clOsHKXb7ZJsf1KkOY1/img.jpg&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/xdRTa/btrKGoiKVtu/XU0clOsHKXb7ZJsf1KkOY1/img.jpg&quot; data-is-animation=&quot;false&quot; data-origin-width=&quot;4000&quot; data-origin-height=&quot;3000&quot; data-filename=&quot;KakaoTalk_Photo_2022-08-27-23-07-44 008.jpeg&quot; style=&quot;width: 32.5581%; margin-right: 10px;&quot; data-widthpercent=&quot;33.33&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/xdRTa/btrKGoiKVtu/XU0clOsHKXb7ZJsf1KkOY1/img.jpg&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FxdRTa%2FbtrKGoiKVtu%2FXU0clOsHKXb7ZJsf1KkOY1%2Fimg.jpg&quot; onerror=&quot;this.onerror=null; this.src='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png'; this.srcset='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png';&quot; loading=&quot;lazy&quot; width=&quot;4000&quot; height=&quot;3000&quot;/&gt;&lt;/span&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/bstKyS/btrKGOn0Bja/nobut4A55L6IZV9bDzwRt1/img.jpg&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/bstKyS/btrKGOn0Bja/nobut4A55L6IZV9bDzwRt1/img.jpg&quot; data-is-animation=&quot;false&quot; data-origin-width=&quot;4000&quot; data-origin-height=&quot;3000&quot; data-filename=&quot;KakaoTalk_Photo_2022-08-27-23-07-44 007.jpeg&quot; style=&quot;width: 32.5581%; margin-right: 10px;&quot; data-widthpercent=&quot;33.33&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/bstKyS/btrKGOn0Bja/nobut4A55L6IZV9bDzwRt1/img.jpg&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FbstKyS%2FbtrKGOn0Bja%2Fnobut4A55L6IZV9bDzwRt1%2Fimg.jpg&quot; onerror=&quot;this.onerror=null; this.src='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png'; this.srcset='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png';&quot; loading=&quot;lazy&quot; width=&quot;4000&quot; height=&quot;3000&quot;/&gt;&lt;/span&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/P9Nne/btrKJ7mlz20/qHlLEa44RkQFTCko1i6hw0/img.jpg&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/P9Nne/btrKJ7mlz20/qHlLEa44RkQFTCko1i6hw0/img.jpg&quot; data-is-animation=&quot;false&quot; data-origin-width=&quot;4000&quot; data-origin-height=&quot;3000&quot; data-filename=&quot;KakaoTalk_Photo_2022-08-27-23-07-44 006.jpeg&quot; data-widthpercent=&quot;33.34&quot; style=&quot;width: 32.5581%;&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/P9Nne/btrKJ7mlz20/qHlLEa44RkQFTCko1i6hw0/img.jpg&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FP9Nne%2FbtrKJ7mlz20%2FqHlLEa44RkQFTCko1i6hw0%2Fimg.jpg&quot; onerror=&quot;this.onerror=null; this.src='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png'; this.srcset='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png';&quot; loading=&quot;lazy&quot; width=&quot;4000&quot; height=&quot;3000&quot;/&gt;&lt;/span&gt;&lt;/div&gt;
  &lt;figcaption&gt;AWS로 알아보는 서비스 아키텍처의 변화와 진화&lt;/figcaption&gt;
&lt;/figure&gt;
&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;저는 인프콘을 진행하면서 가장 재미있게 들었던 세션이 2가지가 있었는데 그 중 하나가 이 세션이었습니다. 특히 송주영님의 입담은 진짜 놀라움을 느꼈습니다. 사실 세션 제목에서는 AWS로 서비스를 어떻게 만드는지에 대해서 발표하는 자리인줄 알았지만, 실상 내용은 송주영님의 인생 이야기였어서 기술적인건 그렇게 크게 없었지만, 재미있게 들을 수 있었습니다. 특히 다른 사람의 인생이야기는 자칫 잘못하면 지루할 수 있었는데, 35분동안 늘어지지 않고 흥미진진하게 이어갈 수 있는 입담과 재밌는 이야기 끝에는 리스너들과 소통 진짜 너무 재밌었던 세션이었습니다.(사실 근데 기술 이야기는 크게 많이 없었던건 좀 아쉽긴 했습니다...)&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;hr contenteditable=&quot;false&quot; data-ke-type=&quot;horizontalRule&quot; data-ke-style=&quot;style6&quot; /&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;h3 data-ke-size=&quot;size23&quot;&gt;인프런 개발자와의 데브챗&lt;/h3&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;이 데브챗은 이벤트 장에서 인프런 개발자와 1:1로 이야기를 할 수 있는 이벤트(?) 였었는데 당일 신청을 해야했고 시간에 맞춰 대략 13분 정도 진행이 되었습니다. 저는 대략 5년차이신 인프런 프론트엔드 개발자와 13분 동안 이야기를 하였고, 주로 제가 현업에서 느꼈던 문제, 커리어, 인프런에서는 어떻게 개발을 진행하는지 알 수 있었던 재밌고 유익한 시간이었습니다. 이 데브챗을 통해서 인프런의 좋은 감정을 많이 느꼈습니다. 사실 13분이 길다면 길고 짧다면 짧은 시간이지만 또 이런자리가 있다면 신청하고 싶은 이벤트 였습니다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;hr contenteditable=&quot;false&quot; data-ke-type=&quot;horizontalRule&quot; data-ke-style=&quot;style6&quot; /&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;h3 data-ke-size=&quot;size23&quot;&gt;Vanilla JS와 함께 지속가능한 프론트엔드 코드 만들기 - 인프런 수강 바구니 개선기 (발표자 : 이문기님)&lt;/h3&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-filename=&quot;KakaoTalk_Photo_2022-08-27-23-07-44 004.jpeg&quot; data-origin-width=&quot;4000&quot; data-origin-height=&quot;3000&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/4SGt6/btrKHxsx9qK/9lMjYZ7cC4AOAxbWYyRbDk/img.jpg&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/4SGt6/btrKHxsx9qK/9lMjYZ7cC4AOAxbWYyRbDk/img.jpg&quot; data-alt=&quot;Vanilla JS와 함께 지속가능한 프론트엔드 코드 만들기&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/4SGt6/btrKHxsx9qK/9lMjYZ7cC4AOAxbWYyRbDk/img.jpg&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2F4SGt6%2FbtrKHxsx9qK%2F9lMjYZ7cC4AOAxbWYyRbDk%2Fimg.jpg&quot; onerror=&quot;this.onerror=null; this.src='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png'; this.srcset='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png';&quot; loading=&quot;lazy&quot; width=&quot;4000&quot; height=&quot;3000&quot; data-filename=&quot;KakaoTalk_Photo_2022-08-27-23-07-44 004.jpeg&quot; data-origin-width=&quot;4000&quot; data-origin-height=&quot;3000&quot;/&gt;&lt;/span&gt;&lt;figcaption&gt;Vanilla JS와 함께 지속가능한 프론트엔드 코드 만들기&lt;/figcaption&gt;
&lt;/figure&gt;
&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;제가 위에서 인프콘에서 재밌게 들은 세션이 2개 있다고 했는데 그 중 하나가 바로 이 세션이었습니다. 이 세션은 현재 인프런이 경험하고 있는 문제와 그것을 어떻게 풀었는지에 대해 이야기 하는 세션이었습니다. 특히 다양한 견해를 넓혀갈 수 있었던 세션이었습니다. 현재 레거시한 프론트엔드를 어떻게 지속 가능하게 다시 리팩토링하고 공통 데이터를 어떻게 관리할지, 그리고 CQS(Command Query Separation) Pattern, DTO(Data Transfer Object), JSDoc을 도입한 계기 등 지금 현재 제가 고민하고 있는 문제에 대해서 이야기를 해주셨는데 많은 도움이 됐고, 프론트엔드 개발자로서 한층 더 알 수 있었던 세션이었습니다. 그리고 DTO및 CQS에 대해서는 제가 몰랐던 내용이기에 꼭 다시 한번 복습해야겠다고 느꼈습니다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;hr contenteditable=&quot;false&quot; data-ke-type=&quot;horizontalRule&quot; data-ke-style=&quot;style6&quot; /&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;h3 data-ke-size=&quot;size23&quot;&gt;마무리&lt;/h3&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-filename=&quot;KakaoTalk_Photo_2022-08-27-23-07-44 001.jpeg&quot; data-origin-width=&quot;4000&quot; data-origin-height=&quot;3000&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/MfUeB/btrKGPNYZGn/0jQK6V4YXUB5rRQABcp1PK/img.jpg&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/MfUeB/btrKGPNYZGn/0jQK6V4YXUB5rRQABcp1PK/img.jpg&quot; data-alt=&quot;인프콘에서 받은 굿즈 정리&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/MfUeB/btrKGPNYZGn/0jQK6V4YXUB5rRQABcp1PK/img.jpg&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FMfUeB%2FbtrKGPNYZGn%2F0jQK6V4YXUB5rRQABcp1PK%2Fimg.jpg&quot; onerror=&quot;this.onerror=null; this.src='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png'; this.srcset='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png';&quot; loading=&quot;lazy&quot; width=&quot;4000&quot; height=&quot;3000&quot; data-filename=&quot;KakaoTalk_Photo_2022-08-27-23-07-44 001.jpeg&quot; data-origin-width=&quot;4000&quot; data-origin-height=&quot;3000&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;전반적으로 좋은 경험을 준 컨퍼런스 였습니다. 프론트엔드 개발적으로는 배울 수 있었던 세션이 한개였던게 조금 아쉽긴 했지만, 그래도 꽤 재밌게 들었고, 오랜만에 한 오프라인 컨퍼런스라 그런지 감회도 새로웠습니다. 다음에도 2023 인프콘이 개최된다면 꼭 참여해야겠다고 다짐한 컨퍼런스 였습니다.&lt;/p&gt;</description>
      <category>프로그래밍 언어/웹 프론트엔드</category>
      <category>2022 인프콘</category>
      <category>개발자</category>
      <category>인프콘</category>
      <category>컨퍼런스</category>
      <author>방현준</author>
      <guid isPermaLink="true">https://noogoonaa.tistory.com/115</guid>
      <comments>https://noogoonaa.tistory.com/115#entry115comment</comments>
      <pubDate>Sat, 27 Aug 2022 23:22:21 +0900</pubDate>
    </item>
    <item>
      <title>Strapi란? - React, Strapi v4, MySQL을 이용한 Todolist 만들기</title>
      <link>https://noogoonaa.tistory.com/113</link>
      <description>&lt;h3 data-ke-size=&quot;size23&quot;&gt;&lt;span style=&quot;color: #ee2323;&quot;&gt;&lt;b&gt;React, Strapi v4, MySQL을 이용한 Todolist 만들기 시리즈&lt;/b&gt;&lt;/span&gt;&amp;nbsp;&lt;/h3&gt;
&lt;ul style=&quot;list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li&gt;&lt;a href=&quot;https://noogoonaa.tistory.com/111&quot;&gt;2022.05.05 - [프로그래밍 언어/웹 프론트엔드] - 프로젝트 설정 및 Strapi사용하기 - React, Strapi v4, MySQL을 이용한 메모앱 만들기&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://noogoonaa.tistory.com/112&quot;&gt;2022.05.06 - [프로그래밍 언어/웹 프론트엔드] - React와 Strapi 연동 - React, Strapi v4, MySQL을 이용한 Todolist 만들기&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;2022.05.07 - [프로그래밍 언어/웹 프론트엔드] - Strapi란? - React, Strapi v4, MySQL을 이용한 Todolist 만들기&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-filename=&quot;cover-react-cms_09dce2416d.png&quot; data-origin-width=&quot;931&quot; data-origin-height=&quot;536&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/vA4vP/btrBhXOrTnz/kdkitBW680TETUsZaVjuuK/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/vA4vP/btrBhXOrTnz/kdkitBW680TETUsZaVjuuK/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/vA4vP/btrBhXOrTnz/kdkitBW680TETUsZaVjuuK/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FvA4vP%2FbtrBhXOrTnz%2FkdkitBW680TETUsZaVjuuK%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;931&quot; height=&quot;536&quot; data-filename=&quot;cover-react-cms_09dce2416d.png&quot; data-origin-width=&quot;931&quot; data-origin-height=&quot;536&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;/p&gt;
&lt;h2 data-ke-size=&quot;size26&quot;&gt;여는글&lt;/h2&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;자 우리는 Strapi와 MySQL, React를 이용해서 Strapi를 사용해 보았습니다. 어떤가요? Strapi가 사용하기 편했나요? 프론트엔드 개발자라면 상당히 편했을 겁니다. 그도 그럴게 백엔드 코딩 없이 손 쉽게 백엔드를 만들었으니까요. 그럼 이제 Strapi가 뭔지 알아보도록 하시죠.&lt;/p&gt;
&lt;h2 data-ke-size=&quot;size26&quot;&gt;&lt;b&gt;CMS란?&lt;/b&gt;&lt;/h2&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;왜 Strapi를 알아보자고 하는데 CMS를 알아보느냐, Strapi는 Headless CMS이기 때문이죠, 처음부터 Headless CMS 어쩌고 하면 잘 이해가 안갈테니, CMS부터 설명해 보겠습니다. CMS는 Content Management System(콘텐츠 관리 시스템)의 준 말로, 코딩없이 대시보드를 이용해 유저에게 제공할 컨텐츠를 생성, 수정, 삭제 등을 할 수 있게 도와주는 시스템 입니다. 워드프레스나 마젠토, 오픈카트를 CMS라고 합니다. 이 시스템들의 공통점은 위에서 말씀 드렸던 코딩 없이, 웹 사이트를 만들 수 있는것 입니다. 이것이 중요합니다.&lt;/p&gt;
&lt;h2 data-ke-size=&quot;size26&quot;&gt;Headless CMS란?&lt;/h2&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;Headless Content Management System(헤드리스 콘텐츠 관리 시스템)의 준 말로, Head가 없는 컨텐츠 관리 시스템입니다. 갑자기 Headless가 붙었는데 Headless는 무엇이냐, CMS를 말씀 드렸을 때 코딩 없이 웹 사이트를 만든다고 했는데, 이 말은 프론트엔드, 백엔드 구분 없이 대시보드를 이용해 하나의 웹서비스를 만들수 있는 시스템이라는 말입니다. 여기서 CMS는 Head(Frontend), Body(Backend)로 보는데, 이것에서 Head(Frontend)를 없앤 CMS 라고 해서 Headless CMS 라고 부릅니다. 백엔드를 잘라낸 CMS라면 Bodyless CMS 라고 부르겠죠?&lt;/p&gt;
&lt;h2 data-ke-size=&quot;size26&quot;&gt;Strapi란?&lt;/h2&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;자 그럼 다시 돌아와서 우리가 지금까지 사용했던 Strapi라는것은 무엇일까요? Strapi는 Headless CMS로서, 빠른 속도로 대시보드를 이용해 백엔드 시스템을 구축할 수 있는 툴 입니다. 이 Strapi는 Node.js 기반의 오픈소스로서 개발자라면 커스터마이징이 용이한 시스템입니다.(하지만, 커스터마이징이 엄청나게 용이하진 않다..)&lt;/p&gt;
&lt;h2 data-ke-size=&quot;size26&quot;&gt;그러면 Wix같은 서비스도 CMS인가요?&lt;/h2&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;정확히 말하면 아닙니다. CMS는 호스팅도 셀프로 가능해야합니다. Wix는 호스팅을 wix를 통해서 해야하기 때문에 CMS에 부합하지 않습니다. wix같은 서비스는 단순한 웹 서비스로 보는게 일반적입니다.&lt;/p&gt;
&lt;h2 data-ke-size=&quot;size26&quot;&gt;Strapi가 그럼 최강일까?&lt;/h2&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;Strapi는 최강이 아닙니다, 물론 간단한 서비스 입장에서는 최강일 수 있습니다. 여태까지 우리가 만들어 왔던 Todolist도 데이터베이스 설계부터 데이터 생성, 백엔드 코드 개발 등 최소 1일은 걸립니다. 하지만 우리는 단 1시간만에 이것을 해결할 수 있었습니다. 그만큼 Strapi의 장점은 확고 합니다. 하지만, 아까 말했다시피 커스터 마이징이 용이하지 않고, DB를 직접 조작하기가 쉽지 않고, 실제로 개발하는 것 보다 Strapi가 성능면에서 느리다는 단점이 있습니다. 즉, 간단히 말해서, 간단한 서비스에서는 꽤 좋은 경험을 가질 수 있지만, 복잡하디 복잡한 서비스에서는 Strapi가 큰 도움을 줄 수 없을것입니다.&lt;/p&gt;
&lt;h2 data-ke-size=&quot;size26&quot;&gt;결론&lt;/h2&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;Strapi 꽤 좋은 시스템입니다. 코딩 없이 CRUD의 기본 기능을 만들 수 있고, 빠른 개발 속도를 낼 수 있습니다. 위에서 단점을 말씀 드렸지만, 단점을 잡아먹을 장점이 많습니다. 따라서 한번 Strapi에 대해서 경험해 보았으니 사용의 여부는 사용자에게 달려 있습니다. 단 서버의 커스터 마이징이 필요한 부분이 있다면 사용을 고려해 보아야 합니다. 나중에 마이그레이션 할 떄 큰 고통을 받을 수 있습니다ㅠㅠ&lt;/p&gt;</description>
      <category>프로그래밍 언어/웹 프론트엔드</category>
      <author>방현준</author>
      <guid isPermaLink="true">https://noogoonaa.tistory.com/113</guid>
      <comments>https://noogoonaa.tistory.com/113#entry113comment</comments>
      <pubDate>Sat, 7 May 2022 16:59:35 +0900</pubDate>
    </item>
    <item>
      <title>React와 Strapi 연동 - React, Strapi v4, MySQL을 이용한 Todolist 만들기</title>
      <link>https://noogoonaa.tistory.com/112</link>
      <description>&lt;h3 data-ke-size=&quot;size23&quot;&gt;&lt;span style=&quot;color: #ee2323;&quot;&gt;&lt;b&gt;React, Strapi v4, MySQL을 이용한 Todolist 만들기 시리즈&lt;/b&gt;&lt;/span&gt;&amp;nbsp;&lt;/h3&gt;
&lt;ul style=&quot;list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li&gt;&lt;a href=&quot;https://noogoonaa.tistory.com/111&quot; target=&quot;_blank&quot; rel=&quot;noopener&quot;&gt;2022.05.05 - [프로그래밍 언어/웹 프론트엔드] - 프로젝트 설정 및 Strapi사용하기 - React, Strapi v4, MySQL을 이용한 메모앱 만들기&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;2022.05.06 - [프로그래밍 언어/웹 프론트엔드] - React와 Strapi 연동 - React, Strapi v4, MySQL을 이용한 Todolist 만들기&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://noogoonaa.tistory.com/113&quot; target=&quot;_blank&quot; rel=&quot;noopener&quot;&gt;2022.05.07 - [프로그래밍 언어/웹 프론트엔드] - Strapi란? - React, Strapi v4, MySQL을 이용한 Todolist 만들기&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-filename=&quot;cover-react-cms_09dce2416d.png&quot; data-origin-width=&quot;931&quot; data-origin-height=&quot;536&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/bvFrq7/btrBi8WK2j3/6ycfc00lVuTGBOknS0sVaK/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/bvFrq7/btrBi8WK2j3/6ycfc00lVuTGBOknS0sVaK/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/bvFrq7/btrBi8WK2j3/6ycfc00lVuTGBOknS0sVaK/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FbvFrq7%2FbtrBi8WK2j3%2F6ycfc00lVuTGBOknS0sVaK%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;931&quot; height=&quot;536&quot; data-filename=&quot;cover-react-cms_09dce2416d.png&quot; data-origin-width=&quot;931&quot; data-origin-height=&quot;536&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;/p&gt;
&lt;h2 data-ke-size=&quot;size26&quot;&gt;React 프로젝트에서 TodoList 프로젝트 뼈대 만들기&lt;/h2&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;아래 코드를 일일히 쳐가며 만들어 가는것을 추천 드리지만, 귀찮은 작업이다 보니 아래 GitHub에 제 코드를 올려놓았으니, 다운 받으시면 됩니다.&lt;/p&gt;
&lt;figure id=&quot;og_1651760022494&quot; contenteditable=&quot;false&quot; data-ke-type=&quot;opengraph&quot; data-ke-align=&quot;alignCenter&quot; data-og-type=&quot;object&quot; data-og-title=&quot;GitHub - BangHyeonJun/strapi-react-mysql-front&quot; data-og-description=&quot;Contribute to BangHyeonJun/strapi-react-mysql-front development by creating an account on GitHub.&quot; data-og-host=&quot;github.com&quot; data-og-source-url=&quot;https://github.com/BangHyeonJun/strapi-react-mysql-front&quot; data-og-url=&quot;https://github.com/BangHyeonJun/strapi-react-mysql-front&quot; data-og-image=&quot;https://scrap.kakaocdn.net/dn/cr6XKH/hyOhDBfRig/OTyCchR0FbxWAZ6oi675nk/img.png?width=1200&amp;amp;height=600&amp;amp;face=0_0_1200_600&quot;&gt;&lt;a href=&quot;https://github.com/BangHyeonJun/strapi-react-mysql-front&quot; target=&quot;_blank&quot; rel=&quot;noopener&quot; data-source-url=&quot;https://github.com/BangHyeonJun/strapi-react-mysql-front&quot;&gt;
&lt;div class=&quot;og-image&quot; style=&quot;background-image: url('https://scrap.kakaocdn.net/dn/cr6XKH/hyOhDBfRig/OTyCchR0FbxWAZ6oi675nk/img.png?width=1200&amp;amp;height=600&amp;amp;face=0_0_1200_600');&quot;&gt;&amp;nbsp;&lt;/div&gt;
&lt;div class=&quot;og-text&quot;&gt;
&lt;p class=&quot;og-title&quot; data-ke-size=&quot;size16&quot;&gt;GitHub - BangHyeonJun/strapi-react-mysql-front&lt;/p&gt;
&lt;p class=&quot;og-desc&quot; data-ke-size=&quot;size16&quot;&gt;Contribute to BangHyeonJun/strapi-react-mysql-front development by creating an account on GitHub.&lt;/p&gt;
&lt;p class=&quot;og-host&quot; data-ke-size=&quot;size16&quot;&gt;github.com&lt;/p&gt;
&lt;/div&gt;
&lt;/a&gt;&lt;/figure&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;자 그럼 저희가 아까 만들어 놓은 프로젝트를 VSCode를 통해 킵니다. 그러면 기본적인 프로젝트의 구조는 위와 같습니다. 이러한 프로젝트 구조의 파일들을 오른쪽과 같이 맞춰 줍니다.&lt;/p&gt;
&lt;p&gt;&lt;figure class=&quot;imagegridblock&quot;&gt;
  &lt;div class=&quot;image-container&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/kGsJF/btrBhlCjm90/g2RC5d3Cv9taEIyQABo7hK/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/kGsJF/btrBhlCjm90/g2RC5d3Cv9taEIyQABo7hK/img.png&quot; data-is-animation=&quot;false&quot; data-origin-width=&quot;650&quot; data-origin-height=&quot;888&quot; data-filename=&quot;Untitled 40.png&quot; style=&quot;width: 55.1113%; margin-right: 10px;&quot; data-widthpercent=&quot;55.76&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/kGsJF/btrBhlCjm90/g2RC5d3Cv9taEIyQABo7hK/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FkGsJF%2FbtrBhlCjm90%2Fg2RC5d3Cv9taEIyQABo7hK%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;650&quot; height=&quot;888&quot;/&gt;&lt;/span&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/b85WgM/btrBiYTpxd0/5FK8TS8qkqSlLM8O07Qf2K/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/b85WgM/btrBiYTpxd0/5FK8TS8qkqSlLM8O07Qf2K/img.png&quot; data-is-animation=&quot;false&quot; data-origin-width=&quot;640&quot; data-origin-height=&quot;1102&quot; data-filename=&quot;Untitled 41.png&quot; style=&quot;width: 43.7259%;&quot; data-widthpercent=&quot;44.24&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/b85WgM/btrBiYTpxd0/5FK8TS8qkqSlLM8O07Qf2K/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2Fb85WgM%2FbtrBiYTpxd0%2F5FK8TS8qkqSlLM8O07Qf2K%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;640&quot; height=&quot;1102&quot;/&gt;&lt;/span&gt;&lt;/div&gt;
&lt;/figure&gt;
&lt;/p&gt;
&lt;h3 data-ke-size=&quot;size23&quot;&gt;src/Index.js&lt;/h3&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;해당 컴포넌트는 기본 제공 템플릿에서 크게 변경하지 않았습니다. report 기능만 제거한 컴포넌트 입니다.&lt;/p&gt;
&lt;pre class=&quot;javascript&quot;&gt;&lt;code&gt;import React from &quot;react&quot;;
import ReactDOM from &quot;react-dom/client&quot;;
import &quot;./index.css&quot;;
import App from &quot;./App&quot;;

const root = ReactDOM.createRoot(document.getElementById(&quot;root&quot;));
root.render(
	&amp;lt;React.StrictMode&amp;gt;
		&amp;lt;App /&amp;gt;
	&amp;lt;/React.StrictMode&amp;gt;
);
&lt;/code&gt;&lt;/pre&gt;
&lt;h3 data-ke-size=&quot;size23&quot;&gt;src/Index.css&lt;/h3&gt;
&lt;pre class=&quot;css&quot;&gt;&lt;code&gt;body {
  margin: 0;
  font-family: -apple-system, BlinkMacSystemFont, 'Segoe UI', 'Roboto', 'Oxygen',
    'Ubuntu', 'Cantarell', 'Fira Sans', 'Droid Sans', 'Helvetica Neue',
    sans-serif;
  -webkit-font-smoothing: antialiased;
  -moz-osx-font-smoothing: grayscale;
}

code {
  font-family: source-code-pro, Menlo, Monaco, Consolas, 'Courier New',
    monospace;
}
&lt;/code&gt;&lt;/pre&gt;
&lt;h3 data-ke-size=&quot;size23&quot;&gt;src/App.js&lt;/h3&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;할 일 컴포넌트를 호출하는 컴포넌트입니다. 또한 모든 Action 및 Fetching들은 App.js에서 관리합니다.&lt;/p&gt;
&lt;pre class=&quot;javascript&quot;&gt;&lt;code&gt;import React, { useState } from &quot;react&quot;;
import TaskManager from &quot;./components/TaskManager&quot;;

function App() {
	const [todoList, setTodoList] = useState([]);

	const fetchTodoList = async () =&amp;gt; {};

	const changeTaskToComplete = (id) =&amp;gt; async () =&amp;gt; {};

	const changeTaskToUnComplete = (id) =&amp;gt; async () =&amp;gt; {};

	const appendTaskInToDoList = async (title) =&amp;gt; {};

	const deleteTaskInToDoList = (id) =&amp;gt; async () =&amp;gt; {};

	return (
		&amp;lt;div className=&quot;App&quot;&amp;gt;
			&amp;lt;TaskManager
				onComplete={changeTaskToComplete}
				onUnComplete={changeTaskToUnComplete}
				onAppend={appendTaskInToDoList}
				onDelete={deleteTaskInToDoList}
				todoList={todoList}
			&amp;gt;&amp;lt;/TaskManager&amp;gt;
		&amp;lt;/div&amp;gt;
	);
}

export default App;
&lt;/code&gt;&lt;/pre&gt;
&lt;h3 data-ke-size=&quot;size23&quot;&gt;src/App.css&lt;/h3&gt;
&lt;pre class=&quot;actionscript&quot;&gt;&lt;code&gt;/* 비어놓음 */
&lt;/code&gt;&lt;/pre&gt;
&lt;h3 data-ke-size=&quot;size23&quot;&gt;src/components/TaskManager.js&lt;/h3&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;전반적인 할 일 목록의 컴포넌트를 호출하는 컴포넌트입니다. 또한 현재 날짜를 화면에 보여주는 역할도 수행합니다.&lt;/p&gt;
&lt;pre class=&quot;javascript&quot;&gt;&lt;code&gt;import React from &quot;react&quot;;
import &quot;./TaskManager.css&quot;;
import Tasklist from &quot;./Tasklist&quot;;
import Taskform from &quot;./Taskform&quot;;

const dateformatted = new Date().toLocaleDateString(&quot;ko-KR&quot;, {
	weekday: &quot;long&quot;,
	year: &quot;numeric&quot;,
	month: &quot;long&quot;,
	day: &quot;numeric&quot;,
});

const TaskManager = ({
	todoList,
	onComplete,
	onUnComplete,
	onAppend,
	onDelete,
}) =&amp;gt; {
	return (
		&amp;lt;div className=&quot;taskmanager&quot;&amp;gt;
			&amp;lt;div className=&quot;header&quot;&amp;gt;{dateformatted} - 할 일 목록 &amp;lt;/div&amp;gt;
			&amp;lt;Tasklist
				onComplete={onComplete}
				onUnComplete={onUnComplete}
				onDelete={onDelete}
				todoList={todoList}
			&amp;gt;&amp;lt;/Tasklist&amp;gt;
			&amp;lt;Taskform onAppend={onAppend}&amp;gt;&amp;lt;/Taskform&amp;gt;
		&amp;lt;/div&amp;gt;
	);
};

export default TaskManager;
&lt;/code&gt;&lt;/pre&gt;
&lt;h3 data-ke-size=&quot;size23&quot;&gt;src/components/TaskManager.css&lt;/h3&gt;
&lt;pre class=&quot;css&quot;&gt;&lt;code&gt;.taskmanager {
	display: grid;
	margin: 5%;
	height: auto;
	border-radius: 12px 8px 5px;
	grid-template-areas: &quot;header&quot; &quot;content&quot; &quot;footer&quot;;
	grid-template-columns: 1fr;
	grid-template-rows: 0.1fr 1fr 0.1fr;
	grid-gap: 5px;
}

.header {
	grid-area: header;
	font-size: 28px;
	text-align: center;
	font-weight: bolder;
}
.task {
	grid-area: content;
}
.taskform {
	grid-area: footer;
}

.container {
	width: 100%;
	height: 50vh;
	margin: 10px;
	display: flex;
	flex-direction: column;
	align-items: center;
	justify-content: center;
}

.emptyemoji {
	font-size: 6rem;
	margin-bottom: 5vh;
	color: rgba(0 0 0 / 0.3);
}

.emptytxt {
	font-size: 2rem;
	color: rgba(0 0 0 / 0.3);
}
&lt;/code&gt;&lt;/pre&gt;
&lt;h3 data-ke-size=&quot;size23&quot;&gt;src/components/Tasklist.js&lt;/h3&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;해당 컴포넌트는 본격적으로 할 일 목록을 만들어주는 함수 입니다.&lt;/p&gt;
&lt;pre class=&quot;javascript&quot;&gt;&lt;code&gt;import Task from &quot;./Task&quot;;

const Tasklist = ({ onComplete, onUnComplete, onDelete, todoList }) =&amp;gt; {
	if (!todoList.length)
		return (
			&amp;lt;div className=&quot;container&quot;&amp;gt;
				&amp;lt;span className=&quot;emptyemoji&quot;&amp;gt; &amp;lt;/span&amp;gt;
				&amp;lt;strong className=&quot;emptytxt&quot;&amp;gt;할 일을 입력해 주세요&amp;lt;/strong&amp;gt;
			&amp;lt;/div&amp;gt;
		);

	return (
		&amp;lt;div&amp;gt;
			&amp;lt;div className=&quot;ctheader&quot;&amp;gt;To Do&amp;lt;/div&amp;gt;

			{todoList.map(
				(v) =&amp;gt;
					v.attributes.complete_yn || (
						&amp;lt;Task
							key={v.id}
							id={v.id}
							className={&quot;task&quot;}
							title={v.attributes.title}
							onClick={onComplete}
							onDelete={onDelete}
						&amp;gt;&amp;lt;/Task&amp;gt;
					)
			)}

			&amp;lt;div className=&quot;ctheader&quot;&amp;gt;Completed&amp;lt;/div&amp;gt;

			{todoList.map(
				(v) =&amp;gt;
					v.attributes.complete_yn &amp;amp;&amp;amp; (
						&amp;lt;Task
							key={v.id}
							id={v.id}
							className={&quot;comtask&quot;}
							title={v.attributes.title}
							onClick={onUnComplete}
							onDelete={onDelete}
						&amp;gt;&amp;lt;/Task&amp;gt;
					)
			)}
		&amp;lt;/div&amp;gt;
	);
};

export default Tasklist;
&lt;/code&gt;&lt;/pre&gt;
&lt;h3 data-ke-size=&quot;size23&quot;&gt;src/components/Taskform.js&lt;/h3&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;할 일을 추가하는 컴포넌트 입니다. 사용자가 enter를 클릭시 할 일을 추가하는 역할을 하는 컴포넌트 입니다.&lt;/p&gt;
&lt;pre class=&quot;javascript&quot;&gt;&lt;code&gt;import React, { useState } from &quot;react&quot;;
import &quot;./Taskform.css&quot;;

const Taskform = ({ onAppend }) =&amp;gt; {
	const [inputEntered, updateInput] = useState(&quot;&quot;);

	const enterTextlistener = (e) =&amp;gt; {
		if (e.key === &quot;Enter&quot;) {
			onAppend(inputEntered);
		} else {
			updateInput(() =&amp;gt; e.target.value);
		}
	};

	return (
		&amp;lt;div className=&quot;taskform&quot;&amp;gt;
			&amp;lt;input
				className=&quot;ipclass&quot;
				type=&quot;text&quot;
				pattern=&quot;.*&quot;
				placeholder=&quot;할 일을 추가해주세요&quot;
				value={inputEntered}
				onChange={enterTextlistener}
				onKeyPress={enterTextlistener}
			/&amp;gt;
		&amp;lt;/div&amp;gt;
	);
};

export default Taskform;
&lt;/code&gt;&lt;/pre&gt;
&lt;h3 data-ke-size=&quot;size23&quot;&gt;src/components/Taskform.css&lt;/h3&gt;
&lt;pre class=&quot;css&quot;&gt;&lt;code&gt;.taskform {
	border-top: 40px;
	font-size: 18px;
	padding: 10px;
	padding-left: 20px;
	margin: 10px;
	width: auto;
	border: 1px solid rgba(0 0 0 / 0.1);
	color: black;
	font-weight: 500;
}

.ipclass {
	width: calc(100% - 22px);
	outline: none !important;
	border: 0px solid red;
	background: transparent;
	border: transparent;
	font-size: 18px;
}

.ctheader {
	color: rgba(0, 0, 0, 0.5);
	font-size: 22px;
	border-radius: 4px 20px;
	padding: 10px;
	padding-left: 20px;
	margin: 10px;
	width: auto;
	display: grid;
	font-weight: bold;
	letter-spacing: 2px;
}
&lt;/code&gt;&lt;/pre&gt;
&lt;h3 data-ke-size=&quot;size23&quot;&gt;src/components/Task.js&lt;/h3&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;할 일을 보여주고 할 일을 완료 및 할 일로 변경하는 컴포넌트입니다. 추가로 삭제하는 기능도 포합합니다.&lt;/p&gt;
&lt;pre class=&quot;javascript&quot;&gt;&lt;code&gt;import React from &quot;react&quot;;
import &quot;./Task.css&quot;;

const Task = ({ id, title, className, onClick, onDelete }) =&amp;gt; {
	return (
		&amp;lt;div className=&quot;tcontainer&quot;&amp;gt;
			&amp;lt;div className={className} onClick={onClick(id)}&amp;gt;
				{title}
			&amp;lt;/div&amp;gt;
			&amp;lt;button className=&quot;delbtn&quot; onClick={onDelete(id)}&amp;gt;
				삭제
			&amp;lt;/button&amp;gt;
		&amp;lt;/div&amp;gt;
	);
};

export default Task;
&lt;/code&gt;&lt;/pre&gt;
&lt;h3 data-ke-size=&quot;size23&quot;&gt;src/components/Task.css&lt;/h3&gt;
&lt;pre class=&quot;css&quot;&gt;&lt;code&gt;.tcontainer {
	width: calc(100% - 20px);
	display: flex;
	justify-content: space-between;
	margin: 25px 10px 25px 10px;
}

.delbtn {
	width: 60px;
	display: flex;
	align-items: center;
	justify-content: center;
	color: #fff;
	background-color: #dc3545;
	border-color: #dc3545;
	text-decoration: none;
	border: 1px solid transparent;
	font-weight: 400;
	cursor: pointer;
	text-align: center;
	white-space: nowrap;
	vertical-align: middle;
	user-select: none;
	font-size: 16px;
	line-height: 1.5;
	border-radius: 0.25rem;
}

.delbtn:hover {
	color: #fff;
	background-color: #c82333;
	border-color: #bd2130;
}

.task {
	border-top: 40px;
	color: black;
	font-size: 18px;
	border-radius: 0.25rem;
	padding: 10px;
	padding-left: 20px;
	width: calc(100% - 100px);
	border: 1px solid rgba(0 0 0 / 0.1);
	font-weight: 500;
	cursor: pointer;
}

.task:hover {
	background: rgba(0 0 0 / 0.1);
}

.comtask {
	border-top: 40px;
	font-size: 18px;
	border-radius: 0.25rem;
	padding: 10px;
	padding-left: 20px;
	width: calc(100% - 100px);
	text-decoration: line-through;
	background-color: rgba(0 0 0 / 0.1);
	border: 1px solid rgba(0 0 0 / 0.1);
	color: rgba(255, 255, 255, 0.9);
	font-weight: 500;
	cursor: pointer;
}

.comtask:hover {
	color: black;
	background-color: rgba(0 0 0 / 0);
	border: 1px solid rgba(0 0 0 / 0.1);
}
&lt;/code&gt;&lt;/pre&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;해당 프로젝트를 실행하면 아래와 같은 화면이 나옵니다. 또한 별다른 액션은 따로 안나타납니다. 걱정 마세요 앞으로 우리가 만들어 갈 꺼니까요&lt;/p&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-filename=&quot;Untitled 42.png&quot; data-origin-width=&quot;492&quot; data-origin-height=&quot;612&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/cLvwMm/btrBipSfHX8/sBIo8m1BL0Ny14xaeiiOy1/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/cLvwMm/btrBipSfHX8/sBIo8m1BL0Ny14xaeiiOy1/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/cLvwMm/btrBipSfHX8/sBIo8m1BL0Ny14xaeiiOy1/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FcLvwMm%2FbtrBipSfHX8%2FsBIo8m1BL0Ny14xaeiiOy1%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;492&quot; height=&quot;612&quot; data-filename=&quot;Untitled 42.png&quot; data-origin-width=&quot;492&quot; data-origin-height=&quot;612&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;/p&gt;
&lt;h2 data-ke-size=&quot;size26&quot;&gt;React프로젝트에서 생성한 Strapi API 사용하기&lt;/h2&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;React 프로젝트에서 아래 커맨드를 입력해 줍니다.&lt;/p&gt;
&lt;pre class=&quot;cmake&quot;&gt;&lt;code&gt;npm install axios
&lt;/code&gt;&lt;/pre&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;그럼 Axios가 설치됩니다. 그럼 아래 소스와 같이 Axios를 사용하여 Strapi에서 만들었던 todolist Mock data를 Fetching 해보겠습니다.&lt;/p&gt;
&lt;h3 data-ke-size=&quot;size23&quot;&gt;src/App.js&lt;/h3&gt;
&lt;pre class=&quot;javascript&quot;&gt;&lt;code&gt;import React, { useEffect, useState } from &quot;react&quot;;
import TaskManager from &quot;./components/TaskManager&quot;;
import axios from &quot;axios&quot;; // 추가

function App() {
	const [todoList, setTodoList] = useState([]);

	// 추가
	useEffect(() =&amp;gt; { 
		updateTodoList();
	}, []);

	// 추가
	const updateTodoList = async () =&amp;gt; {
		const { data } = await fetchTodoList();
		setTodoList(data);
	};

	// 추가
	const fetchTodoList = async () =&amp;gt; {
		const { data } = await axios.get(`http://localhost:1337/api/todos`);
		return data;
	};

	const changeTaskToComplete = (id) =&amp;gt; async () =&amp;gt; {};

	const changeTaskToUnComplete = (id) =&amp;gt; async () =&amp;gt; {};

	const appendTaskInToDoList = async (title) =&amp;gt; {};

	const deleteTaskInToDoList = (id) =&amp;gt; async () =&amp;gt; {};

	return (
		&amp;lt;div className=&quot;App&quot;&amp;gt;
			&amp;lt;TaskManager
				onComplete={changeTaskToComplete}
				onUnComplete={changeTaskToUnComplete}
				onAppend={appendTaskInToDoList}
				onDelete={deleteTaskInToDoList}
				todoList={todoList}
			&amp;gt;&amp;lt;/TaskManager&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;요렇게 추가를 하니 아래 화면이 정상적으로 나오는 것을 확인할 수 있습니다.&lt;/p&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-filename=&quot;Untitled 43.png&quot; data-origin-width=&quot;519&quot; data-origin-height=&quot;426&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/sDQnZ/btrBlviRJzJ/gMoN1HubKqXOma2cujdE4K/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/sDQnZ/btrBlviRJzJ/gMoN1HubKqXOma2cujdE4K/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/sDQnZ/btrBlviRJzJ/gMoN1HubKqXOma2cujdE4K/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FsDQnZ%2FbtrBlviRJzJ%2FgMoN1HubKqXOma2cujdE4K%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;519&quot; height=&quot;426&quot; data-filename=&quot;Untitled 43.png&quot; data-origin-width=&quot;519&quot; data-origin-height=&quot;426&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;축하합니다!! 저희는 Strapi에서 생성한 API를 첫 사용했습니다!!&lt;/p&gt;
&lt;h2 data-ke-size=&quot;size26&quot;&gt;Strapi를 이용해 CRUD 생성하기&lt;/h2&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;다시 Strapi로 돌아가 아래와 같이 Settings - Roles - Public 순으로 이동합니다.&lt;/p&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-filename=&quot;Untitled 33.png&quot; data-origin-width=&quot;1983&quot; data-origin-height=&quot;678&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/bilWc3/btrBjIpZHtv/s1TA0zIomFpkOHS4kKOgyk/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/bilWc3/btrBjIpZHtv/s1TA0zIomFpkOHS4kKOgyk/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/bilWc3/btrBjIpZHtv/s1TA0zIomFpkOHS4kKOgyk/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FbilWc3%2FbtrBjIpZHtv%2Fs1TA0zIomFpkOHS4kKOgyk%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;1983&quot; height=&quot;678&quot; data-filename=&quot;Untitled 33.png&quot; data-origin-width=&quot;1983&quot; data-origin-height=&quot;678&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;그런 다음 todos 드롭박스를 열고 create, delete, update 체크박스에 체크 한 후 Save 버튼을 클릭합니다.&lt;/p&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-filename=&quot;Untitled 44.png&quot; data-origin-width=&quot;1524&quot; data-origin-height=&quot;841&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/cpft8d/btrBiIqrh3P/y9KmfTf2L2q4UCViqwYWE0/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/cpft8d/btrBiIqrh3P/y9KmfTf2L2q4UCViqwYWE0/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/cpft8d/btrBiIqrh3P/y9KmfTf2L2q4UCViqwYWE0/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2Fcpft8d%2FbtrBiIqrh3P%2Fy9KmfTf2L2q4UCViqwYWE0%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;1524&quot; height=&quot;841&quot; data-filename=&quot;Untitled 44.png&quot; data-origin-width=&quot;1524&quot; data-origin-height=&quot;841&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;축하합니다! CRUD API를 전부 생성했습니다. 참고로 내 API URL이 궁금하다면 궁금한 Action에 톱니 모양 버튼을 클릭하면 확인 할 수 있습니다.&lt;/p&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-filename=&quot;Untitled 45.png&quot; data-origin-width=&quot;1482&quot; data-origin-height=&quot;453&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/cFuZUR/btrBluqHC1L/q5fXiXp4XJ3wLkcF05oLjk/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/cFuZUR/btrBluqHC1L/q5fXiXp4XJ3wLkcF05oLjk/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/cFuZUR/btrBluqHC1L/q5fXiXp4XJ3wLkcF05oLjk/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FcFuZUR%2FbtrBluqHC1L%2Fq5fXiXp4XJ3wLkcF05oLjk%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;1482&quot; height=&quot;453&quot; data-filename=&quot;Untitled 45.png&quot; data-origin-width=&quot;1482&quot; data-origin-height=&quot;453&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;/p&gt;
&lt;h2 data-ke-size=&quot;size26&quot;&gt;React로 만든 Todolist에서 Strapi CRUD 사용하기&lt;/h2&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;자 이제 저희는 CRUD를 전부 사용하여 Todolist를 완성시킬 겁니다. 첫번째로 할 것은 할 일을 완료하고 완료한 것을 할 일로 돌리는 작업입니다. 아래와 같이 코드를 작성해 주세요&lt;/p&gt;
&lt;h3 data-ke-size=&quot;size23&quot;&gt;src/App.js&lt;/h3&gt;
&lt;pre class=&quot;javascript&quot;&gt;&lt;code&gt;import React, { useEffect, useState } from &quot;react&quot;;
import TaskManager from &quot;./components/TaskManager&quot;;
import axios from &quot;axios&quot;;

function App() {
	const [todoList, setTodoList] = useState([]);

	useEffect(() =&amp;gt; {
		updateTodoList();
	}, []);

	const updateTodoList = async () =&amp;gt; {
		const { data } = await fetchTodoList();
		setTodoList(data);
	};

	const fetchTodoList = async () =&amp;gt; {
		const { data } = await axios.get(`http://localhost:1337/api/todos`);
		return data;
	};

	// 추가
	const changeTaskToComplete = (id) =&amp;gt; async () =&amp;gt; {
		await axios.put(`http://localhost:1337/api/todos/${id}`, {
			data: {
				complete_yn: true,
			},
		});
		updateTodoList();
	};

	// 추가
	const changeTaskToUnComplete = (id) =&amp;gt; async () =&amp;gt; {
		await axios.put(`http://localhost:1337/api/todos/${id}`, {
			data: {
				complete_yn: false,
			},
		});
		updateTodoList();
	};

	const appendTaskInToDoList = async (title) =&amp;gt; {};

	const deleteTaskInToDoList = (id) =&amp;gt; async () =&amp;gt; {};

	return (
		&amp;lt;div className=&quot;App&quot;&amp;gt;
			&amp;lt;TaskManager
				onComplete={changeTaskToComplete}
				onUnComplete={changeTaskToUnComplete}
				onAppend={appendTaskInToDoList}
				onDelete={deleteTaskInToDoList}
				todoList={todoList}
			&amp;gt;&amp;lt;/TaskManager&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;코드를 다 입력 했다면 프로젝트에서 할 일 중 하나의 할 일을 클릭해 볼까요?&lt;/p&gt;
&lt;p&gt;&lt;figure class=&quot;imagegridblock&quot;&gt;
  &lt;div class=&quot;image-container&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/cvb8fk/btrBltL7rM6/dPYGKsKvVsCS1ZUFgvxpTk/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/cvb8fk/btrBltL7rM6/dPYGKsKvVsCS1ZUFgvxpTk/img.png&quot; data-is-animation=&quot;false&quot; data-origin-width=&quot;548&quot; data-origin-height=&quot;956&quot; data-filename=&quot;Untitled 46.png&quot; style=&quot;width: 49.0524%; margin-right: 10px;&quot; data-widthpercent=&quot;49.63&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/cvb8fk/btrBltL7rM6/dPYGKsKvVsCS1ZUFgvxpTk/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2Fcvb8fk%2FbtrBltL7rM6%2FdPYGKsKvVsCS1ZUFgvxpTk%2Fimg.png&quot; onerror=&quot;this.onerror=null; this.src='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png'; this.srcset='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png';&quot; loading=&quot;lazy&quot; width=&quot;548&quot; height=&quot;956&quot;/&gt;&lt;/span&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/dTErtR/btrBluqHFxG/MXw6KDmGqQZBpKJmCoLlX1/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/dTErtR/btrBluqHFxG/MXw6KDmGqQZBpKJmCoLlX1/img.png&quot; data-is-animation=&quot;false&quot; data-origin-width=&quot;562&quot; data-origin-height=&quot;966&quot; data-filename=&quot;Untitled 47.png&quot; style=&quot;width: 49.7848%;&quot; data-widthpercent=&quot;50.37&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/dTErtR/btrBluqHFxG/MXw6KDmGqQZBpKJmCoLlX1/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FdTErtR%2FbtrBluqHFxG%2FMXw6KDmGqQZBpKJmCoLlX1%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;562&quot; height=&quot;966&quot;/&gt;&lt;/span&gt;&lt;/div&gt;
&lt;/figure&gt;
&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;정상적으로 할 일에서 완료로 전환되는것을 확인할 수 있습니다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;자, 이제 다음은 삭제를 구현해 볼 것입니다. 아래 코드를 입력해 주세요.&lt;/p&gt;
&lt;h3 data-ke-size=&quot;size23&quot;&gt;src/App.js&lt;/h3&gt;
&lt;pre class=&quot;javascript&quot;&gt;&lt;code&gt;import React, { useEffect, useState } from &quot;react&quot;;
import TaskManager from &quot;./components/TaskManager&quot;;
import axios from &quot;axios&quot;;

function App() {
	const [todoList, setTodoList] = useState([]);

	useEffect(() =&amp;gt; {
		updateTodoList();
	}, []);

	const updateTodoList = async () =&amp;gt; {
		const { data } = await fetchTodoList();
		setTodoList(data);
	};

	const fetchTodoList = async () =&amp;gt; {
		const { data } = await axios.get(`http://localhost:1337/api/todos`);
		return data;
	};

	const changeTaskToComplete = (id) =&amp;gt; async () =&amp;gt; {
		await axios.put(`http://localhost:1337/api/todos/${id}`, {
			data: {
				complete_yn: true,
			},
		});
		updateTodoList();
	};

	const changeTaskToUnComplete = (id) =&amp;gt; async () =&amp;gt; {
		await axios.put(`http://localhost:1337/api/todos/${id}`, {
			data: {
				complete_yn: false,
			},
		});
		updateTodoList();
	};

	const appendTaskInToDoList = async (title) =&amp;gt; {};

	// 추가
	const deleteTaskInToDoList = (id) =&amp;gt; async () =&amp;gt; {
		await axios.delete(`http://localhost:1337/api/todos/${id}`);
		updateTodoList();
	};

	return (
		&amp;lt;div className=&quot;App&quot;&amp;gt;
			&amp;lt;TaskManager
				onComplete={changeTaskToComplete}
				onUnComplete={changeTaskToUnComplete}
				onAppend={appendTaskInToDoList}
				onDelete={deleteTaskInToDoList}
				todoList={todoList}
			&amp;gt;&amp;lt;/TaskManager&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;코드를 다 입력 했다면 프로젝트에서 할 일 중 하나의 할 일을 삭제해 볼까요?&lt;/p&gt;
&lt;p&gt;&lt;figure class=&quot;imagegridblock&quot;&gt;
  &lt;div class=&quot;image-container&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/L2XlX/btrBimHeInS/GrNfgAKMUnYkLcOX4QLko0/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/L2XlX/btrBimHeInS/GrNfgAKMUnYkLcOX4QLko0/img.png&quot; data-is-animation=&quot;false&quot; data-origin-width=&quot;558&quot; data-origin-height=&quot;965&quot; data-filename=&quot;Untitled 48.png&quot; style=&quot;width: 49.468%; margin-right: 10px;&quot; data-widthpercent=&quot;50.05&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/L2XlX/btrBimHeInS/GrNfgAKMUnYkLcOX4QLko0/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FL2XlX%2FbtrBimHeInS%2FGrNfgAKMUnYkLcOX4QLko0%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;558&quot; height=&quot;965&quot;/&gt;&lt;/span&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/nutJl/btrBiribYdk/JLI65AMuu4OhI2Qn05WaE1/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/nutJl/btrBiribYdk/JLI65AMuu4OhI2Qn05WaE1/img.png&quot; data-is-animation=&quot;false&quot; data-origin-width=&quot;554&quot; data-origin-height=&quot;960&quot; data-filename=&quot;Untitled 49.png&quot; style=&quot;width: 49.3692%;&quot; data-widthpercent=&quot;49.95&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/nutJl/btrBiribYdk/JLI65AMuu4OhI2Qn05WaE1/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FnutJl%2FbtrBiribYdk%2FJLI65AMuu4OhI2Qn05WaE1%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;554&quot; height=&quot;960&quot;/&gt;&lt;/span&gt;&lt;/div&gt;
&lt;/figure&gt;
&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;와우! 삭제도 정상적으로 동작합니다. 그럼 CRUD에 마지막 Create 생성만이 남았습니다. 생성도 한번 아래 코드처럼 작성해 주세요&lt;/p&gt;
&lt;h3 data-ke-size=&quot;size23&quot;&gt;src/App.js&lt;/h3&gt;
&lt;pre class=&quot;javascript&quot;&gt;&lt;code&gt;import React, { useEffect, useState } from &quot;react&quot;;
import TaskManager from &quot;./components/TaskManager&quot;;
import axios from &quot;axios&quot;;

function App() {
	const [todoList, setTodoList] = useState([]);

	useEffect(() =&amp;gt; {
		updateTodoList();
	}, []);

	const updateTodoList = async () =&amp;gt; {
		const { data } = await fetchTodoList();
		setTodoList(data);
	};

	const fetchTodoList = async () =&amp;gt; {
		const { data } = await axios.get(`http://localhost:1337/api/todos`);
		return data;
	};

	const changeTaskToComplete = (id) =&amp;gt; async () =&amp;gt; {
		await axios.put(`http://localhost:1337/api/todos/${id}`, {
			data: {
				complete_yn: true,
			},
		});
		updateTodoList();
	};

	const changeTaskToUnComplete = (id) =&amp;gt; async () =&amp;gt; {
		await axios.put(`http://localhost:1337/api/todos/${id}`, {
			data: {
				complete_yn: false,
			},
		});
		updateTodoList();
	};

	// 추가
	const appendTaskInToDoList = async (title) =&amp;gt; {
		await axios.post(`http://localhost:1337/api/todos`, {
			data: {
				title: title,
				complete_yn: false,
			},
		});
		updateTodoList();
	};

	const deleteTaskInToDoList = (id) =&amp;gt; async () =&amp;gt; {
		await axios.delete(`http://localhost:1337/api/todos/${id}`);
		updateTodoList();
	};

	return (
		&amp;lt;div className=&quot;App&quot;&amp;gt;
			&amp;lt;TaskManager
				onComplete={changeTaskToComplete}
				onUnComplete={changeTaskToUnComplete}
				onAppend={appendTaskInToDoList}
				onDelete={deleteTaskInToDoList}
				todoList={todoList}
			&amp;gt;&amp;lt;/TaskManager&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;자 코드를 작성했으면 할 일을 추가하는 항목에서 할 일을 추가해 봅시다.&lt;/p&gt;
&lt;p&gt;&lt;figure class=&quot;imagegridblock&quot;&gt;
  &lt;div class=&quot;image-container&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/0pOyl/btrBhCqg4IA/fsPZppTsqcsxETd9QeAHT0/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/0pOyl/btrBhCqg4IA/fsPZppTsqcsxETd9QeAHT0/img.png&quot; data-is-animation=&quot;false&quot; data-origin-width=&quot;541&quot; data-origin-height=&quot;402&quot; data-filename=&quot;Untitled 50.png&quot; style=&quot;width: 53.4089%; margin-right: 10px;&quot; data-widthpercent=&quot;54.04&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/0pOyl/btrBhCqg4IA/fsPZppTsqcsxETd9QeAHT0/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2F0pOyl%2FbtrBhCqg4IA%2FfsPZppTsqcsxETd9QeAHT0%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;541&quot; height=&quot;402&quot;/&gt;&lt;/span&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/C9hDz/btrBiZ5Qjbx/Ysp9NqTtS9KrXN6zjpbrkk/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/C9hDz/btrBiZ5Qjbx/Ysp9NqTtS9KrXN6zjpbrkk/img.png&quot; data-is-animation=&quot;false&quot; data-origin-width=&quot;538&quot; data-origin-height=&quot;470&quot; data-filename=&quot;Untitled 51.png&quot; style=&quot;width: 45.4283%;&quot; data-widthpercent=&quot;45.96&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/C9hDz/btrBiZ5Qjbx/Ysp9NqTtS9KrXN6zjpbrkk/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FC9hDz%2FbtrBiZ5Qjbx%2FYsp9NqTtS9KrXN6zjpbrkk%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;538&quot; height=&quot;470&quot;/&gt;&lt;/span&gt;&lt;/div&gt;
&lt;/figure&gt;
&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;세번째 할 일이 생성된 것을 확인할 수 있습니다. 이것으로 모든 CRUD가 완벽하게 동작합니다.&lt;/p&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-filename=&quot;Untitled 52.png&quot; data-origin-width=&quot;2002&quot; data-origin-height=&quot;563&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/PYJfM/btrBhBZerLu/lqkz3acrFkRK5kN6ekdFR0/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/PYJfM/btrBhBZerLu/lqkz3acrFkRK5kN6ekdFR0/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/PYJfM/btrBhBZerLu/lqkz3acrFkRK5kN6ekdFR0/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FPYJfM%2FbtrBhBZerLu%2Flqkz3acrFkRK5kN6ekdFR0%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;2002&quot; height=&quot;563&quot; data-filename=&quot;Untitled 52.png&quot; data-origin-width=&quot;2002&quot; data-origin-height=&quot;563&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;Strapi 안에서도 데이터가 잘 등록되어 있군요. 자 우리는 기본적인 API를 사용해서 Todolist를 만들었습니다.&lt;/p&gt;</description>
      <category>프로그래밍 언어/웹 프론트엔드</category>
      <author>방현준</author>
      <guid isPermaLink="true">https://noogoonaa.tistory.com/112</guid>
      <comments>https://noogoonaa.tistory.com/112#entry112comment</comments>
      <pubDate>Fri, 6 May 2022 16:59:53 +0900</pubDate>
    </item>
    <item>
      <title>프로젝트 설정 및 Strapi사용하기 - React, Strapi v4, MySQL을 이용한 메모앱 만들기</title>
      <link>https://noogoonaa.tistory.com/111</link>
      <description>&lt;h3 data-ke-size=&quot;size23&quot;&gt;&lt;span style=&quot;color: #ee2323;&quot;&gt;&lt;b&gt;React, Strapi v4, MySQL을 이용한 Todolist 만들기 시리즈&lt;/b&gt;&lt;/span&gt;&amp;nbsp;&lt;/h3&gt;
&lt;ul style=&quot;list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li&gt;2022.05.05 - [프로그래밍 언어/웹 프론트엔드] - 프로젝트 설정 및 Strapi사용하기 - React, Strapi v4, MySQL을 이용한 메모앱 만들기&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://noogoonaa.tistory.com/112&quot;&gt;2022.05.06 - [프로그래밍 언어/웹 프론트엔드] - React와 Strapi 연동 - React, Strapi v4, MySQL을 이용한 Todolist 만들기&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://noogoonaa.tistory.com/113&quot;&gt;2022.05.07 - [프로그래밍 언어/웹 프론트엔드] - Strapi란? - React, Strapi v4, MySQL을 이용한 Todolist 만들기&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-filename=&quot;cover-react-cms_09dce2416d.png&quot; data-origin-width=&quot;931&quot; data-origin-height=&quot;536&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/uQO75/btrBkEgx0tJ/TAVt2YbjRTpDzr4kakS0zk/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/uQO75/btrBkEgx0tJ/TAVt2YbjRTpDzr4kakS0zk/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/uQO75/btrBkEgx0tJ/TAVt2YbjRTpDzr4kakS0zk/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FuQO75%2FbtrBkEgx0tJ%2FTAVt2YbjRTpDzr4kakS0zk%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;931&quot; height=&quot;536&quot; data-filename=&quot;cover-react-cms_09dce2416d.png&quot; data-origin-width=&quot;931&quot; data-origin-height=&quot;536&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;/p&gt;
&lt;h2 data-ke-size=&quot;size26&quot;&gt;여는글&lt;/h2&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;최근, Strapi라는 Headless CMS 툴을 알게 되었습니다. 저는 보통 뱌텀 업(Bottom-Up) 방식의 글을 좋아하지만, 이번에는 탑 다운(Top-Down) 방식의 블로그 글을 적어보려고 합니다. 그럼 바로 시작해 보겠습니다.&lt;/p&gt;
&lt;h2 data-ke-size=&quot;size26&quot;&gt;Node 설치&lt;/h2&gt;
&lt;figure id=&quot;og_1651759117148&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;Node.js&quot; data-og-description=&quot;Node.js&amp;reg; is a JavaScript runtime built on Chrome's V8 JavaScript engine.&quot; data-og-host=&quot;nodejs.org&quot; data-og-source-url=&quot;https://nodejs.org/en/&quot; data-og-url=&quot;https://nodejs.org/en/&quot; data-og-image=&quot;https://scrap.kakaocdn.net/dn/b452Gj/hyOhBbZyvx/E0EQrt89F7o2ITBrhMXeKK/img.png?width=224&amp;amp;height=256&amp;amp;face=0_0_224_256,https://scrap.kakaocdn.net/dn/bmu2iX/hyOgyOfesZ/dIBZ9GkTZHikusWkrX5YY1/img.png?width=224&amp;amp;height=256&amp;amp;face=0_0_224_256&quot;&gt;&lt;a href=&quot;https://nodejs.org/en/&quot; target=&quot;_blank&quot; rel=&quot;noopener&quot; data-source-url=&quot;https://nodejs.org/en/&quot;&gt;
&lt;div class=&quot;og-image&quot; style=&quot;background-image: url('https://scrap.kakaocdn.net/dn/b452Gj/hyOhBbZyvx/E0EQrt89F7o2ITBrhMXeKK/img.png?width=224&amp;amp;height=256&amp;amp;face=0_0_224_256,https://scrap.kakaocdn.net/dn/bmu2iX/hyOgyOfesZ/dIBZ9GkTZHikusWkrX5YY1/img.png?width=224&amp;amp;height=256&amp;amp;face=0_0_224_256');&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;Node.js&lt;/p&gt;
&lt;p class=&quot;og-desc&quot; data-ke-size=&quot;size16&quot;&gt;Node.js&amp;reg; is a JavaScript runtime built on Chrome's V8 JavaScript engine.&lt;/p&gt;
&lt;p class=&quot;og-host&quot; data-ke-size=&quot;size16&quot;&gt;nodejs.org&lt;/p&gt;
&lt;/div&gt;
&lt;/a&gt;&lt;/figure&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;위 링크에 접속하여 LTS 버전의 node를 설치해 주세요 Strapi는 기본적으로 Node를 사용하며 v14 버전을 가장 권장하지만, 테스트 결과 v16도 충분히 잘 동작합니다.&lt;/p&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-filename=&quot;Untitled.png&quot; data-origin-width=&quot;922&quot; data-origin-height=&quot;487&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/vYL6W/btrBlviRbSf/HbqRhsqwOF8kHwnP8kDeBK/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/vYL6W/btrBlviRbSf/HbqRhsqwOF8kHwnP8kDeBK/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/vYL6W/btrBlviRbSf/HbqRhsqwOF8kHwnP8kDeBK/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FvYL6W%2FbtrBlviRbSf%2FHbqRhsqwOF8kHwnP8kDeBK%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;922&quot; height=&quot;487&quot; data-filename=&quot;Untitled.png&quot; data-origin-width=&quot;922&quot; data-origin-height=&quot;487&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;그리고 dmg 파일이 설치되면 계속 &amp;gt; 동의 &amp;gt; 계속 &amp;gt; 설치 로 node.js를 설치합니다. 다 설치가 완료되면 아래 커맨드를 입력하여 잘 설치가 되었는지 확인하면 됩니다.&lt;/p&gt;
&lt;pre class=&quot;crmsh&quot;&gt;&lt;code&gt;node --version
&lt;/code&gt;&lt;/pre&gt;
&lt;pre class=&quot;ada&quot;&gt;&lt;code&gt;npm --version
&lt;/code&gt;&lt;/pre&gt;
&lt;h2 data-ke-size=&quot;size26&quot;&gt;프론트엔드 프로젝트 생성 및 실행&lt;/h2&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;기본적으로 프론트엔드는 제목에서도 알다시피 React를 사용합니다. 따라서 React의 기본적인 지식이 있는 분이 보면 더 이해가 쉽지만, 모르셔도 차근차근 따라가다보면 느낌적으로 이해할 수 있도록 모든 코드를 작성했습니다. 만약 모르는 부분이 있다면, 댓글을 달아주시면 알려드리도록 하겠습니다.&lt;/p&gt;
&lt;h3 data-ke-size=&quot;size23&quot;&gt;프로젝트 생성&lt;/h3&gt;
&lt;pre class=&quot;dsconfig&quot;&gt;&lt;code&gt;npx create-react-app todolist-front
&lt;/code&gt;&lt;/pre&gt;
&lt;h3 data-ke-size=&quot;size23&quot;&gt;프로젝트 실행&lt;/h3&gt;
&lt;pre class=&quot;dos&quot;&gt;&lt;code&gt;cd todolist-front
npm start
&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-filename=&quot;Untitled 1.png&quot; data-origin-width=&quot;1053&quot; data-origin-height=&quot;763&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/oTl7t/btrBhXHE4Kh/n9KkOz4wXDSaOPQl5nUMG1/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/oTl7t/btrBhXHE4Kh/n9KkOz4wXDSaOPQl5nUMG1/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/oTl7t/btrBhXHE4Kh/n9KkOz4wXDSaOPQl5nUMG1/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FoTl7t%2FbtrBhXHE4Kh%2Fn9KkOz4wXDSaOPQl5nUMG1%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;1053&quot; height=&quot;763&quot; data-filename=&quot;Untitled 1.png&quot; data-origin-width=&quot;1053&quot; data-origin-height=&quot;763&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;/p&gt;
&lt;h2 data-ke-size=&quot;size26&quot;&gt;Database 설치&lt;/h2&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;Strapi v4 기준으로 지원하는 DB는 SQLite, PostgreSQL, MySQL입니다. 따라서 입 맛에 맞게 설치하면 됩니다. 다만 이 프로젝트에서는 MySQL을 사용할 예정입니다. 또한, 및 맥 기준 설명이므로 Windows와는 상이 할 수 있습니다. Windows 운영체제를 사용하시는 분은 아래 링크를 통해서 설치해 주시기 바랍니다.&lt;/p&gt;
&lt;figure id=&quot;og_1651759214349&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;How to install MySQL database server 8.0.19 on Windows 10&quot; data-og-description=&quot;This article explains the step by step installation process of the MySQL Database server 8.0.19 on Windows 10.&quot; data-og-host=&quot;www.sqlshack.com&quot; data-og-source-url=&quot;https://www.sqlshack.com/how-to-install-mysql-database-server-8-0-19-on-windows-10/&quot; data-og-url=&quot;https://www.sqlshack.com/how-to-install-mysql-database-server-8-0-19-on-windows-10/&quot; data-og-image=&quot;https://scrap.kakaocdn.net/dn/cwX0R9/hyOhDnGVWz/KLZDKIWeQQSdk18pz1zKWK/img.png?width=1020&amp;amp;height=643&amp;amp;face=0_0_1020_643,https://scrap.kakaocdn.net/dn/copGNA/hyOht6qvDq/GC6hVHTh1hKDrsJNMJByu0/img.jpg?width=276&amp;amp;height=287&amp;amp;face=107_58_165_122&quot;&gt;&lt;a href=&quot;https://www.sqlshack.com/how-to-install-mysql-database-server-8-0-19-on-windows-10/&quot; target=&quot;_blank&quot; rel=&quot;noopener&quot; data-source-url=&quot;https://www.sqlshack.com/how-to-install-mysql-database-server-8-0-19-on-windows-10/&quot;&gt;
&lt;div class=&quot;og-image&quot; style=&quot;background-image: url('https://scrap.kakaocdn.net/dn/cwX0R9/hyOhDnGVWz/KLZDKIWeQQSdk18pz1zKWK/img.png?width=1020&amp;amp;height=643&amp;amp;face=0_0_1020_643,https://scrap.kakaocdn.net/dn/copGNA/hyOht6qvDq/GC6hVHTh1hKDrsJNMJByu0/img.jpg?width=276&amp;amp;height=287&amp;amp;face=107_58_165_122');&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;How to install MySQL database server 8.0.19 on Windows 10&lt;/p&gt;
&lt;p class=&quot;og-desc&quot; data-ke-size=&quot;size16&quot;&gt;This article explains the step by step installation process of the MySQL Database server 8.0.19 on Windows 10.&lt;/p&gt;
&lt;p class=&quot;og-host&quot; data-ke-size=&quot;size16&quot;&gt;www.sqlshack.com&lt;/p&gt;
&lt;/div&gt;
&lt;/a&gt;&lt;/figure&gt;
&lt;h3 data-ke-size=&quot;size23&quot;&gt;MySQL 설치&lt;/h3&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;MySQL Community Downloads 접속&lt;/p&gt;
&lt;figure id=&quot;og_1651759216789&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;MySQL :: Download MySQL Community Server&quot; data-og-description=&quot;Select Operating System: Select Operating System&amp;hellip; Microsoft Windows Ubuntu Linux Debian Linux SUSE Linux Enterprise Server Red Hat Enterprise Linux / Oracle Linux Fedora Linux - Generic Oracle Solaris macOS Source Code Select OS Version: All Windows (x86&quot; data-og-host=&quot;dev.mysql.com&quot; data-og-source-url=&quot;https://dev.mysql.com/downloads/mysql/&quot; data-og-url=&quot;https://dev.mysql.com/downloads/mysql/&quot; data-og-image=&quot;https://scrap.kakaocdn.net/dn/bOLQV9/hyOhCPQcpV/YeWfuw3bIc6PfagWVLPByK/img.png?width=700&amp;amp;height=260&amp;amp;face=0_0_700_260&quot;&gt;&lt;a href=&quot;https://dev.mysql.com/downloads/mysql/&quot; target=&quot;_blank&quot; rel=&quot;noopener&quot; data-source-url=&quot;https://dev.mysql.com/downloads/mysql/&quot;&gt;
&lt;div class=&quot;og-image&quot; style=&quot;background-image: url('https://scrap.kakaocdn.net/dn/bOLQV9/hyOhCPQcpV/YeWfuw3bIc6PfagWVLPByK/img.png?width=700&amp;amp;height=260&amp;amp;face=0_0_700_260');&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;MySQL :: Download MySQL Community Server&lt;/p&gt;
&lt;p class=&quot;og-desc&quot; data-ke-size=&quot;size16&quot;&gt;Select Operating System: Select Operating System&amp;hellip; Microsoft Windows Ubuntu Linux Debian Linux SUSE Linux Enterprise Server Red Hat Enterprise Linux / Oracle Linux Fedora Linux - Generic Oracle Solaris macOS Source Code Select OS Version: All Windows (x86&lt;/p&gt;
&lt;p class=&quot;og-host&quot; data-ke-size=&quot;size16&quot;&gt;dev.mysql.com&lt;/p&gt;
&lt;/div&gt;
&lt;/a&gt;&lt;/figure&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;각 Mac 운영체제에 맞게 OS를 설정한 후 DMG를 다운로드 합니다.&lt;/p&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-filename=&quot;Untitled 2.png&quot; data-origin-width=&quot;1010&quot; data-origin-height=&quot;893&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/bMvNKT/btrBikWWqs9/4HDKYjGe3t9oKS3zDZwZRK/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/bMvNKT/btrBikWWqs9/4HDKYjGe3t9oKS3zDZwZRK/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/bMvNKT/btrBikWWqs9/4HDKYjGe3t9oKS3zDZwZRK/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FbMvNKT%2FbtrBikWWqs9%2F4HDKYjGe3t9oKS3zDZwZRK%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;1010&quot; height=&quot;893&quot; data-filename=&quot;Untitled 2.png&quot; data-origin-width=&quot;1010&quot; data-origin-height=&quot;893&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;DMG가 다 다운로드 되었다면 기존 프로그램 설치하듯이 설치하시면 되지만, 중간에 root 비밀번호를 설정하라는 부분이 나옵니다. 비밀번호는 꼭 기억하고 있어야 합니다.&lt;/p&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-filename=&quot;mac-installer-configuration-password-define.png&quot; data-origin-width=&quot;621&quot; data-origin-height=&quot;438&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/Lkww5/btrBm813jut/7b28JjGAKmmq5YfONBesQ1/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/Lkww5/btrBm813jut/7b28JjGAKmmq5YfONBesQ1/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/Lkww5/btrBm813jut/7b28JjGAKmmq5YfONBesQ1/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FLkww5%2FbtrBm813jut%2F7b28JjGAKmmq5YfONBesQ1%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;621&quot; height=&quot;438&quot; data-filename=&quot;mac-installer-configuration-password-define.png&quot; data-origin-width=&quot;621&quot; data-origin-height=&quot;438&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;시스템 환경설정에 MySQL 아이콘이 생긴것을 확인할 수 있습니다.&lt;/p&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-filename=&quot;Untitled 3.png&quot; data-origin-width=&quot;691&quot; data-origin-height=&quot;310&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/pYMkD/btrBk7CN2I7/ajnHlhKKM1gDmTeXWd9jA1/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/pYMkD/btrBk7CN2I7/ajnHlhKKM1gDmTeXWd9jA1/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/pYMkD/btrBk7CN2I7/ajnHlhKKM1gDmTeXWd9jA1/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FpYMkD%2FbtrBk7CN2I7%2FajnHlhKKM1gDmTeXWd9jA1%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;691&quot; height=&quot;310&quot; data-filename=&quot;Untitled 3.png&quot; data-origin-width=&quot;691&quot; data-origin-height=&quot;310&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;그럼 MySQL 아이콘을 클릭하면&lt;/p&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-filename=&quot;Untitled 4.png&quot; data-origin-width=&quot;669&quot; data-origin-height=&quot;559&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/cWjBHw/btrBiHkKdGC/fdK5MFaZKZRcZk3fMt9070/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/cWjBHw/btrBiHkKdGC/fdK5MFaZKZRcZk3fMt9070/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/cWjBHw/btrBiHkKdGC/fdK5MFaZKZRcZk3fMt9070/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FcWjBHw%2FbtrBiHkKdGC%2FfdK5MFaZKZRcZk3fMt9070%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;669&quot; height=&quot;559&quot; data-filename=&quot;Untitled 4.png&quot; data-origin-width=&quot;669&quot; data-origin-height=&quot;559&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;요렇게 Active Instance가 된 상태면 설치가 정상적으로 완료된 것입니다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;만약 Active Instance가 안된 상태면 우측에 Start MySQL Server를 클릭해 주세요&lt;/p&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-filename=&quot;Untitled 5.png&quot; data-origin-width=&quot;634&quot; data-origin-height=&quot;424&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/daw4IJ/btrBjXUc44I/REvbYKkOyiZlLUutmEh0w0/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/daw4IJ/btrBjXUc44I/REvbYKkOyiZlLUutmEh0w0/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/daw4IJ/btrBjXUc44I/REvbYKkOyiZlLUutmEh0w0/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2Fdaw4IJ%2FbtrBjXUc44I%2FREvbYKkOyiZlLUutmEh0w0%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;634&quot; height=&quot;424&quot; data-filename=&quot;Untitled 5.png&quot; data-origin-width=&quot;634&quot; data-origin-height=&quot;424&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;/p&gt;
&lt;h2 data-ke-size=&quot;size26&quot;&gt;MySQL 접속 및 Database 생성&lt;/h2&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;아래 커맨드를 터미널에서 입력해 줍니다.&lt;/p&gt;
&lt;pre class=&quot;jboss-cli&quot;&gt;&lt;code&gt;cd /usr/local/mysql/bin
./mysql -u root -p
&lt;/code&gt;&lt;/pre&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;그럼 패스워드를 묻는데, 아까 설정한 root 패스워드를 입력해주면 MySQL에 접속이 되는것을 확인할 수 있습니다.&lt;/p&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-filename=&quot;Untitled 6.png&quot; data-origin-width=&quot;1122&quot; data-origin-height=&quot;614&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/dZAyVu/btrBmvQIyX8/0xakZfCFJpPqu8BoddBtOk/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/dZAyVu/btrBmvQIyX8/0xakZfCFJpPqu8BoddBtOk/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/dZAyVu/btrBmvQIyX8/0xakZfCFJpPqu8BoddBtOk/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FdZAyVu%2FbtrBmvQIyX8%2F0xakZfCFJpPqu8BoddBtOk%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;1122&quot; height=&quot;614&quot; data-filename=&quot;Untitled 6.png&quot; data-origin-width=&quot;1122&quot; data-origin-height=&quot;614&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;이제 todolist에서 사용할 데이터베이스를 만들어줍니다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;아래 커맨드를 mysql 콘솔창에서 입력해 줍니다.&lt;/p&gt;
&lt;pre class=&quot;sql&quot;&gt;&lt;code&gt;CREATE DATABASE todolist;
USE todolist;
&lt;/code&gt;&lt;/pre&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;그럼 잘 만들어 졌는지 확인해 볼까요?&lt;/p&gt;
&lt;pre class=&quot;sql&quot;&gt;&lt;code&gt;SHOW DATABASES;
&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-filename=&quot;Untitled 7.png&quot; data-origin-width=&quot;1142&quot; data-origin-height=&quot;440&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/busHVH/btrBhCRk741/elJ8keJ5LYyl0dcie4AXt1/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/busHVH/btrBhCRk741/elJ8keJ5LYyl0dcie4AXt1/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/busHVH/btrBhCRk741/elJ8keJ5LYyl0dcie4AXt1/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FbusHVH%2FbtrBhCRk741%2FelJ8keJ5LYyl0dcie4AXt1%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;1142&quot; height=&quot;440&quot; data-filename=&quot;Untitled 7.png&quot; data-origin-width=&quot;1142&quot; data-origin-height=&quot;440&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;/p&gt;
&lt;h2 data-ke-size=&quot;size26&quot;&gt;Strapi 프로젝트 생성&lt;/h2&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;새로운 터미널을 열어서 아래 커맨드 입력&lt;/p&gt;
&lt;pre class=&quot;armasm&quot;&gt;&lt;code&gt;yarn create strapi-app todolist-back
&lt;/code&gt;&lt;/pre&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;그럼 아래 사진과 같이 진행될 것 입니다.&lt;/p&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-filename=&quot;Untitled 8.png&quot; data-origin-width=&quot;1152&quot; data-origin-height=&quot;1568&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/dUyLvP/btrBkD9M3mp/TcmW77o8SEPqrUa20ooKjK/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/dUyLvP/btrBkD9M3mp/TcmW77o8SEPqrUa20ooKjK/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/dUyLvP/btrBkD9M3mp/TcmW77o8SEPqrUa20ooKjK/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FdUyLvP%2FbtrBkD9M3mp%2FTcmW77o8SEPqrUa20ooKjK%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;1152&quot; height=&quot;1568&quot; data-filename=&quot;Untitled 8.png&quot; data-origin-width=&quot;1152&quot; data-origin-height=&quot;1568&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;그럼 아래처럼 입력해 주세요, Database name은 꼭 todolist로 해야합니다. todolist-back이 아닙니다. Password는 아까 우리가 설정한 MySQL root 비밀번호로 해주세요&lt;/p&gt;
&lt;pre class=&quot;routeros&quot;&gt;&lt;code&gt;? Choose your installation type Custom (manual settings)
? Choose your default database client mysql
? Database name: todolist
? Host: 127.0.0.1
? Port: 3306
? Username: root
? Password: &amp;lt;mysql root 비밀번호&amp;gt;
? Enable SSL connection: Yes
&lt;/code&gt;&lt;/pre&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;참고로 아래와 같은 에러가 발생할 수도 있습니다.&lt;/p&gt;
&lt;pre class=&quot;routeros&quot;&gt;&lt;code&gt;Connection test failed: ER_NOT_SUPPORTED_AUTH_MODE: Client does not support authentication protocol requested by server; consider upgrading MySQL client
&lt;/code&gt;&lt;/pre&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;그러면 MySQL에서 아래 커맨드를 실행시켜주세요&lt;/p&gt;
&lt;pre class=&quot;routeros&quot;&gt;&lt;code&gt;ALTER user 'root'@'localhost' IDENTIFIED WITH mysql_native_password BY '기존 root 비밀번호';
&lt;/code&gt;&lt;/pre&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;그런 다음 다시 Strapi 프로젝트를 만들면 정상적으로 동작하는 것을 확인할 수 있습니다.&lt;/p&gt;
&lt;h2 data-ke-size=&quot;size26&quot;&gt;Strapi 프로젝트 실행&lt;/h2&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;아래 커맨드 입력&lt;/p&gt;
&lt;pre class=&quot;properties&quot;&gt;&lt;code&gt;cd todolist-back
yarn develop
&lt;/code&gt;&lt;/pre&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;그럼 프로젝트가 실행되고 아래 사진처럼 웹 페이지가 나오게 됩니다.&lt;/p&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-filename=&quot;Untitled 9.png&quot; data-origin-width=&quot;643&quot; data-origin-height=&quot;768&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/bftlIa/btrBlK1DRO3/UdRX4DZOtZad7oPQl0rg9k/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/bftlIa/btrBlK1DRO3/UdRX4DZOtZad7oPQl0rg9k/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/bftlIa/btrBlK1DRO3/UdRX4DZOtZad7oPQl0rg9k/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FbftlIa%2FbtrBlK1DRO3%2FUdRX4DZOtZad7oPQl0rg9k%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;643&quot; height=&quot;768&quot; data-filename=&quot;Untitled 9.png&quot; data-origin-width=&quot;643&quot; data-origin-height=&quot;768&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;해당 페이지는 strapi를 사용하는 super 계정을 만드는 과정입니다. 적절히 입력해 준 후 Let&amp;rsquo;s Start를 클릭하면 아래와 같이 Strapi에 접속이 가능해 집니다.&lt;/p&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-filename=&quot;Untitled 10.png&quot; data-origin-width=&quot;1974&quot; data-origin-height=&quot;851&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/bydJC7/btrBkEVbuXl/Y4qkoauflM2EZVfKaqOw5K/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/bydJC7/btrBkEVbuXl/Y4qkoauflM2EZVfKaqOw5K/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/bydJC7/btrBkEVbuXl/Y4qkoauflM2EZVfKaqOw5K/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FbydJC7%2FbtrBkEVbuXl%2FY4qkoauflM2EZVfKaqOw5K%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;1974&quot; height=&quot;851&quot; data-filename=&quot;Untitled 10.png&quot; data-origin-width=&quot;1974&quot; data-origin-height=&quot;851&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;/p&gt;
&lt;h2 data-ke-size=&quot;size26&quot;&gt;Strapi를 이용하여 Todolist 테이블 생성하기&lt;/h2&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;Content-Type Builder 메뉴 클릭&lt;/p&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-filename=&quot;Untitled 11.png&quot; data-origin-width=&quot;1417&quot; data-origin-height=&quot;758&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/bGICTP/btrBk7Qi3Cy/SKdTJwyt3G9mrlye0NNHsK/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/bGICTP/btrBk7Qi3Cy/SKdTJwyt3G9mrlye0NNHsK/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/bGICTP/btrBk7Qi3Cy/SKdTJwyt3G9mrlye0NNHsK/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FbGICTP%2FbtrBk7Qi3Cy%2FSKdTJwyt3G9mrlye0NNHsK%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;1417&quot; height=&quot;758&quot; data-filename=&quot;Untitled 11.png&quot; data-origin-width=&quot;1417&quot; data-origin-height=&quot;758&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;Create new collection type 클릭&lt;/p&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-filename=&quot;Untitled 12.png&quot; data-origin-width=&quot;1213&quot; data-origin-height=&quot;737&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/Vwqwv/btrBnMxG4vR/zSvIviSuBGMPLBaL3GrsLk/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/Vwqwv/btrBnMxG4vR/zSvIviSuBGMPLBaL3GrsLk/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/Vwqwv/btrBnMxG4vR/zSvIviSuBGMPLBaL3GrsLk/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FVwqwv%2FbtrBnMxG4vR%2FzSvIviSuBGMPLBaL3GrsLk%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;1213&quot; height=&quot;737&quot; data-filename=&quot;Untitled 12.png&quot; data-origin-width=&quot;1213&quot; data-origin-height=&quot;737&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;Create a collection type이라는 모달이 하나 뜨는데 아래와 같이 입력해 주세요 Display name은 mysql에 테이블이 됩니다. 또한 복수형으로 적성하지 않고 단수형으로 작성해 주셔야 합니다.&lt;/p&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-filename=&quot;Untitled 13.png&quot; data-origin-width=&quot;1146&quot; data-origin-height=&quot;824&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/z9it4/btrBk8BFUmo/CqBW8S6fkgXeKcBm7s1skk/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/z9it4/btrBk8BFUmo/CqBW8S6fkgXeKcBm7s1skk/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/z9it4/btrBk8BFUmo/CqBW8S6fkgXeKcBm7s1skk/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2Fz9it4%2FbtrBk8BFUmo%2FCqBW8S6fkgXeKcBm7s1skk%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;1146&quot; height=&quot;824&quot; data-filename=&quot;Untitled 13.png&quot; data-origin-width=&quot;1146&quot; data-origin-height=&quot;824&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;Continue를 클릭해 준 후 필드를 만들수 있는 모달이 나오고 아래와 같은 방식으로 진행해주세요&lt;/p&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-filename=&quot;Untitled 14.png&quot; data-origin-width=&quot;824&quot; data-origin-height=&quot;685&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/bFzHxb/btrBiIcWkCE/jfU5b7yog5r4Nf5gmHkOC1/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/bFzHxb/btrBiIcWkCE/jfU5b7yog5r4Nf5gmHkOC1/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/bFzHxb/btrBiIcWkCE/jfU5b7yog5r4Nf5gmHkOC1/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FbFzHxb%2FbtrBiIcWkCE%2FjfU5b7yog5r4Nf5gmHkOC1%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;824&quot; height=&quot;685&quot; data-filename=&quot;Untitled 14.png&quot; data-origin-width=&quot;824&quot; data-origin-height=&quot;685&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-filename=&quot;Untitled 15.png&quot; data-origin-width=&quot;824&quot; data-origin-height=&quot;483&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/cqvykv/btrBnMRZWov/tBqqLU89vuFhGvvPYUYod1/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/cqvykv/btrBnMRZWov/tBqqLU89vuFhGvvPYUYod1/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/cqvykv/btrBnMRZWov/tBqqLU89vuFhGvvPYUYod1/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2Fcqvykv%2FbtrBnMRZWov%2FtBqqLU89vuFhGvvPYUYod1%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;824&quot; height=&quot;483&quot; data-filename=&quot;Untitled 15.png&quot; data-origin-width=&quot;824&quot; data-origin-height=&quot;483&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-filename=&quot;Untitled 16.png&quot; data-origin-width=&quot;808&quot; data-origin-height=&quot;531&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/vfHLT/btrBlMd7OsJ/dGhWIkuOG7tOGSIA8XdQCK/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/vfHLT/btrBlMd7OsJ/dGhWIkuOG7tOGSIA8XdQCK/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/vfHLT/btrBlMd7OsJ/dGhWIkuOG7tOGSIA8XdQCK/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FvfHLT%2FbtrBlMd7OsJ%2FdGhWIkuOG7tOGSIA8XdQCK%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;808&quot; height=&quot;531&quot; data-filename=&quot;Untitled 16.png&quot; data-origin-width=&quot;808&quot; data-origin-height=&quot;531&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-filename=&quot;Untitled 17.png&quot; data-origin-width=&quot;1505&quot; data-origin-height=&quot;346&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/uKH45/btrBhBdPBWj/eBvAOPfpqdY1iRTzpL1EOK/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/uKH45/btrBhBdPBWj/eBvAOPfpqdY1iRTzpL1EOK/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/uKH45/btrBhBdPBWj/eBvAOPfpqdY1iRTzpL1EOK/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FuKH45%2FbtrBhBdPBWj%2FeBvAOPfpqdY1iRTzpL1EOK%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;1505&quot; height=&quot;346&quot; data-filename=&quot;Untitled 17.png&quot; data-origin-width=&quot;1505&quot; data-origin-height=&quot;346&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;이렇게 하면 데이터 베이스의 테이블과 필드가 생성됩니다. 나머지 필드도 생성해 봅시다.&lt;/p&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-filename=&quot;Untitled 18.png&quot; data-origin-width=&quot;1524&quot; data-origin-height=&quot;209&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/mY2Vs/btrBmv4g7MK/lBewYvmGkK7gy8pg44Famk/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/mY2Vs/btrBmv4g7MK/lBewYvmGkK7gy8pg44Famk/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/mY2Vs/btrBmv4g7MK/lBewYvmGkK7gy8pg44Famk/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FmY2Vs%2FbtrBmv4g7MK%2FlBewYvmGkK7gy8pg44Famk%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;1524&quot; height=&quot;209&quot; data-filename=&quot;Untitled 18.png&quot; data-origin-width=&quot;1524&quot; data-origin-height=&quot;209&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-filename=&quot;Untitled 19.png&quot; data-origin-width=&quot;828&quot; data-origin-height=&quot;699&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/cDEo4R/btrBnNcirwJ/jLPUjBzBR6NjfX8TaRdsh1/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/cDEo4R/btrBnNcirwJ/jLPUjBzBR6NjfX8TaRdsh1/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/cDEo4R/btrBnNcirwJ/jLPUjBzBR6NjfX8TaRdsh1/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FcDEo4R%2FbtrBnNcirwJ%2FjLPUjBzBR6NjfX8TaRdsh1%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;828&quot; height=&quot;699&quot; data-filename=&quot;Untitled 19.png&quot; data-origin-width=&quot;828&quot; data-origin-height=&quot;699&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-filename=&quot;Untitled 20.png&quot; data-origin-width=&quot;814&quot; data-origin-height=&quot;318&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/bIxApn/btrBjJI9ZKd/hTQTu1KFyuKcaLrPKXqVDK/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/bIxApn/btrBjJI9ZKd/hTQTu1KFyuKcaLrPKXqVDK/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/bIxApn/btrBjJI9ZKd/hTQTu1KFyuKcaLrPKXqVDK/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FbIxApn%2FbtrBjJI9ZKd%2FhTQTu1KFyuKcaLrPKXqVDK%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;814&quot; height=&quot;318&quot; data-filename=&quot;Untitled 20.png&quot; data-origin-width=&quot;814&quot; data-origin-height=&quot;318&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-filename=&quot;Untitled 21.png&quot; data-origin-width=&quot;823&quot; data-origin-height=&quot;407&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/dNMw9o/btrBlLzvAGa/s2iK310KXdLGI1tHJoGeMk/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/dNMw9o/btrBlLzvAGa/s2iK310KXdLGI1tHJoGeMk/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/dNMw9o/btrBlLzvAGa/s2iK310KXdLGI1tHJoGeMk/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FdNMw9o%2FbtrBlLzvAGa%2Fs2iK310KXdLGI1tHJoGeMk%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;823&quot; height=&quot;407&quot; data-filename=&quot;Untitled 21.png&quot; data-origin-width=&quot;823&quot; data-origin-height=&quot;407&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-filename=&quot;Untitled 22.png&quot; data-origin-width=&quot;1525&quot; data-origin-height=&quot;455&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/I4PxE/btrBiAytSev/LlLL2Qkep0UgqgaohTZbuk/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/I4PxE/btrBiAytSev/LlLL2Qkep0UgqgaohTZbuk/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/I4PxE/btrBiAytSev/LlLL2Qkep0UgqgaohTZbuk/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FI4PxE%2FbtrBiAytSev%2FLlLL2Qkep0UgqgaohTZbuk%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;1525&quot; height=&quot;455&quot; data-filename=&quot;Untitled 22.png&quot; data-origin-width=&quot;1525&quot; data-origin-height=&quot;455&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;이렇게 하면 기본적인 todolist의 테이블 구조가 생성이 된것입니다. 그럼 mysql에서 진짜 테이블이 생성되었는지 확인해 볼까요?&lt;/p&gt;
&lt;pre class=&quot;abnf&quot;&gt;&lt;code&gt;DESC todos;
&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-filename=&quot;Untitled 23.png&quot; data-origin-width=&quot;1040&quot; data-origin-height=&quot;484&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/bgYRl9/btrBiAytT8T/DxncABTkxFjkPwxLJtEbBk/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/bgYRl9/btrBiAytT8T/DxncABTkxFjkPwxLJtEbBk/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/bgYRl9/btrBiAytT8T/DxncABTkxFjkPwxLJtEbBk/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FbgYRl9%2FbtrBiAytT8T%2FDxncABTkxFjkPwxLJtEbBk%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;1040&quot; height=&quot;484&quot; data-filename=&quot;Untitled 23.png&quot; data-origin-width=&quot;1040&quot; data-origin-height=&quot;484&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;여기서 저희가 생성하지 않은 필드도 존재합니다. 하지만 이건 Strapi에서 자동으로 생성하는 필드 이므로 신경쓰지 않으셔도 됩니다.&lt;/p&gt;
&lt;h2 data-ke-size=&quot;size26&quot;&gt;Strapi를 이용하여 Todolist Mock 데이터 생성하기&lt;/h2&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;사이드 바에 Content Manager 메뉴를 클릭 후 Collection Types에 todo 클릭 후 create new entry 클릭&lt;/p&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-filename=&quot;Untitled 24.png&quot; data-origin-width=&quot;2001&quot; data-origin-height=&quot;638&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/tCOHj/btrBm8nrVya/BkF2iB2JiHa2brfynj7qr1/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/tCOHj/btrBm8nrVya/BkF2iB2JiHa2brfynj7qr1/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/tCOHj/btrBm8nrVya/BkF2iB2JiHa2brfynj7qr1/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FtCOHj%2FbtrBm8nrVya%2FBkF2iB2JiHa2brfynj7qr1%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;2001&quot; height=&quot;638&quot; data-filename=&quot;Untitled 24.png&quot; data-origin-width=&quot;2001&quot; data-origin-height=&quot;638&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;그런 다음 아래와 같이 입력 후 Save 버튼을 클릭&lt;/p&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-filename=&quot;Untitled 25.png&quot; data-origin-width=&quot;1536&quot; data-origin-height=&quot;532&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/b4ykoM/btrBkD2YwTw/OHUvgeDKpGrYCvIQHPYB81/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/b4ykoM/btrBkD2YwTw/OHUvgeDKpGrYCvIQHPYB81/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/b4ykoM/btrBkD2YwTw/OHUvgeDKpGrYCvIQHPYB81/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2Fb4ykoM%2FbtrBkD2YwTw%2FOHUvgeDKpGrYCvIQHPYB81%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;532&quot; data-filename=&quot;Untitled 25.png&quot; data-origin-width=&quot;1536&quot; data-origin-height=&quot;532&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-filename=&quot;Untitled 26.png&quot; data-origin-width=&quot;1507&quot; data-origin-height=&quot;571&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/QXJSh/btrBlLsLxNL/h3lPfxg4Zgnu6wNfk38blK/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/QXJSh/btrBlLsLxNL/h3lPfxg4Zgnu6wNfk38blK/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/QXJSh/btrBlLsLxNL/h3lPfxg4Zgnu6wNfk38blK/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FQXJSh%2FbtrBlLsLxNL%2Fh3lPfxg4Zgnu6wNfk38blK%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;1507&quot; height=&quot;571&quot; data-filename=&quot;Untitled 26.png&quot; data-origin-width=&quot;1507&quot; data-origin-height=&quot;571&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-filename=&quot;Untitled 27.png&quot; data-origin-width=&quot;2004&quot; data-origin-height=&quot;624&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/10Bhu/btrBkC37l1w/QUFPN2ekFbbSTmwrceyOAk/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/10Bhu/btrBkC37l1w/QUFPN2ekFbbSTmwrceyOAk/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/10Bhu/btrBkC37l1w/QUFPN2ekFbbSTmwrceyOAk/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2F10Bhu%2FbtrBkC37l1w%2FQUFPN2ekFbbSTmwrceyOAk%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;2004&quot; height=&quot;624&quot; data-filename=&quot;Untitled 27.png&quot; data-origin-width=&quot;2004&quot; data-origin-height=&quot;624&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-filename=&quot;Untitled 28.png&quot; data-origin-width=&quot;1529&quot; data-origin-height=&quot;419&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/7eTSW/btrBiG7f1n4/LRqsIvSEuKj4Z4ukkgyMqK/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/7eTSW/btrBiG7f1n4/LRqsIvSEuKj4Z4ukkgyMqK/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/7eTSW/btrBiG7f1n4/LRqsIvSEuKj4Z4ukkgyMqK/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2F7eTSW%2FbtrBiG7f1n4%2FLRqsIvSEuKj4Z4ukkgyMqK%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;1529&quot; height=&quot;419&quot; data-filename=&quot;Untitled 28.png&quot; data-origin-width=&quot;1529&quot; data-origin-height=&quot;419&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;그럼 이렇게 데이터가 저장이 됩니다. 이건 생성이 아니라 단순한 저장이라 아래 사진처럼 Draft로 남아 있게 됩니다. 아직 Draft가 무엇인지는 알 필요가 없습니다. 간단히 임시 저장 상태라는것 만 이해해 주면 됩니다. 그럼 이 데이터를 발행하여 상태를 바꿔 봅시다. 첫번째 할 일 임시 데이터를 클릭 후 아래와 같이 게시를 해봅시다.&lt;/p&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-filename=&quot;Untitled 29.png&quot; data-origin-width=&quot;1525&quot; data-origin-height=&quot;580&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/vkybU/btrBnLS5pON/sJEYuH9hz7AYgnt0TTObMK/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/vkybU/btrBnLS5pON/sJEYuH9hz7AYgnt0TTObMK/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/vkybU/btrBnLS5pON/sJEYuH9hz7AYgnt0TTObMK/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FvkybU%2FbtrBnLS5pON%2FsJEYuH9hz7AYgnt0TTObMK%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;1525&quot; height=&quot;580&quot; data-filename=&quot;Untitled 29.png&quot; data-origin-width=&quot;1525&quot; data-origin-height=&quot;580&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-filename=&quot;Untitled 30.png&quot; data-origin-width=&quot;1540&quot; data-origin-height=&quot;570&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/u2FDx/btrBkDu8Kop/kMoDaTUXJX4BKGbL22FiD0/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/u2FDx/btrBkDu8Kop/kMoDaTUXJX4BKGbL22FiD0/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/u2FDx/btrBkDu8Kop/kMoDaTUXJX4BKGbL22FiD0/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2Fu2FDx%2FbtrBkDu8Kop%2FkMoDaTUXJX4BKGbL22FiD0%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;1540&quot; height=&quot;570&quot; data-filename=&quot;Untitled 30.png&quot; data-origin-width=&quot;1540&quot; data-origin-height=&quot;570&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-filename=&quot;Untitled 31.png&quot; data-origin-width=&quot;1481&quot; data-origin-height=&quot;74&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/A9VfS/btrBiHykLGQ/bZGim4eZfwd8o2uwXO8UK0/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/A9VfS/btrBiHykLGQ/bZGim4eZfwd8o2uwXO8UK0/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/A9VfS/btrBiHykLGQ/bZGim4eZfwd8o2uwXO8UK0/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FA9VfS%2FbtrBiHykLGQ%2FbZGim4eZfwd8o2uwXO8UK0%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;1481&quot; height=&quot;74&quot; data-filename=&quot;Untitled 31.png&quot; data-origin-width=&quot;1481&quot; data-origin-height=&quot;74&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;상태를 보면 상태가 Published로 변경되어 있습니다. 이제 진짜 데이터가 된겁니다. Mysql에서 한번 확인해 볼까요?&lt;/p&gt;
&lt;pre class=&quot;n1ql&quot;&gt;&lt;code&gt;select * from todos;
&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-filename=&quot;Untitled 32.png&quot; data-origin-width=&quot;2246&quot; data-origin-height=&quot;532&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/E9vhF/btrBmwB4N8H/6qN3YA4cGmKkBsNJZOpR9K/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/E9vhF/btrBmwB4N8H/6qN3YA4cGmKkBsNJZOpR9K/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/E9vhF/btrBmwB4N8H/6qN3YA4cGmKkBsNJZOpR9K/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FE9vhF%2FbtrBmwB4N8H%2F6qN3YA4cGmKkBsNJZOpR9K%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;2246&quot; height=&quot;532&quot; data-filename=&quot;Untitled 32.png&quot; data-origin-width=&quot;2246&quot; data-origin-height=&quot;532&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;저는 미리 한번 확인해 보아서 위의 처럼 published_at이 Draft상태에서는 null, published 상태에서는 published 날짜가 들어간 것을 확인할 수 있습니다. 자 이렇게 첫번째 Mock 데이터를 생성하였습니다.&lt;/p&gt;
&lt;h2 data-ke-size=&quot;size26&quot;&gt;Strapi에서 API를 생성해 Mock Data 가져오기&lt;/h2&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;Strapi에서는 보안상 문제로 인해 API를 처음에 만들어 주지 않고 Setting에서 특정한 설정을 통해 만들어 줍니다. 아래 사진과 같이 Settings - Roles - Public 필드 수정 순으로 이동합니다.&lt;/p&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-filename=&quot;Untitled 33.png&quot; data-origin-width=&quot;1983&quot; data-origin-height=&quot;678&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/ZcWAO/btrBhBkEm52/uzTKVUQY37jCQ4BVNKFk4k/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/ZcWAO/btrBhBkEm52/uzTKVUQY37jCQ4BVNKFk4k/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/ZcWAO/btrBhBkEm52/uzTKVUQY37jCQ4BVNKFk4k/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FZcWAO%2FbtrBhBkEm52%2FuzTKVUQY37jCQ4BVNKFk4k%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;1983&quot; height=&quot;678&quot; data-filename=&quot;Untitled 33.png&quot; data-origin-width=&quot;1983&quot; data-origin-height=&quot;678&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;그 후 Permissions - Todo - find 순으로 클릭 하면 Bound route to api ::todo.todo 에 API가 나오게 됩니다.&lt;/p&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-filename=&quot;Untitled 34.png&quot; data-origin-width=&quot;1511&quot; data-origin-height=&quot;826&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/vijxd/btrBi8I9jsn/8IykYYqzwsC1bc7dU4hYeK/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/vijxd/btrBi8I9jsn/8IykYYqzwsC1bc7dU4hYeK/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/vijxd/btrBi8I9jsn/8IykYYqzwsC1bc7dU4hYeK/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2Fvijxd%2FbtrBi8I9jsn%2F8IykYYqzwsC1bc7dU4hYeK%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;1511&quot; height=&quot;826&quot; data-filename=&quot;Untitled 34.png&quot; data-origin-width=&quot;1511&quot; data-origin-height=&quot;826&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;Save를 클릭하면 이제 API를 호출할 수 있는 상태가 된 겁니다. 크롬 브라우저에서 새탭을 열어준 후 아래 URL을 주소창에 입력해 줍니다.&amp;nbsp; &lt;a href=&quot;http://localhost:1337/api/todos&quot;&gt;http://localhost:1337/api/todos&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-filename=&quot;Untitled 35.png&quot; data-origin-width=&quot;1685&quot; data-origin-height=&quot;77&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/pGNQG/btrBm9mngAF/V8VQdZAzFRSkSoT8MJGlzK/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/pGNQG/btrBm9mngAF/V8VQdZAzFRSkSoT8MJGlzK/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/pGNQG/btrBm9mngAF/V8VQdZAzFRSkSoT8MJGlzK/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FpGNQG%2FbtrBm9mngAF%2FV8VQdZAzFRSkSoT8MJGlzK%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;1685&quot; height=&quot;77&quot; data-filename=&quot;Untitled 35.png&quot; data-origin-width=&quot;1685&quot; data-origin-height=&quot;77&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;그럼 위 처럼 데이터가 나오게 됩니다. 여기서 우리가 아까 Mock데이터를 만들떄 보았던 Published와 Draft를 알 수 있습니다. 한번 더 아래와 같이 데이터를 만들어 볼까요?&lt;/p&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-filename=&quot;Untitled 36.png&quot; data-origin-width=&quot;2006&quot; data-origin-height=&quot;526&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/btQfjd/btrBmvJXhCn/eCR0gAkkalXONO0CH7LCdk/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/btQfjd/btrBmvJXhCn/eCR0gAkkalXONO0CH7LCdk/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/btQfjd/btrBmvJXhCn/eCR0gAkkalXONO0CH7LCdk/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FbtQfjd%2FbtrBmvJXhCn%2FeCR0gAkkalXONO0CH7LCdk%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;2006&quot; height=&quot;526&quot; data-filename=&quot;Untitled 36.png&quot; data-origin-width=&quot;2006&quot; data-origin-height=&quot;526&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;이 상태에서 다시 우리가 아까 열었던 텝인 &lt;a href=&quot;http://localhost:1337/api/todos&quot;&gt;http://localhost:1337/api/todos&lt;/a&gt; 탭을 새로고침 하면 변화가 없습니다.&lt;/p&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-filename=&quot;Untitled 35.png&quot; data-origin-width=&quot;1685&quot; data-origin-height=&quot;77&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/d0P4Et/btrBi8h5gkZ/TpvvvXnRie2MHkUaSqUSg1/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/d0P4Et/btrBi8h5gkZ/TpvvvXnRie2MHkUaSqUSg1/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/d0P4Et/btrBi8h5gkZ/TpvvvXnRie2MHkUaSqUSg1/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2Fd0P4Et%2FbtrBi8h5gkZ%2FTpvvvXnRie2MHkUaSqUSg1%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;1685&quot; height=&quot;77&quot; data-filename=&quot;Untitled 35.png&quot; data-origin-width=&quot;1685&quot; data-origin-height=&quot;77&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;그럼 두번째 할 일 Mock 데이터를 발행 후 다시 새로고침을 해봅시다.&lt;/p&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-filename=&quot;Untitled 37.png&quot; data-origin-width=&quot;1535&quot; data-origin-height=&quot;460&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/cyyPie/btrBk7JzGMu/dzEIMPm2OkT1Y4ITXDarn0/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/cyyPie/btrBk7JzGMu/dzEIMPm2OkT1Y4ITXDarn0/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/cyyPie/btrBk7JzGMu/dzEIMPm2OkT1Y4ITXDarn0/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FcyyPie%2FbtrBk7JzGMu%2FdzEIMPm2OkT1Y4ITXDarn0%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;1535&quot; height=&quot;460&quot; data-filename=&quot;Untitled 37.png&quot; data-origin-width=&quot;1535&quot; data-origin-height=&quot;460&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-filename=&quot;Untitled 38.png&quot; data-origin-width=&quot;2040&quot; data-origin-height=&quot;69&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/tqWrZ/btrBkCQy9Xf/isVoJ7tDDQNxN9SKFKgBWk/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/tqWrZ/btrBkCQy9Xf/isVoJ7tDDQNxN9SKFKgBWk/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/tqWrZ/btrBkCQy9Xf/isVoJ7tDDQNxN9SKFKgBWk/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FtqWrZ%2FbtrBkCQy9Xf%2FisVoJ7tDDQNxN9SKFKgBWk%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;2040&quot; height=&quot;69&quot; data-filename=&quot;Untitled 38.png&quot; data-origin-width=&quot;2040&quot; data-origin-height=&quot;69&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;두번째 할 일이 생겼습니다. 이제 좀 차이를 아시겠죠? 즉 데이터를 만든다고 해서 데이터를 즉각적으로 publish를 하면 실수했을 때를 잡아낼 수 없습니다. 일종의 보안장치 이죠. 돌아가서 Strapi는 Permission을 통해 기본적인 CRUD를 만들 수 있습니다. 참 간편합니다. 방금은 리스트를 가져오는 기능을 개발한거구요 Strapi는 기본 기능에서는 3개의 권한을 만들수 있습니다. 권한을 3개 이상 추가하려면 무료 버전이 아닌 돈을 지불하여 늘릴 수 있습니다.&lt;/p&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-filename=&quot;Untitled 39.png&quot; data-origin-width=&quot;1242&quot; data-origin-height=&quot;867&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/dwwR3v/btrBk7COyIr/XUzthkFLAbE4Mk1dm8JGm0/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/dwwR3v/btrBk7COyIr/XUzthkFLAbE4Mk1dm8JGm0/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/dwwR3v/btrBk7COyIr/XUzthkFLAbE4Mk1dm8JGm0/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FdwwR3v%2FbtrBk7COyIr%2FXUzthkFLAbE4Mk1dm8JGm0%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;1242&quot; height=&quot;867&quot; data-filename=&quot;Untitled 39.png&quot; data-origin-width=&quot;1242&quot; data-origin-height=&quot;867&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;/p&gt;
&lt;h2 data-ke-size=&quot;size26&quot;&gt;마무리&lt;/h2&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;오늘은 Strapi를 간단하게 다뤄 봤습니다. 다음 시간에는 React와 Strapi의 연동하는 방법에 대해서 알아보도록 하겠습니다. 감사합니다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;</description>
      <category>프로그래밍 언어/웹 프론트엔드</category>
      <author>방현준</author>
      <guid isPermaLink="true">https://noogoonaa.tistory.com/111</guid>
      <comments>https://noogoonaa.tistory.com/111#entry111comment</comments>
      <pubDate>Thu, 5 May 2022 22:57:41 +0900</pubDate>
    </item>
    <item>
      <title>PWA 시작하기 - Next.js 프로젝트로 PWA 만들기</title>
      <link>https://noogoonaa.tistory.com/110</link>
      <description>&lt;h3 style=&quot;text-align: left;&quot; data-ke-size=&quot;size23&quot;&gt;&lt;span style=&quot;color: #ee2323;&quot;&gt;&lt;b&gt;이 글은 기본적으로 Next.js를 알고 계신 분들이 보기 좋은 글입니다.&lt;br /&gt;하지만 모르시는 분들도 이해하실 수 있도록 작성하였습니다.&lt;/b&gt;&lt;/span&gt;&lt;/h3&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-filename=&quot;download.png&quot; data-origin-width=&quot;259&quot; data-origin-height=&quot;194&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/dqh6pK/btrBhkXFfSo/dOctZurdtQnI4S5ef74zc0/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/dqh6pK/btrBhkXFfSo/dOctZurdtQnI4S5ef74zc0/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/dqh6pK/btrBhkXFfSo/dOctZurdtQnI4S5ef74zc0/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2Fdqh6pK%2FbtrBhkXFfSo%2FdOctZurdtQnI4S5ef74zc0%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;259&quot; height=&quot;194&quot; data-filename=&quot;download.png&quot; data-origin-width=&quot;259&quot; data-origin-height=&quot;194&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;/p&gt;
&lt;h3 style=&quot;text-align: left;&quot; data-ke-size=&quot;size23&quot;&gt;&lt;b&gt;1. 프로젝트 생성&lt;/b&gt;&lt;/h3&gt;
&lt;pre id=&quot;code_1651062437974&quot; class=&quot;shell&quot; data-ke-language=&quot;shell&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;# 자바스크립트로 생성
npx create-next-app@latest

# 타입스크립트로 생성
npx create-next-app@latest --ts&lt;/code&gt;&lt;/pre&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;h3 style=&quot;text-align: left;&quot; data-ke-size=&quot;size23&quot;&gt;&lt;b&gt;2.&amp;nbsp; 패키지 설치&lt;/b&gt;&lt;/h3&gt;
&lt;p style=&quot;text-align: left;&quot; data-ke-size=&quot;size16&quot;&gt;먼저 Next.js에서 PWA를 적용하기 위해서는 next-pwa라는 패키지를 추가해 주어야 합니다.&lt;/p&gt;
&lt;p style=&quot;text-align: left;&quot; data-ke-size=&quot;size16&quot;&gt;따라서 아래 코드를 입력해 패키지를 설치해 줍니다.&lt;/p&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignLeft&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-origin-width=&quot;507&quot; data-origin-height=&quot;45&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/cSzUVq/btrAA0L6RyQ/9cvakJatSscfwP5aVCdKOk/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/cSzUVq/btrAA0L6RyQ/9cvakJatSscfwP5aVCdKOk/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/cSzUVq/btrAA0L6RyQ/9cvakJatSscfwP5aVCdKOk/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FcSzUVq%2FbtrAA0L6RyQ%2F9cvakJatSscfwP5aVCdKOk%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;507&quot; height=&quot;45&quot; data-origin-width=&quot;507&quot; data-origin-height=&quot;45&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;/p&gt;
&lt;pre id=&quot;code_1651051225630&quot; class=&quot;shell&quot; data-ke-language=&quot;shell&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;# npm
npm install next-pwa

# yarn
yarn add next-pwa&lt;/code&gt;&lt;/pre&gt;
&lt;p style=&quot;text-align: left;&quot; data-ke-size=&quot;size16&quot;&gt;또한 부가적으로 next-compose-plugin을 설치해 줍니다.&lt;br /&gt;(이 플러그인 을 설치하는 이유는 밑에 설명 드립니다.)&lt;/p&gt;
&lt;pre id=&quot;code_1651052114605&quot; class=&quot;shell&quot; data-ke-language=&quot;shell&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;# npm
npm install --save next-compose-plugins

# yarn
yarn add --dev next-compose-plugins&lt;/code&gt;&lt;/pre&gt;
&lt;h3 style=&quot;text-align: left;&quot; data-ke-size=&quot;size23&quot;&gt;&lt;b&gt;3. config 설정&lt;/b&gt;&lt;/h3&gt;
&lt;p style=&quot;text-align: left;&quot; data-ke-size=&quot;size16&quot;&gt;next.config.js에 들어갑니다.&lt;/p&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignLeft&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-origin-width=&quot;344&quot; data-origin-height=&quot;512&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/ccVwmn/btrAEBRD8s5/GLuM5colH2DkdWfUnYtuxk/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/ccVwmn/btrAEBRD8s5/GLuM5colH2DkdWfUnYtuxk/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/ccVwmn/btrAEBRD8s5/GLuM5colH2DkdWfUnYtuxk/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FccVwmn%2FbtrAEBRD8s5%2FGLuM5colH2DkdWfUnYtuxk%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;344&quot; height=&quot;512&quot; data-origin-width=&quot;344&quot; data-origin-height=&quot;512&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;그 후, 아래와 같이 코드를 작성해 줍니다.&lt;/p&gt;
&lt;pre id=&quot;code_1651052153776&quot; class=&quot;javascript&quot; data-ke-language=&quot;javascript&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;/** @type {import('next').NextConfig} */
const withPlugins = require(&quot;next-compose-plugins&quot;);
const withPWA = require(&quot;next-pwa&quot;);

const nextConfig = {
	reactStrictMode: true,
};

module.exports = withPlugins(
	[
		[
			withPWA,
			{
				pwa: {
					dest: &quot;public&quot;,
				},
			},
		],
		// 추가 플러그인 작성
	],
	nextConfig
);&lt;/code&gt;&lt;/pre&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;자 여기서 저희가 next-compose-plugins를 사용하게 되는데요, 이 패키지는 next-pwa를 사용하게 되면 하나의 플러그인만 사용할 수 있지만, 추가적으로 더 사용할 수 있게 한꺼번에 묶어주는 패키지입니다. 따라서 추가 플러그인을 사용할 때는 아래와 같이 사용하시면 됩니다.&lt;/p&gt;
&lt;pre id=&quot;code_1651052442543&quot; class=&quot;javascript&quot; data-ke-language=&quot;javascript&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;module.exports = withPlugins(
	[
		[
			withPWA,
			{
				pwa: {
					dest: &quot;public&quot;,
				},
			},
		],
        [
            typescript, 
            {
                typescriptLoaderOptions: {
                    transpileOnly: false,
                },
            }
        ],
        // ...
	],
	nextConfig
);&lt;/code&gt;&lt;/pre&gt;
&lt;h3 data-ke-size=&quot;size23&quot;&gt;&lt;b&gt;4. manifest 파일 생성&lt;/b&gt;&lt;/h3&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;브라우저가 이 웹은 PWA라는것을 알려주기 위해서 아래와 같은 manifest를 작성해 줍니다.&lt;/p&gt;
&lt;pre id=&quot;code_1651052650814&quot; class=&quot;javascript&quot; data-ke-language=&quot;javascript&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;{
	&quot;theme_color&quot;: &quot;#FF98BA&quot;,
	&quot;background_color&quot;: &quot;#FF98BA&quot;,
	&quot;display&quot;: &quot;standalone&quot;,
	&quot;scope&quot;: &quot;/&quot;,
	&quot;start_url&quot;: &quot;/&quot;,
	&quot;short_name&quot;: &quot;\ubb34\uc2a8\uc885\uc774\ub0e5&quot;,
	&quot;name&quot;: &quot;\ubb34\uc2a8\uc885\uc774\ub0e5&quot;,
	&quot;description&quot;: &quot;\uadc0\uc5ec\uc6b4 \uace0\uc591\uc774\uc758 \uc885\ub958\ub97c \uc54c\ub824\uc8fc\ub294 \uc6f9 \uc571\uc785\ub2c8\ub2e4.&quot;,
	&quot;icons&quot;: [
		{
			&quot;src&quot;: &quot;images/icons/icon-48x48.png&quot;,
			&quot;sizes&quot;: &quot;48x48&quot;,
			&quot;type&quot;: &quot;image/png&quot;
		},
		{
			&quot;src&quot;: &quot;images/icons/icon-72x72.png&quot;,
			&quot;sizes&quot;: &quot;72x72&quot;,
			&quot;type&quot;: &quot;image/png&quot;
		},
		{
			&quot;src&quot;: &quot;images/icons/icon-96x96.png&quot;,
			&quot;sizes&quot;: &quot;96x96&quot;,
			&quot;type&quot;: &quot;image/png&quot;
		},
		{
			&quot;src&quot;: &quot;images/icons/icon-144x144.png&quot;,
			&quot;sizes&quot;: &quot;144x144&quot;,
			&quot;type&quot;: &quot;image/png&quot;
		},
		{
			&quot;src&quot;: &quot;images/icons/icon-192x192.png&quot;,
			&quot;sizes&quot;: &quot;192x192&quot;,
			&quot;type&quot;: &quot;image/png&quot;,
			&quot;purpose&quot;: &quot;any maskable&quot;
		},
		{
			&quot;src&quot;: &quot;images/icons/icon-256x256.png&quot;,
			&quot;sizes&quot;: &quot;256x256&quot;,
			&quot;type&quot;: &quot;image/png&quot;
		},
		{
			&quot;src&quot;: &quot;images/icons/icon-384x384.png&quot;,
			&quot;sizes&quot;: &quot;384x384&quot;,
			&quot;type&quot;: &quot;image/png&quot;
		},
		{
			&quot;src&quot;: &quot;images/icons/icon-512x512.png&quot;,
			&quot;sizes&quot;: &quot;512x512&quot;,
			&quot;type&quot;: &quot;image/png&quot;,
			&quot;purpose&quot;: &quot;any maskable&quot;
		}
	]
}&lt;/code&gt;&lt;/pre&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;하지만 이렇게 복잡한 코드를 손으로 한땀 한땀 작성 하는것 보다는 아래 사이트를 이용해서 만드는것을 추천드립니다.&lt;/p&gt;
&lt;figure id=&quot;og_1651062355065&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;PWA Manifest Generator | SimiCart&quot; data-og-description=&quot;PWA Manifest Generator Automatically generate a fully functional web app manifest along with size-optimized icons for your PWA Web app manifest &amp;nbsp; (i.e. manifest.json) is a JSON file that provides the necessary metadata for your Progressive Web App. With a&quot; data-og-host=&quot;www.simicart.com&quot; data-og-source-url=&quot;https://www.simicart.com/manifest-generator.html/&quot; data-og-url=&quot;https://www.simicart.com/manifest-generator.html/&quot; data-og-image=&quot;&quot;&gt;&lt;a href=&quot;https://www.simicart.com/manifest-generator.html/&quot; target=&quot;_blank&quot; rel=&quot;noopener&quot; data-source-url=&quot;https://www.simicart.com/manifest-generator.html/&quot;&gt;
&lt;div class=&quot;og-image&quot; style=&quot;background-image: url();&quot;&gt;&amp;nbsp;&lt;/div&gt;
&lt;div class=&quot;og-text&quot;&gt;
&lt;p class=&quot;og-title&quot; data-ke-size=&quot;size16&quot;&gt;PWA Manifest Generator | SimiCart&lt;/p&gt;
&lt;p class=&quot;og-desc&quot; data-ke-size=&quot;size16&quot;&gt;PWA Manifest Generator Automatically generate a fully functional web app manifest along with size-optimized icons for your PWA Web app manifest &amp;nbsp; (i.e. manifest.json) is a JSON file that provides the necessary metadata for your Progressive Web App. With a&lt;/p&gt;
&lt;p class=&quot;og-host&quot; data-ke-size=&quot;size16&quot;&gt;www.simicart.com&lt;/p&gt;
&lt;/div&gt;
&lt;/a&gt;&lt;/figure&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-origin-width=&quot;1158&quot; data-origin-height=&quot;560&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/rmEzT/btrADyuMPa3/J7hloKJ2jhTfkFkZ7Zsu0K/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/rmEzT/btrADyuMPa3/J7hloKJ2jhTfkFkZ7Zsu0K/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/rmEzT/btrADyuMPa3/J7hloKJ2jhTfkFkZ7Zsu0K/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FrmEzT%2FbtrADyuMPa3%2FJ7hloKJ2jhTfkFkZ7Zsu0K%2Fimg.png&quot; onerror=&quot;this.onerror=null; this.src='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png'; this.srcset='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png';&quot; loading=&quot;lazy&quot; width=&quot;1158&quot; height=&quot;560&quot; data-origin-width=&quot;1158&quot; data-origin-height=&quot;560&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;여기서 우리가 설정해야 하는 부분은 Name, Short Name, Display, Description, Theme Color, Background Color, Icons입니다.&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;ul style=&quot;list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li&gt;Name : PWA의 이름&lt;/li&gt;
&lt;li&gt;Short name : 앱 이름을 표시할 공간이 충분하지 않을 때 나타나는 이름&lt;/li&gt;
&lt;li&gt;Display : &lt;span style=&quot;background-color: #ffffff; color: #212529;&quot;&gt;homescreen icon을 통해 실행될 때 app 화면이 보여지는 형태&lt;/span&gt;
&lt;ul style=&quot;list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li&gt;browser : 일반 브라우저와 동일하게 보입니다.&lt;/li&gt;
&lt;li&gt;standalone : 다른 앱들처럼 최상단에 상태표시줄을 제외한 전체화면으로 보입니다.&lt;/li&gt;
&lt;li&gt;fullscreen : 상태표시줄도 제외한 전체화면으로 보여줍니다.(ex. 게임)&lt;/li&gt;
&lt;li&gt;minimul-ui&lt;b&gt; :&lt;/b&gt; fullscreen과 비슷하지만 뒤로가기, 새로고침등 최소한의 영역만 제공합니다.(모바일 크롬 전용)&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt;Description : &lt;span style=&quot;background-color: #ffffff; color: #212529;&quot;&gt;app의 description 정보&lt;/span&gt;&lt;/li&gt;
&lt;li&gt;&lt;span style=&quot;background-color: #ffffff; color: #212529;&quot;&gt;Application Scope(=scope) : &lt;span style=&quot;background-color: #ffffff; color: #212529;&quot;&gt;app 내에서 PWA 기능을 적용할 범위&lt;/span&gt;&lt;/span&gt;&lt;/li&gt;
&lt;li&gt;&lt;span&gt;Start url&lt;/span&gt; : app이 최초 실행 될 때 load되는 file의 경로&lt;/li&gt;
&lt;li&gt;&lt;span&gt;Background color&lt;/span&gt; : 스플래시 배경색&lt;/li&gt;
&lt;li&gt;Theme color&lt;span style=&quot;font-family: -apple-system, BlinkMacSystemFont, AppleSDGothicNeo-Regular, 'Malgun Gothic', '맑은 고딕', dotum, 돋움, sans-serif; letter-spacing: 0px;&quot;&gt; : 전체적인 테마색&lt;/span&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;다른건 사용자가 원하는 대로 설정해도 되지만 Display와 &lt;span style=&quot;background-color: #ffffff; color: #212529;&quot;&gt;Application Scope, Start url은 아래와 같이 작성해 준다.&lt;/span&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;background-color: #ffffff; color: #212529;&quot;&gt;(궁금하면 변경해도 되긴 한다...)&lt;/span&gt;&lt;/p&gt;
&lt;ul style=&quot;list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li&gt;Display : standalone&lt;/li&gt;
&lt;li&gt;&lt;span style=&quot;background-color: #ffffff; color: #212529;&quot;&gt;Application Scope : /&lt;/span&gt;&lt;/li&gt;
&lt;li&gt;&lt;span style=&quot;background-color: #ffffff; color: #212529;&quot;&gt;Start url : /&lt;/span&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;그 후 Generate Manifest를 눌러준다. 그럼 압축파일이 나오게 되는데 압축 파일을 해제 한 후 manifest.webmanifest파일 이름을 manifest.json으로 변경하여 public에 넣어줍니다.&lt;/p&gt;
&lt;p&gt;&lt;figure class=&quot;imagegridblock&quot;&gt;
  &lt;div class=&quot;image-container&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/X5QfZ/btrAza2zhGV/wj32gM9hK6gQmDtS5IkPT0/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/X5QfZ/btrAza2zhGV/wj32gM9hK6gQmDtS5IkPT0/img.png&quot; data-origin-width=&quot;201&quot; data-origin-height=&quot;110&quot; data-is-animation=&quot;false&quot; style=&quot;width: 68.3413%; margin-right: 10px;&quot; data-widthpercent=&quot;69.15&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/X5QfZ/btrAza2zhGV/wj32gM9hK6gQmDtS5IkPT0/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FX5QfZ%2FbtrAza2zhGV%2Fwj32gM9hK6gQmDtS5IkPT0%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;201&quot; height=&quot;110&quot;/&gt;&lt;/span&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/ZBp0c/btrAEIDv8cr/k8pRNjzYh4zpTTR5tnOaHK/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/ZBp0c/btrAEIDv8cr/k8pRNjzYh4zpTTR5tnOaHK/img.png&quot; data-origin-width=&quot;265&quot; data-origin-height=&quot;325&quot; data-is-animation=&quot;false&quot; style=&quot;width: 30.4959%;&quot; data-widthpercent=&quot;30.85&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/ZBp0c/btrAEIDv8cr/k8pRNjzYh4zpTTR5tnOaHK/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FZBp0c%2FbtrAEIDv8cr%2Fk8pRNjzYh4zpTTR5tnOaHK%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;265&quot; height=&quot;325&quot;/&gt;&lt;/span&gt;&lt;/div&gt;
&lt;/figure&gt;
&lt;/p&gt;
&lt;h3 data-ke-size=&quot;size23&quot;&gt;&lt;b&gt;5. 아이콘 적용&lt;/b&gt;&lt;/h3&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;이전에 manifest를 만들 떄 아이콘도 넣었다면 아이콘도 나왔을 겁니다. 하지만, 우리는 아래 사이트를 이용해서 아이콘을 만들것입니다.&amp;nbsp;&lt;/p&gt;
&lt;figure id=&quot;og_1651068159158&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;PWA Application Icon Generator Free Online Tool&quot; data-og-description=&quot;Download PWA Icons Bundle Download&quot; data-og-host=&quot;tools.crawlink.com&quot; data-og-source-url=&quot;https://tools.crawlink.com/tools/pwa-icon-generator/&quot; data-og-url=&quot;https://tools.crawlink.com/tools/pwa-icon-generator/&quot; data-og-image=&quot;&quot;&gt;&lt;a href=&quot;https://tools.crawlink.com/tools/pwa-icon-generator/&quot; target=&quot;_blank&quot; rel=&quot;noopener&quot; data-source-url=&quot;https://tools.crawlink.com/tools/pwa-icon-generator/&quot;&gt;
&lt;div class=&quot;og-image&quot; style=&quot;background-image: url();&quot;&gt;&amp;nbsp;&lt;/div&gt;
&lt;div class=&quot;og-text&quot;&gt;
&lt;p class=&quot;og-title&quot; data-ke-size=&quot;size16&quot;&gt;PWA Application Icon Generator Free Online Tool&lt;/p&gt;
&lt;p class=&quot;og-desc&quot; data-ke-size=&quot;size16&quot;&gt;Download PWA Icons Bundle Download&lt;/p&gt;
&lt;p class=&quot;og-host&quot; data-ke-size=&quot;size16&quot;&gt;tools.crawlink.com&lt;/p&gt;
&lt;/div&gt;
&lt;/a&gt;&lt;/figure&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;앱에 적용할 512x512 png 이미지 파일을 넣어 아이콘을 생성해 줍니다.&lt;/p&gt;
&lt;p&gt;&lt;figure class=&quot;imagegridblock&quot;&gt;
  &lt;div class=&quot;image-container&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/Wh9C7/btrADUkmtua/7UNo9UvV6kkePO0PU8LPe1/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/Wh9C7/btrADUkmtua/7UNo9UvV6kkePO0PU8LPe1/img.png&quot; data-origin-width=&quot;198&quot; data-origin-height=&quot;169&quot; data-is-animation=&quot;false&quot; style=&quot;width: 70.5142%; margin-right: 10px;&quot; data-widthpercent=&quot;71.34&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/Wh9C7/btrADUkmtua/7UNo9UvV6kkePO0PU8LPe1/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FWh9C7%2FbtrADUkmtua%2F7UNo9UvV6kkePO0PU8LPe1%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;198&quot; height=&quot;169&quot;/&gt;&lt;/span&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/dJVCeg/btrAD9avTzi/2Q2IuwMJGGi1DukMm1KRSk/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/dJVCeg/btrAD9avTzi/2Q2IuwMJGGi1DukMm1KRSk/img.png&quot; data-origin-width=&quot;272&quot; data-origin-height=&quot;578&quot; data-is-animation=&quot;false&quot; style=&quot;width: 28.323%;&quot; data-widthpercent=&quot;28.66&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/dJVCeg/btrAD9avTzi/2Q2IuwMJGGi1DukMm1KRSk/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FdJVCeg%2FbtrAD9avTzi%2F2Q2IuwMJGGi1DukMm1KRSk%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;272&quot; height=&quot;578&quot;/&gt;&lt;/span&gt;&lt;/div&gt;
&lt;/figure&gt;
&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;그럼 이렇게 아이콘이 생성됩니다. 이것을 public에 넣거나 원하는 폴더 안에 넣어줍니다. 다만, 이렇게 아이콘을 넣으면 manifest안에 icons의 src 경로도 변경해 주어야 합니다. 저는 publiv/image/icons에 저장해 놓겠습니다.&lt;/p&gt;
&lt;h3 data-ke-size=&quot;size23&quot;&gt;&lt;b&gt;6. 메타태그 적용&lt;/b&gt;&lt;/h3&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;브라우저가 PWA라는것을 알아채고 manifest에 접근할 수 있도록 메타태그를 적용해야합니다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;따라서 아래 링크를 참고하여 _document.jsx 혹은 _document.tsx파일을 pages 폴더 안에 생성해 줍니다.&lt;/p&gt;
&lt;figure id=&quot;og_1651068579712&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;Advanced Features: Custom &amp;#96;Document&amp;#96; | Next.js&quot; data-og-description=&quot;Extend the default document markup added by Next.js.&quot; data-og-host=&quot;nextjs.org&quot; data-og-source-url=&quot;https://nextjs.org/docs/advanced-features/custom-document&quot; data-og-url=&quot;https://nextjs.org/docs/advanced-features/custom-document&quot; data-og-image=&quot;https://scrap.kakaocdn.net/dn/dkkSu8/hyOczLZZQY/17RWXlrT8gEplNkAXsOCpk/img.png?width=2048&amp;amp;height=1170&amp;amp;face=0_0_2048_1170&quot;&gt;&lt;a href=&quot;https://nextjs.org/docs/advanced-features/custom-document&quot; target=&quot;_blank&quot; rel=&quot;noopener&quot; data-source-url=&quot;https://nextjs.org/docs/advanced-features/custom-document&quot;&gt;
&lt;div class=&quot;og-image&quot; style=&quot;background-image: url('https://scrap.kakaocdn.net/dn/dkkSu8/hyOczLZZQY/17RWXlrT8gEplNkAXsOCpk/img.png?width=2048&amp;amp;height=1170&amp;amp;face=0_0_2048_1170');&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;Advanced Features: Custom `Document` | Next.js&lt;/p&gt;
&lt;p class=&quot;og-desc&quot; data-ke-size=&quot;size16&quot;&gt;Extend the default document markup added by Next.js.&lt;/p&gt;
&lt;p class=&quot;og-host&quot; data-ke-size=&quot;size16&quot;&gt;nextjs.org&lt;/p&gt;
&lt;/div&gt;
&lt;/a&gt;&lt;/figure&gt;
&lt;p&gt;&lt;figure class=&quot;imagegridblock&quot;&gt;
  &lt;div class=&quot;image-container&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/IY2Tb/btrAz7dt9pR/BUCKGeh9jKArKqmTr2W0g0/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/IY2Tb/btrAz7dt9pR/BUCKGeh9jKArKqmTr2W0g0/img.png&quot; data-origin-width=&quot;273&quot; data-origin-height=&quot;194&quot; data-is-animation=&quot;false&quot; style=&quot;width: 42.0014%; margin-right: 10px;&quot; data-widthpercent=&quot;42.5&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/IY2Tb/btrAz7dt9pR/BUCKGeh9jKArKqmTr2W0g0/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FIY2Tb%2FbtrAz7dt9pR%2FBUCKGeh9jKArKqmTr2W0g0%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;273&quot; height=&quot;194&quot;/&gt;&lt;/span&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/cBLAW1/btrAEBdv2J1/J9PFkzRAKGWA0QJwkXYoN1/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/cBLAW1/btrAEBdv2J1/J9PFkzRAKGWA0QJwkXYoN1/img.png&quot; data-origin-width=&quot;1352&quot; data-origin-height=&quot;710&quot; data-is-animation=&quot;false&quot; style=&quot;width: 56.8358%;&quot; data-widthpercent=&quot;57.5&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/cBLAW1/btrAEBdv2J1/J9PFkzRAKGWA0QJwkXYoN1/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FcBLAW1%2FbtrAEBdv2J1%2FJ9PFkzRAKGWA0QJwkXYoN1%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;1352&quot; height=&quot;710&quot;/&gt;&lt;/span&gt;&lt;/div&gt;
&lt;/figure&gt;
&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;그 후 Head태그 안에 아래와 같이 메타 태그를 넣어줍니다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size18&quot;&gt;&lt;b&gt;Manifest 메타태그&lt;/b&gt;&lt;/p&gt;
&lt;pre id=&quot;code_1651068677491&quot; class=&quot;html xml&quot; data-ke-language=&quot;html&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;&amp;lt;link rel=&quot;manifest&quot; href=&quot;/manifest.json&quot; /&amp;gt;&lt;/code&gt;&lt;/pre&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;그러면 브라우저에게 manifest를 제공할 준비가 된겁니다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;추가적으로 아래는 옵션인 메타태그입니다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size18&quot;&gt;&lt;b&gt;파비콘 메타태그&lt;/b&gt;&lt;b&gt;&lt;/b&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;파비콘 생성 사이트에서 파비콘을 생성후 public혹은 public 내 폴더에 저장&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;figure id=&quot;og_1651069612852&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;Favicon &amp;amp; App Icon Generator&quot; data-og-description=&quot;Upload an image (PNG to ICO, JPG to ICO, GIF to ICO) and convert it to a Windows favicon (.ico) and App Icons. Learn more about favicons.&quot; data-og-host=&quot;www.favicon-generator.org&quot; data-og-source-url=&quot;https://www.favicon-generator.org/&quot; data-og-url=&quot;https://www.favicon-generator.org/&quot; data-og-image=&quot;&quot;&gt;&lt;a href=&quot;https://www.favicon-generator.org/&quot; target=&quot;_blank&quot; rel=&quot;noopener&quot; data-source-url=&quot;https://www.favicon-generator.org/&quot;&gt;
&lt;div class=&quot;og-image&quot; style=&quot;background-image: url();&quot;&gt;&amp;nbsp;&lt;/div&gt;
&lt;div class=&quot;og-text&quot;&gt;
&lt;p class=&quot;og-title&quot; data-ke-size=&quot;size16&quot;&gt;Favicon &amp;amp; App Icon Generator&lt;/p&gt;
&lt;p class=&quot;og-desc&quot; data-ke-size=&quot;size16&quot;&gt;Upload an image (PNG to ICO, JPG to ICO, GIF to ICO) and convert it to a Windows favicon (.ico) and App Icons. Learn more about favicons.&lt;/p&gt;
&lt;p class=&quot;og-host&quot; data-ke-size=&quot;size16&quot;&gt;www.favicon-generator.org&lt;/p&gt;
&lt;/div&gt;
&lt;/a&gt;&lt;/figure&gt;
&lt;pre id=&quot;code_1651069359553&quot; class=&quot;html xml&quot; data-ke-language=&quot;html&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;&amp;lt;link
    href=&quot;images/favicons/favicon-16x16.png&quot;
    rel=&quot;icon&quot;
    type=&quot;image/png&quot;
    sizes=&quot;16x16&quot;
/&amp;gt;
&amp;lt;link
    href=&quot;images/favicons/favicon-32x32.png&quot;
    rel=&quot;icon&quot;
    type=&quot;image/png&quot;
    sizes=&quot;32x32&quot;
/&amp;gt;&lt;/code&gt;&lt;/pre&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size18&quot;&gt;&lt;b&gt;ios 아이콘 메타태그&lt;/b&gt;&lt;/p&gt;
&lt;pre id=&quot;code_1651069424836&quot; class=&quot;html xml&quot; data-ke-language=&quot;html&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;&amp;lt;link rel=&quot;apple-touch-icon&quot; href=&quot;images/icons/icon-192x192.png&quot;&amp;gt;&amp;lt;/link&amp;gt;&lt;/code&gt;&lt;/pre&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size18&quot;&gt;&lt;b&gt;Microsoft App 컬러 메타태그&lt;/b&gt;&lt;/p&gt;
&lt;pre id=&quot;code_1651069469297&quot; class=&quot;html xml&quot; data-ke-language=&quot;html&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;&amp;lt;meta name=&quot;msapplication-TileColor&quot; content=&quot;#FF98BA&quot;&amp;gt;&amp;lt;/meta&amp;gt;&lt;/code&gt;&lt;/pre&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;h3 data-ke-size=&quot;size23&quot;&gt;&lt;b&gt;7. IOS 스플래시 메타태그&lt;/b&gt;&lt;/h3&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;해당 메타태그를 활용하기 위해서는 스플래시 이미지를 만들어야 합니다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;아래 링크를 통해 Splash Screen 이미지를 만들어줍니다.&lt;/p&gt;
&lt;figure id=&quot;og_1651068904650&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;Online Splash Screen Generator - Apprene.com&quot; data-og-description=&quot;Use our free online splash screen generator and create a beautiful splash screen for your Applications&quot; data-og-host=&quot;apprene.com&quot; data-og-source-url=&quot;https://apprene.com/splash-screen-generator-online&quot; data-og-url=&quot;https://apprene.com/splash-screen-generator-online&quot; data-og-image=&quot;https://scrap.kakaocdn.net/dn/bmBYLS/hyObtGLnmt/N9ZY4fToJbcN4tQ0woQ9a0/img.png?width=975&amp;amp;height=650&amp;amp;face=0_0_975_650,https://scrap.kakaocdn.net/dn/ehHbw1/hyObwKgWEJ/8uRczSkc4bQGWfZ2PcIbC0/img.png?width=975&amp;amp;height=650&amp;amp;face=0_0_975_650&quot;&gt;&lt;a href=&quot;https://apprene.com/splash-screen-generator-online&quot; target=&quot;_blank&quot; rel=&quot;noopener&quot; data-source-url=&quot;https://apprene.com/splash-screen-generator-online&quot;&gt;
&lt;div class=&quot;og-image&quot; style=&quot;background-image: url('https://scrap.kakaocdn.net/dn/bmBYLS/hyObtGLnmt/N9ZY4fToJbcN4tQ0woQ9a0/img.png?width=975&amp;amp;height=650&amp;amp;face=0_0_975_650,https://scrap.kakaocdn.net/dn/ehHbw1/hyObwKgWEJ/8uRczSkc4bQGWfZ2PcIbC0/img.png?width=975&amp;amp;height=650&amp;amp;face=0_0_975_650');&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;Online Splash Screen Generator - Apprene.com&lt;/p&gt;
&lt;p class=&quot;og-desc&quot; data-ke-size=&quot;size16&quot;&gt;Use our free online splash screen generator and create a beautiful splash screen for your Applications&lt;/p&gt;
&lt;p class=&quot;og-host&quot; data-ke-size=&quot;size16&quot;&gt;apprene.com&lt;/p&gt;
&lt;/div&gt;
&lt;/a&gt;&lt;/figure&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;다 만든 스플래시 이미지는 아래 사이트에서 각 디바이스 별 스플래시 스크린 이미지를 만든 후 public혹은 public내 원하는 위치로 저장해 줍니다.&lt;/p&gt;
&lt;figure id=&quot;og_1651069200985&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;Appscope&quot; data-og-description=&quot;Appscope is a directory of Progressive Web Apps, showcasing hundreds of excellent PWA examples.&quot; data-og-host=&quot;appsco.pe&quot; data-og-source-url=&quot;https://appsco.pe/developer/splash-screens&quot; data-og-url=&quot;https://appsco.pe/&quot; data-og-image=&quot;&quot;&gt;&lt;a href=&quot;https://appsco.pe/developer/splash-screens&quot; target=&quot;_blank&quot; rel=&quot;noopener&quot; data-source-url=&quot;https://appsco.pe/developer/splash-screens&quot;&gt;
&lt;div class=&quot;og-image&quot; style=&quot;background-image: url();&quot;&gt;&amp;nbsp;&lt;/div&gt;
&lt;div class=&quot;og-text&quot;&gt;
&lt;p class=&quot;og-title&quot; data-ke-size=&quot;size16&quot;&gt;Appscope&lt;/p&gt;
&lt;p class=&quot;og-desc&quot; data-ke-size=&quot;size16&quot;&gt;Appscope is a directory of Progressive Web Apps, showcasing hundreds of excellent PWA examples.&lt;/p&gt;
&lt;p class=&quot;og-host&quot; data-ke-size=&quot;size16&quot;&gt;appsco.pe&lt;/p&gt;
&lt;/div&gt;
&lt;/a&gt;&lt;/figure&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;그리고 아래와 같이 매태태그를 _document 파일 Head 내부에 입력해 줍니다.&lt;/p&gt;
&lt;pre id=&quot;code_1651068770353&quot; class=&quot;html xml&quot; data-ke-language=&quot;html&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;&amp;lt;link
    rel=&quot;apple-touch-startup-image&quot;
    href=&quot;/images/splashscreens/iphone5_splash.png&quot;
    media=&quot;(device-width: 320px) and (device-height: 568px) and (-webkit-device-pixel-ratio: 2) and (orientation: portrait)&quot;
&amp;gt;&amp;lt;/link&amp;gt;
&amp;lt;link
    rel=&quot;apple-touch-startup-image&quot;
    href=&quot;/images/splashscreens/iphone6_splash.png&quot;
    media=&quot;(device-width: 375px) and (device-height: 667px) and (-webkit-device-pixel-ratio: 2) and (orientation: portrait)&quot;
&amp;gt;&amp;lt;/link&amp;gt;
&amp;lt;link
    rel=&quot;apple-touch-startup-image&quot;
    href=&quot;/images/splashscreens/iphoneplus_splash.png&quot;
    media=&quot;(device-width: 414px) and (device-height: 736px) and (-webkit-device-pixel-ratio: 3) and (orientation: portrait)&quot;
&amp;gt;&amp;lt;/link&amp;gt;
&amp;lt;link
    rel=&quot;apple-touch-startup-image&quot;
    href=&quot;/images/splashscreens/iphonex_splash.png&quot;
    media=&quot;(device-width: 375px) and (device-height: 812px) and (-webkit-device-pixel-ratio: 3) and (orientation: portrait)&quot;
&amp;gt;&amp;lt;/link&amp;gt;
&amp;lt;link
    rel=&quot;apple-touch-startup-image&quot;
    href=&quot;/images/splashscreens/ipad_splash.png&quot;
    media=&quot;(min-device-width: 768px) and (max-device-width: 1024px) and (-webkit-min-device-pixel-ratio: 2) and (orientation: portrait)&quot;
&amp;gt;&amp;lt;/link&amp;gt;
&amp;lt;link
    rel=&quot;apple-touch-startup-image&quot;
    href=&quot;/images/splashscreens/ipadpro1_splash.png&quot;
    media=&quot;(min-device-width: 834px) and (max-device-width: 834px) and (-webkit-min-device-pixel-ratio: 2) and (orientation: portrait)&quot;
&amp;gt;&amp;lt;/link&amp;gt;
&amp;lt;link
    rel=&quot;apple-touch-startup-image&quot;
    href=&quot;/images/splashscreens/ipadpro2_splash.png&quot;
    media=&quot;(min-device-width: 1024px) and (max-device-width: 1024px) and (-webkit-min-device-pixel-ratio: 2) and (orientation: portrait)&quot;
&amp;gt;&amp;lt;/link&amp;gt;&lt;/code&gt;&lt;/pre&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;당연한 이야기지만, href의 위치를 정확히 설정해 주셔야 합니다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;h3 data-ke-size=&quot;size23&quot;&gt;&lt;b&gt;8. 빌드 및 실행&lt;/b&gt;&lt;/h3&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;아래 커맨드를 프로젝트에서 입력해 줍니다.&lt;/p&gt;
&lt;pre id=&quot;code_1651069722035&quot; class=&quot;shell&quot; data-ke-language=&quot;shell&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;# npm
npm run build &amp;amp;&amp;amp; npm run dev

# yarn
yarn build &amp;amp;&amp;amp; yarn dev&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;여기서 개발자 도구에 진입하여 Lighthouse 탭에서 아래와 같이 설정해 줍니다.&lt;/p&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-origin-width=&quot;2096&quot; data-origin-height=&quot;584&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/nRG1f/btrAFMTcHec/6XFKOJB2pbCrLwC3tzU7Ok/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/nRG1f/btrAFMTcHec/6XFKOJB2pbCrLwC3tzU7Ok/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/nRG1f/btrAFMTcHec/6XFKOJB2pbCrLwC3tzU7Ok/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FnRG1f%2FbtrAFMTcHec%2F6XFKOJB2pbCrLwC3tzU7Ok%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;2096&quot; height=&quot;584&quot; data-origin-width=&quot;2096&quot; data-origin-height=&quot;584&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;그 후 보고서 생성을 클릭하면 아래와 같이 PWA인지 아닌지를 판단하는 검사가 완료가 됩니다.&lt;/p&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-origin-width=&quot;1452&quot; data-origin-height=&quot;1330&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/dbshvp/btrACL9iNYz/fdhJkGAhd3hSEbNxyYOtd0/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/dbshvp/btrACL9iNYz/fdhJkGAhd3hSEbNxyYOtd0/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/dbshvp/btrACL9iNYz/fdhJkGAhd3hSEbNxyYOtd0/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2Fdbshvp%2FbtrACL9iNYz%2FfdhJkGAhd3hSEbNxyYOtd0%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;1452&quot; height=&quot;1330&quot; data-origin-width=&quot;1452&quot; data-origin-height=&quot;1330&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;h3 data-ke-size=&quot;size23&quot;&gt;&lt;b&gt;9. 앱 다운로드&lt;/b&gt;&lt;/h3&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;앱 다운로드는 제가 만든 PWA로 만든 서비스인 무슨종이냥? 에서 확인할 수 있습니다.&amp;nbsp;참고해 주세요&lt;br /&gt;&lt;a href=&quot;https://cat-type.vercel.app/&quot; target=&quot;_blank&quot; rel=&quot;noopener&quot;&gt;https://cat-type.vercel.app/&lt;/a&gt;&lt;/p&gt;
&lt;figure id=&quot;og_1664265723441&quot; contenteditable=&quot;false&quot; data-ke-type=&quot;opengraph&quot; data-ke-align=&quot;alignCenter&quot; data-og-type=&quot;website&quot; data-og-title=&quot;무슨종이냥 | 홈&quot; data-og-description=&quot;당신이 키우는 고양이는 무슨종인지 알려드릴게요&quot; data-og-host=&quot;cat-type.vercel.app&quot; data-og-source-url=&quot;https://cat-type.vercel.app/&quot; data-og-url=&quot;https://cat-type.vercel.app&quot; data-og-image=&quot;https://scrap.kakaocdn.net/dn/bckc3G/hyPVq9h2MC/jE28SMRY7jDRwgYE2BKHK1/img.png?width=512&amp;amp;height=512&amp;amp;face=0_0_512_512,https://scrap.kakaocdn.net/dn/qhWam/hyPVfNtxHJ/YwsMAvf2TUC3AphkFYst70/img.jpg?width=1080&amp;amp;height=1344&amp;amp;face=291_510_692_948,https://scrap.kakaocdn.net/dn/bJdqMF/hyPVnrbgfx/nEaINnDNL32WWopTuquxS0/img.png?width=996&amp;amp;height=801&amp;amp;face=0_0_996_801&quot;&gt;&lt;a href=&quot;https://cat-type.vercel.app/&quot; target=&quot;_blank&quot; rel=&quot;noopener&quot; data-source-url=&quot;https://cat-type.vercel.app/&quot;&gt;
&lt;div class=&quot;og-image&quot; style=&quot;background-image: url('https://scrap.kakaocdn.net/dn/bckc3G/hyPVq9h2MC/jE28SMRY7jDRwgYE2BKHK1/img.png?width=512&amp;amp;height=512&amp;amp;face=0_0_512_512,https://scrap.kakaocdn.net/dn/qhWam/hyPVfNtxHJ/YwsMAvf2TUC3AphkFYst70/img.jpg?width=1080&amp;amp;height=1344&amp;amp;face=291_510_692_948,https://scrap.kakaocdn.net/dn/bJdqMF/hyPVnrbgfx/nEaINnDNL32WWopTuquxS0/img.png?width=996&amp;amp;height=801&amp;amp;face=0_0_996_801');&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;cat-type.vercel.app&lt;/p&gt;
&lt;/div&gt;
&lt;/a&gt;&lt;/figure&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;감사합니다.&lt;/p&gt;</description>
      <category>프로그래밍 언어/웹 프론트엔드</category>
      <author>방현준</author>
      <guid isPermaLink="true">https://noogoonaa.tistory.com/110</guid>
      <comments>https://noogoonaa.tistory.com/110#entry110comment</comments>
      <pubDate>Wed, 27 Apr 2022 18:25:58 +0900</pubDate>
    </item>
    <item>
      <title>AKS + DevOps Azure Sprint 참여기</title>
      <link>https://noogoonaa.tistory.com/109</link>
      <description>&lt;h3 data-ke-size=&quot;size23&quot;&gt;&lt;b&gt;&lt;span style=&quot;font-family: AppleSDGothicNeo-Regular, 'Malgun Gothic', '맑은 고딕', dotum, 돋움, sans-serif; color: #000000;&quot;&gt;여는글&lt;/span&gt;&lt;/b&gt;&lt;/h3&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;color: #000000;&quot;&gt;&lt;span style=&quot;font-family: AppleSDGothicNeo-Regular, 'Malgun Gothic', '맑은 고딕', dotum, 돋움, sans-serif; letter-spacing: 0px;&quot;&gt;한가롭지 않은 회사 생활 중 갑자기 팀즈가 울렸습니다. &lt;/span&gt;&lt;span style=&quot;font-family: AppleSDGothicNeo-Regular, 'Malgun Gothic', '맑은 고딕', dotum, 돋움, sans-serif; letter-spacing: 0px;&quot;&gt;회사에 Infra쪽 팀장님이 마이크로소프트에서 DevOps관련해서 스프린트를 진행하는데, 참석할 분 있냐고 찾는 내용이었습니다. &lt;/span&gt;&lt;span style=&quot;font-family: AppleSDGothicNeo-Regular, 'Malgun Gothic', '맑은 고딕', dotum, 돋움, sans-serif; letter-spacing: 0px;&quot;&gt;사실 저는 프론트엔드 개발을 주로 해왔기 때문에 DevOps에는 큰 신경을 안써왔지만, 뭐든 배워 놓으면 좋지 않을까 라는 생각에 덥석 이 스프린트에 참석을 하겠다고 말씀 드렸습니다. 그렇게 해서 우연한&lt;/span&gt;&lt;span style=&quot;font-family: AppleSDGothicNeo-Regular, 'Malgun Gothic', '맑은 고딕', dotum, 돋움, sans-serif; letter-spacing: 0px;&quot;&gt;&amp;nbsp;기회로 2022년 3월 28일, 29일 양일간 Azure Sprint 참여했습니다.&lt;/span&gt;&lt;/span&gt;&lt;/p&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock widthContent&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-filename=&quot;Screenshot at Mar 29 18-05-12.png&quot; data-origin-width=&quot;1322&quot; data-origin-height=&quot;1452&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/CsW6Q/btryezat8Wm/wTQyPTQt1jrno464GMK560/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/CsW6Q/btryezat8Wm/wTQyPTQt1jrno464GMK560/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/CsW6Q/btryezat8Wm/wTQyPTQt1jrno464GMK560/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FCsW6Q%2Fbtryezat8Wm%2FwTQyPTQt1jrno464GMK560%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;1322&quot; height=&quot;1452&quot; data-filename=&quot;Screenshot at Mar 29 18-05-12.png&quot; data-origin-width=&quot;1322&quot; data-origin-height=&quot;1452&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;/p&gt;
&lt;hr contenteditable=&quot;false&quot; data-ke-type=&quot;horizontalRule&quot; data-ke-style=&quot;style1&quot; /&gt;
&lt;h3 data-ke-size=&quot;size23&quot;&gt;&lt;b&gt;&lt;span style=&quot;color: #000000;&quot;&gt;첫째 날&lt;/span&gt;&lt;/b&gt;&lt;/h3&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;color: #000000;&quot;&gt;그동안 코로나라 재택을 주로 해왔기 때문에 밖에 나올일이 많이 줄었는데 오랜만에 밖에 나오니 또 색달랐고, 이런 오프라인 세션은 예전에는 많이 진행했지만 요새는 또 거의 대부분 온라인으로 변경되어 오랜만에 오프라인으로 새로운 사람들을 만나려니 감회가 색달랐습니다. 위치는 광화문 쪽에 있는 마소 건물이었는데 마이크로소프트라는 이름값 때문인지 신나고 짜릿했습니다.&lt;/span&gt;&lt;/p&gt;
&lt;p&gt;&lt;figure class=&quot;imagegridblock&quot;&gt;
  &lt;div class=&quot;image-container&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/cq1cBI/btryd1rzIq0/j2DKghVGLHkdBUpW60M9k0/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/cq1cBI/btryd1rzIq0/j2DKghVGLHkdBUpW60M9k0/img.png&quot; data-is-animation=&quot;false&quot; data-origin-width=&quot;760&quot; data-origin-height=&quot;569&quot; data-filename=&quot;blob&quot; style=&quot;width: 38.1577%; margin-right: 10px;&quot; data-widthpercent=&quot;39.07&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/cq1cBI/btryd1rzIq0/j2DKghVGLHkdBUpW60M9k0/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2Fcq1cBI%2Fbtryd1rzIq0%2Fj2DKghVGLHkdBUpW60M9k0%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;760&quot; height=&quot;569&quot;/&gt;&lt;/span&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/cJFt7l/btrydIMAT9N/i6bJvIBUakEdwkZHJcqWZ1/img.jpg&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/cJFt7l/btrydIMAT9N/i6bJvIBUakEdwkZHJcqWZ1/img.jpg&quot; data-is-animation=&quot;false&quot; data-origin-width=&quot;4000&quot; data-origin-height=&quot;3000&quot; data-filename=&quot;KakaoTalk_Photo_2022-04-01-20-19-14 023.jpeg&quot; style=&quot;width: 38.0907%; margin-right: 10px;&quot; data-widthpercent=&quot;39&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/cJFt7l/btrydIMAT9N/i6bJvIBUakEdwkZHJcqWZ1/img.jpg&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FcJFt7l%2FbtrydIMAT9N%2Fi6bJvIBUakEdwkZHJcqWZ1%2Fimg.jpg&quot; onerror=&quot;this.onerror=null; this.src='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png'; this.srcset='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png';&quot; loading=&quot;lazy&quot; width=&quot;4000&quot; height=&quot;3000&quot;/&gt;&lt;/span&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/cTqoUp/btrycb3eB1b/Zy9UeaOrpPDhkmbbUVMACK/img.jpg&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/cTqoUp/btrycb3eB1b/Zy9UeaOrpPDhkmbbUVMACK/img.jpg&quot; data-is-animation=&quot;false&quot; data-origin-width=&quot;3000&quot; data-origin-height=&quot;4000&quot; data-filename=&quot;KakaoTalk_Photo_2022-04-01-20-19-14 022.jpeg&quot; style=&quot;width: 21.426%;&quot; data-widthpercent=&quot;21.93&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/cTqoUp/btrycb3eB1b/Zy9UeaOrpPDhkmbbUVMACK/img.jpg&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FcTqoUp%2Fbtrycb3eB1b%2FZy9UeaOrpPDhkmbbUVMACK%2Fimg.jpg&quot; onerror=&quot;this.onerror=null; this.src='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png'; this.srcset='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png';&quot; loading=&quot;lazy&quot; width=&quot;3000&quot; height=&quot;4000&quot;/&gt;&lt;/span&gt;&lt;/div&gt;
&lt;/figure&gt;
&lt;figure class=&quot;imagegridblock&quot;&gt;
  &lt;div class=&quot;image-container&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/QJwqU/btrybYiQycQ/GZ3JWhvv9hxKZYegdL4r51/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/QJwqU/btrybYiQycQ/GZ3JWhvv9hxKZYegdL4r51/img.png&quot; data-is-animation=&quot;false&quot; data-origin-width=&quot;1333&quot; data-origin-height=&quot;877&quot; data-filename=&quot;blob&quot; style=&quot;width: 35.4607%; margin-right: 10px;&quot; data-widthpercent=&quot;36.31&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/QJwqU/btrybYiQycQ/GZ3JWhvv9hxKZYegdL4r51/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FQJwqU%2FbtrybYiQycQ%2FGZ3JWhvv9hxKZYegdL4r51%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;1333&quot; height=&quot;877&quot;/&gt;&lt;/span&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/dggR6O/btrydfjBfK5/CvWwpfw8AnGXv17a1y3Cu1/img.jpg&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/dggR6O/btrydfjBfK5/CvWwpfw8AnGXv17a1y3Cu1/img.jpg&quot; data-is-animation=&quot;false&quot; data-origin-width=&quot;4000&quot; data-origin-height=&quot;3000&quot; data-filename=&quot;KakaoTalk_Photo_2022-04-01-20-19-13 019.jpeg&quot; style=&quot;width: 31.1068%; margin-right: 10px;&quot; data-widthpercent=&quot;31.85&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/dggR6O/btrydfjBfK5/CvWwpfw8AnGXv17a1y3Cu1/img.jpg&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FdggR6O%2FbtrydfjBfK5%2FCvWwpfw8AnGXv17a1y3Cu1%2Fimg.jpg&quot; onerror=&quot;this.onerror=null; this.src='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png'; this.srcset='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png';&quot; loading=&quot;lazy&quot; width=&quot;4000&quot; height=&quot;3000&quot;/&gt;&lt;/span&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/lLmO8/btrycwszhUr/6Mertixx3lKGmpQl5kyKS0/img.jpg&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/lLmO8/btrycwszhUr/6Mertixx3lKGmpQl5kyKS0/img.jpg&quot; data-is-animation=&quot;false&quot; data-origin-width=&quot;4000&quot; data-origin-height=&quot;3000&quot; data-filename=&quot;KakaoTalk_Photo_2022-04-01-20-19-13 021.jpeg&quot; style=&quot;width: 31.1068%;&quot; data-widthpercent=&quot;31.84&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/lLmO8/btrycwszhUr/6Mertixx3lKGmpQl5kyKS0/img.jpg&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FlLmO8%2FbtrycwszhUr%2F6Mertixx3lKGmpQl5kyKS0%2Fimg.jpg&quot; onerror=&quot;this.onerror=null; this.src='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png'; this.srcset='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png';&quot; loading=&quot;lazy&quot; width=&quot;4000&quot; height=&quot;3000&quot;/&gt;&lt;/span&gt;&lt;/div&gt;
&lt;/figure&gt;
&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;color: #000000;&quot;&gt;이 가운데 있는 건물 12층이 제가 스프린트를 진행하게 될 건물입니다. 처음 딱 들어가니 마이크로 소프트라고 떡하니 적혀있었고 출입문 들어갈때 쓰는 명찰같은걸 주더라구요 이걸 받고 안에 들어갔습니다. 안은 여기가 마소 건물이다 라는걸 보여주듯이 서피스 프로라던가 마소 마우스 키보드라던가 많은 제품들이 진열되어 있었고 이것들을 구경하면서 회의실로 들어가서 기다리니 스프린트를 시작했습니다.&lt;/span&gt;&lt;/p&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-filename=&quot;KakaoTalk_Photo_2022-04-01-20-19-10 007.jpeg&quot; data-origin-width=&quot;1439&quot; data-origin-height=&quot;1079&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/F1SM8/btrydIeJVk2/AFXVrp7AqbisiUaU1AkbPk/img.jpg&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/F1SM8/btrydIeJVk2/AFXVrp7AqbisiUaU1AkbPk/img.jpg&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/F1SM8/btrydIeJVk2/AFXVrp7AqbisiUaU1AkbPk/img.jpg&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FF1SM8%2FbtrydIeJVk2%2FAFXVrp7AqbisiUaU1AkbPk%2Fimg.jpg&quot; onerror=&quot;this.onerror=null; this.src='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png'; this.srcset='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png';&quot; loading=&quot;lazy&quot; width=&quot;1439&quot; height=&quot;1079&quot; data-filename=&quot;KakaoTalk_Photo_2022-04-01-20-19-10 007.jpeg&quot; data-origin-width=&quot;1439&quot; data-origin-height=&quot;1079&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;figure class=&quot;imagegridblock&quot;&gt;
  &lt;div class=&quot;image-container&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/AXmDj/btrydJdIR5L/6D2FBdDjaz3fLume7hnbj0/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/AXmDj/btrydJdIR5L/6D2FBdDjaz3fLume7hnbj0/img.png&quot; data-is-animation=&quot;false&quot; data-origin-width=&quot;1956&quot; data-origin-height=&quot;1620&quot; data-filename=&quot;blob&quot; data-widthpercent=&quot;46.87&quot; style=&quot;width: 46.3203%; margin-right: 10px;&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/AXmDj/btrydJdIR5L/6D2FBdDjaz3fLume7hnbj0/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FAXmDj%2FbtrydJdIR5L%2F6D2FBdDjaz3fLume7hnbj0%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;1956&quot; height=&quot;1620&quot;/&gt;&lt;/span&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/ms3Yf/btryd7SRTPf/YoyVnsymKb6Yw2UfQ3win1/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/ms3Yf/btryd7SRTPf/YoyVnsymKb6Yw2UfQ3win1/img.png&quot; data-is-animation=&quot;false&quot; data-origin-width=&quot;1974&quot; data-origin-height=&quot;1442&quot; data-filename=&quot;Screenshot at Mar 29 15-56-32.png&quot; data-widthpercent=&quot;53.13&quot; style=&quot;width: 52.5169%;&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/ms3Yf/btryd7SRTPf/YoyVnsymKb6Yw2UfQ3win1/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2Fms3Yf%2Fbtryd7SRTPf%2FYoyVnsymKb6Yw2UfQ3win1%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;1974&quot; height=&quot;1442&quot;/&gt;&lt;/span&gt;&lt;/div&gt;
&lt;/figure&gt;
&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;color: #000000;&quot;&gt;화상으로 인트로를 했는데, 사실 영어로 의사소통을 하기도 했고 해서 모든 말은 대충 넘겨 들었고 인트로가 끝나니 팀별로 나누어 스프린트를 시작하였습니다. 회사의 업종에 따라 팀을 나눈거 같았고 저는 Team C로 배정받았습니다. 스프린트가 어떤식으로 진행됐냐면 총 6개의 챌린지가 존재하고, 각각의 4~6개의 과제들이 준비되어져 있었습니다. 이 과제들을 하나하나 풀면서 챌린지를 끝마치는 방식이었습니다. 스프린트는 무조건 여기까지 하세요 같은 분위기가 아닌 프리한 분위기로 진행을 하였고 스프린트를 진행하다가 막히면 과자를 먹거나 쉬거나 하면서 진행할 수 있었고 최대한 편하게 해주려는 모습이 보였습니다.&lt;/span&gt;&lt;/p&gt;
&lt;p&gt;&lt;figure class=&quot;imagegridblock&quot;&gt;
  &lt;div class=&quot;image-container&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/btcGH7/btrycQj4qEH/iVuoF1aoP3wIEZlLdehYq0/img.jpg&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/btcGH7/btrycQj4qEH/iVuoF1aoP3wIEZlLdehYq0/img.jpg&quot; data-is-animation=&quot;false&quot; data-origin-width=&quot;3000&quot; data-origin-height=&quot;4000&quot; data-filename=&quot;KakaoTalk_Photo_2022-04-01-20-19-14 024.jpeg&quot; data-widthpercent=&quot;33.33&quot; style=&quot;width: 32.5581%; margin-right: 10px;&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/btcGH7/btrycQj4qEH/iVuoF1aoP3wIEZlLdehYq0/img.jpg&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FbtcGH7%2FbtrycQj4qEH%2FiVuoF1aoP3wIEZlLdehYq0%2Fimg.jpg&quot; onerror=&quot;this.onerror=null; this.src='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png'; this.srcset='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png';&quot; loading=&quot;lazy&quot; width=&quot;3000&quot; height=&quot;4000&quot;/&gt;&lt;/span&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/WEwjE/btrydy4fLX0/reaPnYI5KxItUrkEsKKy1k/img.jpg&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/WEwjE/btrydy4fLX0/reaPnYI5KxItUrkEsKKy1k/img.jpg&quot; data-is-animation=&quot;false&quot; data-origin-width=&quot;3000&quot; data-origin-height=&quot;4000&quot; data-filename=&quot;KakaoTalk_Photo_2022-04-01-20-19-12 016.jpeg&quot; style=&quot;width: 32.5581%; margin-right: 10px;&quot; data-widthpercent=&quot;33.33&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/WEwjE/btrydy4fLX0/reaPnYI5KxItUrkEsKKy1k/img.jpg&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FWEwjE%2Fbtrydy4fLX0%2FreaPnYI5KxItUrkEsKKy1k%2Fimg.jpg&quot; onerror=&quot;this.onerror=null; this.src='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png'; this.srcset='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png';&quot; loading=&quot;lazy&quot; width=&quot;3000&quot; height=&quot;4000&quot;/&gt;&lt;/span&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/eq2Lhy/btrycDE0KmS/iBq0DzhH9sfcZg1Ctaj3F1/img.jpg&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/eq2Lhy/btrycDE0KmS/iBq0DzhH9sfcZg1Ctaj3F1/img.jpg&quot; data-is-animation=&quot;false&quot; data-origin-width=&quot;3000&quot; data-origin-height=&quot;4000&quot; data-widthpercent=&quot;33.34&quot; data-filename=&quot;KakaoTalk_Photo_2022-04-01-20-19-10 010.jpeg&quot; style=&quot;width: 32.5581%;&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/eq2Lhy/btrycDE0KmS/iBq0DzhH9sfcZg1Ctaj3F1/img.jpg&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2Feq2Lhy%2FbtrycDE0KmS%2FiBq0DzhH9sfcZg1Ctaj3F1%2Fimg.jpg&quot; onerror=&quot;this.onerror=null; this.src='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png'; this.srcset='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png';&quot; loading=&quot;lazy&quot; width=&quot;3000&quot; height=&quot;4000&quot;/&gt;&lt;/span&gt;&lt;/div&gt;
&lt;/figure&gt;
&lt;figure class=&quot;imagegridblock&quot;&gt;
  &lt;div class=&quot;image-container&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/wIiFR/btryc67ZVcc/vZTUVq0hAr3WepmeDyZ161/img.jpg&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/wIiFR/btryc67ZVcc/vZTUVq0hAr3WepmeDyZ161/img.jpg&quot; data-is-animation=&quot;false&quot; data-origin-width=&quot;4000&quot; data-origin-height=&quot;3000&quot; data-filename=&quot;KakaoTalk_Photo_2022-04-01-20-19-12 015.jpeg&quot; style=&quot;width: 49.4186%; margin-right: 10px;&quot; data-widthpercent=&quot;50&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/wIiFR/btryc67ZVcc/vZTUVq0hAr3WepmeDyZ161/img.jpg&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FwIiFR%2Fbtryc67ZVcc%2FvZTUVq0hAr3WepmeDyZ161%2Fimg.jpg&quot; onerror=&quot;this.onerror=null; this.src='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png'; this.srcset='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png';&quot; loading=&quot;lazy&quot; width=&quot;4000&quot; height=&quot;3000&quot;/&gt;&lt;/span&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/bNFNBA/btrybMCLqNH/0T8Y123MzCwGNtouArzVR0/img.jpg&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/bNFNBA/btrybMCLqNH/0T8Y123MzCwGNtouArzVR0/img.jpg&quot; data-is-animation=&quot;false&quot; data-origin-width=&quot;4000&quot; data-origin-height=&quot;3000&quot; data-filename=&quot;KakaoTalk_Photo_2022-04-01-20-19-12 017.jpeg&quot; style=&quot;width: 49.4186%;&quot; data-widthpercent=&quot;50&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/bNFNBA/btrybMCLqNH/0T8Y123MzCwGNtouArzVR0/img.jpg&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FbNFNBA%2FbtrybMCLqNH%2F0T8Y123MzCwGNtouArzVR0%2Fimg.jpg&quot; onerror=&quot;this.onerror=null; this.src='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png'; this.srcset='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png';&quot; loading=&quot;lazy&quot; width=&quot;4000&quot; height=&quot;3000&quot;/&gt;&lt;/span&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/cqXJDf/btryc8dGGMd/msc9uQmG2iGWLDTDrqdVF0/img.jpg&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/cqXJDf/btryc8dGGMd/msc9uQmG2iGWLDTDrqdVF0/img.jpg&quot; data-is-animation=&quot;false&quot; data-origin-width=&quot;4000&quot; data-origin-height=&quot;3000&quot; data-filename=&quot;KakaoTalk_Photo_2022-04-01-20-19-12 018.jpeg&quot; style=&quot;width: 49.4186%; margin-right: 10px; margin-top: 10px;&quot; data-widthpercent=&quot;50&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/cqXJDf/btryc8dGGMd/msc9uQmG2iGWLDTDrqdVF0/img.jpg&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FcqXJDf%2Fbtryc8dGGMd%2Fmsc9uQmG2iGWLDTDrqdVF0%2Fimg.jpg&quot; onerror=&quot;this.onerror=null; this.src='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png'; this.srcset='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png';&quot; loading=&quot;lazy&quot; width=&quot;4000&quot; height=&quot;3000&quot;/&gt;&lt;/span&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/bsfj4Y/btrycdUmSZU/tKkfqnXdBQByIIiasp4Pxk/img.jpg&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/bsfj4Y/btrycdUmSZU/tKkfqnXdBQByIIiasp4Pxk/img.jpg&quot; data-is-animation=&quot;false&quot; data-origin-width=&quot;4000&quot; data-origin-height=&quot;3000&quot; data-filename=&quot;KakaoTalk_Photo_2022-04-01-20-19-11 014.jpeg&quot; style=&quot;width: 49.4186%; margin-top: 10px;&quot; data-widthpercent=&quot;50&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/bsfj4Y/btrycdUmSZU/tKkfqnXdBQByIIiasp4Pxk/img.jpg&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2Fbsfj4Y%2FbtrycdUmSZU%2FtKkfqnXdBQByIIiasp4Pxk%2Fimg.jpg&quot; onerror=&quot;this.onerror=null; this.src='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png'; this.srcset='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png';&quot; loading=&quot;lazy&quot; width=&quot;4000&quot; height=&quot;3000&quot;/&gt;&lt;/span&gt;&lt;/div&gt;
&lt;/figure&gt;
&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;color: #000000;&quot;&gt;우리 팀은 인프라쪽 하시던 분 한분과 백엔드 개발자 처럼 보이는 분 한 분 그리고 나 이렇게 진행을 했습니다. 다행히 다들 독커를 다뤄본 사람들이라서, 어느정도 수월하게 도전과제 3번인 쿠버네티스 전까지 갈 수 있었습니다. 그렇게 스프린트 Day1을 마무리 짓고 다들 집으로 돌아갔습니다. 아 그리고 돌아가기전에 선물도 줬는데 보니 스벅 텀블러를 줬습니다.(내심 Azure 크레딧을 바랬지만, 아니었습니다...)&lt;/span&gt;&lt;/p&gt;
&lt;p&gt;&lt;figure class=&quot;imagegridblock&quot;&gt;
  &lt;div class=&quot;image-container&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/lq3te/btrydHGWFiO/bGIaD4zqkrEyhGqbKAuOD0/img.jpg&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/lq3te/btrydHGWFiO/bGIaD4zqkrEyhGqbKAuOD0/img.jpg&quot; data-is-animation=&quot;false&quot; data-origin-width=&quot;3000&quot; data-origin-height=&quot;4000&quot; data-filename=&quot;KakaoTalk_Photo_2022-04-01-20-19-10 009.jpeg&quot; style=&quot;width: 49.4186%; margin-right: 10px;&quot; data-widthpercent=&quot;50&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/lq3te/btrydHGWFiO/bGIaD4zqkrEyhGqbKAuOD0/img.jpg&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2Flq3te%2FbtrydHGWFiO%2FbGIaD4zqkrEyhGqbKAuOD0%2Fimg.jpg&quot; onerror=&quot;this.onerror=null; this.src='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png'; this.srcset='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png';&quot; loading=&quot;lazy&quot; width=&quot;3000&quot; height=&quot;4000&quot;/&gt;&lt;/span&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/bx0cc7/btryeyitV4Q/Rw70NMAycc4ASmwCCLVbg0/img.jpg&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/bx0cc7/btryeyitV4Q/Rw70NMAycc4ASmwCCLVbg0/img.jpg&quot; data-is-animation=&quot;false&quot; data-origin-width=&quot;3000&quot; data-origin-height=&quot;4000&quot; data-filename=&quot;KakaoTalk_Photo_2022-04-01-20-19-10 008.jpeg&quot; style=&quot;width: 49.4186%;&quot; data-widthpercent=&quot;50&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/bx0cc7/btryeyitV4Q/Rw70NMAycc4ASmwCCLVbg0/img.jpg&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2Fbx0cc7%2FbtryeyitV4Q%2FRw70NMAycc4ASmwCCLVbg0%2Fimg.jpg&quot; onerror=&quot;this.onerror=null; this.src='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png'; this.srcset='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png';&quot; loading=&quot;lazy&quot; width=&quot;3000&quot; height=&quot;4000&quot;/&gt;&lt;/span&gt;&lt;/div&gt;
&lt;/figure&gt;
&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;color: #000000;&quot;&gt;아 그리고 팀 내 코치를 해주시는 분이, 마소에 오면 창 밖 뷰를 찍어야 한다고 했습니다. 그래서 찍었습니다. 확실히 이쁘더라구요&lt;/span&gt;&lt;/p&gt;
&lt;p&gt;&lt;figure class=&quot;imagegridblock&quot;&gt;
  &lt;div class=&quot;image-container&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/7uPMd/btryeu79ICq/7RShYNb8fLzkolzkINQMG1/img.jpg&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/7uPMd/btryeu79ICq/7RShYNb8fLzkolzkINQMG1/img.jpg&quot; data-is-animation=&quot;false&quot; data-origin-width=&quot;4000&quot; data-origin-height=&quot;3000&quot; data-filename=&quot;KakaoTalk_Photo_2022-04-01-20-19-11 011.jpeg&quot; style=&quot;width: 49.4186%; margin-right: 10px;&quot; data-widthpercent=&quot;50&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/7uPMd/btryeu79ICq/7RShYNb8fLzkolzkINQMG1/img.jpg&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2F7uPMd%2Fbtryeu79ICq%2F7RShYNb8fLzkolzkINQMG1%2Fimg.jpg&quot; onerror=&quot;this.onerror=null; this.src='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png'; this.srcset='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png';&quot; loading=&quot;lazy&quot; width=&quot;4000&quot; height=&quot;3000&quot;/&gt;&lt;/span&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/dTcCgV/btryb17tYtm/94s897FImtfbLqDkbngOhk/img.jpg&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/dTcCgV/btryb17tYtm/94s897FImtfbLqDkbngOhk/img.jpg&quot; data-is-animation=&quot;false&quot; data-origin-width=&quot;4000&quot; data-origin-height=&quot;3000&quot; data-filename=&quot;KakaoTalk_Photo_2022-04-01-20-19-11 012.jpeg&quot; style=&quot;width: 49.4186%;&quot; data-widthpercent=&quot;50&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/dTcCgV/btryb17tYtm/94s897FImtfbLqDkbngOhk/img.jpg&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FdTcCgV%2Fbtryb17tYtm%2F94s897FImtfbLqDkbngOhk%2Fimg.jpg&quot; onerror=&quot;this.onerror=null; this.src='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png'; this.srcset='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png';&quot; loading=&quot;lazy&quot; width=&quot;4000&quot; height=&quot;3000&quot;/&gt;&lt;/span&gt;&lt;/div&gt;
&lt;/figure&gt;
&lt;/p&gt;
&lt;hr contenteditable=&quot;false&quot; data-ke-type=&quot;horizontalRule&quot; data-ke-style=&quot;style1&quot; /&gt;
&lt;h3 data-ke-size=&quot;size23&quot;&gt;&lt;b&gt;&lt;span style=&quot;color: #000000;&quot;&gt;둘째날&lt;/span&gt;&lt;/b&gt;&lt;/h3&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;color: #000000;&quot;&gt;첫째 날에는 개인전으로 이루어져, 도전과제를 해결해 나갔지만, 챌린지 4, 5부터는 팀워크로 진행해 갔습니다. 도전과제 3은 쿠버네티스 도전과제 4는 DevOps였고 각 팀 내에 쿠버네티스를 담당할 분 두명 DevOps를 담당할 사람 한명 해서 진행하였는데, 저는 자동화에 관심이 많았기 때문에 DevOps를 선택했고 진행해 나갔습니다. 둘째날에는 저희 팀은 불이 붙어서 열심히 한 기억밖에 없습니다. 사진 찍을 시간이 없었단 말이죠 ㅎㅎㅎ 그나마 찍은게 아래 정도였습니다.&lt;/span&gt;&lt;/p&gt;
&lt;p&gt;&lt;figure class=&quot;imagegridblock&quot;&gt;
  &lt;div class=&quot;image-container&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/y0pHx/btrydfYgusU/0f44iqo0N7apjA278LOVLk/img.jpg&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/y0pHx/btrydfYgusU/0f44iqo0N7apjA278LOVLk/img.jpg&quot; data-is-animation=&quot;false&quot; data-origin-width=&quot;4000&quot; data-origin-height=&quot;3000&quot; data-filename=&quot;KakaoTalk_Photo_2022-04-01-20-19-09 004.jpeg&quot; style=&quot;width: 32.5581%; margin-right: 10px;&quot; data-widthpercent=&quot;33.33&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/y0pHx/btrydfYgusU/0f44iqo0N7apjA278LOVLk/img.jpg&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2Fy0pHx%2FbtrydfYgusU%2F0f44iqo0N7apjA278LOVLk%2Fimg.jpg&quot; onerror=&quot;this.onerror=null; this.src='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png'; this.srcset='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png';&quot; loading=&quot;lazy&quot; width=&quot;4000&quot; height=&quot;3000&quot;/&gt;&lt;/span&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/MORhS/btrycQdkEQM/lK9Ph60VTPkcItse4Ie5Dk/img.jpg&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/MORhS/btrycQdkEQM/lK9Ph60VTPkcItse4Ie5Dk/img.jpg&quot; data-is-animation=&quot;false&quot; data-origin-width=&quot;4000&quot; data-origin-height=&quot;3000&quot; data-filename=&quot;KakaoTalk_Photo_2022-04-01-20-19-09 005.jpeg&quot; style=&quot;width: 32.5581%; margin-right: 10px;&quot; data-widthpercent=&quot;33.33&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/MORhS/btrycQdkEQM/lK9Ph60VTPkcItse4Ie5Dk/img.jpg&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FMORhS%2FbtrycQdkEQM%2FlK9Ph60VTPkcItse4Ie5Dk%2Fimg.jpg&quot; onerror=&quot;this.onerror=null; this.src='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png'; this.srcset='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png';&quot; loading=&quot;lazy&quot; width=&quot;4000&quot; height=&quot;3000&quot;/&gt;&lt;/span&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/bF55Yl/btryezBEKZv/6NQuwksPASm6o0nrWHy0Ak/img.jpg&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/bF55Yl/btryezBEKZv/6NQuwksPASm6o0nrWHy0Ak/img.jpg&quot; data-is-animation=&quot;false&quot; data-origin-width=&quot;4000&quot; data-origin-height=&quot;3000&quot; data-filename=&quot;KakaoTalk_Photo_2022-04-01-20-19-10 006.jpeg&quot; style=&quot;width: 32.5581%;&quot; data-widthpercent=&quot;33.34&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/bF55Yl/btryezBEKZv/6NQuwksPASm6o0nrWHy0Ak/img.jpg&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FbF55Yl%2FbtryezBEKZv%2F6NQuwksPASm6o0nrWHy0Ak%2Fimg.jpg&quot; onerror=&quot;this.onerror=null; this.src='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png'; this.srcset='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png';&quot; loading=&quot;lazy&quot; width=&quot;4000&quot; height=&quot;3000&quot;/&gt;&lt;/span&gt;&lt;/div&gt;
&lt;/figure&gt;
&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;color: #000000;&quot;&gt;그렇게 둘째날은 도전과제 5 - 보안 두번째 문제까지 해결하고 스프린트를 마무리 지었습니다. 돌아가기 전에 스프린트 종료식을 진행하고 가기전에 선물을 줬습니다. 이번에는 진짜 Azure 크레딧 주나? 라는 기대로 한번 까봤지만, 아쉽게도 크레딧은 아니고 무선 선풍기를 주더라구요 그래도 이 선풍기가 4만원 짜리라 꽤 가격이 나가서 만족스러운 선물이긴 했습니다.&lt;/span&gt;&lt;/p&gt;
&lt;p&gt;&lt;figure class=&quot;imagegridblock&quot;&gt;
  &lt;div class=&quot;image-container&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/bcRjKC/btryccVt3ky/jmvo9Pb3C0l25lL3m9KExk/img.jpg&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/bcRjKC/btryccVt3ky/jmvo9Pb3C0l25lL3m9KExk/img.jpg&quot; data-is-animation=&quot;false&quot; data-origin-width=&quot;4000&quot; data-origin-height=&quot;3000&quot; data-filename=&quot;KakaoTalk_Photo_2022-04-01-20-19-09 002.jpeg&quot; style=&quot;width: 49.4186%; margin-right: 10px;&quot; data-widthpercent=&quot;50&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/bcRjKC/btryccVt3ky/jmvo9Pb3C0l25lL3m9KExk/img.jpg&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FbcRjKC%2FbtryccVt3ky%2Fjmvo9Pb3C0l25lL3m9KExk%2Fimg.jpg&quot; onerror=&quot;this.onerror=null; this.src='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png'; this.srcset='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png';&quot; loading=&quot;lazy&quot; width=&quot;4000&quot; height=&quot;3000&quot;/&gt;&lt;/span&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/blczpE/btrycQdkXBw/2OMPRmrD9LY7UTi3IMCbc0/img.jpg&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/blczpE/btrycQdkXBw/2OMPRmrD9LY7UTi3IMCbc0/img.jpg&quot; data-is-animation=&quot;false&quot; data-origin-width=&quot;4000&quot; data-origin-height=&quot;3000&quot; data-filename=&quot;KakaoTalk_Photo_2022-04-01-20-19-08 001.jpeg&quot; style=&quot;width: 49.4186%;&quot; data-widthpercent=&quot;50&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/blczpE/btrycQdkXBw/2OMPRmrD9LY7UTi3IMCbc0/img.jpg&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FblczpE%2FbtrycQdkXBw%2F2OMPRmrD9LY7UTi3IMCbc0%2Fimg.jpg&quot; onerror=&quot;this.onerror=null; this.src='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png'; this.srcset='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png';&quot; loading=&quot;lazy&quot; width=&quot;4000&quot; height=&quot;3000&quot;/&gt;&lt;/span&gt;&lt;/div&gt;
&lt;/figure&gt;
&lt;/p&gt;
&lt;hr contenteditable=&quot;false&quot; data-ke-type=&quot;horizontalRule&quot; data-ke-style=&quot;style1&quot; /&gt;
&lt;h3 data-ke-size=&quot;size23&quot;&gt;&lt;b&gt;&lt;span style=&quot;color: #000000;&quot;&gt;마무리&lt;/span&gt;&lt;/b&gt;&lt;/h3&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;color: #000000;&quot;&gt;사실, 데브옵스나 쿠버네티스는 저는 잘 몰랐습니다. 그냥 예전에 Docker를 조금 사용해 본 정도였고, 그것 마저도 엄청 잘 사용하지는 않았습니다. 그럼에도 이번 스프린트는 꽤 좋았다고 봅니다. 아무것도 모르는 저에게 조금이나마 지식을 안겨주었고, 그 지식을 어떻게 활용하면 좋을지 방향을 알려주었습니다.&lt;/span&gt;&lt;/p&gt;
&lt;p&gt;&lt;figure class=&quot;imagegridblock&quot;&gt;
  &lt;div class=&quot;image-container&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/ciJQGv/btrycQRXmxz/tw4SRSLRikXQg52OGocXqK/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/ciJQGv/btrycQRXmxz/tw4SRSLRikXQg52OGocXqK/img.png&quot; data-is-animation=&quot;false&quot; data-origin-width=&quot;3582&quot; data-origin-height=&quot;1900&quot; data-filename=&quot;Screenshot at Mar 29 15-57-44.png&quot; style=&quot;width: 49.5224%; margin-right: 10px;&quot; data-widthpercent=&quot;50.11&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/ciJQGv/btrycQRXmxz/tw4SRSLRikXQg52OGocXqK/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FciJQGv%2FbtrycQRXmxz%2Ftw4SRSLRikXQg52OGocXqK%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;3582&quot; height=&quot;1900&quot;/&gt;&lt;/span&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/lFkEo/btrye3P3uzJ/CPcyEj11BBi1oaWCODVgO1/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/lFkEo/btrye3P3uzJ/CPcyEj11BBi1oaWCODVgO1/img.png&quot; data-is-animation=&quot;false&quot; data-origin-width=&quot;3582&quot; data-origin-height=&quot;1908&quot; data-widthpercent=&quot;49.89&quot; data-filename=&quot;Screenshot at Mar 29 15-58-12.png&quot; style=&quot;width: 49.3148%;&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/lFkEo/btrye3P3uzJ/CPcyEj11BBi1oaWCODVgO1/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FlFkEo%2Fbtrye3P3uzJ%2FCPcyEj11BBi1oaWCODVgO1%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;3582&quot; height=&quot;1908&quot;/&gt;&lt;/span&gt;&lt;/div&gt;
&lt;/figure&gt;
&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;color: #000000;&quot;&gt;한번쯤은 참여해 볼 법한 스프린트라고 생각이 드는 행사였습니다. 그리고 이 스프린트가 끝나면 아래와 같이 나무를 주는데 이것도 꽤 좋은 마무리였다고 생각이 듭니다. 그런 의미에서 사진을 찍었습니다 ㅎㅎㅎ&lt;/span&gt;&lt;/p&gt;
&lt;p&gt;&lt;figure class=&quot;imagegridblock&quot;&gt;
  &lt;div class=&quot;image-container&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/4aJLc/btryeuf1dV8/59E9aCLFG2jBLskxQ0cKsk/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/4aJLc/btryeuf1dV8/59E9aCLFG2jBLskxQ0cKsk/img.png&quot; data-origin-width=&quot;577&quot; data-origin-height=&quot;839&quot; data-filename=&quot;Screenshot at Mar 30 09-42-52.png&quot; style=&quot;width: 18.2399%; margin-right: 10px;&quot; data-widthpercent=&quot;18.67&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/4aJLc/btryeuf1dV8/59E9aCLFG2jBLskxQ0cKsk/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2F4aJLc%2Fbtryeuf1dV8%2F59E9aCLFG2jBLskxQ0cKsk%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;577&quot; height=&quot;839&quot;/&gt;&lt;/span&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/55zei/btrydAgIYGG/pYrmKkiVSBoQy8e5DvE1C0/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/55zei/btrydAgIYGG/pYrmKkiVSBoQy8e5DvE1C0/img.png&quot; data-origin-width=&quot;895&quot; data-origin-height=&quot;923&quot; data-filename=&quot;Screenshot at Mar 30 09-42-38.png&quot; data-widthpercent=&quot;26.33&quot; style=&quot;width: 25.7175%; margin-right: 10px;&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/55zei/btrydAgIYGG/pYrmKkiVSBoQy8e5DvE1C0/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2F55zei%2FbtrydAgIYGG%2FpYrmKkiVSBoQy8e5DvE1C0%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;895&quot; height=&quot;923&quot;/&gt;&lt;/span&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/bDnydf/btrybYpGbGU/gwu8HXi5ZJszFFNdKnU5D0/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/bDnydf/btrybYpGbGU/gwu8HXi5ZJszFFNdKnU5D0/img.png&quot; data-is-animation=&quot;false&quot; data-origin-width=&quot;1916&quot; data-origin-height=&quot;946&quot; data-filename=&quot;Screenshot at Mar 30 09-43-34.png&quot; style=&quot;width: 53.717%;&quot; data-widthpercent=&quot;55&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/bDnydf/btrybYpGbGU/gwu8HXi5ZJszFFNdKnU5D0/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FbDnydf%2FbtrybYpGbGU%2Fgwu8HXi5ZJszFFNdKnU5D0%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;1916&quot; height=&quot;946&quot;/&gt;&lt;/span&gt;&lt;/div&gt;
&lt;/figure&gt;
&lt;/p&gt;</description>
      <category>라이프 로그</category>
      <author>방현준</author>
      <guid isPermaLink="true">https://noogoonaa.tistory.com/109</guid>
      <comments>https://noogoonaa.tistory.com/109#entry109comment</comments>
      <pubDate>Fri, 1 Apr 2022 21:05:12 +0900</pubDate>
    </item>
    <item>
      <title>PWA(Progressive Web App) 너 대체 뭐니?</title>
      <link>https://noogoonaa.tistory.com/108</link>
      <description>&lt;p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-filename=&quot;800px-Progressive_Web_Apps_Logo.svg.png&quot; data-origin-width=&quot;800&quot; data-origin-height=&quot;301&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/b9R0I6/btrwXz3PkGp/DZSy6b9TBSCl4mLrDKQcWk/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/b9R0I6/btrwXz3PkGp/DZSy6b9TBSCl4mLrDKQcWk/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/b9R0I6/btrwXz3PkGp/DZSy6b9TBSCl4mLrDKQcWk/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2Fb9R0I6%2FbtrwXz3PkGp%2FDZSy6b9TBSCl4mLrDKQcWk%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;800&quot; height=&quot;301&quot; data-filename=&quot;800px-Progressive_Web_Apps_Logo.svg.png&quot; data-origin-width=&quot;800&quot; data-origin-height=&quot;301&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;PWA라는 용어를 들어보신적 있으신가요? 웹 프론트엔드 개발 직군에 있으신 분들이라면 한번씩 들어봤을 이 용어 PWA!&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;오늘은 이 PWA가 무엇인지, 그리고 어떻게 사용할 수 있는지에 대해서 한번 알아보도록 하겠습니다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;h2 data-ke-size=&quot;size26&quot;&gt;&lt;b&gt;PWA&amp;nbsp;란?&lt;/b&gt;&lt;/h2&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-filename=&quot;1_cTwE_ur2vdFS_w21mGGWsg.png&quot; data-origin-width=&quot;1400&quot; data-origin-height=&quot;425&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/bERQf8/btrwRxGzDoZ/RNdzwjvQBHavfIkWjAfJsk/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/bERQf8/btrwRxGzDoZ/RNdzwjvQBHavfIkWjAfJsk/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/bERQf8/btrwRxGzDoZ/RNdzwjvQBHavfIkWjAfJsk/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FbERQf8%2FbtrwRxGzDoZ%2FRNdzwjvQBHavfIkWjAfJsk%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;1400&quot; height=&quot;425&quot; data-filename=&quot;1_cTwE_ur2vdFS_w21mGGWsg.png&quot; data-origin-width=&quot;1400&quot; data-origin-height=&quot;425&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;background-color: #ffffff;&quot;&gt;PWA는 프로그레시브 웹 앱(progressive web app)의 준말로, 웹 기술(HTML, CSS, Javascript)을 가지고 모바일 네이티브 앱과 비슷하게 만들 수 있는 기술입니다. 사실 모바일 웹만으로는 네이티브의 다양한 기능들과 성능을 제공하기가 참 힘듭니다. 그렇다고 네이티브 앱을 만들기에는 시간과 개발비가 많이들고 다운로드를 위해 플레이스토어를 통해야 하므로 접근성도 떨어지게 됩니다. 하지만 PWA는 네이티브의 몇몇 기능을 구현할 수 있고 개발시간도 단축할 수 있습니다.&lt;/span&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;h2 data-ke-size=&quot;size26&quot;&gt;&lt;b&gt;PWA가&amp;nbsp;탄생한 배경&lt;/b&gt;&lt;/h2&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;2015년 구글의 엔지니어 알렉스 러셀의 글인 &lt;a href=&quot;https://infrequently.org/2015/06/progressive-apps-escaping-tabs-without-losing-our-soul/&quot;&gt;Progressive Web Apps: Escaping Tabs Without Losing Our Soul&lt;/a&gt;을 시작으로 2016년 구글은 Google I/O라는 컨퍼런스에서 PWA라는 기술을 선보였습니다. 그 당시 PWA의 발표에 꽤 많은 호응을 얻었습니다. 그 당시 웹과 모바일은 철저히 분리되어 있었습니다. 물론 그 당시에도 모바일 웹은 존재했습니다. 하지만 모바일 웹은 전혀 모바일스럽지 않았고, 성능또한 보장할 수 없었기 때문에 모바일 웹 보다는 네이티브를 더 선호했습니다. 그런데 PWA는 App Like하고 Natively한 성능과 기능을 제공하니 당연히 호응이 나올수 밖에 없었죠.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;h2 data-ke-size=&quot;size26&quot;&gt;&lt;b&gt;PWA 장단점 비교&lt;/b&gt;&lt;/h2&gt;
&lt;h3 data-ke-size=&quot;size23&quot;&gt;장점&lt;/h3&gt;
&lt;ul style=&quot;list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li&gt;웹을 설치할 수 있다.&lt;/li&gt;
&lt;li&gt;인터넷 브라우저 실행 없이 단시간에 웹을 실행시킬 수 있다.&lt;/li&gt;
&lt;li&gt;푸시 알림 및 블루투스 연결 등 네이티브 기능을 사용할 수 있다.&lt;/li&gt;
&lt;li&gt;별도의 심사 없이 배포가 가능하다.&lt;/li&gt;
&lt;li&gt;빠른 성능을 제공한다.&lt;/li&gt;
&lt;li&gt;오프라인에서도 사용이 가능하도록 캐싱이 잘되어 있다.&lt;/li&gt;
&lt;/ul&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;h3 data-ke-size=&quot;size23&quot;&gt;단점&lt;/h3&gt;
&lt;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;네이티브의 기능을 모두 사용할 수 없고, OS에서 기능을 지원하지 않는다면 PWA에서 존재하더라도 사용할 수 없음&lt;/li&gt;
&lt;li&gt;앱스토어의 부재로인한 PWA 웹 앱 검색 불가(대표적인 웹 앱은 &lt;a href=&quot;https://www.pwastats.com/&quot; target=&quot;_blank&quot; rel=&quot;noopener&quot;&gt;PWAStats&lt;/a&gt;에서 확인 가능)&lt;/li&gt;
&lt;li&gt;PWA설치 시 복잡한 방법 요구&lt;/li&gt;
&lt;li&gt;애플&lt;/li&gt;
&lt;/ul&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;h2 data-ke-size=&quot;size26&quot;&gt;&lt;b&gt;PWA의 현재와 미래&lt;/b&gt;&lt;/h2&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;PWA는 현재 구글과 함께&amp;nbsp;&lt;span style=&quot;background-color: #ffffff; color: #454545;&quot;&gt;마이크로소프트, 모질라 등 많은 기업들이 참여하고 있습니다. 구글은 PWA기술을 통해 크롬 OS를 성장시키고 발전 시킬수 있으며 Fuchsia라는 구글의 차기 OS의 많은 Application을 손 쉽게 이관하여 가져올 수 있습니다. 마이크로소프트는 부진했던 모바일 시장에 진입할 수 있는 통로가 될 수 있으며, 손 쉽게 윈도우 운영체제에 어플리케이션을 얻을 수 있게 됩니다. 모질라 또한 마찬가지이구요.&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;background-color: #ffffff; color: #454545;&quot;&gt;하지만 애플은 이러한 PWA라는 기술의 크게 관심을 보이지 않고 있습니다. 애플에서 PWA의 모든 기술을 열어주게 되면 애플의 주 수입원인 인앱결제를 PWA내에 강제 할 수 없게되기 때문입니다. (현재도 이 인앱결제 수수료 때문에 스포티파이, 에픽게임즈 등이 소송을 벌이고 있다...)&lt;/span&gt;&lt;/p&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-filename=&quot;279d35bd854377d4fcd11c430d58b0476996d972895855556bf62598f335078a.webp&quot; data-origin-width=&quot;1399&quot; data-origin-height=&quot;962&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/Kqjrj/btrwTca5CgV/vgzXtzJgcqhF8ISrpyWl10/img.webp&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/Kqjrj/btrwTca5CgV/vgzXtzJgcqhF8ISrpyWl10/img.webp&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/Kqjrj/btrwTca5CgV/vgzXtzJgcqhF8ISrpyWl10/img.webp&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FKqjrj%2FbtrwTca5CgV%2FvgzXtzJgcqhF8ISrpyWl10%2Fimg.webp&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;1399&quot; height=&quot;962&quot; data-filename=&quot;279d35bd854377d4fcd11c430d58b0476996d972895855556bf62598f335078a.webp&quot; data-origin-width=&quot;1399&quot; data-origin-height=&quot;962&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;background-color: #ffffff; color: #454545;&quot;&gt;그럼에도 PWA의 미래는 꽤 유망하다고 생각합니다. 일단 많은 기업들(스포티파이, 구글밋, 홈디포 등)이 PWA로 전환하거나 개발을 하면서 유의미한 결과를 내보였으며, 트위터 같은 경우는 PWA기술을 적용하면서 세션당 페이지 수가 65% 증가하고 트윗이 75% 증가하였고 20%의 이탈율 감소 및 97%의 앱크기 감소를 이루어 냈습니다. 즉 PWA를 통해 꽤 높은 효율을 낼 수 있습니다.&amp;nbsp;&lt;/span&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;h2 data-ke-size=&quot;size26&quot;&gt;&lt;b&gt;&lt;span style=&quot;background-color: #ffffff; color: #454545;&quot;&gt;마무리&lt;/span&gt;&lt;/b&gt;&lt;/h2&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;background-color: #ffffff; color: #454545;&quot;&gt;결과적으로 PWA는 사용하면 좋은 성능을 이끌어낼 수 있는 기술입니다. 다만 PWA에 지속적인 성장은 앞으로 애플이 얼마만큼 지원을 할 것이며, 그와 더불어 얼마나 많은 기업들이 사용을 할지가 관건이라고 생각합니다. PWA가 꼭 사용해야할 기술도 아니거니와 사용자 입장에서는 귀찮은 웹 앱 설치 과정을 요구하기에 아직은 사용하면 좋지만, 필요없다면 굳이 사용할 필요는 없어보입니다.&lt;/span&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;h2 data-ke-size=&quot;size26&quot;&gt;&lt;b&gt;&lt;span style=&quot;background-color: #ffffff; color: #454545;&quot;&gt;참고자료&lt;/span&gt;&lt;/b&gt;&lt;/h2&gt;
&lt;ul style=&quot;list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li&gt;&lt;a href=&quot;https://blog.wishket.com/%ED%94%84%EB%A1%9C%EA%B7%B8%EB%A0%88%EC%8B%9C%EB%B8%8C-%EC%9B%B9-%EC%95%B1pwa%EC%9D%B4%EB%9E%80-%EB%AC%B4%EC%97%87%EC%9D%B4%EB%A9%B0-%EC%99%9C-%ED%95%84%EC%9A%94%ED%95%9C%EA%B0%80/&quot; target=&quot;_blank&quot; rel=&quot;noopener&quot;&gt;https://blog.wishket.com/&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://www.insilicogen.com/blog/350&quot; target=&quot;_blank&quot; rel=&quot;noopener&quot;&gt;https://www.insilicogen.com/blog/350&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://www.ciokorea.com/news/39944&quot; target=&quot;_blank&quot; rel=&quot;noopener&quot;&gt;https://www.ciokorea.com/news/39944&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://yozm.wishket.com/magazine/detail/940/&quot; target=&quot;_blank&quot; rel=&quot;noopener&quot;&gt;https://yozm.wishket.com/magazine/detail/940/&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://medium.flutterdevs.com/progressive-web-app-flutter-62c7dea05fc5&quot; target=&quot;_blank&quot; rel=&quot;noopener&quot;&gt;https://medium.flutterdevs.com/progressive-web-app-flutter-62c7dea05fc5&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://yceffort.kr/2020/11/pwa-pros-and-cons&quot; target=&quot;_blank&quot; rel=&quot;noopener&quot;&gt;https://yceffort.kr/2020/11/pwa-pros-and-cons&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://love2dev.com/pwa/ios/&quot; target=&quot;_blank&quot; rel=&quot;noopener&quot;&gt;https://love2dev.com/pwa/ios/&lt;/a&gt;​&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://yozm.wishket.com/magazine/detail/940/&quot; target=&quot;_blank&quot; rel=&quot;noopener&quot;&gt;https://yozm.wishket.com/magazine/detail/940/&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;</description>
      <category>프로그래밍 언어</category>
      <category>front-end</category>
      <category>frontend</category>
      <category>PWA</category>
      <author>방현준</author>
      <guid isPermaLink="true">https://noogoonaa.tistory.com/108</guid>
      <comments>https://noogoonaa.tistory.com/108#entry108comment</comments>
      <pubDate>Tue, 22 Mar 2022 22:38:16 +0900</pubDate>
    </item>
    <item>
      <title>지방대 공대생이 대기업 프론트엔드 개발자가 되기까지의 회고(부제 : 2021년 3년차 프론트엔드 개발자의 회고)</title>
      <link>https://noogoonaa.tistory.com/98</link>
      <description>&lt;h3 data-ke-size=&quot;size23&quot;&gt;&lt;b&gt;여는글&lt;/b&gt;&lt;/h3&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;최근, 회고를 중요하게 생각하는 개발자들이 늘고 있습니다. 하지만 많은 회고 글들을 볼때마다 왜 회고를 해야하고 회고가 주는 이점에 대해서 잘 몰랐습니다. 그냥 일기를 프로젝트 혹은 년 단위로 끊어서 하는거 아닌가라는 막연한 기록이라고 생각했었죠, 하지만 회사에서 스쿼드에 참여하고 스프린트 회고를 진행하면서 생각이 많이 바뀌었습니다. 회고를 진행하면서 그다음 스프린트에서 회고에서 피드백을 받았던 잘 못했던 부분을 한번 더 생각하는 저를 발견하였고, 이러한 부분을 고치려고 하는 저를 볼 수 있었습니다. 또, 제가 했던 일들을 다시한번 돌아볼 수 있엇던 계기가 되었죠. 회고의 중요성을 느깐 저는, 늦었지만 그동안 쓰지 않았던 회고를 한번 써보자고 마음을 먹었습니다. 아랫 글 부터는 타임라인 방식으로 회고가 작성될 예정이며 편한 글로 작성을 해보도록 하겠습니다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;h3 data-ke-size=&quot;size23&quot;&gt;&lt;b&gt;지방 H대 컴공과&lt;/b&gt;&lt;/h3&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;나는 고등학교때 까지 공부를 엄청 싫어했다. 그래서 항상 학교에서는 자고 집에서는 게임을 했다. 그러다 보니 자연스럽게 충남에 있는 한 지방대에 입학을 하게 되었다. 처음 입학은 시스템 제어 공학이라는 생소한 학과에 입학을 했다. 하지만, 어렸을 때 부터 꿈꾸던 개발자라는 꿈을 포기하고 싶지 않아서 열심히 학점을 맞춰 컴퓨터 공학과로 전과를 했다. 그렇게 3년동안 컴퓨터공학과 생활을 하였고 졸업을 할 수 있었다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;h4 data-ke-size=&quot;size20&quot;&gt;&lt;b&gt;잘했던 점&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;br /&gt;컴퓨터 공학과로 전과한 점은 지금 생각해보면 진짜 잘한 행동이라고 생각한다. 만약 컴공으로 전과를 하지 않았다면, 나는 지금 공장에 들어가서 설비일을 하고 있었을 것이다. 그리고 아마 재미없다고 금방 떄려쳤겠지.., 하지만 지금 나는 개발자가 되어서 즐겁게 일하고 있다. 이런게 바로 성(?)덕이 아닐까?&lt;br /&gt;&lt;br /&gt;&lt;/li&gt;
&lt;li&gt;&lt;b&gt;장학금을 위해 공부를 열심히 한 점&lt;/b&gt;&lt;br /&gt;나는 4년동안 나는 학자금 대출을 받으며 학비를 내야했다. 그렇기 때문에 학자금 대출을 줄이기 위해서는 장학금을 노려야 할 수 밖에 없었고 공부를 열심히 할 수 밖에 없었다. 그리고 대입공부는 내 적성에 안맞았지만, 컴퓨터 공부는 내 적성에 너무 잘 맞았다. 그래서 포기하지 않고 열심히 공부할 수 있었고 나쁘지 않은 학점으로 졸업을 할 수 있었다.&lt;/li&gt;
&lt;/ul&gt;
&lt;h4 data-ke-size=&quot;size20&quot;&gt;&lt;b&gt;못했던 점&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;br /&gt;나는 학교를 다니면서 할 수 있는 다양한 인턴쉽을 진행하지 않았다. 그 당시 내 생각은 학교를 다니면서 인턴쉽을 할 빠에 차라리 공부를 더해서 장학금을 받아야지라는 마인드가 더 컸다. 하자만 졸업하고 나서 취준 시장에 뛰어 들어가 보니 이 부분은 많이 아쉬운 부분이 되었다. 만약 인턴쉽을 진행하였다면 내 커리어에 많은 도움이 되었을텐데...&lt;/li&gt;
&lt;/ul&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;h3 data-ke-size=&quot;size23&quot;&gt;&lt;b&gt;국내 헬스케어 미국지사 I사&lt;/b&gt;&lt;/h3&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;나는 처음 실무를 미국 헬스케어 회사인 I사에서 진행했다. 영어도 못하면서 괜히 미국으로 가서 일을 한다고 설치고 다니던 시기가 이 시기였다. 이 과정에서 많은 좌절과 많은 고통을 느꼈지만, 지금 생각해보면 많은 좋은 경험들이 존재했다. 그 경험을 바탕으로 회고를 진행하자면 아래와 같다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;h4 data-ke-size=&quot;size20&quot;&gt;&lt;b&gt;잘 했던 점&lt;/b&gt;&lt;/h4&gt;
&lt;ul style=&quot;list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li&gt;&lt;b&gt;영어의 부족함을 많이 느꼈고 삶을 살기 위해서 악착같이 영어공부를 한 점&lt;/b&gt;&lt;br /&gt;사실 현지인들이 보기에 나는 영어 못하는 외국인이었을 것이다. 이 과정에서 몇몇 사람들은 나한테 말을 걸기를 포기했고, 나는 그 과정을 보며 좌절했다. 물론 이러한 과정에서 나는 영어 배우기를 포기하고 그냥 미국에 사는 한국인들과 어울릴 수 있었다. 하지만 그러기는 싫었다. 미국 땅을 밝고 있는 이 기회를 놓치기 싫었다. 그 때 부터 악착같이 영어공부를 하였고 어느정도 간단한 의사소통이 가능한 실력까지 높일 수 있었다.&lt;br /&gt;&lt;br /&gt;&lt;/li&gt;
&lt;li&gt;&lt;b&gt;첫 개발 실무에 들어가며 프론트엔드 개발자로 진로를 정한 점&lt;/b&gt;&lt;br /&gt;내가 처음 개발 실무를 진행하면서 배웠던 것은 ASP.NET MVC5 이다. 닷넷 같은경우는 C#기반의 풀 프레임워크이다. 이 과정에서 나는 C#보다는 JS에 좀 더 흥미를 느꼈다. 그냥 직관적으로 내가 작성한 코드가 눈에 보이다 보니 자연스럽게 JS에 호감을 더 느꼈던거 같다. 그러면서 자연스럽게 프론트엔드 개발을 더 많이 진행하게 되었다.&lt;br /&gt;&lt;br /&gt;&lt;/li&gt;
&lt;li&gt;&lt;b&gt;첫 프로젝트를 성공적으로 진행했던 점&lt;/b&gt;&lt;br /&gt;I사의 첫번쨰로 투입 되었던 프로젝트는 기존 프로젝트를 개편하는 작업이었다. 처음에는 어떠한 작업을 해야할 지 모르겠지만 점점 프론트엔드를 작업하면서 프론트엔드의 지식이 늘어가는 것을 느꼈고 성공적으로 프로젝트 개발을 완료 할 수 있었다.&lt;br /&gt;&lt;br /&gt;&lt;/li&gt;
&lt;li&gt;&lt;b&gt;미국을 최대한 많이 즐기고 왔던 점&lt;/b&gt;&lt;br /&gt;나랑 같이 갔던 다른 분들은 추후 인턴 비자가 아닌 취업 비자를 위해서 회사 일에 거의 목을 매고 있었다. 하지만 나는 취업 비자를 포기하고 인턴비자를 최대한 즐기기 위해 노력했다. 그래서 서부에 웬만한 유명한 곳은 다 가보았고 동부도 유명한 곳을 가보았다. 그리고 근방에 캐나다도 다녀왔다. 그만큼 추억도 많이 생겼고 해외 경험도 많이 늘릴 수 있었다.&lt;/li&gt;
&lt;/ul&gt;
&lt;h4 data-ke-size=&quot;size20&quot;&gt;&lt;b&gt;못했던 점&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;br /&gt;사실 좀 더 영어 공부를 열심히 해서 갔다면 영어실력이 비약적으로 늘 수 있었을 것 같다는 생각이 든다. 지금도 충분히 많은 영어 실력을 높이고 왔지만 아직 완벽한 의사소통은 힘들어 하고 사실 쓰는 단어 혹은 문장을 돌려 쓰는 방식의 의사소통이기 때문에 이부분이 조금 아쉬웠다. (만약 의사소통이 더 잘되면 200% 더 즐길 수 있었을텐데)&lt;br /&gt;&lt;br /&gt;&lt;/li&gt;
&lt;li&gt;&lt;b&gt;프론트엔드를 개발했지만 프론트엔드를 공부하지 않은 점&lt;/b&gt;&lt;br /&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;&amp;nbsp;&lt;/p&gt;
&lt;h3 data-ke-size=&quot;size23&quot;&gt;&lt;b&gt;한국에서 취업 준비&lt;/b&gt;&lt;/h3&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;1년의 인턴쉽 과정을 마치고 미국에서 2개월정도 더 여행을 하고 한국에 돌아왔다. 돌아왔을 시기에는 참 좋았다. 가족들도 만나고 그동안 못 만났던 친구들도 만나고 대략 1개월 간은 한국에서 적응기간을 거쳤다. 그 이후 취업 준비를 시작했다. 하지만 현실은 녹록치 않았다. 그당시 면접 봤던 곳은 줌인터넷, 아프리카 TV 자회사인 프리캡, 그리고 중소기업 등 이었다. 웬만한 곳은 서탈을 했다. 하지만 줌인터넷은 떨어지고 프리캡은 연락이 없었고, 중소기업등 중 몇군데는 합격했다. 그래서 어쩔수 없이 그 중 한군데인 A사에 취직할 수 밖에 없었다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;h4 data-ke-size=&quot;size20&quot;&gt;&lt;b&gt;잘했던 점&lt;/b&gt;&lt;/h4&gt;
&lt;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;/ul&gt;
&lt;h4 data-ke-size=&quot;size20&quot;&gt;&lt;b&gt;못했던 점&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;br /&gt;프론트엔드 책을 한권 읽으면 충분히 알 수 있었던 내용을 그냥 실무에서 인터넷 검색으로 알았던 내용을 토대로 취업을 준비했다. 그렇기 때문에 지식의 파편화가 일어났고, 심도 깊은 질문이 들어왔을때 쉽게 말할 수 없었다.&lt;br /&gt;&lt;br /&gt;&lt;/li&gt;
&lt;li&gt;&lt;b&gt;좀 더 여유를 가지고 취준을 하지 못했던 점&lt;/b&gt;&lt;br /&gt;사실 여유를 가진다고 좋은 기업을 가진 못했을것 같았다. 하지만 시도라도 해보았으면 무언가 달라지지 않았을까 하는 생각이 들긴한다. 항상 주위에서 시작부터 좋은 기업을 가야한다고 했지만, 나는 마음이 급급해서 그냥 어중간한 기업에 들어갔다. 지금도 후회하는게 이 선택이다...&lt;/li&gt;
&lt;/ul&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;h3 data-ke-size=&quot;size23&quot;&gt;&lt;b&gt;인공지능 중소기업 A사&lt;/b&gt;&lt;/h3&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;나는 인공지능 기술을 개발하는 회사에 프론트엔드 개발자로서 취업을 했다. 나는 이 시기에 개발자로서 많은 변화를 겪었다. 처음 회사의 취업하고 인공지능 개발자들 사이에서 프론트엔드 개발을 시작했다. 처음에는 좋았다. 배우는게 있었고, 내일채움공제도 신청하며 2년동안 프론트엔드 개발자로서 성장할 수 있을거란 행복한 상상에 빠졌다. 하지만 시간이 가면 갈수록 프론트엔드 개발자로서 프로젝트를 진행하는 게 아닌 코더로서 일을 진행했고, 배울 수 있는게 따로 없었다. (오히려 사내 정치만 더 배운 느낌...) 그래서 나는 1차로 A사 1년차 때 유명기업 83개의 신입공채에 이력서를 넣었고 최종면접까지 간 기업은 SK C&amp;amp;C였다. 하지만 최종면접에서 PT면접과 대면면접을 망치고 떨어지고 말았다. 좌절했고 내가 부족한 부분이 무엇인지를 생각했고 부족한 부분을 계속 공부하였다. 그리고 나는 A사에 내일채움공제 2년을 만기하고 2020년 10월경에 퇴사를 했다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;h4 data-ke-size=&quot;size20&quot;&gt;&lt;b&gt;잘했던 점&lt;/b&gt;&lt;/h4&gt;
&lt;ul style=&quot;list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li&gt;&lt;b&gt;중고신입으로 유명 기업을 지원한 점 &amp;amp; 포기하지 않고 대기업 문을 두드렸던 점&lt;/b&gt;&lt;br /&gt;사실 1년차 때 신입공채에 지원하고 모든 기업에서 떨어졌을 때 유명 기업에 가는것을 포기할 뻔 했다. 하지만 회사에서 계속 일을 하면서 보이는 사내정치와 내 성장률을 보면서 마음을 다시 다 잡고 계속 유명 기업에 문을 두드렸다. 또한 중고신입을 지원하면서 내가 부족한 부분이 무엇인지 가늠할 수 있었고, 중고신입 면접 경험들이 나에게 영양분이 되어 2차 시도에 도움을 많이 주었다.&lt;br /&gt;&lt;br /&gt;&lt;/li&gt;
&lt;li&gt;&lt;b&gt;지속해서 프론트엔드 공부를 게을리 하지 않은 점&lt;/b&gt;&lt;br /&gt;회사에서 성장을 할 수 없다면, 내가 개인적으로 성장을 하여야 한다고 생각했다. 그래서 계속해서 기술이 나올때마다 공부를 했고, 사이드 프로젝트를 진행했다. 이러한 경험들이 내 이력서를 풍부하게 만들어 줄 수 있었다.&lt;br /&gt;&lt;br /&gt;&lt;/li&gt;
&lt;li&gt;&lt;b&gt;SI회사를 다니면서 신기술을 기업 프로젝트에 녹여본 점&lt;/b&gt;&lt;br /&gt;나는 이게 중소 SI에 가장 좋은 점이라고 생각한다. 내가 공부하고 있는 것들을 실무에 쉽게 녹여볼 수 있다는 점, 나는 이 경험들을 통해서 좀 더 심도 깊게 기술을 파악할 수 있었다.&lt;br /&gt;&lt;br /&gt;&lt;/li&gt;
&lt;li&gt;&lt;b&gt;좋은 사람들과 인연을 만들 수 있었던 점&lt;/b&gt;&lt;br /&gt;난 이게 A사를 다니면서 만들수 있었던 가장 큰 장점이라고 생각한다. 퇴사한지 1년이 지난 지금도 꾸준히 연락하고 있는 회사사람이 존재한다는 것 자체가 끝까지 관계를 유지할 수 있는 사람이라는 것 아니겠는가?&lt;/li&gt;
&lt;/ul&gt;
&lt;h4 data-ke-size=&quot;size20&quot;&gt;&lt;b&gt;못했던 점&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;br /&gt;프리캡은 스타트업이다. 하지만, 아프리카 TV에 자회사이고 실제 플랫폼을 서비스하고 있는 회사이기에 운영업무 혹은 최적화 등을 배울 수 있었을 것이다. 하지만, 내일채움공제를 포기하지 못하고 이 회사 남았다. 나는 아직도 이 선택을 후회하고 있다...&lt;br /&gt;&lt;br /&gt;&lt;/li&gt;
&lt;li&gt;&lt;b&gt;뒤 늦게 자바스크립트 공부를 한 점&lt;/b&gt;&lt;br /&gt;나는 1년차 초반부터 1년정도 자바스크립트를 공부했다. 그 전까지는 자바스크립트를 공부했다기 보다는 사용했다에 더 가깝다. 어떻게든 프로젝트를 만들고 최적화 이런건 신경도 안썼으니 프로젝트는 돌아가지만, 성능의 이슈가 항상 존재했고, 이슈가 터져도 어디서 발생하는지를 알 수 없었다. 좀 더 빨리 자바스크립트의 중요성을 알 수 있었다면 좋았을거란 생각이 든다.&lt;/li&gt;
&lt;/ul&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;h3 data-ke-size=&quot;size23&quot;&gt;&lt;b&gt;CJ 계열사&lt;/b&gt;&lt;/h3&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;나는 다른 회사를 정해두지 않은채 2020년 10월에 퇴사를 하였다. 내가 다른회사에 합격하지 않은채 퇴사를 한 이유는 전 회사에 일을 하면서 다른 회사 면접을 보거나 프론트엔드 공부를 할 자신이 없었기 때문이다. 이러한 결정은 프론트엔드 개발자를 지향하고 공부하고 싶어했던 나에게서는 참 좋은 선택이었다. 이 기간동안 열심히 프론트엔드 개발자로서 공부를 하였고 그 덕분에 많은 성장을 하였기 때문이다. 물론 다음에는 이러한 선택은 하지 않을 생각이다. 이 기간동안 집에 눈치도 보였고, 내 자신도 위축되어서 기분이 별로 좋지는 않았었다. 하지만 국내 대기업에 속하는 CJ 계열사에 합격하고 나서는 꽤 뛸 듯이 기뻐했다.&lt;/p&gt;
&lt;h4 data-ke-size=&quot;size20&quot;&gt;&lt;b&gt;잘했던 점&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;br /&gt;나는 퇴사하기 전 1개월 부터 계속해서 원서를 넣었고 면접과 코딩테스트를 계속해서 봐왔다. 또한 면접을 볼때마다 다 내가 받았던 질문들을 복기하고 이 질문들에 대한 답변을 작성한 질문리스트를 만들었다, 이러한 행동들이 나에게 도움이 많이 됐던거 같다.&lt;br /&gt;&lt;br /&gt;&lt;/li&gt;
&lt;li&gt;&lt;b&gt;SI회사가 아닌 서비스 회사를 목표로 했던 점&lt;/b&gt;&lt;br /&gt;전 회사가 SI회사다 보니 다음 회사는 서비스 회사에서 운영업무를 해보고 싶었다. 따라서 나는 자사 서비스가 있는 회사를 찾아 다녔다. 그리고 지금 회사는 자사 서비스가 있는 회사로 앱또한 웹뷰로 이루어져 있기에 웹 프론트엔드 개발자로서 성장할 수 있는 기업이었다.&lt;/li&gt;
&lt;/ul&gt;
&lt;h4 data-ke-size=&quot;size20&quot;&gt;&lt;b&gt;못했던 점&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;br /&gt;나는 처음 이 회사를 들어오면서 배포에 대한 개념이 많이 낮았다. 심지어 프론트엔드와 백엔드가 분리되어있는 상태가 아닌 풀 프레임워크 상태였기 때문에 더욱 더 어려웠다. 그래서 종종 배포 관련하여 실수를 많이 했다... 이러한 실수를 다시는 하지 않기 위해서 내가 실수 했던 부분은 항상 적었고, 해결 방법 또한 문서화 하여 재발방지를 하였다.&lt;/li&gt;
&lt;/ul&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;h3 data-ke-size=&quot;size23&quot;&gt;&lt;b&gt;마무리&lt;/b&gt;&lt;/h3&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;나는 벌써 4년차 개발자라는게 실감이 나질 않는다. 아직 부족한게 많은데 뭔가 이룬것 없이 4년이란 경력이 되었다. 물론 주니어는 경력으로 이루어지지만, 시니어는 아니란 것을 잘 알고 있기에 부족한 부분을 매꾸고 공부를 더 열심히 해야된다는 이야기겠지.. 앞으로도 더 뛰어난 개발자가 되기 위해 노력해야겠다.&lt;/p&gt;</description>
      <category>라이프 로그</category>
      <author>방현준</author>
      <guid isPermaLink="true">https://noogoonaa.tistory.com/98</guid>
      <comments>https://noogoonaa.tistory.com/98#entry98comment</comments>
      <pubDate>Sun, 16 Jan 2022 13:32:42 +0900</pubDate>
    </item>
    <item>
      <title>[회고] 쿠팡 파트너스 리디렉션 서비스 종료 (부제 : 토이 프로젝트로 개발하는 서비스는 왜 성공하지 못할까?)</title>
      <link>https://noogoonaa.tistory.com/96</link>
      <description>&lt;h2 style=&quot;text-align: justify;&quot; data-ke-size=&quot;size26&quot;&gt;&lt;span style=&quot;font-family: AppleSDGothicNeo-Regular, 'Malgun Gothic', '맑은 고딕', dotum, 돋움, sans-serif;&quot;&gt;&lt;b&gt;여는 글&lt;/b&gt;&lt;/span&gt;&lt;/h2&gt;
&lt;p style=&quot;text-align: justify;&quot; data-ke-size=&quot;size18&quot;&gt;&lt;span style=&quot;font-family: AppleSDGothicNeo-Regular, 'Malgun Gothic', '맑은 고딕', dotum, 돋움, sans-serif;&quot;&gt;최근 나는 그동안 운영하던 서비스인 &quot;쿠팡 파트너스 리디렉션&quot;이라는 웹 서비스를 종료했다. 종료한 이유는 간단하다. 서비스가 성공하지 못했기 때문이다. 그렇다면 왜 성공을 하지 못했을까? 서비스 종료 기념(?)으로 회고 겸 생각을 해보자.&lt;/span&gt;&lt;/p&gt;
&lt;p style=&quot;text-align: justify;&quot; data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-origin-width=&quot;1856&quot; data-origin-height=&quot;1027&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/rkkOj/btrgxChSorR/oqnB1tDzwEKb6iD40mdcIk/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/rkkOj/btrgxChSorR/oqnB1tDzwEKb6iD40mdcIk/img.png&quot; data-alt=&quot;쿠팡 파트너스 리디렉션 생성기&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/rkkOj/btrgxChSorR/oqnB1tDzwEKb6iD40mdcIk/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FrkkOj%2FbtrgxChSorR%2FoqnB1tDzwEKb6iD40mdcIk%2Fimg.png&quot; onerror=&quot;this.onerror=null; this.src='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png'; this.srcset='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png';&quot; loading=&quot;lazy&quot; width=&quot;1856&quot; height=&quot;1027&quot; data-origin-width=&quot;1856&quot; data-origin-height=&quot;1027&quot;/&gt;&lt;/span&gt;&lt;figcaption&gt;쿠팡 파트너스 리디렉션 생성기&lt;/figcaption&gt;
&lt;/figure&gt;
&lt;/p&gt;
&lt;h2 style=&quot;text-align: center;&quot; data-ke-size=&quot;size26&quot;&gt;&amp;nbsp;&lt;/h2&gt;
&lt;hr contenteditable=&quot;false&quot; data-ke-type=&quot;horizontalRule&quot; data-ke-style=&quot;style1&quot; /&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;h2 style=&quot;text-align: justify;&quot; data-ke-size=&quot;size26&quot;&gt;&lt;span style=&quot;font-family: AppleSDGothicNeo-Regular, 'Malgun Gothic', '맑은 고딕', dotum, 돋움, sans-serif;&quot;&gt;&lt;b&gt;쿠팡 파트너스 리디렉션 생성기를 생각하게 된 계기&lt;/b&gt;&lt;/span&gt;&lt;/h2&gt;
&lt;p style=&quot;text-align: justify;&quot; data-ke-size=&quot;size18&quot;&gt;&lt;span style=&quot;font-family: AppleSDGothicNeo-Regular, 'Malgun Gothic', '맑은 고딕', dotum, 돋움, sans-serif;&quot;&gt;나는 부업에 엄청난 관심이 많다. 그래서 외주, 배민 커넥트, 앱 테크 등 돈이 될만한 부업들은 다 해봤던 거 같다. 그 중 쿠팡 파트너스를 부업으로 했었던 적이 있었는데, 이게 생각보다 쏠쏠한 수익을 가져다줬었다.&lt;/span&gt;&lt;/p&gt;
&lt;p style=&quot;text-align: justify;&quot; data-ke-size=&quot;size18&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p style=&quot;text-align: justify;&quot; data-ke-size=&quot;size18&quot;&gt;&lt;span style=&quot;font-family: AppleSDGothicNeo-Regular, 'Malgun Gothic', '맑은 고딕', dotum, 돋움, sans-serif;&quot;&gt;다만 이 쿠팡 파트너스를 하려면 네이버 블로그가 필요했고, 네이버 블로그에 쿠팡 파트너스 링크를 포스팅하면 자꾸 블로그가 저품질에 걸려 버렸다. 이걸 해결하는 방법을 찾아보다가 리다이렉션 기능을 활용하면 저품질을 피할 수 있다는 글을 발견했고, 테스트 결과 저품질 문제를 해결할 수 있었다.&lt;/span&gt;&lt;/p&gt;
&lt;p style=&quot;text-align: justify;&quot; data-ke-size=&quot;size18&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p style=&quot;text-align: justify;&quot; data-ke-size=&quot;size18&quot;&gt;&lt;span style=&quot;font-family: AppleSDGothicNeo-Regular, 'Malgun Gothic', '맑은 고딕', dotum, 돋움, sans-serif;&quot;&gt;하지만, 리다이렉션 링크를 생성하려면 꽤 복잡한 과정을 거쳐야 했는데 이 귀찮은 과정을 자동화할 수 없을까라는 생각을 하게 됐고, 결국 쿠팡 파트너스 리디렉션 생성기라는 토이 프로젝트를 시작하게 되었다.&lt;/span&gt;&lt;/p&gt;
&lt;p style=&quot;text-align: justify;&quot; data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;hr contenteditable=&quot;false&quot; data-ke-type=&quot;horizontalRule&quot; data-ke-style=&quot;style1&quot; /&gt;
&lt;p style=&quot;text-align: justify;&quot; data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;h2 style=&quot;text-align: justify;&quot; data-ke-size=&quot;size26&quot;&gt;&lt;span style=&quot;font-family: AppleSDGothicNeo-Regular, 'Malgun Gothic', '맑은 고딕', dotum, 돋움, sans-serif;&quot;&gt;&lt;b&gt;토이 프로젝트 시작&lt;/b&gt;&lt;/span&gt;&lt;/h2&gt;
&lt;p style=&quot;text-align: justify;&quot; data-ke-size=&quot;size18&quot;&gt;&lt;span style=&quot;font-family: AppleSDGothicNeo-Regular, 'Malgun Gothic', '맑은 고딕', dotum, 돋움, sans-serif;&quot;&gt;보통 토이 프로젝트를 하는 개발자들을 보면 어느 정도 비즈니스 로직을 설계하고 개발부터 시작하는 경우가 많다. 나 또한 마찬가지로 비즈니스 로직 설계부터 시작하였다. 해당 서비스의 비즈니스 로직은 간단했다.&lt;/span&gt;&lt;/p&gt;
&lt;p style=&quot;text-align: justify;&quot; data-ke-size=&quot;size18&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p style=&quot;text-align: justify;&quot; data-ke-size=&quot;size18&quot;&gt;&lt;span style=&quot;font-family: AppleSDGothicNeo-Regular, 'Malgun Gothic', '맑은 고딕', dotum, 돋움, sans-serif;&quot;&gt;사용자가 쿠팡 파트너스 상품의 주소를 입력하면 그 주소를 난수화 시키고 쿠팡 파트너스 리디렉션 생성기 웹사이트 주소에 파라미터를 붙여 새로운 주소를 생성해준다. 사용자는 그 주소를 네이버 블로그에 생성된 주소로 링크를 걸어주면 그 링크를 클릭한 순간 쿠팡 파트너스 리디렉션 생성기 웹사이트로 접근하게 되고 쿠팡 파트너스 리디렉션 생성기 웹사이트에서는 쿠팡 상품 페이지로 이동시킨다.&lt;/span&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-filename=&quot;Screenshot_13.jpg&quot; data-origin-width=&quot;1903&quot; data-origin-height=&quot;1007&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/b7Qxwd/btrgwDnOY7D/cT5U2XvJtIukoBk0DwnhB0/img.jpg&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/b7Qxwd/btrgwDnOY7D/cT5U2XvJtIukoBk0DwnhB0/img.jpg&quot; data-alt=&quot;리다이렉션 URL 생성 과정&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/b7Qxwd/btrgwDnOY7D/cT5U2XvJtIukoBk0DwnhB0/img.jpg&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2Fb7Qxwd%2FbtrgwDnOY7D%2FcT5U2XvJtIukoBk0DwnhB0%2Fimg.jpg&quot; onerror=&quot;this.onerror=null; this.src='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png'; this.srcset='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png';&quot; loading=&quot;lazy&quot; width=&quot;1903&quot; height=&quot;1007&quot; data-filename=&quot;Screenshot_13.jpg&quot; data-origin-width=&quot;1903&quot; data-origin-height=&quot;1007&quot;/&gt;&lt;/span&gt;&lt;figcaption&gt;리다이렉션 URL 생성 과정&lt;/figcaption&gt;
&lt;/figure&gt;
&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-filename=&quot;crop gif-min.gif&quot; data-origin-width=&quot;1536&quot; data-origin-height=&quot;947&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/bZKYzb/btrgpwYeBxD/YxMuKIYyDIS7oXt27o3kj0/img.gif&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/bZKYzb/btrgpwYeBxD/YxMuKIYyDIS7oXt27o3kj0/img.gif&quot; data-alt=&quot;리다이렉션 프로세스&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/bZKYzb/btrgpwYeBxD/YxMuKIYyDIS7oXt27o3kj0/img.gif&quot; srcset=&quot;https://blog.kakaocdn.net/dn/bZKYzb/btrgpwYeBxD/YxMuKIYyDIS7oXt27o3kj0/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;1536&quot; height=&quot;947&quot; data-filename=&quot;crop gif-min.gif&quot; data-origin-width=&quot;1536&quot; data-origin-height=&quot;947&quot;/&gt;&lt;/span&gt;&lt;figcaption&gt;리다이렉션 프로세스&lt;/figcaption&gt;
&lt;/figure&gt;
&lt;/p&gt;
&lt;p style=&quot;text-align: center;&quot; data-ke-size=&quot;size18&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p style=&quot;text-align: justify;&quot; data-ke-size=&quot;size18&quot;&gt;&lt;span style=&quot;font-family: AppleSDGothicNeo-Regular, 'Malgun Gothic', '맑은 고딕', dotum, 돋움, sans-serif;&quot;&gt;해당 프로젝트의 비즈니스 로직을 봤을 때 따로 서버는 필요없을거라 판단하여 서버리스를 선택, 프론트엔드만 개발하면 되었고, 비즈니스 로직도 꽤 단순하다 보니 설계와 동시에 개발에 착수할 수 있었다. 프론트엔드는 따로 UI라이브러리를 사용 안 하고 직접 개발했으며 SEO를 위해 Next.JS를 이용해서 개발을 진행하였다.&lt;/span&gt;&lt;/p&gt;
&lt;p style=&quot;text-align: justify;&quot; data-ke-size=&quot;size18&quot;&gt;&lt;span style=&quot;font-family: AppleSDGothicNeo-Regular, 'Malgun Gothic', '맑은 고딕', dotum, 돋움, sans-serif;&quot;&gt;(해당 글은 회고록이기에 개발적인 자세한 측면은 생략하겠다.)&lt;b&gt;&lt;/b&gt;&lt;/span&gt;&lt;/p&gt;
&lt;p style=&quot;text-align: center;&quot; data-ke-size=&quot;size18&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;hr contenteditable=&quot;false&quot; data-ke-type=&quot;horizontalRule&quot; data-ke-style=&quot;style1&quot; /&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;h2 style=&quot;text-align: justify;&quot; data-ke-size=&quot;size26&quot;&gt;&lt;span style=&quot;font-family: AppleSDGothicNeo-Regular, 'Malgun Gothic', '맑은 고딕', dotum, 돋움, sans-serif;&quot;&gt;&lt;b&gt;프로젝트 개발 완료, 그리고 고민&lt;/b&gt;&lt;/span&gt;&lt;/h2&gt;
&lt;p style=&quot;text-align: justify;&quot; data-ke-size=&quot;size18&quot;&gt;&lt;span style=&quot;font-family: AppleSDGothicNeo-Regular, 'Malgun Gothic', '맑은 고딕', dotum, 돋움, sans-serif;&quot;&gt;어느 정도 개발이 완료되고 프로덕트를 배포하였다. 그리고 배포 후 1달간은 트래픽이 하나도 없었다. 너무 당연한 이야기다. 마케팅에 대한 생각은 하나도 생각 없이 개발을 진행했기에 트래픽이 있을 수가 없었다. 그래서 트래픽을 어떻게 높일지 고민을 해보았고 결론은 홍보를 해야겠다고 생각했다.&lt;/span&gt;&lt;/p&gt;
&lt;p style=&quot;text-align: justify;&quot; data-ke-size=&quot;size18&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p style=&quot;text-align: justify;&quot; data-ke-size=&quot;size18&quot;&gt;&lt;span style=&quot;font-family: AppleSDGothicNeo-Regular, 'Malgun Gothic', '맑은 고딕', dotum, 돋움, sans-serif;&quot;&gt;사실 다양한 마케팅 방법이 존재하지만, 따로 마케팅 공부도 하지 않았던 내가 당장에 떠오르는 방법은 홍보밖에 없었기에 그냥 무작정 개발자 그룹이나. 부업 사이트에 홍보를 했다. 그러다가 실제 사용하던 계정이 정지되었던 일도 있었다... ㅜㅜ&lt;/span&gt;&lt;/p&gt;
&lt;p style=&quot;text-align: justify;&quot; data-ke-size=&quot;size18&quot;&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 style=&quot;text-align: center;&quot; data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-origin-width=&quot;2261&quot; data-origin-height=&quot;811&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/0sQBa/btrguOjBUud/S5x1lbtzUmYdIdYSLYvhJ0/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/0sQBa/btrguOjBUud/S5x1lbtzUmYdIdYSLYvhJ0/img.png&quot; data-alt=&quot;Googla Analytics를 사용하여 사용자를 측정한 결과값&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/0sQBa/btrguOjBUud/S5x1lbtzUmYdIdYSLYvhJ0/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2F0sQBa%2FbtrguOjBUud%2FS5x1lbtzUmYdIdYSLYvhJ0%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;2261&quot; height=&quot;811&quot; data-origin-width=&quot;2261&quot; data-origin-height=&quot;811&quot;/&gt;&lt;/span&gt;&lt;figcaption&gt;Googla Analytics를 사용하여 사용자를 측정한 결과값&lt;/figcaption&gt;
&lt;/figure&gt;
&lt;/p&gt;
&lt;p style=&quot;text-align: justify;&quot; data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p style=&quot;text-align: justify;&quot; data-ke-size=&quot;size18&quot;&gt;&lt;span style=&quot;font-family: AppleSDGothicNeo-Regular, 'Malgun Gothic', '맑은 고딕', dotum, 돋움, sans-serif;&quot;&gt;초반에는 홍보를 하니 조금은 트래픽이 올라주었다. 너무 기뻤다.&amp;nbsp; 이대로 점차 성장하길 바랬지만, 초반에만 반짝 사람들이 사용해 봤을 뿐, 지속적으로 사용하는 사람이 없었던 것이다.&lt;/span&gt;&lt;/p&gt;
&lt;p style=&quot;text-align: justify;&quot; data-ke-size=&quot;size18&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p style=&quot;text-align: justify;&quot; data-ke-size=&quot;size18&quot;&gt;&lt;span style=&quot;font-family: AppleSDGothicNeo-Regular, 'Malgun Gothic', '맑은 고딕', dotum, 돋움, sans-serif;&quot;&gt;그러면 어떻게 사람들이 지속적으로 사용할 수 있게 할까? 나는 또다시 고민에 빠졌다.&lt;/span&gt;&lt;/p&gt;
&lt;p style=&quot;text-align: center;&quot; data-ke-size=&quot;size18&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;hr contenteditable=&quot;false&quot; data-ke-type=&quot;horizontalRule&quot; data-ke-style=&quot;style1&quot; /&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;h2 style=&quot;text-align: justify;&quot; data-ke-size=&quot;size26&quot;&gt;&lt;span style=&quot;font-family: AppleSDGothicNeo-Regular, 'Malgun Gothic', '맑은 고딕', dotum, 돋움, sans-serif;&quot;&gt;&lt;b&gt;홍보, 홍보, 개편 그리고 서비스 종료&lt;/b&gt;&lt;b&gt;&lt;/b&gt;&lt;/span&gt;&lt;/h2&gt;
&lt;p style=&quot;text-align: justify;&quot; data-ke-size=&quot;size18&quot;&gt;&lt;span style=&quot;font-family: AppleSDGothicNeo-Regular, 'Malgun Gothic', '맑은 고딕', dotum, 돋움, sans-serif;&quot;&gt;나는 사람들이 지속적으로 사용할 수 있는 서비스가 되려면 어떻게 해야 하나 계속 고민했다. 그리고 고민 끝에 나온 결론은 지속적인 홍보와 UI 개선이었다.&lt;/span&gt;&lt;/p&gt;
&lt;p style=&quot;text-align: justify;&quot; data-ke-size=&quot;size18&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p style=&quot;text-align: justify;&quot; data-ke-size=&quot;size18&quot;&gt;&lt;span style=&quot;font-family: AppleSDGothicNeo-Regular, 'Malgun Gothic', '맑은 고딕', dotum, 돋움, sans-serif;&quot;&gt;현재 내가 만든 서비스의 목표는 리다이렉션 URL을 생성하고 블로그에 저품질을 해결하는걸 목표로 하고 있고 현재 만들어진 기능을 봤을 때 목표는 이미 달성했다. 기능도 잘 작동한다. 그런데 사람을 잡지 못한다. 그렇다면 왜 사람을 잡지 못할까 라는 생각을 해봤을 때 생각나는 것은 UI와 사용성의 문제라고 결론이 나왔다. 그래서 결국 나는 UI/UX 개편을 시작하였다.&lt;/span&gt;&lt;/p&gt;
&lt;p style=&quot;text-align: justify;&quot; data-ke-size=&quot;size18&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p style=&quot;text-align: justify;&quot; data-ke-size=&quot;size18&quot;&gt;&lt;span style=&quot;font-family: AppleSDGothicNeo-Regular, 'Malgun Gothic', '맑은 고딕', dotum, 돋움, sans-serif;&quot;&gt;UI/UX 개편 작업을 진행하면서 메뉴얼도 같이 작성하였다. 왜냐하면 사용자가 봤을때 이걸 어떻게 사용하는지를 잘 모를수도 있다고 판단했기 때문이다.&lt;/span&gt;&lt;/p&gt;
&lt;p style=&quot;text-align: justify;&quot; data-ke-size=&quot;size18&quot;&gt;&lt;span style=&quot;font-family: AppleSDGothicNeo-Regular, 'Malgun Gothic', '맑은 고딕', dotum, 돋움, sans-serif;&quot;&gt;&lt;i&gt;&lt;span style=&quot;color: #9d9d9d;&quot;&gt;(지금 생각해보면 사용법을 유도하는 기능을 넣었으면 참 좋았을 거라 생각이 든다)&lt;/span&gt;&lt;/i&gt;&lt;/span&gt;&lt;/p&gt;
&lt;p style=&quot;text-align: justify;&quot; data-ke-size=&quot;size18&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p style=&quot;text-align: justify;&quot; data-ke-size=&quot;size18&quot;&gt;&lt;span style=&quot;font-family: AppleSDGothicNeo-Regular, 'Malgun Gothic', '맑은 고딕', dotum, 돋움, sans-serif;&quot;&gt;&lt;span style=&quot;color: #000000;&quot;&gt;다만, 이 작업을 진행해도 트채픽은 초반에만 잠깐 늘 뿐 또다시 트래픽은 낮아졌다. 트래픽이 지속적으로 낮아지면서 나의 모티베이션 또한 바닥으로 가고 있었고,&lt;/span&gt;&lt;span style=&quot;color: #000000;&quot;&gt;&amp;nbsp;&lt;/span&gt;&lt;span style=&quot;color: #000000;&quot;&gt;&lt;span style=&quot;color: #000000;&quot;&gt;쿠팡 파트너스도 예전과 같지 못하다고 느껴졌다. 그러다&lt;/span&gt;&amp;nbsp;&lt;/span&gt;&lt;span style=&quot;color: #000000; font-size: 1.12em; letter-spacing: 0px;&quot;&gt;결국은 회사 업무가 바쁘다는 핑계로 서비스를 방치해 놓기에 이르렀다.&lt;/span&gt;&lt;/span&gt;&lt;/p&gt;
&lt;p style=&quot;text-align: justify;&quot; data-ke-size=&quot;size18&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p style=&quot;text-align: justify;&quot; data-ke-size=&quot;size18&quot;&gt;&lt;span style=&quot;color: #000000; font-family: AppleSDGothicNeo-Regular, 'Malgun Gothic', '맑은 고딕', dotum, 돋움, sans-serif;&quot;&gt;결국, 쿠팡파트너스 리디렉션 생성기는 2021년 9월 26일 서비스의 사망을 선고했다.&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;1105&quot; data-origin-height=&quot;655&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/bl7lY9/btrgqGGF1F4/0JxWwiKBObRbvx2lJprGw0/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/bl7lY9/btrgqGGF1F4/0JxWwiKBObRbvx2lJprGw0/img.png&quot; data-alt=&quot;서비스 종료한 쿠팡 파트너스 리디렉션 생성기&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/bl7lY9/btrgqGGF1F4/0JxWwiKBObRbvx2lJprGw0/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2Fbl7lY9%2FbtrgqGGF1F4%2F0JxWwiKBObRbvx2lJprGw0%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;1105&quot; height=&quot;655&quot; data-origin-width=&quot;1105&quot; data-origin-height=&quot;655&quot;/&gt;&lt;/span&gt;&lt;figcaption&gt;서비스 종료한 쿠팡 파트너스 리디렉션 생성기&lt;/figcaption&gt;
&lt;/figure&gt;
&lt;/p&gt;
&lt;p style=&quot;text-align: center;&quot; data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;hr contenteditable=&quot;false&quot; data-ke-type=&quot;horizontalRule&quot; data-ke-style=&quot;style1&quot; /&gt;
&lt;p style=&quot;text-align: center;&quot; data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;h2 style=&quot;text-align: justify;&quot; data-ke-size=&quot;size26&quot;&gt;&lt;span style=&quot;font-family: AppleSDGothicNeo-Regular, 'Malgun Gothic', '맑은 고딕', dotum, 돋움, sans-serif;&quot;&gt;&lt;b&gt;&lt;span style=&quot;color: #000000;&quot;&gt;서비스 종료 그 이후&amp;nbsp;&lt;/span&gt;&lt;/b&gt;&lt;/span&gt;&lt;/h2&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-filename=&quot;9rqmhOImw.jpeg&quot; data-origin-width=&quot;1200&quot; data-origin-height=&quot;630&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/cSYrZB/btrgvafBitJ/HGtzKlkmUKQ4irU2K4UDg1/img.jpg&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/cSYrZB/btrgvafBitJ/HGtzKlkmUKQ4irU2K4UDg1/img.jpg&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/cSYrZB/btrgvafBitJ/HGtzKlkmUKQ4irU2K4UDg1/img.jpg&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FcSYrZB%2FbtrgvafBitJ%2FHGtzKlkmUKQ4irU2K4UDg1%2Fimg.jpg&quot; onerror=&quot;this.onerror=null; this.src='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png'; this.srcset='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png';&quot; loading=&quot;lazy&quot; width=&quot;1200&quot; height=&quot;630&quot; data-filename=&quot;9rqmhOImw.jpeg&quot; data-origin-width=&quot;1200&quot; data-origin-height=&quot;630&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;/p&gt;
&lt;p style=&quot;text-align: justify;&quot; data-ke-size=&quot;size18&quot;&gt;&lt;span style=&quot;font-family: AppleSDGothicNeo-Regular, 'Malgun Gothic', '맑은 고딕', dotum, 돋움, sans-serif;&quot;&gt;사실 그렇게 큰 서비스는 아니었지만, 나름 좋은 아이디어라고 생각해서 열심히 개발했다. 그리고 서비스 종료라는 결과를 내었다.&lt;/span&gt;&lt;/p&gt;
&lt;p style=&quot;text-align: justify;&quot; data-ke-size=&quot;size18&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p style=&quot;text-align: justify;&quot; data-ke-size=&quot;size18&quot;&gt;&lt;span style=&quot;font-family: AppleSDGothicNeo-Regular, 'Malgun Gothic', '맑은 고딕', dotum, 돋움, sans-serif;&quot;&gt;지금 생각해보면 서비스 종료는 너무 당연했다고 생각이 든다. 설계, 기획부터 시작해서 운영, 마케팅까지 아무것도 생각 안 하고 개발부터 들어가는 개발적 열의을 토해냈기도 했고 &quot;내가 이게 필요하니까 만들면 사람들이 사용하겠지?&quot; 라는 행복 회로를 오버클럭으로 돌리고 무작정 운영했다.&lt;/span&gt;&lt;/p&gt;
&lt;p style=&quot;text-align: justify;&quot; data-ke-size=&quot;size18&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p style=&quot;text-align: justify;&quot; data-ke-size=&quot;size18&quot;&gt;&lt;span style=&quot;font-family: AppleSDGothicNeo-Regular, 'Malgun Gothic', '맑은 고딕', dotum, 돋움, sans-serif;&quot;&gt;서비스가 망하는 게 당연하지...&lt;/span&gt;&lt;/p&gt;
&lt;p style=&quot;text-align: justify;&quot; data-ke-size=&quot;size18&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p style=&quot;text-align: justify;&quot; data-ke-size=&quot;size18&quot;&gt;&lt;span style=&quot;font-family: AppleSDGothicNeo-Regular, 'Malgun Gothic', '맑은 고딕', dotum, 돋움, sans-serif;&quot;&gt;하지만 나는 서비스가 종료되었다고 해서 내가 한 일도 같이 없어지는건 아니기 떄문에 남는게 없었던 일은 아니었다. 또한 이번 경험을 통해 비즈니스 측면에서 배운게 생각보다 많아서 잃은것 보다 얻은게 많았다. 사실 이번 글을 쓰는 이유도 실패를 통해 배운걸 적기 위해서가 가장 크다.&lt;/span&gt;&lt;/p&gt;
&lt;p style=&quot;text-align: justify;&quot; data-ke-size=&quot;size18&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p style=&quot;text-align: justify;&quot; data-ke-size=&quot;size18&quot;&gt;&lt;span style=&quot;font-family: AppleSDGothicNeo-Regular, 'Malgun Gothic', '맑은 고딕', dotum, 돋움, sans-serif;&quot;&gt;그렇다면 나는 무엇을 배웠을까?&lt;/span&gt;&lt;/p&gt;
&lt;p style=&quot;text-align: justify;&quot; data-ke-size=&quot;size18&quot;&gt;&lt;span style=&quot;font-family: AppleSDGothicNeo-Regular, 'Malgun Gothic', '맑은 고딕', dotum, 돋움, sans-serif;&quot;&gt;나는 이번 경험을 통해 3가지를 배웠는데,&lt;/span&gt;&lt;/p&gt;
&lt;p style=&quot;text-align: justify;&quot; data-ke-size=&quot;size18&quot;&gt;&lt;span style=&quot;font-family: AppleSDGothicNeo-Regular, 'Malgun Gothic', '맑은 고딕', dotum, 돋움, sans-serif;&quot;&gt;그 내용은 다음과 같다.&lt;/span&gt;&lt;/p&gt;
&lt;p style=&quot;text-align: center;&quot; data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;blockquote data-ke-style=&quot;style1&quot;&gt;&lt;span style=&quot;font-family: AppleSDGothicNeo-Regular, 'Malgun Gothic', '맑은 고딕', dotum, 돋움, sans-serif;&quot;&gt;&lt;b&gt;첫 번째, 서비스를 개발할 때 개발자로서의 생각을 버려라!&lt;br /&gt;&lt;br /&gt;&lt;/b&gt;&lt;/span&gt;&lt;/blockquote&gt;
&lt;p style=&quot;text-align: justify;&quot; data-ke-size=&quot;size18&quot;&gt;&lt;span style=&quot;font-family: AppleSDGothicNeo-Regular, 'Malgun Gothic', '맑은 고딕', dotum, 돋움, sans-serif;&quot;&gt;많은 개발자(본인 포함...)들은 개발만 생각하고 토이 프로젝트를 진행하는 경우가 많다. 물론 토이 프로젝트의 목표가 기술력을 올리기 위해서라면 당연히 개발만 생각하고 만들어도 무관하다. 다만 사업적으로 접근하는 토이 프로젝트는 개발만 중요한 것이 아니다. 시장 파악부터 시작해서 기획, 디자인, BM, 마케팅 등 모든 영역의 전반적인 것을 잘 알아야 한다.&lt;/span&gt;&lt;/p&gt;
&lt;p style=&quot;text-align: justify;&quot; data-ke-size=&quot;size18&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p style=&quot;text-align: justify;&quot; data-ke-size=&quot;size18&quot;&gt;&lt;span style=&quot;font-family: AppleSDGothicNeo-Regular, 'Malgun Gothic', '맑은 고딕', dotum, 돋움, sans-serif;&quot;&gt;내 주위 개발자들 중 기술력만으로 서비스의 모든 것을 해결할 수 있다고 믿는 사람이 있다. 물론 가능하다. 그 기술이 이 세상에서 범접할 수 없는 유일무이한 기술을 개발해서 서비스한다면 말이다. 하지만 그러한 기술력을 가지고 있지 않고 그러한 서비스가 아니라면 &lt;span style=&quot;letter-spacing: 0px;&quot;&gt;개발자적인 관점보다는&amp;nbsp;&lt;/span&gt;&lt;span style=&quot;letter-spacing: 0px;&quot;&gt;비즈니스적 관점으로 바라보자.&lt;/span&gt;&lt;/span&gt;&lt;/p&gt;
&lt;p style=&quot;text-align: justify;&quot; data-ke-size=&quot;size18&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;hr contenteditable=&quot;false&quot; data-ke-type=&quot;horizontalRule&quot; data-ke-style=&quot;style4&quot; /&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;blockquote data-ke-style=&quot;style1&quot;&gt;&lt;span style=&quot;font-family: AppleSDGothicNeo-Regular, 'Malgun Gothic', '맑은 고딕', dotum, 돋움, sans-serif;&quot;&gt;&lt;b&gt;두 번째, 개발을 진행하기 전에 먼저 시장조사와 수요예측부터 해라&lt;br /&gt;&lt;br /&gt;&lt;/b&gt;&lt;/span&gt;&lt;/blockquote&gt;
&lt;p style=&quot;text-align: justify;&quot; data-ke-size=&quot;size18&quot;&gt;&lt;span style=&quot;font-family: AppleSDGothicNeo-Regular, 'Malgun Gothic', '맑은 고딕', dotum, 돋움, sans-serif;&quot;&gt;많은 개발자들은 수익성 토이 프로젝트를 진행할 때, &quot;내가 만들면 누군가 쓰겠지&quot;, &quot;내가 필요하니까 만들면 필요한 사람들이 사용해서 수익이 날 거야&quot; 등의 생각으로 개발부터 시작하는 경향이 있다. 하지만 이렇게 시작하면 서비스의 타겟층이 불분명해지고, &lt;span style=&quot;letter-spacing: 0px;&quot;&gt;시장이 어떻게 구성되어있는지, 수요는 얼마나 있는지 잘 알지 못한다. &lt;/span&gt;결국은 서비스를 이용하는 트래픽이 저조할 것이고, 서비스를 운영하는 사람은 점차 운영에 대한 동기가 많이 떨어질 것이다. 개발을 하기 전에 조사부터 먼저 하는 습관을 길러보자&amp;nbsp;&lt;/span&gt;&lt;/p&gt;
&lt;p style=&quot;text-align: justify;&quot; data-ke-size=&quot;size18&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;hr contenteditable=&quot;false&quot; data-ke-type=&quot;horizontalRule&quot; data-ke-style=&quot;style4&quot; /&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;blockquote data-ke-style=&quot;style1&quot;&gt;&lt;span style=&quot;font-family: AppleSDGothicNeo-Regular, 'Malgun Gothic', '맑은 고딕', dotum, 돋움, sans-serif;&quot;&gt;&lt;b&gt;세 번째, 마케팅과 기획, 디자인을 간과하지 말자.&lt;br /&gt;&lt;br /&gt;&lt;/b&gt;&lt;/span&gt;&lt;/blockquote&gt;
&lt;p style=&quot;text-align: justify;&quot; data-ke-size=&quot;size18&quot;&gt;&lt;span style=&quot;font-family: AppleSDGothicNeo-Regular, 'Malgun Gothic', '맑은 고딕', dotum, 돋움, sans-serif;&quot;&gt;서비스를 운영하는 사람은 마케팅과 기획, 디자인은 절대 간과해서는 안될 항목 중 하나다. 아무리 내가 서비스의 기능을 기똥차게 잘 만들고 실제로 버그 없이 깔끔하게 잘 동작한다고 해도, 마케팅, 기획, 디자인이 없는 서비스라면 그 서비스는 서비스 종료의 길로 들어서게 된다. 그렇기 때문에 개발에 들어가기 전에 마케팅 전략과 기획은 물론이요, 수려하게까진 아니더라도 적히 깔끔한 디자인 정도는 잡고 가는 것을 잊지 말자&lt;/span&gt;&lt;/p&gt;
&lt;p style=&quot;text-align: center;&quot; data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;hr contenteditable=&quot;false&quot; data-ke-type=&quot;horizontalRule&quot; data-ke-style=&quot;style1&quot; /&gt;
&lt;p style=&quot;text-align: center;&quot; data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;h2 style=&quot;text-align: center;&quot; data-ke-size=&quot;size26&quot;&gt;&lt;span style=&quot;font-family: AppleSDGothicNeo-Regular, 'Malgun Gothic', '맑은 고딕', dotum, 돋움, sans-serif;&quot;&gt;&lt;b&gt;마무리&lt;/b&gt;&lt;/span&gt;&lt;/h2&gt;
&lt;p style=&quot;text-align: justify;&quot; data-ke-size=&quot;size18&quot;&gt;&lt;span style=&quot;font-family: AppleSDGothicNeo-Regular, 'Malgun Gothic', '맑은 고딕', dotum, 돋움, sans-serif;&quot;&gt;이번 경험은 다른 토이 프로젝트 경험보다 더욱 값졌던 경험인 거 같다. 비록 얼마 안 되는 트래픽이었지만, 실제 내 서비스를 운영해 본 경험이었고, 그만큼 나한테 많은 배울 점도 많이 준 서비스였기에 가치가 있던 서비스였다. 이다음에는 이 경험을 바탕으로 좀 더 단단한 서비스를 들고 올 수 있었으면 좋겠다.&lt;/span&gt;&lt;/p&gt;
&lt;p style=&quot;text-align: justify;&quot; data-ke-size=&quot;size18&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p style=&quot;text-align: justify;&quot; data-ke-size=&quot;size18&quot;&gt;&lt;span style=&quot;font-family: AppleSDGothicNeo-Regular, 'Malgun Gothic', '맑은 고딕', dotum, 돋움, sans-serif;&quot;&gt;만약 틀린 부분이나 피드백 주실 부분이 있으시다면 댓글로 말씀해주시면 감사하겠습니다.&lt;/span&gt;&lt;/p&gt;
&lt;p style=&quot;text-align: justify;&quot; data-ke-size=&quot;size18&quot;&gt;&lt;span style=&quot;font-family: AppleSDGothicNeo-Regular, 'Malgun Gothic', '맑은 고딕', dotum, 돋움, sans-serif;&quot;&gt;이 뻘글을 끝까지 읽어주셔서 정말 감사드립니다.&lt;/span&gt;&lt;/p&gt;
&lt;p style=&quot;text-align: justify;&quot; data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;figure contenteditable=&quot;false&quot; data-ke-type=&quot;emoticon&quot; data-ke-align=&quot;alignCenter&quot; data-emoticon-type=&quot;friends1&quot; data-emoticon-name=&quot;043&quot; data-emoticon-isanimation=&quot;false&quot; data-emoticon-src=&quot;https://t1.daumcdn.net/keditor/emoticon/friends1/large/043.gif&quot;&gt;&lt;img src=&quot;https://t1.daumcdn.net/keditor/emoticon/friends1/large/043.gif&quot; width=&quot;150&quot; /&gt;&lt;/figure&gt;
&lt;p style=&quot;text-align: justify;&quot; data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;</description>
      <category>라이프 로그</category>
      <category>개발</category>
      <category>서비스</category>
      <category>쿠팡파트너스리디렉션</category>
      <category>회고</category>
      <author>방현준</author>
      <guid isPermaLink="true">https://noogoonaa.tistory.com/96</guid>
      <comments>https://noogoonaa.tistory.com/96#entry96comment</comments>
      <pubDate>Thu, 30 Sep 2021 23:26:52 +0900</pubDate>
    </item>
    <item>
      <title>[회고] 블로그를 다시 시작한 이유</title>
      <link>https://noogoonaa.tistory.com/95</link>
      <description>&lt;p&gt;&lt;figure class=&quot;imageblock widthContent&quot; data-origin-width=&quot;305&quot; data-origin-height=&quot;165&quot; data-filename=&quot;images.jpg&quot; data-ke-mobilestyle=&quot;widthOrigin&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/dFWOhX/btrgxC3cehH/keBg57VnBPCfC0m74vLv4k/img.jpg&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/dFWOhX/btrgxC3cehH/keBg57VnBPCfC0m74vLv4k/img.jpg&quot; data-alt=&quot;여기가 어디라고 돌아와!!!&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/dFWOhX/btrgxC3cehH/keBg57VnBPCfC0m74vLv4k/img.jpg&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FdFWOhX%2FbtrgxC3cehH%2FkeBg57VnBPCfC0m74vLv4k%2Fimg.jpg&quot; data-origin-width=&quot;305&quot; data-origin-height=&quot;165&quot; data-filename=&quot;images.jpg&quot; data-ke-mobilestyle=&quot;widthOrigin&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;/&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;9개월 전, 나는 중소 SI기업에서 서비스 대기업으로 이직을 했다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;이직을 하면서 회사일이다 뭐다하면서 적응이라는 핑계로 블로그에 들르는 일이 드물어졌다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;그러다보니, 블로그 관리는 점점 뜸해졌고 급기야 1000명 정도의 방문자가 나오던 블로그는 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;span style=&quot;color: #9d9d9d;&quot;&gt;&lt;i&gt;(제 글을 좋아해주신 방문자 여러분 이자리를 빌어 감사드립니다....)&lt;/i&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;하지만 수익이래봐야 월 6000원 ~ 8000원 수준이었고 개발 블로그 특성상 개발자 외 사람들이 잘 봐주지 않았기 때문에&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;블로그 운영 당시에도 트래픽 상관 없이 그냥 포스팅을 했다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;그럼 왜 회사 적응이나 더 하지 다시 돌아와서 이러한 뻘글을 적고 있느냐,&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;첫번쨰는 여태까지 키워온 블로그가 너무 아까웠고&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;두번째는 블로그를 안하다보니 자연스럽게 공부를 덜 한다고 느꼈기 때문이다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;그러면 이렇게 말하겠지? 개인적으로 공부를 하면 되지 않냐?&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;블로그에 포스팅 하면서 공부하는게 더 시간 낭비가 아니냐?&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;맞다! 사실 개인적으로 공부하는게 블로그의 포스팅을 하면서 하는거 보단 시간이 상대적으로 덜 든다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;나도 그렇게 생각했고, 퇴근 후 혹은 출근 시간에 지속적으로 공부를 할 수 있었고 기술에대한 빠른 습득이 가능했다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;이렇게 하니 공부한 내용을 포스팅 하는 시간을 상대적으로 세이브 해 빠르게 새로운 기술을 습득할 수 있었다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;하지만, 블로그에 공부한 내용을 적으면서 더욱더 깊게 파고들던 내가,&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;이제는 공부하면서 이해만하고 파고들지 않는 행동을 보였다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;좋은 개발자란, 무릇 소스만 잘짜고 기술을 잘 사용하는 것만이 능사는 아니라고 생각한다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;소스를 짜면서 이걸 왜 이렇게 짰는지, 왜 이런 구조를 채택했는지, 이 기술은 왜 사용했는지를 계속해서 고민하는 개발자가 좋은 개발자라고 생각한다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;내가 이렇게 생각하게 된 이유는&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;그 면접관님은 &quot;좋은 개발자란 무엇이라고 생각하시나요?&quot; 라는 질문을 나한테 질문하였고&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;한창 신기술 뽕(?)에 취해 있던 나는&amp;nbsp; &quot;좋은 개발자란 트렌드를 잘 따라가고 신기술을 잘 사용하는 개발자라고 생각합니다.&quot;라고 대답했다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;하지만 면접관님은 수긍을 하면서 별로 공감을 해주지 않았다. 그래서 나는 면접관님이 생각하는 좋은 개발자가 무엇인지 물어보았고&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;다시 돌아와서, 나는 요새 &quot;왜&quot;를 왜 생각하지 않게 되었을까?&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;그 시점을 생각해보면 블로그를 하면서 공부를 했을때와 공부만 했던 때로 나눠볼 수 있을거 같다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;그렇다면 이러한 이슈를 어떻게 해결할 수 있을까?&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;답은 간단하다. 다시 블로그를 시작하면 된다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;그래서 오늘부터 나는 개발글이든 회고든 뭐라도 블로그에 포스팅을 하자고 마음을 먹었다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;그래서 이번이 첫번째 회고를 빙자한 뻘글이라고 볼 수 있을거 같다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;방문자 분은 어떠한 키워드로 이 글까지 오셨을지는 모르겠지만,&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;ps, 회고성 글이라 반말로 쓴 점 이해부탁드립니다.(쭈글...)&lt;/p&gt;</description>
      <category>라이프 로그</category>
      <author>방현준</author>
      <guid isPermaLink="true">https://noogoonaa.tistory.com/95</guid>
      <comments>https://noogoonaa.tistory.com/95#entry95comment</comments>
      <pubDate>Thu, 30 Sep 2021 22:06:29 +0900</pubDate>
    </item>
    <item>
      <title>갤럭시 S21 언팩행사 정리 및 사전예약, 가격(feat. 갤럭시 버즈 프로, 갤럭시 태그, 스마트 싱스)</title>
      <link>https://noogoonaa.tistory.com/93</link>
      <description>&lt;h2 data-ke-size=&quot;size26&quot;&gt;&lt;b&gt;여는글&lt;/b&gt;&lt;/h2&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size18&quot;&gt;2021년 1월 15일 삼성전자의 온라인 갤럭시 언팩 2021이 진행되었습니다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size18&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size18&quot;&gt;이번 갤럭시 언팩 2021 행사에서는 갤럭시를 상징하는 &lt;b&gt;오버 더 호라이즌&lt;/b&gt; 을 시작으로 75분간 진행되었는데,&lt;/p&gt;
&lt;p data-ke-size=&quot;size18&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size18&quot;&gt;&lt;b&gt;갤럭시 버즈 프로&lt;/b&gt;, &lt;b&gt;갤럭시 21&lt;/b&gt;, &lt;b&gt;갤럭시 태그&lt;/b&gt;로 이루어져 있는 행사였습니다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size18&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size18&quot;&gt;과연 어떤 새로운 갤럭시가 발표 되었는지 한번 알아보도록 하겠습니다.&lt;/p&gt;
&lt;h2 data-ke-size=&quot;size26&quot;&gt;&amp;nbsp;&lt;/h2&gt;
&lt;hr /&gt;
&lt;h2 data-ke-size=&quot;size26&quot;&gt;&amp;nbsp;&lt;/h2&gt;
&lt;h2 data-ke-size=&quot;size26&quot;&gt;&lt;b&gt;이번 언팩의 주인공 갤럭시 21만이 아니었다?&lt;/b&gt;&lt;/h2&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; width=&quot;100%&quot; data-origin-width=&quot;745&quot; data-origin-height=&quot;391&quot; data-ke-mobilestyle=&quot;widthContent&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/FaK2L/btqTELIDE6r/gYs18OMcE9mmSMpQVnNX30/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/FaK2L/btqTELIDE6r/gYs18OMcE9mmSMpQVnNX30/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/FaK2L/btqTELIDE6r/gYs18OMcE9mmSMpQVnNX30/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FFaK2L%2FbtqTELIDE6r%2FgYs18OMcE9mmSMpQVnNX30%2Fimg.png&quot; width=&quot;100%&quot; data-origin-width=&quot;745&quot; data-origin-height=&quot;391&quot; data-ke-mobilestyle=&quot;widthContent&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;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;/p&gt;
&lt;h2 data-ke-size=&quot;size26&quot;&gt;&amp;nbsp;&lt;/h2&gt;
&lt;p data-ke-size=&quot;size18&quot;&gt;이번 행사에서는 갤럭시 스마트폰의 국한되지 않았습니다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size18&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size18&quot;&gt;스마트폰을 시작으로 차와 집까지 이어지는 갤럭시 에코 시스템.&lt;/p&gt;
&lt;p data-ke-size=&quot;size18&quot;&gt;&lt;b&gt;갤럭시 생태계&lt;/b&gt;라는 청사진을 선보였습니다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size18&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size18&quot;&gt;간단히 이야기 해서 스마트 씽스를 사용하여 더욱더 많은 사물을 제어할 수 있다는 이야기 입니다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size18&quot;&gt;&lt;b&gt;자동차&lt;/b&gt; 혹은 &lt;b&gt;집&lt;/b&gt;의 어떤것이든 스마트 씽스가 연결되는 모든것들을 제어할 수 있습니다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size18&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size18&quot;&gt;하지만, 이번 삼섬 갤럭시 언팩 2021은 어느정도 울트라 급 나누기를 하였습니다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size18&quot;&gt;이 말은 갤럭시 S21 울트라 모델만이 스마트 싱스를 이용해 차량을 제어할 수 있는,&lt;/p&gt;
&lt;p data-ke-size=&quot;size18&quot;&gt;&lt;b&gt;스마트 싱스 오토&lt;/b&gt;를 사용할 수 있다는것 입니다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size18&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size18&quot;&gt;GDC센터 정해윤 프로는&lt;/p&gt;
&lt;p data-ke-size=&quot;size18&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size18&quot;&gt;&lt;b&gt;&lt;span style=&quot;color: #333333;&quot;&gt;&lt;i&gt;&quot;안드로이드 오토와 스마트 싱스 생태계를 이용해 갤럭시 사용자 여러분들을 해방시켜 더 많은 쉬는시간과 편리함, 경험을 제공할 것&quot;&lt;/i&gt;&lt;/span&gt;&lt;/b&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size18&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size18&quot;&gt;이라고 하였으며,&lt;/p&gt;
&lt;p data-ke-size=&quot;size18&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size18&quot;&gt;히로시 록하이머 구글 플랫폼&amp;middot;에코시스템 부사장은&lt;/p&gt;
&lt;p data-ke-size=&quot;size18&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size18&quot;&gt;&lt;i&gt;&lt;b&gt;&quot;안드로이드 오토, 네스트, 스마트싱스 등 삼성과의 협력은 스마트폰을 넘어 모든 장치로 확장할 수 있도록 투자하고 있다&quot;&lt;/b&gt;&lt;/i&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size18&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size18&quot;&gt;며&lt;/p&gt;
&lt;p data-ke-size=&quot;size18&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size18&quot;&gt;&lt;b&gt;&lt;i&gt;&quot;2021년 이후 양사는 파트너십을 다음 단계로 끌어올릴 것&quot;&lt;/i&gt;&lt;/b&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size18&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size18&quot;&gt;이라고 했습니다.&lt;/p&gt;
&lt;h2 data-ke-size=&quot;size26&quot;&gt;&amp;nbsp;&lt;/h2&gt;
&lt;hr /&gt;
&lt;h2 data-ke-size=&quot;size26&quot;&gt;&amp;nbsp;&lt;/h2&gt;
&lt;h2 data-ke-size=&quot;size26&quot;&gt;&lt;b&gt;에어팟 프로 저리가라! 갤럭시 버즈 프로 나가신다&lt;/b&gt;&lt;/h2&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; width=&quot;100%&quot; data-origin-width=&quot;1000&quot; data-origin-height=&quot;706&quot; data-ke-mobilestyle=&quot;widthContent&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/bjhzzN/btqTDI6p2Jf/zeqhA0QBw9FkEyNPbeJBiK/img.jpg&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/bjhzzN/btqTDI6p2Jf/zeqhA0QBw9FkEyNPbeJBiK/img.jpg&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/bjhzzN/btqTDI6p2Jf/zeqhA0QBw9FkEyNPbeJBiK/img.jpg&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FbjhzzN%2FbtqTDI6p2Jf%2FzeqhA0QBw9FkEyNPbeJBiK%2Fimg.jpg&quot; width=&quot;100%&quot; data-origin-width=&quot;1000&quot; data-origin-height=&quot;706&quot; data-ke-mobilestyle=&quot;widthContent&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;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;/p&gt;
&lt;p data-ke-size=&quot;size18&quot;&gt;또한 이번 행사에서 가장 사람들이 관심을 보였던 제품이 있었습니다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size18&quot;&gt;바로 &lt;b&gt;갤럭시 버즈 프로&lt;/b&gt; 입니다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size18&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size18&quot;&gt;이번 &lt;b&gt;갤럭시 버즈 프로&lt;/b&gt;는더 커진 11mm 우퍼&amp;middot;6.5mm 트위터의 2-Way &lt;b&gt;다이내믹 스피커&lt;/b&gt;를 장착했고,&lt;/p&gt;
&lt;p data-ke-size=&quot;size18&quot;&gt;사용자에게 가장 진화한 &lt;b&gt;인텔리전트 액티브 노이즈 캔슬링(ANC)&lt;/b&gt;를 탑재하였습니다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size18&quot;&gt;이 노이즈 캔슬링은 언제 어디서나 최상의 오디오 경험을 제공하는 것이 특징입니다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size18&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size18&quot;&gt;특히 &lt;b&gt;갤럭시 버즈 프로&lt;/b&gt;는 이번 인텔리전트 액티브 노이즈 캔슬링을 이용하여&lt;/p&gt;
&lt;p data-ke-size=&quot;size18&quot;&gt;통화를 시작하면 ANC와 주변 소리 듣기 기능을 자동으로 동작해 오디오 경험을 최적화합니다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size18&quot;&gt;또한, 갤럭시 스마트폰과 태블릿간 자동 스위치 기능이 지원돼 별도로 연결하지 않아도&lt;/p&gt;
&lt;p data-ke-size=&quot;size18&quot;&gt;통화와 멀티미디어 감상을 자유롭게 이어서 즐길 수 있습니다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size18&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size18&quot;&gt;이번 갤럭시 버즈 프로는 최대 충전시 &lt;b&gt;8시간&lt;/b&gt;, ANC를 킨 상태에선 &lt;b&gt;5시간&lt;/b&gt; 음악을 재생할 수 있고,&lt;/p&gt;
&lt;p data-ke-size=&quot;size18&quot;&gt;케이스를 통해 추가 충전 시 최대 &lt;b&gt;18시간&lt;/b&gt;까지 가능합니다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size18&quot;&gt;15일 부터 출시되며 가격은 &lt;b&gt;23만 9800원&lt;/b&gt;으로 책정되었습니다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size18&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;hr contenteditable=&quot;false&quot; data-ke-type=&quot;horizontalRule&quot; data-ke-style=&quot;style3&quot; /&gt;
&lt;h2 style=&quot;text-align: center;&quot; data-ke-size=&quot;size26&quot;&gt;&lt;b&gt;&lt;span style=&quot;color: #ee2323;&quot;&gt;[구매]&lt;/span&gt; 갤럭시 버즈 프로 구매하러 가기&lt;/b&gt;&lt;/h2&gt;
&lt;h2 style=&quot;text-align: center;&quot; data-ke-size=&quot;size26&quot;&gt;&lt;a href=&quot;https://coupang-partners-link.vercel.app/redirect?url=U2FsdGVkX19GhPHbFHQy2%2BQHvXm9AyZ4%2FgkT%2FMQP6Uj1vAXgtTLzAGNQ4VN1a43X&quot; target=&quot;_blank&quot; rel=&quot;noopener&quot;&gt;&lt;span style=&quot;color: #006dd7;&quot;&gt;&lt;b&gt;[클릭]&lt;/b&gt;&lt;/span&gt;&lt;/a&gt;&lt;/h2&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock widthContent&quot; data-filename=&quot;Screenshot_2.png&quot; data-origin-width=&quot;929&quot; data-origin-height=&quot;528&quot; data-ke-mobilestyle=&quot;widthContent&quot;&gt;&lt;a href=&quot;https://coupang-partners-link.vercel.app/redirect?url=U2FsdGVkX19GhPHbFHQy2%2BQHvXm9AyZ4%2FgkT%2FMQP6Uj1vAXgtTLzAGNQ4VN1a43X&quot; target=&quot;_blank&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/bctFf8/btqTIpyhc08/fpxKQgRCuig8C8VewKoRb1/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FbctFf8%2FbtqTIpyhc08%2FfpxKQgRCuig8C8VewKoRb1%2Fimg.png&quot; data-filename=&quot;Screenshot_2.png&quot; data-origin-width=&quot;929&quot; data-origin-height=&quot;528&quot; data-ke-mobilestyle=&quot;widthContent&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;/&gt;&lt;/a&gt;&lt;/figure&gt;
&lt;/p&gt;
&lt;h2 data-ke-size=&quot;size26&quot;&gt;&amp;nbsp;&lt;/h2&gt;
&lt;hr /&gt;
&lt;h2 data-ke-size=&quot;size26&quot;&gt;&amp;nbsp;&lt;/h2&gt;
&lt;h2 data-ke-size=&quot;size26&quot;&gt;&lt;b&gt;이번 언팩행사의 주인공 갤럭시 S21&lt;/b&gt;&lt;/h2&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; width=&quot;100%&quot; data-origin-width=&quot;1200&quot; data-origin-height=&quot;846&quot; data-ke-mobilestyle=&quot;widthContent&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/bZDwFA/btqTvQSutCp/6ik0X9eAviBLZhV3U5pF3K/img.jpg&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/bZDwFA/btqTvQSutCp/6ik0X9eAviBLZhV3U5pF3K/img.jpg&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/bZDwFA/btqTvQSutCp/6ik0X9eAviBLZhV3U5pF3K/img.jpg&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FbZDwFA%2FbtqTvQSutCp%2F6ik0X9eAviBLZhV3U5pF3K%2Fimg.jpg&quot; width=&quot;100%&quot; data-origin-width=&quot;1200&quot; data-origin-height=&quot;846&quot; data-ke-mobilestyle=&quot;widthContent&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;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;/p&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size18&quot;&gt;삼성전자는 이번 갤럭시 S21의 카메라 성능을 극찬하며,&lt;/p&gt;
&lt;p data-ke-size=&quot;size18&quot;&gt;언팩행사에서의 시간 대부분을 카메라 성능을 소개하는데 사용하였습니다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size18&quot;&gt;그만큼 카메라 성능의 자신이 있다는 이야기 입니다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size18&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size18&quot;&gt;갤럭시S21은 &lt;b&gt;8K 동영상 촬영&lt;/b&gt;을 지원합니다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size18&quot;&gt;또한, 여러대의 카메라로 동시에 촬영하는 &lt;b&gt;'디렉터스 뷰'&lt;/b&gt; 기능 등을 탑재했습니다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size18&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size18&quot;&gt;특히 갤럭시 S21 울트라 모델은 최고 &lt;b&gt;1억 800만 화소 카메라&lt;/b&gt;를 탑재하여,&lt;/p&gt;
&lt;p data-ke-size=&quot;size18&quot;&gt;&lt;b&gt;10배 광학줌&lt;/b&gt;과 &lt;b&gt;100배 디지털 줌&lt;/b&gt;을, 갤럭시 S21과 플러스 모델과는 다르게,&lt;/p&gt;
&lt;p data-ke-size=&quot;size18&quot;&gt;3배나 높은 광학줌과 30배나 높은 디지털 줌을 지원합니다&lt;/p&gt;
&lt;p data-ke-size=&quot;size18&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size18&quot;&gt;또한 삼성전자는 &lt;b&gt;컨투어 컷&lt;/b&gt;이라는 디자인을 이번 갤럭시 S21에 적용을 하여,&lt;/p&gt;
&lt;p data-ke-size=&quot;size18&quot;&gt;속칭 &lt;b&gt;카툭튀를 완화&lt;/b&gt;하였고, &lt;b&gt;카메라 모듈의 내구성을 개선&lt;/b&gt;하엿습니다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size18&quot;&gt;또한 디스플레이는 엣지가 아닌 &lt;b&gt;플랫 디스플레이&lt;/b&gt;를 적용하여, 디스플레이의 내구성을 높였으며,&lt;/p&gt;
&lt;p data-ke-size=&quot;size18&quot;&gt;S21과 S21+는 &lt;b&gt;FHD&lt;/b&gt; 해상도를, 울트라는 &lt;b&gt;QHD&lt;/b&gt; 해상도를 적용하였습니다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size18&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size18&quot;&gt;다행이 &lt;b&gt;120Hz 해상도&lt;/b&gt;는 세개의 모델 전부 다 적용하였습니다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size18&quot;&gt;그리고 루머에 해당하는 &lt;b&gt;S펜 적용&lt;/b&gt;은 &lt;b&gt;울트라 모델&lt;/b&gt;만이 가능합니다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size18&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size18&quot;&gt;가장 중요한 가격은&lt;/p&gt;
&lt;p data-ke-size=&quot;size18&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;
&lt;p data-ke-size=&quot;size18&quot;&gt;&lt;i&gt;&lt;b&gt;갤럭시S21 99만9900원&lt;/b&gt;&lt;/i&gt;&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p data-ke-size=&quot;size18&quot;&gt;&lt;i&gt;&lt;b&gt;갤럭시S21+ 119만9000원&lt;/b&gt;&lt;/i&gt;&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p data-ke-size=&quot;size18&quot;&gt;&lt;b&gt;&lt;i&gt;갤럭시S21 울트라(256GB) 145만2000원&lt;/i&gt;&lt;/b&gt;&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p data-ke-size=&quot;size18&quot;&gt;&lt;i&gt;&lt;b&gt;갤럭시S21 울트라(512GB) 159만9400원&lt;/b&gt;&lt;/i&gt;&lt;/p&gt;
&lt;/li&gt;
&lt;/ul&gt;
&lt;p data-ke-size=&quot;size18&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size18&quot;&gt;로 책정되었으며,&lt;/p&gt;
&lt;p data-ke-size=&quot;size18&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size18&quot;&gt;사전예약은 오는 15일 부터 21일까지 진행하며, 공식 출시는 29일에 출시됩니다.&lt;/p&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;
&lt;hr contenteditable=&quot;false&quot; data-ke-type=&quot;horizontalRule&quot; data-ke-style=&quot;style3&quot; /&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;
&lt;h2 style=&quot;text-align: center;&quot; data-ke-size=&quot;size26&quot;&gt;&lt;b&gt;&lt;span style=&quot;color: #ee2323;&quot;&gt;[사전예약] &lt;span style=&quot;color: #000000;&quot;&gt;갤럭시 S21 최저가 사전예약&lt;/span&gt;&lt;/span&gt;&lt;span&gt;&lt;/span&gt;&lt;/b&gt;&lt;/h2&gt;
&lt;h2 style=&quot;text-align: center;&quot; data-ke-size=&quot;size26&quot;&gt;&lt;a href=&quot;https://coupang-partners-link.vercel.app/redirect?url=U2FsdGVkX1%2B6q8lcaw8mvXlksXXrPDsMMQNWEWT4m1uO%2FYPivmkcSxy%2BjDoALOpC&quot; target=&quot;_blank&quot; rel=&quot;noopener&quot;&gt;&lt;span style=&quot;color: #006dd7;&quot;&gt;&lt;b&gt;[클릭]&lt;/b&gt;&lt;/span&gt;&lt;/a&gt;&lt;/h2&gt;
&lt;h2 style=&quot;text-align: center;&quot; data-ke-size=&quot;size26&quot;&gt;&amp;nbsp;&lt;/h2&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock widthContent&quot; data-filename=&quot;Screenshot_3.png&quot; data-origin-width=&quot;930&quot; data-origin-height=&quot;473&quot; data-ke-mobilestyle=&quot;widthContent&quot;&gt;&lt;a href=&quot;https://coupang-partners-link.vercel.app/redirect?url=U2FsdGVkX1%2B6q8lcaw8mvXlksXXrPDsMMQNWEWT4m1uO%2FYPivmkcSxy%2BjDoALOpC&quot; target=&quot;_blank&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/zMhFi/btqTxBtMYNY/1uNMnS6ThKlVO3qtYg77z1/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FzMhFi%2FbtqTxBtMYNY%2F1uNMnS6ThKlVO3qtYg77z1%2Fimg.png&quot; data-filename=&quot;Screenshot_3.png&quot; data-origin-width=&quot;930&quot; data-origin-height=&quot;473&quot; data-ke-mobilestyle=&quot;widthContent&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;/&gt;&lt;/a&gt;&lt;/figure&gt;
&lt;/p&gt;
&lt;hr style=&quot;margin: 20px auto 0px; border: none; cursor: pointer !important; z-index: 1; font-size: 0px; line-height: 0; background: url('../image/divider-line.svg') center -96px / 200px 420px no-repeat; width: 64px; height: 8px; padding: 18px 20px;&quot; contenteditable=&quot;false&quot; data-ke-type=&quot;horizontalRule&quot; data-ke-style=&quot;style3&quot; /&gt;
&lt;h2 style=&quot;text-align: center;&quot; data-ke-size=&quot;size26&quot;&gt;&lt;b&gt;&lt;span style=&quot;color: #ee2323;&quot;&gt;[사전예약]&lt;span&gt;&amp;nbsp;&lt;/span&gt;&lt;span style=&quot;color: #000000;&quot;&gt;갤럭시 S21 플러스&lt;span&gt;&amp;nbsp;&lt;/span&gt;&lt;b&gt;&lt;span style=&quot;color: #ee2323;&quot;&gt;&lt;span style=&quot;color: #000000;&quot;&gt;최저가 사전예약&lt;/span&gt;&lt;/span&gt;&lt;/b&gt;&lt;/span&gt;&lt;/span&gt;&lt;/b&gt;&lt;/h2&gt;
&lt;h2 style=&quot;text-align: center;&quot; data-ke-size=&quot;size26&quot;&gt;&lt;a href=&quot;https://coupang-partners-link.vercel.app/redirect?url=U2FsdGVkX18BlXxo5RqJ%2FX5Q%2FDEW6%2BmjmI6dlOo1LlsuTiunEcjQtjFousafKOLY&quot;&gt;&lt;span style=&quot;color: #006dd7;&quot;&gt;&lt;b&gt;[클릭]&lt;/b&gt;&lt;/span&gt;&lt;/a&gt;&lt;/h2&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock widthContent&quot; style=&quot;max-width: 100%; height: auto; transition-duration: 0.5s; transition-timing-function: ease; width: 860px;&quot; data-filename=&quot;Screenshot_5.png&quot; data-origin-width=&quot;932&quot; data-origin-height=&quot;598&quot; data-ke-mobilestyle=&quot;widthContent&quot;&gt;&lt;a href=&quot;https://coupang-partners-link.vercel.app/redirect?url=U2FsdGVkX18BlXxo5RqJ%2FX5Q%2FDEW6%2BmjmI6dlOo1LlsuTiunEcjQtjFousafKOLY&quot; target=&quot;_blank&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/bz3jmk/btqTIp5607P/l1r4gKK90LuTNPdypIi6mK/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2Fbz3jmk%2FbtqTIp5607P%2Fl1r4gKK90LuTNPdypIi6mK%2Fimg.png&quot; style=&quot;max-width: 100%; height: auto; transition-duration: 0.5s; transition-timing-function: ease; width: 860px;&quot; data-filename=&quot;Screenshot_5.png&quot; data-origin-width=&quot;932&quot; data-origin-height=&quot;598&quot; data-ke-mobilestyle=&quot;widthContent&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;/&gt;&lt;/a&gt;&lt;/figure&gt;
&lt;/p&gt;
&lt;hr contenteditable=&quot;false&quot; data-ke-type=&quot;horizontalRule&quot; data-ke-style=&quot;style3&quot; /&gt;
&lt;h2 style=&quot;text-align: center;&quot; data-ke-size=&quot;size26&quot;&gt;&lt;b&gt;&lt;span style=&quot;color: #ee2323;&quot;&gt;[사전예약] &lt;span style=&quot;color: #000000;&quot;&gt;갤럭시 S21 울트라&amp;nbsp;&lt;b&gt;&lt;span style=&quot;color: #ee2323;&quot;&gt;&lt;span style=&quot;color: #000000;&quot;&gt;최저가 사전예약&lt;/span&gt;&lt;/span&gt;&lt;/b&gt;&lt;/span&gt;&lt;/span&gt;&lt;/b&gt;&lt;/h2&gt;
&lt;h2 style=&quot;text-align: center;&quot; data-ke-size=&quot;size26&quot;&gt;&lt;a href=&quot;https://coupang-partners-link.vercel.app/redirect?url=U2FsdGVkX19LXNG58IVBXNxK4CxFQvpwA7R8AxEllqdxzGCLY%2BY7L1Z8LWm4W%2BH4&quot; target=&quot;_blank&quot; rel=&quot;noopener&quot;&gt;&lt;span style=&quot;color: #006dd7;&quot;&gt;&lt;b&gt;[클릭]&lt;/b&gt;&lt;/span&gt;&lt;/a&gt;&lt;/h2&gt;
&lt;h2 style=&quot;text-align: center;&quot; data-ke-size=&quot;size26&quot;&gt;&amp;nbsp;&lt;/h2&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock widthContent&quot; data-filename=&quot;Screenshot_4.png&quot; data-origin-width=&quot;941&quot; data-origin-height=&quot;525&quot; data-ke-mobilestyle=&quot;widthContent&quot;&gt;&lt;a href=&quot;https://coupang-partners-link.vercel.app/redirect?url=U2FsdGVkX19LXNG58IVBXNxK4CxFQvpwA7R8AxEllqdxzGCLY%2BY7L1Z8LWm4W%2BH4&quot; target=&quot;_blank&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/HQ1N1/btqTDJjXYaK/VruFCaD2SeipOWMRaP7DZ1/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FHQ1N1%2FbtqTDJjXYaK%2FVruFCaD2SeipOWMRaP7DZ1%2Fimg.png&quot; data-filename=&quot;Screenshot_4.png&quot; data-origin-width=&quot;941&quot; data-origin-height=&quot;525&quot; data-ke-mobilestyle=&quot;widthContent&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;/&gt;&lt;/a&gt;&lt;/figure&gt;
&lt;/p&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-filename=&quot;original_18.png&quot; data-origin-width=&quot;370&quot; data-origin-height=&quot;320&quot; data-ke-mobilestyle=&quot;widthContent&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/I6JLk/btqTDcUkdy2/Sl9lPikeOtXxgC8qbaXxBK/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/I6JLk/btqTDcUkdy2/Sl9lPikeOtXxgC8qbaXxBK/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/I6JLk/btqTDcUkdy2/Sl9lPikeOtXxgC8qbaXxBK/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FI6JLk%2FbtqTDcUkdy2%2FSl9lPikeOtXxgC8qbaXxBK%2Fimg.png&quot; data-filename=&quot;original_18.png&quot; data-origin-width=&quot;370&quot; data-origin-height=&quot;320&quot; data-ke-mobilestyle=&quot;widthContent&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;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;/p&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;</description>
      <category>리뷰 및 사용 TIP</category>
      <author>방현준</author>
      <guid isPermaLink="true">https://noogoonaa.tistory.com/93</guid>
      <comments>https://noogoonaa.tistory.com/93#entry93comment</comments>
      <pubDate>Fri, 15 Jan 2021 10:30:36 +0900</pubDate>
    </item>
    <item>
      <title>DELL P2421D 리뷰 및 드라이버 설치, 제품 인증, 2주 사용기</title>
      <link>https://noogoonaa.tistory.com/92</link>
      <description>&lt;hr contenteditable=&quot;false&quot; data-ke-type=&quot;horizontalRule&quot; data-ke-style=&quot;style5&quot; /&gt;
&lt;p style=&quot;text-align: center;&quot;&gt;&lt;i&gt;&lt;b&gt;&lt;span&gt;해당 제품은 제가 직접 제 돈을 주고 구입하였으며 일체 지원을 받지 않았습니다.&lt;/span&gt;&lt;/b&gt;&lt;/i&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;size18&quot;&gt;&lt;span style=&quot;font-family: AppleSDGothicNeo-Regular, 'Malgun Gothic', '맑은 고딕', dotum, 돋움, sans-serif;&quot;&gt;요새 다들 듀얼모니터를 기본으로 사용합니다.&lt;/span&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size18&quot;&gt;&lt;span style=&quot;font-family: AppleSDGothicNeo-Regular, 'Malgun Gothic', '맑은 고딕', dotum, 돋움, sans-serif;&quot;&gt;저 또한, 듀얼모니터를 사용하고 있구요.&lt;/span&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size18&quot;&gt;&lt;span style=&quot;font-family: AppleSDGothicNeo-Regular, 'Malgun Gothic', '맑은 고딕', dotum, 돋움, sans-serif;&quot;&gt;그런데 사람의 욕심은 끝이 없다고 해야하나요?&lt;/span&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size18&quot;&gt;&lt;span style=&quot;font-family: AppleSDGothicNeo-Regular, 'Malgun Gothic', '맑은 고딕', dotum, 돋움, sans-serif;&quot;&gt;모니터 암을 달아서 책상을 좀더 깨끗히 이용하고 싶다는 생각이 들었습니다.&lt;/span&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size18&quot;&gt;&lt;span style=&quot;font-family: AppleSDGothicNeo-Regular, 'Malgun Gothic', '맑은 고딕', dotum, 돋움, sans-serif;&quot;&gt;하지만 제가 가지고 있던 모니터는 베사홀을 지원하지 않았죠....&lt;/span&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size18&quot;&gt;&lt;span style=&quot;font-family: AppleSDGothicNeo-Regular, 'Malgun Gothic', '맑은 고딕', dotum, 돋움, sans-serif;&quot;&gt;그래서 이번에 모니터를 하나 장만하게 되었습니다.&lt;/span&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size18&quot;&gt;&lt;span style=&quot;font-family: AppleSDGothicNeo-Regular, 'Malgun Gothic', '맑은 고딕', dotum, 돋움, sans-serif;&quot;&gt;바로 &lt;b&gt;DELL P2421D&lt;/b&gt; 입니다.&lt;/span&gt;&lt;/p&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;
&lt;hr contenteditable=&quot;false&quot; data-ke-type=&quot;horizontalRule&quot; data-ke-style=&quot;style1&quot; /&gt;
&lt;h2 data-ke-size=&quot;size26&quot;&gt;&lt;i&gt;&lt;b&gt;&lt;span style=&quot;font-family: AppleSDGothicNeo-Regular, 'Malgun Gothic', '맑은 고딕', dotum, 돋움, sans-serif;&quot;&gt;DELL P2421D 소개&lt;/span&gt;&lt;/b&gt;&lt;/i&gt;&lt;/h2&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-filename=&quot;63201_p2421d_responsive_module_hero.webp&quot; data-origin-width=&quot;504&quot; data-origin-height=&quot;350&quot; data-ke-mobilestyle=&quot;widthContent&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/IACHt/btqRnM4Sw1V/t3ZSjKvIm3yemfD03Af6vK/img.webp&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/IACHt/btqRnM4Sw1V/t3ZSjKvIm3yemfD03Af6vK/img.webp&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/IACHt/btqRnM4Sw1V/t3ZSjKvIm3yemfD03Af6vK/img.webp&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FIACHt%2FbtqRnM4Sw1V%2Ft3ZSjKvIm3yemfD03Af6vK%2Fimg.webp&quot; data-filename=&quot;63201_p2421d_responsive_module_hero.webp&quot; data-origin-width=&quot;504&quot; data-origin-height=&quot;350&quot; data-ke-mobilestyle=&quot;widthContent&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;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;/p&gt;
&lt;p data-ke-size=&quot;size18&quot;&gt;&lt;span style=&quot;font-family: AppleSDGothicNeo-Regular, 'Malgun Gothic', '맑은 고딕', dotum, 돋움, sans-serif;&quot;&gt;모니터 3대 회사중 하나인 Dell에서 나온 21년형 24인치 QHD모니터입니다.&lt;/span&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size18&quot;&gt;&lt;span style=&quot;font-family: AppleSDGothicNeo-Regular, 'Malgun Gothic', '맑은 고딕', dotum, 돋움, sans-serif;&quot;&gt;매년 P24XX시리즈는 나오고 있는데요, 최근에 21년형으로 P2421D를 출시하였습니다.&lt;/span&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size18&quot;&gt;&lt;span style=&quot;font-family: AppleSDGothicNeo-Regular, 'Malgun Gothic', '맑은 고딕', dotum, 돋움, sans-serif;&quot;&gt;사실 이 P시리즈의 델 모니터는 매년 나오는 만큼 그 변화가 미미하긴 하지만,&lt;/span&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size18&quot;&gt;&lt;span style=&quot;font-family: AppleSDGothicNeo-Regular, 'Malgun Gothic', '맑은 고딕', dotum, 돋움, sans-serif;&quot;&gt;그만큼 매년 변화되면서 출시하고 있죠&lt;/span&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size18&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size18&quot;&gt;&lt;span style=&quot;font-family: AppleSDGothicNeo-Regular, 'Malgun Gothic', '맑은 고딕', dotum, 돋움, sans-serif;&quot;&gt;먼저 P2421D 모니터 스펙을 알아보도록 하겠습니다.&lt;/span&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size18&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;table style=&quot;border-collapse: collapse; width: 100%; height: 400px;&quot; border=&quot;1&quot; data-ke-style=&quot;style4&quot;&gt;
&lt;tbody&gt;
&lt;tr style=&quot;height: 20px;&quot;&gt;
&lt;td style=&quot;width: 50%; height: 20px;&quot;&gt;
&lt;p data-ke-size=&quot;size18&quot;&gt;&lt;b&gt;&lt;span style=&quot;font-family: AppleSDGothicNeo-Regular, 'Malgun Gothic', '맑은 고딕', dotum, 돋움, sans-serif;&quot;&gt;제조회사&lt;/span&gt;&lt;/b&gt;&lt;/p&gt;
&lt;/td&gt;
&lt;td style=&quot;width: 50%; height: 20px;&quot;&gt;
&lt;p data-ke-size=&quot;size18&quot;&gt;&lt;i&gt;&lt;span style=&quot;font-family: AppleSDGothicNeo-Regular, 'Malgun Gothic', '맑은 고딕', dotum, 돋움, sans-serif;&quot;&gt;DELL&lt;/span&gt;&lt;/i&gt;&lt;/p&gt;
&lt;/td&gt;
&lt;/tr&gt;
&lt;tr style=&quot;height: 20px;&quot;&gt;
&lt;td style=&quot;width: 50%; height: 20px;&quot;&gt;
&lt;p data-ke-size=&quot;size18&quot;&gt;&lt;b&gt;&lt;span style=&quot;font-family: AppleSDGothicNeo-Regular, 'Malgun Gothic', '맑은 고딕', dotum, 돋움, sans-serif;&quot;&gt;화면크기&lt;/span&gt;&lt;/b&gt;&lt;/p&gt;
&lt;/td&gt;
&lt;td style=&quot;width: 50%; height: 20px;&quot;&gt;
&lt;p data-ke-size=&quot;size18&quot;&gt;&lt;i&gt;&lt;span style=&quot;font-family: AppleSDGothicNeo-Regular, 'Malgun Gothic', '맑은 고딕', dotum, 돋움, sans-serif;&quot;&gt;60.45cm(24인치)&lt;/span&gt;&lt;/i&gt;&lt;/p&gt;
&lt;/td&gt;
&lt;/tr&gt;
&lt;tr style=&quot;height: 20px;&quot;&gt;
&lt;td style=&quot;width: 50%; height: 20px;&quot;&gt;
&lt;p data-ke-size=&quot;size18&quot;&gt;&lt;b&gt;&lt;span style=&quot;font-family: AppleSDGothicNeo-Regular, 'Malgun Gothic', '맑은 고딕', dotum, 돋움, sans-serif;&quot;&gt;화면비율&lt;/span&gt;&lt;/b&gt;&lt;/p&gt;
&lt;/td&gt;
&lt;td style=&quot;width: 50%; height: 20px;&quot;&gt;
&lt;p data-ke-size=&quot;size18&quot;&gt;&lt;i&gt;&lt;span style=&quot;font-family: AppleSDGothicNeo-Regular, 'Malgun Gothic', '맑은 고딕', dotum, 돋움, sans-serif;&quot;&gt;16:9(와이드)&lt;/span&gt;&lt;/i&gt;&lt;/p&gt;
&lt;/td&gt;
&lt;/tr&gt;
&lt;tr style=&quot;height: 20px;&quot;&gt;
&lt;td style=&quot;width: 50%; height: 20px;&quot;&gt;
&lt;p data-ke-size=&quot;size18&quot;&gt;&lt;b&gt;&lt;span style=&quot;font-family: AppleSDGothicNeo-Regular, 'Malgun Gothic', '맑은 고딕', dotum, 돋움, sans-serif;&quot;&gt;패널형태&lt;/span&gt;&lt;/b&gt;&lt;/p&gt;
&lt;/td&gt;
&lt;td style=&quot;width: 50%; height: 20px;&quot;&gt;
&lt;p data-ke-size=&quot;size18&quot;&gt;&lt;i&gt;&lt;span style=&quot;font-family: AppleSDGothicNeo-Regular, 'Malgun Gothic', '맑은 고딕', dotum, 돋움, sans-serif;&quot;&gt;평면&lt;/span&gt;&lt;/i&gt;&lt;/p&gt;
&lt;/td&gt;
&lt;/tr&gt;
&lt;tr style=&quot;height: 20px;&quot;&gt;
&lt;td style=&quot;width: 50%; height: 20px;&quot;&gt;
&lt;p data-ke-size=&quot;size18&quot;&gt;&lt;b&gt;&lt;span style=&quot;font-family: AppleSDGothicNeo-Regular, 'Malgun Gothic', '맑은 고딕', dotum, 돋움, sans-serif;&quot;&gt;패널종료&lt;/span&gt;&lt;/b&gt;&lt;/p&gt;
&lt;/td&gt;
&lt;td style=&quot;width: 50%; height: 20px;&quot;&gt;
&lt;p data-ke-size=&quot;size18&quot;&gt;&lt;i&gt;&lt;span style=&quot;font-family: AppleSDGothicNeo-Regular, 'Malgun Gothic', '맑은 고딕', dotum, 돋움, sans-serif;&quot;&gt;IPS&lt;/span&gt;&lt;/i&gt;&lt;/p&gt;
&lt;/td&gt;
&lt;/tr&gt;
&lt;tr style=&quot;height: 20px;&quot;&gt;
&lt;td style=&quot;width: 50%; height: 20px;&quot;&gt;
&lt;p data-ke-size=&quot;size18&quot;&gt;&lt;b&gt;&lt;span style=&quot;font-family: AppleSDGothicNeo-Regular, 'Malgun Gothic', '맑은 고딕', dotum, 돋움, sans-serif;&quot;&gt;시야각&lt;/span&gt;&lt;/b&gt;&lt;/p&gt;
&lt;/td&gt;
&lt;td style=&quot;width: 50%; height: 20px;&quot;&gt;
&lt;p data-ke-size=&quot;size18&quot;&gt;&lt;i&gt;&lt;span style=&quot;font-family: AppleSDGothicNeo-Regular, 'Malgun Gothic', '맑은 고딕', dotum, 돋움, sans-serif;&quot;&gt;광시야각&lt;/span&gt;&lt;/i&gt;&lt;/p&gt;
&lt;/td&gt;
&lt;/tr&gt;
&lt;tr style=&quot;height: 20px;&quot;&gt;
&lt;td style=&quot;width: 50%; height: 20px;&quot;&gt;
&lt;p data-ke-size=&quot;size18&quot;&gt;&lt;b&gt;&lt;span style=&quot;font-family: AppleSDGothicNeo-Regular, 'Malgun Gothic', '맑은 고딕', dotum, 돋움, sans-serif;&quot;&gt;해상도&lt;/span&gt;&lt;/b&gt;&lt;/p&gt;
&lt;/td&gt;
&lt;td style=&quot;width: 50%; height: 20px;&quot;&gt;
&lt;p data-ke-size=&quot;size18&quot;&gt;&lt;i&gt;&lt;span style=&quot;font-family: AppleSDGothicNeo-Regular, 'Malgun Gothic', '맑은 고딕', dotum, 돋움, sans-serif;&quot;&gt;QHD(2560 X 1440)&lt;/span&gt;&lt;/i&gt;&lt;/p&gt;
&lt;/td&gt;
&lt;/tr&gt;
&lt;tr style=&quot;height: 20px;&quot;&gt;
&lt;td style=&quot;width: 50%; height: 20px;&quot;&gt;
&lt;p data-ke-size=&quot;size18&quot;&gt;&lt;b&gt;&lt;span style=&quot;font-family: AppleSDGothicNeo-Regular, 'Malgun Gothic', '맑은 고딕', dotum, 돋움, sans-serif;&quot;&gt;응답속도&lt;/span&gt;&lt;/b&gt;&lt;/p&gt;
&lt;/td&gt;
&lt;td style=&quot;width: 50%; height: 20px;&quot;&gt;
&lt;p data-ke-size=&quot;size18&quot;&gt;&lt;i&gt;&lt;span style=&quot;font-family: AppleSDGothicNeo-Regular, 'Malgun Gothic', '맑은 고딕', dotum, 돋움, sans-serif;&quot;&gt;5ms&lt;/span&gt;&lt;/i&gt;&lt;/p&gt;
&lt;/td&gt;
&lt;/tr&gt;
&lt;tr style=&quot;height: 20px;&quot;&gt;
&lt;td style=&quot;width: 50%; height: 20px;&quot;&gt;
&lt;p data-ke-size=&quot;size18&quot;&gt;&lt;b&gt;&lt;span style=&quot;font-family: AppleSDGothicNeo-Regular, 'Malgun Gothic', '맑은 고딕', dotum, 돋움, sans-serif;&quot;&gt;명암비&lt;/span&gt;&lt;/b&gt;&lt;/p&gt;
&lt;/td&gt;
&lt;td style=&quot;width: 50%; height: 20px;&quot;&gt;
&lt;p data-ke-size=&quot;size18&quot;&gt;&lt;i&gt;&lt;span style=&quot;font-family: AppleSDGothicNeo-Regular, 'Malgun Gothic', '맑은 고딕', dotum, 돋움, sans-serif;&quot;&gt;1000,:1&lt;/span&gt;&lt;/i&gt;&lt;/p&gt;
&lt;/td&gt;
&lt;/tr&gt;
&lt;tr style=&quot;height: 20px;&quot;&gt;
&lt;td style=&quot;width: 50%; height: 20px;&quot;&gt;
&lt;p data-ke-size=&quot;size18&quot;&gt;&lt;b&gt;&lt;span style=&quot;font-family: AppleSDGothicNeo-Regular, 'Malgun Gothic', '맑은 고딕', dotum, 돋움, sans-serif;&quot;&gt;픽셀피티&lt;/span&gt;&lt;/b&gt;&lt;/p&gt;
&lt;/td&gt;
&lt;td style=&quot;width: 50%; height: 20px;&quot;&gt;
&lt;p data-ke-size=&quot;size18&quot;&gt;&lt;i&gt;&lt;span style=&quot;font-family: AppleSDGothicNeo-Regular, 'Malgun Gothic', '맑은 고딕', dotum, 돋움, sans-serif;&quot;&gt;0.2058mm&lt;/span&gt;&lt;/i&gt;&lt;/p&gt;
&lt;/td&gt;
&lt;/tr&gt;
&lt;tr style=&quot;height: 20px;&quot;&gt;
&lt;td style=&quot;width: 50%; height: 20px;&quot;&gt;
&lt;p data-ke-size=&quot;size18&quot;&gt;&lt;b&gt;&lt;span style=&quot;font-family: AppleSDGothicNeo-Regular, 'Malgun Gothic', '맑은 고딕', dotum, 돋움, sans-serif;&quot;&gt;패널표면처리&lt;/span&gt;&lt;/b&gt;&lt;/p&gt;
&lt;/td&gt;
&lt;td style=&quot;width: 50%; height: 20px;&quot;&gt;
&lt;p data-ke-size=&quot;size18&quot;&gt;&lt;i&gt;&lt;span style=&quot;font-family: AppleSDGothicNeo-Regular, 'Malgun Gothic', '맑은 고딕', dotum, 돋움, sans-serif;&quot;&gt;안티글레어&lt;/span&gt;&lt;/i&gt;&lt;/p&gt;
&lt;/td&gt;
&lt;/tr&gt;
&lt;tr style=&quot;height: 20px;&quot;&gt;
&lt;td style=&quot;width: 50%; height: 20px;&quot;&gt;
&lt;p data-ke-size=&quot;size18&quot;&gt;&lt;b&gt;&lt;span style=&quot;font-family: AppleSDGothicNeo-Regular, 'Malgun Gothic', '맑은 고딕', dotum, 돋움, sans-serif;&quot;&gt;최대주샤율&lt;/span&gt;&lt;/b&gt;&lt;/p&gt;
&lt;/td&gt;
&lt;td style=&quot;width: 50%; height: 20px;&quot;&gt;
&lt;p data-ke-size=&quot;size18&quot;&gt;&lt;i&gt;&lt;span style=&quot;font-family: AppleSDGothicNeo-Regular, 'Malgun Gothic', '맑은 고딕', dotum, 돋움, sans-serif;&quot;&gt;60Hz&lt;/span&gt;&lt;/i&gt;&lt;/p&gt;
&lt;/td&gt;
&lt;/tr&gt;
&lt;tr style=&quot;height: 20px;&quot;&gt;
&lt;td style=&quot;width: 50%; height: 120px;&quot; rowspan=&quot;6&quot;&gt;
&lt;p data-ke-size=&quot;size18&quot;&gt;&lt;b&gt;&lt;span style=&quot;font-family: AppleSDGothicNeo-Regular, 'Malgun Gothic', '맑은 고딕', dotum, 돋움, sans-serif;&quot;&gt;부가기능&lt;/span&gt;&lt;/b&gt;&lt;/p&gt;
&lt;/td&gt;
&lt;td style=&quot;width: 50%; height: 20px;&quot;&gt;
&lt;p data-ke-size=&quot;size18&quot;&gt;&lt;i&gt;&lt;span style=&quot;font-family: AppleSDGothicNeo-Regular, 'Malgun Gothic', '맑은 고딕', dotum, 돋움, sans-serif;&quot;&gt;DP 포트 X 1&lt;/span&gt;&lt;/i&gt;&lt;/p&gt;
&lt;/td&gt;
&lt;/tr&gt;
&lt;tr style=&quot;height: 20px;&quot;&gt;
&lt;td style=&quot;width: 50%; height: 20px;&quot;&gt;
&lt;p data-ke-size=&quot;size18&quot;&gt;&lt;i&gt;&lt;span style=&quot;font-family: AppleSDGothicNeo-Regular, 'Malgun Gothic', '맑은 고딕', dotum, 돋움, sans-serif;&quot;&gt;HDMI 포트 X 1&lt;/span&gt;&lt;/i&gt;&lt;/p&gt;
&lt;/td&gt;
&lt;/tr&gt;
&lt;tr style=&quot;height: 20px;&quot;&gt;
&lt;td style=&quot;width: 50%; height: 20px;&quot;&gt;
&lt;p data-ke-size=&quot;size18&quot;&gt;&lt;i&gt;&lt;span style=&quot;font-family: AppleSDGothicNeo-Regular, 'Malgun Gothic', '맑은 고딕', dotum, 돋움, sans-serif;&quot;&gt;USB 포트 X 2&lt;/span&gt;&lt;/i&gt;&lt;/p&gt;
&lt;/td&gt;
&lt;/tr&gt;
&lt;tr style=&quot;height: 20px;&quot;&gt;
&lt;td style=&quot;width: 50%; height: 20px;&quot;&gt;
&lt;p data-ke-size=&quot;size18&quot;&gt;&lt;i&gt;&lt;span style=&quot;color: #333333; font-family: AppleSDGothicNeo-Regular, 'Malgun Gothic', '맑은 고딕', dotum, 돋움, sans-serif;&quot;&gt;USB 3.0 포트 X 2&lt;/span&gt;&lt;/i&gt;&lt;/p&gt;
&lt;/td&gt;
&lt;/tr&gt;
&lt;tr style=&quot;height: 20px;&quot;&gt;
&lt;td style=&quot;width: 50%; height: 20px;&quot;&gt;
&lt;p data-ke-size=&quot;size18&quot;&gt;&lt;i&gt;&lt;span style=&quot;font-family: AppleSDGothicNeo-Regular, 'Malgun Gothic', '맑은 고딕', dotum, 돋움, sans-serif;&quot;&gt;피벗기능&lt;/span&gt;&lt;/i&gt;&lt;/p&gt;
&lt;/td&gt;
&lt;/tr&gt;
&lt;tr style=&quot;height: 20px;&quot;&gt;
&lt;td style=&quot;width: 50%; height: 20px;&quot;&gt;
&lt;p data-ke-size=&quot;size18&quot;&gt;&lt;i&gt;&lt;span style=&quot;font-family: AppleSDGothicNeo-Regular, 'Malgun Gothic', '맑은 고딕', dotum, 돋움, sans-serif;&quot;&gt;틸트&lt;/span&gt;&lt;/i&gt;&lt;/p&gt;
&lt;/td&gt;
&lt;/tr&gt;
&lt;tr style=&quot;height: 20px;&quot;&gt;
&lt;td style=&quot;width: 50%; height: 20px;&quot;&gt;
&lt;p data-ke-size=&quot;size18&quot;&gt;&lt;b&gt;&lt;span style=&quot;font-family: AppleSDGothicNeo-Regular, 'Malgun Gothic', '맑은 고딕', dotum, 돋움, sans-serif;&quot;&gt;베사홀(VESA), 월마운트&lt;/span&gt;&lt;/b&gt;&lt;/p&gt;
&lt;/td&gt;
&lt;td style=&quot;width: 50%; height: 20px;&quot;&gt;
&lt;p data-ke-size=&quot;size18&quot;&gt;&lt;i&gt;&lt;span style=&quot;font-family: AppleSDGothicNeo-Regular, 'Malgun Gothic', '맑은 고딕', dotum, 돋움, sans-serif;&quot;&gt;100 X 100&lt;span style=&quot;color: #333333;&quot;&gt;mm&lt;/span&gt;&lt;/span&gt;&lt;/i&gt;&lt;/p&gt;
&lt;/td&gt;
&lt;/tr&gt;
&lt;tr style=&quot;height: 20px;&quot;&gt;
&lt;td style=&quot;width: 50%; height: 20px;&quot;&gt;
&lt;p data-ke-size=&quot;size18&quot;&gt;&lt;b&gt;&lt;span style=&quot;font-family: AppleSDGothicNeo-Regular, 'Malgun Gothic', '맑은 고딕', dotum, 돋움, sans-serif;&quot;&gt;무게&lt;/span&gt;&lt;/b&gt;&lt;/p&gt;
&lt;/td&gt;
&lt;td style=&quot;width: 50%; height: 20px;&quot;&gt;
&lt;p data-ke-size=&quot;size18&quot;&gt;&lt;i&gt;&lt;span style=&quot;font-family: AppleSDGothicNeo-Regular, 'Malgun Gothic', '맑은 고딕', dotum, 돋움, sans-serif;&quot;&gt;3.37Kg&lt;/span&gt;&lt;/i&gt;&lt;/p&gt;
&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;
&lt;p data-ke-size=&quot;size18&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size18&quot;&gt;&lt;span style=&quot;font-family: AppleSDGothicNeo-Regular, 'Malgun Gothic', '맑은 고딕', dotum, 돋움, sans-serif;&quot;&gt;꽤 잘 빠진 모니터가 아닐 수 없네요&lt;/span&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size18&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;hr contenteditable=&quot;false&quot; data-ke-type=&quot;horizontalRule&quot; data-ke-style=&quot;style1&quot; /&gt;
&lt;h2 data-ke-size=&quot;size26&quot;&gt;&lt;i&gt;&lt;b&gt;&lt;span style=&quot;color: #333333; font-family: AppleSDGothicNeo-Regular, 'Malgun Gothic', '맑은 고딕', dotum, 돋움, sans-serif;&quot;&gt;DELL P2421D 개봉기 및 설치&lt;/span&gt;&lt;/b&gt;&lt;/i&gt;&lt;/h2&gt;
&lt;p&gt;&lt;figure class=&quot;imagegridblock&quot;&gt;
  &lt;div class=&quot;image-container&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/bobhDq/btqRnMqeCYx/Cu8g8YcHhXy3JBC16fktZ0/img.jpg&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/bobhDq/btqRnMqeCYx/Cu8g8YcHhXy3JBC16fktZ0/img.jpg&quot; data-filename=&quot;KakaoTalk_20201224_153359755.jpg&quot; data-origin-width=&quot;4032&quot; data-origin-height=&quot;3024&quot; style=&quot;width: 49.4186%; margin-right: 10px;&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/bobhDq/btqRnMqeCYx/Cu8g8YcHhXy3JBC16fktZ0/img.jpg&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FbobhDq%2FbtqRnMqeCYx%2FCu8g8YcHhXy3JBC16fktZ0%2Fimg.jpg&quot; onerror=&quot;this.onerror=null; this.src='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png'; this.srcset='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png';&quot; loading=&quot;lazy&quot; width=&quot;4032&quot; height=&quot;3024&quot;/&gt;&lt;/span&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/uToso/btqRlHpeayX/dnYl7SJuF0LgdRy7qlR1vk/img.jpg&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/uToso/btqRlHpeayX/dnYl7SJuF0LgdRy7qlR1vk/img.jpg&quot; data-filename=&quot;KakaoTalk_20201224_153359755_02.jpg&quot; data-origin-width=&quot;4032&quot; data-origin-height=&quot;3024&quot; style=&quot;width: 49.4186%;&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/uToso/btqRlHpeayX/dnYl7SJuF0LgdRy7qlR1vk/img.jpg&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FuToso%2FbtqRlHpeayX%2FdnYl7SJuF0LgdRy7qlR1vk%2Fimg.jpg&quot; onerror=&quot;this.onerror=null; this.src='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png'; this.srcset='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png';&quot; loading=&quot;lazy&quot; width=&quot;4032&quot; height=&quot;3024&quot;/&gt;&lt;/span&gt;&lt;/div&gt;
&lt;/figure&gt;
&lt;figure class=&quot;imagegridblock&quot;&gt;
  &lt;div class=&quot;image-container&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/sLig4/btqRqbJfUKL/NfC2Blf5ThX9eXdBdQIMe1/img.jpg&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/sLig4/btqRqbJfUKL/NfC2Blf5ThX9eXdBdQIMe1/img.jpg&quot; data-filename=&quot;KakaoTalk_20201224_153359755_01.jpg&quot; data-origin-width=&quot;4032&quot; data-origin-height=&quot;3024&quot; style=&quot;width: 63.2558%; margin-right: 10px;&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/sLig4/btqRqbJfUKL/NfC2Blf5ThX9eXdBdQIMe1/img.jpg&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FsLig4%2FbtqRqbJfUKL%2FNfC2Blf5ThX9eXdBdQIMe1%2Fimg.jpg&quot; onerror=&quot;this.onerror=null; this.src='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png'; this.srcset='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png';&quot; loading=&quot;lazy&quot; width=&quot;4032&quot; height=&quot;3024&quot;/&gt;&lt;/span&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/7rhlP/btqRqbWNRkP/I2DDAqNJkpteGlWRIMBDH1/img.jpg&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/7rhlP/btqRqbWNRkP/I2DDAqNJkpteGlWRIMBDH1/img.jpg&quot; data-origin-width=&quot;3024&quot; data-origin-height=&quot;4032&quot; data-filename=&quot;KakaoTalk_20201224_153359755_03.jpg&quot; style=&quot;width: 35.5814%;&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/7rhlP/btqRqbWNRkP/I2DDAqNJkpteGlWRIMBDH1/img.jpg&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2F7rhlP%2FbtqRqbWNRkP%2FI2DDAqNJkpteGlWRIMBDH1%2Fimg.jpg&quot; onerror=&quot;this.onerror=null; this.src='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png'; this.srcset='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png';&quot; loading=&quot;lazy&quot; width=&quot;3024&quot; height=&quot;4032&quot;/&gt;&lt;/span&gt;&lt;/div&gt;
&lt;/figure&gt;
&lt;/p&gt;
&lt;p data-ke-size=&quot;size18&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size18&quot;&gt;&lt;span style=&quot;font-family: AppleSDGothicNeo-Regular, 'Malgun Gothic', '맑은 고딕', dotum, 돋움, sans-serif;&quot;&gt;처음 모니터가 오면 이런식으로 옵니다.&lt;/span&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size18&quot;&gt;&lt;span style=&quot;font-family: AppleSDGothicNeo-Regular, 'Malgun Gothic', '맑은 고딕', dotum, 돋움, sans-serif;&quot;&gt;모니터는 세로로 세워서 열지 말고 가로로 눕혀서 열라고 되어 있습니다.&lt;/span&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size18&quot;&gt;&lt;span style=&quot;font-family: AppleSDGothicNeo-Regular, 'Malgun Gothic', '맑은 고딕', dotum, 돋움, sans-serif;&quot;&gt;이러한 세세한 설명이 DELL을 명품회사로 만드는 것이라 생각이 드네요.&lt;/span&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size18&quot;&gt;&lt;span style=&quot;font-family: AppleSDGothicNeo-Regular, 'Malgun Gothic', '맑은 고딕', dotum, 돋움, sans-serif;&quot;&gt;이제 한번 부품을 봐보도록 하겠습니다.&lt;/span&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size18&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;&lt;figure class=&quot;imagegridblock&quot;&gt;
  &lt;div class=&quot;image-container&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/b76a0g/btqRolMDs53/tkBGB7hKi6H8D8jJw1ag6k/img.jpg&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/b76a0g/btqRolMDs53/tkBGB7hKi6H8D8jJw1ag6k/img.jpg&quot; data-filename=&quot;KakaoTalk_20201224_153359755_04.jpg&quot; data-origin-width=&quot;4032&quot; data-origin-height=&quot;3024&quot; style=&quot;width: 49.4186%; margin-right: 10px;&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/b76a0g/btqRolMDs53/tkBGB7hKi6H8D8jJw1ag6k/img.jpg&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2Fb76a0g%2FbtqRolMDs53%2FtkBGB7hKi6H8D8jJw1ag6k%2Fimg.jpg&quot; onerror=&quot;this.onerror=null; this.src='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png'; this.srcset='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png';&quot; loading=&quot;lazy&quot; width=&quot;4032&quot; height=&quot;3024&quot;/&gt;&lt;/span&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/ciDaj0/btqRoQFDvGc/3iGOkuF0aRlycMd2DGh6ik/img.jpg&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/ciDaj0/btqRoQFDvGc/3iGOkuF0aRlycMd2DGh6ik/img.jpg&quot; data-filename=&quot;KakaoTalk_20201224_153359755_05.jpg&quot; data-origin-width=&quot;4032&quot; data-origin-height=&quot;3024&quot; style=&quot;width: 49.4186%;&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/ciDaj0/btqRoQFDvGc/3iGOkuF0aRlycMd2DGh6ik/img.jpg&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FciDaj0%2FbtqRoQFDvGc%2F3iGOkuF0aRlycMd2DGh6ik%2Fimg.jpg&quot; onerror=&quot;this.onerror=null; this.src='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png'; this.srcset='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png';&quot; loading=&quot;lazy&quot; width=&quot;4032&quot; height=&quot;3024&quot;/&gt;&lt;/span&gt;&lt;/div&gt;
&lt;/figure&gt;
&lt;/p&gt;
&lt;p data-ke-size=&quot;size18&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size18&quot;&gt;&lt;span style=&quot;font-family: AppleSDGothicNeo-Regular, 'Malgun Gothic', '맑은 고딕', dotum, 돋움, sans-serif;&quot;&gt;모니터 부품은 심플합니다.&lt;/span&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size18&quot;&gt;&lt;span style=&quot;font-family: AppleSDGothicNeo-Regular, 'Malgun Gothic', '맑은 고딕', dotum, 돋움, sans-serif;&quot;&gt;모니터 스탠드와 HDMI케이블, DP 케이블, 전원 케이블 입니다.&lt;/span&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size18&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-filename=&quot;KakaoTalk_20201224_153359755_06.jpg&quot; data-origin-width=&quot;3024&quot; data-origin-height=&quot;4032&quot; data-ke-mobilestyle=&quot;widthContent&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/6PVWf/btqRigFyNjp/1qOK3RYaK51k9zwk9gv0K1/img.jpg&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/6PVWf/btqRigFyNjp/1qOK3RYaK51k9zwk9gv0K1/img.jpg&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/6PVWf/btqRigFyNjp/1qOK3RYaK51k9zwk9gv0K1/img.jpg&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2F6PVWf%2FbtqRigFyNjp%2F1qOK3RYaK51k9zwk9gv0K1%2Fimg.jpg&quot; data-filename=&quot;KakaoTalk_20201224_153359755_06.jpg&quot; data-origin-width=&quot;3024&quot; data-origin-height=&quot;4032&quot; data-ke-mobilestyle=&quot;widthContent&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;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;/p&gt;
&lt;p data-ke-size=&quot;size18&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size18&quot;&gt;&lt;span style=&quot;font-family: AppleSDGothicNeo-Regular, 'Malgun Gothic', '맑은 고딕', dotum, 돋움, sans-serif;&quot;&gt;스탠드에 DELL 로고가 아름다운 모습입니다.&lt;/span&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size18&quot;&gt;&lt;span style=&quot;font-family: AppleSDGothicNeo-Regular, 'Malgun Gothic', '맑은 고딕', dotum, 돋움, sans-serif;&quot;&gt;근데 모니터 암을 쓰시는 분한테는 필요없는 스탠드이므로&lt;/span&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size18&quot;&gt;&lt;span style=&quot;font-family: AppleSDGothicNeo-Regular, 'Malgun Gothic', '맑은 고딕', dotum, 돋움, sans-serif;&quot;&gt;저는 패스하겠습니다.&lt;/span&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size18&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;&lt;figure class=&quot;imagegridblock&quot;&gt;
  &lt;div class=&quot;image-container&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/c15bjL/btqRhftucol/fKndGJdwL1Lk099d1AjGN1/img.jpg&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/c15bjL/btqRhftucol/fKndGJdwL1Lk099d1AjGN1/img.jpg&quot; data-filename=&quot;KakaoTalk_20201224_185645401.jpg&quot; data-origin-width=&quot;3024&quot; data-origin-height=&quot;4032&quot; style=&quot;width: 35.5814%; margin-right: 10px;&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/c15bjL/btqRhftucol/fKndGJdwL1Lk099d1AjGN1/img.jpg&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2Fc15bjL%2FbtqRhftucol%2FfKndGJdwL1Lk099d1AjGN1%2Fimg.jpg&quot; onerror=&quot;this.onerror=null; this.src='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png'; this.srcset='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png';&quot; loading=&quot;lazy&quot; width=&quot;3024&quot; height=&quot;4032&quot;/&gt;&lt;/span&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/cmKniK/btqRqRqfOHZ/S7DhqkYKO5UWfI8mLKkKZ1/img.jpg&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/cmKniK/btqRqRqfOHZ/S7DhqkYKO5UWfI8mLKkKZ1/img.jpg&quot; data-filename=&quot;KakaoTalk_20201224_185645401_01.jpg&quot; data-origin-width=&quot;4032&quot; data-origin-height=&quot;3024&quot; style=&quot;width: 63.2558%;&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/cmKniK/btqRqRqfOHZ/S7DhqkYKO5UWfI8mLKkKZ1/img.jpg&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FcmKniK%2FbtqRqRqfOHZ%2FS7DhqkYKO5UWfI8mLKkKZ1%2Fimg.jpg&quot; onerror=&quot;this.onerror=null; this.src='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png'; this.srcset='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png';&quot; loading=&quot;lazy&quot; width=&quot;4032&quot; height=&quot;3024&quot;/&gt;&lt;/span&gt;&lt;/div&gt;
&lt;/figure&gt;
&lt;figure class=&quot;imagegridblock&quot;&gt;
  &lt;div class=&quot;image-container&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/ca7q8d/btqRjffp6Dn/skZ3Cn095UtpjGzm4fZvM1/img.jpg&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/ca7q8d/btqRjffp6Dn/skZ3Cn095UtpjGzm4fZvM1/img.jpg&quot; data-filename=&quot;KakaoTalk_20201224_185645401_02.jpg&quot; data-origin-width=&quot;4032&quot; data-origin-height=&quot;3024&quot; style=&quot;width: 49.4186%; margin-right: 10px;&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/ca7q8d/btqRjffp6Dn/skZ3Cn095UtpjGzm4fZvM1/img.jpg&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2Fca7q8d%2FbtqRjffp6Dn%2FskZ3Cn095UtpjGzm4fZvM1%2Fimg.jpg&quot; onerror=&quot;this.onerror=null; this.src='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png'; this.srcset='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png';&quot; loading=&quot;lazy&quot; width=&quot;4032&quot; height=&quot;3024&quot;/&gt;&lt;/span&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/bxwIri/btqRoRq13NL/Sou6r9xx1wnDxUZLtBBU2K/img.jpg&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/bxwIri/btqRoRq13NL/Sou6r9xx1wnDxUZLtBBU2K/img.jpg&quot; data-filename=&quot;KakaoTalk_20201224_185645401_03.jpg&quot; data-origin-width=&quot;4032&quot; data-origin-height=&quot;3024&quot; style=&quot;width: 49.4186%;&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/bxwIri/btqRoRq13NL/Sou6r9xx1wnDxUZLtBBU2K/img.jpg&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FbxwIri%2FbtqRoRq13NL%2FSou6r9xx1wnDxUZLtBBU2K%2Fimg.jpg&quot; onerror=&quot;this.onerror=null; this.src='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png'; this.srcset='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png';&quot; loading=&quot;lazy&quot; width=&quot;4032&quot; height=&quot;3024&quot;/&gt;&lt;/span&gt;&lt;/div&gt;
&lt;/figure&gt;
&lt;/p&gt;
&lt;p data-ke-size=&quot;size18&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size18&quot;&gt;&lt;span style=&quot;font-family: AppleSDGothicNeo-Regular, 'Malgun Gothic', '맑은 고딕', dotum, 돋움, sans-serif;&quot;&gt;모니터를 설치한 모습닙니다.&lt;/span&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size18&quot;&gt;&lt;span style=&quot;font-family: AppleSDGothicNeo-Regular, 'Malgun Gothic', '맑은 고딕', dotum, 돋움, sans-serif;&quot;&gt;심플한 모습입니다.&lt;/span&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size18&quot;&gt;&lt;span style=&quot;font-family: AppleSDGothicNeo-Regular, 'Malgun Gothic', '맑은 고딕', dotum, 돋움, sans-serif;&quot;&gt;사실 개봉기와 설치기는 크게 특색 있는게 없습니다.&lt;/span&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size18&quot;&gt;&lt;span style=&quot;font-family: AppleSDGothicNeo-Regular, 'Malgun Gothic', '맑은 고딕', dotum, 돋움, sans-serif;&quot;&gt;그냥 설치하면 돼요&lt;/span&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size18&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;hr contenteditable=&quot;false&quot; data-ke-type=&quot;horizontalRule&quot; data-ke-style=&quot;style1&quot; /&gt;
&lt;h2 data-ke-size=&quot;size26&quot;&gt;&lt;i&gt;&lt;b&gt;&lt;span style=&quot;font-family: AppleSDGothicNeo-Regular, 'Malgun Gothic', '맑은 고딕', dotum, 돋움, sans-serif;&quot;&gt;DELL P2421D 드라이버 설치&lt;/span&gt;&lt;/b&gt;&lt;/i&gt;&lt;/h2&gt;
&lt;p data-ke-size=&quot;size18&quot;&gt;&lt;span style=&quot;font-family: AppleSDGothicNeo-Regular, 'Malgun Gothic', '맑은 고딕', dotum, 돋움, sans-serif;&quot;&gt;만약 모니터를 다 설치하셨다면, 두가지 해야할 부분이 있습니다.&lt;/span&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size18&quot;&gt;&lt;span style=&quot;font-family: AppleSDGothicNeo-Regular, 'Malgun Gothic', '맑은 고딕', dotum, 돋움, sans-serif;&quot;&gt;바로 시리얼 등록과 모니터 드라이버 및 어플리케이션 설치입니다.&lt;/span&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size18&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size18&quot;&gt;&lt;span style=&quot;font-family: AppleSDGothicNeo-Regular, 'Malgun Gothic', '맑은 고딕', dotum, 돋움, sans-serif;&quot;&gt;먼저 드라이브를 설치 및 어플리케이션 설치부터 해보겠습니다.&lt;/span&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size18&quot;&gt;&lt;b&gt;&lt;span style=&quot;font-family: AppleSDGothicNeo-Regular, 'Malgun Gothic', '맑은 고딕', dotum, 돋움, sans-serif;&quot;&gt;해당 사이트를 들어갑니다.&lt;/span&gt;&lt;/b&gt;&lt;/p&gt;
&lt;figure id=&quot;og_1608804537436&quot; contenteditable=&quot;false&quot; data-ke-type=&quot;opengraph&quot; data-og-type=&quot;website&quot; data-og-title=&quot;Dell P2421D에 대한 지원 | 드라이버 및 다운로드 | Dell 대한민국&quot; data-og-description=&quot;&quot; data-og-host=&quot;www.dell.com&quot; data-og-source-url=&quot;https://www.dell.com/support/home/ko-kr/product-support/product/dell-p2421d-monitor/drivers&quot; data-og-url=&quot;https://www.dell.com/support/home/ko-kr/product-support/product/dell-p2421d-monitor/drivers&quot; data-og-image=&quot;https://scrap.kakaocdn.net/dn/8P2ZY/hyIGwgRFli/ZSsw6UpsgdetfQR4fqnkUK/img.jpg?width=343&amp;amp;height=301&amp;amp;face=0_0_343_301,https://scrap.kakaocdn.net/dn/Y53A1/hyIGmyxt03/u6xBtfjZ7hfkzW43mNFJQ1/img.jpg?width=343&amp;amp;height=301&amp;amp;face=0_0_343_301&quot;&gt;&lt;a href=&quot;https://www.dell.com/support/home/ko-kr/product-support/product/dell-p2421d-monitor/drivers&quot; target=&quot;_blank&quot; rel=&quot;noopener&quot; data-source-url=&quot;https://www.dell.com/support/home/ko-kr/product-support/product/dell-p2421d-monitor/drivers&quot;&gt;
&lt;div class=&quot;og-image&quot; style=&quot;background-image: url('https://scrap.kakaocdn.net/dn/8P2ZY/hyIGwgRFli/ZSsw6UpsgdetfQR4fqnkUK/img.jpg?width=343&amp;amp;height=301&amp;amp;face=0_0_343_301,https://scrap.kakaocdn.net/dn/Y53A1/hyIGmyxt03/u6xBtfjZ7hfkzW43mNFJQ1/img.jpg?width=343&amp;amp;height=301&amp;amp;face=0_0_343_301');&quot;&gt;&amp;nbsp;&lt;/div&gt;
&lt;div class=&quot;og-text&quot;&gt;
&lt;p class=&quot;og-title&quot;&gt;Dell P2421D에 대한 지원 | 드라이버 및 다운로드 | Dell 대한민국&lt;/p&gt;
&lt;p class=&quot;og-desc&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p class=&quot;og-host&quot;&gt;www.dell.com&lt;/p&gt;
&lt;/div&gt;
&lt;/a&gt;&lt;/figure&gt;
&lt;p data-ke-size=&quot;size18&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-origin-width=&quot;0&quot; data-origin-height=&quot;0&quot; data-ke-mobilestyle=&quot;widthContent&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/bRx9mL/btqRjgrSFFd/5mlWCpWEL3IrsFkKQ3OaFK/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/bRx9mL/btqRjgrSFFd/5mlWCpWEL3IrsFkKQ3OaFK/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/bRx9mL/btqRjgrSFFd/5mlWCpWEL3IrsFkKQ3OaFK/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FbRx9mL%2FbtqRjgrSFFd%2F5mlWCpWEL3IrsFkKQ3OaFK%2Fimg.png&quot; data-origin-width=&quot;0&quot; data-origin-height=&quot;0&quot; data-ke-mobilestyle=&quot;widthContent&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;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;/p&gt;
&lt;p data-ke-size=&quot;size18&quot;&gt;&lt;span style=&quot;font-family: AppleSDGothicNeo-Regular, 'Malgun Gothic', '맑은 고딕', dotum, 돋움, sans-serif;&quot;&gt;그 후 위 사진에 체크되어 있는 프로그램을 설치하세요&lt;/span&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size18&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-origin-width=&quot;0&quot; data-origin-height=&quot;0&quot; data-ke-mobilestyle=&quot;widthContent&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/b0JXnZ/btqRnMcE5vV/xU4qEgpvaqPcSKWqZ2OCH0/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/b0JXnZ/btqRnMcE5vV/xU4qEgpvaqPcSKWqZ2OCH0/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/b0JXnZ/btqRnMcE5vV/xU4qEgpvaqPcSKWqZ2OCH0/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2Fb0JXnZ%2FbtqRnMcE5vV%2FxU4qEgpvaqPcSKWqZ2OCH0%2Fimg.png&quot; data-origin-width=&quot;0&quot; data-origin-height=&quot;0&quot; data-ke-mobilestyle=&quot;widthContent&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;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;/p&gt;
&lt;p data-ke-size=&quot;size18&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size18&quot;&gt;&lt;span style=&quot;font-family: AppleSDGothicNeo-Regular, 'Malgun Gothic', '맑은 고딕', dotum, 돋움, sans-serif;&quot;&gt;그럼 위 사진처럼 다운이 될 것입니다.&lt;/span&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size18&quot;&gt;&lt;span style=&quot;font-family: AppleSDGothicNeo-Regular, 'Malgun Gothic', '맑은 고딕', dotum, 돋움, sans-serif;&quot;&gt;이 1번 프로그램은 드라이브고&lt;/span&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size18&quot;&gt;&lt;span style=&quot;font-family: AppleSDGothicNeo-Regular, 'Malgun Gothic', '맑은 고딕', dotum, 돋움, sans-serif;&quot;&gt;2번 프로그램은 디스플레이 설정 어플리케이션 입니다.&lt;/span&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size18&quot;&gt;&lt;span style=&quot;font-family: AppleSDGothicNeo-Regular, 'Malgun Gothic', '맑은 고딕', dotum, 돋움, sans-serif;&quot;&gt;먼저 &lt;b&gt;&quot;1번을 클릭&quot;&lt;/b&gt;해 줍니다.&lt;/span&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size18&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;&lt;figure class=&quot;imagegridblock&quot;&gt;
  &lt;div class=&quot;image-container&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/bzAOos/btqRjglaPxp/5UEXdUiOxkae2KXdFLpCK0/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/bzAOos/btqRjglaPxp/5UEXdUiOxkae2KXdFLpCK0/img.png&quot; data-origin-width=&quot;0&quot; data-origin-height=&quot;0&quot; style=&quot;width: 48.5175%; margin-right: 10px;&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/bzAOos/btqRjglaPxp/5UEXdUiOxkae2KXdFLpCK0/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FbzAOos%2FbtqRjglaPxp%2F5UEXdUiOxkae2KXdFLpCK0%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;0&quot; height=&quot;0&quot;/&gt;&lt;/span&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/bngD7a/btqRolMGmqq/yHhQt1XdqCokyZKfG5ToWk/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/bngD7a/btqRolMGmqq/yHhQt1XdqCokyZKfG5ToWk/img.png&quot; data-origin-width=&quot;0&quot; data-origin-height=&quot;0&quot; style=&quot;width: 50.3197%;&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/bngD7a/btqRolMGmqq/yHhQt1XdqCokyZKfG5ToWk/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FbngD7a%2FbtqRolMGmqq%2FyHhQt1XdqCokyZKfG5ToWk%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;0&quot; height=&quot;0&quot;/&gt;&lt;/span&gt;&lt;/div&gt;
&lt;/figure&gt;
&lt;/p&gt;
&lt;p data-ke-size=&quot;size18&quot;&gt;&lt;span style=&quot;font-family: AppleSDGothicNeo-Regular, 'Malgun Gothic', '맑은 고딕', dotum, 돋움, sans-serif;&quot;&gt;그럼 첫번째 사진처럼 뜨게 되는데 OK버튼을 눌러 압축을 풀어줍니다.&lt;/span&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size18&quot;&gt;&lt;span style=&quot;font-family: AppleSDGothicNeo-Regular, 'Malgun Gothic', '맑은 고딕', dotum, 돋움, sans-serif;&quot;&gt;여기서 중요한것은&lt;b&gt; &quot;이 드라이브에 경로&quot;&lt;/b&gt;를 잘 기억해 두어야 합니다.&lt;/span&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size18&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;&lt;figure class=&quot;imagegridblock&quot;&gt;
  &lt;div class=&quot;image-container&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/cBxf7S/btqRjgyAjXU/SCmlZ7oX7LlNZxLe3dh3vk/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/cBxf7S/btqRjgyAjXU/SCmlZ7oX7LlNZxLe3dh3vk/img.png&quot; data-origin-width=&quot;0&quot; data-origin-height=&quot;0&quot; style=&quot;width: 38.2751%; margin-right: 10px;&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/cBxf7S/btqRjgyAjXU/SCmlZ7oX7LlNZxLe3dh3vk/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FcBxf7S%2FbtqRjgyAjXU%2FSCmlZ7oX7LlNZxLe3dh3vk%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;0&quot; height=&quot;0&quot;/&gt;&lt;/span&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/dT15Td/btqRlHCKZBo/AWLmjyGTozPPGCo5oxMX10/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/dT15Td/btqRlHCKZBo/AWLmjyGTozPPGCo5oxMX10/img.png&quot; data-origin-width=&quot;0&quot; data-origin-height=&quot;0&quot; style=&quot;width: 60.5622%;&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/dT15Td/btqRlHCKZBo/AWLmjyGTozPPGCo5oxMX10/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FdT15Td%2FbtqRlHCKZBo%2FAWLmjyGTozPPGCo5oxMX10%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;0&quot; height=&quot;0&quot;/&gt;&lt;/span&gt;&lt;/div&gt;
&lt;/figure&gt;
&lt;/p&gt;
&lt;p data-ke-size=&quot;size18&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size18&quot;&gt;&lt;span style=&quot;font-family: AppleSDGothicNeo-Regular, 'Malgun Gothic', '맑은 고딕', dotum, 돋움, sans-serif;&quot;&gt;그 후 마우스&lt;b&gt; &quot;오른쪽 클릭 후 디스플레이 설정&quot;&lt;/b&gt;에 들어갑니다.&lt;/span&gt;&lt;/p&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-origin-width=&quot;0&quot; data-origin-height=&quot;0&quot; data-ke-mobilestyle=&quot;widthContent&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/OpdSp/btqRnOat9G7/TzCUlDjeKcoRGKbmHtgj41/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/OpdSp/btqRnOat9G7/TzCUlDjeKcoRGKbmHtgj41/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/OpdSp/btqRnOat9G7/TzCUlDjeKcoRGKbmHtgj41/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FOpdSp%2FbtqRnOat9G7%2FTzCUlDjeKcoRGKbmHtgj41%2Fimg.png&quot; data-origin-width=&quot;0&quot; data-origin-height=&quot;0&quot; data-ke-mobilestyle=&quot;widthContent&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;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;figure class=&quot;imageblock alignCenter&quot; data-origin-width=&quot;0&quot; data-origin-height=&quot;0&quot; data-ke-mobilestyle=&quot;widthContent&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/tmEkc/btqRqQZdxwq/xvM8l6IpuXI5r5nKqZ57pk/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/tmEkc/btqRqQZdxwq/xvM8l6IpuXI5r5nKqZ57pk/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/tmEkc/btqRqQZdxwq/xvM8l6IpuXI5r5nKqZ57pk/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FtmEkc%2FbtqRqQZdxwq%2FxvM8l6IpuXI5r5nKqZ57pk%2Fimg.png&quot; data-origin-width=&quot;0&quot; data-origin-height=&quot;0&quot; data-ke-mobilestyle=&quot;widthContent&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;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;/p&gt;
&lt;p data-ke-size=&quot;size18&quot;&gt;&lt;span style=&quot;font-family: AppleSDGothicNeo-Regular, 'Malgun Gothic', '맑은 고딕', dotum, 돋움, sans-serif;&quot;&gt;위 사진처럼 &lt;b&gt;&quot;디스플레이 설정&quot;&lt;/b&gt;에 맨 아래에 있는 &lt;b&gt;&quot;고급 디스플레이 설정&quot;&lt;/b&gt;을 클릭해 준 후&lt;/span&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size18&quot;&gt;&lt;span style=&quot;font-family: AppleSDGothicNeo-Regular, 'Malgun Gothic', '맑은 고딕', dotum, 돋움, sans-serif;&quot;&gt;&lt;b&gt;&quot;디스플레이 2의 어댑터 속성&quot;&lt;/b&gt;을 표시를 클릭해 주세요&lt;/span&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size18&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;&lt;figure class=&quot;imagegridblock&quot;&gt;
  &lt;div class=&quot;image-container&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/bivuNN/btqRjfGpkLS/0wl9s1adTRHCeZhbuqnsDK/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/bivuNN/btqRjfGpkLS/0wl9s1adTRHCeZhbuqnsDK/img.png&quot; data-origin-width=&quot;0&quot; data-origin-height=&quot;0&quot; style=&quot;width: 49.0949%; margin-right: 10px;&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/bivuNN/btqRjfGpkLS/0wl9s1adTRHCeZhbuqnsDK/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FbivuNN%2FbtqRjfGpkLS%2F0wl9s1adTRHCeZhbuqnsDK%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;0&quot; height=&quot;0&quot;/&gt;&lt;/span&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/ryg2x/btqRoQ6G3rp/rNzAkJZSFi3IMMTGMSCUg1/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/ryg2x/btqRoQ6G3rp/rNzAkJZSFi3IMMTGMSCUg1/img.png&quot; data-origin-width=&quot;0&quot; data-origin-height=&quot;0&quot; style=&quot;width: 49.7423%;&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/ryg2x/btqRoQ6G3rp/rNzAkJZSFi3IMMTGMSCUg1/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2Fryg2x%2FbtqRoQ6G3rp%2FrNzAkJZSFi3IMMTGMSCUg1%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;0&quot; height=&quot;0&quot;/&gt;&lt;/span&gt;&lt;/div&gt;
&lt;/figure&gt;
&lt;/p&gt;
&lt;p data-ke-size=&quot;size18&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size18&quot;&gt;&lt;span style=&quot;font-family: AppleSDGothicNeo-Regular, 'Malgun Gothic', '맑은 고딕', dotum, 돋움, sans-serif;&quot;&gt;그럼 위 창이 뜨게 되는데요&lt;/span&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size18&quot;&gt;&lt;span style=&quot;font-family: AppleSDGothicNeo-Regular, 'Malgun Gothic', '맑은 고딕', dotum, 돋움, sans-serif;&quot;&gt;&lt;b&gt;&quot;모니터 탭&quot;&lt;/b&gt;에 들어가 &lt;b&gt;&quot;속성&quot;&lt;/b&gt;을 들어갑니다.&lt;/span&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size18&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;&lt;figure class=&quot;imagegridblock&quot;&gt;
  &lt;div class=&quot;image-container&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/bvhDIu/btqRolMGPCk/F7sjOR3OUJsBtW6b9iz8r0/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/bvhDIu/btqRolMGPCk/F7sjOR3OUJsBtW6b9iz8r0/img.png&quot; data-origin-width=&quot;0&quot; data-origin-height=&quot;0&quot; style=&quot;width: 49.0305%; margin-right: 10px;&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/bvhDIu/btqRolMGPCk/F7sjOR3OUJsBtW6b9iz8r0/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FbvhDIu%2FbtqRolMGPCk%2FF7sjOR3OUJsBtW6b9iz8r0%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;0&quot; height=&quot;0&quot;/&gt;&lt;/span&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/YjMMv/btqRqQrnZ5V/eBPPXvXkgJn5Ib98qekDk1/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/YjMMv/btqRqQrnZ5V/eBPPXvXkgJn5Ib98qekDk1/img.png&quot; data-origin-width=&quot;0&quot; data-origin-height=&quot;0&quot; style=&quot;width: 49.8067%;&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/YjMMv/btqRqQrnZ5V/eBPPXvXkgJn5Ib98qekDk1/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FYjMMv%2FbtqRqQrnZ5V%2FeBPPXvXkgJn5Ib98qekDk1%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;0&quot; height=&quot;0&quot;/&gt;&lt;/span&gt;&lt;/div&gt;
&lt;/figure&gt;
&lt;/p&gt;
&lt;p data-ke-size=&quot;size18&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size18&quot;&gt;&lt;span style=&quot;font-family: AppleSDGothicNeo-Regular, 'Malgun Gothic', '맑은 고딕', dotum, 돋움, sans-serif;&quot;&gt;&lt;b&gt;&quot;드라이버 탭&quot;&lt;/b&gt;에서 &lt;b&gt;&quot;드라이버 업데이트 버튼&quot;&lt;/b&gt;을 클릭해 줍니다.&lt;/span&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size18&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;&lt;figure class=&quot;imagegridblock&quot;&gt;
  &lt;div class=&quot;image-container&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/cnEorm/btqRolFXVwX/LJkVYp4O85CYcc8Tfr99f1/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/cnEorm/btqRolFXVwX/LJkVYp4O85CYcc8Tfr99f1/img.png&quot; data-origin-width=&quot;0&quot; data-origin-height=&quot;0&quot; style=&quot;width: 48.8948%; margin-right: 10px;&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/cnEorm/btqRolFXVwX/LJkVYp4O85CYcc8Tfr99f1/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FcnEorm%2FbtqRolFXVwX%2FLJkVYp4O85CYcc8Tfr99f1%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;0&quot; height=&quot;0&quot;/&gt;&lt;/span&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/cxwkfc/btqRjfzD0SS/PvjXvNlVk9JStWJKbXSTw1/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/cxwkfc/btqRjfzD0SS/PvjXvNlVk9JStWJKbXSTw1/img.png&quot; data-origin-width=&quot;0&quot; data-origin-height=&quot;0&quot; style=&quot;width: 49.9424%;&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/cxwkfc/btqRjfzD0SS/PvjXvNlVk9JStWJKbXSTw1/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2Fcxwkfc%2FbtqRjfzD0SS%2FPvjXvNlVk9JStWJKbXSTw1%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;0&quot; height=&quot;0&quot;/&gt;&lt;/span&gt;&lt;/div&gt;
&lt;/figure&gt;
&lt;/p&gt;
&lt;p data-ke-size=&quot;size18&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;&lt;figure class=&quot;imagegridblock&quot;&gt;
  &lt;div class=&quot;image-container&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/cvGxXm/btqRqbJkbZj/bBSWeYhOuPXMVpMURyEinK/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/cvGxXm/btqRqbJkbZj/bBSWeYhOuPXMVpMURyEinK/img.png&quot; data-origin-width=&quot;0&quot; data-origin-height=&quot;0&quot; style=&quot;width: 49.1289%; margin-right: 10px;&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/cvGxXm/btqRqbJkbZj/bBSWeYhOuPXMVpMURyEinK/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FcvGxXm%2FbtqRqbJkbZj%2FbBSWeYhOuPXMVpMURyEinK%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;0&quot; height=&quot;0&quot;/&gt;&lt;/span&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/btp741/btqRnMKw2ZY/PsQX5vHqA0vq7XGBVCNiak/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/btp741/btqRnMKw2ZY/PsQX5vHqA0vq7XGBVCNiak/img.png&quot; data-origin-width=&quot;0&quot; data-origin-height=&quot;0&quot; style=&quot;width: 49.7083%;&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/btp741/btqRnMKw2ZY/PsQX5vHqA0vq7XGBVCNiak/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2Fbtp741%2FbtqRnMKw2ZY%2FPsQX5vHqA0vq7XGBVCNiak%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;0&quot; height=&quot;0&quot;/&gt;&lt;/span&gt;&lt;/div&gt;
&lt;/figure&gt;
&lt;/p&gt;
&lt;p data-ke-size=&quot;size18&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size18&quot;&gt;&lt;span style=&quot;font-family: AppleSDGothicNeo-Regular, 'Malgun Gothic', '맑은 고딕', dotum, 돋움, sans-serif;&quot;&gt;컴퓨터에서 &lt;b&gt;드라이버 소프트웨어 검색 클릭 &amp;gt; 컴퓨너의 사용가능한 드라이버 목록에서 직접 선택 클릭 &amp;gt; 디스크있음 &amp;gt; 찾아보기&lt;/b&gt;&lt;/span&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size18&quot;&gt;&lt;span style=&quot;font-family: AppleSDGothicNeo-Regular, 'Malgun Gothic', '맑은 고딕', dotum, 돋움, sans-serif;&quot;&gt;를 클릭해 주면되는데&lt;/span&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size18&quot;&gt;&lt;span style=&quot;color: #ee2323;&quot;&gt;&lt;b&gt;&lt;i&gt;&lt;span style=&quot;font-family: AppleSDGothicNeo-Regular, 'Malgun Gothic', '맑은 고딕', dotum, 돋움, sans-serif;&quot;&gt;여기서 중요합니다.&amp;nbsp;&lt;/span&gt;&lt;/i&gt;&lt;/b&gt;&lt;/span&gt;&lt;/p&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-origin-width=&quot;0&quot; data-origin-height=&quot;0&quot; data-ke-mobilestyle=&quot;widthContent&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/b2mbyh/btqRlJm5OIA/QcW9G8hwk41agRjJGmQkxK/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/b2mbyh/btqRlJm5OIA/QcW9G8hwk41agRjJGmQkxK/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/b2mbyh/btqRlJm5OIA/QcW9G8hwk41agRjJGmQkxK/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2Fb2mbyh%2FbtqRlJm5OIA%2FQcW9G8hwk41agRjJGmQkxK%2Fimg.png&quot; data-origin-width=&quot;0&quot; data-origin-height=&quot;0&quot; data-ke-mobilestyle=&quot;widthContent&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;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;/p&gt;
&lt;p data-ke-size=&quot;size18&quot;&gt;&lt;b&gt;&lt;span style=&quot;color: #333333; font-family: AppleSDGothicNeo-Regular, 'Malgun Gothic', '맑은 고딕', dotum, 돋움, sans-serif;&quot;&gt;아까 전에 위 경로 기억해 두라고 했죠?&lt;/span&gt;&lt;/b&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size18&quot;&gt;&lt;b&gt;&lt;span style=&quot;color: #333333; font-family: AppleSDGothicNeo-Regular, 'Malgun Gothic', '맑은 고딕', dotum, 돋움, sans-serif;&quot;&gt;이 경로로 들어가 줍니다.&lt;/span&gt;&lt;/b&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size18&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-origin-width=&quot;0&quot; data-origin-height=&quot;0&quot; data-ke-mobilestyle=&quot;widthContent&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/bGmvDX/btqRpuvARuw/kQXUu6MUxRB6yrDUxRe6WK/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/bGmvDX/btqRpuvARuw/kQXUu6MUxRB6yrDUxRe6WK/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/bGmvDX/btqRpuvARuw/kQXUu6MUxRB6yrDUxRe6WK/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FbGmvDX%2FbtqRpuvARuw%2FkQXUu6MUxRB6yrDUxRe6WK%2Fimg.png&quot; data-origin-width=&quot;0&quot; data-origin-height=&quot;0&quot; data-ke-mobilestyle=&quot;widthContent&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;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;/p&gt;
&lt;p data-ke-size=&quot;size18&quot;&gt;&lt;b&gt;&lt;span style=&quot;font-family: AppleSDGothicNeo-Regular, 'Malgun Gothic', '맑은 고딕', dotum, 돋움, sans-serif;&quot;&gt;그럼 위 사진과 같이 드라이브를 찾을 수 있습니다.&lt;/span&gt;&lt;/b&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size18&quot;&gt;&lt;b&gt;&lt;span style=&quot;font-family: AppleSDGothicNeo-Regular, 'Malgun Gothic', '맑은 고딕', dotum, 돋움, sans-serif;&quot;&gt;드라이브를 열어주면&lt;/span&gt;&lt;/b&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size18&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-origin-width=&quot;0&quot; data-origin-height=&quot;0&quot; data-ke-mobilestyle=&quot;widthContent&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/NHjxj/btqRomdKXnP/MgM6rjVz3jiOdU4oJYyk10/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/NHjxj/btqRomdKXnP/MgM6rjVz3jiOdU4oJYyk10/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/NHjxj/btqRomdKXnP/MgM6rjVz3jiOdU4oJYyk10/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FNHjxj%2FbtqRomdKXnP%2FMgM6rjVz3jiOdU4oJYyk10%2Fimg.png&quot; data-origin-width=&quot;0&quot; data-origin-height=&quot;0&quot; data-ke-mobilestyle=&quot;widthContent&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;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;/p&gt;
&lt;p data-ke-size=&quot;size18&quot;&gt;&lt;b&gt;&lt;span style=&quot;font-family: AppleSDGothicNeo-Regular, 'Malgun Gothic', '맑은 고딕', dotum, 돋움, sans-serif;&quot;&gt;위 DELL P2421D 드라이버가 뜰 것이고 다음을 눌러주면 드라이버 설치가 끝나게 됩니다.&lt;/span&gt;&lt;/b&gt;&lt;/p&gt;
&lt;hr contenteditable=&quot;false&quot; data-ke-type=&quot;horizontalRule&quot; data-ke-style=&quot;style1&quot; /&gt;
&lt;h2 data-ke-size=&quot;size26&quot;&gt;&lt;i&gt;&lt;b&gt;&lt;span style=&quot;color: #333333; font-family: AppleSDGothicNeo-Regular, 'Malgun Gothic', '맑은 고딕', dotum, 돋움, sans-serif;&quot;&gt;&lt;span style=&quot;color: #333333;&quot;&gt;DELL P2421D 디스플레이 어플리케이션 설치&lt;/span&gt;&lt;/span&gt;&lt;/b&gt;&lt;/i&gt;&lt;/h2&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-origin-width=&quot;0&quot; data-origin-height=&quot;0&quot; data-ke-mobilestyle=&quot;widthContent&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/vTaHw/btqRjfsUZU0/zrmzLBLbpGkd6J9ad3vbA0/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/vTaHw/btqRjfsUZU0/zrmzLBLbpGkd6J9ad3vbA0/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/vTaHw/btqRjfsUZU0/zrmzLBLbpGkd6J9ad3vbA0/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FvTaHw%2FbtqRjfsUZU0%2FzrmzLBLbpGkd6J9ad3vbA0%2Fimg.png&quot; data-origin-width=&quot;0&quot; data-origin-height=&quot;0&quot; data-ke-mobilestyle=&quot;widthContent&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;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;/p&gt;
&lt;p data-ke-size=&quot;size18&quot;&gt;&lt;span style=&quot;color: #333333; font-family: AppleSDGothicNeo-Regular, 'Malgun Gothic', '맑은 고딕', dotum, 돋움, sans-serif;&quot;&gt;이제 모니터 디스플레이 어플리케이션을 설치해줍니다.&lt;/span&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size18&quot;&gt;&lt;span style=&quot;color: #333333; font-family: AppleSDGothicNeo-Regular, 'Malgun Gothic', '맑은 고딕', dotum, 돋움, sans-serif;&quot;&gt;위에서 제가 &lt;b&gt;2번이라고 했던 파일을 클릭&lt;/b&gt;해 줍니다.&lt;br /&gt;&lt;br /&gt;&lt;/span&gt;&lt;/p&gt;
&lt;p&gt;&lt;figure class=&quot;imagegridblock&quot;&gt;
  &lt;div class=&quot;image-container&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/8xRDA/btqRifNqfwi/6UKe625wRv618fElj0aXBK/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/8xRDA/btqRifNqfwi/6UKe625wRv618fElj0aXBK/img.png&quot; data-origin-width=&quot;0&quot; data-origin-height=&quot;0&quot; style=&quot;width: 49.4326%; margin-right: 10px;&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/8xRDA/btqRifNqfwi/6UKe625wRv618fElj0aXBK/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2F8xRDA%2FbtqRifNqfwi%2F6UKe625wRv618fElj0aXBK%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;0&quot; height=&quot;0&quot;/&gt;&lt;/span&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/n1pFK/btqRqQEVUbC/wu9GONyync77vjWViSKfsK/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/n1pFK/btqRqQEVUbC/wu9GONyync77vjWViSKfsK/img.png&quot; data-origin-width=&quot;0&quot; data-origin-height=&quot;0&quot; style=&quot;width: 49.4046%;&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/n1pFK/btqRqQEVUbC/wu9GONyync77vjWViSKfsK/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2Fn1pFK%2FbtqRqQEVUbC%2Fwu9GONyync77vjWViSKfsK%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;0&quot; height=&quot;0&quot;/&gt;&lt;/span&gt;&lt;/div&gt;
&lt;/figure&gt;
&lt;/p&gt;
&lt;p data-ke-size=&quot;size18&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;&lt;figure class=&quot;imagegridblock&quot;&gt;
  &lt;div class=&quot;image-container&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/UpCLY/btqRjeHw0Q8/iklRhfw5DqWkH8dyVumriK/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/UpCLY/btqRjeHw0Q8/iklRhfw5DqWkH8dyVumriK/img.png&quot; data-origin-width=&quot;0&quot; data-origin-height=&quot;0&quot; style=&quot;width: 50.6505%; margin-right: 10px;&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/UpCLY/btqRjeHw0Q8/iklRhfw5DqWkH8dyVumriK/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FUpCLY%2FbtqRjeHw0Q8%2FiklRhfw5DqWkH8dyVumriK%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;0&quot; height=&quot;0&quot;/&gt;&lt;/span&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/dGG7K0/btqRok76Whm/yqr8QtDtuPsciQvPKOJF01/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/dGG7K0/btqRok76Whm/yqr8QtDtuPsciQvPKOJF01/img.png&quot; data-origin-width=&quot;0&quot; data-origin-height=&quot;0&quot; style=&quot;width: 48.1867%;&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/dGG7K0/btqRok76Whm/yqr8QtDtuPsciQvPKOJF01/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FdGG7K0%2FbtqRok76Whm%2Fyqr8QtDtuPsciQvPKOJF01%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;0&quot; height=&quot;0&quot;/&gt;&lt;/span&gt;&lt;/div&gt;
&lt;/figure&gt;
&lt;/p&gt;
&lt;p data-ke-size=&quot;size18&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size18&quot;&gt;&lt;span style=&quot;font-family: AppleSDGothicNeo-Regular, 'Malgun Gothic', '맑은 고딕', dotum, 돋움, sans-serif;&quot;&gt;위 방식대로 설치를 진행해 줍니다.&lt;/span&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size18&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;&lt;figure class=&quot;imagegridblock&quot;&gt;
  &lt;div class=&quot;image-container&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/0l2iD/btqRjeAPPm2/jDFMr1DHatG0UK7vaThkk0/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/0l2iD/btqRjeAPPm2/jDFMr1DHatG0UK7vaThkk0/img.png&quot; data-origin-width=&quot;0&quot; data-origin-height=&quot;0&quot; style=&quot;width: 49.7214%; margin-right: 10px;&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/0l2iD/btqRjeAPPm2/jDFMr1DHatG0UK7vaThkk0/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2F0l2iD%2FbtqRjeAPPm2%2FjDFMr1DHatG0UK7vaThkk0%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;0&quot; height=&quot;0&quot;/&gt;&lt;/span&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/8lmaO/btqRlHpjtB6/WM5ksGkz4XDKWG0Ytx3Fhk/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/8lmaO/btqRlHpjtB6/WM5ksGkz4XDKWG0Ytx3Fhk/img.png&quot; data-origin-width=&quot;0&quot; data-origin-height=&quot;0&quot; style=&quot;width: 49.1158%;&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/8lmaO/btqRlHpjtB6/WM5ksGkz4XDKWG0Ytx3Fhk/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2F8lmaO%2FbtqRlHpjtB6%2FWM5ksGkz4XDKWG0Ytx3Fhk%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;0&quot; height=&quot;0&quot;/&gt;&lt;/span&gt;&lt;/div&gt;
&lt;/figure&gt;
&lt;/p&gt;
&lt;p data-ke-size=&quot;size18&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size18&quot;&gt;&lt;span style=&quot;font-family: AppleSDGothicNeo-Regular, 'Malgun Gothic', '맑은 고딕', dotum, 돋움, sans-serif;&quot;&gt;그럼 마우스 오른쪽 클릭 해주면&lt;/span&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size18&quot;&gt;&lt;span style=&quot;font-family: AppleSDGothicNeo-Regular, 'Malgun Gothic', '맑은 고딕', dotum, 돋움, sans-serif;&quot;&gt;Dell Display Manager&lt;/span&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size18&quot;&gt;&lt;span style=&quot;font-family: AppleSDGothicNeo-Regular, 'Malgun Gothic', '맑은 고딕', dotum, 돋움, sans-serif;&quot;&gt;를 볼 수 있고 &lt;span style=&quot;color: #333333;&quot;&gt;Display Manager에서 모니터를 설정해 줄 수 있습니다.&lt;/span&gt;&lt;/span&gt;&lt;/p&gt;
&lt;hr contenteditable=&quot;false&quot; data-ke-type=&quot;horizontalRule&quot; data-ke-style=&quot;style1&quot; /&gt;
&lt;h2 data-ke-size=&quot;size26&quot;&gt;&lt;i&gt;&lt;b&gt;&lt;span style=&quot;font-family: AppleSDGothicNeo-Regular, 'Malgun Gothic', '맑은 고딕', dotum, 돋움, sans-serif;&quot;&gt;DELL 모니터 인증&lt;/span&gt;&lt;/b&gt;&lt;/i&gt;&lt;/h2&gt;
&lt;p data-ke-size=&quot;size18&quot;&gt;&lt;span style=&quot;font-family: AppleSDGothicNeo-Regular, 'Malgun Gothic', '맑은 고딕', dotum, 돋움, sans-serif;&quot;&gt;DELL같은 경우는 모니터를 인증 받을 수 있습니다.&lt;/span&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size18&quot;&gt;&lt;span style=&quot;font-family: AppleSDGothicNeo-Regular, 'Malgun Gothic', '맑은 고딕', dotum, 돋움, sans-serif;&quot;&gt;아래 사이트에 들어가도록 합니다.&lt;/span&gt;&lt;/p&gt;
&lt;figure id=&quot;og_1608806035472&quot; contenteditable=&quot;false&quot; data-ke-type=&quot;opengraph&quot; data-og-type=&quot;website&quot; data-og-title=&quot;내 제품 및 서비스 | Dell 대한민국&quot; data-og-description=&quot;내 제품 및 서비스 로그인하여 내 제품 및 서비스 사용 조직에 필요한 수백 대의 시스템을 추적하는 일이든, 단순히 가족의 디바이스를 확인하는 일이든 상관없이 내 제품 및 서비스를 이용하면&quot; data-og-host=&quot;www.dell.com&quot; data-og-source-url=&quot;https://www.dell.com/support/mps/ko-kr&quot; data-og-url=&quot;https://www.dell.com/support/mps/ko-kr&quot; data-og-image=&quot;&quot;&gt;&lt;a href=&quot;https://www.dell.com/support/mps/ko-kr&quot; target=&quot;_blank&quot; rel=&quot;noopener&quot; data-source-url=&quot;https://www.dell.com/support/mps/ko-kr&quot;&gt;
&lt;div class=&quot;og-image&quot; style=&quot;background-image: url();&quot;&gt;&amp;nbsp;&lt;/div&gt;
&lt;div class=&quot;og-text&quot;&gt;
&lt;p class=&quot;og-title&quot;&gt;내 제품 및 서비스 | Dell 대한민국&lt;/p&gt;
&lt;p class=&quot;og-desc&quot;&gt;내 제품 및 서비스 로그인하여 내 제품 및 서비스 사용 조직에 필요한 수백 대의 시스템을 추적하는 일이든, 단순히 가족의 디바이스를 확인하는 일이든 상관없이 내 제품 및 서비스를 이용하면&lt;/p&gt;
&lt;p class=&quot;og-host&quot;&gt;www.dell.com&lt;/p&gt;
&lt;/div&gt;
&lt;/a&gt;&lt;/figure&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-origin-width=&quot;0&quot; data-origin-height=&quot;0&quot; data-ke-mobilestyle=&quot;widthContent&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/TWbcN/btqRje1QV5N/s12lHwdD5GHzr5f0JNifLk/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/TWbcN/btqRje1QV5N/s12lHwdD5GHzr5f0JNifLk/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/TWbcN/btqRje1QV5N/s12lHwdD5GHzr5f0JNifLk/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FTWbcN%2FbtqRje1QV5N%2Fs12lHwdD5GHzr5f0JNifLk%2Fimg.png&quot; data-origin-width=&quot;0&quot; data-origin-height=&quot;0&quot; data-ke-mobilestyle=&quot;widthContent&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;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;figure class=&quot;imageblock alignCenter&quot; data-origin-width=&quot;1335&quot; data-origin-height=&quot;372&quot; data-filename=&quot;blob&quot; data-ke-mobilestyle=&quot;widthContent&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/bXiGqh/btqRqcBvm92/7CaMhioigj56a2Of3wOHRK/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/bXiGqh/btqRqcBvm92/7CaMhioigj56a2Of3wOHRK/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/bXiGqh/btqRqcBvm92/7CaMhioigj56a2Of3wOHRK/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FbXiGqh%2FbtqRqcBvm92%2F7CaMhioigj56a2Of3wOHRK%2Fimg.png&quot; data-origin-width=&quot;1335&quot; data-origin-height=&quot;372&quot; data-filename=&quot;blob&quot; data-ke-mobilestyle=&quot;widthContent&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;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;/p&gt;
&lt;p data-ke-size=&quot;size18&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size18&quot;&gt;&lt;span style=&quot;font-family: AppleSDGothicNeo-Regular, 'Malgun Gothic', '맑은 고딕', dotum, 돋움, sans-serif;&quot;&gt;그 후 &lt;b&gt;&quot;로그인&quot;&lt;/b&gt;을 해준 후, &lt;b&gt;&quot;내 제품&quot;&lt;/b&gt; 탭을 클릭해 줍니다.&lt;/span&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size18&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-origin-width=&quot;0&quot; data-origin-height=&quot;0&quot; data-ke-mobilestyle=&quot;widthContent&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/b0oqr7/btqRptDvFph/xc74iXKKKBEkN28poLs2pK/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/b0oqr7/btqRptDvFph/xc74iXKKKBEkN28poLs2pK/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/b0oqr7/btqRptDvFph/xc74iXKKKBEkN28poLs2pK/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2Fb0oqr7%2FbtqRptDvFph%2Fxc74iXKKKBEkN28poLs2pK%2Fimg.png&quot; data-origin-width=&quot;0&quot; data-origin-height=&quot;0&quot; data-ke-mobilestyle=&quot;widthContent&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;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;figure class=&quot;imageblock alignCenter&quot; data-origin-width=&quot;0&quot; data-origin-height=&quot;0&quot; data-ke-mobilestyle=&quot;widthContent&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/caOc2P/btqRomx3lH3/B5QkkGiQjkklOeRtT714r1/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/caOc2P/btqRomx3lH3/B5QkkGiQjkklOeRtT714r1/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/caOc2P/btqRomx3lH3/B5QkkGiQjkklOeRtT714r1/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FcaOc2P%2FbtqRomx3lH3%2FB5QkkGiQjkklOeRtT714r1%2Fimg.png&quot; data-origin-width=&quot;0&quot; data-origin-height=&quot;0&quot; data-ke-mobilestyle=&quot;widthContent&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;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;/p&gt;
&lt;p data-ke-size=&quot;size18&quot;&gt;&lt;span style=&quot;font-family: AppleSDGothicNeo-Regular, 'Malgun Gothic', '맑은 고딕', dotum, 돋움, sans-serif;&quot;&gt;그런 다음 &lt;b&gt;&quot;제품추가 버튼&quot;&lt;/b&gt;을 클릭해 준 후, &lt;b&gt;&quot;서비스 태그&quot;&lt;/b&gt;를 클릭해 줍니다.&lt;/span&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size18&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-origin-width=&quot;0&quot; data-origin-height=&quot;0&quot; data-ke-mobilestyle=&quot;widthContent&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/8XAz3/btqRnNW1NlI/CR1G0yK7Gm81Drx7uZCSYk/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/8XAz3/btqRnNW1NlI/CR1G0yK7Gm81Drx7uZCSYk/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/8XAz3/btqRnNW1NlI/CR1G0yK7Gm81Drx7uZCSYk/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2F8XAz3%2FbtqRnNW1NlI%2FCR1G0yK7Gm81Drx7uZCSYk%2Fimg.png&quot; data-origin-width=&quot;0&quot; data-origin-height=&quot;0&quot; data-ke-mobilestyle=&quot;widthContent&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;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;figure class=&quot;imageblock alignCenter&quot; data-filename=&quot;KakaoTalk_20201224_193953669.jpg&quot; data-origin-width=&quot;4032&quot; data-origin-height=&quot;3024&quot; data-ke-mobilestyle=&quot;widthContent&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/swMTf/btqRigS8ypj/jZbtuSDsPEOiqmWBiQ7xSk/img.jpg&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/swMTf/btqRigS8ypj/jZbtuSDsPEOiqmWBiQ7xSk/img.jpg&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/swMTf/btqRigS8ypj/jZbtuSDsPEOiqmWBiQ7xSk/img.jpg&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FswMTf%2FbtqRigS8ypj%2FjZbtuSDsPEOiqmWBiQ7xSk%2Fimg.jpg&quot; data-filename=&quot;KakaoTalk_20201224_193953669.jpg&quot; data-origin-width=&quot;4032&quot; data-origin-height=&quot;3024&quot; data-ke-mobilestyle=&quot;widthContent&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;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;/p&gt;
&lt;p data-ke-size=&quot;size18&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size18&quot;&gt;&lt;span style=&quot;font-family: AppleSDGothicNeo-Regular, 'Malgun Gothic', '맑은 고딕', dotum, 돋움, sans-serif;&quot;&gt;이 서비스 태그는 모니터 뒷쪽에 있습니다.&lt;/span&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size18&quot;&gt;&lt;span style=&quot;font-family: AppleSDGothicNeo-Regular, 'Malgun Gothic', '맑은 고딕', dotum, 돋움, sans-serif;&quot;&gt;위 사진에 빨간 네모칸 부분에 값을 입력해 주면 &lt;b&gt;인증이 정상적으로 완료&lt;/b&gt;가 됩니다.&lt;/span&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size18&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;hr contenteditable=&quot;false&quot; data-ke-type=&quot;horizontalRule&quot; data-ke-style=&quot;style1&quot; /&gt;
&lt;h2 data-ke-size=&quot;size26&quot;&gt;&lt;i&gt;&lt;b&gt;&lt;span style=&quot;font-family: AppleSDGothicNeo-Regular, 'Malgun Gothic', '맑은 고딕', dotum, 돋움, sans-serif;&quot;&gt;DELL P2421D 2주 사용 후기 및 &lt;/span&gt;&lt;/b&gt;&lt;/i&gt;&lt;span style=&quot;color: #000000;&quot;&gt;&lt;i&gt;&lt;b&gt;&lt;span&gt;총평&lt;/span&gt;&lt;/b&gt;&lt;/i&gt;&lt;/span&gt;&lt;/h2&gt;
&lt;p data-ke-size=&quot;size18&quot;&gt;&lt;span style=&quot;font-family: AppleSDGothicNeo-Regular, 'Malgun Gothic', '맑은 고딕', dotum, 돋움, sans-serif;&quot;&gt;사실 이 글을 찾아오신 분들은 이 후기가 궁금해서 찾아오실거라 생각이 듭니다.&lt;/span&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size18&quot;&gt;&lt;span style=&quot;font-family: AppleSDGothicNeo-Regular, 'Malgun Gothic', '맑은 고딕', dotum, 돋움, sans-serif;&quot;&gt;일단 저는 게임을 많이 하지 않는 개발자라는 것을 유의해 주시면서 봐주시면 감사하겠습니다.&lt;/span&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size18&quot;&gt;&lt;span style=&quot;font-family: AppleSDGothicNeo-Regular, 'Malgun Gothic', '맑은 고딕', dotum, 돋움, sans-serif;&quot;&gt;이 제품은 24인치 QHD란 점 그리고 최근 144Hz 게이밍 모니터를 표방하는 여타 모니터 들과는 다르게&lt;/span&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size18&quot;&gt;&lt;span style=&quot;font-family: AppleSDGothicNeo-Regular, 'Malgun Gothic', '맑은 고딕', dotum, 돋움, sans-serif;&quot;&gt;60Hz 사무용 모니터를 표방하고 있습니다.&lt;/span&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size18&quot;&gt;&lt;span style=&quot;font-family: AppleSDGothicNeo-Regular, 'Malgun Gothic', '맑은 고딕', dotum, 돋움, sans-serif;&quot;&gt;사실 이 모니터는 게임을 하기에 완전 적합하지 않습니다.&lt;/span&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size18&quot;&gt;&lt;span style=&quot;font-family: AppleSDGothicNeo-Regular, 'Malgun Gothic', '맑은 고딕', dotum, 돋움, sans-serif;&quot;&gt;이 모니터는 개발용 웹서핑용 글 읽는용에 적합한 모니터입니다.&lt;/span&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size18&quot;&gt;&lt;span style=&quot;font-family: AppleSDGothicNeo-Regular, 'Malgun Gothic', '맑은 고딕', dotum, 돋움, sans-serif;&quot;&gt;24인치 QHD가 좀 과하다고 느낄수도 있으시지만,&lt;/span&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size18&quot;&gt;&lt;span style=&quot;font-family: AppleSDGothicNeo-Regular, 'Malgun Gothic', '맑은 고딕', dotum, 돋움, sans-serif;&quot;&gt;제가 사용해본 결과 전혀 과하지 않습니다. 도리어 24인치 FHD보다 더 가독성이 좋으며,&lt;/span&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size18&quot;&gt;&lt;span style=&quot;font-family: AppleSDGothicNeo-Regular, 'Malgun Gothic', '맑은 고딕', dotum, 돋움, sans-serif;&quot;&gt;특히 QHD 24인치 모니터라 피벗시에 목을 올리지 않아도 전체 글이 또렷히 보인다는 장점이 있습니다.&lt;/span&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size18&quot;&gt;&lt;span style=&quot;font-family: AppleSDGothicNeo-Regular, 'Malgun Gothic', '맑은 고딕', dotum, 돋움, sans-serif;&quot;&gt;(이부분은 27인치 모니터를 피벗했을때 느끼는 목에 피로감을 느껴보신 분이라면 이해하실 겁니다)&lt;/span&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size18&quot;&gt;&lt;span style=&quot;font-family: AppleSDGothicNeo-Regular, 'Malgun Gothic', '맑은 고딕', dotum, 돋움, sans-serif;&quot;&gt;또한 개발시, QHD덕분에 넓은 또는 긴 화면으로 소스코드를 볼 수 있다는 장점이 있습니다.&lt;/span&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size18&quot;&gt;&lt;span style=&quot;font-family: AppleSDGothicNeo-Regular, 'Malgun Gothic', '맑은 고딕', dotum, 돋움, sans-serif;&quot;&gt;게다가 모니터 색도 누리끼리한 느낌이 있다고 하지만,&lt;/span&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size18&quot;&gt;&lt;span style=&quot;font-family: AppleSDGothicNeo-Regular, 'Malgun Gothic', '맑은 고딕', dotum, 돋움, sans-serif;&quot;&gt;그건 뽑기인거 같습니다.&lt;/span&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size18&quot;&gt;&lt;span style=&quot;font-family: AppleSDGothicNeo-Regular, 'Malgun Gothic', '맑은 고딕', dotum, 돋움, sans-serif;&quot;&gt;저는 전혀 그렇게 보이지 않더라구요....&lt;/span&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size18&quot;&gt;&lt;span style=&quot;color: #333333; font-family: AppleSDGothicNeo-Regular, 'Malgun Gothic', '맑은 고딕', dotum, 돋움, sans-serif;&quot;&gt;사실 사무용 혹은 개발용으로는 단점이랄게 많이 없는 모니터입니다.&lt;/span&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size18&quot;&gt;&lt;span style=&quot;color: #333333; font-family: AppleSDGothicNeo-Regular, 'Malgun Gothic', '맑은 고딕', dotum, 돋움, sans-serif;&quot;&gt;저는 &lt;span style=&quot;color: #ee2323;&quot;&gt;&lt;i&gt;&lt;b&gt;이 모니터를 개발하실 때 피벗용으로 사용하시려면 적극 추천&lt;/b&gt;&lt;/i&gt;&lt;/span&gt;을 드릴것 같습니다.&lt;/span&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size18&quot;&gt;&lt;span style=&quot;color: #333333; font-family: AppleSDGothicNeo-Regular, 'Malgun Gothic', '맑은 고딕', dotum, 돋움, sans-serif;&quot;&gt;&lt;span style=&quot;color: #006dd7;&quot;&gt;&lt;i&gt;&lt;b&gt;다만 게임도 같이 한다면 이 모니터는 전혀 선택사항이 아님&lt;/b&gt;&lt;/i&gt;&lt;/span&gt;을 알려드립니다.&lt;/span&gt;&lt;/p&gt;
&lt;hr style=&quot;box-sizing: content-box; height: 20px; overflow: visible; border: none; font-size: 0px; line-height: 0; margin: 20px auto; background: url('https://t1.daumcdn.net/keditor/dist/0.4.0/image/divider-line.svg') 0px -40px / 200px 200px no-repeat #ffffff; cursor: pointer !important; width: 64px; color: #333333; font-family: 'Malgun Gothic', 'Noto Sans KR', sans-serif; font-style: normal; font-variant-ligatures: normal; font-variant-caps: normal; font-weight: 400; letter-spacing: -0.4px; orphans: 2; text-align: justify; text-indent: 0px; text-transform: none; white-space: normal; widows: 2; word-spacing: 0px; -webkit-text-stroke-width: 0px; text-decoration-thickness: initial; text-decoration-style: initial; text-decoration-color: initial;&quot; contenteditable=&quot;false&quot; data-ke-type=&quot;horizontalRule&quot; data-ke-style=&quot;style3&quot; /&gt;
&lt;p style=&quot;text-align: center;&quot; data-ke-size=&quot;size18&quot;&gt;&lt;i&gt;&lt;b&gt;&lt;span style=&quot;color: #ee2323;&quot;&gt;해당 제품은 제가 직접 제 돈을 주고 구입하였으며 일체 지원을 받지 않았습니다.&lt;/span&gt;&lt;/b&gt;&lt;/i&gt;&lt;/p&gt;
&lt;p style=&quot;text-align: center;&quot; data-ke-size=&quot;size18&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p style=&quot;text-align: center;&quot; data-ke-size=&quot;size18&quot;&gt;&lt;b&gt;&lt;span style=&quot;color: #000000;&quot;&gt;DELL P2421D 최저가 특가&lt;/span&gt;&lt;/b&gt;&lt;/p&gt;
&lt;p style=&quot;text-align: center;&quot; data-ke-size=&quot;size18&quot;&gt;&lt;a href=&quot;https://noogoonaa.blogspot.com/2020/12/1.html&quot; target=&quot;_blank&quot; rel=&quot;noopener&quot;&gt;&lt;u&gt;&lt;b&gt;&lt;span style=&quot;color: #ee2323;&quot;&gt;[자세히 보기]&lt;/span&gt;&lt;/b&gt;&lt;/u&gt;&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-origin-width=&quot;0&quot; data-origin-height=&quot;0&quot; data-ke-mobilestyle=&quot;widthContent&quot;&gt;&lt;a href=&quot;https://noogoonaa.blogspot.com/2020/12/1.html&quot; target=&quot;_blank&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/cBbK4P/btqRjfT2kJb/ZWzkY35ioVDpBaKQei1hXK/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FcBbK4P%2FbtqRjfT2kJb%2FZWzkY35ioVDpBaKQei1hXK%2Fimg.png&quot; data-origin-width=&quot;0&quot; data-origin-height=&quot;0&quot; data-ke-mobilestyle=&quot;widthContent&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;/&gt;&lt;/a&gt;&lt;/figure&gt;
&lt;figure class=&quot;imageblock alignCenter&quot; data-filename=&quot;original_18.png&quot; data-origin-width=&quot;370&quot; data-origin-height=&quot;320&quot; data-ke-mobilestyle=&quot;widthContent&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/qEX0T/btqRoRLrfQt/wzYsaCFseOfvWwuTeZGYO0/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/qEX0T/btqRoRLrfQt/wzYsaCFseOfvWwuTeZGYO0/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/qEX0T/btqRoRLrfQt/wzYsaCFseOfvWwuTeZGYO0/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FqEX0T%2FbtqRoRLrfQt%2FwzYsaCFseOfvWwuTeZGYO0%2Fimg.png&quot; data-filename=&quot;original_18.png&quot; data-origin-width=&quot;370&quot; data-origin-height=&quot;320&quot; data-ke-mobilestyle=&quot;widthContent&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;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;/p&gt;</description>
      <category>리뷰 및 사용 TIP</category>
      <category>Dell</category>
      <category>p2421d</category>
      <category>게임용</category>
      <category>모니터</category>
      <category>사무용</category>
      <author>방현준</author>
      <guid isPermaLink="true">https://noogoonaa.tistory.com/92</guid>
      <comments>https://noogoonaa.tistory.com/92#entry92comment</comments>
      <pubDate>Thu, 24 Dec 2020 19:41:28 +0900</pubDate>
    </item>
    <item>
      <title>자바스크립트의 객체 참조할당과 얕은복사, 깊은복사</title>
      <link>https://noogoonaa.tistory.com/91</link>
      <description>&lt;hr contenteditable=&quot;false&quot; data-ke-type=&quot;horizontalRule&quot; data-ke-style=&quot;style5&quot; /&gt;
&lt;h4 data-ke-size=&quot;size20&quot;&gt;&lt;span style=&quot;color: #ee2323;&quot;&gt;&lt;i&gt;&lt;b&gt;함께 보면 좋은글&lt;/b&gt;&lt;/i&gt;&lt;/span&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;a href=&quot;https://noogoonaa.tistory.com/83&quot; target=&quot;_blank&quot; rel=&quot;noopener&quot;&gt;2020/09/02 - [프로그래밍 언어/Javascript] - 자바스크립트의 메모리 관리&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://noogoonaa.tistory.com/88&quot; target=&quot;_blank&quot; rel=&quot;noopener&quot;&gt;2020/10/06 - [프로그래밍 언어/Javascript] - 자바스크립트의 기본형 데이터 타입&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://noogoonaa.tistory.com/90&quot; target=&quot;_blank&quot; rel=&quot;noopener&quot;&gt;2020/12/14 - [프로그래밍 언어/Javascript] - 자바스크립트의 참조형 데이터 타입&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;hr contenteditable=&quot;false&quot; data-ke-type=&quot;horizontalRule&quot; data-ke-style=&quot;style5&quot; /&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock widthContent&quot; data-filename=&quot;자바스크립트.png&quot; data-origin-width=&quot;700&quot; data-origin-height=&quot;525&quot; data-ke-mobilestyle=&quot;widthContent&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/QpgHw/btqPYjjt1km/DPPUbuerVWMXPUHSoWR280/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/QpgHw/btqPYjjt1km/DPPUbuerVWMXPUHSoWR280/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/QpgHw/btqPYjjt1km/DPPUbuerVWMXPUHSoWR280/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FQpgHw%2FbtqPYjjt1km%2FDPPUbuerVWMXPUHSoWR280%2Fimg.png&quot; data-filename=&quot;자바스크립트.png&quot; data-origin-width=&quot;700&quot; data-origin-height=&quot;525&quot; data-ke-mobilestyle=&quot;widthContent&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;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;/p&gt;
&lt;hr contenteditable=&quot;false&quot; data-ke-type=&quot;horizontalRule&quot; data-ke-style=&quot;style3&quot; /&gt;
&lt;p data-ke-size=&quot;size18&quot;&gt;이전에 저희는 참조형 데이터에 대해서 알아보았습니다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size18&quot;&gt;사실 참조형 데이터는 공부하면 공부할수록 많은 공부가 필요한 부분입니다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size18&quot;&gt;그중에서도 저희는 오늘 참조할당과 얕은복사, 깊은복사에 대해서 알아보도록 하겠습니다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size18&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size18&quot;&gt;이 포스트는 이전 포스트인 &lt;a href=&quot;https://noogoonaa.tistory.com/90&quot;&gt;자바스크립트의 참조형 데이터 타입&lt;/a&gt;의 기초적인 지식이 필요한 포스트이므로, &lt;span style=&quot;color: #333333;&quot;&gt;만약 안보고 오셨다면 보고 오시길 추천드립니다.&lt;/span&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size18&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;figure id=&quot;og_1607881343582&quot; contenteditable=&quot;false&quot; data-ke-type=&quot;opengraph&quot; data-og-type=&quot;article&quot; data-og-title=&quot;자바스크립트의 참조형 데이터 타입&quot; data-og-description=&quot;함께 보면 좋은글 2020/10/06 - [프로그래밍 언어/Javascript] - 자바스크립트의 기본형 데이터 타입 2020/09/02 - [프로그래밍 언어/Javascript] - 자바스크립트의 메모리 관리 이전에는 기본형 데이터 타입에&quot; data-og-host=&quot;noogoonaa.tistory.com&quot; data-og-source-url=&quot;https://noogoonaa.tistory.com/90&quot; data-og-url=&quot;https://noogoonaa.tistory.com/90&quot; data-og-image=&quot;https://scrap.kakaocdn.net/dn/nkQOc/hyIyPNUgRI/jpu4mGkOLeHUd8xrtfZUK1/img.png?width=700&amp;amp;height=525&amp;amp;face=0_0_700_525,https://scrap.kakaocdn.net/dn/kunOp/hyIyXFa22H/sK9nV56Mu2KhpKkxInHRFk/img.png?width=700&amp;amp;height=525&amp;amp;face=0_0_700_525,https://scrap.kakaocdn.net/dn/bmEImh/hyIxl8JKd4/rvX6l4H8MJZ3uGHrz3u7g0/img.png?width=1460&amp;amp;height=1386&amp;amp;face=0_0_1460_1386&quot;&gt;&lt;a href=&quot;https://noogoonaa.tistory.com/90&quot; target=&quot;_blank&quot; rel=&quot;noopener&quot; data-source-url=&quot;https://noogoonaa.tistory.com/90&quot;&gt;
&lt;div class=&quot;og-image&quot; style=&quot;background-image: url('https://scrap.kakaocdn.net/dn/nkQOc/hyIyPNUgRI/jpu4mGkOLeHUd8xrtfZUK1/img.png?width=700&amp;amp;height=525&amp;amp;face=0_0_700_525,https://scrap.kakaocdn.net/dn/kunOp/hyIyXFa22H/sK9nV56Mu2KhpKkxInHRFk/img.png?width=700&amp;amp;height=525&amp;amp;face=0_0_700_525,https://scrap.kakaocdn.net/dn/bmEImh/hyIxl8JKd4/rvX6l4H8MJZ3uGHrz3u7g0/img.png?width=1460&amp;amp;height=1386&amp;amp;face=0_0_1460_1386');&quot;&gt;&amp;nbsp;&lt;/div&gt;
&lt;div class=&quot;og-text&quot;&gt;
&lt;p class=&quot;og-title&quot;&gt;자바스크립트의 참조형 데이터 타입&lt;/p&gt;
&lt;p class=&quot;og-desc&quot;&gt;함께 보면 좋은글 2020/10/06 - [프로그래밍 언어/Javascript] - 자바스크립트의 기본형 데이터 타입 2020/09/02 - [프로그래밍 언어/Javascript] - 자바스크립트의 메모리 관리 이전에는 기본형 데이터 타입에&lt;/p&gt;
&lt;p class=&quot;og-host&quot;&gt;noogoonaa.tistory.com&lt;/p&gt;
&lt;/div&gt;
&lt;/a&gt;&lt;/figure&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;
&lt;hr contenteditable=&quot;false&quot; data-ke-type=&quot;horizontalRule&quot; data-ke-style=&quot;style1&quot; /&gt;
&lt;h2 data-ke-size=&quot;size26&quot;&gt;&lt;b&gt;객체의 참조할당 with 그림&lt;/b&gt;&lt;/h2&gt;
&lt;p data-ke-size=&quot;size18&quot;&gt;자바스크립트를 배우고 있는 여러분들에게 객체를 복사하라고 하면&lt;/p&gt;
&lt;p data-ke-size=&quot;size18&quot;&gt;어떤 방식으로 복사를 시도할 것 같나요?&lt;/p&gt;
&lt;p data-ke-size=&quot;size18&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size18&quot;&gt;아마 대부분이 이러한 방식으로 복사를 생각 하실겁니다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size18&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;pre id=&quot;code_1607874671096&quot; class=&quot;javascript&quot; data-ke-language=&quot;javascript&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;// obj 객체 생성 및 초기화
const obj = {
    a: 1,
    b: &quot;test&quot;
};

// obj2의 obj를 복사
let obj2 = obj;&lt;/code&gt;&lt;/pre&gt;
&lt;p data-ke-size=&quot;size18&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size18&quot;&gt;하지만 이런 방식은 자바스크립트에선 복사라고 하지 않습니다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size18&quot;&gt;그냥 객체를 참조하는 주소값을 할당한다고 합니다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size18&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size18&quot;&gt;잘 이해가 안가신다구요?&lt;/p&gt;
&lt;p data-ke-size=&quot;size18&quot;&gt;그림을 통해 한번 알아보도록 하겠습니다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size18&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-filename=&quot;슬라이드2.PNG&quot; data-origin-width=&quot;1280&quot; data-origin-height=&quot;720&quot; data-ke-mobilestyle=&quot;widthContent&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/bP9Pdh/btqPYjRjKAs/2phO9STQvV5SMkJyZmkAy1/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/bP9Pdh/btqPYjRjKAs/2phO9STQvV5SMkJyZmkAy1/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/bP9Pdh/btqPYjRjKAs/2phO9STQvV5SMkJyZmkAy1/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FbP9Pdh%2FbtqPYjRjKAs%2F2phO9STQvV5SMkJyZmkAy1%2Fimg.png&quot; data-filename=&quot;슬라이드2.PNG&quot; data-origin-width=&quot;1280&quot; data-origin-height=&quot;720&quot; data-ke-mobilestyle=&quot;widthContent&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;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;/p&gt;
&lt;p data-ke-size=&quot;size18&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size18&quot;&gt;해당 그림은 obj가 참조하는 객체 주소값을 obj2에 할당하는 방식을 설명한 그림입니다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size18&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;ul style=&quot;list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li&gt;
&lt;p data-ke-size=&quot;size18&quot;&gt;3006번 메모리에 obj2 객체의 메모리를 생성합니다.&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p data-ke-size=&quot;size18&quot;&gt;그 후, obj가 참조하는 객체 주소값을 obj2 객체의 값으로 할당합니다.&lt;/p&gt;
&lt;/li&gt;
&lt;/ul&gt;
&lt;p data-ke-size=&quot;size18&quot;&gt;이렇게하면 여러분들은 아마도 이게 복사라고 생각하실 수 있습니다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size18&quot;&gt;하지만 &lt;span style=&quot;color: #333333;&quot;&gt;이러한 방식은 문제가 꽤 많습니다.&lt;/span&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size18&quot;&gt;&lt;span style=&quot;color: #333333;&quot;&gt;그 이유는 아래 소스코드와 같은 방식으로 사용했을 때 예기치 않은 오류를 유발할 가능성이 있기 때문입니다.&lt;/span&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size18&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;pre id=&quot;code_1607874877270&quot; class=&quot;javascript&quot; data-ke-language=&quot;javascript&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;// obj 객체 생성 및 초기화
const obj = {
    a: 1,
    b: &quot;test&quot;
};

// obj2의 obj를 복사
let obj2 = obj;

// obj2의 a요소를 3으로 변경
obj2.a = 3;

console.log(obj.a, obj2.a) // 3 3&lt;/code&gt;&lt;/pre&gt;
&lt;p data-ke-size=&quot;size18&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size18&quot;&gt;이상합니다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size18&quot;&gt;저희는 obj2의 a요소 값을 변경했는데, 왜 obj도 변경 되어졌을까요?&lt;/p&gt;
&lt;p data-ke-size=&quot;size18&quot;&gt;그림을 한번 보도록 하겠습니다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size18&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-filename=&quot;슬라이드3.PNG&quot; data-origin-width=&quot;1280&quot; data-origin-height=&quot;720&quot; data-ke-mobilestyle=&quot;widthContent&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/z5ANy/btqP6nZkQbu/ewu8doMq2DMkVKrEKxCOXK/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/z5ANy/btqP6nZkQbu/ewu8doMq2DMkVKrEKxCOXK/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/z5ANy/btqP6nZkQbu/ewu8doMq2DMkVKrEKxCOXK/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2Fz5ANy%2FbtqP6nZkQbu%2Fewu8doMq2DMkVKrEKxCOXK%2Fimg.png&quot; data-filename=&quot;슬라이드3.PNG&quot; data-origin-width=&quot;1280&quot; data-origin-height=&quot;720&quot; data-ke-mobilestyle=&quot;widthContent&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;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;/p&gt;
&lt;p data-ke-size=&quot;size18&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;ul style=&quot;list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li&gt;
&lt;p data-ke-size=&quot;size18&quot;&gt;obj2.a 요소의 값을 3으로 변경해 주여야 하므로 데이터 영역에서 3의 데이터 값이 없으므로 7002번 주소에 3을 저장합니다.&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p data-ke-size=&quot;size18&quot;&gt;그 후 obj2의 a요소에 해당하는 1040주소의 값을 7002로 변경합니다.&lt;/p&gt;
&lt;/li&gt;
&lt;/ul&gt;
&lt;p data-ke-size=&quot;size18&quot;&gt;이렇게 하면 obj2를 변경했지만 obj도 변경되는 이유를 설명할 수 있게 되어집니다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size18&quot;&gt;즉 obj와 obj2는 5001 주소를 바라보고 있고, 5001은 1040부터 1041까지의 메모리를 바라보고 있기 때문에&lt;/p&gt;
&lt;p data-ke-size=&quot;size18&quot;&gt;obj2의 a요소인 1040메모리 값을 변경해 주어 obj도 같이 변경되어지기 때문입니다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size18&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size18&quot;&gt;그렇다면 자바스크립트에서 객체를 어떻게 복사 해야할까요?&lt;/p&gt;
&lt;p data-ke-size=&quot;size18&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size18&quot;&gt;사실 자바스크립트에서 객체를 복사하는 방법은 다양합니다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size18&quot;&gt;그 다양한 방식을 얕은복사와 깊은복사로 분류할 수 있는데,&lt;/p&gt;
&lt;p data-ke-size=&quot;size18&quot;&gt;먼저 얕은복사부터 알아보도록 하겠습니다.&lt;/p&gt;
&lt;hr contenteditable=&quot;false&quot; data-ke-type=&quot;horizontalRule&quot; data-ke-style=&quot;style1&quot; /&gt;
&lt;h2 data-ke-size=&quot;size26&quot;&gt;&lt;b&gt;객체의 얕은복사(shallow copy) with 그림&lt;/b&gt;&lt;/h2&gt;
&lt;p data-ke-size=&quot;size18&quot;&gt;얕은복사란 객체를 복사할 때 객체 내부의 기본형 데이터는 복사가 가능하지만, 객체 내부의 또 다른 참조형 데이터는 복사가 아닌 할당을 해버리는 것을 말합니다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size18&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size18&quot;&gt;잘 이해가 안되실 겁니다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size18&quot;&gt;소스로 이해해 보도록 하죠&lt;/p&gt;
&lt;p data-ke-size=&quot;size18&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;pre id=&quot;code_1607875660364&quot; class=&quot;javascript&quot; data-ke-language=&quot;javascript&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;// 얕은복사를 진행하기 위한 함수
function shallowCopy(value) {
  const result = {};
 
  for(const key in value) {
    result[key] = value[key];
  }
 
  return result;
}

// obj 생성
let obj = {
    a: 1,
    b: [1, 2]
}

// obj2에 obj얕은 복사 실행
let obj2 = shallowCopy(obj);

// obj2 요사 값 변경
obj2.a = 3;
obj2.b[1] = 4;

// 결과
console.log(obj.a, obj2.a)	// 1 3
console.log(obj.b, obj2.b)	// [1, 4] [1, 4]&lt;/code&gt;&lt;/pre&gt;
&lt;p data-ke-size=&quot;size18&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size18&quot;&gt;어떤가요? 이해가 되시나요?&lt;/p&gt;
&lt;p data-ke-size=&quot;size18&quot;&gt;obj를 obj2변수에 얕은복사를 진행했는데 a요소는 obj2 객체만 변경되었지만 b요소는 obj도 같이 변경되었습니다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size18&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size18&quot;&gt;이것이 바로 얕은복사(shallow copy) 입니다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size18&quot;&gt;&lt;span style=&quot;color: #333333;&quot;&gt;이 코드의 핵심은 &lt;/span&gt;shallowCopy 함수입니다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size18&quot;&gt;그러므로 &lt;span style=&quot;color: #333333;&quot;&gt;shallowCopy&lt;span&gt; 함수를 한번 찬찬히 보도록 할까요?&lt;/span&gt;&lt;/span&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size18&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;pre id=&quot;code_1607875861918&quot; class=&quot;javascript&quot; data-ke-language=&quot;javascript&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;// 얕은복사를 진행하기 위한 함수
function shallowCopy(value) {
  // 빈 객체를 생성
  const result = {};
 
  // 매게변수로 넘어온 객체를 빈 객체에 저장
  for(const key in value) {
    result[key] = value[key];
  }
 
  // 매게변수로 넘어온 요소로 채워진
  // 빈 객체였던 객체를 반환
  return result;
}&lt;/code&gt;&lt;/pre&gt;
&lt;p data-ke-size=&quot;size18&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size18&quot;&gt;이 함수는 빈 객체를 하나 생성하여,&lt;/p&gt;
&lt;p data-ke-size=&quot;size18&quot;&gt;반복문을 이용해 매게변수로 받은 객체를 빈객체에 저장하고&lt;/p&gt;
&lt;p data-ke-size=&quot;size18&quot;&gt;빈 객체였던 객체를 반환해주는 방식의 함수 입니다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size18&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size18&quot;&gt;메모리 그림을 통해 알아보면 아래와 같습니다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size18&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-origin-width=&quot;1280&quot; data-origin-height=&quot;720&quot; data-filename=&quot;슬라이드4.PNG&quot; data-ke-mobilestyle=&quot;widthContent&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/FdNDm/btqPYS654lC/Cyzv8cK1BbwWo6GD6dsAxK/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/FdNDm/btqPYS654lC/Cyzv8cK1BbwWo6GD6dsAxK/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/FdNDm/btqPYS654lC/Cyzv8cK1BbwWo6GD6dsAxK/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FFdNDm%2FbtqPYS654lC%2FCyzv8cK1BbwWo6GD6dsAxK%2Fimg.png&quot; data-origin-width=&quot;1280&quot; data-origin-height=&quot;720&quot; data-filename=&quot;슬라이드4.PNG&quot; data-ke-mobilestyle=&quot;widthContent&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;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;/p&gt;
&lt;p data-ke-size=&quot;size18&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size18&quot;&gt;매게변수로 받아온 객체의 모습이 이렇다고 가정할 때 &lt;span style=&quot;color: #333333;&quot;&gt;shallowCopy&lt;/span&gt;&lt;span style=&quot;color: #333333;&quot;&gt;&lt;span&gt; 함수를 사용하게 된다면,&lt;/span&gt;&lt;/span&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size18&quot;&gt;&lt;span style=&quot;color: #333333;&quot;&gt;&lt;span&gt;아래와 같은 메모리 구조가 나오게 됩니다.&lt;/span&gt;&lt;/span&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size18&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-filename=&quot;슬라이드5.PNG&quot; data-origin-width=&quot;1280&quot; data-origin-height=&quot;720&quot; data-ke-mobilestyle=&quot;widthContent&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/yqFcV/btqPYkJpYxT/JApnhwxPKqIV4PAqNuG7X1/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/yqFcV/btqPYkJpYxT/JApnhwxPKqIV4PAqNuG7X1/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/yqFcV/btqPYkJpYxT/JApnhwxPKqIV4PAqNuG7X1/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FyqFcV%2FbtqPYkJpYxT%2FJApnhwxPKqIV4PAqNuG7X1%2Fimg.png&quot; data-filename=&quot;슬라이드5.PNG&quot; data-origin-width=&quot;1280&quot; data-origin-height=&quot;720&quot; data-ke-mobilestyle=&quot;widthContent&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;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;/p&gt;
&lt;p data-ke-size=&quot;size18&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;ul style=&quot;list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li&gt;
&lt;p data-ke-size=&quot;size18&quot;&gt;1080 주소에 result 이름을 가진 메모리를 생성합니다.&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p data-ke-size=&quot;size18&quot;&gt;1080주소에 9001주소를 저장합니다.&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p data-ke-size=&quot;size18&quot;&gt;9001은 1068 ~ 1069 주소의 값을 가지고 있습니다.&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p data-ke-size=&quot;size18&quot;&gt;1068은 a 요소의 값이 7001 주소를 저장합니다.&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p data-ke-size=&quot;size18&quot;&gt;1069는 b 요소의 값이 5010 주소를 할당 받습니다. 이 메모리는 obj의 b요소인 1041 주소의 값과 동일해 집니다.&lt;/p&gt;
&lt;/li&gt;
&lt;/ul&gt;
&lt;p data-ke-size=&quot;size18&quot;&gt;이러한 방식을 얕은복사라 합니다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size18&quot;&gt;이러한 구조를 띄고 있기 때문에 이전 obj2.b.1 의 값을 변경했을 때 obj.b.1 또한 같이 변경되었던 것입니다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size18&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size18&quot;&gt;사실 이러한 얕은복사는 이렇게 함수로 만들지 않고도 다양한 방식으로 사용할 수 있습니다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size18&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;ul style=&quot;list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li&gt;
&lt;p data-ke-size=&quot;size18&quot;&gt;&lt;i&gt;Object.assign() 메소드를 이용한 얕은복사&lt;/i&gt;&lt;/p&gt;
&lt;/li&gt;
&lt;/ul&gt;
&lt;pre id=&quot;code_1607881540459&quot; class=&quot;javascript&quot; data-ke-language=&quot;javascript&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;const a = {a: 1, b: 2};
const b = Object.assign({}, a);
 
console.log(b);	// {a: 1, b: 2}&lt;/code&gt;&lt;/pre&gt;
&lt;p data-ke-size=&quot;size18&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size18&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;ul style=&quot;list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li&gt;
&lt;p data-ke-size=&quot;size18&quot;&gt;&lt;i&gt;전개(Spread) 연산자를 이용한 얕은복사&lt;/i&gt;&lt;/p&gt;
&lt;/li&gt;
&lt;/ul&gt;
&lt;pre id=&quot;code_1607881641094&quot; class=&quot;javascript&quot; data-ke-language=&quot;javascript&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;const a = {a: 1, b: 2};
const b = {...a};
 
console.log(b);	// {a: 1, b: 2}&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;
&lt;hr contenteditable=&quot;false&quot; data-ke-type=&quot;horizontalRule&quot; data-ke-style=&quot;style1&quot; /&gt;
&lt;h2 data-ke-size=&quot;size26&quot;&gt;&lt;b&gt;객체의 깊은복사(deep copy)&lt;/b&gt;&lt;/h2&gt;
&lt;p data-ke-size=&quot;size18&quot;&gt;이제 깊은복사에 대해서 알아보겠습니다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size18&quot;&gt;깊은복사란, 내부 참조형 데이터를 할당받지 않고 복사하는 방식을 말합니다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size18&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size18&quot;&gt;소스를 한번 보겠습니다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size18&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;pre id=&quot;code_1607882011042&quot; class=&quot;javascript&quot; data-ke-language=&quot;javascript&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;// 깊은복사를 진행하기 위한 함수
function deepCopy(value) {
  const result = {};
 
  for(const key in value) {
    if (typeof value[key] === 'object') {
      result[key] = deepCopy(value[key]);
    } else {
      result[key] = value[key];
    }
  }
 
  return result;
}

// obj 생성
let obj = {
    a: 1,
    b: { c: 1, d: 2}
}

// obj2에 obj얕은 복사 실행
let obj2 = deepCopy(obj);

// obj2 요사 값 변경
obj2.a = 3;
obj2.b.c = 4;

// 결과
console.log(obj.a, obj2.a)	// 1 3
console.log(obj.b, obj2.b)	// {c: 1, d: 2} {c: 4, d: 2}&lt;/code&gt;&lt;/pre&gt;
&lt;p data-ke-size=&quot;size18&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size18&quot;&gt;여기서도 가장 중요한 함수는 deepCopy 함수입니다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size18&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;pre id=&quot;code_1607882179364&quot; class=&quot;javascript&quot; data-ke-language=&quot;javascript&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;// 깊은복사를 진행하기 위한 함수
function deepCopy(value) {
	// 빈 객체 생성
	const result = {};
    
	// 매게변수 데이터를 복사
	for(const key in value) {
		if (typeof value[key] === 'object') {
			// 참조형 데이터일 경우 재귀함수를 통해 한번 더 복사
			result[key] = deepCopy(value[key]);
		} else {
			// 참조형이 아닐경우 데이터를 빈객체에 저장
			result[key] = value[key];
		}
	}
    
    // 할당된 객체 반환
    return result;
}&lt;/code&gt;&lt;/pre&gt;
&lt;p data-ke-size=&quot;size18&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size18&quot;&gt;이 함수는 얕은복사 함수에 확장형입니다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size18&quot;&gt;반복문을 돌릴 때, 해당 데이터가 참조형일 경우 재귀함수를 이용해 기본형 데이터가 나올 때 까지 반복하는 함수입니다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size18&quot;&gt;이러한 방법을 이용해 깊은 복사를 진행하게 됩니다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size18&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size18&quot;&gt;이 깊은복사 또한, 함수를 구현하지 않아도 사용이 가능합니다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size18&quot;&gt;바로 JSON.stringfy() 메소드를 활용해 구현이 가능합니다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size18&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;ul style=&quot;list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li&gt;
&lt;p data-ke-size=&quot;size18&quot;&gt;&lt;i&gt;JSON.stringify()&amp;nbsp;메소드를&amp;nbsp;활용한&amp;nbsp;참조형&amp;nbsp;데이터&amp;nbsp;깊은복사&lt;/i&gt;&lt;/p&gt;
&lt;/li&gt;
&lt;/ul&gt;
&lt;pre id=&quot;code_1607882472612&quot; class=&quot;javascript&quot; data-ke-language=&quot;javascript&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;const obj = {
  a: 1,
  b: {
    c: 2,
  },
};

const copiedObj = JSON.parse(JSON.stringify(obj));

copiedObj.b.c = 3

obj.b.c === copiedObj.b.c //false &lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;
&lt;hr contenteditable=&quot;false&quot; data-ke-type=&quot;horizontalRule&quot; data-ke-style=&quot;style1&quot; /&gt;
&lt;h2 data-ke-size=&quot;size26&quot;&gt;&lt;b&gt;마무리&lt;/b&gt;&lt;/h2&gt;
&lt;p data-ke-size=&quot;size18&quot;&gt;오늘은 참조형 데이터 타입 복사에 대해서 알아보았습니다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size18&quot;&gt;&lt;span&gt;만약 포스트에 문제가 있거나 틀린 부분, 잘 이해가 안 되는 부분이 있다면&lt;/span&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size18&quot;&gt;&lt;span&gt;댓글을 남겨주시기 바랍니다.&lt;/span&gt;&lt;span&gt;&lt;/span&gt;&lt;/p&gt;</description>
      <category>프로그래밍 언어/웹 프론트엔드</category>
      <category>JavaScript</category>
      <category>깊은복사</category>
      <category>얕은복사</category>
      <category>참조할당</category>
      <category>참조형데이터</category>
      <author>방현준</author>
      <guid isPermaLink="true">https://noogoonaa.tistory.com/91</guid>
      <comments>https://noogoonaa.tistory.com/91#entry91comment</comments>
      <pubDate>Mon, 14 Dec 2020 03:06:08 +0900</pubDate>
    </item>
    <item>
      <title>자바스크립트의 참조형 데이터 타입</title>
      <link>https://noogoonaa.tistory.com/90</link>
      <description>&lt;hr contenteditable=&quot;false&quot; data-ke-type=&quot;horizontalRule&quot; data-ke-style=&quot;style5&quot; /&gt;
&lt;h4 data-ke-size=&quot;size20&quot;&gt;&lt;span style=&quot;color: #ee2323;&quot;&gt;&lt;i&gt;&lt;b&gt;함께 보면 좋은글&lt;/b&gt;&lt;/i&gt;&lt;/span&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;a href=&quot;https://noogoonaa.tistory.com/88&quot; target=&quot;_blank&quot; rel=&quot;noopener&quot;&gt;2020/10/06 - [프로그래밍 언어/Javascript] - 자바스크립트의 기본형 데이터 타입&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://noogoonaa.tistory.com/83&quot; target=&quot;_blank&quot; rel=&quot;noopener&quot;&gt;2020/09/02 - [프로그래밍 언어/Javascript] - 자바스크립트의 메모리 관리&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;hr contenteditable=&quot;false&quot; data-ke-type=&quot;horizontalRule&quot; data-ke-style=&quot;style5&quot; /&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock widthContent&quot; data-filename=&quot;자바스크립트.png&quot; data-origin-width=&quot;700&quot; data-origin-height=&quot;525&quot; data-ke-mobilestyle=&quot;widthContent&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/dH3QHk/btqPWYzP1E2/vrKK2IkNfzJX7LbK6YZQl0/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/dH3QHk/btqPWYzP1E2/vrKK2IkNfzJX7LbK6YZQl0/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/dH3QHk/btqPWYzP1E2/vrKK2IkNfzJX7LbK6YZQl0/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FdH3QHk%2FbtqPWYzP1E2%2FvrKK2IkNfzJX7LbK6YZQl0%2Fimg.png&quot; data-filename=&quot;자바스크립트.png&quot; data-origin-width=&quot;700&quot; data-origin-height=&quot;525&quot; data-ke-mobilestyle=&quot;widthContent&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;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;/p&gt;
&lt;hr contenteditable=&quot;false&quot; data-ke-type=&quot;horizontalRule&quot; data-ke-style=&quot;style3&quot; /&gt;
&lt;p data-ke-size=&quot;size18&quot;&gt;이전에는 기본형 데이터 타입에 대해서 알아보았습니다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size18&quot;&gt;오늘은 자바스크립트가 참조형 데이터를 어떻게 저장하고 사용하는지에 대해서 알아보도록 겠습니다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size18&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size18&quot;&gt;만약 이전 포스팅인 &lt;a href=&quot;https://noogoonaa.tistory.com/88?category=855168&quot; target=&quot;_blank&quot; rel=&quot;noopener&quot;&gt;자바스크립트의 기본형 데이터 타입&lt;/a&gt; 포스트를 읽고 오시지 않으셨다면 읽고 오시는것을 추천합니다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size18&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;figure id=&quot;og_1607881205196&quot; contenteditable=&quot;false&quot; data-ke-type=&quot;opengraph&quot; data-og-type=&quot;article&quot; data-og-title=&quot;자바스크립트의 데이터 타입 (1)&quot; data-og-description=&quot;함께 보면 좋은 글 2020/09/02 - [프로그래밍 언어/Javascript] - 자바스크립트의 메모리 관리 2020/07/05 - [프로그래밍 언어/Javascript] - 자바스크립트 호이스팅(Hoisting)이란? 여러분들은 자바스크립트에..&quot; data-og-host=&quot;noogoonaa.tistory.com&quot; data-og-source-url=&quot;https://noogoonaa.tistory.com/88&quot; data-og-url=&quot;https://noogoonaa.tistory.com/88&quot; data-og-image=&quot;https://scrap.kakaocdn.net/dn/sRsX5/hyIy1U2DmD/0hO3KyjwZNkV3tGjQiS0S1/img.png?width=700&amp;amp;height=525&amp;amp;face=0_0_700_525,https://scrap.kakaocdn.net/dn/ePQ4I/hyIy11POjh/4gebwalkYIg3Jv6KwB8vpk/img.png?width=700&amp;amp;height=525&amp;amp;face=0_0_700_525,https://scrap.kakaocdn.net/dn/XkE3L/hyIyWe78On/9KdQ0Motf2EemlFbj0Kysk/img.png?width=1280&amp;amp;height=720&amp;amp;face=0_0_1280_720&quot;&gt;&lt;a href=&quot;https://noogoonaa.tistory.com/88&quot; target=&quot;_blank&quot; rel=&quot;noopener&quot; data-source-url=&quot;https://noogoonaa.tistory.com/88&quot;&gt;
&lt;div class=&quot;og-image&quot; style=&quot;background-image: url('https://scrap.kakaocdn.net/dn/sRsX5/hyIy1U2DmD/0hO3KyjwZNkV3tGjQiS0S1/img.png?width=700&amp;amp;height=525&amp;amp;face=0_0_700_525,https://scrap.kakaocdn.net/dn/ePQ4I/hyIy11POjh/4gebwalkYIg3Jv6KwB8vpk/img.png?width=700&amp;amp;height=525&amp;amp;face=0_0_700_525,https://scrap.kakaocdn.net/dn/XkE3L/hyIyWe78On/9KdQ0Motf2EemlFbj0Kysk/img.png?width=1280&amp;amp;height=720&amp;amp;face=0_0_1280_720');&quot;&gt;&amp;nbsp;&lt;/div&gt;
&lt;div class=&quot;og-text&quot;&gt;
&lt;p class=&quot;og-title&quot;&gt;자바스크립트의 데이터 타입 (1)&lt;/p&gt;
&lt;p class=&quot;og-desc&quot;&gt;함께 보면 좋은 글 2020/09/02 - [프로그래밍 언어/Javascript] - 자바스크립트의 메모리 관리 2020/07/05 - [프로그래밍 언어/Javascript] - 자바스크립트 호이스팅(Hoisting)이란? 여러분들은 자바스크립트에..&lt;/p&gt;
&lt;p class=&quot;og-host&quot;&gt;noogoonaa.tistory.com&lt;/p&gt;
&lt;/div&gt;
&lt;/a&gt;&lt;/figure&gt;
&lt;hr contenteditable=&quot;false&quot; data-ke-type=&quot;horizontalRule&quot; data-ke-style=&quot;style1&quot; /&gt;
&lt;h2 data-ke-size=&quot;size26&quot;&gt;&lt;b&gt;참조형 데이터 타입&lt;/b&gt;&lt;/h2&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-filename=&quot;img.png&quot; data-origin-width=&quot;1460&quot; data-origin-height=&quot;1386&quot; data-ke-mobilestyle=&quot;widthContent&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/duA7Fz/btqPYSePrq1/5TPpzGZy5iQ48ktx7bbfQK/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/duA7Fz/btqPYSePrq1/5TPpzGZy5iQ48ktx7bbfQK/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/duA7Fz/btqPYSePrq1/5TPpzGZy5iQ48ktx7bbfQK/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FduA7Fz%2FbtqPYSePrq1%2F5TPpzGZy5iQ48ktx7bbfQK%2Fimg.png&quot; data-filename=&quot;img.png&quot; data-origin-width=&quot;1460&quot; data-origin-height=&quot;1386&quot; data-ke-mobilestyle=&quot;widthContent&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;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;/p&gt;
&lt;p data-ke-size=&quot;size18&quot;&gt;참조형 데이터는 배열(Array), 함수(Function), Set, Map 등의 데이터 타입을 가지고 있지만&lt;/p&gt;
&lt;p data-ke-size=&quot;size18&quot;&gt;이 데이터 타입들을 까고 까다보면 객체 하나로 귀결됩니다.&lt;span style=&quot;color: #333333;&quot;&gt;&lt;/span&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size18&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size18&quot;&gt;그래서 참조형 데이터들이 메모리를 사용하는 방식을 보면 거의 비슷합니다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size18&quot;&gt;하지만, 그렇다고 해서 쉬운건 또 아닙니다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size18&quot;&gt;객체 하나로 귀결되는 만큼 내용도 방대하기 때문에 다양하게 알아야 할 것이 많기 때문이죠&lt;/p&gt;
&lt;p data-ke-size=&quot;size18&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size18&quot;&gt;또한, 참조형 데이터는 기본형 데이터와는 다르게 불변하지 않고 가변적으로 변하는 데이터 입니다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size18&quot;&gt;그래서 더 신경을 많이 써야하고 어디서 어떻게 변할지 모르는 데이터 타입입니다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size18&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size18&quot;&gt;그렇다면 어떻게 해서 자바스크립트의 참조형 데이터는 가변적인 데이터가 될 수 있었을까요?&lt;/p&gt;
&lt;p data-ke-size=&quot;size18&quot;&gt;그것은 바로 다음 섹션인 참조형 데이터가 어떻게 메모리를 사용하는지에 대해서 알아보도록 하겠습니다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size18&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size18&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;hr contenteditable=&quot;false&quot; data-ke-type=&quot;horizontalRule&quot; data-ke-style=&quot;style1&quot; /&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;
&lt;h2 data-ke-size=&quot;size26&quot;&gt;&lt;b&gt;자바스크립트가 참조형 객체를 생성하고 추가 및 변경하는 방법 with 그림&lt;/b&gt;&lt;/h2&gt;
&lt;p data-ke-size=&quot;size18&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;pre id=&quot;code_1607870244632&quot; class=&quot;javascript&quot; data-ke-language=&quot;javascript&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;// obj 객체 생성 및 초기화
let obj = {
    a: 1,
    b: &quot;test&quot;
};&lt;/code&gt;&lt;/pre&gt;
&lt;p data-ke-size=&quot;size18&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size18&quot;&gt;먼저 소스를 통해 알아보도록 하겠습니다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size18&quot;&gt;obj를 생성 후 객체로 초기화 해줍니다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size18&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size18&quot;&gt;여기서, 객체의 내부는 키와 값으로 이루어져 있는데,&lt;/p&gt;
&lt;p data-ke-size=&quot;size18&quot;&gt;객체의 키를 &quot;a&quot; 와 &quot;b&quot;로 생성하고 각각 1과 &quot;test&quot;라는 기본형 데이터를 저장해 줍니다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size18&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size18&quot;&gt;그렇다면 자바스크립트는 아래와 같이 메모리를 다루게 됩니다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size18&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-filename=&quot;슬라이드1.PNG&quot; data-origin-width=&quot;1280&quot; data-origin-height=&quot;720&quot; data-ke-mobilestyle=&quot;widthContent&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/bQpegh/btqPYTdJWpW/gebnzDiBAAodq5QozOUFV0/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/bQpegh/btqPYTdJWpW/gebnzDiBAAodq5QozOUFV0/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/bQpegh/btqPYTdJWpW/gebnzDiBAAodq5QozOUFV0/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FbQpegh%2FbtqPYTdJWpW%2FgebnzDiBAAodq5QozOUFV0%2Fimg.png&quot; data-filename=&quot;슬라이드1.PNG&quot; data-origin-width=&quot;1280&quot; data-origin-height=&quot;720&quot; data-ke-mobilestyle=&quot;widthContent&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;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;/p&gt;
&lt;p data-ke-size=&quot;size18&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;ul style=&quot;list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li&gt;
&lt;p data-ke-size=&quot;size18&quot;&gt;자바스크립트는 obj 객체를 301 메모리에 값으로 5001 메모리 주소를 저장합니다.&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p data-ke-size=&quot;size18&quot;&gt;5001 메모리에는 obj가 가지는 임의의 메모리 영역을 저장합니다. 여기선 1040부터 1041이라고 잡겠습니다.&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p data-ke-size=&quot;size18&quot;&gt;1040과 1041에는 각각 a와 b라는 이름을 제공하고 데이터가 저장되어있는 주소인 7001과 1003 주소를 저장합니다.&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p data-ke-size=&quot;size18&quot;&gt;7001에는 숫자형인 1을 저장합니다.&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p data-ke-size=&quot;size18&quot;&gt;기존에 &quot;test&quot;라는 문자열 데이터를 3003에서 사용하고 있었으므로 1041은 따로 메모리를 생성하지 않고 7003을 재사용 합니다.&lt;/p&gt;
&lt;/li&gt;
&lt;/ul&gt;
&lt;p data-ke-size=&quot;size18&quot;&gt;기본형 데이터와 참조형 데이터의 차이는 각 객체의 요소들의 영역이 따로 존재한다는 것에 차이가 있습니다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size18&quot;&gt;풀어서 설명하자면, 기본형 데이터는 변수 영역 -&amp;gt; 데이터 영역으로 접근한다면&lt;/p&gt;
&lt;p data-ke-size=&quot;size18&quot;&gt;참조형 데이터는 변수영역 -&amp;gt; 요소 데이터 영역 -&amp;gt; 요소 변수 영역 -&amp;gt; 요소 기본형 데이터 영역에 방식으로&lt;/p&gt;
&lt;p data-ke-size=&quot;size18&quot;&gt;이루어져 있다는 뜻입니다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size18&quot;&gt;(물론 여기서 객체안의 객체가 존재하는 등의 depth가 깊어져 간다면 이러한 단계는 더욱더 많아집니다)&lt;/p&gt;
&lt;p data-ke-size=&quot;size18&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size18&quot;&gt;또한, 참조형 데이터가 가변값인 이유도 이 요소변수영역 존재이기 때문인데,&lt;/p&gt;
&lt;p data-ke-size=&quot;size18&quot;&gt;이 요소 변수영역으로 인해 추가 및 삭제, 업데이트가 가능하기 때문에 참조형 데이터가 가변값이 됩니다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size18&quot;&gt;간단하게 업데이트와 추가를 통해 가변적으로 객체가 변경되는것을 보여드리겠습니다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size18&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;pre id=&quot;code_1607879867438&quot; class=&quot;javascript&quot; data-ke-language=&quot;javascript&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;// 기존 데이터
const test = 2;

// obj 객체 생성 및 초기화
const obj = {
    a: 1,
    b: 2
};

// 객체에 데이터를 변경
obj.b = 56

// 객체에 데이터 추가
obj.c = 2;

console.log(obj)&lt;/code&gt;&lt;/pre&gt;
&lt;p data-ke-size=&quot;size18&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-filename=&quot;슬라이드7.PNG&quot; data-origin-width=&quot;1280&quot; data-origin-height=&quot;720&quot; data-ke-mobilestyle=&quot;widthContent&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/c7srj3/btqPWZFxPHx/FeHovjHPDcI5ktPsLcAbw1/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/c7srj3/btqPWZFxPHx/FeHovjHPDcI5ktPsLcAbw1/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/c7srj3/btqPWZFxPHx/FeHovjHPDcI5ktPsLcAbw1/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2Fc7srj3%2FbtqPWZFxPHx%2FFeHovjHPDcI5ktPsLcAbw1%2Fimg.png&quot; data-filename=&quot;슬라이드7.PNG&quot; data-origin-width=&quot;1280&quot; data-origin-height=&quot;720&quot; data-ke-mobilestyle=&quot;widthContent&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;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;/p&gt;
&lt;p data-ke-size=&quot;size18&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size18&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;ul style=&quot;list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li&gt;
&lt;p data-ke-size=&quot;size18&quot;&gt;obj 객체를 초기화 후 객체를 할당합니다.&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p data-ke-size=&quot;size18&quot;&gt;그 후 obj 객체에 b요소의 값을 변경합니다. (가변적인 부분)&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p data-ke-size=&quot;size18&quot;&gt;또, obj 객체에 c요소를 추가합니다. (가변적인 부분)&lt;/p&gt;
&lt;/li&gt;
&lt;/ul&gt;
&lt;p data-ke-size=&quot;size18&quot;&gt;위 소스에서 주의깊게 보아야 할 부분은 obj 객체에 b요소를 변경하고 c요소를 추가한 부분입니다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size18&quot;&gt;기본형 데이터의 특징인 불변성은 값을 변경할 때 값이 변경되는게 아닌 변수영역의 메모리가 변경되는것을 말합니다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size18&quot;&gt;하지만 위 코드처럼 b를 변경하고 c를 추가할 때,&lt;/p&gt;
&lt;p data-ke-size=&quot;size18&quot;&gt;obj의 변수영역 값은 변경되지 않은 상태로 데이터가 변경되는 것을 볼 수 있습니다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size18&quot;&gt;이러한 특성 때문에 참조형 데이터를 가변적인 데이터라고 하는것 입니다.&lt;/p&gt;
&lt;hr contenteditable=&quot;false&quot; data-ke-type=&quot;horizontalRule&quot; data-ke-style=&quot;style1&quot; /&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;
&lt;h2 data-ke-size=&quot;size26&quot;&gt;&lt;b&gt;자바스크립트가 참조형 배열을 생성하는 방법&amp;nbsp; with 그림&lt;/b&gt;&lt;/h2&gt;
&lt;p data-ke-size=&quot;size18&quot;&gt;맨 위에 기본형 데이터와 참조형 데이터 도표를 보면,&lt;/p&gt;
&lt;p data-ke-size=&quot;size18&quot;&gt;참조형 데이터에 객체뿐만 아니라 배열 및 다양한 타입들이 존재합니다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size18&quot;&gt;그 중에서 대표적으로 배열이 어떻게 메모리를 사용하는지에 대해서 알아보도록 하겠습니다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size18&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;pre id=&quot;code_1607877950796&quot; class=&quot;javascript&quot; data-ke-language=&quot;javascript&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;const test = 2;

let arr = [1, 2];&lt;/code&gt;&lt;/pre&gt;
&lt;p data-ke-size=&quot;size18&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size18&quot;&gt;이러한 코드가 있다고 가정합시다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size18&quot;&gt;그러면 메모리에는 아래 그림과 같이 저장되어 집니다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size18&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-filename=&quot;슬라이드6.PNG&quot; data-origin-width=&quot;1280&quot; data-origin-height=&quot;720&quot; data-ke-mobilestyle=&quot;widthContent&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/dwVDbp/btqP6nkkUNd/2iUkkJduwRkPRxDKTisAK0/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/dwVDbp/btqP6nkkUNd/2iUkkJduwRkPRxDKTisAK0/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/dwVDbp/btqP6nkkUNd/2iUkkJduwRkPRxDKTisAK0/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FdwVDbp%2FbtqP6nkkUNd%2F2iUkkJduwRkPRxDKTisAK0%2Fimg.png&quot; data-filename=&quot;슬라이드6.PNG&quot; data-origin-width=&quot;1280&quot; data-origin-height=&quot;720&quot; data-ke-mobilestyle=&quot;widthContent&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;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;/p&gt;
&lt;p data-ke-size=&quot;size18&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;ul style=&quot;list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li&gt;
&lt;p data-ke-size=&quot;size18&quot;&gt;메모리에 301주소에 arr 메모리를 할당하고, 5001 주소를 할당합니다.&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p data-ke-size=&quot;size18&quot;&gt;주소 5001번에는 주소 1040번 부터 1041번 까지의 주소값을 할당합니다.&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p data-ke-size=&quot;size18&quot;&gt;주소 1040번의 이름은 0으로 하고 1의 기본형 데이터가 존재하지 않으므로 주소 7001번에 숫자형 데이터 1을 저장합니다.&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p data-ke-size=&quot;size18&quot;&gt;주소 1041번의 이름은 1으로 하고 숫자형 데이터 2가 주소 3003번에서 사용하는 주소 7002번에서 사용하고 있으므로 주소 7002번을 저장합니다.&lt;/p&gt;
&lt;/li&gt;
&lt;/ul&gt;
&lt;p data-ke-size=&quot;size18&quot;&gt;어때요 &lt;span style=&quot;letter-spacing: 0px;&quot;&gt;&lt;span style=&quot;color: #333333;&quot;&gt;위의 객체가 메모리를 사용하는것과 똑같이 사용하죠?&lt;/span&gt;&lt;/span&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size18&quot;&gt;&lt;span style=&quot;letter-spacing: 0px;&quot;&gt;&lt;span style=&quot;color: #333333;&quot;&gt;그냥 키값이 0, 1, 2, 3 이런식으로 다를 뿐, 메모리를 사용하는 방식은 똑같습니다.&lt;/span&gt;&lt;/span&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size18&quot;&gt;&lt;span style=&quot;letter-spacing: 0px;&quot;&gt;&lt;span style=&quot;color: #333333;&quot;&gt;Set이나 Map같은 데이터 타입도 이와 비슷한 방식으로 메모리를 사용합니다.&lt;/span&gt;&lt;/span&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size18&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size18&quot;&gt;&lt;span style=&quot;letter-spacing: 0px;&quot;&gt;&lt;span style=&quot;color: #333333;&quot;&gt;참고로, 객체에 키값만 0, 1, 2, 3 이런식으로 저장해놓고 배열이라고 우기면 안됩니다. &lt;/span&gt;&lt;/span&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size18&quot;&gt;&lt;span style=&quot;letter-spacing: 0px;&quot;&gt;&lt;span style=&quot;color: #333333;&quot;&gt;배열이 메모리를 사용하는 방식이 같을뿐이지, 실제로 까보면 엄연히 다릅니다.&lt;/span&gt;&lt;/span&gt;&lt;span style=&quot;letter-spacing: 0px;&quot;&gt;&lt;span style=&quot;color: #333333;&quot;&gt;&lt;/span&gt;&lt;/span&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size18&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;hr contenteditable=&quot;false&quot; data-ke-type=&quot;horizontalRule&quot; data-ke-style=&quot;style1&quot; /&gt;
&lt;p data-ke-size=&quot;size18&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;h2 data-ke-size=&quot;size26&quot;&gt;&lt;b&gt;마무리&lt;/b&gt;&lt;/h2&gt;
&lt;p data-ke-size=&quot;size18&quot;&gt;오늘은 자바스크립트의 참조형 데이터 타입에 대해서 알아보았습니다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size18&quot;&gt;사실 오늘은 그렇게 깊은 내용까지는 들어가지 않았습니다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size18&quot;&gt;추후 포스팅 할 때 깊은내용까지 들어가도록 하겠습니다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size18&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size18&quot;&gt;&lt;span&gt;만약 포스트에 문제가 있거나 틀린 부분, 잘 이해가 안 되는 부분이 있다면&lt;/span&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size18&quot;&gt;&lt;span&gt;댓글을 남겨주시기 바랍니다.&lt;/span&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size18&quot;&gt;&lt;span&gt;감사합니다.&lt;/span&gt;&lt;/p&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;</description>
      <category>프로그래밍 언어/웹 프론트엔드</category>
      <category>JavaScript</category>
      <category>참조형데이터</category>
      <author>방현준</author>
      <guid isPermaLink="true">https://noogoonaa.tistory.com/90</guid>
      <comments>https://noogoonaa.tistory.com/90#entry90comment</comments>
      <pubDate>Mon, 14 Dec 2020 02:36:44 +0900</pubDate>
    </item>
    <item>
      <title>청년 내일채움공제 2년차 만기금 신청 방법 및 리뷰</title>
      <link>https://noogoonaa.tistory.com/89</link>
      <description>&lt;hr contenteditable=&quot;false&quot; data-ke-type=&quot;horizontalRule&quot; data-ke-style=&quot;style5&quot; /&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock widthContent&quot; data-ke-mobileStyle=&quot;widthContent&quot; data-filename=&quot;unnamed (1).png&quot; data-origin-width=&quot;512&quot; data-origin-height=&quot;322&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/Liwsc/btqMBwS7dvd/CcuTErI14gvR25uUTk7LZ0/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/Liwsc/btqMBwS7dvd/CcuTErI14gvR25uUTk7LZ0/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/Liwsc/btqMBwS7dvd/CcuTErI14gvR25uUTk7LZ0/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FLiwsc%2FbtqMBwS7dvd%2FCcuTErI14gvR25uUTk7LZ0%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;512&quot; height=&quot;322&quot; data-filename=&quot;unnamed (1).png&quot; data-origin-width=&quot;512&quot; data-origin-height=&quot;322&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;/p&gt;
&lt;hr contenteditable=&quot;false&quot; data-ke-type=&quot;horizontalRule&quot; data-ke-style=&quot;style3&quot; /&gt;
&lt;p data-ke-size=&quot;size18&quot;&gt;여러분들은 청년 내일채움공제를 진행하고 계신가요?&lt;/p&gt;
&lt;p data-ke-size=&quot;size18&quot;&gt;오늘은 제기 이 2년짜리 청년내일채움공제 만기금을 신청할 수 있게 되어&lt;/p&gt;
&lt;p data-ke-size=&quot;size18&quot;&gt;이 &lt;span style=&quot;color: #333333;&quot;&gt;청년내일채움공제&lt;span&gt;&amp;nbsp;만기금을&lt;/span&gt;&lt;/span&gt; 신청하는 방법에 대해서 알아보도록하겠습니다.&lt;/p&gt;
&lt;hr contenteditable=&quot;false&quot; data-ke-type=&quot;horizontalRule&quot; data-ke-style=&quot;style1&quot; /&gt;
&lt;h2 data-ke-size=&quot;size26&quot;&gt;&lt;b&gt;청년내일채움공제란?&lt;/b&gt;&lt;/h2&gt;
&lt;p data-ke-size=&quot;size18&quot;&gt;먼저 청년내일채움공제 만기금을 신청하기 전에 청년 내일 채움공제가 무엇인지를 알아보도록 하겠습니다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size18&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size18&quot;&gt;청년 내일채움공제는 미취업 청년(만15세 이상 34세 이하)의 중소&amp;middot;중견기업 유입을 촉진하고, 청년 근로자의 장기 근속과 자산 형성을 지원하기 위해 2016년 7월부터 시행한 제도로써 2년형과 3년형이 존재합니다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size18&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size18&quot;&gt;2년형은 &lt;span style=&quot;color: #333333;&quot;&gt;5인 이상 중소&amp;middot;중견기업(3년 평균 매출액 3천억원 미만인 기업)에 취업한 청년이 2년간 300만원을 적립하면, 정부가 900만원, 기업이 400만원을 공동 적립하여 만기 시 1,600만원의 목돈 마련할 수 있고&lt;/span&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size18&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size18&quot;&gt;&lt;span style=&quot;color: #333333;&quot;&gt;3년형은 &lt;span style=&quot;color: #333333;&quot;&gt;5인 이상 중소&amp;middot;중견기업(3년 평균 매출액 3천억원 미만인 기업) 중 뿌리산업 진흥과 첨단화에 관한 법률에 따른 '뿌리기업'에 취업한 청년이 3년간 600만원을 적립하면, 정부가 1,800만원, 기업이 600만원을 공동 적립하여 만기 시 3,000만원의 목돈 마련&lt;/span&gt;&lt;/span&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size18&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size18&quot;&gt;물론 모든 중소기업이 이 청년내일체움공제를 해 줄수 있는게 아닙니다. 청년내일채움공제 센터와 연계되어 있어야 하며, 사업장에서도 이 &lt;span style=&quot;color: #333333;&quot;&gt;청년내일채움공제를 할 의향이 있어야 합니다.&lt;/span&gt;&lt;/p&gt;
&lt;hr contenteditable=&quot;false&quot; data-ke-type=&quot;horizontalRule&quot; data-ke-style=&quot;style1&quot; /&gt;
&lt;h2 data-ke-size=&quot;size26&quot;&gt;&lt;b&gt;청년내일채움공제 만기금 신청일&lt;/b&gt;&lt;/h2&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthContent&quot; data-origin-width=&quot;1266&quot; data-origin-height=&quot;436&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/kKqCS/btqMBwZSHMm/suChfFRlksEAXlOidKX36k/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/kKqCS/btqMBwZSHMm/suChfFRlksEAXlOidKX36k/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/kKqCS/btqMBwZSHMm/suChfFRlksEAXlOidKX36k/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FkKqCS%2FbtqMBwZSHMm%2FsuChfFRlksEAXlOidKX36k%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;1266&quot; height=&quot;436&quot; data-origin-width=&quot;1266&quot; data-origin-height=&quot;436&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;/p&gt;
&lt;p data-ke-size=&quot;size18&quot;&gt;&lt;span style=&quot;color: #333333;&quot;&gt;청년내일채움공제는 만기일자가 존재합니다.&amp;nbsp;&lt;/span&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size18&quot;&gt;&lt;span style=&quot;color: #333333;&quot;&gt;이 만기일자가 곧 우리가 돈을 받을수 있는 날짜라고 생각하시면 안됩니다.&lt;/span&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size18&quot;&gt;&lt;span style=&quot;color: #333333;&quot;&gt;이 만기일자는 청약 가입자가 사업장을 퇴사하여도 청약에 큰 문제가 없다는 것을 말하는 날짜이고,&lt;/span&gt;&lt;span style=&quot;color: #333333;&quot;&gt;&lt;/span&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size18&quot;&gt;&lt;span style=&quot;color: #333333;&quot;&gt;이 만기일자 전에 날짜 이전에 퇴사한다면 청약 중도 퇴사로 모든 금액을 받을 수 없습니다.&lt;/span&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size18&quot;&gt;&lt;span style=&quot;color: #333333;&quot;&gt;그러니 이 만기일자를 꼭 체크한 후 계획을 짜는것이 좋습니다.&lt;/span&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size18&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size18&quot;&gt;&lt;span style=&quot;color: #333333;&quot;&gt;자 그럼 우리는 만기금을 언제 신청할 수 있을까요?&lt;/span&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size18&quot;&gt;&lt;span style=&quot;color: #333333;&quot;&gt;일단 회사에서 기업기여금을 5회 다 내야하고&lt;/span&gt;&lt;span style=&quot;color: #333333;&quot;&gt; 청약완료 신청서 같은것을 써야 합니다.&lt;/span&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size18&quot;&gt;&lt;span style=&quot;color: #333333;&quot;&gt;그 후 국가에서 준는 취업지원금 또한 다 납부하여야 만기금 신청이 가능합니다.&lt;/span&gt;&lt;/p&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthContent&quot; data-origin-width=&quot;1180&quot; data-origin-height=&quot;258&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/crzmZm/btqMARpOloa/vmxpLBRSWwElceG8rw6Ebk/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/crzmZm/btqMARpOloa/vmxpLBRSWwElceG8rw6Ebk/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/crzmZm/btqMARpOloa/vmxpLBRSWwElceG8rw6Ebk/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FcrzmZm%2FbtqMARpOloa%2FvmxpLBRSWwElceG8rw6Ebk%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;1180&quot; height=&quot;258&quot; data-origin-width=&quot;1180&quot; data-origin-height=&quot;258&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;/p&gt;
&lt;p data-ke-size=&quot;size18&quot;&gt;물론 이 금액을 계속해서 청년내일채움공제 사이트에서 지속적으로 확인할 필요는 없고&lt;/p&gt;
&lt;p data-ke-size=&quot;size18&quot;&gt;아래 사진과 같이 취업지원금이 납부되었다고 뜨게 됩니다.&lt;/p&gt;
&lt;p 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;widthContent&quot; data-filename=&quot;InkedKakaoTalk_20201105_150255766_LI.jpg&quot; data-origin-width=&quot;422&quot; data-origin-height=&quot;244&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/bo2i6G/btqMG8DvpXY/zggYJZV5h1C57zB1wkiXz1/img.jpg&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/bo2i6G/btqMG8DvpXY/zggYJZV5h1C57zB1wkiXz1/img.jpg&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/bo2i6G/btqMG8DvpXY/zggYJZV5h1C57zB1wkiXz1/img.jpg&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2Fbo2i6G%2FbtqMG8DvpXY%2FzggYJZV5h1C57zB1wkiXz1%2Fimg.jpg&quot; onerror=&quot;this.onerror=null; this.src='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png'; this.srcset='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png';&quot; loading=&quot;lazy&quot; width=&quot;422&quot; height=&quot;244&quot; data-filename=&quot;InkedKakaoTalk_20201105_150255766_LI.jpg&quot; data-origin-width=&quot;422&quot; data-origin-height=&quot;244&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;/p&gt;
&lt;p data-ke-size=&quot;size18&quot;&gt;이 때 이후부터 만기금 신청이 가능해 집니다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size18&quot;&gt;그럼 이제 만기금 신청을 해보도록 하겠습니다.&lt;/p&gt;
&lt;hr contenteditable=&quot;false&quot; data-ke-type=&quot;horizontalRule&quot; data-ke-style=&quot;style1&quot; /&gt;
&lt;h2 data-ke-size=&quot;size26&quot;&gt;&lt;b&gt;&lt;span style=&quot;color: #333333;&quot;&gt;청년내일채움공제 만기금 신청하는 방법&lt;/span&gt;&lt;/b&gt;&lt;/h2&gt;
&lt;p data-ke-size=&quot;size18&quot;&gt;&lt;span style=&quot;color: #333333;&quot;&gt;먼저 아래 사이트에 접속합니다.&lt;/span&gt;&lt;span style=&quot;color: #333333;&quot;&gt;&lt;/span&gt;&lt;/p&gt;
&lt;figure id=&quot;og_1604556313695&quot; contenteditable=&quot;false&quot; data-ke-type=&quot;opengraph&quot; data-og-type=&quot;website&quot; data-og-title=&quot;https://www.sbcplan.or.kr/main.do&quot; data-og-description=&quot;&quot; data-og-host=&quot;www.sbcplan.or.kr&quot; data-og-source-url=&quot;https://www.sbcplan.or.kr/main.do&quot; data-og-url=&quot;https://www.sbcplan.or.kr/main.do&quot; data-og-image=&quot;&quot;&gt;&lt;a href=&quot;https://www.sbcplan.or.kr/main.do&quot; target=&quot;_blank&quot; rel=&quot;noopener&quot; data-source-url=&quot;https://www.sbcplan.or.kr/main.do&quot;&gt;
&lt;div class=&quot;og-image&quot; style=&quot;background-image: url();&quot;&gt;&amp;nbsp;&lt;/div&gt;
&lt;div class=&quot;og-text&quot;&gt;
&lt;p class=&quot;og-title&quot; data-ke-size=&quot;size16&quot;&gt;https://www.sbcplan.or.kr/main.do&lt;/p&gt;
&lt;p class=&quot;og-desc&quot; data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p class=&quot;og-host&quot; data-ke-size=&quot;size16&quot;&gt;www.sbcplan.or.kr&lt;/p&gt;
&lt;/div&gt;
&lt;/a&gt;&lt;/figure&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthContent&quot; data-origin-width=&quot;1375&quot; data-origin-height=&quot;827&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/cImwyj/btqMArdKqOj/CQuGTZUCgIFukBlRJncf2k/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/cImwyj/btqMArdKqOj/CQuGTZUCgIFukBlRJncf2k/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/cImwyj/btqMArdKqOj/CQuGTZUCgIFukBlRJncf2k/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FcImwyj%2FbtqMArdKqOj%2FCQuGTZUCgIFukBlRJncf2k%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;1375&quot; height=&quot;827&quot; data-origin-width=&quot;1375&quot; data-origin-height=&quot;827&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;/p&gt;
&lt;p data-ke-size=&quot;size18&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size18&quot;&gt;그럼 위와 같은 사이트로 접속하게 됩니다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size18&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size18&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthContent&quot; data-origin-width=&quot;1237&quot; data-origin-height=&quot;765&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/SSqYF/btqMChanlqP/qKMM7oZ4y0Wy8GytNNMVwK/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/SSqYF/btqMChanlqP/qKMM7oZ4y0Wy8GytNNMVwK/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/SSqYF/btqMChanlqP/qKMM7oZ4y0Wy8GytNNMVwK/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FSSqYF%2FbtqMChanlqP%2FqKMM7oZ4y0Wy8GytNNMVwK%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;1237&quot; height=&quot;765&quot; data-origin-width=&quot;1237&quot; data-origin-height=&quot;765&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;/p&gt;
&lt;p data-ke-size=&quot;size18&quot;&gt;로그인을 합니다.&lt;/p&gt;
&lt;p 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;widthContent&quot; data-origin-width=&quot;1413&quot; data-origin-height=&quot;849&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/cGFuAb/btqMCfRdZCL/norVv3cwcAXZv6yNgov9o0/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/cGFuAb/btqMCfRdZCL/norVv3cwcAXZv6yNgov9o0/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/cGFuAb/btqMCfRdZCL/norVv3cwcAXZv6yNgov9o0/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FcGFuAb%2FbtqMCfRdZCL%2FnorVv3cwcAXZv6yNgov9o0%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;1413&quot; height=&quot;849&quot; data-origin-width=&quot;1413&quot; data-origin-height=&quot;849&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;/p&gt;
&lt;p data-ke-size=&quot;size18&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size18&quot;&gt;로그인은 공인인증서로 하시면 됩니다.&lt;/p&gt;
&lt;p 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;widthContent&quot; data-origin-width=&quot;1549&quot; data-origin-height=&quot;619&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/xRPfM/btqMArdOpCu/XzuVTAsaCjMsD9Lc4WewZ1/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/xRPfM/btqMArdOpCu/XzuVTAsaCjMsD9Lc4WewZ1/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/xRPfM/btqMArdOpCu/XzuVTAsaCjMsD9Lc4WewZ1/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FxRPfM%2FbtqMArdOpCu%2FXzuVTAsaCjMsD9Lc4WewZ1%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;1549&quot; height=&quot;619&quot; data-origin-width=&quot;1549&quot; data-origin-height=&quot;619&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;/p&gt;
&lt;p data-ke-size=&quot;size18&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size18&quot;&gt;그 후 위 탭에 접속해줍니다.&lt;/p&gt;
&lt;p 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;widthContent&quot; data-filename=&quot;InkedScreenshot_19_LI.jpg&quot; data-origin-width=&quot;1329&quot; data-origin-height=&quot;868&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/LI6rS/btqMGfb2S12/W6LbVs1zmDvqjilAfWhuc0/img.jpg&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/LI6rS/btqMGfb2S12/W6LbVs1zmDvqjilAfWhuc0/img.jpg&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/LI6rS/btqMGfb2S12/W6LbVs1zmDvqjilAfWhuc0/img.jpg&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FLI6rS%2FbtqMGfb2S12%2FW6LbVs1zmDvqjilAfWhuc0%2Fimg.jpg&quot; onerror=&quot;this.onerror=null; this.src='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png'; this.srcset='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png';&quot; loading=&quot;lazy&quot; width=&quot;1329&quot; height=&quot;868&quot; data-filename=&quot;InkedScreenshot_19_LI.jpg&quot; data-origin-width=&quot;1329&quot; data-origin-height=&quot;868&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;/p&gt;
&lt;p data-ke-size=&quot;size18&quot;&gt;그럼 위 사진과 같은 페이지가 접속되어지게 됩니다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size18&quot;&gt;그럼 테이블에 자기가 원하는 청약 상품에 왼쪽에 라디오버튼을 클릭하면&lt;/p&gt;
&lt;p data-ke-size=&quot;size18&quot;&gt;바로 아래 4개의 버튼이 나오게 됩니다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size18&quot;&gt;여기서 만기금 신청 버튼을 클릭해줍니다.&lt;/p&gt;
&lt;p 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;widthContent&quot; data-filename=&quot;InkedScreenshot_19_LI.jpg&quot; data-origin-width=&quot;1378&quot; data-origin-height=&quot;888&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/4X5gk/btqMAQRRduP/Q8aODbCVcPvSg49K1WZ5M1/img.jpg&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/4X5gk/btqMAQRRduP/Q8aODbCVcPvSg49K1WZ5M1/img.jpg&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/4X5gk/btqMAQRRduP/Q8aODbCVcPvSg49K1WZ5M1/img.jpg&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2F4X5gk%2FbtqMAQRRduP%2FQ8aODbCVcPvSg49K1WZ5M1%2Fimg.jpg&quot; onerror=&quot;this.onerror=null; this.src='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png'; this.srcset='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png';&quot; loading=&quot;lazy&quot; width=&quot;1378&quot; height=&quot;888&quot; data-filename=&quot;InkedScreenshot_19_LI.jpg&quot; data-origin-width=&quot;1378&quot; data-origin-height=&quot;888&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;/p&gt;
&lt;p data-ke-size=&quot;size18&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size18&quot;&gt;그럼 이런 페이지가 나오게 됩니다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size18&quot;&gt;이 페이지에 필요한 내용을 천천히 적어보도록 합시다.&lt;/p&gt;
&lt;p 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;widthContent&quot; data-filename=&quot;Screenshot_20.png&quot; data-origin-width=&quot;1273&quot; data-origin-height=&quot;719&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/GyBnd/btqMGNsQHUf/2XfHeS1kXrzRTHMEECcBj1/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/GyBnd/btqMGNsQHUf/2XfHeS1kXrzRTHMEECcBj1/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/GyBnd/btqMGNsQHUf/2XfHeS1kXrzRTHMEECcBj1/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FGyBnd%2FbtqMGNsQHUf%2F2XfHeS1kXrzRTHMEECcBj1%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;1273&quot; height=&quot;719&quot; data-filename=&quot;Screenshot_20.png&quot; data-origin-width=&quot;1273&quot; data-origin-height=&quot;719&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;/p&gt;
&lt;p data-ke-size=&quot;size18&quot;&gt;먼저 여기서 일시수령 미수령이 있는데&lt;/p&gt;
&lt;p data-ke-size=&quot;size18&quot;&gt;저는 일시수령을 선택하였습니다.&lt;/p&gt;
&lt;p 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;widthContent&quot; data-filename=&quot;Screenshot_21.png&quot; data-origin-width=&quot;1260&quot; data-origin-height=&quot;702&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/Vh1sv/btqMCfXWIuZ/rYt9HZqfFOHjpt2TvJWXi1/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/Vh1sv/btqMCfXWIuZ/rYt9HZqfFOHjpt2TvJWXi1/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/Vh1sv/btqMCfXWIuZ/rYt9HZqfFOHjpt2TvJWXi1/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FVh1sv%2FbtqMCfXWIuZ%2FrYt9HZqfFOHjpt2TvJWXi1%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;1260&quot; height=&quot;702&quot; data-filename=&quot;Screenshot_21.png&quot; data-origin-width=&quot;1260&quot; data-origin-height=&quot;702&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;/p&gt;
&lt;p data-ke-size=&quot;size18&quot;&gt;그 후 아래 에 공제만기금 수령계좌를 선택하게 되는데&lt;/p&gt;
&lt;p data-ke-size=&quot;size18&quot;&gt;자신이 원하는 계좌를 선택해줍니다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size18&quot;&gt;기본값으로 자신이 공제액을 납부하던 계좌가 설정되어 있습니다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size18&quot;&gt;저는 귀찮으니 그냥 기존에 납부하던 계좌로 받겠습니다.&lt;/p&gt;
&lt;p 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;widthContent&quot; data-origin-width=&quot;1286&quot; data-origin-height=&quot;669&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/RuiNo/btqMAPZKLBy/oOfokEm9u1d34pzVyC8etk/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/RuiNo/btqMAPZKLBy/oOfokEm9u1d34pzVyC8etk/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/RuiNo/btqMAPZKLBy/oOfokEm9u1d34pzVyC8etk/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FRuiNo%2FbtqMAPZKLBy%2FoOfokEm9u1d34pzVyC8etk%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;1286&quot; height=&quot;669&quot; data-origin-width=&quot;1286&quot; data-origin-height=&quot;669&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;/p&gt;
&lt;p data-ke-size=&quot;size18&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size18&quot;&gt;그런 다음 바로 아래에 간단한 설문조사가 있습니다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size18&quot;&gt;중요한건 아니니까 그냥 소신것 설문조사를 한 후&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size18&quot;&gt;아래에 공제 만기 신청 버튼을 클릭합니다.&lt;/p&gt;
&lt;p 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;widthContent&quot; data-origin-width=&quot;1330&quot; data-origin-height=&quot;859&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/bb2RHf/btqMGfJTnLL/HYNy9lKDP2kzP8KHl0PuDK/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/bb2RHf/btqMGfJTnLL/HYNy9lKDP2kzP8KHl0PuDK/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/bb2RHf/btqMGfJTnLL/HYNy9lKDP2kzP8KHl0PuDK/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2Fbb2RHf%2FbtqMGfJTnLL%2FHYNy9lKDP2kzP8KHl0PuDK%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;1330&quot; height=&quot;859&quot; data-origin-width=&quot;1330&quot; data-origin-height=&quot;859&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;/p&gt;
&lt;p data-ke-size=&quot;size18&quot;&gt;그럼 위 사진과 같이 연계가입 어쩌구 하면서&lt;/p&gt;
&lt;p data-ke-size=&quot;size18&quot;&gt;청년내일채움공제에서 내일채움공제까지 연계하여 돈을 받으라는 말이 나옵니다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size18&quot;&gt;저와는 상관이 없는 이야기니 깔끔하게 확인 버튼을 누릅니다.&lt;/p&gt;
&lt;p 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;widthContent&quot; data-origin-width=&quot;1689&quot; data-origin-height=&quot;425&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/buKynp/btqMG6yWzgC/XFRKZlKGC3FlB5U6sGx0X0/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/buKynp/btqMG6yWzgC/XFRKZlKGC3FlB5U6sGx0X0/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/buKynp/btqMG6yWzgC/XFRKZlKGC3FlB5U6sGx0X0/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FbuKynp%2FbtqMG6yWzgC%2FXFRKZlKGC3FlB5U6sGx0X0%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;1689&quot; height=&quot;425&quot; data-origin-width=&quot;1689&quot; data-origin-height=&quot;425&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;/p&gt;
&lt;p data-ke-size=&quot;size18&quot;&gt;그럼 위와같이 팝업이 뜨게 됩니다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size18&quot;&gt;확인버튼을 클릭해 줍니다.&lt;/p&gt;
&lt;p 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;widthContent&quot; data-origin-width=&quot;1447&quot; data-origin-height=&quot;609&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/bw0s6W/btqMARcdjDa/PEU5y1WfTDZ50oAfNMGhaK/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/bw0s6W/btqMARcdjDa/PEU5y1WfTDZ50oAfNMGhaK/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/bw0s6W/btqMARcdjDa/PEU5y1WfTDZ50oAfNMGhaK/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2Fbw0s6W%2FbtqMARcdjDa%2FPEU5y1WfTDZ50oAfNMGhaK%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;1447&quot; height=&quot;609&quot; data-origin-width=&quot;1447&quot; data-origin-height=&quot;609&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;/p&gt;
&lt;p data-ke-size=&quot;size18&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size18&quot;&gt;공인인증서를 인증해 주시구요&lt;/p&gt;
&lt;p 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;widthContent&quot; data-origin-width=&quot;720&quot; data-origin-height=&quot;296&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/dPWIh5/btqMDypq6SR/DOQaYukMYMfYr3KzqjWVBK/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/dPWIh5/btqMDypq6SR/DOQaYukMYMfYr3KzqjWVBK/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/dPWIh5/btqMDypq6SR/DOQaYukMYMfYr3KzqjWVBK/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FdPWIh5%2FbtqMDypq6SR%2FDOQaYukMYMfYr3KzqjWVBK%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;720&quot; height=&quot;296&quot; data-origin-width=&quot;720&quot; data-origin-height=&quot;296&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthContent&quot; data-origin-width=&quot;960&quot; data-origin-height=&quot;432&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/kwGof/btqMxoaNU01/dY9tlZFyArZ19m8ulHPMsK/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/kwGof/btqMxoaNU01/dY9tlZFyArZ19m8ulHPMsK/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/kwGof/btqMxoaNU01/dY9tlZFyArZ19m8ulHPMsK/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FkwGof%2FbtqMxoaNU01%2FdY9tlZFyArZ19m8ulHPMsK%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;960&quot; height=&quot;432&quot; data-origin-width=&quot;960&quot; data-origin-height=&quot;432&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;/p&gt;
&lt;p data-ke-size=&quot;size18&quot;&gt;자 만기공제를 신청하였습니다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size18&quot;&gt;문자로도 만기신청이 완료되었다고 문자가 오네요&lt;/p&gt;
&lt;p data-ke-size=&quot;size18&quot;&gt;이제 우리는 청년내일채움공제를 받을 수 있게 되었습니다. 축하합니다. 짝짝짝!&lt;/p&gt;
&lt;hr contenteditable=&quot;false&quot; data-ke-type=&quot;horizontalRule&quot; data-ke-style=&quot;style1&quot; /&gt;
&lt;h2 data-ke-size=&quot;size26&quot;&gt;&lt;b&gt;2년 청년내일채움공제 리뷰&lt;/b&gt;&lt;/h2&gt;
&lt;p data-ke-size=&quot;size18&quot;&gt;여러분들은 청년내일채움공제를 어떻게 생각하시나요?&lt;/p&gt;
&lt;p data-ke-size=&quot;size18&quot;&gt;저는 이 &lt;span style=&quot;color: #333333;&quot;&gt;청년내일채움공제를 중소기업 취업자에게는 꽤 좋은 정책이라고 생각하고 있습니다.&lt;/span&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size18&quot;&gt;&lt;span style=&quot;color: #333333;&quot;&gt;왜냐하면 이 &lt;span style=&quot;color: #333333;&quot;&gt;청년내일채움공제 때문에 중소기업 인력수급에 큰 도움이 되고,&lt;/span&gt;&lt;/span&gt;&lt;span style=&quot;color: #333333;&quot;&gt;&lt;span style=&quot;color: #333333;&quot;&gt;&lt;/span&gt;&lt;/span&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size18&quot;&gt;재직자에게도 목돈이 생길 수 있는 정책이기 때문입니다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size18&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size18&quot;&gt;그래서 저 또한 이 &lt;span style=&quot;color: #333333;&quot;&gt;청년내일채움공제를 위해 합격이 예정되어 있던 중견기업을 포기하고&lt;/span&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size18&quot;&gt;&lt;span style=&quot;color: #333333;&quot;&gt;중소기업에 들어와서 2년간 실무를 진행했습니다.&lt;/span&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size18&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size18&quot;&gt;그리고 이 2년간의 실무는 저에게 있어서 참 생각을 많이하게 되는 시간이었습니다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size18&quot;&gt;왜냐하면 제가 다니던 중소기업은 프론트엔드 개발자로서 큰 성장을 기대할 수 없는 환경이었고,&lt;/p&gt;
&lt;p data-ke-size=&quot;size18&quot;&gt;모르는게 있어도 누구에게 물어볼 수 없고 제가 찾아서 공부해야하는 환경이었기 때문입니다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size18&quot;&gt;심지어는 잘못 코드를 짜고 있어도 이게 잘못 짠건지도 모르는 상황도 존재했습니다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size18&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size18&quot;&gt;따라서 저는 이 &lt;span style=&quot;color: #333333;&quot;&gt;청년내일채움공제를 좋은 정책이라고 생각을 하지만,&lt;/span&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size18&quot;&gt;&lt;span style=&quot;color: #333333;&quot;&gt;자신이 만약 신입으로 중견기업 이상의 입사를 노릴 수 있는 실력자라면&lt;/span&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size18&quot;&gt;&lt;span style=&quot;color: #333333;&quot;&gt;&lt;span style=&quot;color: #333333;&quot;&gt;청년내일채움공제때문에 중견기업을 포기하고 중소기업에 가지 말라고 하고 싶습니다.&lt;/span&gt;&lt;/span&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size18&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size18&quot;&gt;&lt;span style=&quot;color: #333333;&quot;&gt;&lt;span style=&quot;color: #333333;&quot;&gt;개발자로서 잘못을 알려줄 수 있는 사람의 존재 여부는 꽤나 크고, &lt;/span&gt;&lt;/span&gt;&lt;span style=&quot;color: #333333;&quot;&gt;&lt;span style=&quot;color: #333333;&quot;&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style=&quot;color: #333333;&quot;&gt;&lt;span style=&quot;color: #333333;&quot;&gt;성장의 도움이 되기 때문입니다.&lt;/span&gt;&lt;/span&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size18&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size18&quot;&gt;&lt;span style=&quot;color: #333333;&quot;&gt;&lt;span style=&quot;color: #333333;&quot;&gt;또한 저는 2년짜리 &lt;span style=&quot;color: #333333;&quot;&gt;청년내일채움공제를 추천합니다.&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size18&quot;&gt;&lt;span style=&quot;color: #333333;&quot;&gt;&lt;span style=&quot;color: #333333;&quot;&gt;&lt;span style=&quot;color: #333333;&quot;&gt;3년짜리 &lt;span style=&quot;color: #333333;&quot;&gt;청년내일채움공제&lt;/span&gt;는 너무 길고 성장에 있어서 회사를&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style=&quot;color: #333333;&quot;&gt;&lt;span style=&quot;color: #333333;&quot;&gt;&lt;span style=&quot;color: #333333;&quot;&gt; 깨닫는 시기가 대략 1년차 부터라고 생각하기 때문입니다.&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size18&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size18&quot;&gt;하지만 자신이 중소기업에 입사할 수 밖에 없다면 이 정책을 해 줄수 있는 기업으로 가시길 바랍니다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size18&quot;&gt;&lt;span style=&quot;color: #333333;&quot;&gt;청년내일채움공제는 좋은 정책이며, 장기적으로 근속할 수 있게 도와주는 정책이기 때문입니다.&lt;/span&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size18&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size18&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;hr contenteditable=&quot;false&quot; data-ke-type=&quot;horizontalRule&quot; data-ke-style=&quot;style3&quot; /&gt;
&lt;h2 data-ke-size=&quot;size26&quot;&gt;&lt;b&gt;마무리&lt;/b&gt;&lt;/h2&gt;
&lt;p data-ke-size=&quot;size18&quot;&gt;오늘은 청년내일채움공제 만기금 신청하는 방법에 대해서 알아보았습니다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size18&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size18&quot;&gt;만약 궁금한 점이 있거나 이상한 점이 있으면 댓글 남겨주시면 답변 드리겠습니다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size18&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size18&quot;&gt;감사합니다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size18&quot;&gt;&amp;nbsp;&lt;/p&gt;</description>
      <category>리뷰 및 사용 TIP</category>
      <category>청년내일채움공제</category>
      <author>방현준</author>
      <guid isPermaLink="true">https://noogoonaa.tistory.com/89</guid>
      <comments>https://noogoonaa.tistory.com/89#entry89comment</comments>
      <pubDate>Thu, 5 Nov 2020 15:47:39 +0900</pubDate>
    </item>
    <item>
      <title>자바스크립트의 기본형 데이터 타입</title>
      <link>https://noogoonaa.tistory.com/88</link>
      <description>&lt;hr contenteditable=&quot;false&quot; data-ke-type=&quot;horizontalRule&quot; data-ke-style=&quot;style5&quot; /&gt;
&lt;h2 data-ke-size=&quot;size26&quot;&gt;&lt;span style=&quot;color: #ee2323;&quot;&gt;&lt;i&gt;&lt;b&gt;함께 보면 좋은 글&lt;/b&gt;&lt;/i&gt;&lt;/span&gt;&lt;span style=&quot;color: #ee2323;&quot;&gt;&lt;i&gt;&lt;b&gt;&lt;/b&gt;&lt;/i&gt;&lt;/span&gt;&lt;/h2&gt;
&lt;ul style=&quot;list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li&gt;
&lt;p data-ke-size=&quot;size18&quot;&gt;&lt;a href=&quot;https://noogoonaa.tistory.com/83&quot; target=&quot;_blank&quot; rel=&quot;noopener&quot;&gt;2020/09/02 - [프로그래밍 언어/Javascript] - 자바스크립트의 메모리 관리&lt;/a&gt;&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p data-ke-size=&quot;size18&quot;&gt;&lt;a href=&quot;https://noogoonaa.tistory.com/76&quot; target=&quot;_blank&quot; rel=&quot;noopener&quot;&gt;2020/07/05 - [프로그래밍 언어/Javascript] - 자바스크립트 호이스팅(Hoisting)이란?&lt;/a&gt;&lt;/p&gt;
&lt;/li&gt;
&lt;/ul&gt;
&lt;hr contenteditable=&quot;false&quot; data-ke-type=&quot;horizontalRule&quot; data-ke-style=&quot;style5&quot; /&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock widthContent&quot; data-filename=&quot;자바스크립트.png&quot; data-origin-width=&quot;700&quot; data-origin-height=&quot;525&quot; data-ke-mobilestyle=&quot;widthContent&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/CYyWi/btqJ6cqciMQ/Kfj7gGqJKUKcLVCegkkZo1/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/CYyWi/btqJ6cqciMQ/Kfj7gGqJKUKcLVCegkkZo1/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/CYyWi/btqJ6cqciMQ/Kfj7gGqJKUKcLVCegkkZo1/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FCYyWi%2FbtqJ6cqciMQ%2FKfj7gGqJKUKcLVCegkkZo1%2Fimg.png&quot; data-filename=&quot;자바스크립트.png&quot; data-origin-width=&quot;700&quot; data-origin-height=&quot;525&quot; data-ke-mobilestyle=&quot;widthContent&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;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;/p&gt;
&lt;hr contenteditable=&quot;false&quot; data-ke-type=&quot;horizontalRule&quot; data-ke-style=&quot;style3&quot; /&gt;
&lt;p data-ke-size=&quot;size18&quot;&gt;여러분들은 자바스크립트에 타입이 존재한다는 것을 아시고 계신가요?&lt;/p&gt;
&lt;p data-ke-size=&quot;size18&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size18&quot;&gt;사실 C나 자바 같은 언어들과는 다르게 자바스크립트는 타입을 사용자가 선언하지 않습니다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size18&quot;&gt;하지만 그럼에도 불구하고 변수에 데이터는 정상적으로 들어가고, 에러 또한 발생하지 않습니다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size18&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size18&quot;&gt;이상합니다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size18&quot;&gt;분명 &lt;span style=&quot;color: #333333;&quot;&gt;C나 자바같은 언어에선 이런 것에 대해서 에러를 발생시키는데&lt;/span&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size18&quot;&gt;&lt;span style=&quot;color: #333333;&quot;&gt;자바스크립트는 그러지 않습니다.&lt;/span&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size18&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size18&quot;&gt;그렇습니다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size18&quot;&gt;오늘은 자바스크립트가 데이터 타입을 지정하는 방법에 대해서 알아보도록 하겠습니다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;color: #ee2323;&quot;&gt;&lt;i&gt;(&lt;span style=&quot;color: #006dd7;&quot;&gt;&lt;a style=&quot;color: #006dd7;&quot; href=&quot;https://noogoonaa.tistory.com/83&quot; target=&quot;_blank&quot; rel=&quot;noopener&quot;&gt;자바스크립트의 메모리 관리&lt;/a&gt;&lt;/span&gt; 포스트를 읽지 않으셨다면 읽고 해당 포스트를 보는 것을 추천드립니다)&lt;/i&gt;&lt;/span&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size18&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-filename=&quot;jdkwvolq7oaul6nemgxt.jpg&quot; data-origin-width=&quot;1080&quot; data-origin-height=&quot;1080&quot; data-ke-mobilestyle=&quot;widthContent&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/chVxMr/btqJ6dJs4As/g297kBGW9sTh5qEQCj3KMK/img.jpg&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/chVxMr/btqJ6dJs4As/g297kBGW9sTh5qEQCj3KMK/img.jpg&quot; data-alt=&quot;출처 :&amp;amp;amp;nbsp;https://dev.to/damxipo/javascript-versus-memes-explaining-various-funny-memes-2o8c&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/chVxMr/btqJ6dJs4As/g297kBGW9sTh5qEQCj3KMK/img.jpg&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FchVxMr%2FbtqJ6dJs4As%2Fg297kBGW9sTh5qEQCj3KMK%2Fimg.jpg&quot; data-filename=&quot;jdkwvolq7oaul6nemgxt.jpg&quot; data-origin-width=&quot;1080&quot; data-origin-height=&quot;1080&quot; data-ke-mobilestyle=&quot;widthContent&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;/&gt;&lt;/span&gt;&lt;figcaption&gt;출처 :&amp;nbsp;https://dev.to/damxipo/javascript-versus-memes-explaining-various-funny-memes-2o8c&lt;/figcaption&gt;
&lt;/figure&gt;
&lt;/p&gt;
&lt;hr contenteditable=&quot;false&quot; data-ke-type=&quot;horizontalRule&quot; data-ke-style=&quot;style1&quot; /&gt;
&lt;h2 data-ke-size=&quot;size26&quot;&gt;&lt;b&gt;데이터 타입의 종류&lt;/b&gt;&lt;/h2&gt;
&lt;p data-ke-size=&quot;size18&quot;&gt;자바스크립트를 이제 막 입문한 사람들은 잘 모를 수도 있지만,&lt;/p&gt;
&lt;p data-ke-size=&quot;size18&quot;&gt;자바스크립트엔 여러 종류에 데이터 타입들이 존재합니다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size18&quot;&gt;문자열(string), 숫자(number), null, 객체(object) 등 다양한 데이터 타입이 존재하죠.&lt;/p&gt;
&lt;p data-ke-size=&quot;size18&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size18&quot;&gt;사실 말만 들어선 이해가 안 가실 것 이기 때문에 그림을 한번 보도록 하겠습니다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size18&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-filename=&quot;blob&quot; data-origin-width=&quot;1460&quot; data-origin-height=&quot;1386&quot; data-ke-mobilestyle=&quot;widthContent&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/bVZsqh/btqJ6dbBA2W/Qp5KVE4GAQFzUm0Oyr52o1/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/bVZsqh/btqJ6dbBA2W/Qp5KVE4GAQFzUm0Oyr52o1/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/bVZsqh/btqJ6dbBA2W/Qp5KVE4GAQFzUm0Oyr52o1/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FbVZsqh%2FbtqJ6dbBA2W%2FQp5KVE4GAQFzUm0Oyr52o1%2Fimg.png&quot; data-filename=&quot;blob&quot; data-origin-width=&quot;1460&quot; data-origin-height=&quot;1386&quot; data-ke-mobilestyle=&quot;widthContent&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;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;/p&gt;
&lt;p data-ke-size=&quot;size18&quot;&gt;이게 현재까지 존재하는 데이터 타입입니다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size18&quot;&gt;어느 정도 자바스크립트를 사용하시는 분들은 익숙한 타입들이 보이실 겁니다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size18&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size18&quot;&gt;&lt;span style=&quot;color: #333333;&quot;&gt;이 포스팅에서 각 타입에 대해서 다루게 되면 포스팅이 길어지므로 타입 설명은 제쳐두고&lt;/span&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size18&quot;&gt;우리가 집중적으로 봐야 할 타입은 기본형과 참조형 데이터 타입입니다.&lt;/p&gt;
&lt;hr contenteditable=&quot;false&quot; data-ke-type=&quot;horizontalRule&quot; data-ke-style=&quot;style1&quot; /&gt;
&lt;h2 data-ke-size=&quot;size26&quot;&gt;&lt;b&gt;기본형 데이터 타입&lt;/b&gt;&lt;/h2&gt;
&lt;p data-ke-size=&quot;size18&quot;&gt;먼저 우리는 기본형 데이터 타입에 대해서 알아보도록 하겠습니다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size18&quot;&gt;이 기본형 데이터 타입은 숫자(Number), 문자열(String), 불리언(Boolean) 등의 데이터 타입을 가지고 있는데,&lt;/p&gt;
&lt;p data-ke-size=&quot;size18&quot;&gt;왜 이 숫자나 문자열 등의 타입들(원시 값이라고도 함)을 기본형 타입이라고 할까요?&lt;/p&gt;
&lt;p data-ke-size=&quot;size18&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size18&quot;&gt;결론적으로 말하자면 기본형 데이터 타입은&lt;/p&gt;
&lt;p data-ke-size=&quot;size18&quot;&gt;할당이나 복제를 통해 데이터를 사용하고 불변 값을 가지는 타입입니다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size18&quot;&gt;숫자나 문자열, 불리언, null 등이 그러하고요&lt;/p&gt;
&lt;p data-ke-size=&quot;size18&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size18&quot;&gt;전혀 이해가 안 됩니다...&lt;/p&gt;
&lt;p data-ke-size=&quot;size18&quot;&gt;머리가 쥐가 날 것 같습니다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size18&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size18&quot;&gt;하지만 그림으로 이해를 하면 아마 이해하기 쉽기 때문에&lt;/p&gt;
&lt;p data-ke-size=&quot;size18&quot;&gt;최대한 쉽게 자바스크립트가 기본형 데이터 타입을 다루는 방식에 대해서&lt;/p&gt;
&lt;p data-ke-size=&quot;size18&quot;&gt;그림으로 한번 보도록 하겠습니다.&lt;/p&gt;
&lt;hr contenteditable=&quot;false&quot; data-ke-type=&quot;horizontalRule&quot; data-ke-style=&quot;style1&quot; /&gt;
&lt;h2 data-ke-size=&quot;size26&quot;&gt;&lt;b&gt;자바스크립트가 데이터를 할당하는 방법 with 그림&lt;/b&gt;&lt;/h2&gt;
&lt;p data-ke-size=&quot;size18&quot;&gt;자바스크립트가 관리하는 메모리에는&lt;/p&gt;
&lt;p data-ke-size=&quot;size18&quot;&gt;아래 그림과 같이 변수 영역 메모리와 데이터 영역 메모리가 존재합니다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size18&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-filename=&quot;슬라이드1.PNG&quot; data-origin-width=&quot;1280&quot; data-origin-height=&quot;720&quot; data-ke-mobilestyle=&quot;widthContent&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/qVNhH/btqKdE69i2p/ze5TRoiBUc1SHlKoJPJO61/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/qVNhH/btqKdE69i2p/ze5TRoiBUc1SHlKoJPJO61/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/qVNhH/btqKdE69i2p/ze5TRoiBUc1SHlKoJPJO61/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FqVNhH%2FbtqKdE69i2p%2Fze5TRoiBUc1SHlKoJPJO61%2Fimg.png&quot; data-filename=&quot;슬라이드1.PNG&quot; data-origin-width=&quot;1280&quot; data-origin-height=&quot;720&quot; data-ke-mobilestyle=&quot;widthContent&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;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;/p&gt;
&lt;p data-ke-size=&quot;size18&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size18&quot;&gt;그리고 우리는 자바스크립트에서 temp라는 변수를 생성하여&lt;/p&gt;
&lt;p data-ke-size=&quot;size18&quot;&gt;&quot;변수값&quot;이라는 문자열을 저장해 봅시다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size18&quot;&gt;아래처럼 말이죠&lt;/p&gt;
&lt;pre id=&quot;code_1601907913384&quot; class=&quot;javascript&quot; data-ke-language=&quot;javascript&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;let temp = &quot;변수값&quot;&lt;/code&gt;&lt;/pre&gt;
&lt;p data-ke-size=&quot;size18&quot;&gt;그럼 자바스크립트는 아래와 같이 데이터를 저장하게 됩니다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size18&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-filename=&quot;슬라이드2.PNG&quot; data-origin-width=&quot;1280&quot; data-origin-height=&quot;720&quot; data-ke-mobilestyle=&quot;widthContent&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/uPV2v/btqKfrfnIUc/FvPE0aPu0MuGuSBk6ILMKk/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/uPV2v/btqKfrfnIUc/FvPE0aPu0MuGuSBk6ILMKk/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/uPV2v/btqKfrfnIUc/FvPE0aPu0MuGuSBk6ILMKk/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FuPV2v%2FbtqKfrfnIUc%2FFvPE0aPu0MuGuSBk6ILMKk%2Fimg.png&quot; data-filename=&quot;슬라이드2.PNG&quot; data-origin-width=&quot;1280&quot; data-origin-height=&quot;720&quot; data-ke-mobilestyle=&quot;widthContent&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;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;/p&gt;
&lt;p data-ke-size=&quot;size18&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size18&quot;&gt;그리고 아래처럼 temp라는 변수를 사용해 봅시다.&lt;/p&gt;
&lt;pre id=&quot;code_1601908454968&quot; class=&quot;javascript&quot; data-ke-language=&quot;javascript&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;let temp = &quot;변수값&quot;

console.log(temp);&lt;/code&gt;&lt;/pre&gt;
&lt;p data-ke-size=&quot;size18&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size18&quot;&gt;그럼 자바스크립트는 temp라는 이름을 가진 변수 영역 메모리를 찾습니다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size18&quot;&gt;아래 사진과 같이 말이죠&lt;/p&gt;
&lt;p data-ke-size=&quot;size18&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-filename=&quot;슬라이드3.PNG&quot; data-origin-width=&quot;1280&quot; data-origin-height=&quot;720&quot; data-ke-mobilestyle=&quot;widthContent&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/d6Na5W/btqKiacVhu7/mc6SxLhQkXOKF3SYLnflD1/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/d6Na5W/btqKiacVhu7/mc6SxLhQkXOKF3SYLnflD1/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/d6Na5W/btqKiacVhu7/mc6SxLhQkXOKF3SYLnflD1/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2Fd6Na5W%2FbtqKiacVhu7%2Fmc6SxLhQkXOKF3SYLnflD1%2Fimg.png&quot; data-filename=&quot;슬라이드3.PNG&quot; data-origin-width=&quot;1280&quot; data-origin-height=&quot;720&quot; data-ke-mobilestyle=&quot;widthContent&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;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;/p&gt;
&lt;p data-ke-size=&quot;size18&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size18&quot;&gt;그리고 값이 데이터 영역 메모리의 103번 영역이라는 것을 확인하고,&lt;/p&gt;
&lt;p data-ke-size=&quot;size18&quot;&gt;103 주소에 저장되어 있는 값을 가져옵니다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size18&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-filename=&quot;슬라이드4.PNG&quot; data-origin-width=&quot;1280&quot; data-origin-height=&quot;720&quot; data-ke-mobilestyle=&quot;widthContent&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/nBa0g/btqKjbWV0rA/e115gHADn7Cu6gjrFadHD0/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/nBa0g/btqKjbWV0rA/e115gHADn7Cu6gjrFadHD0/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/nBa0g/btqKjbWV0rA/e115gHADn7Cu6gjrFadHD0/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FnBa0g%2FbtqKjbWV0rA%2Fe115gHADn7Cu6gjrFadHD0%2Fimg.png&quot; data-filename=&quot;슬라이드4.PNG&quot; data-origin-width=&quot;1280&quot; data-origin-height=&quot;720&quot; data-ke-mobilestyle=&quot;widthContent&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;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;/p&gt;
&lt;p data-ke-size=&quot;size18&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size18&quot;&gt;이렇듯 데이터 영역에 직접 데이터를 할당하여 데이터를 가져오는 방식을 데이터 할당이라고 합니다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size18&quot;&gt;어때요? 이해하기 쉽죠?&lt;/p&gt;
&lt;p data-ke-size=&quot;size18&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size18&quot;&gt;그런데 좀 이상합니다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size18&quot;&gt;그렇다면 왜 자바스크립트는 temp영역 메모리에 직접 데이터를 저장하지 않고&lt;/p&gt;
&lt;p data-ke-size=&quot;size18&quot;&gt;한 번을 거쳐서 데이터를 가져오는 것일까요?&lt;/p&gt;
&lt;p data-ke-size=&quot;size18&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size18&quot;&gt;그건 똑같은 값을 가지는 메모리의 중복을 없애기 위해서입니다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size18&quot;&gt;사실 데이터 영역 메모리 한 칸에 &quot;변수값&quot; 이라는 데이터를 넣어놨지만,&lt;/p&gt;
&lt;p data-ke-size=&quot;size18&quot;&gt;저 &quot;변수값&quot; 이 저장되어 있는 영역은 6바이트에 메모리 영역을 잡고 있습니다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size18&quot;&gt;(한글 한 글자가 2바이트 이므로)&lt;/p&gt;
&lt;p data-ke-size=&quot;size18&quot;&gt;그렇기 때문에 한 단계를 거쳐서 데이터를 저장하는 것입니다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size18&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size18&quot;&gt;그리고 이러한 방식이 빛을 발할 때는 같은 데이터를 중복적으로 저장할 때인데,&lt;/p&gt;
&lt;p data-ke-size=&quot;size18&quot;&gt;가장 간단한 예시로 데이터 복제를 예로 들 수 있습니다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size18&quot;&gt;먼저 자바스크립트가 데이터를 어떻게 복제하는지 알아볼까요?&lt;/p&gt;
&lt;hr contenteditable=&quot;false&quot; data-ke-type=&quot;horizontalRule&quot; data-ke-style=&quot;style1&quot; /&gt;
&lt;h2 data-ke-size=&quot;size26&quot;&gt;&lt;b&gt;&lt;span style=&quot;color: #333333;&quot;&gt;자바스크립트가 데이터를 복제하는 방법 with 그림&lt;/span&gt;&lt;/b&gt;&lt;/h2&gt;
&lt;p data-ke-size=&quot;size18&quot;&gt;자 바로 설명 들어가겠습니다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size18&quot;&gt;일단 아래 코드처럼 temp2라는 변수에 temp를 넣어줍니다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size18&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;pre id=&quot;code_1601909284424&quot; class=&quot;javascript&quot; data-ke-language=&quot;javascript&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;let temp = &quot;변수값&quot;
let temp2 = temp;&lt;/code&gt;&lt;/pre&gt;
&lt;p data-ke-size=&quot;size18&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size18&quot;&gt;그럼 아래 그림들처럼 값 복제가 이루어지게 됩니다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size18&quot;&gt;&lt;span style=&quot;color: #333333;&quot;&gt;먼저 변수 영역 메모리에 temp2를 만들어 줍니다.&lt;/span&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size18&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-filename=&quot;슬라이드5.PNG&quot; data-origin-width=&quot;1280&quot; data-origin-height=&quot;720&quot; data-ke-mobilestyle=&quot;widthContent&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/SJkVy/btqKibJDg3d/VmMi9ajhCyIYTjVDMQasxK/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/SJkVy/btqKibJDg3d/VmMi9ajhCyIYTjVDMQasxK/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/SJkVy/btqKibJDg3d/VmMi9ajhCyIYTjVDMQasxK/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FSJkVy%2FbtqKibJDg3d%2FVmMi9ajhCyIYTjVDMQasxK%2Fimg.png&quot; data-filename=&quot;슬라이드5.PNG&quot; data-origin-width=&quot;1280&quot; data-origin-height=&quot;720&quot; data-ke-mobilestyle=&quot;widthContent&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;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;/p&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;그 후 temp에 값을 가져오기 위해 203 메모리 영역으로 이동합니다.&lt;/p&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-filename=&quot;슬라이드6.PNG&quot; data-origin-width=&quot;1280&quot; data-origin-height=&quot;720&quot; data-ke-mobilestyle=&quot;widthContent&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/mLXl9/btqJ8fG4AuO/8zei9ZmjBuao801SkKvJw1/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/mLXl9/btqJ8fG4AuO/8zei9ZmjBuao801SkKvJw1/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/mLXl9/btqJ8fG4AuO/8zei9ZmjBuao801SkKvJw1/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FmLXl9%2FbtqJ8fG4AuO%2F8zei9ZmjBuao801SkKvJw1%2Fimg.png&quot; data-filename=&quot;슬라이드6.PNG&quot; data-origin-width=&quot;1280&quot; data-origin-height=&quot;720&quot; data-ke-mobilestyle=&quot;widthContent&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;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;/p&gt;
&lt;p&gt;그리고 203의 값을 가져옵니다.&lt;/p&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-filename=&quot;슬라이드7.PNG&quot; data-origin-width=&quot;1280&quot; data-origin-height=&quot;720&quot; data-ke-mobilestyle=&quot;widthContent&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/cyLjCx/btqKdE69kYx/tmHc7pTWscDrGWXZfDirQK/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/cyLjCx/btqKdE69kYx/tmHc7pTWscDrGWXZfDirQK/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/cyLjCx/btqKdE69kYx/tmHc7pTWscDrGWXZfDirQK/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FcyLjCx%2FbtqKdE69kYx%2FtmHc7pTWscDrGWXZfDirQK%2Fimg.png&quot; data-filename=&quot;슬라이드7.PNG&quot; data-origin-width=&quot;1280&quot; data-origin-height=&quot;720&quot; data-ke-mobilestyle=&quot;widthContent&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;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;figure class=&quot;imageblock alignCenter&quot; data-filename=&quot;슬라이드8.PNG&quot; data-origin-width=&quot;1280&quot; data-origin-height=&quot;720&quot; data-ke-mobilestyle=&quot;widthContent&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/Al8Kf/btqKgEesMCH/WA3EwaJLdbLsghOgyOzu8k/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/Al8Kf/btqKgEesMCH/WA3EwaJLdbLsghOgyOzu8k/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/Al8Kf/btqKgEesMCH/WA3EwaJLdbLsghOgyOzu8k/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FAl8Kf%2FbtqKgEesMCH%2FWA3EwaJLdbLsghOgyOzu8k%2Fimg.png&quot; data-filename=&quot;슬라이드8.PNG&quot; data-origin-width=&quot;1280&quot; data-origin-height=&quot;720&quot; data-ke-mobilestyle=&quot;widthContent&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;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;figure class=&quot;imageblock alignCenter&quot; data-filename=&quot;슬라이드9.PNG&quot; data-origin-width=&quot;1280&quot; data-origin-height=&quot;720&quot; data-ke-mobilestyle=&quot;widthContent&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/k286e/btqKfrNeEZY/sBP5EJ6lTRLvy2SiuKUHw1/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/k286e/btqKfrNeEZY/sBP5EJ6lTRLvy2SiuKUHw1/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/k286e/btqKfrNeEZY/sBP5EJ6lTRLvy2SiuKUHw1/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2Fk286e%2FbtqKfrNeEZY%2FsBP5EJ6lTRLvy2SiuKUHw1%2Fimg.png&quot; data-filename=&quot;슬라이드9.PNG&quot; data-origin-width=&quot;1280&quot; data-origin-height=&quot;720&quot; data-ke-mobilestyle=&quot;widthContent&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;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;/p&gt;
&lt;p data-ke-size=&quot;size18&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size18&quot;&gt;요렇게 말이죠&lt;/p&gt;
&lt;p data-ke-size=&quot;size18&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size18&quot;&gt;어때요? 복제는 참 쉽죠?&lt;/p&gt;
&lt;p data-ke-size=&quot;size18&quot;&gt;자바스크립트는 그냥 temp의 메모리 영역인 203 영역에 접근하여 값을 들고 와&lt;/p&gt;
&lt;p data-ke-size=&quot;size18&quot;&gt;temp2에 데이터 영역인 214에 넣어줍니다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size18&quot;&gt;그렇게 되면 메모리 영역 위치 값만 저장하면 되니까 메모리 소모가 크지 않게 되고&lt;/p&gt;
&lt;p data-ke-size=&quot;size18&quot;&gt;temp2가 6바이트에 메모리 소모 없이 &quot;변수값&quot;이라는 값을 가질 수 있게 됩니다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size18&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size18&quot;&gt;그럼 여기서 또 하나의 의구심이 들 것입니다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size18&quot;&gt;만약 temp에 데이터를 변경하면 temp2도 변경될 것 같은데??&lt;/p&gt;
&lt;p data-ke-size=&quot;size18&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size18&quot;&gt;좋은 의구심입니다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size18&quot;&gt;하지만 이러한 방식을 해결하기 위해 자바스크립트는&lt;/p&gt;
&lt;p data-ke-size=&quot;size18&quot;&gt;데이터가 변경됐을 때의 방법도 존재합니다.&lt;/p&gt;
&lt;hr contenteditable=&quot;false&quot; data-ke-type=&quot;horizontalRule&quot; data-ke-style=&quot;style1&quot; /&gt;
&lt;p data-ke-size=&quot;size18&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;h2 data-ke-size=&quot;size26&quot;&gt;&lt;b&gt;&lt;span style=&quot;color: #333333;&quot;&gt;자바스크립트가 데이터를 변경하는 방법 with 그림&lt;/span&gt;&lt;/b&gt;&lt;/h2&gt;
&lt;p data-ke-size=&quot;size18&quot;&gt;&lt;span style=&quot;color: #333333;&quot;&gt;자 우리는 아래 코드와 같이 temp에 데이터를 변경했다고 가정해 봅시다.&lt;/span&gt;&lt;span style=&quot;color: #333333;&quot;&gt;&lt;/span&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size18&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;pre id=&quot;code_1601911592033&quot; class=&quot;javascript&quot; data-ke-language=&quot;javascript&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;let temp = &quot;변수값&quot;
let temp2 = temp;

temp = &quot;템프값&quot;&lt;/code&gt;&lt;/pre&gt;
&lt;p data-ke-size=&quot;size18&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size18&quot;&gt;그럼 자바스크립트는 temp의 값이 변경되었다는 것을 알고&lt;/p&gt;
&lt;p data-ke-size=&quot;size18&quot;&gt;아래 그림과 같이 데이터 영역 메모리를 새로 잡아줍니다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size18&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-filename=&quot;슬라이드11.PNG&quot; data-origin-width=&quot;1280&quot; data-origin-height=&quot;720&quot; data-ke-mobilestyle=&quot;widthContent&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/lw6hc/btqKhj2iaOj/oXt1WkD2ihIKdKvBBo4yP1/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/lw6hc/btqKhj2iaOj/oXt1WkD2ihIKdKvBBo4yP1/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/lw6hc/btqKhj2iaOj/oXt1WkD2ihIKdKvBBo4yP1/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2Flw6hc%2FbtqKhj2iaOj%2FoXt1WkD2ihIKdKvBBo4yP1%2Fimg.png&quot; data-filename=&quot;슬라이드11.PNG&quot; data-origin-width=&quot;1280&quot; data-origin-height=&quot;720&quot; data-ke-mobilestyle=&quot;widthContent&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;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;figure class=&quot;imageblock alignCenter&quot; data-filename=&quot;슬라이드12.PNG&quot; data-origin-width=&quot;1280&quot; data-origin-height=&quot;720&quot; data-ke-mobilestyle=&quot;widthContent&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/bHiKfG/btqKicaHJrb/rAjoHyG2534Cfyb1N5lh41/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/bHiKfG/btqKicaHJrb/rAjoHyG2534Cfyb1N5lh41/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/bHiKfG/btqKicaHJrb/rAjoHyG2534Cfyb1N5lh41/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FbHiKfG%2FbtqKicaHJrb%2FrAjoHyG2534Cfyb1N5lh41%2Fimg.png&quot; data-filename=&quot;슬라이드12.PNG&quot; data-origin-width=&quot;1280&quot; data-origin-height=&quot;720&quot; data-ke-mobilestyle=&quot;widthContent&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;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;/p&gt;
&lt;p data-ke-size=&quot;size18&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size18&quot;&gt;&lt;span style=&quot;color: #333333;&quot;&gt;그리고 temp에 저장되어 있는 주소 값을 새로운 주소 값으로 변경해 줍니다.&lt;/span&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size18&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-filename=&quot;슬라이드13.PNG&quot; data-origin-width=&quot;1280&quot; data-origin-height=&quot;720&quot; data-ke-mobilestyle=&quot;widthContent&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/MP79a/btqJ6cqhAyD/v3pba7lHp3ER5VQQOBbutk/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/MP79a/btqJ6cqhAyD/v3pba7lHp3ER5VQQOBbutk/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/MP79a/btqJ6cqhAyD/v3pba7lHp3ER5VQQOBbutk/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FMP79a%2FbtqJ6cqhAyD%2Fv3pba7lHp3ER5VQQOBbutk%2Fimg.png&quot; data-filename=&quot;슬라이드13.PNG&quot; data-origin-width=&quot;1280&quot; data-origin-height=&quot;720&quot; data-ke-mobilestyle=&quot;widthContent&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;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;/p&gt;
&lt;p data-ke-size=&quot;size18&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size18&quot;&gt;자 이렇게 해서 temp와 temp2 가 가지는 값이 달라지게 됩니다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size18&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-filename=&quot;슬라이드14.PNG&quot; data-origin-width=&quot;1280&quot; data-origin-height=&quot;720&quot; data-ke-mobilestyle=&quot;widthContent&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/AtHa4/btqKfp9JEfR/6S7rkdM19fuKe28UdIUqK0/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/AtHa4/btqKfp9JEfR/6S7rkdM19fuKe28UdIUqK0/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/AtHa4/btqKfp9JEfR/6S7rkdM19fuKe28UdIUqK0/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FAtHa4%2FbtqKfp9JEfR%2F6S7rkdM19fuKe28UdIUqK0%2Fimg.png&quot; data-filename=&quot;슬라이드14.PNG&quot; data-origin-width=&quot;1280&quot; data-origin-height=&quot;720&quot; data-ke-mobilestyle=&quot;widthContent&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;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;/p&gt;
&lt;p data-ke-size=&quot;size18&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size18&quot;&gt;자 이렇게 기본형 데이터가 변경되었을 때,&lt;/p&gt;
&lt;p data-ke-size=&quot;size18&quot;&gt;자바스크립트는 해당 데이터 자체를 변경하지 않고&lt;/p&gt;
&lt;p data-ke-size=&quot;size18&quot;&gt;새로운 데이터 영역을 만들어서&lt;/p&gt;
&lt;p data-ke-size=&quot;size18&quot;&gt;변경된 데이터를 저장합니다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size18&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size18&quot;&gt;이렇게 해서 temp2의 데이터까지 자동으로 변경하지 않고&lt;/p&gt;
&lt;p data-ke-size=&quot;size18&quot;&gt;&amp;nbsp;temp2의 값을 유지할 수 있게 되었습니다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size18&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size18&quot;&gt;자 여기서 저는 뭔가 궁금합니다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size18&quot;&gt;과연 기본형 데이터는 한번 만들면 변경할 수 없을까?&lt;/p&gt;
&lt;p data-ke-size=&quot;size18&quot;&gt;라고요...&lt;/p&gt;
&lt;p data-ke-size=&quot;size18&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size18&quot;&gt;결과를 말하자면&lt;/p&gt;
&lt;p data-ke-size=&quot;size18&quot;&gt;네!!! 변경할 수 없습니다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size18&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size18&quot;&gt;기본형 데이터는 한번 만들면 변경할 수 없고,&lt;/p&gt;
&lt;p data-ke-size=&quot;size18&quot;&gt;가비지 콜렉터가 수거해가지 않는 이상 사라지지도 않습니다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size18&quot;&gt;이것을 자바스크립트에선 불변 값이라고 하며&lt;/p&gt;
&lt;p data-ke-size=&quot;size18&quot;&gt;기본형 데이터 타입이 가지는 성질입니다.&lt;/p&gt;
&lt;hr contenteditable=&quot;false&quot; data-ke-type=&quot;horizontalRule&quot; data-ke-style=&quot;style1&quot; /&gt;
&lt;h2 data-ke-size=&quot;size26&quot;&gt;&lt;b&gt;불변 값과 상수의 차이&lt;/b&gt;&lt;/h2&gt;
&lt;p data-ke-size=&quot;size18&quot;&gt;자 여기까지 온 사람들이라면 들 수 있는 또 한 가지 의구심&lt;/p&gt;
&lt;p data-ke-size=&quot;size18&quot;&gt;그럼 불변 값이 상수가 아닌가??&lt;/p&gt;
&lt;p data-ke-size=&quot;size18&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size18&quot;&gt;이것도 결론부터 말하면&lt;/p&gt;
&lt;p data-ke-size=&quot;size18&quot;&gt;네!!! 아닙니다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size18&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size18&quot;&gt;상수는 변수 영역의 메모리 값이 변경되지 않는 것이고&lt;/p&gt;
&lt;p data-ke-size=&quot;size18&quot;&gt;불변 값은 데이터 영역의 메모리 값이 변경되지 않는 것입니다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size18&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-filename=&quot;슬라이드15.PNG&quot; data-origin-width=&quot;1280&quot; data-origin-height=&quot;720&quot; data-ke-mobilestyle=&quot;widthContent&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/b7xZ27/btqKjdmUizr/KG5ZH7h2RmtsB3gkhgNeEK/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/b7xZ27/btqKjdmUizr/KG5ZH7h2RmtsB3gkhgNeEK/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/b7xZ27/btqKjdmUizr/KG5ZH7h2RmtsB3gkhgNeEK/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2Fb7xZ27%2FbtqKjdmUizr%2FKG5ZH7h2RmtsB3gkhgNeEK%2Fimg.png&quot; data-filename=&quot;슬라이드15.PNG&quot; data-origin-width=&quot;1280&quot; data-origin-height=&quot;720&quot; data-ke-mobilestyle=&quot;widthContent&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;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;/p&gt;
&lt;p data-ke-size=&quot;size18&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size18&quot;&gt;그러니 const 키워드로 만들어진 변수에 들어가 있는 데이터를&lt;/p&gt;
&lt;p data-ke-size=&quot;size18&quot;&gt;기본형 데이터 타입이라고 생각하지 않으셨으면 좋겠습니다.&lt;/p&gt;
&lt;hr contenteditable=&quot;false&quot; data-ke-type=&quot;horizontalRule&quot; data-ke-style=&quot;style1&quot; /&gt;
&lt;h2 data-ke-size=&quot;size26&quot;&gt;&lt;b&gt;기본형 데이터 타입 정리&lt;/b&gt;&lt;/h2&gt;
&lt;p data-ke-size=&quot;size18&quot;&gt;자, 정리해 봅시다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size18&quot;&gt;아까 제가 뭐라고 했죠?&lt;/p&gt;
&lt;p data-ke-size=&quot;size18&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size18&quot;&gt;기본형 데이터 타입은 할당이나 복제를 통해 데이터를 사용하고 불변 값을 가지는 타입입니다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size18&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size18&quot;&gt;라고 했죠?&lt;/p&gt;
&lt;p data-ke-size=&quot;size18&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size18&quot;&gt;즉, 기본형 데이터 타입은 데이터 영역 메모리에 직접 데이터를 생성하고, 사용하는 타입이며&lt;/p&gt;
&lt;p data-ke-size=&quot;size18&quot;&gt;불변 값을 가지는 타입으로 값이 변경되면 데이터 영역 메모리에 새로운 값을 생성하여 접근하는 타입입니다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size18&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size18&quot;&gt;또한 상수와 불변 값은 성질 자체가 다르며&lt;/p&gt;
&lt;p data-ke-size=&quot;size18&quot;&gt;상수는 변수 영역의 메모리 값 변경 여부를 따르며&lt;/p&gt;
&lt;p data-ke-size=&quot;size18&quot;&gt;불변 값은 데이터 영역 메모리 값 변경 여부에 따릅니다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size18&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size18&quot;&gt;이것으로 우리는 기본형 데이터 타입에 대해 설명할 수 있게 되었습니다.&lt;/p&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-filename=&quot;20160820_57b81f88a0b3b.jpg&quot; data-origin-width=&quot;466&quot; data-origin-height=&quot;292&quot; data-ke-mobilestyle=&quot;widthContent&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/doZbEb/btqKbWz9KYQ/2FRkvVcCTiCVle1OXbKJPk/img.jpg&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/doZbEb/btqKbWz9KYQ/2FRkvVcCTiCVle1OXbKJPk/img.jpg&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/doZbEb/btqKbWz9KYQ/2FRkvVcCTiCVle1OXbKJPk/img.jpg&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FdoZbEb%2FbtqKbWz9KYQ%2F2FRkvVcCTiCVle1OXbKJPk%2Fimg.jpg&quot; data-filename=&quot;20160820_57b81f88a0b3b.jpg&quot; data-origin-width=&quot;466&quot; data-origin-height=&quot;292&quot; data-ke-mobilestyle=&quot;widthContent&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;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;/p&gt;
&lt;hr contenteditable=&quot;false&quot; data-ke-type=&quot;horizontalRule&quot; data-ke-style=&quot;style3&quot; /&gt;
&lt;h2 data-ke-size=&quot;size26&quot;&gt;&lt;b&gt;마무리&lt;/b&gt;&lt;/h2&gt;
&lt;p data-ke-size=&quot;size18&quot;&gt;자! 오늘은 자바스크립트의 데이터 타입에 종류와 기본형 데이터 타입에 대해서 알아보았습니다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size18&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size18&quot;&gt;쉽게 설명했는지 모르겠습니다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size18&quot;&gt;다음 시간엔 참조형 데이터 타입에 대해서 한번 알아보도록 하겠습니다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size18&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size18&quot;&gt;&lt;span&gt;만약 포스트에 문제가 있거나 틀린 부분, 잘 이해가 안 되는 부분이 있다면 &lt;/span&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size18&quot;&gt;&lt;span&gt;댓글을 남겨주시기 바랍니다.&lt;/span&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size18&quot;&gt;&lt;span&gt;감사합니다.&lt;/span&gt;&lt;/p&gt;</description>
      <category>프로그래밍 언어/웹 프론트엔드</category>
      <category>JavaScript</category>
      <category>기본형 데이터 타입</category>
      <author>방현준</author>
      <guid isPermaLink="true">https://noogoonaa.tistory.com/88</guid>
      <comments>https://noogoonaa.tistory.com/88#entry88comment</comments>
      <pubDate>Tue, 6 Oct 2020 01:06:43 +0900</pubDate>
    </item>
    <item>
      <title>[javascript / 알고리즘] 소수 판별 알고리즘</title>
      <link>https://noogoonaa.tistory.com/87</link>
      <description>&lt;p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-filename=&quot;다운로드.png&quot; data-origin-width=&quot;700&quot; data-origin-height=&quot;525&quot; data-ke-mobilestyle=&quot;widthContent&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/71Lr0/btqKdFECB7i/RSL5NZ0DHd2NELakumrjkK/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/71Lr0/btqKdFECB7i/RSL5NZ0DHd2NELakumrjkK/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/71Lr0/btqKdFECB7i/RSL5NZ0DHd2NELakumrjkK/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2F71Lr0%2FbtqKdFECB7i%2FRSL5NZ0DHd2NELakumrjkK%2Fimg.png&quot; data-filename=&quot;다운로드.png&quot; data-origin-width=&quot;700&quot; data-origin-height=&quot;525&quot; data-ke-mobilestyle=&quot;widthContent&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;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;/p&gt;
&lt;hr contenteditable=&quot;false&quot; data-ke-type=&quot;horizontalRule&quot; data-ke-style=&quot;style5&quot; /&gt;
&lt;blockquote data-ke-style=&quot;style2&quot;&gt;&lt;span style=&quot;color: #666666;&quot;&gt;해당 포스팅은 제가 사용하려고 만든 포스팅이므로 자세한 설명은 생략합니다. 만약 이해가 안될 시 댓글을 남겨주시면 답변드리겠습니다.&lt;/span&gt;&lt;/blockquote&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;
&lt;hr contenteditable=&quot;false&quot; data-ke-type=&quot;horizontalRule&quot; data-ke-style=&quot;style3&quot; /&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;소수란, 1과 자기자신을 제외한 다른 수로 나눠지지 않는 수 입니다.&lt;/p&gt;
&lt;p&gt;그 예로 11, 71 등이 있습니다.&lt;/p&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;이 소수를 판별하는 알고리즘을 만들어 보겠습니다.&lt;/p&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;
&lt;hr contenteditable=&quot;false&quot; data-ke-type=&quot;horizontalRule&quot; data-ke-style=&quot;style1&quot; /&gt;
&lt;p&gt;실행함수&lt;/p&gt;
&lt;pre id=&quot;code_1601886859200&quot; class=&quot;javascript&quot; data-ke-language=&quot;javascript&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;// 소수 판별기
function isPrime(n) {
	// 1이하일 경우엔 소수가 아닙니다.
	if (n &amp;lt;= 1) return false;

	// 2와 3일 경우엔 소수 입니다.
	if (n === 2 || n === 3) return true;

	// 2로 나눴을 때 나머지가 0일 경우엔 소수가 아닙니다.
	// 이 말인 즉슨 짝수는 다 소수가 아닙니다.
	if (n % 2 === 0) return false;

	// 최대 n - 1까지 돌려줍니다.
	let divisor = 3;
	while (n &amp;gt; divisor) {
		// 무엇이라도 0으로 떨어진다면 소수가 아닙니다.
		if (n % divisor === 0) return false;

		// 짝수일 경우를 제외한 홀수일 경우를 판단
		divisor += 2;
	}

	// 모든 조건을 통과했을 경우 소수로 인정받습니다.
	return true;
}&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;사용&lt;/p&gt;
&lt;pre id=&quot;code_1601886896399&quot; class=&quot;javascript&quot; data-ke-language=&quot;javascript&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;console.log(isPrime(71));&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;</description>
      <category>프로그래밍 이론/알고리즘</category>
      <category>JavaScript</category>
      <category>알고리즘</category>
      <author>방현준</author>
      <guid isPermaLink="true">https://noogoonaa.tistory.com/87</guid>
      <comments>https://noogoonaa.tistory.com/87#entry87comment</comments>
      <pubDate>Mon, 5 Oct 2020 17:35:22 +0900</pubDate>
    </item>
    <item>
      <title>[javascript / 알고리즘] 문자열의 모든 경우의 수 가져오기</title>
      <link>https://noogoonaa.tistory.com/86</link>
      <description>&lt;p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-filename=&quot;다운로드.png&quot; data-origin-width=&quot;700&quot; data-origin-height=&quot;525&quot; data-ke-mobilestyle=&quot;widthContent&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/3cgAi/btqJ8f7OebZ/6fMSDBYI1KjnsVGch7MfNk/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/3cgAi/btqJ8f7OebZ/6fMSDBYI1KjnsVGch7MfNk/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/3cgAi/btqJ8f7OebZ/6fMSDBYI1KjnsVGch7MfNk/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2F3cgAi%2FbtqJ8f7OebZ%2F6fMSDBYI1KjnsVGch7MfNk%2Fimg.png&quot; data-filename=&quot;다운로드.png&quot; data-origin-width=&quot;700&quot; data-origin-height=&quot;525&quot; data-ke-mobilestyle=&quot;widthContent&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;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;/p&gt;
&lt;hr contenteditable=&quot;false&quot; data-ke-type=&quot;horizontalRule&quot; data-ke-style=&quot;style5&quot; /&gt;
&lt;blockquote data-ke-size=&quot;size20&quot; data-ke-style=&quot;style2&quot;&gt;해당 포스팅은 제가 사용하려고 만든 포스팅이므로 자세한 설명은 생략합니다. 만약 이해가 안될 시 댓글을 남겨주시면 답변드리겠습니다.&lt;/blockquote&gt;
&lt;hr contenteditable=&quot;false&quot; data-ke-type=&quot;horizontalRule&quot; data-ke-style=&quot;style3&quot; /&gt;
&lt;h4 data-ke-size=&quot;size20&quot;&gt;&amp;nbsp;&lt;/h4&gt;
&lt;p data-ke-size=&quot;size18&quot;&gt;알고리즘을&amp;nbsp;풀다보면&amp;nbsp;배열의&amp;nbsp;경우의&amp;nbsp;수가&amp;nbsp;필요한&amp;nbsp;경우가&amp;nbsp;존재합니다. &lt;br /&gt;&lt;br /&gt;Python&amp;nbsp;같은&amp;nbsp;경우는 &lt;br /&gt;내장라이브러리인&amp;nbsp;itertools에&amp;nbsp;Permutation같은&amp;nbsp;함수가&amp;nbsp;있어서 &lt;br /&gt;꽤&amp;nbsp;쉽게&amp;nbsp;구해지지만 &lt;br /&gt;&lt;br /&gt;Javascript&amp;nbsp;같은&amp;nbsp;경우는&amp;nbsp;따로&amp;nbsp;내장&amp;nbsp;라이브러리가&amp;nbsp;없어서 &lt;br /&gt;실제&amp;nbsp;구현해야합니다. &lt;br /&gt;&lt;br /&gt;그래서&amp;nbsp;아래와&amp;nbsp;같이&amp;nbsp;만들게&amp;nbsp;되었습니다. &lt;br /&gt;&lt;span style=&quot;color: #9d9d9d;&quot;&gt;&lt;i&gt;(더&amp;nbsp;좋은&amp;nbsp;방법이&amp;nbsp;있을거&amp;nbsp;같긴&amp;nbsp;한데...&amp;nbsp;내&amp;nbsp;머리로선&amp;nbsp;이게&amp;nbsp;한계인듯&amp;nbsp;하다...)&lt;/i&gt;&lt;/span&gt;&lt;/p&gt;
&lt;hr contenteditable=&quot;false&quot; data-ke-type=&quot;horizontalRule&quot; data-ke-style=&quot;style1&quot; /&gt;
&lt;h2 data-ke-size=&quot;size26&quot;&gt;&lt;i&gt;&lt;b&gt;실행 함수&lt;/b&gt;&lt;/i&gt;&lt;/h2&gt;
&lt;pre id=&quot;code_1601885852216&quot; class=&quot;javascript&quot; data-ke-language=&quot;javascript&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;function getNumbeOfCases(numbers) {
	// 중복을 막기 위해서
	const result = new Set();

	// 재귀 함수를 통해 만든다.
	const temp = (currFix, eachArr) =&amp;gt; {
		for (let i = 0; i &amp;lt; eachArr.length; i++) {
			const tempEachArr = [...eachArr];
			const tempCurrFixVal = tempEachArr.splice(i, 1)[0];
			const tempCurrFix = currFix + tempCurrFixVal;
			result.add(Number(tempCurrFix));
			if (tempEachArr.length &amp;gt; 0) temp(tempCurrFix, tempEachArr);
		}
	};

	// 시작
	for (let i = 0; i &amp;lt; numbers.length; i++) {
		let target = numbers[i];
		result.add(Number(target));

		const eachArr = [...numbers];
		eachArr.splice(i, 1);

		temp(target, eachArr);
	}

	return new Array(...result);
}&lt;/code&gt;&lt;/pre&gt;
&lt;h3 data-ke-size=&quot;size23&quot;&gt;&amp;nbsp;&lt;/h3&gt;
&lt;h3 data-ke-size=&quot;size23&quot;&gt;&lt;i&gt;&lt;b&gt;사용&lt;/b&gt;&lt;/i&gt;&lt;/h3&gt;
&lt;pre id=&quot;code_1601885902523&quot; class=&quot;javascript&quot; data-ke-language=&quot;javascript&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;console.log(getNumbeOfCases([&quot;0&quot;, &quot;1&quot;, &quot;2&quot;]));&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;</description>
      <category>프로그래밍 이론/알고리즘</category>
      <category>JavaScript</category>
      <category>알고리즘</category>
      <author>방현준</author>
      <guid isPermaLink="true">https://noogoonaa.tistory.com/86</guid>
      <comments>https://noogoonaa.tistory.com/86#entry86comment</comments>
      <pubDate>Mon, 5 Oct 2020 17:25:30 +0900</pubDate>
    </item>
    <item>
      <title>javascript Dom 로드 시 실행되는 이벤트</title>
      <link>https://noogoonaa.tistory.com/84</link>
      <description>&lt;p data-ke-size=&quot;size18&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;hr contenteditable=&quot;false&quot; data-ke-type=&quot;horizontalRule&quot; data-ke-style=&quot;style5&quot; /&gt;
&lt;p data-ke-size=&quot;size18&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock widthContent&quot; data-filename=&quot;자바스크립트.png&quot; data-origin-width=&quot;700&quot; data-origin-height=&quot;525&quot; data-ke-mobilestyle=&quot;widthContent&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/rrWC5/btqIOatn0if/ngBuUo6yKFjjx0yk36On61/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/rrWC5/btqIOatn0if/ngBuUo6yKFjjx0yk36On61/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/rrWC5/btqIOatn0if/ngBuUo6yKFjjx0yk36On61/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FrrWC5%2FbtqIOatn0if%2FngBuUo6yKFjjx0yk36On61%2Fimg.png&quot; data-filename=&quot;자바스크립트.png&quot; data-origin-width=&quot;700&quot; data-origin-height=&quot;525&quot; data-ke-mobilestyle=&quot;widthContent&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;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;/p&gt;
&lt;hr contenteditable=&quot;false&quot; data-ke-type=&quot;horizontalRule&quot; data-ke-style=&quot;style3&quot; /&gt;
&lt;p data-ke-size=&quot;size18&quot;&gt;웹 페이지를 개발할 때 사용자의 이벤트에 따라 자바스크립트 코드를 실행시키는 경우도 존재하지만,&lt;/p&gt;
&lt;p data-ke-size=&quot;size18&quot;&gt;웹 문서가 로드되었을 때를 기점으로 자바스크립트를 실행하는 경우도 존재합니다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size18&quot;&gt;오늘은 이 웹 문서가 로드되었을 때 자바스크립트를 로드하는 방법에 대해서 알아보도록 하겠습니다.&lt;/p&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-filename=&quot;5948abfc0e2df5.02876591.gif&quot; data-origin-width=&quot;718&quot; data-origin-height=&quot;306&quot; data-ke-mobilestyle=&quot;widthContent&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/bbiL1W/btqIX4SsPEK/0NtNkGu9YkhQLa62OztAL0/img.gif&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/bbiL1W/btqIX4SsPEK/0NtNkGu9YkhQLa62OztAL0/img.gif&quot; data-alt=&quot;자바스크립트 로드될 때 웹 브라우저 [출처 : https://moz.com/blog/javascript-seo]&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/bbiL1W/btqIX4SsPEK/0NtNkGu9YkhQLa62OztAL0/img.gif&quot; srcset=&quot;https://blog.kakaocdn.net/dn/bbiL1W/btqIX4SsPEK/0NtNkGu9YkhQLa62OztAL0/img.gif&quot; data-filename=&quot;5948abfc0e2df5.02876591.gif&quot; data-origin-width=&quot;718&quot; data-origin-height=&quot;306&quot; data-ke-mobilestyle=&quot;widthContent&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;/&gt;&lt;/span&gt;&lt;figcaption&gt;자바스크립트 로드될 때 웹 브라우저 [출처 : https://moz.com/blog/javascript-seo]&lt;/figcaption&gt;
&lt;/figure&gt;
&lt;/p&gt;
&lt;hr contenteditable=&quot;false&quot; data-ke-type=&quot;horizontalRule&quot; data-ke-style=&quot;style1&quot; /&gt;
&lt;p data-ke-size=&quot;size18&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;h2 data-ke-size=&quot;size26&quot;&gt;&lt;i&gt;&lt;b&gt;웹 문서를 로드하기 전 선행 과정&lt;/b&gt;&lt;/i&gt;&lt;/h2&gt;
&lt;p data-ke-size=&quot;size18&quot;&gt;여러분들은 웹 브라우저가 웹 문서를 어떻게 로드하는지 아시고 계신가요?&lt;/p&gt;
&lt;p data-ke-size=&quot;size18&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size18&quot;&gt;사실 간단하게 보면 간단한 과정인데&lt;/p&gt;
&lt;p data-ke-size=&quot;size18&quot;&gt;본격적으로 공부를 하면 꽤 복잡해 집니다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size18&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size18&quot;&gt;그래서 이번 포스팅에선 간략하게 알아볼 예정입니다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size14&quot;&gt;&lt;span style=&quot;color: #9d9d9d;&quot;&gt;&lt;i&gt;(자세한 부분은 추후 포스팅하겠습니다)&lt;/i&gt;&lt;/span&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size18&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size18&quot;&gt;일단, 처음 사용자는 어떠한 목적을 가지고 웹에 접근을 합니다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size18&quot;&gt;저희는 날씨를 알아보려고 웹에 접근했다고 가정을 해보죠&lt;/p&gt;
&lt;p data-ke-size=&quot;size18&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size18&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-filename=&quot;슬라이드1.PNG&quot; data-origin-width=&quot;1280&quot; data-origin-height=&quot;720&quot; data-ke-mobilestyle=&quot;widthContent&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/wQoXG/btqIX4kFlTS/QJKgzNLYX2i71bQFk7E3gK/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/wQoXG/btqIX4kFlTS/QJKgzNLYX2i71bQFk7E3gK/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/wQoXG/btqIX4kFlTS/QJKgzNLYX2i71bQFk7E3gK/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FwQoXG%2FbtqIX4kFlTS%2FQJKgzNLYX2i71bQFk7E3gK%2Fimg.png&quot; data-filename=&quot;슬라이드1.PNG&quot; data-origin-width=&quot;1280&quot; data-origin-height=&quot;720&quot; data-ke-mobilestyle=&quot;widthContent&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;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;/p&gt;
&lt;p data-ke-size=&quot;size18&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size18&quot;&gt;그럼 사용자는 해당 주소를 가지고 웹 문서에 접근을 시도하게 됩니다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size18&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-filename=&quot;슬라이드2.PNG&quot; data-origin-width=&quot;1280&quot; data-origin-height=&quot;720&quot; data-ke-mobilestyle=&quot;widthContent&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/boBrOf/btqIOa7ZRjc/wCQvlk5oDDiAX9dmf3y8Lk/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/boBrOf/btqIOa7ZRjc/wCQvlk5oDDiAX9dmf3y8Lk/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/boBrOf/btqIOa7ZRjc/wCQvlk5oDDiAX9dmf3y8Lk/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FboBrOf%2FbtqIOa7ZRjc%2FwCQvlk5oDDiAX9dmf3y8Lk%2Fimg.png&quot; data-filename=&quot;슬라이드2.PNG&quot; data-origin-width=&quot;1280&quot; data-origin-height=&quot;720&quot; data-ke-mobilestyle=&quot;widthContent&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;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;/p&gt;
&lt;p data-ke-size=&quot;size18&quot;&gt;그럼 웹 브라우저는 해당 주소에 도메인을 가지고 있는 서버에 접근하여&lt;/p&gt;
&lt;p data-ke-size=&quot;size18&quot;&gt;웹 문서를 달라고 말합니다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size18&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-filename=&quot;슬라이드3.PNG&quot; data-origin-width=&quot;1280&quot; data-origin-height=&quot;720&quot; data-ke-mobilestyle=&quot;widthContent&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/0HDMP/btqIZm6rDv3/DVwVW3xl5h7trMtDcrMEE1/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/0HDMP/btqIZm6rDv3/DVwVW3xl5h7trMtDcrMEE1/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/0HDMP/btqIZm6rDv3/DVwVW3xl5h7trMtDcrMEE1/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2F0HDMP%2FbtqIZm6rDv3%2FDVwVW3xl5h7trMtDcrMEE1%2Fimg.png&quot; data-filename=&quot;슬라이드3.PNG&quot; data-origin-width=&quot;1280&quot; data-origin-height=&quot;720&quot; data-ke-mobilestyle=&quot;widthContent&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;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;/p&gt;
&lt;p data-ke-size=&quot;size18&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size18&quot;&gt;그럼 이제 서버는 해당 웹 브라우저에 요청에 따라&lt;/p&gt;
&lt;p data-ke-size=&quot;size18&quot;&gt;HTML과 CSS, JAVASCRIPT, 이미지, 폰트 등 필요한 리소스를 웹 브라우저에 전송을 하게 됩니다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size18&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-filename=&quot;슬라이드4.PNG&quot; data-origin-width=&quot;1280&quot; data-origin-height=&quot;720&quot; data-ke-mobilestyle=&quot;widthContent&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/H5vE3/btqIX3TCzXL/F1EuWltikL8gBtgeDGEuX0/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/H5vE3/btqIX3TCzXL/F1EuWltikL8gBtgeDGEuX0/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/H5vE3/btqIX3TCzXL/F1EuWltikL8gBtgeDGEuX0/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FH5vE3%2FbtqIX3TCzXL%2FF1EuWltikL8gBtgeDGEuX0%2Fimg.png&quot; data-filename=&quot;슬라이드4.PNG&quot; data-origin-width=&quot;1280&quot; data-origin-height=&quot;720&quot; data-ke-mobilestyle=&quot;widthContent&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;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;/p&gt;
&lt;p data-ke-size=&quot;size18&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size18&quot;&gt;자 그럼 서버에서 가져온 리소스들은 웹 브라우저가 가질 수 있게 되었습니다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size18&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-filename=&quot;슬라이드4.PNG&quot; data-origin-width=&quot;1280&quot; data-origin-height=&quot;720&quot; data-ke-mobilestyle=&quot;widthContent&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/ORa8a/btqIVIPXsmM/pyUiMQKYMIoGnF4NiJTI11/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/ORa8a/btqIVIPXsmM/pyUiMQKYMIoGnF4NiJTI11/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/ORa8a/btqIVIPXsmM/pyUiMQKYMIoGnF4NiJTI11/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FORa8a%2FbtqIVIPXsmM%2FpyUiMQKYMIoGnF4NiJTI11%2Fimg.png&quot; data-filename=&quot;슬라이드4.PNG&quot; data-origin-width=&quot;1280&quot; data-origin-height=&quot;720&quot; data-ke-mobilestyle=&quot;widthContent&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;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;/p&gt;
&lt;p data-ke-size=&quot;size18&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size18&quot;&gt;여기서부터 자바스크립트가 로드될 때를 개발자가 설정해 줄 수 있습니다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size18&quot;&gt;그 첫 번째로 먼저 로드되는 것을 알아보겠습니다.&lt;/p&gt;
&lt;hr contenteditable=&quot;false&quot; data-ke-type=&quot;horizontalRule&quot; data-ke-style=&quot;style1&quot; /&gt;
&lt;h2 data-ke-size=&quot;size26&quot;&gt;&lt;i&gt;&lt;b&gt;DOMContentLoaded&lt;/b&gt;&lt;/i&gt;&lt;/h2&gt;
&lt;p data-ke-size=&quot;size18&quot;&gt;해당 이벤트는 Document 객체에 등록할 수 있는 이벤트로&lt;/p&gt;
&lt;p data-ke-size=&quot;size18&quot;&gt;웹 브라우저가 HTML을 DOM 트리 형식으로 만들고 난 후에 호출됩니다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size18&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size18&quot;&gt;아래 그림을 한번 보도록 하죠.&lt;/p&gt;
&lt;p data-ke-size=&quot;size18&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size18&quot;&gt;HTML을 읽은 웹 브라우저는 Dom Tree를 만듭니다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size18&quot;&gt;이렇게 Dom Tree가 다 만들어 진 후 웹 브라우저에선&lt;/p&gt;
&lt;p data-ke-size=&quot;size18&quot;&gt;&lt;span style=&quot;color: #333333;&quot;&gt;DOMContentLoaded를 실행시켜달라고 요청&lt;/span&gt;합니다.&lt;/p&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-filename=&quot;슬라이드5.PNG&quot; data-origin-width=&quot;1280&quot; data-origin-height=&quot;720&quot; data-ke-mobilestyle=&quot;widthContent&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/Srnvt/btqISp4PcLh/jareFoLx1XjqDo3yX7DbWk/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/Srnvt/btqISp4PcLh/jareFoLx1XjqDo3yX7DbWk/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/Srnvt/btqISp4PcLh/jareFoLx1XjqDo3yX7DbWk/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FSrnvt%2FbtqISp4PcLh%2FjareFoLx1XjqDo3yX7DbWk%2Fimg.png&quot; data-filename=&quot;슬라이드5.PNG&quot; data-origin-width=&quot;1280&quot; data-origin-height=&quot;720&quot; data-ke-mobilestyle=&quot;widthContent&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;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;/p&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;그럼 자바스크립트는 &lt;span style=&quot;color: #333333;&quot;&gt;DOMContentLoaded를 실행하게 되죠&lt;/span&gt;&lt;/p&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-filename=&quot;슬라이드6.PNG&quot; data-origin-width=&quot;1280&quot; data-origin-height=&quot;720&quot; data-ke-mobilestyle=&quot;widthContent&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/cFuiGR/btqISudHvo3/mnKsbinBgchgrkpvPjJS10/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/cFuiGR/btqISudHvo3/mnKsbinBgchgrkpvPjJS10/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/cFuiGR/btqISudHvo3/mnKsbinBgchgrkpvPjJS10/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FcFuiGR%2FbtqISudHvo3%2FmnKsbinBgchgrkpvPjJS10%2Fimg.png&quot; data-filename=&quot;슬라이드6.PNG&quot; data-origin-width=&quot;1280&quot; data-origin-height=&quot;720&quot; data-ke-mobilestyle=&quot;widthContent&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;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;/p&gt;
&lt;p data-ke-size=&quot;size18&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size18&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size18&quot;&gt;그림으로 봤을 때 이해가 쉬울지 모르겠습니다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size18&quot;&gt;즉, 간단하게 말하면&lt;/p&gt;
&lt;p data-ke-size=&quot;size18&quot;&gt;브라우저에 HTML만 존재한다는 이야기 이고,&lt;/p&gt;
&lt;p data-ke-size=&quot;size18&quot;&gt;그 외 나머지 리소스는 자바스크립트가 접근할 수 없다는 이야기입니다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size18&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size18&quot;&gt;&lt;span style=&quot;color: #333333;&quot;&gt;이미지가 이해가 안가는 사람들이 있을수 있으니&lt;/span&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size18&quot;&gt;&lt;span style=&quot;color: #333333;&quot;&gt;소스를 &lt;/span&gt;한번 확인해 볼까요?&lt;/p&gt;
&lt;p data-ke-size=&quot;size18&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p class=&quot;codepen&quot; style=&quot;width: 100%; height: 407px; box-sizing: border-box; display: flex; align-items: center; justify-content: center; border: 2px solid; margin: 1em 0; padding: 1em;&quot; data-height=&quot;407&quot; data-theme-id=&quot;dark&quot; data-default-tab=&quot;html,result&quot; data-user=&quot;noogoonaa&quot; data-slug-hash=&quot;PoNBvJd&quot; data-preview=&quot;true&quot; data-pen-title=&quot;DOMContentLoaded&quot; data-ke-size=&quot;size18&quot;&gt;&lt;span&gt;See the Pen &lt;a href=&quot;https://codepen.io/noogoonaa/pen/PoNBvJd&quot;&gt; DOMContentLoaded&lt;/a&gt; by HyeonJun, Bang (&lt;a href=&quot;https://codepen.io/noogoonaa&quot;&gt;@noogoonaa&lt;/a&gt;) on &lt;a href=&quot;https://codepen.io&quot;&gt;CodePen&lt;/a&gt;.&lt;/span&gt;&lt;/p&gt;
&lt;script src=&quot;https://static.codepen.io/assets/embed/ei.js&quot;&gt;&lt;/script&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size18&quot;&gt;어떠신가요?&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size18&quot;&gt;이미지가 로드되지 않고 alert가 나타나죠?&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;color: #ee2323;&quot;&gt;&lt;i&gt;(만약! 이미지가 먼저 뜬다면, 우측 상단에 Edit on CodePen을 클릭 후 직접 실행해 보시길 바랍니다.)&lt;/i&gt;&lt;/span&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size18&quot;&gt;그 후 확인 버튼을 누르면 이미지가 나타납니다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size18&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size18&quot;&gt;그렇습니다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size18&quot;&gt;&lt;span style=&quot;color: #333333;&quot;&gt;DOMContentLoaded는 스타일이나 이미지 등을 전혀 불러오지 않고,&lt;/span&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size18&quot;&gt;&lt;span style=&quot;color: #333333;&quot;&gt;오로지 로드된 HTML로만 접근하기 때문에 이러한 현상이 발생하는 것입니다.&lt;/span&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size18&quot;&gt;그래서 이미지를 가져오기 전에 Alert가 발생한 것이지요.&lt;/p&gt;
&lt;p data-ke-size=&quot;size18&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size18&quot;&gt;그렇기 때문에 &lt;span style=&quot;color: #333333;&quot;&gt;DOMContentLoaded는 직접적으로 이미지나 스타일 등의 접근하지 않는 기능을 적용해 주어야 합니다.&lt;/span&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size18&quot;&gt;&lt;span style=&quot;color: #333333;&quot;&gt;예를 들어서 모듈 초기화하여 Dom에 추가하거나, 노드의 이벤트 핸들러 등록 등을 할 수 있겠네요.&lt;/span&gt;&lt;span style=&quot;color: #333333;&quot;&gt;&lt;/span&gt;&lt;/p&gt;
&lt;hr contenteditable=&quot;false&quot; data-ke-type=&quot;horizontalRule&quot; data-ke-style=&quot;style1&quot; /&gt;
&lt;h2 data-ke-size=&quot;size26&quot;&gt;&lt;i&gt;&lt;b&gt;Load&lt;/b&gt;&lt;/i&gt;&lt;/h2&gt;
&lt;p data-ke-size=&quot;size18&quot;&gt;해당 이벤트는 Window객체에 등록할 수 있는 이벤트로&lt;/p&gt;
&lt;p data-ke-size=&quot;size18&quot;&gt;웹 브라우저가 HTML, 스타일, 폰트, 이미지 등을 다 렌더링 한 후에 호출됩니다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size18&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size18&quot;&gt;이번에도 그림을 먼저 한번 보도록 하겠습니다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size18&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size18&quot;&gt;웹 브라우저는 CSS와 이미지 등을 전부 렌더링 한 후&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size18&quot;&gt;자바스크립트에 Load를 실행해 달라고 요청합니다.&lt;/p&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-filename=&quot;슬라이드7.PNG&quot; data-origin-width=&quot;1280&quot; data-origin-height=&quot;720&quot; data-ke-mobilestyle=&quot;widthContent&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/sKIt8/btqITvi5NrI/cLKq7djRQfYv3kvmHejfJ0/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/sKIt8/btqITvi5NrI/cLKq7djRQfYv3kvmHejfJ0/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/sKIt8/btqITvi5NrI/cLKq7djRQfYv3kvmHejfJ0/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FsKIt8%2FbtqITvi5NrI%2FcLKq7djRQfYv3kvmHejfJ0%2Fimg.png&quot; data-filename=&quot;슬라이드7.PNG&quot; data-origin-width=&quot;1280&quot; data-origin-height=&quot;720&quot; data-ke-mobilestyle=&quot;widthContent&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;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;/p&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;그럼 자바스크립트는 이 요청에 응해 Load를 호출하게 되죠&lt;/p&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-filename=&quot;슬라이드8.PNG&quot; data-origin-width=&quot;1280&quot; data-origin-height=&quot;720&quot; data-ke-mobilestyle=&quot;widthContent&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/1lEaw/btqITtMhfxJ/I3orRvdM2aAgbACMbEkV7K/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/1lEaw/btqITtMhfxJ/I3orRvdM2aAgbACMbEkV7K/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/1lEaw/btqITtMhfxJ/I3orRvdM2aAgbACMbEkV7K/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2F1lEaw%2FbtqITtMhfxJ%2FI3orRvdM2aAgbACMbEkV7K%2Fimg.png&quot; data-filename=&quot;슬라이드8.PNG&quot; data-origin-width=&quot;1280&quot; data-origin-height=&quot;720&quot; data-ke-mobilestyle=&quot;widthContent&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;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;/p&gt;
&lt;p data-ke-size=&quot;size18&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size18&quot;&gt;&lt;span style=&quot;color: #333333;&quot;&gt;이 때문에 &lt;/span&gt;이전 &lt;span style=&quot;color: #333333;&quot;&gt;DOMContentLoaded와는 다르게 모든 스타일과 리소스 등 의 접근할 있고,&lt;/span&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size18&quot;&gt;&lt;span style=&quot;color: #333333;&quot;&gt;조작 또한 가능하게 됩니다.&lt;/span&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size18&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size18&quot;&gt;&lt;span style=&quot;color: #333333;&quot;&gt;자 그럼 이번에도 소스를&lt;span&gt;&amp;nbsp;&lt;/span&gt;&lt;/span&gt;한번 확인해 볼까요?&lt;/p&gt;
&lt;p class=&quot;codepen&quot; style=&quot;width: 100%; height: 407px; box-sizing: border-box; display: flex; align-items: center; justify-content: center; border: 2px solid; margin: 1em 0; padding: 1em;&quot; data-height=&quot;265&quot; data-theme-id=&quot;dark&quot; data-default-tab=&quot;html,result&quot; data-user=&quot;noogoonaa&quot; data-slug-hash=&quot;jOqpgPG&quot; data-preview=&quot;true&quot; data-pen-title=&quot;load&quot; data-ke-size=&quot;size18&quot;&gt;&lt;span&gt;See the Pen &lt;a href=&quot;https://codepen.io/noogoonaa/pen/jOqpgPG&quot;&gt; load&lt;/a&gt; by HyeonJun, Bang (&lt;a href=&quot;https://codepen.io/noogoonaa&quot;&gt;@noogoonaa&lt;/a&gt;) on &lt;a href=&quot;https://codepen.io&quot;&gt;CodePen&lt;/a&gt;.&lt;/span&gt;&lt;/p&gt;
&lt;script src=&quot;https://static.codepen.io/assets/embed/ei.js&quot;&gt;&lt;/script&gt;
&lt;p data-ke-size=&quot;size18&quot;&gt;이번에는 정상적으로 이미지가 렌더링 된 후 Alert가 실행되는 것을 확인할 수 있습니다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size18&quot;&gt;이렇듯 Load를 사용하면 좀 더 완벽한 Dom에 접근할 수 있게 됩니다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size18&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size18&quot;&gt;그래서 이 이벤트는 이미지의 사이즈나, 조작, DOM 스타일을 변경하는 경우에 사용됩니다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size18&quot;&gt;다만 속도 측면에서는 &lt;span style=&quot;color: #333333;&quot;&gt;DOMContentLoaded보다 느릴 수밖에 없습니다.&lt;/span&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size18&quot;&gt;&lt;span style=&quot;color: #333333;&quot;&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;h2 data-ke-size=&quot;size26&quot;&gt;&lt;i&gt;&lt;b&gt;마무리&lt;/b&gt;&lt;/i&gt;&lt;/h2&gt;
&lt;p data-ke-size=&quot;size18&quot;&gt;오늘은 &lt;span style=&quot;color: #333333;&quot;&gt;DOMContentLoaded와 Load에 대해서 알아보았습니다.&lt;/span&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size18&quot;&gt;&lt;span style=&quot;color: #333333;&quot;&gt;이러한 이벤트는 자주 사용하는 이벤트이기 때문에 꼭 알아두셨으면 합니다.&lt;/span&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size18&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size18&quot;&gt;&lt;span style=&quot;color: #333333;&quot;&gt;다음에는 더 좋은 포스트를 가져오겠습니다.&lt;/span&gt;&lt;span style=&quot;color: #333333;&quot;&gt;&lt;/span&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size18&quot;&gt;&lt;span style=&quot;color: #333333;&quot;&gt;&lt;span&gt;만약 포스트에 문제가 있거나 틀린 부분이 있다면 댓글을 남겨주시기 바랍니다.&lt;/span&gt;&lt;/span&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size18&quot;&gt;&lt;span&gt;감사합니다.&lt;/span&gt;&lt;/p&gt;</description>
      <category>프로그래밍 언어/웹 프론트엔드</category>
      <author>방현준</author>
      <guid isPermaLink="true">https://noogoonaa.tistory.com/84</guid>
      <comments>https://noogoonaa.tistory.com/84#entry84comment</comments>
      <pubDate>Thu, 17 Sep 2020 01:29:07 +0900</pubDate>
    </item>
    <item>
      <title>자바스크립트의 메모리 관리</title>
      <link>https://noogoonaa.tistory.com/83</link>
      <description>&lt;hr contenteditable=&quot;false&quot; data-ke-type=&quot;horizontalRule&quot; data-ke-style=&quot;style5&quot; /&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock widthContent&quot; data-filename=&quot;자바스크립트.png&quot; data-origin-width=&quot;700&quot; data-origin-height=&quot;525&quot; data-ke-mobilestyle=&quot;widthContent&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/bJAVmo/btqHBSNBEzz/cEIh6cTxADX8zVC6kKVTMK/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/bJAVmo/btqHBSNBEzz/cEIh6cTxADX8zVC6kKVTMK/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/bJAVmo/btqHBSNBEzz/cEIh6cTxADX8zVC6kKVTMK/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FbJAVmo%2FbtqHBSNBEzz%2FcEIh6cTxADX8zVC6kKVTMK%2Fimg.png&quot; data-filename=&quot;자바스크립트.png&quot; data-origin-width=&quot;700&quot; data-origin-height=&quot;525&quot; data-ke-mobilestyle=&quot;widthContent&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;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;/p&gt;
&lt;hr contenteditable=&quot;false&quot; data-ke-type=&quot;horizontalRule&quot; data-ke-style=&quot;style3&quot; /&gt;
&lt;p data-ke-size=&quot;size18&quot;&gt;여러분들은 자바스크립트가 메모리를 어떻게 활용하는지 알고 계십니까?&lt;/p&gt;
&lt;p data-ke-size=&quot;size18&quot;&gt;사실 자바스크립트 개발자 중 그렇게 브라우저 메모리를 신경 쓰고 개발하는 경우는 많지 않습니다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size18&quot;&gt;(여태까지 저만 그랬을 수도 있었습니다....)&lt;/p&gt;
&lt;p data-ke-size=&quot;size18&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size18&quot;&gt;하지만 C계열의 언어를 가지고 게임을 만들거나 임베디드를 다루는 사람들은 메모리 관리가 필수적이라 할 수 있습니다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size18&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size18&quot;&gt;왜냐하면 임베딩이나 게임 개발은 컴퓨터의 메모리 누수를 최소한으로 줄여서 더 빠른 효율을 내야 하기 때문이죠.&lt;/p&gt;
&lt;p data-ke-size=&quot;size18&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size18&quot;&gt;그래서 임베디드 혹은 게임 현업에 투입될 때, 이것을 위해 고치고 발생하고 고치고를 반복하죠&lt;/p&gt;
&lt;p data-ke-size=&quot;size18&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size18&quot;&gt;하지만 자바스크립트 개발자는 크게 메모리 관리를 가지고 고민하지 않습니다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size18&quot;&gt;왜그럴까요?&lt;/p&gt;
&lt;p data-ke-size=&quot;size18&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size18&quot;&gt;한번 자바스크립트 개발자가 메모리 관리를 중요하게 생각하지 않았던 이유를 한번 알아보도록 하겠습니다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size18&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-filename=&quot;unnamed.jpg&quot; data-origin-width=&quot;424&quot; data-origin-height=&quot;480&quot; width=&quot;484&quot; height=&quot;NaN&quot; data-ke-mobilestyle=&quot;widthContent&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/chS8Tv/btqHBSG4GTh/WPHKpxibCkyN0OdHbENhTk/img.jpg&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/chS8Tv/btqHBSG4GTh/WPHKpxibCkyN0OdHbENhTk/img.jpg&quot; data-alt=&quot;당신의 메모리는 재앙적인(catastrophe) 문제를 가지고 있으니, 귀여운 고양이를 보세요&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/chS8Tv/btqHBSG4GTh/WPHKpxibCkyN0OdHbENhTk/img.jpg&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FchS8Tv%2FbtqHBSG4GTh%2FWPHKpxibCkyN0OdHbENhTk%2Fimg.jpg&quot; data-filename=&quot;unnamed.jpg&quot; data-origin-width=&quot;424&quot; data-origin-height=&quot;480&quot; width=&quot;484&quot; height=&quot;NaN&quot; data-ke-mobilestyle=&quot;widthContent&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;/&gt;&lt;/span&gt;&lt;figcaption&gt;당신의 메모리는 재앙적인(catastrophe) 문제를 가지고 있으니, 귀여운 고양이를 보세요&lt;/figcaption&gt;
&lt;/figure&gt;
&lt;/p&gt;
&lt;hr contenteditable=&quot;false&quot; data-ke-type=&quot;horizontalRule&quot; data-ke-style=&quot;style1&quot; /&gt;
&lt;h2 data-ke-size=&quot;size26&quot;&gt;&lt;b&gt;컴퓨터 메모리에 대해서 알아보자&lt;/b&gt;&lt;/h2&gt;
&lt;p data-ke-size=&quot;size18&quot;&gt;먼저 자바스크립트의 메모리를 어떻게 활용하는지를 알아보기 전, 컴퓨터가 어떻게 메모리를 다루는지에 대해서 알아보도록 하겠습니다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size18&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size18&quot;&gt;여러분들은 세상이 무엇으로 이루어져 있다고 생각하시나요?&lt;/p&gt;
&lt;p data-ke-size=&quot;size18&quot;&gt;일단 저는 세상이 뭘로 이루어져 있는지는 모르겠고, 컴퓨터 세상은 0과 1로 이루어져 있습니다&lt;/p&gt;
&lt;p data-ke-size=&quot;size18&quot;&gt;그 말은 즉, 우리가 사용하는 크롬, VSCode 같은 프로그램은 결과적으로는 0과 1로 이루어져 있죠.&lt;/p&gt;
&lt;p data-ke-size=&quot;size18&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size18&quot;&gt;왜 0과 1로밖에 안 되어 있나요?라고 물어본다면 많은 이유가 있겠지만,&lt;/p&gt;
&lt;p data-ke-size=&quot;size18&quot;&gt;제가 알고 있는 이유로는 0과 1로 덧셈, 뺄셈 등의 사칙연산이 가능하며,&lt;/p&gt;
&lt;p data-ke-size=&quot;size18&quot;&gt;더 나아가, 컴퓨터에서 보일 수 있는 모든 것을 표현할 수 있기 때문입니다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size18&quot;&gt;&lt;span style=&quot;color: #333333;&quot;&gt;(좀 더 들어가면 이산수학 시간이 되기 때문에 자세한 건 넘어가도록 하겠습니다.)&lt;/span&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size18&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-filename=&quot;2015031200423_0.jpg&quot; data-origin-width=&quot;540&quot; data-origin-height=&quot;287&quot; data-ke-mobilestyle=&quot;widthContent&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/TLOgm/btqHJqwdVCA/87sxKiKvFdI7WFxdV2OSyK/img.jpg&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/TLOgm/btqHJqwdVCA/87sxKiKvFdI7WFxdV2OSyK/img.jpg&quot; data-alt=&quot;출처 : http://newsteacher.chosun.com/site/data/html_dir/2015/03/12/2015031200424.html&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/TLOgm/btqHJqwdVCA/87sxKiKvFdI7WFxdV2OSyK/img.jpg&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FTLOgm%2FbtqHJqwdVCA%2F87sxKiKvFdI7WFxdV2OSyK%2Fimg.jpg&quot; data-filename=&quot;2015031200423_0.jpg&quot; data-origin-width=&quot;540&quot; data-origin-height=&quot;287&quot; data-ke-mobilestyle=&quot;widthContent&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;/&gt;&lt;/span&gt;&lt;figcaption&gt;출처 : http://newsteacher.chosun.com/site/data/html_dir/2015/03/12/2015031200424.html&lt;/figcaption&gt;
&lt;/figure&gt;
&lt;/p&gt;
&lt;p data-ke-size=&quot;size18&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size18&quot;&gt;그렇기 때문에 이 0과 1은 컴퓨터가 사용하는 데이터입니다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size18&quot;&gt;이 데이터는 컴퓨터 어딘가에 저장해야 나중에 쓸 수 있고,&lt;/p&gt;
&lt;p data-ke-size=&quot;size18&quot;&gt;이 데이터를 저장하는 저장소의 크기를 &lt;span style=&quot;color: #333333;&quot;&gt;비트(bit)라는 용어를 사용하여 구분하기로 했습니다.&lt;/span&gt;&lt;span style=&quot;color: #333333;&quot;&gt;&lt;/span&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size18&quot;&gt;즉, 데이터 1을 담고 있는 저장소의 크기는 1비트(bit)인 거죠&lt;/p&gt;
&lt;p data-ke-size=&quot;size18&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size18&quot;&gt;어때요? 여기까진 쉽죠?&lt;/p&gt;
&lt;p data-ke-size=&quot;size18&quot;&gt;자, 이제 좀 더 들어가 볼까요?&lt;/p&gt;
&lt;p data-ke-size=&quot;size18&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size18&quot;&gt;우리는 컴퓨터 어딘가에 1이라는 데이터를 1비트 크기의 메모리에 저장했습니다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size18&quot;&gt;그리고 1주일 뒤 우리는 저장해 둔 데이터를 가져와서 쓰려고 컴퓨터에 요청했습니다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size18&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size18&quot;&gt;&quot;나의 친구 콤퓨타야~, 나의 1이라는 데이터를 가져와 줄 수 있니??&quot;&lt;/p&gt;
&lt;p data-ke-size=&quot;size18&quot;&gt;&quot;물론이지 친구야, 여기 있어&quot;&lt;/p&gt;
&lt;p data-ke-size=&quot;size18&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size18&quot;&gt;하면서 컴퓨터는 저에게 1이라는 데이터를 똭 하고 주었습니다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size18&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-filename=&quot;download-17.png&quot; data-origin-width=&quot;1200&quot; data-origin-height=&quot;930&quot; data-ke-mobilestyle=&quot;widthContent&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/062sN/btqHLeWEnDj/S11mFL8K6fOUFEPSHaizmk/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/062sN/btqHLeWEnDj/S11mFL8K6fOUFEPSHaizmk/img.png&quot; data-alt=&quot;고마워~ 콤퓨타야~&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/062sN/btqHLeWEnDj/S11mFL8K6fOUFEPSHaizmk/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2F062sN%2FbtqHLeWEnDj%2FS11mFL8K6fOUFEPSHaizmk%2Fimg.png&quot; data-filename=&quot;download-17.png&quot; data-origin-width=&quot;1200&quot; data-origin-height=&quot;930&quot; data-ke-mobilestyle=&quot;widthContent&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;/&gt;&lt;/span&gt;&lt;figcaption&gt;고마워~ 콤퓨타야~&lt;/figcaption&gt;
&lt;/figure&gt;
&lt;/p&gt;
&lt;p data-ke-size=&quot;size18&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size18&quot;&gt;근데 생각해보면 모든 데이터가 0과 1로 이루어져 있는데 컴퓨터는 그 많은 0과 1중에서&lt;/p&gt;
&lt;p data-ke-size=&quot;size18&quot;&gt;사용자가 원하는 1을 찾을 수 있었을까요?&lt;/p&gt;
&lt;p data-ke-size=&quot;size18&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size18&quot;&gt;사실 컴퓨터는 사용자가 원하는 데이터를 기반으로 찾은 게 아닙니다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size18&quot;&gt;그 데이터가 저장되어 있는 주소를 가지고 찾은 것이죠.&lt;/p&gt;
&lt;p data-ke-size=&quot;size18&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size18&quot;&gt;사실 각각의 1비트의 메모리마다 각각의 주소를 가지고 있습니다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size18&quot;&gt;이 주소는 고유해서 컴퓨터 안에 중복되는 주소를 가질 수 없고요,&lt;/p&gt;
&lt;p data-ke-size=&quot;size18&quot;&gt;그래서 컴퓨터는 이 주소를 가지고 중복되는 데이터 안에서 사용자가 원하는 데이터를 찾을 수 있었던 겁니다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size18&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size18&quot;&gt;하지만, 제가 아까 말했죠?&lt;/p&gt;
&lt;p data-ke-size=&quot;size18&quot;&gt;컴퓨터는 1비트당 1개의 주소를 가지고 있다고...&lt;/p&gt;
&lt;p data-ke-size=&quot;size18&quot;&gt;이러한 경우 모든 비트의 주소를 알고 있어야 하므로 메모리 관리에 효율적이지 않습니다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size18&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size18&quot;&gt;그렇기 때문에 우리의 친구 컴퓨터는 이 메모리를 효율적으로 관리하기 위해서&lt;/p&gt;
&lt;p data-ke-size=&quot;size18&quot;&gt;8개의 비트(bit)를 묶어서 바이트(byte)라는 단위를 만들어 냈습니다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size18&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size18&quot;&gt;그렇게 해서 컴퓨터는 바이트의 첫 번째 주소만 가지고 있으면,&lt;/p&gt;
&lt;p data-ke-size=&quot;size18&quot;&gt;데이터의 묶음인 바이트 메모리에 접근해서 사용자가 원하는 데이터를 더 효율적으로 접근할 수&amp;nbsp; 있게 되었습니다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size18&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;hr contenteditable=&quot;false&quot; data-ke-type=&quot;horizontalRule&quot; data-ke-style=&quot;style1&quot; /&gt;
&lt;p data-ke-size=&quot;size18&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;h2 data-ke-size=&quot;size26&quot;&gt;&lt;b&gt;자바스크립트가 메모리를 관리하는 법&lt;/b&gt;&lt;/h2&gt;
&lt;p data-ke-size=&quot;size18&quot;&gt;자 우리는 컴퓨터가 어떻게 메모리를 관리하는지 알아보았습니다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size18&quot;&gt;그럼 이제 자바스크립트가 메모리를 관리하는 법에 대해서 알아볼까요?&lt;/p&gt;
&lt;p data-ke-size=&quot;size18&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size18&quot;&gt;여러분들은 자바스크립트를 사용하면서 혹시 메모리 관리를 해보신 경험이 있으신가요?&lt;/p&gt;
&lt;p data-ke-size=&quot;size18&quot;&gt;사실 많이 없으실 것이라 생각합니다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size18&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size18&quot;&gt;자바스크립트도 프로그래밍 언어이기 때문에 메모리 관리를 해줘야 할 텐데 왜 굳이 신경을 안 써도 될까요?&lt;/p&gt;
&lt;p data-ke-size=&quot;size18&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size18&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-filename=&quot;0_9__Y2HjoDFzxmf-j.png&quot; data-origin-width=&quot;700&quot; data-origin-height=&quot;268&quot; data-ke-mobilestyle=&quot;widthContent&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/yysOx/btqHA4BtgDV/GrrjqUduYsC3r2cgXbAW2K/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/yysOx/btqHA4BtgDV/GrrjqUduYsC3r2cgXbAW2K/img.png&quot; data-alt=&quot;자바스크립트도 Garbage Collector를 가지고 있습니다.&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/yysOx/btqHA4BtgDV/GrrjqUduYsC3r2cgXbAW2K/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FyysOx%2FbtqHA4BtgDV%2FGrrjqUduYsC3r2cgXbAW2K%2Fimg.png&quot; data-filename=&quot;0_9__Y2HjoDFzxmf-j.png&quot; data-origin-width=&quot;700&quot; data-origin-height=&quot;268&quot; data-ke-mobilestyle=&quot;widthContent&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;/&gt;&lt;/span&gt;&lt;figcaption&gt;자바스크립트도 Garbage Collector를 가지고 있습니다.&lt;/figcaption&gt;
&lt;/figure&gt;
&lt;/p&gt;
&lt;p data-ke-size=&quot;size18&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size18&quot;&gt;왜냐하면, 자바스크립트는 고수준 언어이기 때문에 대부분의 고수준 언어가 가지고 있는 GC(Garbage Collector)가 존재하여 메모리를 관리하고 있기 때문이죠.&lt;/p&gt;
&lt;p data-ke-size=&quot;size18&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size18&quot;&gt;그리고, 또 다른 이유는 옛날 컴퓨팅에서 숫자를 저장할 때 &lt;span style=&quot;color: #333333;&quot;&gt;short(2 바이트)을 사용하다 메모리가 부족하면 int(4 바이트)로 형 변환을 해줘야 하는 시절과는 달리&lt;/span&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size18&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size18&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size18&quot;&gt;&lt;span style=&quot;color: #333333;&quot;&gt; &lt;/span&gt;&lt;span style=&quot;color: #333333;&quot;&gt;현재의 컴퓨팅은 메모리가 상대적으로 커졌으며 이러한 &lt;span style=&quot;color: #333333;&quot;&gt;여유로운 메모리&lt;span&gt; 덕분에 &lt;/span&gt;&lt;/span&gt;우리의 &lt;/span&gt;자바스크립트는 이렇게 말합니다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size18&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size18&quot;&gt;&quot;야!! 너 그냥 귀찮으니까 64bit(8byte) 메모리 할당해 줄게, 가져!!&quot;&lt;/p&gt;
&lt;p data-ke-size=&quot;size18&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size18&quot;&gt;이렇게 자바스크립트의 통 큰 메모리 할당 덕분에 자바스크립트 개발자는 젖과 꿀이 흐르는 메모리에서 데이터를 저장할 수 있게 된 것이지요&lt;/p&gt;
&lt;hr contenteditable=&quot;false&quot; data-ke-type=&quot;horizontalRule&quot; data-ke-style=&quot;style3&quot; /&gt;
&lt;h2 data-ke-size=&quot;size26&quot;&gt;&lt;b&gt;마무리&lt;/b&gt;&lt;/h2&gt;
&lt;p data-ke-size=&quot;size18&quot;&gt;자! 오늘은 컴퓨터가 메모리를 관리하는 법과, 자바스크립트가 메모리 관리를 안 해도 되는 이유에 대해서 알아보았습니다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size18&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size18&quot;&gt;다음 포스팅에선 자바스크립트에 데이터 타입에 대해서 알아보도록 하겠습니다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size18&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size18&quot;&gt;&lt;span&gt;만약 포스트에 문제가 있거나 틀린 부분이 있다면 댓글을 남겨주시기 바랍니다.&lt;/span&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size18&quot;&gt;&lt;span&gt;감사합니다.&lt;/span&gt;&lt;/p&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;</description>
      <category>프로그래밍 언어/웹 프론트엔드</category>
      <category>Garbage Collector</category>
      <category>GC</category>
      <category>JavaScript</category>
      <category>메모리관리</category>
      <author>방현준</author>
      <guid isPermaLink="true">https://noogoonaa.tistory.com/83</guid>
      <comments>https://noogoonaa.tistory.com/83#entry83comment</comments>
      <pubDate>Wed, 2 Sep 2020 00:30:11 +0900</pubDate>
    </item>
    <item>
      <title>노션(Notion) 한국어 설정 방법</title>
      <link>https://noogoonaa.tistory.com/82</link>
      <description>&lt;hr contenteditable=&quot;false&quot; data-ke-type=&quot;horizontalRule&quot; data-ke-style=&quot;style5&quot; /&gt;
&lt;p data-ke-size=&quot;size18&quot;&gt;최근 에버노트를 재치고 개발자, 기획자 등 다양한 직군에서 사용되어지는 메모 노트 서비스가 있습니다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size18&quot;&gt;그 서비스의 이름은 &quot;노션&quot; 입니다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size18&quot;&gt;이 서비스는 2020년 8월 11일 바로 오늘 한글화를 공개했습니다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size18&quot;&gt;한국 사람으로서는 꽤 좋아할만한 이야기인데요&lt;/p&gt;
&lt;p data-ke-size=&quot;size18&quot;&gt;그럼 기존에 사용하던 노션사용자는 어떻게 노션의 한글 서비스를 사용할 수 있을까요?&lt;/p&gt;
&lt;p data-ke-size=&quot;size18&quot;&gt;한번 알아보도록 하겠습니다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size18&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-filename=&quot;notion-labs-inc-logo-vector.png&quot; data-origin-width=&quot;900&quot; data-origin-height=&quot;500&quot; data-ke-mobilestyle=&quot;widthContent&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/DqQLI/btqGxm9oHFg/AajpAnXUHL9azGvStBeYgK/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/DqQLI/btqGxm9oHFg/AajpAnXUHL9azGvStBeYgK/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/DqQLI/btqGxm9oHFg/AajpAnXUHL9azGvStBeYgK/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FDqQLI%2FbtqGxm9oHFg%2FAajpAnXUHL9azGvStBeYgK%2Fimg.png&quot; data-filename=&quot;notion-labs-inc-logo-vector.png&quot; data-origin-width=&quot;900&quot; data-origin-height=&quot;500&quot; data-ke-mobilestyle=&quot;widthContent&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;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;/p&gt;
&lt;hr contenteditable=&quot;false&quot; data-ke-type=&quot;horizontalRule&quot; data-ke-style=&quot;style3&quot; /&gt;
&lt;h2 data-ke-size=&quot;size26&quot;&gt;&lt;b&gt;웹에서 노션(Notion)을 한글로 설정하는 방법&lt;/b&gt;&lt;/h2&gt;
&lt;p data-ke-size=&quot;size18&quot;&gt;이번에 업데이트 된 노션을 한국어로 사용하기 위해서 하는 작업은 그렇게 어렵지 않습니다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size18&quot;&gt;웹에서 Notion이라고 입력해 줍니다.&lt;/p&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-origin-width=&quot;0&quot; data-origin-height=&quot;0&quot; data-ke-mobilestyle=&quot;widthContent&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/yHttH/btqGvZ7HDax/lEqJJ8jkx5wUXDkfaCBjY0/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/yHttH/btqGvZ7HDax/lEqJJ8jkx5wUXDkfaCBjY0/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/yHttH/btqGvZ7HDax/lEqJJ8jkx5wUXDkfaCBjY0/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FyHttH%2FbtqGvZ7HDax%2FlEqJJ8jkx5wUXDkfaCBjY0%2Fimg.png&quot; data-origin-width=&quot;0&quot; data-origin-height=&quot;0&quot; data-ke-mobilestyle=&quot;widthContent&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;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;/p&gt;
&lt;p data-ke-size=&quot;size18&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size18&quot;&gt;그럼 아래 사진과 같이 노션에 들어올 수 있습니다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size18&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-origin-width=&quot;0&quot; data-origin-height=&quot;0&quot; data-ke-mobilestyle=&quot;widthContent&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/sSOF7/btqGxyhF5KU/35SfI3QGW6k9uc3tx8n2WK/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/sSOF7/btqGxyhF5KU/35SfI3QGW6k9uc3tx8n2WK/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/sSOF7/btqGxyhF5KU/35SfI3QGW6k9uc3tx8n2WK/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FsSOF7%2FbtqGxyhF5KU%2F35SfI3QGW6k9uc3tx8n2WK%2Fimg.png&quot; data-origin-width=&quot;0&quot; data-origin-height=&quot;0&quot; data-ke-mobilestyle=&quot;widthContent&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;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;/p&gt;
&lt;p data-ke-size=&quot;size18&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size18&quot;&gt;그 후 로그인을 해 줍니다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size18&quot;&gt;만약 아이디가 없다면 Sign Up을 통해 회원가입을 해 줍니다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size18&quot;&gt;저는 아이디가 있으므로 제 아이디로 로그인 하겠습니다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size18&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-origin-width=&quot;0&quot; data-origin-height=&quot;0&quot; data-ke-mobilestyle=&quot;widthContent&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/nIc4V/btqGtfDW6Wt/uw9xolcOa8T6HJeUGAgEak/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/nIc4V/btqGtfDW6Wt/uw9xolcOa8T6HJeUGAgEak/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/nIc4V/btqGtfDW6Wt/uw9xolcOa8T6HJeUGAgEak/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FnIc4V%2FbtqGtfDW6Wt%2Fuw9xolcOa8T6HJeUGAgEak%2Fimg.png&quot; data-origin-width=&quot;0&quot; data-origin-height=&quot;0&quot; data-ke-mobilestyle=&quot;widthContent&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;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;/p&gt;
&lt;p data-ke-size=&quot;size18&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-origin-width=&quot;0&quot; data-origin-height=&quot;0&quot; data-ke-mobilestyle=&quot;widthContent&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/kSEY6/btqGvdyoPEH/1htIl2fnEoXnzzX7dCnDok/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/kSEY6/btqGvdyoPEH/1htIl2fnEoXnzzX7dCnDok/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/kSEY6/btqGvdyoPEH/1htIl2fnEoXnzzX7dCnDok/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FkSEY6%2FbtqGvdyoPEH%2F1htIl2fnEoXnzzX7dCnDok%2Fimg.png&quot; data-origin-width=&quot;0&quot; data-origin-height=&quot;0&quot; data-ke-mobilestyle=&quot;widthContent&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;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;/p&gt;
&lt;p data-ke-size=&quot;size18&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size18&quot;&gt;그럼 아래와 같은 화면이 나오게 됩니다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size18&quot;&gt;그 후 Setting &amp;amp; Members 를 클릭해 줍니다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size18&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-origin-width=&quot;0&quot; data-origin-height=&quot;0&quot; data-ke-mobilestyle=&quot;widthContent&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/buyp1o/btqGtCMqhS4/oJHgFjXPhpR4FMPUJu0dxk/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/buyp1o/btqGtCMqhS4/oJHgFjXPhpR4FMPUJu0dxk/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/buyp1o/btqGtCMqhS4/oJHgFjXPhpR4FMPUJu0dxk/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2Fbuyp1o%2FbtqGtCMqhS4%2FoJHgFjXPhpR4FMPUJu0dxk%2Fimg.png&quot; data-origin-width=&quot;0&quot; data-origin-height=&quot;0&quot; data-ke-mobilestyle=&quot;widthContent&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;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;/p&gt;
&lt;p data-ke-size=&quot;size18&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size18&quot;&gt;그럼 세팅창이 나오게 됩니다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size18&quot;&gt;우리는 언어를 변경해야하니까 Language &amp;amp; region 메뉴를 클릭해 줍니다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size18&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-origin-width=&quot;0&quot; data-origin-height=&quot;0&quot; data-ke-mobilestyle=&quot;widthContent&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/bUDxL1/btqGxmVUXQK/l8FiaOtrKAO33s8xZnAXjK/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/bUDxL1/btqGxmVUXQK/l8FiaOtrKAO33s8xZnAXjK/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/bUDxL1/btqGxmVUXQK/l8FiaOtrKAO33s8xZnAXjK/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FbUDxL1%2FbtqGxmVUXQK%2Fl8FiaOtrKAO33s8xZnAXjK%2Fimg.png&quot; data-origin-width=&quot;0&quot; data-origin-height=&quot;0&quot; data-ke-mobilestyle=&quot;widthContent&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;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;/p&gt;
&lt;p data-ke-size=&quot;size18&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size18&quot;&gt;그럼 언어를 변경할 수 있는 메뉴가 나오게 됩니다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size18&quot;&gt;여기서 한국어로 변경해 줍니다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size18&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-origin-width=&quot;0&quot; data-origin-height=&quot;0&quot; data-ke-mobilestyle=&quot;widthContent&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/bVwHAm/btqGvdkQL32/fGrNSdkEi6MjBg4ROokYxK/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/bVwHAm/btqGvdkQL32/fGrNSdkEi6MjBg4ROokYxK/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/bVwHAm/btqGvdkQL32/fGrNSdkEi6MjBg4ROokYxK/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FbVwHAm%2FbtqGvdkQL32%2FfGrNSdkEi6MjBg4ROokYxK%2Fimg.png&quot; data-origin-width=&quot;0&quot; data-origin-height=&quot;0&quot; data-ke-mobilestyle=&quot;widthContent&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;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;/p&gt;
&lt;p data-ke-size=&quot;size18&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size18&quot;&gt;그 후 한국어를 진짜로 설정할 꺼냐는 팝업창에서 Update를 눌러줍니다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size18&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-origin-width=&quot;0&quot; data-origin-height=&quot;0&quot; data-ke-mobilestyle=&quot;widthContent&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/bxa8BO/btqGtCFIBoX/bKRNy55AAEBvHwXwUf2TW1/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/bxa8BO/btqGtCFIBoX/bKRNy55AAEBvHwXwUf2TW1/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/bxa8BO/btqGtCFIBoX/bKRNy55AAEBvHwXwUf2TW1/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2Fbxa8BO%2FbtqGtCFIBoX%2FbKRNy55AAEBvHwXwUf2TW1%2Fimg.png&quot; data-origin-width=&quot;0&quot; data-origin-height=&quot;0&quot; data-ke-mobilestyle=&quot;widthContent&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;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;figure class=&quot;imageblock alignCenter&quot; data-origin-width=&quot;0&quot; data-origin-height=&quot;0&quot; data-ke-mobilestyle=&quot;widthContent&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/Uu4cT/btqGvQJS6Oz/v0QM090KeTOEPFSdNZLUC0/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/Uu4cT/btqGvQJS6Oz/v0QM090KeTOEPFSdNZLUC0/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/Uu4cT/btqGvQJS6Oz/v0QM090KeTOEPFSdNZLUC0/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FUu4cT%2FbtqGvQJS6Oz%2Fv0QM090KeTOEPFSdNZLUC0%2Fimg.png&quot; data-origin-width=&quot;0&quot; data-origin-height=&quot;0&quot; data-ke-mobilestyle=&quot;widthContent&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;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;/p&gt;
&lt;p data-ke-size=&quot;size18&quot;&gt;그럼 짜잔 한국어로 변경 되었습니다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size18&quot;&gt;이것으로 웹에서 한국어 설정 하는 방법에 대해서 알아보았습니다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size18&quot;&gt;다음은 윈도우 프로그램에서 &lt;span style=&quot;color: #333333;&quot;&gt;한국어 설정 하는 방법을 알아보도록 할까요?&lt;/span&gt;&lt;/p&gt;
&lt;hr contenteditable=&quot;false&quot; data-ke-type=&quot;horizontalRule&quot; data-ke-style=&quot;style1&quot; /&gt;
&lt;h2 data-ke-size=&quot;size26&quot;&gt;&lt;b&gt;&lt;span style=&quot;color: #333333;&quot;&gt;윈도우 프로그램에서 노션(Notion)을 한글로 설정하는 방법&lt;/span&gt;&lt;/b&gt;&lt;/h2&gt;
&lt;p data-ke-size=&quot;size18&quot;&gt;자 이번엔 윈도우 노션 프로그램에서 한국어 설정을 하는 방법에 대해서 알아보도록 하겠습니다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size18&quot;&gt;윈도우 프로그램과 웹 &lt;span style=&quot;color: #333333;&quot;&gt;Notion은 같은 UI를 가지고 있기 때문에 크게 다를게 없습니다.&lt;/span&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size18&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size18&quot;&gt;&lt;span style=&quot;color: #333333;&quot;&gt;먼저 Notion 프로그램을 실행시켜줍니다.&lt;/span&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size18&quot;&gt;&lt;span style=&quot;color: #333333;&quot;&gt;그 후 Setting &amp;amp; Members를 열어줍니다.&lt;/span&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size18&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;&lt;figure class=&quot;imagegridblock&quot;&gt;
  &lt;div class=&quot;image-container&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/IhTOH/btqGvQQFYNg/2GmASAQzWiNqbkxHZ5bkNK/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/IhTOH/btqGvQQFYNg/2GmASAQzWiNqbkxHZ5bkNK/img.png&quot; data-origin-width=&quot;0&quot; data-origin-height=&quot;0&quot; style=&quot;width: 31.1558%; margin-right: 10px;&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/IhTOH/btqGvQQFYNg/2GmASAQzWiNqbkxHZ5bkNK/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FIhTOH%2FbtqGvQQFYNg%2F2GmASAQzWiNqbkxHZ5bkNK%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;0&quot; height=&quot;0&quot;/&gt;&lt;/span&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/ciIVbu/btqGtC6In2s/FZWXeUGV7LO8kPVUOTx8lK/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/ciIVbu/btqGtC6In2s/FZWXeUGV7LO8kPVUOTx8lK/img.png&quot; data-origin-width=&quot;0&quot; data-origin-height=&quot;0&quot; style=&quot;width: 67.6814%;&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/ciIVbu/btqGtC6In2s/FZWXeUGV7LO8kPVUOTx8lK/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FciIVbu%2FbtqGtC6In2s%2FFZWXeUGV7LO8kPVUOTx8lK%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;0&quot; height=&quot;0&quot;/&gt;&lt;/span&gt;&lt;/div&gt;
&lt;/figure&gt;
&lt;/p&gt;
&lt;p data-ke-size=&quot;size18&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size18&quot;&gt;&lt;span style=&quot;color: #333333;&quot;&gt;그럼 아래와 같이 팝업창이 나오게 됩니다.&lt;/span&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size18&quot;&gt;&lt;span style=&quot;color: #333333;&quot;&gt;여기서 Language &amp;amp; region을 클릭해 줍니다.&lt;/span&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size18&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-origin-width=&quot;0&quot; data-origin-height=&quot;0&quot; data-ke-mobilestyle=&quot;widthContent&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/rJCPO/btqGtfcSGyo/fKbDsfwRN4OgkG0crPfzlK/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/rJCPO/btqGtfcSGyo/fKbDsfwRN4OgkG0crPfzlK/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/rJCPO/btqGtfcSGyo/fKbDsfwRN4OgkG0crPfzlK/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FrJCPO%2FbtqGtfcSGyo%2FfKbDsfwRN4OgkG0crPfzlK%2Fimg.png&quot; data-origin-width=&quot;0&quot; data-origin-height=&quot;0&quot; data-ke-mobilestyle=&quot;widthContent&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;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;/p&gt;
&lt;p data-ke-size=&quot;size18&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size18&quot;&gt;그럼 언어를 변경할 수 있는 화면이 나오게 됩니다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size18&quot;&gt;여기서 한국어를 클릭해 줍니다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size18&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-origin-width=&quot;0&quot; data-origin-height=&quot;0&quot; data-ke-mobilestyle=&quot;widthContent&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/bfUEff/btqGuyDcZOy/WVyjAIynkbKOGjVIlvEuK1/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/bfUEff/btqGuyDcZOy/WVyjAIynkbKOGjVIlvEuK1/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/bfUEff/btqGuyDcZOy/WVyjAIynkbKOGjVIlvEuK1/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FbfUEff%2FbtqGuyDcZOy%2FWVyjAIynkbKOGjVIlvEuK1%2Fimg.png&quot; data-origin-width=&quot;0&quot; data-origin-height=&quot;0&quot; data-ke-mobilestyle=&quot;widthContent&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;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;/p&gt;
&lt;p data-ke-size=&quot;size18&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size18&quot;&gt;&lt;span style=&quot;color: #333333;&quot;&gt;그럼 웹과 마찬가지로 진짜로 언어를 한국어로 변경할 것이냐는 팝업창이 뜨게 됩니다.&lt;/span&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size18&quot;&gt;&lt;span style=&quot;color: #333333;&quot;&gt;여기서 Update를 클릭해 줍니다.&lt;/span&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size18&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-origin-width=&quot;0&quot; data-origin-height=&quot;0&quot; data-ke-mobilestyle=&quot;widthContent&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/SJr9p/btqGxwRJoCW/FQel1Gt9Wjo2bjONOZKy4K/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/SJr9p/btqGxwRJoCW/FQel1Gt9Wjo2bjONOZKy4K/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/SJr9p/btqGxwRJoCW/FQel1Gt9Wjo2bjONOZKy4K/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FSJr9p%2FbtqGxwRJoCW%2FFQel1Gt9Wjo2bjONOZKy4K%2Fimg.png&quot; data-origin-width=&quot;0&quot; data-origin-height=&quot;0&quot; data-ke-mobilestyle=&quot;widthContent&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;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;/p&gt;
&lt;p data-ke-size=&quot;size18&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size18&quot;&gt;&lt;span style=&quot;color: #333333;&quot;&gt;그럼? 어라? 그대로 영어 입니다.&lt;/span&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size18&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-origin-width=&quot;0&quot; data-origin-height=&quot;0&quot; data-ke-mobilestyle=&quot;widthContent&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/oef02/btqGywwY20M/Tlpklw3MXsD7GcJplSPUvK/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/oef02/btqGywwY20M/Tlpklw3MXsD7GcJplSPUvK/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/oef02/btqGywwY20M/Tlpklw3MXsD7GcJplSPUvK/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2Foef02%2FbtqGywwY20M%2FTlpklw3MXsD7GcJplSPUvK%2Fimg.png&quot; data-origin-width=&quot;0&quot; data-origin-height=&quot;0&quot; data-ke-mobilestyle=&quot;widthContent&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;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;/p&gt;
&lt;p data-ke-size=&quot;size18&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size18&quot;&gt;이게 아직 업데이트 초기라 그런지 바로 변경이 안되더라구요&lt;/p&gt;
&lt;p data-ke-size=&quot;size18&quot;&gt;하지만 걱정하지 마세요 해결 방법은 있습니다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size18&quot;&gt;프로그램을 껐다 다시 켜 볼까요?&lt;/p&gt;
&lt;p data-ke-size=&quot;size18&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-origin-width=&quot;0&quot; data-origin-height=&quot;0&quot; data-ke-mobilestyle=&quot;widthContent&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/slbps/btqGuwSXW6a/1stenYCk59fQZng6kbKQfk/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/slbps/btqGuwSXW6a/1stenYCk59fQZng6kbKQfk/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/slbps/btqGuwSXW6a/1stenYCk59fQZng6kbKQfk/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2Fslbps%2FbtqGuwSXW6a%2F1stenYCk59fQZng6kbKQfk%2Fimg.png&quot; data-origin-width=&quot;0&quot; data-origin-height=&quot;0&quot; data-ke-mobilestyle=&quot;widthContent&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;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;/p&gt;
&lt;p data-ke-size=&quot;size18&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size18&quot;&gt;&lt;span style=&quot;color: #333333;&quot;&gt;짜잔 한국어 설정이 완료 되었습니다.&lt;/span&gt;&lt;span style=&quot;color: #333333;&quot;&gt;&lt;/span&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size18&quot;&gt;&lt;span style=&quot;color: #333333;&quot;&gt;이것으로 윈도우 프로그램에서도 한글로 사용할 수 있게 되었습니다.&lt;/span&gt;&lt;/p&gt;
&lt;hr contenteditable=&quot;false&quot; data-ke-type=&quot;horizontalRule&quot; data-ke-style=&quot;style1&quot; /&gt;
&lt;h2 data-ke-size=&quot;size26&quot;&gt;&lt;b&gt;&lt;span style=&quot;color: #333333;&quot;&gt;앱에서 노션(Notion)을 한글로 설정하는 방법&lt;/span&gt;&lt;/b&gt;&lt;/h2&gt;
&lt;p data-ke-size=&quot;size18&quot;&gt;사실 아쉽지만,,,, 앱에서는 언어를 변경할 수 없습니다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size18&quot;&gt;그럼 앱에서는 한국어 버전을 사용할 수 없는 걸까요?&lt;/p&gt;
&lt;p data-ke-size=&quot;size18&quot;&gt;당연히 아닙니다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size18&quot;&gt;사용할 수 있어요.&lt;/p&gt;
&lt;p data-ke-size=&quot;size18&quot;&gt;하지만 먼저 위 웹이나 프로그램에서의 한국어 변경 작업이 선행되어야 합니다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size18&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size18&quot;&gt;그 후 Notion 앱을 실행시켜줍니다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size18&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-filename=&quot;blob&quot; data-origin-width=&quot;720&quot; data-origin-height=&quot;720&quot; data-ke-mobilestyle=&quot;widthContent&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/bgO1Dj/btqGxOSaWCE/79tQd2HBwXrrJ4fVGiWbfK/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/bgO1Dj/btqGxOSaWCE/79tQd2HBwXrrJ4fVGiWbfK/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/bgO1Dj/btqGxOSaWCE/79tQd2HBwXrrJ4fVGiWbfK/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FbgO1Dj%2FbtqGxOSaWCE%2F79tQd2HBwXrrJ4fVGiWbfK%2Fimg.png&quot; data-filename=&quot;blob&quot; data-origin-width=&quot;720&quot; data-origin-height=&quot;720&quot; data-ke-mobilestyle=&quot;widthContent&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;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;/p&gt;
&lt;p data-ke-size=&quot;size18&quot;&gt;그런 다음 아래와 같은 노션 창이 뜨게 됩니다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size18&quot;&gt;여기서 빨간 네모칸이 쳐져 있는 햄버거 메뉴를 클릭해 줍니다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size18&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-filename=&quot;b.jpg&quot; data-origin-width=&quot;720&quot; data-origin-height=&quot;1480&quot; data-ke-mobilestyle=&quot;widthContent&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/bPUopt/btqGtCey4Jl/2Qce8AF5QKMyuLBXIYj2U1/img.jpg&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/bPUopt/btqGtCey4Jl/2Qce8AF5QKMyuLBXIYj2U1/img.jpg&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/bPUopt/btqGtCey4Jl/2Qce8AF5QKMyuLBXIYj2U1/img.jpg&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FbPUopt%2FbtqGtCey4Jl%2F2Qce8AF5QKMyuLBXIYj2U1%2Fimg.jpg&quot; data-filename=&quot;b.jpg&quot; data-origin-width=&quot;720&quot; data-origin-height=&quot;1480&quot; data-ke-mobilestyle=&quot;widthContent&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;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;/p&gt;
&lt;p data-ke-size=&quot;size18&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size18&quot;&gt;그럼 아래와 같이 메뉴 화면이 뜨게 됩니다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size18&quot;&gt;여기서 빨간 네모칸이 쳐져 있는 워크스페이스 관리 창으로 들어갑니다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size18&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;&lt;figure class=&quot;imagegridblock&quot;&gt;
  &lt;div class=&quot;image-container&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/baFRuo/btqGvPEcB5W/3SwjtoeTpQUlsV5KvIeidk/img.jpg&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/baFRuo/btqGvPEcB5W/3SwjtoeTpQUlsV5KvIeidk/img.jpg&quot; data-filename=&quot;3.jpg&quot; data-origin-width=&quot;720&quot; data-origin-height=&quot;1480&quot; style=&quot;width: 49.4186%; margin-right: 10px;&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/baFRuo/btqGvPEcB5W/3SwjtoeTpQUlsV5KvIeidk/img.jpg&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FbaFRuo%2FbtqGvPEcB5W%2F3SwjtoeTpQUlsV5KvIeidk%2Fimg.jpg&quot; onerror=&quot;this.onerror=null; this.src='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png'; this.srcset='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png';&quot; loading=&quot;lazy&quot; width=&quot;720&quot; height=&quot;1480&quot;/&gt;&lt;/span&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/cpw3A4/btqGxdkxzb0/l3oyZM0jMAUAinFpw5MGBK/img.jpg&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/cpw3A4/btqGxdkxzb0/l3oyZM0jMAUAinFpw5MGBK/img.jpg&quot; data-filename=&quot;c.jpg&quot; data-origin-width=&quot;720&quot; data-origin-height=&quot;1480&quot; style=&quot;width: 49.4186%;&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/cpw3A4/btqGxdkxzb0/l3oyZM0jMAUAinFpw5MGBK/img.jpg&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2Fcpw3A4%2FbtqGxdkxzb0%2Fl3oyZM0jMAUAinFpw5MGBK%2Fimg.jpg&quot; onerror=&quot;this.onerror=null; this.src='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png'; this.srcset='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png';&quot; loading=&quot;lazy&quot; width=&quot;720&quot; height=&quot;1480&quot;/&gt;&lt;/span&gt;&lt;/div&gt;
&lt;/figure&gt;
&lt;/p&gt;
&lt;p data-ke-size=&quot;size18&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size18&quot;&gt;그럼 아래와 같은 화면이 나오는데&lt;/p&gt;
&lt;p data-ke-size=&quot;size18&quot;&gt;여기서 계정 로그아웃을 해줍니다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size14&quot;&gt;&lt;span style=&quot;color: #f89009;&quot;&gt;&lt;i&gt;(지금 화면이 한글인데.. 이건 한글화 후 찍은 사진이라 그렇습니다. 위치는 같으니 같은 위치를 클릭해 주세요)&lt;/i&gt;&lt;/span&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size18&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;&lt;figure class=&quot;imagegridblock&quot;&gt;
  &lt;div class=&quot;image-container&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/vrWbB/btqGuGng2nT/Qxq4WGKaxtNpLzKajhVC8k/img.jpg&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/vrWbB/btqGuGng2nT/Qxq4WGKaxtNpLzKajhVC8k/img.jpg&quot; data-filename=&quot;4.jpg&quot; data-origin-width=&quot;720&quot; data-origin-height=&quot;1480&quot; style=&quot;width: 49.4186%; margin-right: 10px;&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/vrWbB/btqGuGng2nT/Qxq4WGKaxtNpLzKajhVC8k/img.jpg&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FvrWbB%2FbtqGuGng2nT%2FQxq4WGKaxtNpLzKajhVC8k%2Fimg.jpg&quot; onerror=&quot;this.onerror=null; this.src='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png'; this.srcset='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png';&quot; loading=&quot;lazy&quot; width=&quot;720&quot; height=&quot;1480&quot;/&gt;&lt;/span&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/dBjsXv/btqGxnmXtUw/ARLVZF6KIzk5ckujSnuR70/img.jpg&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/dBjsXv/btqGxnmXtUw/ARLVZF6KIzk5ckujSnuR70/img.jpg&quot; data-filename=&quot;d.jpg&quot; data-origin-width=&quot;720&quot; data-origin-height=&quot;1480&quot; style=&quot;width: 49.4186%;&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/dBjsXv/btqGxnmXtUw/ARLVZF6KIzk5ckujSnuR70/img.jpg&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FdBjsXv%2FbtqGxnmXtUw%2FARLVZF6KIzk5ckujSnuR70%2Fimg.jpg&quot; onerror=&quot;this.onerror=null; this.src='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png'; this.srcset='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png';&quot; loading=&quot;lazy&quot; width=&quot;720&quot; height=&quot;1480&quot;/&gt;&lt;/span&gt;&lt;/div&gt;
&lt;/figure&gt;
&lt;/p&gt;
&lt;p data-ke-size=&quot;size18&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size18&quot;&gt;그런 다음 다시 로그인을 하면!!&lt;/p&gt;
&lt;p data-ke-size=&quot;size18&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-filename=&quot;5.jpg&quot; data-origin-width=&quot;720&quot; data-origin-height=&quot;1480&quot; data-ke-mobilestyle=&quot;widthContent&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/cth6xI/btqGvaaO4Em/YW1csHbxlJyt7z3UvmsNC1/img.jpg&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/cth6xI/btqGvaaO4Em/YW1csHbxlJyt7z3UvmsNC1/img.jpg&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/cth6xI/btqGvaaO4Em/YW1csHbxlJyt7z3UvmsNC1/img.jpg&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2Fcth6xI%2FbtqGvaaO4Em%2FYW1csHbxlJyt7z3UvmsNC1%2Fimg.jpg&quot; data-filename=&quot;5.jpg&quot; data-origin-width=&quot;720&quot; data-origin-height=&quot;1480&quot; data-ke-mobilestyle=&quot;widthContent&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;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;/p&gt;
&lt;p data-ke-size=&quot;size18&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size18&quot;&gt;짜잔 한글로 변경된 것을 확인할 수 있습니다.&lt;/p&gt;
&lt;hr contenteditable=&quot;false&quot; data-ke-type=&quot;horizontalRule&quot; data-ke-style=&quot;style3&quot; /&gt;
&lt;h2 data-ke-size=&quot;size26&quot;&gt;&lt;b&gt;마무리&lt;/b&gt;&lt;/h2&gt;
&lt;p data-ke-size=&quot;size18&quot;&gt;자 오늘은 이번에 나온 노션 한국어 설정하는 방법에 대해서 알아보았습니다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size18&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size18&quot;&gt;이 설정은 웹이나 윈도우 프로그램 중 한군데에서 한국어로 설정해 놓으면 전부 변하게 됩니다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size18&quot;&gt;앱같은 경우는 아직 업데이트가 제대로 안되어서 직접적으로 변경이 불가능 하므로 위 방법을 사용하시면 됩니다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size18&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size18&quot;&gt;축하 드립니다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size18&quot;&gt;이제 한국어 버전의 노션을 자유롭게 사용하시면 됩니다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size18&quot;&gt;&lt;span&gt;만약 포스트에 문제가 있거나 틀린부분이 있다면 댓글을 남겨주시기 바랍니다.&lt;/span&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size18&quot;&gt;&lt;span&gt;감사합니다.&lt;/span&gt;&lt;/p&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;</description>
      <category>리뷰 및 사용 TIP</category>
      <category>notion</category>
      <category>노션</category>
      <category>한국어</category>
      <category>한국어설정</category>
      <author>방현준</author>
      <guid isPermaLink="true">https://noogoonaa.tistory.com/82</guid>
      <comments>https://noogoonaa.tistory.com/82#entry82comment</comments>
      <pubDate>Tue, 11 Aug 2020 22:59:43 +0900</pubDate>
    </item>
    <item>
      <title>자바스크립트 &amp;quot;==&amp;quot; 과 &amp;quot;===&amp;quot;에 대해서 알아보자</title>
      <link>https://noogoonaa.tistory.com/81</link>
      <description>&lt;hr contenteditable=&quot;false&quot; data-ke-type=&quot;horizontalRule&quot; data-ke-style=&quot;style5&quot; /&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock widthContent&quot; data-filename=&quot;자바스크립트.png&quot; data-origin-width=&quot;700&quot; data-origin-height=&quot;525&quot; data-ke-mobilestyle=&quot;widthContent&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/cXyAdL/btqGtfXpOXJ/50jmtCNKVhzaDHjslLBbu0/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/cXyAdL/btqGtfXpOXJ/50jmtCNKVhzaDHjslLBbu0/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/cXyAdL/btqGtfXpOXJ/50jmtCNKVhzaDHjslLBbu0/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FcXyAdL%2FbtqGtfXpOXJ%2F50jmtCNKVhzaDHjslLBbu0%2Fimg.png&quot; data-filename=&quot;자바스크립트.png&quot; data-origin-width=&quot;700&quot; data-origin-height=&quot;525&quot; data-ke-mobilestyle=&quot;widthContent&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;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;/p&gt;
&lt;hr contenteditable=&quot;false&quot; data-ke-type=&quot;horizontalRule&quot; data-ke-style=&quot;style3&quot; /&gt;
&lt;p data-ke-size=&quot;size18&quot;&gt;&lt;span style=&quot;font-family: AppleSDGothicNeo-Regular, 'Malgun Gothic', '맑은 고딕', dotum, 돋움, sans-serif;&quot;&gt;Javascript를 공부하다 보면 == 과 ===이라는 연산자를 종종 보게 됩니다.&lt;/span&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size18&quot;&gt;&lt;span style=&quot;font-family: AppleSDGothicNeo-Regular, 'Malgun Gothic', '맑은 고딕', dotum, 돋움, sans-serif;&quot;&gt;이 연산자는 A와 B를 비교하는 연산자 인데,&lt;/span&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size18&quot;&gt;&lt;span style=&quot;font-family: AppleSDGothicNeo-Regular, 'Malgun Gothic', '맑은 고딕', dotum, 돋움, sans-serif;&quot;&gt;다른 언어들과는 다르게 자바스크립트는 ==이 존재하고 ===이 존재합니다.&lt;/span&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size18&quot;&gt;&lt;span style=&quot;font-family: AppleSDGothicNeo-Regular, 'Malgun Gothic', '맑은 고딕', dotum, 돋움, sans-serif;&quot;&gt;왜 자바스크립트는 이 두개의 연산자를 넣어두었을까요?&lt;/span&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size18&quot;&gt;&lt;span style=&quot;font-family: AppleSDGothicNeo-Regular, 'Malgun Gothic', '맑은 고딕', dotum, 돋움, sans-serif;&quot;&gt;오늘은 &quot;==&quot; 과 &quot;===&quot;에 대해서 알아보도록 하겠습니다.&lt;/span&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size18&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-filename=&quot;bf99a1z33xm21.png&quot; data-origin-width=&quot;640&quot; data-origin-height=&quot;987&quot; data-ke-mobilestyle=&quot;widthContent&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/ciuLuT/btqGusaRDZ7/Ifs1cbbaKDqyHeGKARN901/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/ciuLuT/btqGusaRDZ7/Ifs1cbbaKDqyHeGKARN901/img.png&quot; data-alt=&quot;a 는 0이다. b 는 0이다. 고로 a 는 b가 아니다... https://www.reddit.com/r/ProgrammerHumor/comments/b2lx9v/javascript_at_its_finest/&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/ciuLuT/btqGusaRDZ7/Ifs1cbbaKDqyHeGKARN901/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FciuLuT%2FbtqGusaRDZ7%2FIfs1cbbaKDqyHeGKARN901%2Fimg.png&quot; data-filename=&quot;bf99a1z33xm21.png&quot; data-origin-width=&quot;640&quot; data-origin-height=&quot;987&quot; data-ke-mobilestyle=&quot;widthContent&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;/&gt;&lt;/span&gt;&lt;figcaption&gt;a 는 0이다. b 는 0이다. 고로 a 는 b가 아니다... https://www.reddit.com/r/ProgrammerHumor/comments/b2lx9v/javascript_at_its_finest/&lt;/figcaption&gt;
&lt;/figure&gt;
&lt;/p&gt;
&lt;hr contenteditable=&quot;false&quot; data-ke-type=&quot;horizontalRule&quot; data-ke-style=&quot;style1&quot; /&gt;
&lt;h2 data-ke-size=&quot;size26&quot;&gt;&lt;b&gt;&lt;span style=&quot;font-family: AppleSDGothicNeo-Regular, 'Malgun Gothic', '맑은 고딕', dotum, 돋움, sans-serif;&quot;&gt;동등 연산자 ( == : &lt;span style=&quot;color: #333333;&quot;&gt;Equal Operator &lt;/span&gt;)&lt;/span&gt;&lt;/b&gt;&lt;/h2&gt;
&lt;p data-ke-size=&quot;size18&quot;&gt;&lt;span style=&quot;font-family: AppleSDGothicNeo-Regular, 'Malgun Gothic', '맑은 고딕', dotum, 돋움, sans-serif;&quot;&gt;해당 연산자는 비교 연산자로 &quot;&lt;span style=&quot;letter-spacing: 0px;&quot;&gt;A == B&quot; &lt;/span&gt;와 같은 형식으로 A와 B를 비교합니다.&lt;/span&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size18&quot;&gt;&lt;span style=&quot;font-family: AppleSDGothicNeo-Regular, 'Malgun Gothic', '맑은 고딕', dotum, 돋움, sans-serif;&quot;&gt;해당 연산자는 각 A와 B의 자료형이 같지 않아도 같아지도록 변환한 후 엄격 비교를 수행하는 역할을 합니다.&lt;/span&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size18&quot;&gt;&lt;span style=&quot;font-family: AppleSDGothicNeo-Regular, 'Malgun Gothic', '맑은 고딕', dotum, 돋움, sans-serif;&quot;&gt;만약 각 A, B가 모두 객체라면 이 A와 B가 같은 내부 참조를 바라보고 있는지를 체크합니다.&lt;/span&gt;&lt;/p&gt;
&lt;hr contenteditable=&quot;false&quot; data-ke-type=&quot;horizontalRule&quot; data-ke-style=&quot;style1&quot; /&gt;
&lt;h2 data-ke-size=&quot;size26&quot;&gt;&lt;b&gt;&lt;span style=&quot;font-family: AppleSDGothicNeo-Regular, 'Malgun Gothic', '맑은 고딕', dotum, 돋움, sans-serif;&quot;&gt;기본데이터 타입(&lt;span style=&quot;color: #333333;&quot;&gt;Primitive DataType&lt;/span&gt;) 동등 비교&lt;/span&gt;&lt;/b&gt;&lt;/h2&gt;
&lt;p data-ke-size=&quot;size18&quot;&gt;&lt;span style=&quot;font-family: AppleSDGothicNeo-Regular, 'Malgun Gothic', '맑은 고딕', dotum, 돋움, sans-serif;&quot;&gt;자 우리는 동등연산자의 이론적인 내용을 보았습니다.&lt;/span&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size18&quot;&gt;&lt;span style=&quot;font-family: AppleSDGothicNeo-Regular, 'Malgun Gothic', '맑은 고딕', dotum, 돋움, sans-serif;&quot;&gt;이 이론에서 기본데이터 타입을 동등연산자로 비교를 할때 가장 중요한 내용은 &quot;자료형이 같이 않아도 같아지도록 변환한 후 엄격 비교 수행&quot; 입니다.&lt;/span&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size18&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size18&quot;&gt;&lt;span style=&quot;font-family: AppleSDGothicNeo-Regular, 'Malgun Gothic', '맑은 고딕', dotum, 돋움, sans-serif;&quot;&gt;아직 잘 모르시겠다면, 백문이 불여일소스!!!&lt;/span&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size18&quot;&gt;&lt;span style=&quot;font-family: AppleSDGothicNeo-Regular, 'Malgun Gothic', '맑은 고딕', dotum, 돋움, sans-serif;&quot;&gt;소스를 한번 보면서 알아볼까요?&lt;/span&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size18&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size18&quot;&gt;&lt;span style=&quot;font-family: AppleSDGothicNeo-Regular, 'Malgun Gothic', '맑은 고딕', dotum, 돋움, sans-serif;&quot;&gt;&lt;iframe src=&quot;https://codesandbox.io/embed/practical-goodall-92vie?fontsize=14&amp;amp;hidenavigation=1&amp;amp;theme=dark&quot; width=&quot;100%&quot; height=&quot;500px&quot;&gt;&lt;/iframe&gt;&lt;/span&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size18&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size18&quot;&gt;&lt;span style=&quot;font-family: AppleSDGothicNeo-Regular, 'Malgun Gothic', '맑은 고딕', dotum, 돋움, sans-serif;&quot;&gt;위 소스에서 알 수 있듯이&lt;/span&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size18&quot;&gt;&lt;span style=&quot;font-family: AppleSDGothicNeo-Regular, 'Malgun Gothic', '맑은 고딕', dotum, 돋움, sans-serif;&quot;&gt;문자열로 되어져￼있는 &quot;1&quot; 혹은 &quot;0&quot; 같은 데이터와 숫자 1과 0 데이터가 같다는 것을 알 수 있습니다.&lt;/span&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size18&quot;&gt;&lt;span style=&quot;font-family: AppleSDGothicNeo-Regular, 'Malgun Gothic', '맑은 고딕', dotum, 돋움, sans-serif;&quot;&gt;왜 그럴까요?&lt;/span&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size18&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size18&quot;&gt;&lt;span style=&quot;font-family: AppleSDGothicNeo-Regular, 'Malgun Gothic', '맑은 고딕', dotum, 돋움, sans-serif;&quot;&gt;아까 위에서 말씀 드렸다시피,&lt;/span&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size18&quot;&gt;&lt;span style=&quot;font-family: AppleSDGothicNeo-Regular, 'Malgun Gothic', '맑은 고딕', dotum, 돋움, sans-serif;&quot;&gt;동등 연산자 같은 경우는 자료형이 같지 않아도 자료형이 같아지도록 변환한 후&lt;/span&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size18&quot;&gt;&lt;span style=&quot;font-family: AppleSDGothicNeo-Regular, 'Malgun Gothic', '맑은 고딕', dotum, 돋움, sans-serif;&quot;&gt;엄격비교를 수행하는 연산자 입니다.&lt;/span&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size18&quot;&gt;&lt;span style=&quot;font-family: AppleSDGothicNeo-Regular, 'Malgun Gothic', '맑은 고딕', dotum, 돋움, sans-serif;&quot;&gt;그렇기 때문에 데이터 타입이 달라도 true가 뜰 수 있는 이유입니다.&lt;/span&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size18&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size18&quot;&gt;&lt;span style=&quot;font-family: AppleSDGothicNeo-Regular, 'Malgun Gothic', '맑은 고딕', dotum, 돋움, sans-serif;&quot;&gt;하지만 '1 == &quot;true&quot;', '0 == &quot;false&quot;' 같이 문자열이 값과 다른경우는 false가 뜨게 됩니다.&lt;/span&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size18&quot;&gt;&lt;span style=&quot;font-family: AppleSDGothicNeo-Regular, 'Malgun Gothic', '맑은 고딕', dotum, 돋움, sans-serif;&quot;&gt;그러면 문자열 true를 숫자로 변경하면 1과 같다고 생각하는 분들이 많을겁니다.&lt;/span&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size18&quot;&gt;&lt;span style=&quot;font-family: AppleSDGothicNeo-Regular, 'Malgun Gothic', '맑은 고딕', dotum, 돋움, sans-serif;&quot;&gt;하지만 같지 않습니다. 아래사진을 먼저 볼까요?&lt;/span&gt;&lt;/p&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-origin-width=&quot;0&quot; data-origin-height=&quot;0&quot; data-ke-mobilestyle=&quot;widthContent&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/xfVtW/btqGtWXCTDu/N3rcVa8zSSAAWm9iNaYolK/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/xfVtW/btqGtWXCTDu/N3rcVa8zSSAAWm9iNaYolK/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/xfVtW/btqGtWXCTDu/N3rcVa8zSSAAWm9iNaYolK/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FxfVtW%2FbtqGtWXCTDu%2FN3rcVa8zSSAAWm9iNaYolK%2Fimg.png&quot; data-origin-width=&quot;0&quot; data-origin-height=&quot;0&quot; data-ke-mobilestyle=&quot;widthContent&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;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;/p&gt;
&lt;p data-ke-size=&quot;size18&quot;&gt;&lt;span style=&quot;font-family: AppleSDGothicNeo-Regular, 'Malgun Gothic', '맑은 고딕', dotum, 돋움, sans-serif;&quot;&gt;위에 대한 해답은 이 사진으로 해결이 가능할 것 같습니다.&lt;/span&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size18&quot;&gt;&lt;span style=&quot;font-family: AppleSDGothicNeo-Regular, 'Malgun Gothic', '맑은 고딕', dotum, 돋움, sans-serif;&quot;&gt;1 == NaN이 같을 순 없죠&lt;/span&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size14&quot;&gt;&lt;span style=&quot;color: #9d9d9d;&quot;&gt;&lt;i&gt;&lt;span style=&quot;font-family: AppleSDGothicNeo-Regular, 'Malgun Gothic', '맑은 고딕', dotum, 돋움, sans-serif;&quot;&gt;(사실 NaN은 어떠한 값과도 같을수 없습니다. 해당 부분은 아래에서 다시 설명 드리겠습니다)&lt;/span&gt;&lt;/i&gt;&lt;/span&gt;&lt;/p&gt;
&lt;hr contenteditable=&quot;false&quot; data-ke-type=&quot;horizontalRule&quot; data-ke-style=&quot;style1&quot; /&gt;
&lt;h2 data-ke-size=&quot;size26&quot;&gt;&lt;b&gt;&lt;span style=&quot;font-family: AppleSDGothicNeo-Regular, 'Malgun Gothic', '맑은 고딕', dotum, 돋움, sans-serif;&quot;&gt;&lt;span style=&quot;color: #333333;&quot;&gt;참조데이터 타입(Reference &lt;/span&gt;&lt;span style=&quot;color: #333333;&quot;&gt;DataType&lt;/span&gt;&lt;span style=&quot;color: #333333;&quot;&gt;) 동등 비교&lt;/span&gt;&lt;/span&gt;&lt;/b&gt;&lt;/h2&gt;
&lt;p data-ke-size=&quot;size18&quot;&gt;&lt;span style=&quot;font-family: AppleSDGothicNeo-Regular, 'Malgun Gothic', '맑은 고딕', dotum, 돋움, sans-serif;&quot;&gt;저희는 기본 데이터타입에서의 동등비교를 알아보았습니다.&lt;/span&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size18&quot;&gt;&lt;span style=&quot;font-family: AppleSDGothicNeo-Regular, 'Malgun Gothic', '맑은 고딕', dotum, 돋움, sans-serif;&quot;&gt;이제는 참조 데이터타입의 동등비교를 알아보도록 하겠습니다.&lt;/span&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size18&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size18&quot;&gt;&lt;span style=&quot;font-family: AppleSDGothicNeo-Regular, 'Malgun Gothic', '맑은 고딕', dotum, 돋움, sans-serif;&quot;&gt;이 참조데이터 타입에서 중요한 내용은 &quot;같은 &lt;span style=&quot;color: #333333;&quot;&gt;내부 참조를 바라보고 있는지를 체크&lt;/span&gt;&quot;라는 문구입니다.&lt;/span&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size18&quot;&gt;&lt;span style=&quot;font-family: AppleSDGothicNeo-Regular, 'Malgun Gothic', '맑은 고딕', dotum, 돋움, sans-serif;&quot;&gt;참조데이터 타입은 기본적으로 특정 메모리를 참조합니다.&lt;/span&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size18&quot;&gt;&lt;span style=&quot;font-family: AppleSDGothicNeo-Regular, 'Malgun Gothic', '맑은 고딕', dotum, 돋움, sans-serif;&quot;&gt;만약 C언어를 공부하셨던 분이시라면, 포인터 주소로 생각하시면 편하십니다.&lt;/span&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size18&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size18&quot;&gt;&lt;span style=&quot;font-family: AppleSDGothicNeo-Regular, 'Malgun Gothic', '맑은 고딕', dotum, 돋움, sans-serif;&quot;&gt;아직 이해가 잘 안갈꺼라고 생각합니다.&lt;/span&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size18&quot;&gt;&lt;span style=&quot;font-family: AppleSDGothicNeo-Regular, 'Malgun Gothic', '맑은 고딕', dotum, 돋움, sans-serif;&quot;&gt;소스를 한번 보도록 하죠.&lt;/span&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size18&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size18&quot;&gt;&lt;span style=&quot;font-family: AppleSDGothicNeo-Regular, 'Malgun Gothic', '맑은 고딕', dotum, 돋움, sans-serif;&quot;&gt;&lt;iframe src=&quot;https://codesandbox.io/embed/boring-fermi-8g5j1?fontsize=14&amp;amp;hidenavigation=1&amp;amp;theme=dark&quot; width=&quot;100%&quot; height=&quot;500px&quot;&gt;&lt;/iframe&gt;&lt;/span&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size18&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size18&quot;&gt;&lt;span style=&quot;font-family: AppleSDGothicNeo-Regular, 'Malgun Gothic', '맑은 고딕', dotum, 돋움, sans-serif;&quot;&gt;위 소스를 보면 각 객체와 배열 함수들을 초기화 하고 초기화한 데이터의 동등 비교를 수행합니다.&lt;/span&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size18&quot;&gt;&lt;span style=&quot;font-family: AppleSDGothicNeo-Regular, 'Malgun Gothic', '맑은 고딕', dotum, 돋움, sans-serif;&quot;&gt;이 참조 데이터타입 동등 비교는 기본 데이터타입에 비해 비교적 간단합니다.&lt;/span&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size18&quot;&gt;&lt;span style=&quot;font-family: AppleSDGothicNeo-Regular, 'Malgun Gothic', '맑은 고딕', dotum, 돋움, sans-serif;&quot;&gt;그냥 메모리 참조가 같은지 아닌지를 판단하면 되기 때문입니다.&lt;/span&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size18&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size18&quot;&gt;&lt;span style=&quot;font-family: AppleSDGothicNeo-Regular, 'Malgun Gothic', '맑은 고딕', dotum, 돋움, sans-serif;&quot;&gt;그래서 같은 데이터 값을 가지고 있는 a와 b를 d와 e, g와 h는 false가 나오고&lt;/span&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size18&quot;&gt;&lt;span style=&quot;font-family: AppleSDGothicNeo-Regular, 'Malgun Gothic', '맑은 고딕', dotum, 돋움, sans-serif;&quot;&gt;a가 참조하는 메모리를 c가 카피한 후 a == c를 실행했을 때 true가 나옵니다.&lt;/span&gt;&lt;/p&gt;
&lt;hr contenteditable=&quot;false&quot; data-ke-type=&quot;horizontalRule&quot; data-ke-style=&quot;style1&quot; /&gt;
&lt;h2 data-ke-size=&quot;size26&quot;&gt;&lt;b&gt;&lt;span style=&quot;font-family: AppleSDGothicNeo-Regular, 'Malgun Gothic', '맑은 고딕', dotum, 돋움, sans-serif;&quot;&gt;일치 연산자 ( === : Strict &lt;span style=&quot;color: #333333;&quot;&gt;Equal Operator &lt;/span&gt;)&lt;/span&gt;&lt;/b&gt;&lt;/h2&gt;
&lt;p data-ke-size=&quot;size18&quot;&gt;&lt;span style=&quot;font-family: AppleSDGothicNeo-Regular, 'Malgun Gothic', '맑은 고딕', dotum, 돋움, sans-serif;&quot;&gt;이 일치 연산자는&amp;nbsp;위의 동등 연산자처럼 형변환을 해서 같은지까지 확인하지 않습니다.&lt;/span&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size18&quot;&gt;&lt;span style=&quot;font-family: AppleSDGothicNeo-Regular, 'Malgun Gothic', '맑은 고딕', dotum, 돋움, sans-serif;&quot;&gt;그냥 자료형 변환없이 비교 대상이 엄격한 기준으로 같은지를 비교하기 때문입니다.&lt;/span&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size18&quot;&gt;&lt;span style=&quot;font-family: AppleSDGothicNeo-Regular, 'Malgun Gothic', '맑은 고딕', dotum, 돋움, sans-serif;&quot;&gt;물론 위 내용은 기본 데이터타입에 적용되는 이야기 이며&lt;/span&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size18&quot;&gt;&lt;span style=&quot;font-family: AppleSDGothicNeo-Regular, 'Malgun Gothic', '맑은 고딕', dotum, 돋움, sans-serif;&quot;&gt;참조 데이터타입 같은 경우는 동등연산자와 일치연산자 둘다 결과는 같습니다.&lt;/span&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size18&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size18&quot;&gt;&lt;span style=&quot;font-family: AppleSDGothicNeo-Regular, 'Malgun Gothic', '맑은 고딕', dotum, 돋움, sans-serif;&quot;&gt;예제를 한번 보도록 하겠습니다.&lt;/span&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size18&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size18&quot;&gt;&lt;span style=&quot;font-family: AppleSDGothicNeo-Regular, 'Malgun Gothic', '맑은 고딕', dotum, 돋움, sans-serif;&quot;&gt;&lt;iframe src=&quot;https://codesandbox.io/embed/vibrant-minsky-pznpp?fontsize=14&amp;amp;hidenavigation=1&amp;amp;theme=dark&quot; width=&quot;100%&quot; height=&quot;500px&quot;&gt;&lt;/iframe&gt;&lt;/span&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size18&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size18&quot;&gt;&lt;span style=&quot;font-family: AppleSDGothicNeo-Regular, 'Malgun Gothic', '맑은 고딕', dotum, 돋움, sans-serif;&quot;&gt;이 일치 연산자는 크게 어렵지 않아 기본데이터 타입과 참조 데이터타입을 같이 사용해 보았습니다.&lt;/span&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size18&quot;&gt;&lt;span style=&quot;color: #333333; font-family: AppleSDGothicNeo-Regular, 'Malgun Gothic', '맑은 고딕', dotum, 돋움, sans-serif;&quot;&gt;어떠신가요? 잘 이해가 되시나요?&lt;/span&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size18&quot;&gt;&lt;span style=&quot;font-family: AppleSDGothicNeo-Regular, 'Malgun Gothic', '맑은 고딕', dotum, 돋움, sans-serif;&quot;&gt;기본 데이터 타입 같은 경우는 값은 물론이고 데이터 타입까지 맞아야만 true를 반환해 줍니다.&lt;/span&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size18&quot;&gt;&lt;span style=&quot;font-family: AppleSDGothicNeo-Regular, 'Malgun Gothic', '맑은 고딕', dotum, 돋움, sans-serif;&quot;&gt;하지만 데이터 타입이 틀린경우는 가차없이 false를 반환하죠&lt;/span&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size18&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size18&quot;&gt;&lt;span style=&quot;font-family: AppleSDGothicNeo-Regular, 'Malgun Gothic', '맑은 고딕', dotum, 돋움, sans-serif;&quot;&gt;참조 데이터 타입은 위 동등 데이터와 같이 참조 메모리의 위치가 같은지를 체크하기 때문에 동등연산자와 같은 결과를 반환합니다.&lt;/span&gt;&lt;/p&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;
&lt;hr contenteditable=&quot;false&quot; data-ke-type=&quot;horizontalRule&quot; data-ke-style=&quot;style1&quot; /&gt;
&lt;h2 data-ke-size=&quot;size26&quot;&gt;&lt;b&gt;&lt;span style=&quot;font-family: AppleSDGothicNeo-Regular, 'Malgun Gothic', '맑은 고딕', dotum, 돋움, sans-serif;&quot;&gt;동등연산자 vs 일치연산자 차이&lt;/span&gt;&lt;/b&gt;&lt;/h2&gt;
&lt;p data-ke-size=&quot;size18&quot;&gt;&lt;span style=&quot;color: #333333; font-family: AppleSDGothicNeo-Regular, 'Malgun Gothic', '맑은 고딕', dotum, 돋움, sans-serif;&quot;&gt;자 여기까지 따라오셨으면 이 동등연산자와 일치연산자의 차이를 어느정도 알 수 있을것입니다.&lt;/span&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size18&quot;&gt;&lt;span style=&quot;color: #333333; font-family: AppleSDGothicNeo-Regular, 'Malgun Gothic', '맑은 고딕', dotum, 돋움, sans-serif;&quot;&gt;그럼 한번 정리해 보도록 하겠습니다.&lt;/span&gt;&lt;/p&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-filename=&quot;Screenshot_1.png&quot; data-origin-width=&quot;1415&quot; data-origin-height=&quot;599&quot; data-ke-mobilestyle=&quot;widthContent&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/bFiXWe/btqGsMBbDAE/yZPXZObUoMPv4o9fSCwEIk/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/bFiXWe/btqGsMBbDAE/yZPXZObUoMPv4o9fSCwEIk/img.png&quot; data-alt=&quot;자체 제작&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/bFiXWe/btqGsMBbDAE/yZPXZObUoMPv4o9fSCwEIk/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FbFiXWe%2FbtqGsMBbDAE%2FyZPXZObUoMPv4o9fSCwEIk%2Fimg.png&quot; data-filename=&quot;Screenshot_1.png&quot; data-origin-width=&quot;1415&quot; data-origin-height=&quot;599&quot; data-ke-mobilestyle=&quot;widthContent&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;/&gt;&lt;/span&gt;&lt;figcaption&gt;자체 제작&lt;/figcaption&gt;
&lt;/figure&gt;
&lt;/p&gt;
&lt;h4 data-ke-size=&quot;size20&quot;&gt;&lt;i&gt;&lt;b&gt;&lt;span style=&quot;font-family: AppleSDGothicNeo-Regular, 'Malgun Gothic', '맑은 고딕', dotum, 돋움, sans-serif;&quot;&gt;동등연산자 ( == : Equal Operator )&lt;/span&gt;&lt;/b&gt;&lt;/i&gt;&lt;/h4&gt;
&lt;ul style=&quot;list-style-type: circle;&quot; data-ke-list-type=&quot;circle&quot;&gt;
&lt;li&gt;
&lt;p data-ke-size=&quot;size18&quot;&gt;&lt;i&gt;&lt;span style=&quot;font-family: AppleSDGothicNeo-Regular, 'Malgun Gothic', '맑은 고딕', dotum, 돋움, sans-serif;&quot;&gt;비교데이터의 타입을 같은 타입으로 강제 변환하여 값을 비교하는 연산자&lt;/span&gt;&lt;/i&gt;&lt;/p&gt;
&lt;/li&gt;
&lt;/ul&gt;
&lt;h4 data-ke-size=&quot;size20&quot;&gt;&lt;i&gt;&lt;b&gt;&lt;span style=&quot;font-family: AppleSDGothicNeo-Regular, 'Malgun Gothic', '맑은 고딕', dotum, 돋움, sans-serif;&quot;&gt;일치 연산자 ( === : Strict&amp;nbsp;Equal Operator)&lt;/span&gt;&lt;/b&gt;&lt;/i&gt;&lt;/h4&gt;
&lt;ul style=&quot;list-style-type: circle;&quot; data-ke-list-type=&quot;circle&quot;&gt;
&lt;li&gt;
&lt;p data-ke-size=&quot;size18&quot;&gt;&lt;i&gt;&lt;span style=&quot;font-family: AppleSDGothicNeo-Regular, 'Malgun Gothic', '맑은 고딕', dotum, 돋움, sans-serif;&quot;&gt;비교데이터의 타입과 값이 맞는지를 비교하는 연산자&lt;/span&gt;&lt;/i&gt;&lt;/p&gt;
&lt;/li&gt;
&lt;/ul&gt;
&lt;hr contenteditable=&quot;false&quot; data-ke-type=&quot;horizontalRule&quot; data-ke-style=&quot;style1&quot; /&gt;
&lt;h2 data-ke-size=&quot;size26&quot;&gt;&lt;b&gt;&lt;span style=&quot;font-family: AppleSDGothicNeo-Regular, 'Malgun Gothic', '맑은 고딕', dotum, 돋움, sans-serif;&quot;&gt;NaN(Not a Number)은 어떠한 데이터와도 비교를 할 수 없다!!!&lt;/span&gt;&lt;/b&gt;&lt;/h2&gt;
&lt;p data-ke-size=&quot;size18&quot;&gt;&lt;span style=&quot;font-family: AppleSDGothicNeo-Regular, 'Malgun Gothic', '맑은 고딕', dotum, 돋움, sans-serif;&quot;&gt;맞습니다. 말 그대로 NaN&lt;span style=&quot;color: #333333;&quot;&gt;(&lt;/span&gt;&lt;span style=&quot;color: #333333;&quot;&gt;Not a Number&lt;/span&gt;&lt;span style=&quot;color: #333333;&quot;&gt;)&lt;/span&gt;은 어떠한 데이터와도 비교할 수 없는 값 입니다.&lt;/span&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size18&quot;&gt;&lt;span style=&quot;font-family: AppleSDGothicNeo-Regular, 'Malgun Gothic', '맑은 고딕', dotum, 돋움, sans-serif;&quot;&gt;심지어 NaN == NaN 이 두개도 false로 나오게 됩니다.&lt;/span&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size18&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size18&quot;&gt;&lt;span style=&quot;font-family: AppleSDGothicNeo-Regular, 'Malgun Gothic', '맑은 고딕', dotum, 돋움, sans-serif;&quot;&gt;사실 왜 이렇게 되는지는 아직 정확히 잘 모르겠다.&lt;/span&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size18&quot;&gt;&lt;span style=&quot;font-family: AppleSDGothicNeo-Regular, 'Malgun Gothic', '맑은 고딕', dotum, 돋움, sans-serif;&quot;&gt;그래도 찾아본 것을 설명하자면&lt;/span&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size18&quot;&gt;&lt;span style=&quot;font-family: AppleSDGothicNeo-Regular, 'Malgun Gothic', '맑은 고딕', dotum, 돋움, sans-serif;&quot;&gt;컴퓨너 연산에서 NaN은 부동 소수점 연산에서 사용되는에 &lt;span style=&quot;color: #333333;&quot;&gt;부동 소수점 숫자에 대한 IEEE 754 규격은 NaNs이 같지 않기 때문이라고 합니다.&lt;/span&gt;&lt;/span&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size14&quot;&gt;&lt;span style=&quot;color: #9d9d9d;&quot;&gt;&lt;i&gt;&lt;span style=&quot;font-family: AppleSDGothicNeo-Regular, 'Malgun Gothic', '맑은 고딕', dotum, 돋움, sans-serif;&quot;&gt;(이게 정확한지는 나도 잘... 아시는 분 있으면 알려줘요 ㅠㅠ)&lt;/span&gt;&lt;/i&gt;&lt;/span&gt;&lt;/p&gt;
&lt;hr contenteditable=&quot;false&quot; data-ke-type=&quot;horizontalRule&quot; data-ke-style=&quot;style1&quot; /&gt;
&lt;h2 data-ke-size=&quot;size26&quot;&gt;&lt;b&gt;&lt;span style=&quot;font-family: AppleSDGothicNeo-Regular, 'Malgun Gothic', '맑은 고딕', dotum, 돋움, sans-serif;&quot;&gt;마무리&lt;/span&gt;&lt;/b&gt;&lt;/h2&gt;
&lt;p data-ke-size=&quot;size18&quot;&gt;&lt;span style=&quot;font-family: AppleSDGothicNeo-Regular, 'Malgun Gothic', '맑은 고딕', dotum, 돋움, sans-serif;&quot;&gt;오늘은 동등연산자와 일치연산자에 대해서 알아보았습니다.&lt;/span&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size18&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size18&quot;&gt;&lt;span style=&quot;font-family: AppleSDGothicNeo-Regular, 'Malgun Gothic', '맑은 고딕', dotum, 돋움, sans-serif;&quot;&gt;사실 실무에선 동등연산자보단 일치연산자를 많이 사용합니다.&lt;/span&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size18&quot;&gt;&lt;span style=&quot;font-family: AppleSDGothicNeo-Regular, 'Malgun Gothic', '맑은 고딕', dotum, 돋움, sans-serif;&quot;&gt;왜냐하면 유지보수하기도 좋고, 코드의 직관성을 높여주는 등 다양한 이점이 있기 때문입니다.&lt;/span&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size18&quot;&gt;&lt;span style=&quot;font-family: AppleSDGothicNeo-Regular, 'Malgun Gothic', '맑은 고딕', dotum, 돋움, sans-serif;&quot;&gt;그래서 자바스크립트에서도 일치연산자를 사용하는것을 권장합니다.&lt;/span&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size18&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size18&quot;&gt;&lt;span style=&quot;font-family: AppleSDGothicNeo-Regular, 'Malgun Gothic', '맑은 고딕', dotum, 돋움, sans-serif;&quot;&gt;그렇기 때문에 이 글을 보는 개발자 분들도 동등연산자 보단 일치 연산자를 쓰시길 권장 드리며,&lt;/span&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size18&quot;&gt;&lt;span style=&quot;font-family: AppleSDGothicNeo-Regular, 'Malgun Gothic', '맑은 고딕', dotum, 돋움, sans-serif;&quot;&gt;어느정도 동등연산자와 일치연산자의 차이는 알아두면 좋기 때문에 이 포스팅을 훑어본다는 느낌으로 보시길 바랍니다.&lt;/span&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size18&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size18&quot;&gt;&lt;span style=&quot;font-family: AppleSDGothicNeo-Regular, 'Malgun Gothic', '맑은 고딕', dotum, 돋움, sans-serif;&quot;&gt;만약 포스트에 문제가 있거나 틀린부분이 있다면 댓글을 남겨주시기 바랍니다.&lt;/span&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size18&quot;&gt;&lt;span style=&quot;font-family: AppleSDGothicNeo-Regular, 'Malgun Gothic', '맑은 고딕', dotum, 돋움, sans-serif;&quot;&gt;감사합니다.&lt;/span&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size18&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;</description>
      <category>프로그래밍 언어/웹 프론트엔드</category>
      <category>JavaScript</category>
      <author>방현준</author>
      <guid isPermaLink="true">https://noogoonaa.tistory.com/81</guid>
      <comments>https://noogoonaa.tistory.com/81#entry81comment</comments>
      <pubDate>Tue, 11 Aug 2020 02:38:15 +0900</pubDate>
    </item>
    <item>
      <title>TDZ(Temporal Dead Zone)이란?</title>
      <link>https://noogoonaa.tistory.com/78</link>
      <description>&lt;hr contenteditable=&quot;false&quot; data-ke-type=&quot;horizontalRule&quot; data-ke-style=&quot;style5&quot; /&gt;
&lt;h2 data-ke-size=&quot;size26&quot;&gt;&lt;span style=&quot;color: #ee2323;&quot;&gt;&lt;i&gt;&lt;b&gt;함께보면 좋은 글&lt;/b&gt;&lt;/i&gt;&lt;/span&gt;&lt;/h2&gt;
&lt;ul style=&quot;list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li&gt;
&lt;p data-ke-size=&quot;size18&quot;&gt;&lt;a href=&quot;https://noogoonaa.tistory.com/76&quot; target=&quot;_blank&quot; rel=&quot;noopener&quot;&gt;2020/07/05 - [프로그래밍 언어/Javascript] - 자바스크립트 호이스팅(Hoisting)이란?&lt;/a&gt;&lt;/p&gt;
&lt;/li&gt;
&lt;/ul&gt;
&lt;hr contenteditable=&quot;false&quot; data-ke-type=&quot;horizontalRule&quot; data-ke-style=&quot;style5&quot; /&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-filename=&quot;자바스크립트.png&quot; data-origin-width=&quot;700&quot; data-origin-height=&quot;525&quot; data-ke-mobilestyle=&quot;widthContent&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/cbKPvD/btqFNsi8oxn/OicTxLUThg1XhjAKZoGr1k/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/cbKPvD/btqFNsi8oxn/OicTxLUThg1XhjAKZoGr1k/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/cbKPvD/btqFNsi8oxn/OicTxLUThg1XhjAKZoGr1k/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FcbKPvD%2FbtqFNsi8oxn%2FOicTxLUThg1XhjAKZoGr1k%2Fimg.png&quot; data-filename=&quot;자바스크립트.png&quot; data-origin-width=&quot;700&quot; data-origin-height=&quot;525&quot; data-ke-mobilestyle=&quot;widthContent&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;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;/p&gt;
&lt;p data-ke-size=&quot;size18&quot;&gt;오늘은 TDZ(Temporal Dead Zone)에 대해서 알아보도록 하겠습니다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size18&quot;&gt;이번 포스팅은 자바스크립트의 호이스팅 개념이 어느정도 있어야 하는 부분입니다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size18&quot;&gt;만약 호이스팅을 모를경우 위 함께보면 좋은 글 링크를 참고해 주세요&lt;/p&gt;
&lt;hr contenteditable=&quot;false&quot; data-ke-type=&quot;horizontalRule&quot; data-ke-style=&quot;style3&quot; /&gt;
&lt;p data-ke-size=&quot;size18&quot;&gt;여러분들은 변수를 선언할 때 var를 사용하면 호이스팅이 된다는것을 알고 있습니까?&lt;/p&gt;
&lt;p data-ke-size=&quot;size18&quot;&gt;그럼 과연 let과 const는 호이스팅이 될까요? 안 될까요?&lt;/p&gt;
&lt;p data-ke-size=&quot;size18&quot;&gt;정답은?? 두구두구두구.... 됩니다.!!!&lt;/p&gt;
&lt;p data-ke-size=&quot;size18&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-filename=&quot;5e3127eb153fad5ce8180c475de4b00a.jpg&quot; data-origin-width=&quot;565&quot; data-origin-height=&quot;497&quot; data-ke-mobilestyle=&quot;widthContent&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/bKeLXk/btqFNgwtW9i/FkMcPWN2j3lALx82XgDIiK/img.jpg&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/bKeLXk/btqFNgwtW9i/FkMcPWN2j3lALx82XgDIiK/img.jpg&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/bKeLXk/btqFNgwtW9i/FkMcPWN2j3lALx82XgDIiK/img.jpg&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FbKeLXk%2FbtqFNgwtW9i%2FFkMcPWN2j3lALx82XgDIiK%2Fimg.jpg&quot; data-filename=&quot;5e3127eb153fad5ce8180c475de4b00a.jpg&quot; data-origin-width=&quot;565&quot; data-origin-height=&quot;497&quot; data-ke-mobilestyle=&quot;widthContent&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;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;/p&gt;
&lt;hr contenteditable=&quot;false&quot; data-ke-type=&quot;horizontalRule&quot; data-ke-style=&quot;style1&quot; /&gt;
&lt;h2 data-ke-size=&quot;size26&quot;&gt;&lt;b&gt;TDZ&lt;span style=&quot;color: #333333;&quot;&gt;(Temporal Dead Zone) 란?&lt;/span&gt;&lt;/b&gt;&lt;/h2&gt;
&lt;p data-ke-size=&quot;size18&quot;&gt;먼저 let과 const가 왜 호이스팅이 되는지를 알기 전에,&lt;/p&gt;
&lt;p data-ke-size=&quot;size18&quot;&gt;이 TDZ에 의미에 대해서 알아보도록 하겠습니다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size18&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size18&quot;&gt;TDZ&lt;span style=&quot;color: #333333;&quot;&gt;(Temporal Dead Zone) 란, &lt;/span&gt;한글로 직역하자면 일시적인 사각지대란 뜻입니다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size18&quot;&gt;이 일시적인 사각지대는 스코프의 시작 지점부터 초기화 시작 지점까지의 구간을 &lt;span style=&quot;letter-spacing: 0px;&quot;&gt;TDZ&lt;/span&gt;&lt;span style=&quot;color: #333333;&quot;&gt;(Temporal Dead Zone) 라고합니다.&lt;/span&gt;&lt;/p&gt;
&lt;hr contenteditable=&quot;false&quot; data-ke-type=&quot;horizontalRule&quot; data-ke-style=&quot;style1&quot; /&gt;
&lt;h2 data-ke-size=&quot;size26&quot;&gt;&lt;b&gt;&lt;span style=&quot;color: #333333;&quot;&gt;변수 선언의 3단계&lt;/span&gt;&lt;/b&gt;&lt;/h2&gt;
&lt;p data-ke-size=&quot;size18&quot;&gt;자 사실 TDZ는 위의 내용으로 모든것을 설명할 수 있습니다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size18&quot;&gt;하지만 여전히 잘 모르겠습니다... 좀 더 깊게 들어가 볼까요?&lt;/p&gt;
&lt;p data-ke-size=&quot;size18&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size18&quot;&gt;javascript에서의 변수는 위의 사진처럼 선언, 초기화, 할당이라는 3가지 단계의 걸쳐서 생성됩니다.&lt;/p&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-filename=&quot;1-1.jpg&quot; data-origin-width=&quot;864&quot; data-origin-height=&quot;807&quot; data-ke-mobilestyle=&quot;widthContent&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/CfdPQ/btqFNFCCfWu/EBd8c7QUZLSChL2AVVaiyK/img.jpg&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/CfdPQ/btqFNFCCfWu/EBd8c7QUZLSChL2AVVaiyK/img.jpg&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/CfdPQ/btqFNFCCfWu/EBd8c7QUZLSChL2AVVaiyK/img.jpg&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FCfdPQ%2FbtqFNFCCfWu%2FEBd8c7QUZLSChL2AVVaiyK%2Fimg.jpg&quot; data-filename=&quot;1-1.jpg&quot; data-origin-width=&quot;864&quot; data-origin-height=&quot;807&quot; data-ke-mobilestyle=&quot;widthContent&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;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;/p&gt;
&lt;ul style=&quot;list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li&gt;
&lt;p data-ke-size=&quot;size18&quot;&gt;&lt;span style=&quot;color: #ee2323;&quot;&gt;&lt;b&gt; 선언 단계(Declaration phase) :&lt;/b&gt; &lt;/span&gt;변수를 실행 컨텍스트의 변수 객체에 등록하는 단계를 의미합니다. 이 변수 객체는 스코프가 참조하는 대상이 됩니다.&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p data-ke-size=&quot;size18&quot;&gt;&lt;span style=&quot;color: #409d00;&quot;&gt;&lt;b&gt;초기화 단계(Initialization phase) :&lt;/b&gt; &lt;/span&gt;실행 컨텍스트에 존재 하는 변수 객체에 선언 단계의 변수를 위한 메모리를 만드는 단계 입니다. 이 단계에서 할당된 메모리에는 undefined로 초기화 됩니다.&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p data-ke-size=&quot;size18&quot;&gt;&lt;span style=&quot;color: #006dd7;&quot;&gt;&lt;b&gt;할당 단계&lt;/b&gt;&lt;/span&gt;&lt;span style=&quot;color: #333333;&quot;&gt;&lt;span style=&quot;color: #006dd7;&quot;&gt;&lt;b&gt;(Assignment phase) :&lt;/b&gt;&lt;/span&gt; 사용자가 undefined로 초기화된 메모리의 다른 값을 할당하는 단계 입니다.&amp;nbsp;&lt;/span&gt;&lt;/p&gt;
&lt;/li&gt;
&lt;/ul&gt;
&lt;p data-ke-size=&quot;size18&quot;&gt;여태까지 저희는 var혹은 let/const를 그냥 사용하였지만&lt;/p&gt;
&lt;p data-ke-size=&quot;size18&quot;&gt;사실은 위 3가지 단계를 거쳐서 생성되는 것 이었습니다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size18&quot;&gt;그리고 var와 let/const의 차이는 이 3가지 단계의 순서에 차이가 존재합니다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size18&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size18&quot;&gt;먼저 var 변수의 라이프사이클을 알아보도록하겠습니다.&lt;/p&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-filename=&quot;2.jpg&quot; data-origin-width=&quot;920&quot; data-origin-height=&quot;916&quot; data-ke-mobilestyle=&quot;widthContent&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/cpN7ly/btqFMImMjbi/Xax5yU47pHIffGGf6BYetk/img.jpg&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/cpN7ly/btqFMImMjbi/Xax5yU47pHIffGGf6BYetk/img.jpg&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/cpN7ly/btqFMImMjbi/Xax5yU47pHIffGGf6BYetk/img.jpg&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FcpN7ly%2FbtqFMImMjbi%2FXax5yU47pHIffGGf6BYetk%2Fimg.jpg&quot; data-filename=&quot;2.jpg&quot; data-origin-width=&quot;920&quot; data-origin-height=&quot;916&quot; data-ke-mobilestyle=&quot;widthContent&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;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;/p&gt;
&lt;p data-ke-size=&quot;size18&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size18&quot;&gt;&lt;span style=&quot;color: #333333;&quot;&gt;위 사진은 var 키워드 변수의 라이프 사이클 입니다.&lt;/span&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size18&quot;&gt;&lt;span style=&quot;color: #333333;&quot;&gt;var 키워드 변수는 변수 선언전에 선언 단계와 초기화 단계를 동시에 진행합니다.&lt;/span&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size18&quot;&gt;&lt;span style=&quot;color: #333333;&quot;&gt;그래서 javascript는 실행 컨텍스트 변수 객체의 변수를 등록하고 &lt;/span&gt;&lt;span style=&quot;color: #333333;&quot;&gt;메모리를 undefined로 만들어 버립니다.&lt;/span&gt;&lt;span style=&quot;color: #333333;&quot;&gt;&lt;/span&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size18&quot;&gt;&lt;span style=&quot;color: #333333;&quot;&gt;그렇기 때문에 변수를 선언하기 전에 호출을 해도 undefined로 호출이 되는 호이스팅이 발생하는 것 입니다.&lt;/span&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size18&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size18&quot;&gt;그렇다면 let의 라이프 사이클을 한번 봐보도록 하겠습니다.&lt;/p&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-filename=&quot;4.jpg&quot; data-origin-width=&quot;920&quot; data-origin-height=&quot;933&quot; data-ke-mobilestyle=&quot;widthContent&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/brfyzo/btqFMHahg20/O4al3vnYiNideb03m6xB60/img.jpg&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/brfyzo/btqFMHahg20/O4al3vnYiNideb03m6xB60/img.jpg&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/brfyzo/btqFMHahg20/O4al3vnYiNideb03m6xB60/img.jpg&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2Fbrfyzo%2FbtqFMHahg20%2FO4al3vnYiNideb03m6xB60%2Fimg.jpg&quot; data-filename=&quot;4.jpg&quot; data-origin-width=&quot;920&quot; data-origin-height=&quot;933&quot; data-ke-mobilestyle=&quot;widthContent&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;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;/p&gt;
&lt;p data-ke-size=&quot;size18&quot;&gt;let으로 선언된 변수는 var 키워드와는 다르게 선언단계와 초기화 단계가 분리되어서 진행이 됩니다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size18&quot;&gt;그렇기 때문에 실행 컨텍스트에 변수를 등록했지만,&lt;/p&gt;
&lt;p data-ke-size=&quot;size18&quot;&gt;메모리가 할당이 되질 않아 접근할 수 없어&amp;nbsp;&lt;span style=&quot;color: #333333;&quot;&gt;참조 에러(ReferenceError)가 발생하는 것 이고, &lt;/span&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size18&quot;&gt;&lt;span style=&quot;color: #333333;&quot;&gt;이것을 보고 우리가 호이스팅이 되질 않는다!! 라고 오해할 수 밖에 없었던 것 입니다.&lt;/span&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size18&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size18&quot;&gt;그럼 우리가 처음 말했던 TDZ에 대해서 다시한번 알아보도록 하겠습니다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size18&quot;&gt;TDZ는 &lt;span style=&quot;color: #333333;&quot;&gt;스코프의 시작 지점부터 초기화 시작 지점까지의 구간을 말합니다.&lt;/span&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size18&quot;&gt;&lt;span style=&quot;color: #333333;&quot;&gt;어때요 이제는 위 말이 잘 이해가 가실거라 생각이 듭니다.&lt;/span&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size18&quot;&gt;&lt;span style=&quot;color: #333333;&quot;&gt;즉, let 또한 선언전, 실행 컨텍스트 변수 객체에 등록이 되어 호이스팅이 되지만,&lt;/span&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size18&quot;&gt;&lt;span style=&quot;color: #333333;&quot;&gt;이 TDZ 구간에 의해 메모리가 할당이 되질 않아 &lt;span style=&quot;color: #333333;&quot;&gt;참조 에러(ReferenceError) 발생하는 것 입니다.&lt;/span&gt;&lt;/span&gt;&lt;/p&gt;
&lt;hr contenteditable=&quot;false&quot; data-ke-type=&quot;horizontalRule&quot; data-ke-style=&quot;style1&quot; /&gt;
&lt;p data-ke-size=&quot;size18&quot;&gt;&lt;span style=&quot;color: #333333;&quot;&gt;참고로 function 키워드 함수는 아래 사진과 같이 변수선언 3단계를 동시에 진행해 버립니다....&lt;/span&gt;&lt;/p&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-filename=&quot;3.webp&quot; data-origin-width=&quot;650&quot; data-origin-height=&quot;465&quot; data-ke-mobilestyle=&quot;widthContent&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/L4IXl/btqFNPydemy/WqwtWgxdhHKZZ3xylTcJpK/img.webp&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/L4IXl/btqFNPydemy/WqwtWgxdhHKZZ3xylTcJpK/img.webp&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/L4IXl/btqFNPydemy/WqwtWgxdhHKZZ3xylTcJpK/img.webp&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FL4IXl%2FbtqFNPydemy%2FWqwtWgxdhHKZZ3xylTcJpK%2Fimg.webp&quot; data-filename=&quot;3.webp&quot; data-origin-width=&quot;650&quot; data-origin-height=&quot;465&quot; data-ke-mobilestyle=&quot;widthContent&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;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;/p&gt;
&lt;hr contenteditable=&quot;false&quot; data-ke-type=&quot;horizontalRule&quot; data-ke-style=&quot;style3&quot; /&gt;
&lt;h2 data-ke-size=&quot;size26&quot;&gt;&lt;span&gt;&lt;b&gt;마무리&lt;/b&gt;&lt;/span&gt;&lt;/h2&gt;
&lt;p data-ke-size=&quot;size18&quot;&gt;&lt;span&gt;오늘은 TDZ(Temporal Dead Zone)에 대해서 알아보았습니다.&lt;/span&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size18&quot;&gt;&lt;span&gt;만약 포스트에 문제가 있거나 틀린부분이 있다면 댓글을 남겨주시기 바랍니다.&lt;/span&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size18&quot;&gt;&lt;span&gt;감사합니다.&lt;/span&gt;&lt;/p&gt;</description>
      <category>프로그래밍 언어/웹 프론트엔드</category>
      <category>JavaScript</category>
      <category>TDZ</category>
      <category>Temporal Dead Zone</category>
      <author>방현준</author>
      <guid isPermaLink="true">https://noogoonaa.tistory.com/78</guid>
      <comments>https://noogoonaa.tistory.com/78#entry78comment</comments>
      <pubDate>Sun, 19 Jul 2020 01:56:37 +0900</pubDate>
    </item>
    <item>
      <title>2020년 카카오 페이 서류, 과제, 1차 면접 후기</title>
      <link>https://noogoonaa.tistory.com/77</link>
      <description>&lt;hr contenteditable=&quot;false&quot; data-ke-type=&quot;horizontalRule&quot; data-ke-style=&quot;style5&quot; /&gt;
&lt;p data-ke-size=&quot;size18&quot;&gt;&lt;span style=&quot;font-family: AppleSDGothicNeo-Regular, 'Malgun Gothic', '맑은 고딕', dotum, 돋움, sans-serif;&quot;&gt;최근 카카오페이에서 경력 개발자를 공개채용이 올라왔습니다. 저 또한 꽤 오랫동안 프론트엔드 개발을 해왔던 만큼, 이번 공개채용에 지원하였고 결과는&lt;span style=&quot;color: #333333;&quot;&gt; 기술면접의 문턱을 넘지 못하고&lt;/span&gt;&amp;nbsp;떨어졌지만 면접까지 갈 수 있었던 경험이었기에 로그를 남겨보겠습니다.&lt;/span&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size18&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock widthContent&quot; data-filename=&quot;Screenshot_1.png&quot; data-origin-width=&quot;747&quot; data-origin-height=&quot;386&quot; data-ke-mobilestyle=&quot;widthContent&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/bFmzFI/btqFujz307a/pWcG0aP93hmUOuGoYKm8xK/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/bFmzFI/btqFujz307a/pWcG0aP93hmUOuGoYKm8xK/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/bFmzFI/btqFujz307a/pWcG0aP93hmUOuGoYKm8xK/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FbFmzFI%2FbtqFujz307a%2FpWcG0aP93hmUOuGoYKm8xK%2Fimg.png&quot; data-filename=&quot;Screenshot_1.png&quot; data-origin-width=&quot;747&quot; data-origin-height=&quot;386&quot; data-ke-mobilestyle=&quot;widthContent&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;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;/p&gt;
&lt;p data-ke-size=&quot;size18&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;hr contenteditable=&quot;false&quot; data-ke-type=&quot;horizontalRule&quot; data-ke-style=&quot;style3&quot; /&gt;
&lt;h2 data-ke-size=&quot;size26&quot;&gt;&lt;span style=&quot;font-family: AppleSDGothicNeo-Regular, 'Malgun Gothic', '맑은 고딕', dotum, 돋움, sans-serif;&quot;&gt;&lt;b&gt;전형 소개&lt;/b&gt;&lt;/span&gt;&lt;/h2&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-filename=&quot;사진2.jpg&quot; data-origin-width=&quot;1070&quot; data-origin-height=&quot;1101&quot; data-ke-mobilestyle=&quot;widthContent&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/bqsfLc/btqFwkj0t62/ejSvVUhcZorRmSKDR3ykok/img.jpg&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/bqsfLc/btqFwkj0t62/ejSvVUhcZorRmSKDR3ykok/img.jpg&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/bqsfLc/btqFwkj0t62/ejSvVUhcZorRmSKDR3ykok/img.jpg&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FbqsfLc%2FbtqFwkj0t62%2FejSvVUhcZorRmSKDR3ykok%2Fimg.jpg&quot; data-filename=&quot;사진2.jpg&quot; data-origin-width=&quot;1070&quot; data-origin-height=&quot;1101&quot; data-ke-mobilestyle=&quot;widthContent&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;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;/p&gt;
&lt;p data-ke-size=&quot;size18&quot;&gt;&lt;span style=&quot;font-family: AppleSDGothicNeo-Regular, 'Malgun Gothic', '맑은 고딕', dotum, 돋움, sans-serif;&quot;&gt;위 사진에서 볼 수 있듯이 해당 공채는 총 4단계로 이루어져 있습니다. &lt;/span&gt;&lt;/p&gt;
&lt;blockquote data-ke-size=&quot;size18&quot; data-ke-style=&quot;style3&quot;&gt;&lt;span style=&quot;color: #ee2323;&quot;&gt;&lt;i&gt;&lt;b&gt;&lt;span style=&quot;font-family: AppleSDGothicNeo-Regular, 'Malgun Gothic', '맑은 고딕', dotum, 돋움, sans-serif;&quot;&gt;&lt;span style=&quot;color: #000000;&quot;&gt;서류전형&lt;/span&gt; &amp;gt; &lt;span style=&quot;color: #000000;&quot;&gt;과제전형&lt;/span&gt; &amp;gt; &lt;span style=&quot;color: #000000;&quot;&gt;1차 기술면접&lt;/span&gt; &amp;gt; &lt;span style=&quot;color: #000000;&quot;&gt;2차 인성면접&lt;/span&gt;&lt;/span&gt;&lt;/b&gt;&lt;/i&gt;&lt;/span&gt;&lt;/blockquote&gt;
&lt;p data-ke-size=&quot;size18&quot;&gt;&lt;span style=&quot;color: #333333; font-family: AppleSDGothicNeo-Regular, 'Malgun Gothic', '맑은 고딕', dotum, 돋움, sans-serif;&quot;&gt;이번 카카오페이 공개채용에서 가장 돋보였던것은 공개채용을 1달내로 끝낸다는 것 이었습니다. 경험해 본 결과 정말 엄청난 속도로 진행이 됩니다. 준비할 시간이 많이 부족하다는 단점도 있지만, 그만큼 빨라서 기다림의 미학을 안느껴도 된다는 장점이 있었습니다.&lt;/span&gt;&lt;/p&gt;
&lt;hr contenteditable=&quot;false&quot; data-ke-type=&quot;horizontalRule&quot; data-ke-style=&quot;style1&quot; /&gt;
&lt;p&gt;&lt;b&gt;&lt;span style=&quot;font-family: AppleSDGothicNeo-Regular, 'Malgun Gothic', '맑은 고딕', dotum, 돋움, sans-serif;&quot;&gt;서류전형&lt;/span&gt;&lt;/b&gt;&lt;/p&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-filename=&quot;Screenshot_1.png&quot; data-origin-width=&quot;765&quot; data-origin-height=&quot;767&quot; data-ke-mobilestyle=&quot;widthContent&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/OjFfe/btqFwkqK6T4/H5DwVnsmIE7kyrTy5vQpe1/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/OjFfe/btqFwkqK6T4/H5DwVnsmIE7kyrTy5vQpe1/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/OjFfe/btqFwkqK6T4/H5DwVnsmIE7kyrTy5vQpe1/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FOjFfe%2FbtqFwkqK6T4%2FH5DwVnsmIE7kyrTy5vQpe1%2Fimg.png&quot; data-filename=&quot;Screenshot_1.png&quot; data-origin-width=&quot;765&quot; data-origin-height=&quot;767&quot; data-ke-mobilestyle=&quot;widthContent&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;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;/p&gt;
&lt;p data-ke-size=&quot;size18&quot;&gt;&lt;span style=&quot;font-family: AppleSDGothicNeo-Regular, 'Malgun Gothic', '맑은 고딕', dotum, 돋움, sans-serif;&quot;&gt;서류전형은 자신의 인적사항과 경력사항, 그리고 지원동기를 써서 제출하는 방식이었습니다. &lt;/span&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size18&quot;&gt;&lt;span style=&quot;font-family: AppleSDGothicNeo-Regular, 'Malgun Gothic', '맑은 고딕', dotum, 돋움, sans-serif;&quot;&gt;저는 따로 경력기술서가 존재했기에 경력사항을 하나하나 타이핑하지 않고 경력기술서를 첨부하여 제출을 하였고,&lt;/span&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size18&quot;&gt;&lt;span style=&quot;font-family: AppleSDGothicNeo-Regular, 'Malgun Gothic', '맑은 고딕', dotum, 돋움, sans-serif;&quot;&gt;지원동기 또한 카카오페이가 추구하는 이념과 맞추어 작성하였습니다.&lt;/span&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size18&quot;&gt;&lt;span style=&quot;font-family: AppleSDGothicNeo-Regular, 'Malgun Gothic', '맑은 고딕', dotum, 돋움, sans-serif;&quot;&gt;사실 이러한 전형에서 중요한 것은 자신의 경력이라고 생각했기에 경력 어필을 특히 열심히 했던것 같습니다.&lt;/span&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size18&quot;&gt;&lt;span style=&quot;font-family: AppleSDGothicNeo-Regular, 'Malgun Gothic', '맑은 고딕', dotum, 돋움, sans-serif;&quot;&gt;그리고 바로 그 다음날 결과는 합격!!!&lt;/span&gt;&lt;span style=&quot;font-family: AppleSDGothicNeo-Regular, 'Malgun Gothic', '맑은 고딕', dotum, 돋움, sans-serif;&quot;&gt;&lt;/span&gt;&lt;/p&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-filename=&quot;Screenshot_3.png&quot; data-origin-width=&quot;694&quot; data-origin-height=&quot;493&quot; data-ke-mobilestyle=&quot;widthContent&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/cilUQZ/btqFtwtkCwu/Vzfs5CubEB3mi583997Pek/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/cilUQZ/btqFtwtkCwu/Vzfs5CubEB3mi583997Pek/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/cilUQZ/btqFtwtkCwu/Vzfs5CubEB3mi583997Pek/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FcilUQZ%2FbtqFtwtkCwu%2FVzfs5CubEB3mi583997Pek%2Fimg.png&quot; data-filename=&quot;Screenshot_3.png&quot; data-origin-width=&quot;694&quot; data-origin-height=&quot;493&quot; data-ke-mobilestyle=&quot;widthContent&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;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;/p&gt;
&lt;p data-ke-size=&quot;size18&quot;&gt;&lt;span style=&quot;font-family: AppleSDGothicNeo-Regular, 'Malgun Gothic', '맑은 고딕', dotum, 돋움, sans-serif;&quot;&gt;당연한 이야기지만, 적부전형이 아니기 때문에 이 전형에서 떨어지는 사람도 있었습니다.&lt;/span&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size14&quot;&gt;&lt;span style=&quot;color: #9d9d9d;&quot;&gt;&lt;i&gt;&lt;span style=&quot;font-family: AppleSDGothicNeo-Regular, 'Malgun Gothic', '맑은 고딕', dotum, 돋움, sans-serif;&quot;&gt;(아는 지인이 떨어졌음....ㅠㅠ)&lt;/span&gt;&lt;/i&gt;&lt;/span&gt;&lt;/p&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;
&lt;hr contenteditable=&quot;false&quot; data-ke-type=&quot;horizontalRule&quot; data-ke-style=&quot;style1&quot; /&gt;
&lt;h2 data-ke-size=&quot;size26&quot;&gt;&lt;span style=&quot;font-family: AppleSDGothicNeo-Regular, 'Malgun Gothic', '맑은 고딕', dotum, 돋움, sans-serif;&quot;&gt;&lt;b&gt;과제전형&lt;/b&gt;&lt;/span&gt;&lt;/h2&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-filename=&quot;Screenshot_2.png&quot; data-origin-width=&quot;704&quot; data-origin-height=&quot;586&quot; data-ke-mobilestyle=&quot;widthContent&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/bXFV4F/btqFuV6NdvU/XRXpVxS4EktSxyPW6oBbnK/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/bXFV4F/btqFuV6NdvU/XRXpVxS4EktSxyPW6oBbnK/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/bXFV4F/btqFuV6NdvU/XRXpVxS4EktSxyPW6oBbnK/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FbXFV4F%2FbtqFuV6NdvU%2FXRXpVxS4EktSxyPW6oBbnK%2Fimg.png&quot; data-filename=&quot;Screenshot_2.png&quot; data-origin-width=&quot;704&quot; data-origin-height=&quot;586&quot; data-ke-mobilestyle=&quot;widthContent&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;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;/p&gt;
&lt;p data-ke-size=&quot;size18&quot;&gt;&lt;span style=&quot;font-family: AppleSDGothicNeo-Regular, 'Malgun Gothic', '맑은 고딕', dotum, 돋움, sans-serif;&quot;&gt;두번째 전형은 과제전형이었습니다. &lt;/span&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size18&quot;&gt;&lt;span style=&quot;font-family: AppleSDGothicNeo-Regular, 'Malgun Gothic', '맑은 고딕', dotum, 돋움, sans-serif;&quot;&gt;저는 프론트엔드 개발 직군으로 지원하였기에 프론트엔드 개발과 관련된 과제가 나왔습니다. &lt;/span&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size18&quot;&gt;&lt;span style=&quot;font-family: AppleSDGothicNeo-Regular, 'Malgun Gothic', '맑은 고딕', dotum, 돋움, sans-serif;&quot;&gt;예전 전형들을 보면 서버 개발도 같이 나온걸로 보이는데 이번 공채에선 그냥 생 프론트엔드 개발이었습니다.&lt;/span&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size18&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size18&quot;&gt;&lt;span style=&quot;font-family: AppleSDGothicNeo-Regular, 'Malgun Gothic', '맑은 고딕', dotum, 돋움, sans-serif;&quot;&gt;기간은 총 3일이었고, 그 기간이 목금토였습니다.&amp;nbsp;&lt;/span&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size18&quot;&gt;&lt;span style=&quot;font-family: AppleSDGothicNeo-Regular, 'Malgun Gothic', '맑은 고딕', dotum, 돋움, sans-serif;&quot;&gt;문제는 프론트 개발은 그렇게 어렵지 않았습니다만, 라이브러리나 프레임워크에 의존하는 사람들은 꽤 어려웠을만한 문제이기도 했습니다.&lt;/span&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size18&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size18&quot;&gt;&lt;span style=&quot;font-family: AppleSDGothicNeo-Regular, 'Malgun Gothic', '맑은 고딕', dotum, 돋움, sans-serif;&quot;&gt;사실, 제가 개발한 과제를 올려놓고 싶기도 한데, 문제 유출이니 그건 자제하기로 하고,&lt;/span&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size18&quot;&gt;&lt;span style=&quot;font-family: AppleSDGothicNeo-Regular, 'Malgun Gothic', '맑은 고딕', dotum, 돋움, sans-serif;&quot;&gt;약간의 문제 유형에 대해서만 말해보자면&lt;/span&gt;&lt;/p&gt;
&lt;ol style=&quot;list-style-type: decimal;&quot; data-ke-list-type=&quot;decimal&quot;&gt;
&lt;li data-ke-size=&quot;size18&quot;&gt;
&lt;p data-ke-size=&quot;size18&quot;&gt;&lt;span style=&quot;color: #ee2323;&quot;&gt;&lt;i&gt;&lt;span style=&quot;font-family: AppleSDGothicNeo-Regular, 'Malgun Gothic', '맑은 고딕', dotum, 돋움, sans-serif;&quot;&gt;바닐라 자바스크립트를 잘 다루는지 확인&lt;/span&gt;&lt;/i&gt;&lt;/span&gt;&lt;/p&gt;
&lt;/li&gt;
&lt;li data-ke-size=&quot;size18&quot;&gt;
&lt;p data-ke-size=&quot;size18&quot;&gt;&lt;span style=&quot;color: #ee2323;&quot;&gt;&lt;i&gt;&lt;span style=&quot;font-family: AppleSDGothicNeo-Regular, 'Malgun Gothic', '맑은 고딕', dotum, 돋움, sans-serif;&quot;&gt;웹팩을 잘 다루는지 확인&lt;/span&gt;&lt;/i&gt;&lt;/span&gt;&lt;/p&gt;
&lt;/li&gt;
&lt;li data-ke-size=&quot;size18&quot;&gt;
&lt;p data-ke-size=&quot;size18&quot;&gt;&lt;span style=&quot;color: #ee2323;&quot;&gt;&lt;i&gt;&lt;span style=&quot;font-family: AppleSDGothicNeo-Regular, 'Malgun Gothic', '맑은 고딕', dotum, 돋움, sans-serif;&quot;&gt;유닛 테스트를 잘 하는지 확인&lt;/span&gt;&lt;/i&gt;&lt;/span&gt;&lt;/p&gt;
&lt;/li&gt;
&lt;/ol&gt;
&lt;p data-ke-size=&quot;size18&quot;&gt;&lt;span style=&quot;font-family: AppleSDGothicNeo-Regular, 'Malgun Gothic', '맑은 고딕', dotum, 돋움, sans-serif;&quot;&gt;이 3가지를 확인하고 싶어하는 듯한 느낌이 나는 과제였습니다.&lt;/span&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size18&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size18&quot;&gt;&lt;span style=&quot;font-family: AppleSDGothicNeo-Regular, 'Malgun Gothic', '맑은 고딕', dotum, 돋움, sans-serif;&quot;&gt;저는 과제기간중 토요일에 결혼식이 있어서 어떻게든 목금안에 다 풀고 제출하였고,&lt;/span&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size18&quot;&gt;&lt;span style=&quot;font-family: AppleSDGothicNeo-Regular, 'Malgun Gothic', '맑은 고딕', dotum, 돋움, sans-serif;&quot;&gt;결과는 다행히도 합격!!!&lt;/span&gt;&lt;/p&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-filename=&quot;Screenshot_4.png&quot; data-origin-width=&quot;686&quot; data-origin-height=&quot;518&quot; data-ke-mobilestyle=&quot;widthContent&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/oMw9Y/btqFvvNkGVJ/Aaz7uRLPTtuQ6QRYDx16uk/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/oMw9Y/btqFvvNkGVJ/Aaz7uRLPTtuQ6QRYDx16uk/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/oMw9Y/btqFvvNkGVJ/Aaz7uRLPTtuQ6QRYDx16uk/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FoMw9Y%2FbtqFvvNkGVJ%2FAaz7uRLPTtuQ6QRYDx16uk%2Fimg.png&quot; data-filename=&quot;Screenshot_4.png&quot; data-origin-width=&quot;686&quot; data-origin-height=&quot;518&quot; data-ke-mobilestyle=&quot;widthContent&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;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;/p&gt;
&lt;hr contenteditable=&quot;false&quot; data-ke-type=&quot;horizontalRule&quot; data-ke-style=&quot;style1&quot; /&gt;
&lt;h2 data-ke-size=&quot;size26&quot;&gt;&lt;span style=&quot;font-family: AppleSDGothicNeo-Regular, 'Malgun Gothic', '맑은 고딕', dotum, 돋움, sans-serif;&quot;&gt;&lt;b&gt;1차 기술면접&lt;/b&gt;&lt;/span&gt;&lt;/h2&gt;
&lt;p&gt;&lt;figure class=&quot;imagegridblock&quot;&gt;
  &lt;div class=&quot;image-container&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/ddAJeb/btqFv1rp95Z/SuY2BRQQpxbKFXR4u9KKM0/img.jpg&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/ddAJeb/btqFv1rp95Z/SuY2BRQQpxbKFXR4u9KKM0/img.jpg&quot; data-filename=&quot;20200703_151950.jpg&quot; data-origin-width=&quot;4032&quot; data-origin-height=&quot;3024&quot; style=&quot;width: 49.4186%; margin-right: 10px;&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/ddAJeb/btqFv1rp95Z/SuY2BRQQpxbKFXR4u9KKM0/img.jpg&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FddAJeb%2FbtqFv1rp95Z%2FSuY2BRQQpxbKFXR4u9KKM0%2Fimg.jpg&quot; onerror=&quot;this.onerror=null; this.src='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png'; this.srcset='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png';&quot; loading=&quot;lazy&quot; width=&quot;4032&quot; height=&quot;3024&quot;/&gt;&lt;/span&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/bF1b7P/btqFujNzkQi/lyd77RU3bYbmcO2xYXtkak/img.jpg&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/bF1b7P/btqFujNzkQi/lyd77RU3bYbmcO2xYXtkak/img.jpg&quot; data-filename=&quot;20200703_151954.jpg&quot; data-origin-width=&quot;4032&quot; data-origin-height=&quot;3024&quot; style=&quot;width: 49.4186%;&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/bF1b7P/btqFujNzkQi/lyd77RU3bYbmcO2xYXtkak/img.jpg&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FbF1b7P%2FbtqFujNzkQi%2Flyd77RU3bYbmcO2xYXtkak%2Fimg.jpg&quot; onerror=&quot;this.onerror=null; this.src='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png'; this.srcset='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png';&quot; loading=&quot;lazy&quot; width=&quot;4032&quot; height=&quot;3024&quot;/&gt;&lt;/span&gt;&lt;/div&gt;
&lt;/figure&gt;
&lt;figure class=&quot;imageblock alignCenter&quot; data-filename=&quot;20200703_152054.jpg&quot; data-origin-width=&quot;4032&quot; data-origin-height=&quot;3024&quot; data-ke-mobilestyle=&quot;widthContent&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/PZFvX/btqFve56Qal/Wd2Xea903GKLm13xDotHT0/img.jpg&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/PZFvX/btqFve56Qal/Wd2Xea903GKLm13xDotHT0/img.jpg&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/PZFvX/btqFve56Qal/Wd2Xea903GKLm13xDotHT0/img.jpg&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FPZFvX%2FbtqFve56Qal%2FWd2Xea903GKLm13xDotHT0%2Fimg.jpg&quot; data-filename=&quot;20200703_152054.jpg&quot; data-origin-width=&quot;4032&quot; data-origin-height=&quot;3024&quot; data-ke-mobilestyle=&quot;widthContent&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;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;/p&gt;
&lt;p data-ke-size=&quot;size18&quot;&gt;&lt;span style=&quot;font-family: AppleSDGothicNeo-Regular, 'Malgun Gothic', '맑은 고딕', dotum, 돋움, sans-serif;&quot;&gt;세번째 과정은 기술면접과 코드리뷰 전형이었습니다. 처음 판교역에 도착한 후 카카오페이 층에 딱 도착을 했을 무렵 꽤 많은 인원의 카카오페이 직원들이 다과나 탁구 등을 즐기는 것을 보았습니다. 그러한 문화의 &quot;와 역시!! 카카오!! 이름에 걸맞는 문화구나!!&quot; 하고 감탄을 받으며 면접 대기방에 입장하였습니다.&lt;/span&gt;&lt;/p&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-filename=&quot;20200703_164950.jpg&quot; data-origin-width=&quot;4032&quot; data-origin-height=&quot;3024&quot; data-ke-mobilestyle=&quot;widthContent&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/8pLZr/btqFvfcRzsJ/XcuQiVo9uJgf8uKf478lb0/img.jpg&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/8pLZr/btqFvfcRzsJ/XcuQiVo9uJgf8uKf478lb0/img.jpg&quot; data-alt=&quot;선물 내용물&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/8pLZr/btqFvfcRzsJ/XcuQiVo9uJgf8uKf478lb0/img.jpg&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2F8pLZr%2FbtqFvfcRzsJ%2FXcuQiVo9uJgf8uKf478lb0%2Fimg.jpg&quot; data-filename=&quot;20200703_164950.jpg&quot; data-origin-width=&quot;4032&quot; data-origin-height=&quot;3024&quot; data-ke-mobilestyle=&quot;widthContent&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;/&gt;&lt;/span&gt;&lt;figcaption&gt;선물 내용물&lt;/figcaption&gt;
&lt;/figure&gt;
&lt;/p&gt;
&lt;p data-ke-size=&quot;size18&quot;&gt;&lt;span style=&quot;font-family: AppleSDGothicNeo-Regular, 'Malgun Gothic', '맑은 고딕', dotum, 돋움, sans-serif;&quot;&gt;면접 대기는 직군별로 1명씩 4명이 대기하고 있었고, &lt;/span&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size18&quot;&gt;&lt;span style=&quot;font-family: AppleSDGothicNeo-Regular, 'Malgun Gothic', '맑은 고딕', dotum, 돋움, sans-serif;&quot;&gt;담당자의 호명에 따라 면접의 참여한 선물이라며 조그마한 봉투를 주고 면접장에 입장하였습니다.&lt;/span&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size18&quot;&gt;&lt;span style=&quot;font-family: AppleSDGothicNeo-Regular, 'Malgun Gothic', '맑은 고딕', dotum, 돋움, sans-serif;&quot;&gt;면접은 지원자 1 : 면접관 3으로 약 1시간 30분정도 면접을 진행하였습니다.&lt;/span&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size18&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size18&quot;&gt;&lt;span style=&quot;font-family: AppleSDGothicNeo-Regular, 'Malgun Gothic', '맑은 고딕', dotum, 돋움, sans-serif;&quot;&gt;처음 40분 정도는 기술면접으로 소모되었는데&lt;/span&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size18&quot;&gt;&lt;span style=&quot;font-family: AppleSDGothicNeo-Regular, 'Malgun Gothic', '맑은 고딕', dotum, 돋움, sans-serif;&quot;&gt;주로 자바스크립트의 기초와 심화, 리액트와 관련된 내용, 회사에서 진행한 프로젝트 질문 등이 주를 이뤘습니다.&lt;/span&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size18&quot;&gt;&lt;span style=&quot;font-family: AppleSDGothicNeo-Regular, 'Malgun Gothic', '맑은 고딕', dotum, 돋움, sans-serif;&quot;&gt;특히 자바스크립트에 대해서 빠삭하게 알아야 대답할 수 있는 질문들이 많아서 대략 40프로정도의 질문에 대해 답변을 하지 못했습니다.&lt;/span&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size18&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size18&quot;&gt;&lt;span style=&quot;font-family: AppleSDGothicNeo-Regular, 'Malgun Gothic', '맑은 고딕', dotum, 돋움, sans-serif;&quot;&gt;그 후 50분 정도를 코드리뷰에 소모했습니다.&lt;/span&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size18&quot;&gt;&lt;span style=&quot;font-family: AppleSDGothicNeo-Regular, 'Malgun Gothic', '맑은 고딕', dotum, 돋움, sans-serif;&quot;&gt;코드리뷰 방식은 자신이 제출했던 과제에 대해서 설명하는 것인데, 이 부분에서도 기습적으로 이건 왜이렇게 짰는지, 다른 더 좋은 방법이 있다면 어떤것이 있는지 등을 물어봅니다.&lt;/span&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size18&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size18&quot;&gt;&lt;span style=&quot;font-family: AppleSDGothicNeo-Regular, 'Malgun Gothic', '맑은 고딕', dotum, 돋움, sans-serif;&quot;&gt;그 후 결과는 탈락 ㅠㅠ&lt;/span&gt;&lt;span style=&quot;font-family: AppleSDGothicNeo-Regular, 'Malgun Gothic', '맑은 고딕', dotum, 돋움, sans-serif;&quot;&gt;&lt;/span&gt;&lt;/p&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-filename=&quot;Screenshot_5.png&quot; data-origin-width=&quot;662&quot; data-origin-height=&quot;534&quot; data-ke-mobilestyle=&quot;widthContent&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/c3Hh7l/btqFuVFM6J9/KjyuxmpU1t9FjZeHQyOgc0/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/c3Hh7l/btqFuVFM6J9/KjyuxmpU1t9FjZeHQyOgc0/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/c3Hh7l/btqFuVFM6J9/KjyuxmpU1t9FjZeHQyOgc0/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2Fc3Hh7l%2FbtqFuVFM6J9%2FKjyuxmpU1t9FjZeHQyOgc0%2Fimg.png&quot; data-filename=&quot;Screenshot_5.png&quot; data-origin-width=&quot;662&quot; data-origin-height=&quot;534&quot; data-ke-mobilestyle=&quot;widthContent&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;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;/p&gt;
&lt;p data-ke-size=&quot;size18&quot;&gt;&lt;span style=&quot;font-family: AppleSDGothicNeo-Regular, 'Malgun Gothic', '맑은 고딕', dotum, 돋움, sans-serif;&quot;&gt;하지만 면접을 진행하면서 제가 부족했던 부분과 좀 더 공부가 필요한 부분을 알게되었고,&lt;/span&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size18&quot;&gt;&lt;span style=&quot;font-family: AppleSDGothicNeo-Regular, 'Malgun Gothic', '맑은 고딕', dotum, 돋움, sans-serif;&quot;&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;h2 data-ke-size=&quot;size26&quot;&gt;&lt;span style=&quot;font-family: 'Noto Sans Demilight', 'Noto Sans KR';&quot;&gt;&lt;b&gt;마무리&lt;/b&gt;&lt;/span&gt;&lt;/h2&gt;
&lt;p data-ke-size=&quot;size18&quot;&gt;&lt;span style=&quot;font-family: AppleSDGothicNeo-Regular, 'Malgun Gothic', '맑은 고딕', dotum, 돋움, sans-serif;&quot;&gt;이번 2020 카카오페이 공채는 아쉽게도 기술면접에서 떨어졌지만,&lt;/span&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size18&quot;&gt;&lt;span style=&quot;font-family: AppleSDGothicNeo-Regular, 'Malgun Gothic', '맑은 고딕', dotum, 돋움, sans-serif;&quot;&gt;나중에 더 좋은 인연으로 연이 닿았으면 좋겠다고 생각했습니다.&lt;/span&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size18&quot;&gt;&lt;span style=&quot;font-family: AppleSDGothicNeo-Regular, 'Malgun Gothic', '맑은 고딕', dotum, 돋움, sans-serif;&quot;&gt;만약 궁금한 사항이나, 질문이 있다면 댓글을 달아주세요&lt;/span&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size18&quot;&gt;&lt;span style=&quot;font-family: AppleSDGothicNeo-Regular, 'Malgun Gothic', '맑은 고딕', dotum, 돋움, sans-serif;&quot;&gt;감사합니다.&lt;/span&gt;&lt;/p&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;
&lt;div id=&quot;gtx-trans&quot; style=&quot;position: absolute; left: -27px; top: 8660.09px;&quot;&gt;
&lt;div class=&quot;gtx-trans-icon&quot;&gt;&amp;nbsp;&lt;/div&gt;
&lt;/div&gt;</description>
      <category>취준생활</category>
      <category>카카오페이</category>
      <author>방현준</author>
      <guid isPermaLink="true">https://noogoonaa.tistory.com/77</guid>
      <comments>https://noogoonaa.tistory.com/77#entry77comment</comments>
      <pubDate>Thu, 9 Jul 2020 02:07:13 +0900</pubDate>
    </item>
    <item>
      <title>자바스크립트 호이스팅(Hoisting)이란?</title>
      <link>https://noogoonaa.tistory.com/76</link>
      <description>&lt;hr contenteditable=&quot;false&quot; data-ke-type=&quot;horizontalRule&quot; data-ke-style=&quot;style5&quot; /&gt;
&lt;h2 data-ke-size=&quot;size26&quot;&gt;&lt;span style=&quot;color: #ee2323;&quot;&gt;&lt;b&gt;함께보면 좋은 글&lt;/b&gt;&lt;/span&gt;&lt;/h2&gt;
&lt;ul style=&quot;list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li&gt;&lt;a href=&quot;https://noogoonaa.tistory.com/78&quot; target=&quot;_blank&quot; rel=&quot;noopener&quot;&gt;2020/07/19 - [프로그래밍 언어/Javascript] - TDZ(Temporal Dead Zone)이란?&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;hr contenteditable=&quot;false&quot; data-ke-type=&quot;horizontalRule&quot; data-ke-style=&quot;style5&quot; /&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthContent&quot; data-filename=&quot;자바스크립트.png&quot; data-origin-width=&quot;700&quot; data-origin-height=&quot;525&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/3IzLD/btqFoAO9hnz/wVs0EkKJcCUo9bkHRudn41/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/3IzLD/btqFoAO9hnz/wVs0EkKJcCUo9bkHRudn41/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/3IzLD/btqFoAO9hnz/wVs0EkKJcCUo9bkHRudn41/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2F3IzLD%2FbtqFoAO9hnz%2FwVs0EkKJcCUo9bkHRudn41%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;700&quot; height=&quot;525&quot; data-filename=&quot;자바스크립트.png&quot; data-origin-width=&quot;700&quot; data-origin-height=&quot;525&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;/p&gt;
&lt;hr contenteditable=&quot;false&quot; data-ke-type=&quot;horizontalRule&quot; data-ke-style=&quot;style3&quot; /&gt;
&lt;p data-ke-size=&quot;size18&quot;&gt;오늘은 자바스크립트에 호이스팅(Hoisting)에 대해서 알아보도록 하겠습니다. &lt;span style=&quot;color: #333333;&quot;&gt;사실 이 호이스팅이란 ECMA 2016 이상 부터는 let과 const를 권장해서 사실 변수 호이스팅이 크게 의미는 없습니다. 하지만 함수는 아직 이 호이스팅이라는 개념이 적용되고, 자바스크립트를 주로 사용하는 회사에서 면접 질문으로 자주 나오는 개념이기 때문에 알아둬서 나쁠거 없는 개념이라고 생각합니다. 사실 그렇게 어렵지도 않습니다....ㅎ&lt;/span&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size18&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size18&quot;&gt;&lt;span style=&quot;color: #333333;&quot;&gt;그럼 한번 알아보도록 할까요?&lt;/span&gt;&lt;/p&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthContent&quot; data-filename=&quot;unnamed (1).png&quot; data-origin-width=&quot;512&quot; data-origin-height=&quot;341&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/b6LZve/btqFnEZftFR/aToKoD2iMwsOTjci4LSk1K/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/b6LZve/btqFnEZftFR/aToKoD2iMwsOTjci4LSk1K/img.png&quot; data-alt=&quot;호이~스팅&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/b6LZve/btqFnEZftFR/aToKoD2iMwsOTjci4LSk1K/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2Fb6LZve%2FbtqFnEZftFR%2FaToKoD2iMwsOTjci4LSk1K%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;512&quot; height=&quot;341&quot; data-filename=&quot;unnamed (1).png&quot; data-origin-width=&quot;512&quot; data-origin-height=&quot;341&quot;/&gt;&lt;/span&gt;&lt;figcaption&gt;호이~스팅&lt;/figcaption&gt;
&lt;/figure&gt;
&lt;/p&gt;
&lt;hr contenteditable=&quot;false&quot; data-ke-type=&quot;horizontalRule&quot; data-ke-style=&quot;style1&quot; /&gt;
&lt;h2 data-ke-size=&quot;size26&quot;&gt;&lt;span style=&quot;font-family: AppleSDGothicNeo-Regular, 'Malgun Gothic', '맑은 고딕', dotum, 돋움, sans-serif;&quot;&gt;&lt;b&gt;호이스팅(&lt;span style=&quot;color: #333333;&quot;&gt;Hoisting&lt;/span&gt;)이란?&lt;/b&gt;&lt;/span&gt;&lt;/h2&gt;
&lt;blockquote data-ke-size=&quot;size18&quot; data-ke-style=&quot;style2&quot;&gt;&lt;span&gt;호이스팅(Hoisting)은 사전적 의미로 끌어 올리기 라는 의미를 가지고 있는 단어이며, &lt;/span&gt;&lt;span&gt;실제로 하는 일도 사전적 의미와 동일합니다. 모든 선언(var, function)들을 &lt;/span&gt;&lt;span&gt;어느 위치에 호출하던지 간에 자바스크립트(Javascript)는 그 선언들을 맨 위로 끌어올립니다.&lt;/span&gt;&lt;/blockquote&gt;
&lt;p data-ke-size=&quot;size18&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;h2 data-ke-size=&quot;size26&quot;&gt;&lt;span style=&quot;color: #333333;&quot;&gt;&lt;b&gt;변수에서의 호이스팅(&lt;/b&gt;&lt;/span&gt;&lt;span style=&quot;color: #333333;&quot;&gt;&lt;b&gt;Hoisting&lt;/b&gt;&lt;/span&gt;&lt;span style=&quot;color: #333333;&quot;&gt;&lt;b&gt;)&lt;/b&gt;&lt;/span&gt;&lt;/h2&gt;
&lt;p data-ke-size=&quot;size18&quot;&gt;먼저 변수 선언은 &lt;span style=&quot;color: #333333;&quot;&gt;ECMA 2016 이전과 이후로 나뉘어 집니다. 왜냐하면 &lt;span style=&quot;color: #333333;&quot;&gt;ECMA 2016이전에는 var를 많이 사용하였고 &lt;span style=&quot;color: #333333;&quot;&gt;ECMA 2016 이후로는 let과 const를 사용하였기 때문입니다. 그럼 이 var와 let, const를 사용하여 호이스팅에 대해서 알아보도록 하겠습니다.&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size18&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p class=&quot;codepen&quot; style=&quot;height: 265px; box-sizing: border-box; display: flex; align-items: center; justify-content: center; border: 2px solid; margin: 1em 0; padding: 1em;&quot; data-height=&quot;265&quot; data-theme-id=&quot;default&quot; data-default-tab=&quot;js&quot; data-user=&quot;noogoonaa&quot; data-slug-hash=&quot;yLevPXz&quot; data-pen-title=&quot;호이스팅 예시1&quot; data-ke-size=&quot;size16&quot;&gt;&lt;span&gt;See the Pen &lt;a href=&quot;https://codepen.io/noogoonaa/pen/yLevPXz&quot;&gt; 호이스팅 예시1&lt;/a&gt; by HyeonJun, Bang (&lt;a href=&quot;https://codepen.io/noogoonaa&quot;&gt;@noogoonaa&lt;/a&gt;) on &lt;a href=&quot;https://codepen.io&quot;&gt;CodePen&lt;/a&gt;.&lt;/span&gt;&lt;/p&gt;
&lt;script src=&quot;https://static.codepen.io/assets/embed/ei.js&quot;&gt;&lt;/script&gt;
&lt;p 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;widthContent&quot; data-origin-width=&quot;1920&quot; data-origin-height=&quot;875&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/bebDw6/btqFoAuRWKj/8QJO7IbjocxlYqwBR548J1/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/bebDw6/btqFoAuRWKj/8QJO7IbjocxlYqwBR548J1/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/bebDw6/btqFoAuRWKj/8QJO7IbjocxlYqwBR548J1/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FbebDw6%2FbtqFoAuRWKj%2F8QJO7IbjocxlYqwBR548J1%2Fimg.png&quot; onerror=&quot;this.onerror=null; this.src='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png'; this.srcset='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png';&quot; loading=&quot;lazy&quot; width=&quot;1920&quot; height=&quot;875&quot; data-origin-width=&quot;1920&quot; data-origin-height=&quot;875&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;/p&gt;
&lt;p data-ke-size=&quot;size18&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size18&quot;&gt;소스를 한번 보겠습니다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size18&quot;&gt;var로 선언된 변수는 undefined가 출력되고 let과 const는 에러가 발생하게 되어 catch로 빠지게 됩니다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size18&quot;&gt;왜 이런 현상이 발생할 까요?&lt;/p&gt;
&lt;p 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;widthContent&quot; data-origin-width=&quot;1917&quot; data-origin-height=&quot;882&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/2nw71/btqFp5HdVMF/sm39EtSOc6ynUSHwCnKKdK/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/2nw71/btqFp5HdVMF/sm39EtSOc6ynUSHwCnKKdK/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/2nw71/btqFp5HdVMF/sm39EtSOc6ynUSHwCnKKdK/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2F2nw71%2FbtqFp5HdVMF%2Fsm39EtSOc6ynUSHwCnKKdK%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;1917&quot; height=&quot;882&quot; data-origin-width=&quot;1917&quot; data-origin-height=&quot;882&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;/p&gt;
&lt;p data-ke-size=&quot;size18&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size18&quot;&gt;위 사진을 보면&amp;nbsp; var hoi1 이라는 변수가 try 위로 화살표 표시가 되어 있죠? 즉, var hoi1이라는 변수는 호이스팅이 발생하여 자바스크립트가 미리 hoi1이라는 메모리를 자바스크립트 최 상단에 만들어 놓게 되는것 입니다. 그래서 console.log(hoi1)이 hoi1이라는 메모리를 접근할 수 있고 undefined를 출력할 수 있는것 입니다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size18&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size18&quot;&gt;그럼 왜 let과 const는 호이스팅이 발생하지 않아 에러가 발생했을 까요?&lt;/p&gt;
&lt;p data-ke-size=&quot;size18&quot;&gt;var는 전역적으로 사용되어지는 변수이지만 let과 const는 기본적으로 정의 된 블록 내에서만 유효한 변수라서 그렇습니다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size18&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size18&quot;&gt;그렇기 때문에 let과 const는 호이스팅이 발생하지 않아 let, const 변수를 이전에 호출하면 에러가 발생합니다.&lt;span style=&quot;color: #ee2323;&quot;&gt;&lt;i&gt;&lt;/i&gt;&lt;/span&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size18&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size18&quot;&gt;사실, 이건 비밀이지만... let과 const는 호이스팅이 발생하긴 합니다...&lt;/p&gt;
&lt;p data-ke-size=&quot;size18&quot;&gt;하지만 이번 포스팅에선 따로 다루지 않겠습니다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size18&quot;&gt;만약 궁금하시면 &lt;a href=&quot;https://noogoonaa.tistory.com/78&quot; target=&quot;_blank&quot; rel=&quot;noopener&quot;&gt;링크&lt;/a&gt;를 통해 확인해주세요 ^,,,,,,^&lt;/p&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthContent&quot; data-filename=&quot;228405e1fd89ffa196259bc19b694e1a.jpeg&quot; data-origin-width=&quot;428&quot; data-origin-height=&quot;280&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/eftCYZ/btqFNsKhcMB/NKhiKPbQcBkkIPZ9IIErL0/img.jpg&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/eftCYZ/btqFNsKhcMB/NKhiKPbQcBkkIPZ9IIErL0/img.jpg&quot; data-alt=&quot;너무 복잡해서 머, 머리가 몹시 아파....&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/eftCYZ/btqFNsKhcMB/NKhiKPbQcBkkIPZ9IIErL0/img.jpg&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FeftCYZ%2FbtqFNsKhcMB%2FNKhiKPbQcBkkIPZ9IIErL0%2Fimg.jpg&quot; onerror=&quot;this.onerror=null; this.src='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png'; this.srcset='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png';&quot; loading=&quot;lazy&quot; width=&quot;428&quot; height=&quot;280&quot; data-filename=&quot;228405e1fd89ffa196259bc19b694e1a.jpeg&quot; data-origin-width=&quot;428&quot; data-origin-height=&quot;280&quot;/&gt;&lt;/span&gt;&lt;figcaption&gt;너무 복잡해서 머, 머리가 몹시 아파....&lt;/figcaption&gt;
&lt;/figure&gt;
&lt;/p&gt;
&lt;p data-ke-size=&quot;size18&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;hr contenteditable=&quot;false&quot; data-ke-type=&quot;horizontalRule&quot; data-ke-style=&quot;style1&quot; /&gt;
&lt;h2 data-ke-size=&quot;size26&quot;&gt;&lt;span style=&quot;color: #333333;&quot;&gt;&lt;b&gt;함수에서의 호이스팅(&lt;/b&gt;&lt;/span&gt;&lt;span style=&quot;color: #333333;&quot;&gt;&lt;b&gt;Hoisting&lt;/b&gt;&lt;/span&gt;&lt;span style=&quot;color: #333333;&quot;&gt;&lt;b&gt;)&lt;/b&gt;&lt;/span&gt;&lt;/h2&gt;
&lt;p data-ke-size=&quot;size18&quot;&gt;&lt;span style=&quot;color: #333333;&quot;&gt;자 그럼 이제 함수에서의 호이스팅을 한번 알아보도록 하겠습니다. &lt;/span&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size18&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size18&quot;&gt;&lt;span style=&quot;color: #333333;&quot;&gt;자바스크립트에서는 함수 선언식과 함수 표현식이라는 두가지의 함수 선언이 가능합니다. 하지만 함수 선언식은 호이스팅이 발생되고 함수 표현식은 호이스팅이 발생되지 않습니다. 먼저 소스를 한번 봐 볼까요?&lt;/span&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p class=&quot;codepen&quot; style=&quot;height: 265px; box-sizing: border-box; display: flex; align-items: center; justify-content: center; border: 2px solid; margin: 1em 0; padding: 1em;&quot; data-height=&quot;265&quot; data-theme-id=&quot;default&quot; data-default-tab=&quot;js&quot; data-user=&quot;noogoonaa&quot; data-slug-hash=&quot;rNxJYQZ&quot; data-pen-title=&quot;호이스팅 예시2&quot; data-ke-size=&quot;size16&quot;&gt;&lt;span&gt;See the Pen &lt;a href=&quot;https://codepen.io/noogoonaa/pen/rNxJYQZ&quot;&gt; 호이스팅 예시2&lt;/a&gt; by HyeonJun, Bang (&lt;a href=&quot;https://codepen.io/noogoonaa&quot;&gt;@noogoonaa&lt;/a&gt;) on &lt;a href=&quot;https://codepen.io&quot;&gt;CodePen&lt;/a&gt;.&lt;/span&gt;&lt;/p&gt;
&lt;script src=&quot;https://static.codepen.io/assets/embed/ei.js&quot;&gt;&lt;/script&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;widthContent&quot; data-origin-width=&quot;1918&quot; data-origin-height=&quot;846&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/bclb4e/btqFnD67QVE/uiE5mCaT85hpuOIisyJKLK/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/bclb4e/btqFnD67QVE/uiE5mCaT85hpuOIisyJKLK/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/bclb4e/btqFnD67QVE/uiE5mCaT85hpuOIisyJKLK/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2Fbclb4e%2FbtqFnD67QVE%2FuiE5mCaT85hpuOIisyJKLK%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;1918&quot; height=&quot;846&quot; data-origin-width=&quot;1918&quot; data-origin-height=&quot;846&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;/p&gt;
&lt;p data-ke-size=&quot;size18&quot;&gt;위 예제에서 볼 수 있듯이&lt;/p&gt;
&lt;p data-ke-size=&quot;size18&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size18&quot;&gt;함수 선언문은 호이스팅이 발생하여 실행이 되는것을 확인할 수 있습니다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size18&quot;&gt;하지만 함수 표현식에서는 실행이 되지 않고 에러가 발생하여 catch로 빠지게 됩니다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size18&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size18&quot;&gt;왜 이런 현상이 발생할까요?&lt;/p&gt;
&lt;p 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;widthContent&quot; data-origin-width=&quot;1918&quot; data-origin-height=&quot;874&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/Wxikw/btqFoBN7F3u/1KuNhE5xOogutKVghso311/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/Wxikw/btqFoBN7F3u/1KuNhE5xOogutKVghso311/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/Wxikw/btqFoBN7F3u/1KuNhE5xOogutKVghso311/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FWxikw%2FbtqFoBN7F3u%2F1KuNhE5xOogutKVghso311%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;1918&quot; height=&quot;874&quot; data-origin-width=&quot;1918&quot; data-origin-height=&quot;874&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;/p&gt;
&lt;p data-ke-size=&quot;size18&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size18&quot;&gt;자 사진을 보면 금방 이해하실수 있습니다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size18&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size18&quot;&gt;함수 선언문은 이름에서 알 수 있다시피 함수를 미리 선언해 놓는 것 이므로 함수가 호이스팅 되어 자바스크립트 최 상단에 올라가게 됩니다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size18&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size18&quot;&gt;하지만 함수 표현식인 var func2는 그저 변수에 함수를 담는 것 이므로 자바스크립트는 var func2에 대한 변수 메모리만 만들어 놓게 되는것 입니다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size18&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size18&quot;&gt;그래서 console.log(func2)는 위 변수 호이스팅 처럼 undfined가 출력되는것이고 &lt;span style=&quot;color: #333333;&quot;&gt;console.log(func1)은 함수 자체가 출력되는 것 입니다.&lt;/span&gt;&lt;/p&gt;
&lt;hr contenteditable=&quot;false&quot; data-ke-type=&quot;horizontalRule&quot; data-ke-style=&quot;style1&quot; /&gt;
&lt;h2 data-ke-size=&quot;size26&quot;&gt;&lt;span style=&quot;font-family: AppleSDGothicNeo-Regular, 'Malgun Gothic', '맑은 고딕', dotum, 돋움, sans-serif;&quot;&gt;&lt;b&gt;호이스팅&lt;span style=&quot;color: #333333;&quot;&gt;(&lt;/span&gt;&lt;span style=&quot;color: #333333;&quot;&gt;Hoisting&lt;/span&gt;&lt;span style=&quot;color: #333333;&quot;&gt;)&lt;/span&gt;에 우선순위&lt;/b&gt;&lt;/span&gt;&lt;/h2&gt;
&lt;p data-ke-size=&quot;size18&quot;&gt;이 호이스팅도 우선순위가 존재합니다. 먼저 소스를 봐보도록 하겠습니다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size18&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p class=&quot;codepen&quot; style=&quot;height: 265px; box-sizing: border-box; display: flex; align-items: center; justify-content: center; border: 2px solid; margin: 1em 0; padding: 1em;&quot; data-height=&quot;265&quot; data-theme-id=&quot;default&quot; data-default-tab=&quot;js&quot; data-user=&quot;noogoonaa&quot; data-slug-hash=&quot;abdqEWo&quot; data-pen-title=&quot;호이스팅 예시3&quot; data-ke-size=&quot;size18&quot;&gt;&lt;span&gt;See the Pen &lt;a href=&quot;https://codepen.io/noogoonaa/pen/abdqEWo&quot;&gt; 호이스팅 예시3&lt;/a&gt; by HyeonJun, Bang (&lt;a href=&quot;https://codepen.io/noogoonaa&quot;&gt;@noogoonaa&lt;/a&gt;) on &lt;a href=&quot;https://codepen.io&quot;&gt;CodePen&lt;/a&gt;.&lt;/span&gt;&lt;/p&gt;
&lt;script src=&quot;https://static.codepen.io/assets/embed/ei.js&quot;&gt;&lt;/script&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;widthContent&quot; data-origin-width=&quot;619&quot; data-origin-height=&quot;665&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/diHBQZ/btqFo4WBmrN/1Qk9CaxvDj8Fck8CXzLCp1/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/diHBQZ/btqFo4WBmrN/1Qk9CaxvDj8Fck8CXzLCp1/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/diHBQZ/btqFo4WBmrN/1Qk9CaxvDj8Fck8CXzLCp1/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FdiHBQZ%2FbtqFo4WBmrN%2F1Qk9CaxvDj8Fck8CXzLCp1%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;619&quot; height=&quot;665&quot; data-origin-width=&quot;619&quot; data-origin-height=&quot;665&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;/p&gt;
&lt;p data-ke-size=&quot;size18&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size18&quot;&gt;자 같은 이름의 변수와 함수를 순서를 바꿔서 선언했을 때 변수를 먼저 선언하든 함수를 먼저 선언하든 함수 호이스팅이 먼저 발생하게 됩니다. 그 후 변수를 만나 변수에 데이터를 넣는 것 입니다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size18&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size18&quot;&gt;변수 선언 &amp;gt; 함수 선언문&lt;/p&gt;
&lt;p data-ke-size=&quot;size18&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size18&quot;&gt;&lt;span style=&quot;color: #333333;&quot;&gt;즉, 다시 말해서 우선 순위가 위와 같이 변수 선언 보다 함수 선언이 느린것 입니다. 변수 선언이 더 빠르기 때문에 먼저 호이스팅 되고 함수가 그것을 덮어 씌우는 것 이지요&lt;/span&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size18&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size18&quot;&gt;&lt;span style=&quot;color: #333333;&quot;&gt;그 후 선언 이후에 실행되는 변수의 값들이 덮어 씌워져 문자열이 출력되게 됩니다.&lt;/span&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size18&quot;&gt;&lt;span style=&quot;color: #333333;&quot;&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;h2 data-ke-size=&quot;size26&quot;&gt;&lt;span style=&quot;font-family: AppleSDGothicNeo-Regular, 'Malgun Gothic', '맑은 고딕', dotum, 돋움, sans-serif;&quot;&gt;&lt;b&gt;마무리&lt;/b&gt;&lt;/span&gt;&lt;/h2&gt;
&lt;p data-ke-size=&quot;size18&quot;&gt;&lt;span&gt;오늘은 호이스팅에 대해서 알아보았습니다.&lt;/span&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size18&quot;&gt;&lt;span&gt;만약 포스트에 문제가 있거나 틀린부분이 있다면 댓글을 남겨주시기 바랍니다.&lt;/span&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size18&quot;&gt;&lt;span&gt;감사합니다.&lt;/span&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size18&quot;&gt;&amp;nbsp;&lt;/p&gt;</description>
      <category>프로그래밍 언어/웹 프론트엔드</category>
      <category>JavaScript</category>
      <author>방현준</author>
      <guid isPermaLink="true">https://noogoonaa.tistory.com/76</guid>
      <comments>https://noogoonaa.tistory.com/76#entry76comment</comments>
      <pubDate>Sun, 5 Jul 2020 23:16:16 +0900</pubDate>
    </item>
    <item>
      <title>자바스크립트 익명 함수(anonymous function) 기명 함수(named function)의 차이</title>
      <link>https://noogoonaa.tistory.com/75</link>
      <description>&lt;hr contenteditable=&quot;false&quot; data-ke-type=&quot;horizontalRule&quot; data-ke-style=&quot;style5&quot; /&gt;
&lt;h2 data-ke-size=&quot;size26&quot;&gt;&lt;span style=&quot;color: #ee2323;&quot;&gt;&lt;b&gt;함께보면 좋은 글&lt;/b&gt;&lt;/span&gt;&lt;/h2&gt;
&lt;ul style=&quot;list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li&gt;&lt;span style=&quot;letter-spacing: 0px;&quot;&gt;&lt;/span&gt;&lt;a style=&quot;letter-spacing: 0px;&quot; href=&quot;https://noogoonaa.tistory.com/76&quot; target=&quot;_blank&quot; rel=&quot;noopener&quot;&gt;2020/07/05 - [프로그래밍 언어/Javascript] - 자바스크립트 호이스팅(Hoisting)이란?&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;span style=&quot;letter-spacing: 0px;&quot;&gt;&lt;/span&gt;&lt;a style=&quot;letter-spacing: 0px;&quot; href=&quot;https://noogoonaa.tistory.com/78&quot; target=&quot;_blank&quot; rel=&quot;noopener&quot;&gt;2020/07/19 - [프로그래밍 언어/Javascript] - TDZ(Temporal Dead Zone)이란?&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;hr contenteditable=&quot;false&quot; data-ke-type=&quot;horizontalRule&quot; data-ke-style=&quot;style5&quot; /&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;font-family: AppleSDGothicNeo-Regular, 'Malgun Gothic', '맑은 고딕', dotum, 돋움, sans-serif;&quot;&gt;자 오늘은 자바스크립트에서 사용되는 익명함수와 기명함수 또는 무명함수와 선언적 함수라고도 하는 이 두 함수의 차이에 대해 알아보도록 하겠습니다.&lt;/span&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-filename=&quot;자바스크립트.png&quot; data-origin-width=&quot;700&quot; data-origin-height=&quot;525&quot; data-ke-mobilestyle=&quot;widthContent&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/c95Qbr/btqFk6Bvg0N/cB0kjNRwoDCyEOJQcqZPqK/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/c95Qbr/btqFk6Bvg0N/cB0kjNRwoDCyEOJQcqZPqK/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/c95Qbr/btqFk6Bvg0N/cB0kjNRwoDCyEOJQcqZPqK/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2Fc95Qbr%2FbtqFk6Bvg0N%2FcB0kjNRwoDCyEOJQcqZPqK%2Fimg.png&quot; data-filename=&quot;자바스크립트.png&quot; data-origin-width=&quot;700&quot; data-origin-height=&quot;525&quot; data-ke-mobilestyle=&quot;widthContent&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;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;/p&gt;
&lt;hr contenteditable=&quot;false&quot; data-ke-type=&quot;horizontalRule&quot; data-ke-style=&quot;style3&quot; /&gt;
&lt;h2 data-ke-size=&quot;size26&quot;&gt;&lt;span style=&quot;font-family: AppleSDGothicNeo-Regular, 'Malgun Gothic', '맑은 고딕', dotum, 돋움, sans-serif;&quot;&gt;&lt;b&gt;익명함수(Anonymouse Function)&lt;/b&gt;&lt;/span&gt;&lt;/h2&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;font-family: AppleSDGothicNeo-Regular, 'Malgun Gothic', '맑은 고딕', dotum, 돋움, sans-serif;&quot;&gt;자 첫번째로 익명함수에 대해 알아보도록 하겠습니다. 이 익명함수 또는 무명함수같은 경우는 따로 사용자가 함수를 만들 때 이름을 지정하지 않고 변수 혹은 그냥 호출만으로 선언할 수 있는 함수 입니다. 간단한 코드를 봐보겠습니다.&lt;/span&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p class=&quot;codepen&quot; style=&quot;height: 265px; box-sizing: border-box; display: flex; align-items: center; justify-content: center; border: 2px solid; margin: 1em 0; padding: 1em;&quot; data-height=&quot;265&quot; data-theme-id=&quot;dark&quot; data-default-tab=&quot;html,result&quot; data-user=&quot;noogoonaa&quot; data-slug-hash=&quot;YzwYdvx&quot; data-pen-title=&quot;Anonymouse Function&quot; data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;font-family: AppleSDGothicNeo-Regular, 'Malgun Gothic', '맑은 고딕', dotum, 돋움, sans-serif;&quot;&gt;See the Pen &lt;a href=&quot;https://codepen.io/noogoonaa/pen/YzwYdvx&quot;&gt; Anonymouse Function&lt;/a&gt; by HyeonJun, Bang (&lt;a href=&quot;https://codepen.io/noogoonaa&quot;&gt;@noogoonaa&lt;/a&gt;) on &lt;a href=&quot;https://codepen.io&quot;&gt;CodePen&lt;/a&gt;.&lt;/span&gt;&lt;/p&gt;
&lt;script src=&quot;https://static.codepen.io/assets/embed/ei.js&quot;&gt;&lt;/script&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;font-family: AppleSDGothicNeo-Regular, 'Malgun Gothic', '맑은 고딕', dotum, 돋움, sans-serif;&quot;&gt;위 코드와 같이 이런식으로 사용이 가능합니다. 비록 익명함수 같은경우는&amp;nbsp;func라는 이름을 가지고 있지만. func는 그저 함수를 가지고 있는 변수에 불과하므로 이름을 가지고 있다고는 말 할 수 없습니다.&lt;/span&gt;&lt;/p&gt;
&lt;hr contenteditable=&quot;false&quot; data-ke-type=&quot;horizontalRule&quot; data-ke-style=&quot;style1&quot; /&gt;
&lt;h2 data-ke-size=&quot;size26&quot;&gt;&lt;span style=&quot;font-family: AppleSDGothicNeo-Regular, 'Malgun Gothic', '맑은 고딕', dotum, 돋움, sans-serif;&quot;&gt;&lt;b&gt;기명함수(Named Function)&lt;/b&gt;&lt;/span&gt;&lt;/h2&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;font-family: AppleSDGothicNeo-Regular, 'Malgun Gothic', '맑은 고딕', dotum, 돋움, sans-serif;&quot;&gt;기명함수는 사용자가 이름을 지정한 함수로, 선언적 함수라고도 부르는 함수입니다. 이 기명 함수란 것도 코드를 한번 살펴 볼까요?&lt;/span&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p class=&quot;codepen&quot; style=&quot;height: 265px; box-sizing: border-box; display: flex; align-items: center; justify-content: center; border: 2px solid; margin: 1em 0; padding: 1em;&quot; data-height=&quot;265&quot; data-theme-id=&quot;dark&quot; data-default-tab=&quot;js,result&quot; data-user=&quot;noogoonaa&quot; data-slug-hash=&quot;GRoyPwx&quot; data-pen-title=&quot;기명함수&quot; data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;font-family: AppleSDGothicNeo-Regular, 'Malgun Gothic', '맑은 고딕', dotum, 돋움, sans-serif;&quot;&gt;See the Pen &lt;a href=&quot;https://codepen.io/noogoonaa/pen/GRoyPwx&quot;&gt; 기명함수&lt;/a&gt; by HyeonJun, Bang (&lt;a href=&quot;https://codepen.io/noogoonaa&quot;&gt;@noogoonaa&lt;/a&gt;) on &lt;a href=&quot;https://codepen.io&quot;&gt;CodePen&lt;/a&gt;.&lt;/span&gt;&lt;/p&gt;
&lt;script src=&quot;https://static.codepen.io/assets/embed/ei.js&quot;&gt;&lt;/script&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;font-family: AppleSDGothicNeo-Regular, 'Malgun Gothic', '맑은 고딕', dotum, 돋움, sans-serif;&quot;&gt;위 코드와 같이 실행이 가능합니다.&lt;/span&gt;&lt;/p&gt;
&lt;hr contenteditable=&quot;false&quot; data-ke-type=&quot;horizontalRule&quot; data-ke-style=&quot;style1&quot; /&gt;
&lt;h2 data-ke-size=&quot;size26&quot;&gt;&lt;span style=&quot;font-family: AppleSDGothicNeo-Regular, 'Malgun Gothic', '맑은 고딕', dotum, 돋움, sans-serif;&quot;&gt;&lt;b&gt;익명함수(Anonymouse Function)&lt;/b&gt;&lt;b&gt;와 &lt;b&gt;기명함수(Named Function)&lt;/b&gt;의 차이&lt;/b&gt;&lt;/span&gt;&lt;/h2&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;font-family: AppleSDGothicNeo-Regular, 'Malgun Gothic', '맑은 고딕', dotum, 돋움, sans-serif;&quot;&gt;그럼 이 두개의 차이점은 무엇일까요? 이 두 함수는 브라우저가 읽는 순서의 차이가 있습니다.&lt;/span&gt;&lt;/p&gt;
&lt;blockquote data-ke-size=&quot;size16&quot; data-ke-style=&quot;style3&quot;&gt;&lt;span style=&quot;font-family: AppleSDGothicNeo-Regular, 'Malgun Gothic', '맑은 고딕', dotum, 돋움, sans-serif;&quot;&gt;&lt;b&gt;익명함수&lt;/b&gt; 같은 경우는 브라우저가 런타임(RunTime)에 동적으로 선언되는 함수입니다.&lt;/span&gt;&lt;/blockquote&gt;
&lt;blockquote data-ke-size=&quot;size16&quot; data-ke-style=&quot;style3&quot;&gt;&lt;span style=&quot;font-family: AppleSDGothicNeo-Regular, 'Malgun Gothic', '맑은 고딕', dotum, 돋움, sans-serif;&quot;&gt;&lt;b&gt;기명함수&lt;/b&gt; 같은 경우는 브라우저가 런타임&lt;span style=&quot;color: #333333;&quot;&gt;(RunTime)&lt;/span&gt; 이전에 선언되는 함수입니다.&lt;/span&gt;&lt;/blockquote&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;font-family: AppleSDGothicNeo-Regular, 'Malgun Gothic', '맑은 고딕', dotum, 돋움, sans-serif;&quot;&gt;잘 이해가 안가시나요? 한번 아래 코드를 한번 보도록 하겠습니다.&lt;/span&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p class=&quot;codepen&quot; style=&quot;height: 265px; box-sizing: border-box; display: flex; align-items: center; justify-content: center; border: 2px solid; margin: 1em 0; padding: 1em;&quot; data-height=&quot;265&quot; data-theme-id=&quot;dark&quot; data-default-tab=&quot;js,result&quot; data-user=&quot;noogoonaa&quot; data-slug-hash=&quot;rNxpoEx&quot; data-pen-title=&quot;익명함수 기명함수의 차이&quot; data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;font-family: AppleSDGothicNeo-Regular, 'Malgun Gothic', '맑은 고딕', dotum, 돋움, sans-serif;&quot;&gt;See the Pen &lt;a href=&quot;https://codepen.io/noogoonaa/pen/rNxpoEx&quot;&gt; 익명함수 기명함수의 차이&lt;/a&gt; by HyeonJun, Bang (&lt;a href=&quot;https://codepen.io/noogoonaa&quot;&gt;@noogoonaa&lt;/a&gt;) on &lt;a href=&quot;https://codepen.io&quot;&gt;CodePen&lt;/a&gt;.&lt;/span&gt;&lt;/p&gt;
&lt;script src=&quot;https://static.codepen.io/assets/embed/ei.js&quot;&gt;&lt;/script&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;font-family: AppleSDGothicNeo-Regular, 'Malgun Gothic', '맑은 고딕', dotum, 돋움, sans-serif;&quot;&gt;어떤가요? 둘다 같은 이름으로 선언하고 호출했을 때 실행되는 함수는 둘다 무명함수 이지요?&amp;nbsp;&lt;/span&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;font-family: AppleSDGothicNeo-Regular, 'Malgun Gothic', '맑은 고딕', dotum, 돋움, sans-serif;&quot;&gt;이렇듯, 익명함수가 기명함수 이후에 실행이 되므로 익명함수가 실행되게 되는것 입니다.&lt;/span&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;font-family: AppleSDGothicNeo-Regular, 'Malgun Gothic', '맑은 고딕', dotum, 돋움, sans-serif;&quot;&gt;어때요? 간단하죠?&lt;/span&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;font-family: AppleSDGothicNeo-Regular, 'Malgun Gothic', '맑은 고딕', dotum, 돋움, sans-serif;&quot;&gt;(사실 이 또한 동작방식이 호이스팅과 연관이 있습니다. 하지만 이 포스팅에서는 따로 다루지 않고 &lt;a href=&quot;https://noogoonaa.tistory.com/76?category=855168&quot; target=&quot;_blank&quot; rel=&quot;noopener&quot;&gt;호이스팅 포스팅&lt;/a&gt;, &lt;a href=&quot;https://noogoonaa.tistory.com/78&quot; target=&quot;_blank&quot; rel=&quot;noopener&quot;&gt;TDZ 포스팅&lt;/a&gt;에서 따로 다루도록 하겠습니다.)&lt;/span&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;font-family: AppleSDGothicNeo-Regular, 'Malgun Gothic', '맑은 고딕', dotum, 돋움, sans-serif;&quot;&gt;그냥 두 함수의 차이는 런타임 이전에 실행되느냐, 아니면 런타임 이후에 실행되는냐로 나누면 됩니다.&lt;/span&gt;&lt;/p&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;
&lt;hr contenteditable=&quot;false&quot; data-ke-type=&quot;horizontalRule&quot; data-ke-style=&quot;style3&quot; /&gt;
&lt;h2 data-ke-size=&quot;size26&quot;&gt;&lt;span style=&quot;font-family: AppleSDGothicNeo-Regular, 'Malgun Gothic', '맑은 고딕', dotum, 돋움, sans-serif;&quot;&gt;&lt;b&gt;마무리&lt;/b&gt;&lt;/span&gt;&lt;/h2&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;font-family: AppleSDGothicNeo-Regular, 'Malgun Gothic', '맑은 고딕', dotum, 돋움, sans-serif;&quot;&gt;오늘은 기명함수와 익명함수의 차이에 대해서 알 수 있었습니다.&lt;/span&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;font-family: AppleSDGothicNeo-Regular, 'Malgun Gothic', '맑은 고딕', dotum, 돋움, sans-serif;&quot;&gt;만약 포스트에 문제가 있거나 틀린부분이 있다면 댓글을 남겨주시기 바랍니다.&lt;/span&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;font-family: AppleSDGothicNeo-Regular, 'Malgun Gothic', '맑은 고딕', dotum, 돋움, sans-serif;&quot;&gt;감사합니다.&lt;/span&gt;&lt;/p&gt;</description>
      <category>프로그래밍 언어/웹 프론트엔드</category>
      <category>JavaScript</category>
      <author>방현준</author>
      <guid isPermaLink="true">https://noogoonaa.tistory.com/75</guid>
      <comments>https://noogoonaa.tistory.com/75#entry75comment</comments>
      <pubDate>Sat, 4 Jul 2020 01:02:16 +0900</pubDate>
    </item>
    <item>
      <title>[프로그래머스][Javascript] 멀쩡한 사각형</title>
      <link>https://noogoonaa.tistory.com/74</link>
      <description>&lt;hr contenteditable=&quot;false&quot; data-ke-type=&quot;horizontalRule&quot; data-ke-style=&quot;style5&quot; /&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-filename=&quot;알고리즘.png&quot; data-origin-width=&quot;700&quot; data-origin-height=&quot;525&quot; data-ke-mobilestyle=&quot;widthContent&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/BHPYm/btqEKRpAcpc/PPaAYGa1gicpwXqxqaTkT1/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/BHPYm/btqEKRpAcpc/PPaAYGa1gicpwXqxqaTkT1/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/BHPYm/btqEKRpAcpc/PPaAYGa1gicpwXqxqaTkT1/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FBHPYm%2FbtqEKRpAcpc%2FPPaAYGa1gicpwXqxqaTkT1%2Fimg.png&quot; data-filename=&quot;알고리즘.png&quot; data-origin-width=&quot;700&quot; data-origin-height=&quot;525&quot; data-ke-mobilestyle=&quot;widthContent&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;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;/p&gt;
&lt;h2 data-ke-size=&quot;size26&quot;&gt;&lt;span style=&quot;font-family: 'Noto Sans Demilight', 'Noto Sans KR';&quot;&gt;&lt;b&gt;문제 설명&lt;/b&gt;&lt;/span&gt;&lt;/h2&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;font-family: 'Noto Sans Demilight', 'Noto Sans KR';&quot;&gt;가로 길이가 Wcm, 세로 길이가 Hcm인 직사각형 종이가 있습니다. 종이에는 가로, 세로 방향과 평행하게 격자 형태로 선이 그어져 있으며, 모든 격자칸은 1cm x 1cm 크기입니다. 이 종이를 격자 선을 따라 1cm &amp;times; 1cm의 정사각형으로 잘라 사용할 예정이었는데, 누군가가 이 종이를 대각선 꼭지점 2개를 잇는 방향으로 잘라 놓았습니다. &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 Sans Demilight', 'Noto Sans KR';&quot;&gt;그러므로 현재 직사각형 종이는 크기가 같은 직각삼각형 2개로 나누어진 상태입니다. 새로운 종이를 구할 수 없는 상태이기 때문에, 이 종이에서 원래 종이의 가로, 세로 방향과 평행하게 1cm &amp;times; 1cm로 잘라 사용할 수 있는 만큼만 사용하기로 하였습니다.&lt;/span&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;font-family: 'Noto Sans Demilight', 'Noto Sans KR';&quot;&gt;&lt;br /&gt;가로의 길이 W와 세로의 길이 H가 주어질 때, 사용할 수 있는 정사각형의 개수를 구하는 solution 함수를 완성해 주세요.&lt;/span&gt;&lt;/p&gt;
&lt;hr contenteditable=&quot;false&quot; data-ke-type=&quot;horizontalRule&quot; data-ke-style=&quot;style1&quot; /&gt;
&lt;h2 data-ke-size=&quot;size26&quot;&gt;&lt;span style=&quot;font-family: 'Noto Sans Demilight', 'Noto Sans KR';&quot;&gt;&lt;b&gt;제한사항&lt;/b&gt;&lt;/span&gt;&lt;/h2&gt;
&lt;ul style=&quot;list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;font-family: 'Noto Sans Demilight', 'Noto Sans KR';&quot;&gt;&lt;i&gt;W, H : 1억 이하의 자연수&lt;/i&gt;&lt;/span&gt;&lt;/p&gt;
&lt;/li&gt;
&lt;/ul&gt;
&lt;hr contenteditable=&quot;false&quot; data-ke-type=&quot;horizontalRule&quot; data-ke-style=&quot;style1&quot; /&gt;
&lt;p&gt;&lt;span style=&quot;font-family: 'Noto Sans Demilight', 'Noto Sans KR';&quot;&gt;&lt;b&gt;입출력 예&lt;/b&gt;&lt;/span&gt;&lt;/p&gt;
&lt;table style=&quot;border-collapse: collapse; width: 100%; height: 44px;&quot; border=&quot;1&quot; data-ke-style=&quot;style4&quot;&gt;
&lt;tbody&gt;
&lt;tr style=&quot;height: 22px;&quot;&gt;
&lt;td style=&quot;width: 33.3333%; text-align: center; height: 22px;&quot;&gt;&lt;span style=&quot;font-family: 'Noto Sans Demilight', 'Noto Sans KR';&quot;&gt;&lt;b&gt;W&lt;/b&gt;&lt;/span&gt;&lt;/td&gt;
&lt;td style=&quot;width: 33.3333%; text-align: center; height: 22px;&quot;&gt;&lt;span style=&quot;font-family: 'Noto Sans Demilight', 'Noto Sans KR';&quot;&gt;&lt;b&gt;H&lt;/b&gt;&lt;/span&gt;&lt;/td&gt;
&lt;td style=&quot;width: 33.3333%; text-align: center; height: 22px;&quot;&gt;&lt;span style=&quot;font-family: 'Noto Sans Demilight', 'Noto Sans KR';&quot;&gt;&lt;b&gt;result&lt;/b&gt;&lt;/span&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;tr style=&quot;height: 22px;&quot;&gt;
&lt;td style=&quot;width: 33.3333%; height: 22px;&quot;&gt;&lt;span style=&quot;font-family: 'Noto Sans Demilight', 'Noto Sans KR'; color: #000000;&quot;&gt;8&lt;/span&gt;&lt;/td&gt;
&lt;td style=&quot;width: 33.3333%; height: 22px;&quot;&gt;&lt;span style=&quot;font-family: 'Noto Sans Demilight', 'Noto Sans KR'; color: #000000;&quot;&gt;12&lt;/span&gt;&lt;/td&gt;
&lt;td style=&quot;width: 33.3333%; height: 22px;&quot;&gt;&lt;span style=&quot;font-family: 'Noto Sans Demilight', 'Noto Sans KR'; color: #000000;&quot;&gt;80&lt;/span&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;
&lt;hr contenteditable=&quot;false&quot; data-ke-type=&quot;horizontalRule&quot; data-ke-style=&quot;style1&quot; /&gt;
&lt;h2 data-ke-size=&quot;size26&quot;&gt;&lt;span style=&quot;font-family: 'Noto Sans Demilight', 'Noto Sans KR';&quot;&gt;&lt;b&gt;입출력 예 설명&lt;/b&gt;&lt;/span&gt;&lt;/h2&gt;
&lt;p data-ke-size=&quot;size18&quot;&gt;&lt;span style=&quot;font-family: 'Noto Sans Demilight', 'Noto Sans KR';&quot;&gt;&lt;i&gt;&lt;b&gt;입출력 예 #1&lt;/b&gt;&lt;/i&gt;&lt;/span&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;font-family: 'Noto Sans Demilight', 'Noto Sans KR';&quot;&gt;가로가 8, 세로가 12인 직사각형을 대각선 방향으로 자르면 총 16개 정사각형을 사용할 수 없게 됩니다. 원래 직사각형에서는 96개의 정사각형을 만들 수 있었으므로, 96 - 16 = 80 을 반환합니다.&lt;/span&gt;&lt;/p&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-filename=&quot;567420db-20f4-4064-afc3-af54c4a46016.png&quot; data-origin-width=&quot;412&quot; data-origin-height=&quot;570&quot; data-ke-mobilestyle=&quot;widthContent&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/b3H5Hm/btqEJB8PyA6/Oh1QyypBJdBt1xscxLsTK1/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/b3H5Hm/btqEJB8PyA6/Oh1QyypBJdBt1xscxLsTK1/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/b3H5Hm/btqEJB8PyA6/Oh1QyypBJdBt1xscxLsTK1/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2Fb3H5Hm%2FbtqEJB8PyA6%2FOh1QyypBJdBt1xscxLsTK1%2Fimg.png&quot; data-filename=&quot;567420db-20f4-4064-afc3-af54c4a46016.png&quot; data-origin-width=&quot;412&quot; data-origin-height=&quot;570&quot; data-ke-mobilestyle=&quot;widthContent&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;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;/p&gt;
&lt;hr contenteditable=&quot;false&quot; data-ke-type=&quot;horizontalRule&quot; data-ke-style=&quot;style3&quot; /&gt;
&lt;h2 data-ke-size=&quot;size26&quot;&gt;&lt;span style=&quot;font-family: 'Noto Sans Demilight', 'Noto Sans KR';&quot;&gt;&lt;b&gt;문제 설명&lt;/b&gt;&lt;/span&gt;&lt;/h2&gt;
&lt;p&gt;&lt;span style=&quot;font-family: 'Noto Sans Demilight', 'Noto Sans KR';&quot;&gt;그림을 한번 살펴봅시다.&lt;/span&gt;&lt;/p&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-filename=&quot;Screenshot_246.png&quot; data-origin-width=&quot;751&quot; data-origin-height=&quot;596&quot; data-ke-mobilestyle=&quot;widthContent&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/c28BJj/btqEIJfAIFp/0FwvHmesAtA17hR2afEM0k/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/c28BJj/btqEIJfAIFp/0FwvHmesAtA17hR2afEM0k/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/c28BJj/btqEIJfAIFp/0FwvHmesAtA17hR2afEM0k/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2Fc28BJj%2FbtqEIJfAIFp%2F0FwvHmesAtA17hR2afEM0k%2Fimg.png&quot; data-filename=&quot;Screenshot_246.png&quot; data-origin-width=&quot;751&quot; data-origin-height=&quot;596&quot; data-ke-mobilestyle=&quot;widthContent&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;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;/p&gt;
&lt;p&gt;&lt;span style=&quot;font-family: 'Noto Sans Demilight', 'Noto Sans KR';&quot;&gt;3 X 1 의 사각형 일 경우 3개의 사각형을 지나게 됩니다.&lt;/span&gt;&lt;/p&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-filename=&quot;Screenshot_247.png&quot; data-origin-width=&quot;597&quot; data-origin-height=&quot;599&quot; data-ke-mobilestyle=&quot;widthContent&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/bkB7pF/btqEIVz4nzm/doHNXbiFcKcOapeesUkmjK/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/bkB7pF/btqEIVz4nzm/doHNXbiFcKcOapeesUkmjK/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/bkB7pF/btqEIVz4nzm/doHNXbiFcKcOapeesUkmjK/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FbkB7pF%2FbtqEIVz4nzm%2FdoHNXbiFcKcOapeesUkmjK%2Fimg.png&quot; data-filename=&quot;Screenshot_247.png&quot; data-origin-width=&quot;597&quot; data-origin-height=&quot;599&quot; data-ke-mobilestyle=&quot;widthContent&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;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;/p&gt;
&lt;p&gt;&lt;span style=&quot;font-family: 'Noto Sans Demilight', 'Noto Sans KR';&quot;&gt;3 X 2 사각형일 경우 4개의 사각형을 지나게 됩니다.&lt;/span&gt;&lt;/p&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-filename=&quot;Screenshot_249.png&quot; data-origin-width=&quot;547&quot; data-origin-height=&quot;562&quot; data-ke-mobilestyle=&quot;widthContent&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/K6Wxm/btqEJiuXZUn/mTct2W4Lk2K4KyoDI466ik/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/K6Wxm/btqEJiuXZUn/mTct2W4Lk2K4KyoDI466ik/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/K6Wxm/btqEJiuXZUn/mTct2W4Lk2K4KyoDI466ik/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FK6Wxm%2FbtqEJiuXZUn%2FmTct2W4Lk2K4KyoDI466ik%2Fimg.png&quot; data-filename=&quot;Screenshot_249.png&quot; data-origin-width=&quot;547&quot; data-origin-height=&quot;562&quot; data-ke-mobilestyle=&quot;widthContent&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;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;font-family: 'Noto Sans Demilight', 'Noto Sans KR';&quot;&gt;3 X 3 사각형 일 때는 3개 의 사각형을 지나게 됩니다.&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 Sans Demilight', 'Noto Sans 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 Sans Demilight', 'Noto Sans 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 Sans Demilight', 'Noto Sans 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 Sans Demilight', 'Noto Sans KR';&quot;&gt;그래서 구글의 힘을 빌려 해당 &lt;a href=&quot;https://hyem-study.tistory.com/45&quot; target=&quot;_blank&quot; rel=&quot;noopener&quot;&gt;블로그&lt;/a&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 Sans Demilight', 'Noto Sans 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 Sans Demilight', 'Noto Sans KR';&quot;&gt;(&lt;a href=&quot;https://m.blog.naver.com/PostView.nhn?blogId=zzinuhelios&amp;amp;logNo=120024685950&amp;amp;proxyReferer=https:%2F%2Fwww.google.com%2F&quot; target=&quot;_blank&quot; rel=&quot;noopener&quot;&gt;링크&lt;/a&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 Sans Demilight', 'Noto Sans 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 Sans Demilight', 'Noto Sans 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 Sans Demilight', 'Noto Sans 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 Sans Demilight', 'Noto Sans KR';&quot;&gt;즉, &lt;/span&gt;&lt;/p&gt;
&lt;blockquote data-ke-size=&quot;size16&quot; data-ke-style=&quot;style3&quot;&gt;&lt;span style=&quot;color: #006dd7;&quot;&gt;&lt;b&gt;&lt;span style=&quot;font-family: 'Noto Sans Demilight', 'Noto Sans KR';&quot;&gt;W + H - (W, H의 최대 공약수)&lt;/span&gt;&lt;/b&gt;&lt;/span&gt;&lt;/blockquote&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;font-family: 'Noto Sans Demilight', 'Noto Sans 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 Sans Demilight', 'Noto Sans 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 Sans Demilight', 'Noto Sans 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 Sans Demilight', 'Noto Sans 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 Sans Demilight', 'Noto Sans 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 Sans Demilight', 'Noto Sans KR';&quot;&gt;예를들어 3과 5의 최대 공약수를 구한다고 생각해 봅시다.&lt;/span&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;font-family: 'Noto Sans Demilight', 'Noto Sans KR';&quot;&gt;3의 약수는 [ 1, 3 ]&amp;nbsp;&lt;/span&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;font-family: 'Noto Sans Demilight', 'Noto Sans KR';&quot;&gt;5의 약수는 [ 1, 5 ]&lt;/span&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;font-family: 'Noto Sans Demilight', 'Noto Sans 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 Sans Demilight', 'Noto Sans KR';&quot;&gt;그렇기 때문에 둘의 공통 약수 중 가장 큰수는 1입니다.&lt;/span&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;font-family: 'Noto Sans Demilight', 'Noto Sans KR';&quot;&gt;그렇다면 이 1이라는 수를 어떻게 구해야 할까요?&lt;/span&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;color: #333333; font-family: 'Noto Sans Demilight', 'Noto Sans KR';&quot;&gt;그것은 바로 유클리드 호제법을 사용하여 구현할 수 있습니다.&lt;/span&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;color: #333333; font-family: 'Noto Sans Demilight', 'Noto Sans KR';&quot;&gt;아래 그림을 보시죠&lt;/span&gt;&lt;/p&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-filename=&quot;Screenshot_250.png&quot; data-origin-width=&quot;780&quot; data-origin-height=&quot;681&quot; data-ke-mobilestyle=&quot;widthContent&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/djf8dE/btqEKPMblvC/oJQLCK3jtS44JwXphqrUS1/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/djf8dE/btqEKPMblvC/oJQLCK3jtS44JwXphqrUS1/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/djf8dE/btqEKPMblvC/oJQLCK3jtS44JwXphqrUS1/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2Fdjf8dE%2FbtqEKPMblvC%2FoJQLCK3jtS44JwXphqrUS1%2Fimg.png&quot; data-filename=&quot;Screenshot_250.png&quot; data-origin-width=&quot;780&quot; data-origin-height=&quot;681&quot; data-ke-mobilestyle=&quot;widthContent&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;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;/p&gt;
&lt;p&gt;&lt;span style=&quot;font-family: 'Noto Sans Demilight', 'Noto Sans KR';&quot;&gt;유클리드 호제법은 &lt;/span&gt;&lt;span style=&quot;font-family: 'Noto Sans Demilight', 'Noto Sans KR';&quot;&gt;W 와 H를 나눈 값의 나머지가 0이 나올때 까지 반복하여 0이 나올 경우 0이 나올 수 있었던 H를 반환하는 행위 입니다.&lt;/span&gt;&lt;/p&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;&lt;span style=&quot;font-family: 'Noto Sans Demilight', 'Noto Sans KR';&quot;&gt;혹시 모르니 그림에 대한 설명을 드리자면 아래와 같습니다.&lt;/span&gt;&lt;/p&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;
&lt;ol style=&quot;list-style-type: decimal;&quot; data-ke-list-type=&quot;decimal&quot;&gt;
&lt;li&gt;&lt;span style=&quot;font-family: 'Noto Sans Demilight', 'Noto Sans KR';&quot;&gt;3 % 5 의 나머지가 3이므로 W에 5를 넣고 H에 3을 넣어 나머지를 구합니다.&lt;/span&gt;&lt;/li&gt;
&lt;li&gt;&lt;span style=&quot;font-family: 'Noto Sans Demilight', 'Noto Sans KR';&quot;&gt;5 % 3 의 나머지가 2 이므로 &lt;span style=&quot;color: #333333;&quot;&gt;W에 3를 넣고 H에 2을 넣어 나머지를 구합니다.&lt;/span&gt;&lt;/span&gt;&lt;/li&gt;
&lt;li&gt;&lt;span style=&quot;font-family: 'Noto Sans Demilight', 'Noto Sans KR';&quot;&gt;&lt;span style=&quot;color: #333333;&quot;&gt;3 % 2 의 나머지가 1 이므로&amp;nbsp;&lt;/span&gt;&lt;span style=&quot;color: #333333;&quot;&gt;W에 2를 넣고 H에 1을 넣어 나머지를 구합니다.&lt;/span&gt;&lt;/span&gt;&lt;/li&gt;
&lt;li&gt;&lt;span style=&quot;color: #333333; font-family: 'Noto Sans Demilight', 'Noto Sans KR';&quot;&gt;&lt;span style=&quot;color: #333333;&quot;&gt;2 % 1 의 나머지가 0 이므로 H인 1을 반환합니다.&lt;/span&gt;&lt;/span&gt;&lt;/li&gt;
&lt;/ol&gt;
&lt;p&gt;&lt;span style=&quot;font-family: 'Noto Sans Demilight', 'Noto Sans KR';&quot;&gt;어때요 이해가 가시나요?&lt;/span&gt;&lt;/p&gt;
&lt;p&gt;&lt;span style=&quot;font-family: 'Noto Sans Demilight', 'Noto Sans KR';&quot;&gt;그래도 이해가 안가신다구요?&lt;/span&gt;&lt;/p&gt;
&lt;p&gt;&lt;span style=&quot;font-family: 'Noto Sans Demilight', 'Noto Sans KR';&quot;&gt;그렇다면 코드로 한번 보시죠.&lt;/span&gt;&lt;/p&gt;
&lt;pre id=&quot;code_1591721148786&quot; class=&quot;javascript&quot; data-ke-language=&quot;javascript&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;// 유클리드 호제법을 이용한 최대 공약수 구하기
function gcd(w, h) {    // 처음 W와 H를 받습니다.

    // W와 H의 나머지를 구합니다.
    const mod = w % h;

    // 만약 나머지가 0일 경우 H를 반환합니다.
    if (mod === 0) {
        return h;
    }

    // 만약 0이 아닐경우 W에 H를 넣고 H에 나머지인 mod를 넣어 해당 함수를 다시 호출해 줍니다.
    return gcd(h, mod);
}&lt;/code&gt;&lt;/pre&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;font-family: 'Noto Sans Demilight', 'Noto Sans 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 Sans Demilight', 'Noto Sans KR';&quot;&gt;이렇게 gcd를 구했으면 해당 문제는 다 해결된 것 입니다.&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 Sans Demilight', 'Noto Sans KR';&quot;&gt;위에서 설명했듯이&lt;/span&gt;&lt;/p&gt;
&lt;blockquote data-ke-style=&quot;style3&quot;&gt;&lt;span style=&quot;color: #006dd7;&quot;&gt;&lt;b&gt;W + H - (W, H의 최대 공약수)&lt;/b&gt;&lt;/span&gt;&lt;/blockquote&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;color: #333333; font-family: 'Noto Sans Demilight', 'Noto Sans KR';&quot;&gt;이 공식을 사용하면 되기 때문입니다.&lt;/span&gt;&lt;/p&gt;
&lt;h3 data-ke-size=&quot;size23&quot;&gt;&amp;nbsp;&lt;/h3&gt;
&lt;hr contenteditable=&quot;false&quot; data-ke-type=&quot;horizontalRule&quot; data-ke-style=&quot;style1&quot; /&gt;
&lt;h2 data-ke-size=&quot;size26&quot;&gt;&lt;span style=&quot;font-family: 'Noto Sans Demilight', 'Noto Sans KR';&quot;&gt;소스코드&lt;/span&gt;&lt;/h2&gt;
&lt;pre id=&quot;code_1591721293984&quot; class=&quot;javascript&quot; data-ke-language=&quot;javascript&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;// 유클리드 호제법을 이용한 최대 공약수 구하기
function gcd(w, h) {    // 처음 W와 H를 받습니다.

    // W와 H의 나머지를 구합니다.
    const mod = w % h;

    // 만약 나머지가 0일 경우 H를 반환합니다.
    if (mod === 0) {
        return h;
    }

    // 만약 0이 아닐경우 W에 H를 넣고 H에 나머지인 mod를 넣어 해당 함수를 다시 호출해 줍니다.
    return gcd(h, mod);
}


function solution(w, h) {
    // 최대 공약수를 구해줍니다.
    const gcdVal = gcd(w, h);

    // 공식에 맞춰 사용
    return w * h - (w + h - gcdVal);
}

console.log(solution(8, 12))&lt;/code&gt;&lt;/pre&gt;
&lt;hr contenteditable=&quot;false&quot; data-ke-type=&quot;horizontalRule&quot; data-ke-style=&quot;style5&quot; /&gt;
&lt;h2 data-ke-size=&quot;size26&quot;&gt;&lt;span style=&quot;font-family: 'Noto Sans Demilight', 'Noto Sans KR';&quot;&gt;&lt;b&gt;마치며&lt;/b&gt;&lt;/span&gt;&lt;/h2&gt;
&lt;p&gt;&lt;span style=&quot;font-family: 'Noto Sans Demilight', 'Noto Sans KR';&quot;&gt;이번 문제는 공식을 몰랐다면 아예 풀지 못하는 문제였고,&lt;/span&gt;&lt;/p&gt;
&lt;p&gt;&lt;span style=&quot;font-family: 'Noto Sans Demilight', 'Noto Sans KR';&quot;&gt;Level 2 치고는 꽤 어려웠습니다만,&lt;/span&gt;&lt;/p&gt;
&lt;p&gt;&lt;span style=&quot;font-family: 'Noto Sans Demilight', 'Noto Sans KR';&quot;&gt;소스코드는 진짜 심플 합니다.&lt;/span&gt;&lt;/p&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;&lt;span style=&quot;font-family: 'Noto Sans Demilight', 'Noto Sans KR';&quot;&gt;아직 제가 미숙하단것을 많이 느끼는 문제네요...&lt;/span&gt;&lt;/p&gt;
&lt;p&gt;&lt;span style=&quot;font-family: 'Noto Sans Demilight', 'Noto Sans KR';&quot;&gt;만약 문제가 잘못되었거나, 질문이 있으신 분들은 댓글을 남겨주세요&lt;/span&gt;&lt;/p&gt;
&lt;p&gt;&lt;span style=&quot;font-family: 'Noto Sans Demilight', 'Noto Sans KR';&quot;&gt;감사합니다.&lt;/span&gt;&lt;/p&gt;</description>
      <category>프로그래밍 이론/알고리즘</category>
      <category>알고리즘</category>
      <author>방현준</author>
      <guid isPermaLink="true">https://noogoonaa.tistory.com/74</guid>
      <comments>https://noogoonaa.tistory.com/74#entry74comment</comments>
      <pubDate>Wed, 10 Jun 2020 01:53:37 +0900</pubDate>
    </item>
    <item>
      <title>[프로그래머스][Javascript] 기능개발</title>
      <link>https://noogoonaa.tistory.com/73</link>
      <description>&lt;hr contenteditable=&quot;false&quot; data-ke-type=&quot;horizontalRule&quot; data-ke-style=&quot;style5&quot; /&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-filename=&quot;알고리즘.png&quot; data-origin-width=&quot;700&quot; data-origin-height=&quot;525&quot; data-ke-mobilestyle=&quot;widthContent&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/cH9ZKV/btqEJDet3HF/L3wmgiqsc7evbNlcVxyWPk/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/cH9ZKV/btqEJDet3HF/L3wmgiqsc7evbNlcVxyWPk/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/cH9ZKV/btqEJDet3HF/L3wmgiqsc7evbNlcVxyWPk/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FcH9ZKV%2FbtqEJDet3HF%2FL3wmgiqsc7evbNlcVxyWPk%2Fimg.png&quot; data-filename=&quot;알고리즘.png&quot; data-origin-width=&quot;700&quot; data-origin-height=&quot;525&quot; data-ke-mobilestyle=&quot;widthContent&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;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;/p&gt;
&lt;h2 data-ke-size=&quot;size26&quot;&gt;&lt;span style=&quot;font-family: 'Noto Sans Demilight', 'Noto Sans KR';&quot;&gt;&lt;b&gt;문제 설명&lt;/b&gt;&lt;/span&gt;&lt;/h2&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;font-family: 'Noto Sans Demilight', 'Noto Sans KR';&quot;&gt;프로그래머스 팀에서는 기능 개선 작업을 수행 중입니다. 각 기능은 진도가 100%일 때 서비스에 반영할 수 있습니다.&lt;/span&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;font-family: 'Noto Sans Demilight', 'Noto Sans 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 Sans Demilight', 'Noto Sans KR';&quot;&gt;먼저 배포되어야 하는 순서대로 작업의 진도가 적힌 정수 배열 progresses와 각 작업의 개발 속도가 적힌 정수 배열 speeds가 주어질 때 각 배포마다 몇 개의 기능이 배포되는지를 return 하도록 solution 함수를 완성하세요.&lt;/span&gt;&lt;/p&gt;
&lt;hr contenteditable=&quot;false&quot; data-ke-type=&quot;horizontalRule&quot; data-ke-style=&quot;style1&quot; /&gt;
&lt;h2 data-ke-size=&quot;size26&quot;&gt;&lt;span style=&quot;font-family: 'Noto Sans Demilight', 'Noto Sans KR';&quot;&gt;&lt;b&gt;제한 사항&lt;/b&gt;&lt;/span&gt;&lt;/h2&gt;
&lt;ul&gt;
&lt;li&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;font-family: 'Noto Sans Demilight', 'Noto Sans KR';&quot;&gt;&lt;i&gt;작업의 개수(progresses, speeds배열의 길이)는 100개 이하입니다.&lt;/i&gt;&lt;/span&gt;&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;font-family: 'Noto Sans Demilight', 'Noto Sans KR';&quot;&gt;&lt;i&gt;작업 진도는 100 미만의 자연수입니다.&lt;/i&gt;&lt;/span&gt;&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;font-family: 'Noto Sans Demilight', 'Noto Sans KR';&quot;&gt;&lt;i&gt;작업 속도는 100 이하의 자연수입니다.&lt;/i&gt;&lt;/span&gt;&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;font-family: 'Noto Sans Demilight', 'Noto Sans KR';&quot;&gt;&lt;i&gt;배포는 하루에 한 번만 할 수 있으며, 하루의 끝에 이루어진다고 가정합니다. 예를 들어 진도율이 95%인 작업의 개발 속도가 하루에 4%라면 배포는 2일 뒤에 이루어집니다.&lt;/i&gt;&lt;/span&gt;&lt;/p&gt;
&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;
&lt;hr contenteditable=&quot;false&quot; data-ke-type=&quot;horizontalRule&quot; data-ke-style=&quot;style1&quot; /&gt;
&lt;h2 data-ke-size=&quot;size26&quot;&gt;&lt;span style=&quot;font-family: 'Noto Sans Demilight', 'Noto Sans KR';&quot;&gt;&lt;b&gt;입출력 예&lt;/b&gt;&lt;/span&gt;&lt;/h2&gt;
&lt;table style=&quot;border-collapse: collapse; width: 100%; height: 40px;&quot; border=&quot;1&quot; data-ke-style=&quot;style4&quot;&gt;
&lt;tbody&gt;
&lt;tr style=&quot;height: 20px;&quot;&gt;
&lt;td style=&quot;width: 33.3333%; height: 20px; text-align: center;&quot;&gt;&lt;span style=&quot;color: #000000;&quot;&gt;&lt;b&gt;progresses&lt;/b&gt;&lt;/span&gt;&lt;/td&gt;
&lt;td style=&quot;width: 33.3333%; height: 20px; text-align: center;&quot;&gt;&lt;span style=&quot;color: #000000;&quot;&gt;&lt;b&gt;speeds&lt;/b&gt;&lt;/span&gt;&lt;/td&gt;
&lt;td style=&quot;width: 33.3333%; height: 20px; text-align: center;&quot;&gt;&lt;span style=&quot;color: #000000;&quot;&gt;&lt;b&gt;return&lt;/b&gt;&lt;/span&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;tr style=&quot;height: 20px;&quot;&gt;
&lt;td style=&quot;width: 33.3333%; height: 20px;&quot;&gt;&lt;span&gt;[93,30,55]&lt;/span&gt;&lt;/td&gt;
&lt;td style=&quot;width: 33.3333%; height: 20px;&quot;&gt;&lt;span&gt;[1,30,5]&lt;/span&gt;&lt;/td&gt;
&lt;td style=&quot;width: 33.3333%; height: 20px;&quot;&gt;&lt;span&gt;[2,1]&lt;/span&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;
&lt;hr contenteditable=&quot;false&quot; data-ke-type=&quot;horizontalRule&quot; data-ke-style=&quot;style1&quot; /&gt;
&lt;h2 data-ke-size=&quot;size26&quot;&gt;&lt;span style=&quot;font-family: 'Noto Sans Demilight', 'Noto Sans KR';&quot;&gt;&lt;b&gt;입출력 예 설명&lt;/b&gt;&lt;/span&gt;&lt;/h2&gt;
&lt;ul style=&quot;list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;i&gt;&lt;span style=&quot;font-family: 'Noto Sans Demilight', 'Noto Sans KR';&quot;&gt;첫 번째 기능은 93% 완료되어 있고 하루에 1%씩 작업이 가능하므로 7일간 작업 후 배포가 가능합니다.&lt;/span&gt;&lt;/i&gt;&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;i&gt;&lt;span style=&quot;font-family: 'Noto Sans Demilight', 'Noto Sans KR';&quot;&gt;두 번째 기능은 30%가 완료되어 있고 하루에 30%씩 작업이 가능하므로 3일간 작업 후 배포가 가능합니다. 하지만 이전 첫 번째 기능이 아직 완성된 상태가 아니기 때문에 첫 번째 기능이 배포되는 7일째 배포됩니다.&lt;/span&gt;&lt;/i&gt;&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;i&gt;&lt;span style=&quot;font-family: 'Noto Sans Demilight', 'Noto Sans KR';&quot;&gt;세 번째 기능은 55%가 완료되어 있고 하루에 5%씩 작업이 가능하므로 9일간 작업 후 배포가 가능합니다.&lt;/span&gt;&lt;/i&gt;&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;i&gt;&lt;span style=&quot;font-family: 'Noto Sans Demilight', 'Noto Sans KR';&quot;&gt;따라서 7일째에 2개의 기능, 9일째에 1개의 기능이 배포됩니다.&lt;/span&gt;&lt;/i&gt;&lt;/p&gt;
&lt;/li&gt;
&lt;/ul&gt;
&lt;hr contenteditable=&quot;false&quot; data-ke-type=&quot;horizontalRule&quot; data-ke-style=&quot;style3&quot; /&gt;
&lt;pre id=&quot;code_1591705997660&quot; class=&quot;javascript&quot; data-ke-language=&quot;javascript&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;/* 남은 시간을 가져옵니다. */
function getLeftTime(progresse, speed) {
    return Math.ceil((100 - progresse) / speed);
}

function solution(progresses, speeds) {
    var answer = [];

    // 프로그래스가 없을 경우를 처리해 줍니다.
    if (progresses.length &amp;lt;= 0) return [];

    // 남은 시간들을 정리해 줍니다.
    const ledtTimes = progresses.map((progresse, idx) =&amp;gt; getLeftTime(progresse, speeds[idx]));

    let temp = 1;
    let prev = ledtTimes[0];
    for (let i = 1; i &amp;lt; ledtTimes.length; i++) {
        let curr = ledtTimes[i];
        if (prev &amp;gt;= curr) {
            temp += 1;
        } else {
            answer.push(temp);
            prev = curr;
            temp = 1;
        }
    }
    answer.push(temp);

    return answer;
}

console.log(solution([93, 30, 55], [1, 30, 5]));&lt;/code&gt;&lt;/pre&gt;
&lt;hr contenteditable=&quot;false&quot; data-ke-type=&quot;horizontalRule&quot; data-ke-style=&quot;style5&quot; /&gt;
&lt;p&gt;&lt;b&gt;마치며&lt;/b&gt;&lt;/p&gt;
&lt;p&gt;이번 시간엔 프로그래머스에 Level 2 수준의 문제였습니다.&lt;/p&gt;
&lt;p&gt;Level 2 치곤 꽤 쉬운 문제였습니다.&lt;/p&gt;
&lt;p&gt;하지만 소스코드가 좀 길기 때문에 더 짧게 쓸 순 없을까 라고 고민했던 문제였습니다.&lt;/p&gt;
&lt;p&gt;만약 문제가 잘못되었거나, 질문이 있으신 분들은 댓글을 남겨주세요&lt;/p&gt;
&lt;p&gt;감사합니다.&lt;/p&gt;</description>
      <category>프로그래밍 이론/알고리즘</category>
      <category>알고리즘</category>
      <author>방현준</author>
      <guid isPermaLink="true">https://noogoonaa.tistory.com/73</guid>
      <comments>https://noogoonaa.tistory.com/73#entry73comment</comments>
      <pubDate>Tue, 9 Jun 2020 21:36:12 +0900</pubDate>
    </item>
    <item>
      <title>Flutter로 개발한 앱 플레이스토어(Play Store)에 배포하기 (6) -  APK 빌드 및 설치하기</title>
      <link>https://noogoonaa.tistory.com/72</link>
      <description>&lt;h2&gt;&lt;span style=&quot;color: #ee2323;&quot;&gt;&lt;b&gt;&lt;i&gt;Flutter로 개발한 앱 플레이스토어(Play Store)에 배포하기 시리즈&lt;/i&gt;&lt;/b&gt;&lt;/span&gt;&lt;/h2&gt;
&lt;hr contenteditable=&quot;false&quot; data-ke-type=&quot;horizontalRule&quot; data-ke-style=&quot;style5&quot; /&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-origin-width=&quot;937&quot; data-origin-height=&quot;461&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/ceuNn7/btqEdjm5Ybk/ZJnucM9k9L8QswMHioD251/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/ceuNn7/btqEdjm5Ybk/ZJnucM9k9L8QswMHioD251/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/ceuNn7/btqEdjm5Ybk/ZJnucM9k9L8QswMHioD251/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FceuNn7%2FbtqEdjm5Ybk%2FZJnucM9k9L8QswMHioD251%2Fimg.png&quot; data-origin-width=&quot;937&quot; data-origin-height=&quot;461&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;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;자 이번 포스팅에서는 저희가 만든 앱의 APK를 추출하고,&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;저희의 폰에 설치하는 방법에 대해서 알아보도록 하겠습니다.&lt;/p&gt;
&lt;hr contenteditable=&quot;false&quot; data-ke-type=&quot;horizontalRule&quot; data-ke-style=&quot;style3&quot; /&gt;
&lt;h2 data-ke-size=&quot;size26&quot;&gt;&lt;i&gt;&lt;b&gt;APK 빌드하기&lt;/b&gt;&lt;/i&gt;&lt;/h2&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;그 후 아래 명령어를 입력해 줍니다.&lt;/p&gt;
&lt;pre id=&quot;code_1589655771930&quot; class=&quot;java&quot; data-ke-language=&quot;java&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;flutter build apk --split-per-abi&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-origin-width=&quot;1570&quot; data-origin-height=&quot;328&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/GCmYI/btqEcHaTBd8/fqqXL7IIzO6CPTmQriUbMK/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/GCmYI/btqEcHaTBd8/fqqXL7IIzO6CPTmQriUbMK/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/GCmYI/btqEcHaTBd8/fqqXL7IIzO6CPTmQriUbMK/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FGCmYI%2FbtqEcHaTBd8%2FfqqXL7IIzO6CPTmQriUbMK%2Fimg.png&quot; data-origin-width=&quot;1570&quot; data-origin-height=&quot;328&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;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;그럼 위 사진과 같이 APK 빌드 완료 출력이 나옵니다.&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;[프로젝트 디렉토리] - [build] - [app] - [outputs] - [apk] - [release]&lt;/b&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;로 이동하면 아래 사진에 빨간 네모칸에 결과물이 생성되게 됩니다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-origin-width=&quot;277&quot; data-origin-height=&quot;659&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/si5oK/btqEbtLgE6W/u6NbphOiwt4OOQsmIU3I8k/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/si5oK/btqEbtLgE6W/u6NbphOiwt4OOQsmIU3I8k/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/si5oK/btqEbtLgE6W/u6NbphOiwt4OOQsmIU3I8k/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2Fsi5oK%2FbtqEbtLgE6W%2Fu6NbphOiwt4OOQsmIU3I8k%2Fimg.png&quot; data-origin-width=&quot;277&quot; data-origin-height=&quot;659&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;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;이것으로 APK를 빌드하였습니다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;hr style=&quot;margin: 20px auto 0px; border: none; cursor: pointer !important; z-index: 1; font-size: 0px; line-height: 0; background: url('../image/divider-line.svg') center 0px / 200px 420px no-repeat; width: 64px; height: 4px; padding: 20px; color: #333333; font-family: AppleSDGothicNeo-Regular, 'Malgun Gothic', '맑은 고딕', dotum, 돋움, sans-serif; font-style: normal; font-variant-ligatures: normal; font-variant-caps: normal; font-weight: 400; letter-spacing: normal; orphans: 2; text-align: start; text-indent: 0px; text-transform: none; white-space: normal; widows: 2; word-spacing: 0px; -webkit-text-stroke-width: 0px; text-decoration-style: initial; text-decoration-color: initial;&quot; contenteditable=&quot;false&quot; data-ke-type=&quot;horizontalRule&quot; data-ke-style=&quot;style1&quot; /&gt;
&lt;h2 data-ke-size=&quot;size26&quot;&gt;&lt;i&gt;&lt;b&gt;기기에 APK 설치&lt;/b&gt;&lt;/i&gt;&lt;/h2&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;자 이제 APK를 생성하였으니 APK를 테스트 해 볼까요?&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&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-origin-width=&quot;702&quot; data-origin-height=&quot;318&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/HSfbz/btqEdxZIaip/RD93D6Yt80PkBNAK6QaEC0/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/HSfbz/btqEdxZIaip/RD93D6Yt80PkBNAK6QaEC0/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/HSfbz/btqEdxZIaip/RD93D6Yt80PkBNAK6QaEC0/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FHSfbz%2FbtqEdxZIaip%2FRD93D6Yt80PkBNAK6QaEC0%2Fimg.png&quot; data-origin-width=&quot;702&quot; data-origin-height=&quot;318&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;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;그 후 프로젝트 루트 폴더로 이동한 다음 아래 명령어를 입력합니다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;pre id=&quot;code_1589655792367&quot; class=&quot;java&quot; data-ke-language=&quot;java&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;flutter install&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-origin-width=&quot;1570&quot; data-origin-height=&quot;161&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/cdZLba/btqEcmrhbn0/phJMBx0nKaTKroml7yng6k/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/cdZLba/btqEcmrhbn0/phJMBx0nKaTKroml7yng6k/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/cdZLba/btqEcmrhbn0/phJMBx0nKaTKroml7yng6k/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FcdZLba%2FbtqEcmrhbn0%2FphJMBx0nKaTKroml7yng6k%2Fimg.png&quot; data-origin-width=&quot;1570&quot; data-origin-height=&quot;161&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;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;자 이제 기기를 확인해 보면 자신이 만든 앱이 정상적으로 설치가 된 것을 확인할 수 있습니다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-origin-width=&quot;960&quot; data-origin-height=&quot;537&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/dCsrmC/btqEcTIULZi/t5UbnU6ViDLdWpq1W8akhk/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/dCsrmC/btqEcTIULZi/t5UbnU6ViDLdWpq1W8akhk/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/dCsrmC/btqEcTIULZi/t5UbnU6ViDLdWpq1W8akhk/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FdCsrmC%2FbtqEcTIULZi%2Ft5UbnU6ViDLdWpq1W8akhk%2Fimg.png&quot; data-origin-width=&quot;960&quot; data-origin-height=&quot;537&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;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;/p&gt;
&lt;hr style=&quot;margin: 20px auto 0px; border: none; cursor: pointer !important; z-index: 1; font-size: 0px; line-height: 0; background: url('../image/divider-line.svg') center -96px / 200px 420px no-repeat; width: 64px; height: 8px; padding: 18px 20px; color: #333333; font-family: AppleSDGothicNeo-Regular, 'Malgun Gothic', '맑은 고딕', dotum, 돋움, sans-serif; font-style: normal; font-variant-ligatures: normal; font-variant-caps: normal; font-weight: 400; letter-spacing: normal; orphans: 2; text-align: start; text-indent: 0px; text-transform: none; white-space: normal; widows: 2; word-spacing: 0px; -webkit-text-stroke-width: 0px; text-decoration-style: initial; text-decoration-color: initial;&quot; contenteditable=&quot;false&quot; data-ke-type=&quot;horizontalRule&quot; data-ke-style=&quot;style3&quot; /&gt;
&lt;h2 data-ke-size=&quot;size26&quot;&gt;&lt;i&gt;&lt;b&gt;마무리&lt;/b&gt;&lt;/i&gt;&lt;/h2&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;자 이번 포스팅에선 Flutter 앱에 APK를 생성 및 설치하는 방법에 대해서 알아보았습니다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span&gt;만약 포스트에 문제가 있거나 모르는 것이 있다면&amp;nbsp; 댓글을 남겨주시기 바랍니다.&lt;/span&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span&gt;감사합니다.&lt;/span&gt;&lt;/p&gt;</description>
      <category>프로그래밍 언어/Flutter</category>
      <category>Android</category>
      <category>Flutter</category>
      <category>ios</category>
      <category>배포</category>
      <category>안드로이드</category>
      <author>방현준</author>
      <guid isPermaLink="true">https://noogoonaa.tistory.com/72</guid>
      <comments>https://noogoonaa.tistory.com/72#entry72comment</comments>
      <pubDate>Fri, 22 May 2020 08:50:04 +0900</pubDate>
    </item>
    <item>
      <title>Flutter로 개발한 앱 플레이스토어(Play Store)에 배포하기 (5) - App Bundle 빌드하기</title>
      <link>https://noogoonaa.tistory.com/71</link>
      <description>&lt;h2&gt;&lt;span style=&quot;color: #ee2323;&quot;&gt;&lt;b&gt;&lt;i&gt;Flutter로 개발한 앱 플레이스토어(Play Store)에 배포하기 시리즈&lt;/i&gt;&lt;/b&gt;&lt;/span&gt;&lt;/h2&gt;
&lt;hr contenteditable=&quot;false&quot; data-ke-type=&quot;horizontalRule&quot; data-ke-style=&quot;style5&quot; /&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-origin-width=&quot;937&quot; data-origin-height=&quot;461&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/b9fsb1/btqEbvI22QO/82lRiPM6hqco0knQbsAuBK/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/b9fsb1/btqEbvI22QO/82lRiPM6hqco0knQbsAuBK/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/b9fsb1/btqEbvI22QO/82lRiPM6hqco0knQbsAuBK/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2Fb9fsb1%2FbtqEbvI22QO%2F82lRiPM6hqco0knQbsAuBK%2Fimg.png&quot; data-origin-width=&quot;937&quot; data-origin-height=&quot;461&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;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;자 이번에는 앱 번들을 빌드해 보도록 하겠습니다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;사실 앱을 빌드하는 방식은 두가지가 있는데,&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;첫번째는 앱 번들 방식이며 두번째는 APK 방식입니다.&lt;/p&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;hr contenteditable=&quot;false&quot; data-ke-type=&quot;horizontalRule&quot; data-ke-style=&quot;style3&quot; /&gt;
&lt;h2 data-ke-size=&quot;size26&quot;&gt;&lt;i&gt;&lt;b&gt;앱 번들 빌드&lt;/b&gt;&lt;/i&gt;&lt;/h2&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;사실 앱 번들 빌드 방식은 엄청 간단합니다. 하지만 이 과정에서 오류가 많이 발생합니다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;이번 포스팅에서는이 오류가 발생하였을 때 해결하는 방법까지 같이 보도록 하겠습니다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;먼저 커맨드라인에서 &lt;b&gt;[프로젝트 루트]&lt;/b&gt; 위치로 이동합니다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-origin-width=&quot;1582&quot; data-origin-height=&quot;235&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/d3ID2v/btqEcGiKpPp/gFsOmiUBR3vas3yFsZYC6K/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/d3ID2v/btqEcGiKpPp/gFsOmiUBR3vas3yFsZYC6K/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/d3ID2v/btqEcGiKpPp/gFsOmiUBR3vas3yFsZYC6K/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2Fd3ID2v%2FbtqEcGiKpPp%2FgFsOmiUBR3vas3yFsZYC6K%2Fimg.png&quot; data-origin-width=&quot;1582&quot; data-origin-height=&quot;235&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;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;그 후 아래 커맨드를 입력합니다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;pre id=&quot;code_1589655658582&quot; class=&quot;java&quot; data-ke-language=&quot;java&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;flutter build appbundle&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-origin-width=&quot;1589&quot; data-origin-height=&quot;184&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/o0XJ3/btqEbvI1YJy/Q2WB5SJpiYM7vXB9nTZezK/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/o0XJ3/btqEbvI1YJy/Q2WB5SJpiYM7vXB9nTZezK/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/o0XJ3/btqEbvI1YJy/Q2WB5SJpiYM7vXB9nTZezK/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2Fo0XJ3%2FbtqEbvI1YJy%2FQ2WB5SJpiYM7vXB9nTZezK%2Fimg.png&quot; data-origin-width=&quot;1589&quot; data-origin-height=&quot;184&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;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;그럼 아래와 같은 사진처럼 결과가 나옵니다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-origin-width=&quot;643&quot; data-origin-height=&quot;113&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/6X18K/btqEbtYJIIN/495cwXmVhWljuJPP30Gy6K/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/6X18K/btqEbtYJIIN/495cwXmVhWljuJPP30Gy6K/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/6X18K/btqEbtYJIIN/495cwXmVhWljuJPP30Gy6K/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2F6X18K%2FbtqEbtYJIIN%2F495cwXmVhWljuJPP30Gy6K%2Fimg.png&quot; data-origin-width=&quot;643&quot; data-origin-height=&quot;113&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;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;이것으로 앱 번들 빌드를 완료하였습니다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;어때요 엄청 간단하지 않나요??&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;그럼 제가 했던 삽질기를 같이 알아보도록 하겠습니다.&lt;/p&gt;
&lt;hr contenteditable=&quot;false&quot; data-ke-type=&quot;horizontalRule&quot; data-ke-style=&quot;style1&quot; /&gt;
&lt;h2 data-ke-size=&quot;size26&quot;&gt;&lt;i&gt;&lt;b&gt;첫번째 삽질 - 런처 아이콘 확장자 오류&lt;/b&gt;&lt;/i&gt;&lt;/h2&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;color: #333333;&quot;&gt;처음 앱 번들 빌드 커맨드를 입력했을 때,&lt;/span&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;color: #333333;&quot;&gt;이상한 오류가 발생하였습니다.&lt;/span&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;color: #333333;&quot;&gt;그 오류가 바로 밑과 같은 오류 입니다.&lt;/span&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;pre id=&quot;code_1589655676400&quot; class=&quot;java&quot; data-ke-language=&quot;java&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;PS D:\programming\flutter\oneday_oneggang&amp;gt; flutter build appbundle
                                                                        
FAILURE: Build failed with an exception.

* What went wrong:
Execution failed for task ':app:mergeReleaseResources'.
&amp;gt; Multiple task action failures occurred:
   &amp;gt; A failure occurred while executing com.android.build.gradle.internal.tasks.Workers$ActionFacade
      &amp;gt; Android resource compilation failed
        D:\programming\flutter\oneday_oneggang\android\app\src\main\res\mipmap-hdpi\ic_launcher.png: AAPT: error: failed to read PNG signature: file does not start with PNG signature.

        D:\programming\flutter\oneday_oneggang\android\app\src\main\res\mipmap-hdpi\ic_launcher.png: AAPT: error: file failed to compile.

   &amp;gt; A failure occurred while executing com.android.build.gradle.internal.tasks.Workers$ActionFacade
      &amp;gt; Android resource compilation failed
        D:\programming\flutter\oneday_oneggang\android\app\src\main\res\mipmap-xhdpi\ic_launcher.png: AAPT: error: failed to read PNG signature: file does not start with PNG signature.

        D:\programming\flutter\oneday_oneggang\android\app\src\main\res\mipmap-xhdpi\ic_launcher.png: AAPT: error: file failed to compile.

   &amp;gt; A failure occurred while executing com.android.build.gradle.internal.tasks.Workers$ActionFacade
      &amp;gt; Android resource compilation failed
        D:\programming\flutter\oneday_oneggang\android\app\src\main\res\mipmap-mdpi\ic_launcher.png: AAPT: error: failed to read PNG signature: file does not start with PNG signature.

        D:\programming\flutter\oneday_oneggang\android\app\src\main\res\mipmap-mdpi\ic_launcher.png: AAPT: error: file failed to compile.

   &amp;gt; A failure occurred while executing com.android.build.gradle.internal.tasks.Workers$ActionFacade
      &amp;gt; Android resource compilation failed
        D:\programming\flutter\oneday_oneggang\android\app\src\main\res\mipmap-xxxhdpi\ic_launcher.png: AAPT: error: failed to read PNG signature: file does not start with PNG signature.

        D:\programming\flutter\oneday_oneggang\android\app\src\main\res\mipmap-xxxhdpi\ic_launcher.png: AAPT: error: file failed to compile.

   &amp;gt; A failure occurred while executing com.android.build.gradle.internal.tasks.Workers$ActionFacade
      &amp;gt; Android resource compilation failed
        D:\programming\flutter\oneday_oneggang\android\app\src\main\res\mipmap-xxhdpi\ic_launcher.png: AAPT: error: failed to read PNG signature: file does not start with PNG signature.

        D:\programming\flutter\oneday_oneggang\android\app\src\main\res\mipmap-xxhdpi\ic_launcher.png: AAPT: error: file failed to compile.


* Try:
Run with --stacktrace option to get the stack trace. Run with --info or --debug option to get more log output. Run with --scan to get full insights.

* Get more help at https://help.gradle.org

        D:\programming\flutter\oneday_oneggang\android\app\src\main\res\mipmap-xhdpi\ic_launcher.png: AAPT: error: file failed to compile.

   &amp;gt; A failure occurred while executing com.android.build.gradle.internal.tasks.Workers$ActionFacade
      &amp;gt; Android resource compilation failed
        D:\programming\flutter\oneday_oneggang\android\app\src\main\res\mipmap-mdpi\ic_launcher.png: AAPT: error: failed to read PNG signature: file does not start with PNG signature.

        D:\programming\flutter\oneday_oneggang\android\app\src\main\res\mipmap-mdpi\ic_launcher.png: AAPT: error: file failed to compile.

   &amp;gt; A failure occurred while executing com.android.build.gradle.internal.tasks.Workers$ActionFacade
      &amp;gt; Android resource compilation failed
        D:\programming\flutter\oneday_oneggang\android\app\src\main\res\mipmap-xxxhdpi\ic_launcher.png: AAPT: error: failed to read PNG signature: file does not start with PNG signature.

        D:\programming\flutter\oneday_oneggang\android\app\src\main\res\mipmap-xxxhdpi\ic_launcher.png: AAPT: error: file failed to compile.

   &amp;gt; A failure occurred while executing com.android.build.gradle.internal.tasks.Workers$ActionFacade
      &amp;gt; Android resource compilation failed
        D:\programming\flutter\oneday_oneggang\android\app\src\main\res\mipmap-xxhdpi\ic_launcher.png: AAPT: error: failed to read PNG signature: file does not start with PNG signature.

        D:\programming\flutter\oneday_oneggang\android\app\src\main\res\mipmap-xxhdpi\ic_launcher.png: AAPT: error: file failed to compile.


* Try:
Run with --stacktrace option to get the stack trace. Run with --info or --debug option to get more log output. Run with --scan to get full insights.

* Get more help at https://help.gradle.org

BUILD FAILED in 9s&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-origin-width=&quot;1569&quot; data-origin-height=&quot;814&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/bE6YZE/btqEcoikOi4/8jQLhdEgWYDpXyUWISskkk/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/bE6YZE/btqEcoikOi4/8jQLhdEgWYDpXyUWISskkk/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/bE6YZE/btqEcoikOi4/8jQLhdEgWYDpXyUWISskkk/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FbE6YZE%2FbtqEcoikOi4%2F8jQLhdEgWYDpXyUWISskkk%2Fimg.png&quot; data-origin-width=&quot;1569&quot; data-origin-height=&quot;814&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;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;위 오류는 런처 아이콘의 확장자 때문에 발생하는 오류 입니다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;일전에 저희는 런처 아이콘을 app icon generator라는 사이트를 통해서 만들었습니다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;figure id=&quot;og_1589654312631&quot; contenteditable=&quot;false&quot; data-ke-type=&quot;opengraph&quot; data-og-type=&quot;article&quot; data-og-title=&quot;Flutter로 개발한 앱 플레이스토어(Play Store)에 배포하기 (1) - 런처 아이콘 만들기&quot; data-og-description=&quot;같이보면 좋은 글 2020/03/31 - [프로그래밍 언어/안드로이드] - 안드로이드 Google Play Store 개발자 계정 등록 방법 2020/05/16 - [프로그래밍 언어/안드로이드] - OpenJDK 14.0.1 설치하는 법 새로 생성된 Fl..&quot; data-og-host=&quot;noogoonaa.tistory.com&quot; data-og-source-url=&quot;https://noogoonaa.tistory.com/67?category=886920&quot; data-og-url=&quot;https://noogoonaa.tistory.com/67&quot; data-og-image=&quot;https://scrap.kakaocdn.net/dn/bXF2d8/hyF42WidMW/DYnK0kG6rqekk9mcM1bon0/img.png?width=800&amp;amp;height=393&amp;amp;face=0_0_800_393,https://scrap.kakaocdn.net/dn/JDds2/hyF306ORjK/43KsPzWhoEY57KZrI5ScX0/img.png?width=800&amp;amp;height=393&amp;amp;face=0_0_800_393,https://scrap.kakaocdn.net/dn/d6mVVi/hyF42ILeZA/CDrA02tCrcDGm2jfNgq7IK/img.png?width=1120&amp;amp;height=744&amp;amp;face=0_0_1120_744&quot;&gt;&lt;a href=&quot;https://noogoonaa.tistory.com/67?category=886920&quot; target=&quot;_blank&quot; rel=&quot;noopener&quot; data-source-url=&quot;https://noogoonaa.tistory.com/67?category=886920&quot;&gt;
&lt;div class=&quot;og-image&quot; style=&quot;background-image: url('https://scrap.kakaocdn.net/dn/bXF2d8/hyF42WidMW/DYnK0kG6rqekk9mcM1bon0/img.png?width=800&amp;amp;height=393&amp;amp;face=0_0_800_393,https://scrap.kakaocdn.net/dn/JDds2/hyF306ORjK/43KsPzWhoEY57KZrI5ScX0/img.png?width=800&amp;amp;height=393&amp;amp;face=0_0_800_393,https://scrap.kakaocdn.net/dn/d6mVVi/hyF42ILeZA/CDrA02tCrcDGm2jfNgq7IK/img.png?width=1120&amp;amp;height=744&amp;amp;face=0_0_1120_744');&quot;&gt;&amp;nbsp;&lt;/div&gt;
&lt;div class=&quot;og-text&quot;&gt;
&lt;p class=&quot;og-title&quot;&gt;Flutter로 개발한 앱 플레이스토어(Play Store)에 배포하기 (1) - 런처 아이콘 만들기&lt;/p&gt;
&lt;p class=&quot;og-desc&quot;&gt;같이보면 좋은 글 2020/03/31 - [프로그래밍 언어/안드로이드] - 안드로이드 Google Play Store 개발자 계정 등록 방법 2020/05/16 - [프로그래밍 언어/안드로이드] - OpenJDK 14.0.1 설치하는 법 새로 생성된 Fl..&lt;/p&gt;
&lt;p class=&quot;og-host&quot;&gt;noogoonaa.tistory.com&lt;/p&gt;
&lt;/div&gt;
&lt;/a&gt;&lt;/figure&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;하지만 해당 사이트는 런처 아이콘을 생성할 때, 이미지 확장자를 .png라고 생성합니다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;그리고 저희는 그대로 그 .png 아이콘을 그대로 넣었습니다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;하지만 이렇게 넣으면 앱 번들 빌드 시 위와같은 오류가 발생하게 됩니다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;그렇기 때문에 우리는 .png 아이콘들을 아래 사진과 같이 확장자를 .PNG로 전부 바꿔야 합니다.&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-origin-width=&quot;273&quot; data-origin-height=&quot;509&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/cbRw8a/btqEcHhFJKd/c5C8P9lLYDaFK2hx0YB5NK/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/cbRw8a/btqEcHhFJKd/c5C8P9lLYDaFK2hx0YB5NK/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/cbRw8a/btqEcHhFJKd/c5C8P9lLYDaFK2hx0YB5NK/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FcbRw8a%2FbtqEcHhFJKd%2Fc5C8P9lLYDaFK2hx0YB5NK%2Fimg.png&quot; data-origin-width=&quot;273&quot; data-origin-height=&quot;509&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;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;이렇게 하면 위 오류가 해결이 되는것을 알 수 있습니다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;hr contenteditable=&quot;false&quot; data-ke-type=&quot;horizontalRule&quot; data-ke-style=&quot;style1&quot; /&gt;
&lt;h2 data-ke-size=&quot;size26&quot;&gt;&lt;span style=&quot;font-family: AppleSDGothicNeo-Regular, 'Malgun Gothic', '맑은 고딕', dotum, 돋움, sans-serif;&quot;&gt;&lt;i&gt;&lt;b&gt;두번째 삽질 - key.properties &lt;span style=&quot;color: #333333;&quot;&gt;storeFile 경로 오류&lt;/span&gt;&lt;/b&gt;&lt;/i&gt;&lt;/span&gt;&lt;/h2&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;이번 삽질은 key.properties에서 발생한 오류 입니다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;먼저 오류 내용을 봐 보겠습니다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;pre id=&quot;code_1589655696226&quot; class=&quot;java&quot; data-ke-language=&quot;java&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;Removed unused resources: Binary resource data reduced from 192KB to 191KB: Removed 0%

FAILURE: Build failed with an exception.

* What went wrong:
Execution failed for task ':app:validateSigningRelease'.
&amp;gt; Keystore file 'D:\programming\flutter\oneday_oneggang\android\app\C:Usersbhj28key.jks' not found for signing config 'release'.

* Try:
Run with --stacktrace option to get the stack trace. Run with --info or --debug option to get more log output. Run with --scan to get full insights.

* Get more help at https://help.gradle.org

BUILD FAILED in 1m 3s
* What went wrong:
Execution failed for task ':app:validateSigningRelease'.
&amp;gt; Keystore file 'D:\programming\flutter\oneday_oneggang\android\app\C:Usersbhj28key.jks' not found for signing config 'release'.

* Try:
Run with --stacktrace option to get the stack trace. Run with --info or --debug option to get more log output. Run with --scan to get full insights.

* Get more help at https://help.gradle.org

BUILD FAILED in 1m 3s&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-origin-width=&quot;1195&quot; data-origin-height=&quot;456&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/ny222/btqEcGwhJ38/n2MK6ByoL4kRwnofAAiE4K/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/ny222/btqEcGwhJ38/n2MK6ByoL4kRwnofAAiE4K/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/ny222/btqEcGwhJ38/n2MK6ByoL4kRwnofAAiE4K/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2Fny222%2FbtqEcGwhJ38%2Fn2MK6ByoL4kRwnofAAiE4K%2Fimg.png&quot; data-origin-width=&quot;1195&quot; data-origin-height=&quot;456&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;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;자 감이 잡히나요?? 그렇습니다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-origin-width=&quot;1195&quot; data-origin-height=&quot;100&quot; data-filename=&quot;blob&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/cFxSre/btqEcUOBhUs/LOMJ8FUvX6Ki5jPggVYVh0/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/cFxSre/btqEcUOBhUs/LOMJ8FUvX6Ki5jPggVYVh0/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/cFxSre/btqEcUOBhUs/LOMJ8FUvX6Ki5jPggVYVh0/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FcFxSre%2FbtqEcUOBhUs%2FLOMJ8FUvX6Ki5jPggVYVh0%2Fimg.png&quot; data-origin-width=&quot;1195&quot; data-origin-height=&quot;100&quot; data-filename=&quot;blob&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;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;color: #333333;&quot;&gt;key.jks 파일의 위치 경로가 비정상적이기 때문에&lt;/span&gt;&amp;nbsp;발생했던 오류 입니다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span&gt;해결 방법은 &lt;b&gt;[android] - [key.properties] &lt;/b&gt;경로로 이동합니다.&lt;/span&gt;&lt;span&gt;&lt;/span&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span&gt;그 후 key.properties 파일 내용중&amp;nbsp;&lt;/span&gt;&lt;span&gt;storeFile의 경로를&lt;/span&gt;&lt;span&gt;&amp;nbsp;C:/Users/USERNAME/&lt;span style=&quot;color: #333333;&quot;&gt;key.jks 에서C&lt;span style=&quot;color: #333333;&quot;&gt;:\\Users\\USERNAME\\&lt;/span&gt;&lt;span style=&quot;color: #333333;&quot;&gt;key.jks 로 변경해주세요&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-origin-width=&quot;390&quot; data-origin-height=&quot;152&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/D4DXL/btqEcGC1C0U/tucFLsjoMYNBxpBQKSFKkk/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/D4DXL/btqEcGC1C0U/tucFLsjoMYNBxpBQKSFKkk/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/D4DXL/btqEcGC1C0U/tucFLsjoMYNBxpBQKSFKkk/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FD4DXL%2FbtqEcGC1C0U%2FtucFLsjoMYNBxpBQKSFKkk%2Fimg.png&quot; data-origin-width=&quot;390&quot; data-origin-height=&quot;152&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;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;color: #333333;&quot;&gt;이렇게 하면 위 오류가 해결이 되는것을 알 수 있습니다.&lt;/span&gt;&lt;/p&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;
&lt;hr contenteditable=&quot;false&quot; data-ke-type=&quot;horizontalRule&quot; data-ke-style=&quot;style3&quot; /&gt;
&lt;h2 data-ke-size=&quot;size26&quot;&gt;&lt;i&gt;&lt;span style=&quot;font-family: AppleSDGothicNeo-Regular, 'Malgun Gothic', '맑은 고딕', dotum, 돋움, sans-serif;&quot;&gt;&lt;b&gt;마무리&lt;/b&gt;&lt;/span&gt;&lt;/i&gt;&lt;/h2&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;오늘은 Flutter 앱 배포 그 다섯번째 앱 번들 빌드 방법을 알아보았습니다.&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;</description>
      <category>프로그래밍 언어/Flutter</category>
      <category>Android</category>
      <category>Flutter</category>
      <category>ios</category>
      <category>배포</category>
      <category>안드로이드</category>
      <author>방현준</author>
      <guid isPermaLink="true">https://noogoonaa.tistory.com/71</guid>
      <comments>https://noogoonaa.tistory.com/71#entry71comment</comments>
      <pubDate>Thu, 21 May 2020 06:45:53 +0900</pubDate>
    </item>
    <item>
      <title>Flutter로 개발한 앱 플레이스토어(Play Store)에 배포하기 (4) - 매니페스트 및 빌드 구성 검토하기</title>
      <link>https://noogoonaa.tistory.com/70</link>
      <description>&lt;h2&gt;&lt;span style=&quot;color: #ee2323;&quot;&gt;&lt;b&gt;&lt;i&gt;Flutter로 개발한 앱 플레이스토어(Play Store)에 배포하기 시리즈&lt;/i&gt;&lt;/b&gt;&lt;/span&gt;&lt;/h2&gt;
&lt;hr contenteditable=&quot;false&quot; data-ke-type=&quot;horizontalRule&quot; data-ke-style=&quot;style5&quot; /&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-origin-width=&quot;937&quot; data-origin-height=&quot;461&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/bj8sRm/btqEcnX2UxC/1Gqo5URWVZrjCbwFo98541/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/bj8sRm/btqEcnX2UxC/1Gqo5URWVZrjCbwFo98541/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/bj8sRm/btqEcnX2UxC/1Gqo5URWVZrjCbwFo98541/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2Fbj8sRm%2FbtqEcnX2UxC%2F1Gqo5URWVZrjCbwFo98541%2Fimg.png&quot; data-origin-width=&quot;937&quot; data-origin-height=&quot;461&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;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;이번 포스팅에서는 AndroidManifest 파일과 빌드 구성을 검토하는 방법에 대해 알아보도록 하겠습니다.&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;hr contenteditable=&quot;false&quot; data-ke-type=&quot;horizontalRule&quot; data-ke-style=&quot;style3&quot; /&gt;
&lt;h2 data-ke-size=&quot;size26&quot;&gt;&lt;i&gt;&lt;b&gt;&lt;span style=&quot;color: #333333;&quot;&gt;AndroidMenifest &lt;/span&gt;검토하기&lt;/b&gt;&lt;/i&gt;&lt;/h2&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;먼저 우리는 &lt;b&gt;AndroidMenifest&lt;/b&gt;를 검토하도록 하겠습니다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;b&gt;[android] - [app] - [src] - [main] - [AndroidManifest.xml]&lt;span&gt;&amp;nbsp;&lt;/span&gt;&lt;/b&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;해당 경로로 이동합니다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-origin-width=&quot;695&quot; data-origin-height=&quot;508&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/K7py6/btqEdk7jseW/gZWQxcQzLjQWGJkujqImf1/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/K7py6/btqEdk7jseW/gZWQxcQzLjQWGJkujqImf1/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/K7py6/btqEdk7jseW/gZWQxcQzLjQWGJkujqImf1/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FK7py6%2FbtqEdk7jseW%2FgZWQxcQzLjQWGJkujqImf1%2Fimg.png&quot; data-origin-width=&quot;695&quot; data-origin-height=&quot;508&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;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;그 후 빨간색 네모 박스를 중점으로 실수한 부분이 없는지 확인합니다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;특히 아래 내용을 잘 확인해 보도록 합니다.&lt;/p&gt;
&lt;ul style=&quot;list-style-type: disc;&quot;&gt;
&lt;li&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;b&gt;&lt;i&gt;앱의 이름이 정확한지&lt;/i&gt;&lt;/b&gt;&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;b&gt;&lt;i&gt;User Permission에서 필요한 것만 있는게 확실한지&lt;/i&gt;&lt;/b&gt;&lt;/p&gt;
&lt;/li&gt;
&lt;/ul&gt;
&lt;hr contenteditable=&quot;false&quot; data-ke-type=&quot;horizontalRule&quot; data-ke-style=&quot;style1&quot; /&gt;
&lt;h2 data-ke-size=&quot;size26&quot;&gt;&lt;i&gt;&lt;span style=&quot;color: #333333;&quot;&gt;&lt;b&gt;build.gradle 검토하기&lt;/b&gt;&lt;/span&gt;&lt;/i&gt;&lt;/h2&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;두번째로 우리가 할 것은 &lt;span style=&quot;color: #333333;&quot;&gt;&lt;b&gt;build.gradle&lt;/b&gt;을 검토하는 것 입니다.&lt;/span&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;b&gt;[android] - [app] - [build.gradle] &lt;/b&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;해당 경로로 이동합니다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-origin-width=&quot;1075&quot; data-origin-height=&quot;580&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/z6yk5/btqEcnKpCOd/bXXZrz7yiCnsfKXDCN60v1/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/z6yk5/btqEcnKpCOd/bXXZrz7yiCnsfKXDCN60v1/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/z6yk5/btqEcnKpCOd/bXXZrz7yiCnsfKXDCN60v1/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2Fz6yk5%2FbtqEcnKpCOd%2FbXXZrz7yiCnsfKXDCN60v1%2Fimg.png&quot; data-origin-width=&quot;1075&quot; data-origin-height=&quot;580&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;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;이번에도 빨간색 네모 박스를 중점으로 확인합니다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;특히 아래 내용에 이상이 없는지를 확인합니다.&lt;/p&gt;
&lt;ul style=&quot;list-style-type: disc;&quot;&gt;
&lt;li&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;b&gt;&lt;i&gt;applicationId는 고유해야 합니다. 그렇기 때문에 꼭 확인을 해주시길 바라며 배포 시 변경이 불가능합니다.&lt;/i&gt;&lt;/b&gt;&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;b&gt;&lt;i&gt;versionCode&lt;span&gt;&amp;nbsp;&lt;/span&gt;&amp;amp;&lt;span&gt;&amp;nbsp;&lt;/span&gt;versionName에서 내부 앱 버전 번호를 지정하고, 문자열 형태로 명시하시길 바랍니다.&lt;/i&gt;&lt;/b&gt;&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;b&gt;&lt;i&gt;minSdkVersion&lt;span&gt;&amp;nbsp;&lt;/span&gt;&amp;amp;&lt;span&gt;&amp;nbsp;&lt;/span&gt;targetSdkVersion에서 최소 API 레벨과 개발 대상 버전으로 지정한 지정 API 레벨을 명시하세요.&lt;/i&gt;&lt;/b&gt;&lt;/p&gt;
&lt;/li&gt;
&lt;/ul&gt;
&lt;hr contenteditable=&quot;false&quot; data-ke-type=&quot;horizontalRule&quot; data-ke-style=&quot;style3&quot; /&gt;
&lt;h2 data-ke-size=&quot;size26&quot;&gt;&lt;i&gt;&lt;b&gt;마무리&lt;/b&gt;&lt;/i&gt;&lt;/h2&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;이번 포스팅에서는 &lt;span style=&quot;color: #333333;&quot;&gt;build.gradle과 AndroidManifest를 검토하는 방법에 대해서 알아보았습니다.&lt;/span&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;color: #333333;&quot;&gt;혹시 잘 안되는 부분이 있거나 포스트에 문제가 있다면 댓글을 남겨주시기 바랍니다.&lt;/span&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;감사합니다.&lt;/p&gt;</description>
      <category>프로그래밍 언어/Flutter</category>
      <category>Android</category>
      <category>Flutter</category>
      <category>ios</category>
      <category>배포</category>
      <category>안드로이드</category>
      <author>방현준</author>
      <guid isPermaLink="true">https://noogoonaa.tistory.com/70</guid>
      <comments>https://noogoonaa.tistory.com/70#entry70comment</comments>
      <pubDate>Wed, 20 May 2020 08:00:19 +0900</pubDate>
    </item>
    <item>
      <title>Flutter로 개발한 앱 플레이스토어(Play Store)에 배포하기 (3) - Proguard 사용하여 앱 난독화 및 압축하</title>
      <link>https://noogoonaa.tistory.com/69</link>
      <description>&lt;h2&gt;&lt;span style=&quot;color: #ee2323;&quot;&gt;&lt;b&gt;&lt;i&gt;Flutter로 개발한 앱 플레이스토어(Play Store)에 배포하기 시리즈&lt;/i&gt;&lt;/b&gt;&lt;/span&gt;&lt;/h2&gt;
&lt;hr contenteditable=&quot;false&quot; data-ke-type=&quot;horizontalRule&quot; data-ke-style=&quot;style5&quot; /&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-origin-width=&quot;937&quot; data-origin-height=&quot;461&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/cC82cr/btqEcnKsQZV/1CfyTbhqKw6ltBH9FqiThK/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/cC82cr/btqEcnKsQZV/1CfyTbhqKw6ltBH9FqiThK/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/cC82cr/btqEcnKsQZV/1CfyTbhqKw6ltBH9FqiThK/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FcC82cr%2FbtqEcnKsQZV%2F1CfyTbhqKw6ltBH9FqiThK%2Fimg.png&quot; data-origin-width=&quot;937&quot; data-origin-height=&quot;461&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;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;자 이번 포스팅에서는 Proguard를 사용하여&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;앱을 난독화 하고, 압축을 통해 크기를 줄이는 방법에 대해서 알아보도록 하겠습니다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;이러한 작업을 통해 우리는 APK의 크기를 줄이고 리버스 엔지니어링으로부터 코드를 보호할 수 있습니다.&lt;/p&gt;
&lt;hr contenteditable=&quot;false&quot; data-ke-type=&quot;horizontalRule&quot; data-ke-style=&quot;style3&quot; /&gt;
&lt;h2 id=&quot;step-1---proguard-구성하기&quot; data-ke-size=&quot;size26&quot;&gt;&lt;i&gt;&lt;span style=&quot;font-family: AppleSDGothicNeo-Regular, 'Malgun Gothic', '맑은 고딕', dotum, 돋움, sans-serif;&quot;&gt;&lt;b&gt;Proguard 구성하기&lt;/b&gt;&lt;/span&gt;&lt;/i&gt;&lt;/h2&gt;
&lt;h2 data-ke-size=&quot;size26&quot;&gt;&amp;nbsp;&lt;/h2&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;먼저&lt;span&gt;&amp;nbsp;&lt;/span&gt;&lt;b&gt;[android] - [app] - [&lt;span&gt;proguard-rules.pro&lt;/span&gt;]&lt;/b&gt;&lt;span&gt;&amp;nbsp;&lt;/span&gt;란 파일을 생성해 줍니다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;그 후 아래 코드를&lt;span&gt;&amp;nbsp;&lt;/span&gt;&lt;b&gt;[&lt;/b&gt;&lt;span&gt;&lt;b&gt;proguard-rules.pro]&lt;/b&gt;에 추가해 줍니다.&lt;/span&gt;&lt;/p&gt;
&lt;pre id=&quot;code_1589655533258&quot; class=&quot;java&quot; data-ke-language=&quot;java&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;## Flutter wrapper
-keep class io.flutter.app.** { *; }
-keep class io.flutter.plugin.**  { *; }
-keep class io.flutter.util.**  { *; }
-keep class io.flutter.view.**  { *; }
-keep class io.flutter.**  { *; }
-keep class io.flutter.plugins.**  { *; }
-dontwarn io.flutter.embedding.**&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;&lt;figure class=&quot;imagegridblock&quot;&gt;
  &lt;div class=&quot;image-container&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/zpeLv/btqEcGbTJYF/QbrF49zUZSnY3DyjSGFGYk/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/zpeLv/btqEcGbTJYF/QbrF49zUZSnY3DyjSGFGYk/img.png&quot; style=&quot;width: 30.949%; margin-right: 10px;&quot; data-origin-width=&quot;279&quot; data-origin-height=&quot;324&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/zpeLv/btqEcGbTJYF/QbrF49zUZSnY3DyjSGFGYk/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FzpeLv%2FbtqEcGbTJYF%2FQbrF49zUZSnY3DyjSGFGYk%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;279&quot; height=&quot;324&quot;/&gt;&lt;/span&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/cKjOge/btqEa97c6ls/kfMllIQ0LSa4feMmns8g50/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/cKjOge/btqEa97c6ls/kfMllIQ0LSa4feMmns8g50/img.png&quot; style=&quot;width: 67.88818416725395%;&quot; data-origin-width=&quot;493&quot; data-origin-height=&quot;261&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/cKjOge/btqEa97c6ls/kfMllIQ0LSa4feMmns8g50/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FcKjOge%2FbtqEa97c6ls%2FkfMllIQ0LSa4feMmns8g50%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;493&quot; height=&quot;261&quot;/&gt;&lt;/span&gt;&lt;/div&gt;
&lt;/figure&gt;
&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;이 설정은 Flutter 엔진 라이브러리를 보호합니다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;다른 라이브러리(예. Firebase)를 보호하기 위해서는 추가적으로 규칙을 작성해야합니다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;hr contenteditable=&quot;false&quot; data-ke-type=&quot;horizontalRule&quot; data-ke-style=&quot;style1&quot; /&gt;
&lt;h2 id=&quot;step-2---난독화와-축소-사용하기&quot; data-ke-size=&quot;size26&quot;&gt;&lt;i&gt;&lt;span style=&quot;font-family: AppleSDGothicNeo-Regular, 'Malgun Gothic', '맑은 고딕', dotum, 돋움, sans-serif;&quot;&gt;&lt;b&gt;앱 난독화 및 크기 축소 사용하기&lt;/b&gt;&lt;/span&gt;&lt;/i&gt;&lt;/h2&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span&gt;&lt;/span&gt;해당 작업을 위해 &lt;b&gt;[&lt;/b&gt;&lt;span&gt;&lt;b&gt;android] - [app] - [build.gradle]&lt;/b&gt;&lt;span&gt;&amp;nbsp;&lt;/span&gt;파일에 들어가서&lt;/span&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span&gt;&lt;b&gt;buildTypes {&lt;/b&gt;&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;&amp;nbsp;&lt;/p&gt;
&lt;pre id=&quot;code_1589655548215&quot; class=&quot;java&quot; data-ke-language=&quot;java&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;android {
    buildTypes {
        release {
            signingConfig signingConfigs.release

            minifyEnabled true
            useProguard true

            proguardFiles getDefaultProguardFile('proguard-android.txt'), 'proguard-rules.pro'
        }
    }
}&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-origin-width=&quot;1204&quot; data-origin-height=&quot;730&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/bD0nLh/btqEcncD606/DAAFsMAjo4cqzlVl65Z3IK/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/bD0nLh/btqEcncD606/DAAFsMAjo4cqzlVl65Z3IK/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/bD0nLh/btqEcncD606/DAAFsMAjo4cqzlVl65Z3IK/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FbD0nLh%2FbtqEcncD606%2FDAAFsMAjo4cqzlVl65Z3IK%2Fimg.png&quot; data-origin-width=&quot;1204&quot; data-origin-height=&quot;730&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;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;이제 해당 설정을 통해 Flutter 엔진 라이브러리를 난독화 및 압축을 할 수 있게 되었습니다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;만약 Firebase같은 다른 라이브러리를 보호하기 위해서는 추가적인 규칙이 있을 수 있습니다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;hr contenteditable=&quot;false&quot; data-ke-type=&quot;horizontalRule&quot; data-ke-style=&quot;style3&quot; /&gt;
&lt;h2&gt;&lt;i&gt;&lt;span style=&quot;font-family: AppleSDGothicNeo-Regular, 'Malgun Gothic', '맑은 고딕', dotum, 돋움, sans-serif;&quot;&gt;&lt;b&gt;마무리&lt;/b&gt;&lt;/span&gt;&lt;/i&gt;&lt;/h2&gt;
&lt;p&gt;오늘은 Flutter 앱 배포 그 세번째 Proguard를 사용한 난독화 및 압축 작업을 알아보았습니다.&lt;/p&gt;
&lt;p&gt;혹시 잘 안되는 부분이 있거나 포스트에 문제가 있다면 댓글을 남겨주시기 바랍니다.&lt;/p&gt;
&lt;p&gt;감사합니다.&lt;/p&gt;</description>
      <category>프로그래밍 언어/Flutter</category>
      <category>Android</category>
      <category>Flutter</category>
      <category>ios</category>
      <category>배포</category>
      <category>안드로이드</category>
      <author>방현준</author>
      <guid isPermaLink="true">https://noogoonaa.tistory.com/69</guid>
      <comments>https://noogoonaa.tistory.com/69#entry69comment</comments>
      <pubDate>Tue, 19 May 2020 08:00:21 +0900</pubDate>
    </item>
    <item>
      <title>Flutter로 개발한 앱 플레이스토어(Play Store)에 배포하기 (2) - 앱 서명하기</title>
      <link>https://noogoonaa.tistory.com/68</link>
      <description>&lt;h2&gt;&lt;span style=&quot;color: #ee2323;&quot;&gt;&lt;b&gt;&lt;i&gt;Flutter로 개발한 앱 플레이스토어(Play Store)에 배포하기 시리즈&lt;/i&gt;&lt;/b&gt;&lt;/span&gt;&lt;/h2&gt;
&lt;hr contenteditable=&quot;false&quot; data-ke-type=&quot;horizontalRule&quot; data-ke-style=&quot;style5&quot; /&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-filename=&quot;flutter.png&quot; data-origin-width=&quot;937&quot; data-origin-height=&quot;461&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/uzj9W/btqEcTIU3aM/RlIxiV0Abe6o6931FlZfe0/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/uzj9W/btqEcTIU3aM/RlIxiV0Abe6o6931FlZfe0/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/uzj9W/btqEcTIU3aM/RlIxiV0Abe6o6931FlZfe0/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2Fuzj9W%2FbtqEcTIU3aM%2FRlIxiV0Abe6o6931FlZfe0%2Fimg.png&quot; data-filename=&quot;flutter.png&quot; data-origin-width=&quot;937&quot; data-origin-height=&quot;461&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;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;Google Play 스토어에 출시하기 위해서는 반드시 앱에 디지털 서명을 해야 합니다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;만약 디지털 서명을 하지 않을 시 &lt;span style=&quot;color: #333333;&quot;&gt;Google Play 스토어에 배포를 할 수 없으므로 해당 포스팅을 참고하여&lt;/span&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;앱에 디지털 서명을 하시길 바랍니다.&lt;/p&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;
&lt;hr contenteditable=&quot;false&quot; data-ke-type=&quot;horizontalRule&quot; data-ke-style=&quot;style3&quot; /&gt;
&lt;h2 id=&quot;keystore-만들기&quot; data-ke-size=&quot;size26&quot;&gt;&lt;i&gt;&lt;span style=&quot;font-family: AppleSDGothicNeo-Regular, 'Malgun Gothic', '맑은 고딕', dotum, 돋움, sans-serif;&quot;&gt;&lt;b&gt;keystore 만들기&lt;/b&gt;&lt;/span&gt;&lt;/i&gt;&lt;/h2&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-filename=&quot;Screenshot_230.png&quot; data-origin-width=&quot;785&quot; data-origin-height=&quot;679&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/lp4lv/btqEcU18hV5/VpBJpT4eEBzI7fBo0Sbgs1/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/lp4lv/btqEcU18hV5/VpBJpT4eEBzI7fBo0Sbgs1/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/lp4lv/btqEcU18hV5/VpBJpT4eEBzI7fBo0Sbgs1/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2Flp4lv%2FbtqEcU18hV5%2FVpBJpT4eEBzI7fBo0Sbgs1%2Fimg.png&quot; data-filename=&quot;Screenshot_230.png&quot; data-origin-width=&quot;785&quot; data-origin-height=&quot;679&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;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;그런 다음 아래 명령어를 입력합니다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;color: #9d9d9d;&quot;&gt;&lt;i&gt;(참고로, 경로 부분에 USER_NAME을 컴퓨터 이름으로 변경한 후 실행시킵니다.)&lt;/i&gt;&lt;/span&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;pre id=&quot;code_1589650775216&quot; class=&quot;python&quot; data-ke-language=&quot;python&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;# MAC / LINUX
keytool -genkey -v -keystore ~/key.jks -keyalg RSA -keysize 2048 -validity 10000 -alias key

# Windows
keytool -genkey -v -keystore c:/Users/USER_NAME/key.jks -keyalg RSA -keysize 2048 -validity 10000 -alias key&lt;/code&gt;&lt;/pre&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;그럼 아래와 같이 전자 서명에 들어갈 항목을 입력하는 부분이 나오게 됩니다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;color: #333333;&quot;&gt;해당 질문에 각각 맞게 입력을 해줍니다.&lt;/span&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-filename=&quot;Screenshot_196.png&quot; data-origin-width=&quot;1233&quot; data-origin-height=&quot;570&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/oRODR/btqEcGpxU5W/t7FJeNqgip9DaDtTxbVFJk/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/oRODR/btqEcGpxU5W/t7FJeNqgip9DaDtTxbVFJk/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/oRODR/btqEcGpxU5W/t7FJeNqgip9DaDtTxbVFJk/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FoRODR%2FbtqEcGpxU5W%2Ft7FJeNqgip9DaDtTxbVFJk%2Fimg.png&quot; data-filename=&quot;Screenshot_196.png&quot; data-origin-width=&quot;1233&quot; data-origin-height=&quot;570&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;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;각 질문의 대한 내용은 아래와 같습니다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;ul style=&quot;list-style-type: disc;&quot;&gt;
&lt;li&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;b&gt;&lt;i&gt;&lt;span style=&quot;color: #006dd7;&quot;&gt;Q &amp;gt; What is your first and last name? 당신의&amp;nbsp;첫번째와&amp;nbsp;마지막&amp;nbsp;이름은&amp;nbsp;무엇인가요?&lt;/span&gt;&lt;/i&gt;&lt;/b&gt;&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;b&gt;&lt;i&gt;&lt;span style=&quot;color: #ee2323;&quot;&gt;A &amp;gt; Hong GilDong&lt;/span&gt;&lt;/i&gt;&lt;/b&gt;&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;b&gt;&lt;i&gt;&lt;span style=&quot;color: #006dd7;&quot;&gt;Q &amp;gt; What is the name of your organizational unit? 당신의&amp;nbsp;부서의&amp;nbsp;이름은&amp;nbsp;무엇인가요?&lt;/span&gt;&lt;/i&gt;&lt;/b&gt;&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;b&gt;&lt;i&gt;&lt;span style=&quot;color: #ee2323;&quot;&gt;A &amp;gt; NooGooNaa&lt;/span&gt;&lt;/i&gt;&lt;/b&gt;&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;b&gt;&lt;i&gt;&lt;span style=&quot;color: #006dd7;&quot;&gt;Q &amp;gt; What is the name of your organization? 당신의&amp;nbsp;조직&amp;nbsp;이름은&amp;nbsp;무엇인가요?&lt;/span&gt;&lt;/i&gt;&lt;/b&gt;&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;b&gt;&lt;i&gt;&lt;span style=&quot;color: #ee2323;&quot;&gt;A &amp;gt; NooGooNaa&lt;/span&gt;&lt;/i&gt;&lt;/b&gt;&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;b&gt;&lt;i&gt;&lt;span style=&quot;color: #006dd7;&quot;&gt;Q &amp;gt; What is the name of your City or Locality? 당신의&amp;nbsp;도시&amp;nbsp;이름은&amp;nbsp;무엇인가요?&lt;/span&gt;&lt;/i&gt;&lt;/b&gt;&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;b&gt;&lt;i&gt;&lt;span style=&quot;color: #ee2323;&quot;&gt;A &amp;gt;&amp;nbsp;Gyeyang-gu&lt;/span&gt;&lt;/i&gt;&lt;/b&gt;&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;b&gt;&lt;i&gt;&lt;span style=&quot;color: #006dd7;&quot;&gt;Q &amp;gt; What is the name of your State or Province? 당신의&amp;nbsp;지역&amp;nbsp;이름은&amp;nbsp;무엇인가요?&lt;/span&gt;&lt;/i&gt;&lt;/b&gt;&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;b&gt;&lt;i&gt;&lt;span style=&quot;color: #ee2323;&quot;&gt;A &amp;gt;&amp;nbsp;Incheon-si&lt;/span&gt;&lt;/i&gt;&lt;/b&gt;&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;b&gt;&lt;i&gt;&lt;span style=&quot;color: #006dd7;&quot;&gt;Q &amp;gt; What is the two-letter country code for this unit? 당신의&amp;nbsp;국가&amp;nbsp;코드를&amp;nbsp;입력해&amp;nbsp;주세요&lt;/span&gt;&lt;/i&gt;&lt;/b&gt;&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;b&gt;&lt;i&gt;&lt;span style=&quot;color: #ee2323;&quot;&gt;A &amp;gt; 82&lt;/span&gt;&lt;/i&gt;&lt;/b&gt;&lt;/p&gt;
&lt;/li&gt;
&lt;/ul&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;그럼 &lt;b&gt;key.jks&lt;/b&gt;라는 파일이 &lt;b&gt;C:\Users\USER_NAME&lt;/b&gt; 디렉토리에 존재하는 것을 확인할 수 있습니다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-filename=&quot;Screenshot_231.png&quot; data-origin-width=&quot;752&quot; data-origin-height=&quot;687&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/diVLVa/btqEcnX2BAy/TZTaKTJtHNTs8ICDAn9hlk/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/diVLVa/btqEcnX2BAy/TZTaKTJtHNTs8ICDAn9hlk/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/diVLVa/btqEcnX2BAy/TZTaKTJtHNTs8ICDAn9hlk/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FdiVLVa%2FbtqEcnX2BAy%2FTZTaKTJtHNTs8ICDAn9hlk%2Fimg.png&quot; data-filename=&quot;Screenshot_231.png&quot; data-origin-width=&quot;752&quot; data-origin-height=&quot;687&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;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;이렇게 Keystore를 만들게 되었습니다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;- 삽질 1&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;처음 Keytool을 사용하려고 하니 아래와 같은 오류가 발생하였습니다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;pre id=&quot;code_1589655424319&quot; class=&quot;python&quot; data-ke-language=&quot;python&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;keytool : 'keytool' 용어가 cmdlet, 함수, 스크립트 파일 또는 실행할 수 있는 프로그램 이름으로 인식되지 않습니다. 이름이 정확한지 확인하고 경로가 포함된 경우 경로가 올바른지 검증한 다음 다시 시 도하십시오. 
위치 줄:1 문자:1 
+ keytool -genkey -v -keystore c:/Users/bhj28/key.jks -keyalg RSA -keys ... 
+ ~~~~~~~ 
           + CategoryInfo : ObjectNotFound: (keytool:String) [], CommandNotFoundException 
           + FullyQualifiedErrorId : CommandNotFoundException&lt;/code&gt;&lt;/pre&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-filename=&quot;Screenshot_159.png&quot; data-origin-width=&quot;1540&quot; data-origin-height=&quot;228&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/cFQ00W/btqEbarzh8W/YR8emUyaRPmcDwRaJ9bm8K/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/cFQ00W/btqEbarzh8W/YR8emUyaRPmcDwRaJ9bm8K/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/cFQ00W/btqEbarzh8W/YR8emUyaRPmcDwRaJ9bm8K/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FcFQ00W%2FbtqEbarzh8W%2FYR8emUyaRPmcDwRaJ9bm8K%2Fimg.png&quot; data-filename=&quot;Screenshot_159.png&quot; data-origin-width=&quot;1540&quot; data-origin-height=&quot;228&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;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;해당 오류는 JDK가 설치가 안되어 있어서 발생하는 오류로 JDK를 설치해 주면 해당오류가 해결 됩니다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;아래 링크를 참고하여 JDK를 설치해 줍니다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;figure id=&quot;og_1589651254461&quot; contenteditable=&quot;false&quot; data-ke-type=&quot;opengraph&quot; data-og-type=&quot;article&quot; data-og-title=&quot;OpenJDK 14.0.1 설치하는 법&quot; data-og-description=&quot;자 오라클의 JDK가 유료가 되면서 많은 사람들이 OpenJDK를 사용하고 있습니다. OpenJDK는 무료이기 때문에 사람들이 많이 사용하는 것 인데요. 여기 들어온 여러분들은 설치법이 궁금해서 온것을 알&quot; data-og-host=&quot;noogoonaa.tistory.com&quot; data-og-source-url=&quot;https://noogoonaa.tistory.com/66&quot; data-og-url=&quot;https://noogoonaa.tistory.com/66&quot; data-og-image=&quot;https://scrap.kakaocdn.net/dn/sPedf/hyF3WQPDtf/b3jNumbk1pwAL7IxD215hk/img.png?width=616&amp;amp;height=585&amp;amp;face=0_0_616_585,https://scrap.kakaocdn.net/dn/c9E9XF/hyF47XvTbM/0NM1iVsjE4CNP1K7QnBKK0/img.png?width=616&amp;amp;height=585&amp;amp;face=0_0_616_585,https://scrap.kakaocdn.net/dn/bReaRH/hyF4ZSIFnZ/uJ3WLbRiDwq8RvWqfeulK1/img.png?width=830&amp;amp;height=675&amp;amp;face=0_0_830_675&quot;&gt;&lt;a href=&quot;https://noogoonaa.tistory.com/66&quot; target=&quot;_blank&quot; rel=&quot;noopener&quot; data-source-url=&quot;https://noogoonaa.tistory.com/66&quot;&gt;
&lt;div class=&quot;og-image&quot; style=&quot;background-image: url('https://scrap.kakaocdn.net/dn/sPedf/hyF3WQPDtf/b3jNumbk1pwAL7IxD215hk/img.png?width=616&amp;amp;height=585&amp;amp;face=0_0_616_585,https://scrap.kakaocdn.net/dn/c9E9XF/hyF47XvTbM/0NM1iVsjE4CNP1K7QnBKK0/img.png?width=616&amp;amp;height=585&amp;amp;face=0_0_616_585,https://scrap.kakaocdn.net/dn/bReaRH/hyF4ZSIFnZ/uJ3WLbRiDwq8RvWqfeulK1/img.png?width=830&amp;amp;height=675&amp;amp;face=0_0_830_675');&quot;&gt;&amp;nbsp;&lt;/div&gt;
&lt;div class=&quot;og-text&quot;&gt;
&lt;p class=&quot;og-title&quot;&gt;OpenJDK 14.0.1 설치하는 법&lt;/p&gt;
&lt;p class=&quot;og-desc&quot;&gt;자 오라클의 JDK가 유료가 되면서 많은 사람들이 OpenJDK를 사용하고 있습니다. OpenJDK는 무료이기 때문에 사람들이 많이 사용하는 것 인데요. 여기 들어온 여러분들은 설치법이 궁금해서 온것을 알&lt;/p&gt;
&lt;p class=&quot;og-host&quot;&gt;noogoonaa.tistory.com&lt;/p&gt;
&lt;/div&gt;
&lt;/a&gt;&lt;/figure&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;그러면 아래 사진과 같이 정상적으로 실행이 되는것을 확인할 수 있습니다.&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-filename=&quot;Screenshot_197.png&quot; data-origin-width=&quot;1233&quot; data-origin-height=&quot;570&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/WUPhO/btqEcUVlPRK/ESivTSTZaHhRzxSVHBh6jk/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/WUPhO/btqEcUVlPRK/ESivTSTZaHhRzxSVHBh6jk/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/WUPhO/btqEcUVlPRK/ESivTSTZaHhRzxSVHBh6jk/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FWUPhO%2FbtqEcUVlPRK%2FESivTSTZaHhRzxSVHBh6jk%2Fimg.png&quot; data-filename=&quot;Screenshot_197.png&quot; data-origin-width=&quot;1233&quot; data-origin-height=&quot;570&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;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;/p&gt;
&lt;hr contenteditable=&quot;false&quot; data-ke-type=&quot;horizontalRule&quot; data-ke-style=&quot;style1&quot; /&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;앱에서 Keystore를 참조할 수 있도록 설정하기&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;앱을 빌드할 때 앱이 Keystore를 참조해야하므로 우리는 안드로이드에 특정 명령어를 입력해야 합니다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;먼저 배포할 앱 프로젝트 폴더에 접근한 후&lt;span&gt;&amp;nbsp;&lt;/span&gt;&lt;b&gt;[android]&lt;/b&gt;&lt;span&gt;&amp;nbsp;&lt;/span&gt;폴더에&lt;span&gt;&amp;nbsp;&lt;/span&gt;&lt;b&gt;[&lt;/b&gt;&lt;span&gt;&lt;b&gt;key.properties]&lt;/b&gt;&lt;span&gt;&amp;nbsp;&lt;/span&gt;이라는 파일을 생성해 줍니다.&lt;/span&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;&lt;figure class=&quot;imagegridblock&quot;&gt;
  &lt;div class=&quot;image-container&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/xxNpT/btqEcncDr3S/lTBIdNr9NY5KVvZgwbJKV0/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/xxNpT/btqEcncDr3S/lTBIdNr9NY5KVvZgwbJKV0/img.png&quot; style=&quot;width: 41.0885%; margin-right: 10px;&quot; data-origin-width=&quot;282&quot; data-origin-height=&quot;395&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/xxNpT/btqEcncDr3S/lTBIdNr9NY5KVvZgwbJKV0/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FxxNpT%2FbtqEcncDr3S%2FlTBIdNr9NY5KVvZgwbJKV0%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;282&quot; height=&quot;395&quot;/&gt;&lt;/span&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/chKwqe/btqEcTvkua0/KkOxhf0q5u13qAImksu0k1/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/chKwqe/btqEcTvkua0/KkOxhf0q5u13qAImksu0k1/img.png&quot; style=&quot;width: 57.74874676685147%;&quot; data-origin-width=&quot;295&quot; data-origin-height=&quot;294&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/chKwqe/btqEcTvkua0/KkOxhf0q5u13qAImksu0k1/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FchKwqe%2FbtqEcTvkua0%2FKkOxhf0q5u13qAImksu0k1%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;295&quot; height=&quot;294&quot;/&gt;&lt;/span&gt;&lt;/div&gt;
&lt;/figure&gt;
&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;그 후 아래에 내용을&lt;span&gt;&amp;nbsp;&lt;/span&gt;&lt;b&gt;[&lt;/b&gt;&lt;span&gt;&lt;b&gt;key.properties]&lt;/b&gt;에 입력해 줍니다.&lt;/span&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;pre id=&quot;code_1589655443338&quot; class=&quot;javascript&quot; data-ke-language=&quot;javascript&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;storePassword=&amp;lt;password from previous step&amp;gt;
keyPassword=&amp;lt;password from previous step&amp;gt;
keyAlias=key
storeFile=C:\\Users\\User_Name\\key.jks&lt;/code&gt;&lt;/pre&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-origin-width=&quot;390&quot; data-origin-height=&quot;152&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/WsUmh/btqEeo2hQqg/97686gygRijDUveX12znU0/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/WsUmh/btqEeo2hQqg/97686gygRijDUveX12znU0/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/WsUmh/btqEeo2hQqg/97686gygRijDUveX12znU0/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FWsUmh%2FbtqEeo2hQqg%2F97686gygRijDUveX12znU0%2Fimg.png&quot; data-origin-width=&quot;390&quot; data-origin-height=&quot;152&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;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;이&lt;span&gt;&amp;nbsp;&lt;/span&gt;&lt;b&gt;key.properties&lt;span&gt;&amp;nbsp;&lt;/span&gt;&lt;/b&gt;파일은 개인적으로 보관하고 있어야 합니다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;공개된 저장소에 업로드 하면 안됩니다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;hr style=&quot;margin: 20px auto 0px; border: none; cursor: pointer !important; z-index: 1; font-size: 0px; line-height: 0; background: url('../image/divider-line.svg') center 0px / 200px 420px no-repeat; width: 64px; height: 4px; padding: 20px; color: #333333; font-family: AppleSDGothicNeo-Regular, 'Malgun Gothic', '맑은 고딕', dotum, 돋움, sans-serif; font-style: normal; font-variant-ligatures: normal; font-variant-caps: normal; font-weight: 400; letter-spacing: normal; orphans: 2; text-align: start; text-indent: 0px; text-transform: none; white-space: normal; widows: 2; word-spacing: 0px; -webkit-text-stroke-width: 0px; text-decoration-style: initial; text-decoration-color: initial;&quot; contenteditable=&quot;false&quot; data-ke-type=&quot;horizontalRule&quot; data-ke-style=&quot;style1&quot; /&gt;
&lt;h2 data-ke-size=&quot;size26&quot;&gt;&lt;span style=&quot;font-family: 'Noto Sans Demilight', 'Noto Sans KR';&quot;&gt;&lt;b&gt;&lt;i&gt;Gradle에서 서명 구성하기&lt;/i&gt;&lt;/b&gt;&lt;/span&gt;&lt;/h2&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;Android에 Gradle에서도 해당 key.properties 파일에 접근할 수 있도록 설정해 줍니다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;[android] - [app] - [build.gradle] 로 들어가,&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;먼저 속성파일에서 keystore를 가져올 수 있도록&lt;span&gt;&amp;nbsp;&lt;/span&gt;&lt;span style=&quot;color: #333333;&quot;&gt;아래 코드를 입력해 주시길 바랍니다.&lt;/span&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;color: #333333;&quot;&gt;(주석을 읽으면서 입력하세요)&lt;/span&gt;&lt;/p&gt;
&lt;pre id=&quot;code_1589655456775&quot; class=&quot;java&quot; data-ke-language=&quot;java&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;// build.gradle에서 해당 코드를 검색합니다.
android {&lt;/code&gt;&lt;/pre&gt;
&lt;pre id=&quot;code_1589655465946&quot; class=&quot;java&quot; data-ke-language=&quot;java&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;// 해당 코드를 추가해 줍니다.
def keystoreProperties = new Properties()
def keystorePropertiesFile = rootProject.file('key.properties')
if (keystorePropertiesFile.exists()) {
    keystoreProperties.load(new FileInputStream(keystorePropertiesFile))
}

// 검색 된 코드
android {&lt;/code&gt;&lt;/pre&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;그리고 아래 코드 또한 입력해 주시가 바랍니다.&lt;/p&gt;
&lt;pre id=&quot;code_1589655475804&quot; class=&quot;java&quot; data-ke-language=&quot;java&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;// build.gradle에서 해당 코드를 검색해 줍니다.
buildTypes {&lt;/code&gt;&lt;/pre&gt;
&lt;pre id=&quot;code_1589655485093&quot; class=&quot;java&quot; data-ke-language=&quot;java&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;// 해당 코드를 입력해주세요
signingConfigs {
    release {
        keyAlias keystoreProperties['keyAlias']
        keyPassword keystoreProperties['keyPassword']
        storeFile file(keystoreProperties['storeFile'])
        storePassword keystoreProperties['storePassword']
    }
}

// 검색된 코드
buildTypes {&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;&lt;figure class=&quot;imagegridblock&quot;&gt;
  &lt;div class=&quot;image-container&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/Uou3S/btqEeqyYKkC/yFWKKcr7NkLhSvpJMfZTc0/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/Uou3S/btqEeqyYKkC/yFWKKcr7NkLhSvpJMfZTc0/img.png&quot; style=&quot;width: 32.4267%; margin-right: 10px;&quot; data-origin-width=&quot;273&quot; data-origin-height=&quot;336&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/Uou3S/btqEeqyYKkC/yFWKKcr7NkLhSvpJMfZTc0/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FUou3S%2FbtqEeqyYKkC%2FyFWKKcr7NkLhSvpJMfZTc0%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;273&quot; height=&quot;336&quot;/&gt;&lt;/span&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/bBMBtz/btqEcnjjTxj/38BrIr7sKwPPZkekBEJYpK/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/bBMBtz/btqEcnjjTxj/38BrIr7sKwPPZkekBEJYpK/img.png&quot; style=&quot;width: 66.41047016295144%;&quot; data-origin-width=&quot;1045&quot; data-origin-height=&quot;628&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/bBMBtz/btqEcnjjTxj/38BrIr7sKwPPZkekBEJYpK/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FbBMBtz%2FbtqEcnjjTxj%2F38BrIr7sKwPPZkekBEJYpK%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;1045&quot; height=&quot;628&quot;/&gt;&lt;/span&gt;&lt;/div&gt;
&lt;/figure&gt;
&lt;figure class=&quot;imageblock alignCenter&quot; data-origin-width=&quot;1127&quot; data-origin-height=&quot;680&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/qaWyv/btqEdjge3S4/PWWjcJbueL4YHoU6uxxhlk/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/qaWyv/btqEdjge3S4/PWWjcJbueL4YHoU6uxxhlk/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/qaWyv/btqEdjge3S4/PWWjcJbueL4YHoU6uxxhlk/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FqaWyv%2FbtqEdjge3S4%2FPWWjcJbueL4YHoU6uxxhlk%2Fimg.png&quot; data-origin-width=&quot;1127&quot; data-origin-height=&quot;680&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;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;이제 앱을 빌드할 때 자동으로 key 파일을 불러올 수 있습니다.&lt;/p&gt;
&lt;hr contenteditable=&quot;false&quot; data-ke-type=&quot;horizontalRule&quot; data-ke-style=&quot;style3&quot; /&gt;
&lt;p id=&quot;앱으로부터-keystore-참조하기&quot; data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;h2 data-ke-size=&quot;size26&quot;&gt;&lt;i&gt;&lt;b&gt;마무리&lt;/b&gt;&lt;/i&gt;&lt;/h2&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;자 이번 포스팅에서는 앱에 디지털 서명을 하는 방법에 대해서 알아보았습니다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;혹시 잘 안되는 부분이 있거나 포스트에 문제가 있다면 댓글을 남겨주시기 바랍니다.&lt;/p&gt;
&lt;p&gt;감사합니다.&lt;/p&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;</description>
      <category>프로그래밍 언어/Flutter</category>
      <category>Android</category>
      <category>Flutter</category>
      <category>ios</category>
      <category>배포</category>
      <category>안드로이드</category>
      <author>방현준</author>
      <guid isPermaLink="true">https://noogoonaa.tistory.com/68</guid>
      <comments>https://noogoonaa.tistory.com/68#entry68comment</comments>
      <pubDate>Mon, 18 May 2020 08:00:31 +0900</pubDate>
    </item>
    <item>
      <title>Flutter로 개발한 앱 플레이스토어(Play Store)에 배포하기 (1) - 런처 아이콘 만들기</title>
      <link>https://noogoonaa.tistory.com/67</link>
      <description>&lt;h2 data-ke-size=&quot;size26&quot;&gt;&lt;span style=&quot;color: #ee2323;&quot;&gt;&lt;b&gt;&lt;i&gt;Flutter로 개발한 앱 플레이스토어(Play Store)에 배포하기 시리즈&lt;/i&gt;&lt;/b&gt;&lt;/span&gt;&lt;/h2&gt;
&lt;hr contenteditable=&quot;false&quot; data-ke-type=&quot;horizontalRule&quot; data-ke-style=&quot;style5&quot; /&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-origin-width=&quot;937&quot; data-origin-height=&quot;461&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/bVPmML/btqEcmLzDMj/Qy24Tl1y3iA1dgTgfOVjd1/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/bVPmML/btqEcmLzDMj/Qy24Tl1y3iA1dgTgfOVjd1/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/bVPmML/btqEcmLzDMj/Qy24Tl1y3iA1dgTgfOVjd1/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FbVPmML%2FbtqEcmLzDMj%2FQy24Tl1y3iA1dgTgfOVjd1%2Fimg.png&quot; data-origin-width=&quot;937&quot; data-origin-height=&quot;461&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;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span&gt;새로 생성된 Flutter 앱의 아이콘은 기본 런처 아이콘으로 설정되어있습니다.&amp;nbsp;&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;span&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;h2 data-ke-size=&quot;size26&quot;&gt;&lt;i&gt;&lt;span style=&quot;font-family: AppleSDGothicNeo-Regular, 'Malgun Gothic', '맑은 고딕', dotum, 돋움, sans-serif;&quot;&gt;&lt;b&gt;런처 아이콘 만들기&lt;/b&gt;&lt;/span&gt;&lt;/i&gt;&lt;/h2&gt;
&lt;figure id=&quot;og_1589651552827&quot; contenteditable=&quot;false&quot; data-ke-type=&quot;opengraph&quot; data-og-type=&quot;website&quot; data-og-title=&quot;App Icon Generator&quot; data-og-description=&quot;Generate icons and images for mobile apps, android and iOS. No need to upload or download. Works on your browser&quot; data-og-host=&quot;appicon.co&quot; data-og-source-url=&quot;https://appicon.co/&quot; data-og-url=&quot;https://appicon.co&quot; data-og-image=&quot;https://scrap.kakaocdn.net/dn/KBgIL/hyF36TxB0x/ugEph0bcuzFDHKPW7Z1KnK/img.png?width=1129&amp;amp;height=834&amp;amp;face=0_0_1129_834&quot;&gt;&lt;a href=&quot;https://appicon.co/&quot; target=&quot;_blank&quot; rel=&quot;noopener&quot; data-source-url=&quot;https://appicon.co/&quot;&gt;
&lt;div class=&quot;og-image&quot; style=&quot;background-image: url('https://scrap.kakaocdn.net/dn/KBgIL/hyF36TxB0x/ugEph0bcuzFDHKPW7Z1KnK/img.png?width=1129&amp;amp;height=834&amp;amp;face=0_0_1129_834');&quot;&gt;&amp;nbsp;&lt;/div&gt;
&lt;div class=&quot;og-text&quot;&gt;
&lt;p class=&quot;og-title&quot;&gt;App Icon Generator&lt;/p&gt;
&lt;p class=&quot;og-desc&quot;&gt;Generate icons and images for mobile apps, android and iOS. No need to upload or download. Works on your browser&lt;/p&gt;
&lt;p class=&quot;og-host&quot;&gt;appicon.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;/p&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-origin-width=&quot;1120&quot; data-origin-height=&quot;744&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/NMpXf/btqEbvIOaxV/P5E8m9hkdJpF0EtkQJElM1/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/NMpXf/btqEbvIOaxV/P5E8m9hkdJpF0EtkQJElM1/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/NMpXf/btqEbvIOaxV/P5E8m9hkdJpF0EtkQJElM1/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FNMpXf%2FbtqEbvIOaxV%2FP5E8m9hkdJpF0EtkQJElM1%2Fimg.png&quot; data-origin-width=&quot;1120&quot; data-origin-height=&quot;744&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;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;처음 접속하면 위 사이트로 접속하게 됩니다. 그럼 저 빨간색 네모칸에 원하는 앱 아이콘 사진을 넣어주도록 합니다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-origin-width=&quot;1032&quot; data-origin-height=&quot;682&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/cgEOY0/btqEd9jLHP2/XtO3O4jNgFgW7h4RwdczwK/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/cgEOY0/btqEd9jLHP2/XtO3O4jNgFgW7h4RwdczwK/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/cgEOY0/btqEd9jLHP2/XtO3O4jNgFgW7h4RwdczwK/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FcgEOY0%2FbtqEd9jLHP2%2FXtO3O4jNgFgW7h4RwdczwK%2Fimg.png&quot; data-origin-width=&quot;1032&quot; data-origin-height=&quot;682&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;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;이렇게요, 그럼&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-origin-width=&quot;1017&quot; data-origin-height=&quot;678&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/cncu8o/btqEbub0Hoo/deBYUskpO3pChU7GCkaZt1/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/cncu8o/btqEbub0Hoo/deBYUskpO3pChU7GCkaZt1/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/cncu8o/btqEbub0Hoo/deBYUskpO3pChU7GCkaZt1/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2Fcncu8o%2FbtqEbub0Hoo%2FdeBYUskpO3pChU7GCkaZt1%2Fimg.png&quot; data-origin-width=&quot;1017&quot; data-origin-height=&quot;678&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;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;그럼 위 사진 처럼 사진이 보여지게 됩니다. 이제 오른쪽에 스위치 버튼중에서 자신이 원하는 플랫폼에 맞춰 설정해 줍니다. 이번 포스트는 안드로이드를 타겟으로 하기 때문에 안드로이드만 스위칭 해줬습니다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-origin-width=&quot;1017&quot; data-origin-height=&quot;678&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/kKxPW/btqEdyjNiLb/CcGKhJa8vfa8TmuajbDNHk/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/kKxPW/btqEdyjNiLb/CcGKhJa8vfa8TmuajbDNHk/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/kKxPW/btqEdyjNiLb/CcGKhJa8vfa8TmuajbDNHk/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FkKxPW%2FbtqEdyjNiLb%2FCcGKhJa8vfa8TmuajbDNHk%2Fimg.png&quot; data-origin-width=&quot;1017&quot; data-origin-height=&quot;678&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;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;그런 다음 &lt;b&gt;Generate&lt;/b&gt;를 눌러주면,&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-origin-width=&quot;229&quot; data-origin-height=&quot;47&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/bjbjnJ/btqEcG3Ri6o/wmwj9NHiSRRHD7pKnHy7eK/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/bjbjnJ/btqEcG3Ri6o/wmwj9NHiSRRHD7pKnHy7eK/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/bjbjnJ/btqEcG3Ri6o/wmwj9NHiSRRHD7pKnHy7eK/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FbjbjnJ%2FbtqEcG3Ri6o%2Fwmwj9NHiSRRHD7pKnHy7eK%2Fimg.png&quot; data-origin-width=&quot;229&quot; data-origin-height=&quot;47&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;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;요렇게 다운로드가 되어집니다. 그럼 압축을 풀어보도록 하겠습니다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-origin-width=&quot;511&quot; data-origin-height=&quot;154&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/cfBH7A/btqEbarlr1T/5ykTx7GBhNsxRmhOkO9dq0/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/cfBH7A/btqEbarlr1T/5ykTx7GBhNsxRmhOkO9dq0/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/cfBH7A/btqEbarlr1T/5ykTx7GBhNsxRmhOkO9dq0/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FcfBH7A%2FbtqEbarlr1T%2F5ykTx7GBhNsxRmhOkO9dq0%2Fimg.png&quot; data-origin-width=&quot;511&quot; data-origin-height=&quot;154&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;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;자 요렇게 아이콘 이미지가 나오게 되었습니다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;그럼 android 파일로 들어가 보도록하겠습니다.&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-origin-width=&quot;642&quot; data-origin-height=&quot;152&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/3MhbM/btqEcThCR5N/r1sGyMKrPfk1G9UKwTholk/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/3MhbM/btqEcThCR5N/r1sGyMKrPfk1G9UKwTholk/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/3MhbM/btqEcThCR5N/r1sGyMKrPfk1G9UKwTholk/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2F3MhbM%2FbtqEcThCR5N%2Fr1sGyMKrPfk1G9UKwTholk%2Fimg.png&quot; data-origin-width=&quot;642&quot; data-origin-height=&quot;152&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;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;어디서 많이 본 적이 있는 폴더 구조 아닌가요? 그렇습니다. 안드로이드에 res파일 구조와 같습니다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;이 폴더 안에는 각 사이즈에 맞는 아이콘들이 들어가 있습니다. 이것을 Flutte 프로젝트에 있는 안드로이드 res 폴더에 넣어주면 됩니다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;Flutter 프로젝트에 안드로드 파일 구조는 아래와 같습니다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;b&gt;D:\&amp;lt;프로젝트 루트&amp;gt;\android\app\src\main\res&lt;/b&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-origin-width=&quot;294&quot; data-origin-height=&quot;488&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/c4FZA1/btqEcUgxLdv/Slp2qkRcMii3NvuyYm7hI0/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/c4FZA1/btqEcUgxLdv/Slp2qkRcMii3NvuyYm7hI0/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/c4FZA1/btqEcUgxLdv/Slp2qkRcMii3NvuyYm7hI0/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2Fc4FZA1%2FbtqEcUgxLdv%2FSlp2qkRcMii3NvuyYm7hI0%2Fimg.png&quot; data-origin-width=&quot;294&quot; data-origin-height=&quot;488&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;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;어때요 똑같죠? 요 경로에 각 폴더에 맞춰 아이콘들을 넣어주면 됩니다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-origin-width=&quot;513&quot; data-origin-height=&quot;360&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/DTZfh/btqEdlkGygQ/dhXGxnFWbHKoM7rTK8iPBk/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/DTZfh/btqEdlkGygQ/dhXGxnFWbHKoM7rTK8iPBk/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/DTZfh/btqEdlkGygQ/dhXGxnFWbHKoM7rTK8iPBk/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FDTZfh%2FbtqEdlkGygQ%2FdhXGxnFWbHKoM7rTK8iPBk%2Fimg.png&quot; data-origin-width=&quot;513&quot; data-origin-height=&quot;360&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;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;요렇게요, 그리고 다 넣었으면 앱을 빌드 시켜보면&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-origin-width=&quot;372&quot; data-origin-height=&quot;709&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/Mwarw/btqEdxd6TxK/nR2kKohJ0UzuZ6AgBB7dWk/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/Mwarw/btqEdxd6TxK/nR2kKohJ0UzuZ6AgBB7dWk/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/Mwarw/btqEdxd6TxK/nR2kKohJ0UzuZ6AgBB7dWk/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FMwarw%2FbtqEdxd6TxK%2FnR2kKohJ0UzuZ6AgBB7dWk%2Fimg.png&quot; data-origin-width=&quot;372&quot; data-origin-height=&quot;709&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;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;어때요 잘 들어갔죠?&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;이것으로 앱 아이콘은 변경되었습니다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;hr contenteditable=&quot;false&quot; data-ke-type=&quot;horizontalRule&quot; data-ke-style=&quot;style1&quot; /&gt;
&lt;h2 data-ke-size=&quot;size26&quot;&gt;&lt;i&gt;&lt;b&gt;&lt;span style=&quot;color: #ee2323;&quot;&gt;중요!!!&lt;/span&gt;&lt;/b&gt;&lt;/i&gt;&lt;/h2&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;우리가 사용한 App Icon Generator라는 사이트는 .png라는 확장자로 이미지를 생성합니다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;하지만 확장자가 .png일 경우 앱 번들링 시 아래와 같은 에러를 뱉어냅니다.&lt;/p&gt;
&lt;pre id=&quot;code_1589655207925&quot; class=&quot;python&quot; data-ke-language=&quot;python&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;PS D:\programming\flutter\oneday_oneggang&amp;gt; flutter build appbundle
                                                                        
FAILURE: Build failed with an exception.

* What went wrong:
Execution failed for task ':app:mergeReleaseResources'.
&amp;gt; Multiple task action failures occurred:
   &amp;gt; A failure occurred while executing com.android.build.gradle.internal.tasks.Workers$ActionFacade
      &amp;gt; Android resource compilation failed
        D:\programming\flutter\oneday_oneggang\android\app\src\main\res\mipmap-hdpi\ic_launcher.png: AAPT: error: failed to read PNG signature: file does not start with PNG signature.

        D:\programming\flutter\oneday_oneggang\android\app\src\main\res\mipmap-hdpi\ic_launcher.png: AAPT: error: file failed to compile.

   &amp;gt; A failure occurred while executing com.android.build.gradle.internal.tasks.Workers$ActionFacade
      &amp;gt; Android resource compilation failed
        D:\programming\flutter\oneday_oneggang\android\app\src\main\res\mipmap-xhdpi\ic_launcher.png: AAPT: error: failed to read PNG signature: file does not start with PNG signature.

        D:\programming\flutter\oneday_oneggang\android\app\src\main\res\mipmap-xhdpi\ic_launcher.png: AAPT: error: file failed to compile.

   &amp;gt; A failure occurred while executing com.android.build.gradle.internal.tasks.Workers$ActionFacade
      &amp;gt; Android resource compilation failed
        D:\programming\flutter\oneday_oneggang\android\app\src\main\res\mipmap-mdpi\ic_launcher.png: AAPT: error: failed to read PNG signature: file does not start with PNG signature.

        D:\programming\flutter\oneday_oneggang\android\app\src\main\res\mipmap-mdpi\ic_launcher.png: AAPT: error: file failed to compile.

   &amp;gt; A failure occurred while executing com.android.build.gradle.internal.tasks.Workers$ActionFacade
      &amp;gt; Android resource compilation failed
        D:\programming\flutter\oneday_oneggang\android\app\src\main\res\mipmap-xxxhdpi\ic_launcher.png: AAPT: error: failed to read PNG signature: file does not start with PNG signature.

        D:\programming\flutter\oneday_oneggang\android\app\src\main\res\mipmap-xxxhdpi\ic_launcher.png: AAPT: error: file failed to compile.

   &amp;gt; A failure occurred while executing com.android.build.gradle.internal.tasks.Workers$ActionFacade
      &amp;gt; Android resource compilation failed
        D:\programming\flutter\oneday_oneggang\android\app\src\main\res\mipmap-xxhdpi\ic_launcher.png: AAPT: error: failed to read PNG signature: file does not start with PNG signature.

        D:\programming\flutter\oneday_oneggang\android\app\src\main\res\mipmap-xxhdpi\ic_launcher.png: AAPT: error: file failed to compile.


* Try:
Run with --stacktrace option to get the stack trace. Run with --info or --debug option to get more log output. Run with --scan to get full insights.

* Get more help at https://help.gradle.org

        D:\programming\flutter\oneday_oneggang\android\app\src\main\res\mipmap-xhdpi\ic_launcher.png: AAPT: error: file failed to compile.

   &amp;gt; A failure occurred while executing com.android.build.gradle.internal.tasks.Workers$ActionFacade
      &amp;gt; Android resource compilation failed
        D:\programming\flutter\oneday_oneggang\android\app\src\main\res\mipmap-mdpi\ic_launcher.png: AAPT: error: failed to read PNG signature: file does not start with PNG signature.

        D:\programming\flutter\oneday_oneggang\android\app\src\main\res\mipmap-mdpi\ic_launcher.png: AAPT: error: file failed to compile.

   &amp;gt; A failure occurred while executing com.android.build.gradle.internal.tasks.Workers$ActionFacade
      &amp;gt; Android resource compilation failed
        D:\programming\flutter\oneday_oneggang\android\app\src\main\res\mipmap-xxxhdpi\ic_launcher.png: AAPT: error: failed to read PNG signature: file does not start with PNG signature.

        D:\programming\flutter\oneday_oneggang\android\app\src\main\res\mipmap-xxxhdpi\ic_launcher.png: AAPT: error: file failed to compile.

   &amp;gt; A failure occurred while executing com.android.build.gradle.internal.tasks.Workers$ActionFacade
      &amp;gt; Android resource compilation failed
        D:\programming\flutter\oneday_oneggang\android\app\src\main\res\mipmap-xxhdpi\ic_launcher.png: AAPT: error: failed to read PNG signature: file does not start with PNG signature.

        D:\programming\flutter\oneday_oneggang\android\app\src\main\res\mipmap-xxhdpi\ic_launcher.png: AAPT: error: file failed to compile.


* Try:
Run with --stacktrace option to get the stack trace. Run with --info or --debug option to get more log output. Run with --scan to get full insights.

* Get more help at https://help.gradle.org

BUILD FAILED in 9s&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;&lt;figure class=&quot;imagegridblock&quot;&gt;
  &lt;div class=&quot;image-container&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/dgVm6M/btqEbupMQOI/sEx8Cc2H2uBUSJA2zv7Hqk/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/dgVm6M/btqEbupMQOI/sEx8Cc2H2uBUSJA2zv7Hqk/img.png&quot; data-origin-width=&quot;1569&quot; data-origin-height=&quot;814&quot; style=&quot;width: 77.3219%; margin-right: 10px;&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/dgVm6M/btqEbupMQOI/sEx8Cc2H2uBUSJA2zv7Hqk/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FdgVm6M%2FbtqEbupMQOI%2FsEx8Cc2H2uBUSJA2zv7Hqk%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;1569&quot; height=&quot;814&quot;/&gt;&lt;/span&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/JM8jO/btqEeqZ5S2E/MnNxK6qlUKWN6a8KkAuq1k/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/JM8jO/btqEeqZ5S2E/MnNxK6qlUKWN6a8KkAuq1k/img.png&quot; data-origin-width=&quot;273&quot; data-origin-height=&quot;509&quot; style=&quot;width: 21.5154%;&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/JM8jO/btqEeqZ5S2E/MnNxK6qlUKWN6a8KkAuq1k/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FJM8jO%2FbtqEeqZ5S2E%2FMnNxK6qlUKWN6a8KkAuq1k%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;273&quot; height=&quot;509&quot;/&gt;&lt;/span&gt;&lt;/div&gt;
&lt;/figure&gt;
&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;그렇기 때문에 .png 확장자를 .PNG로 변경해 줍니다.&lt;/p&gt;
&lt;hr contenteditable=&quot;false&quot; data-ke-type=&quot;horizontalRule&quot; data-ke-style=&quot;style3&quot; /&gt;
&lt;h2 data-ke-size=&quot;size26&quot;&gt;&lt;i&gt;&lt;span style=&quot;font-family: AppleSDGothicNeo-Regular, 'Malgun Gothic', '맑은 고딕', dotum, 돋움, sans-serif;&quot;&gt;&lt;b&gt;마무리&lt;/b&gt;&lt;/span&gt;&lt;/i&gt;&lt;/h2&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;오늘은 Flutter 앱 배포 그 첫번째 런처 아이콘을 만들어서 앱에 추가하는 방법까지 알아보았습니다.&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;</description>
      <category>프로그래밍 언어/Flutter</category>
      <category>Android</category>
      <category>Flutter</category>
      <category>ios</category>
      <category>배포</category>
      <category>안드로이드</category>
      <author>방현준</author>
      <guid isPermaLink="true">https://noogoonaa.tistory.com/67</guid>
      <comments>https://noogoonaa.tistory.com/67#entry67comment</comments>
      <pubDate>Sun, 17 May 2020 03:00:16 +0900</pubDate>
    </item>
    <item>
      <title>OpenJDK 14.0.1 설치하는 법</title>
      <link>https://noogoonaa.tistory.com/66</link>
      <description>&lt;hr contenteditable=&quot;false&quot; data-ke-type=&quot;horizontalRule&quot; data-ke-style=&quot;style5&quot; /&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;자 오라클의 JDK가 유료가 되면서 많은 사람들이 OpenJDK를 사용하고 있습니다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;OpenJDK는 무료이기 때문에 사람들이 많이 사용하는 것 인데요.&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;hr contenteditable=&quot;false&quot; data-ke-type=&quot;horizontalRule&quot; data-ke-style=&quot;style3&quot; /&gt;
&lt;h2 data-ke-size=&quot;size26&quot;&gt;&lt;i&gt;&lt;b&gt;OpenJDK 사이트 접속&lt;/b&gt;&lt;/i&gt;&lt;/h2&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-filename=&quot;Screenshot_170.png&quot; data-origin-width=&quot;700&quot; data-origin-height=&quot;678&quot;&gt;&lt;a href=&quot;https://openjdk.java.net/&quot; target=&quot;_blank&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/cm4XQ7/btqEbaLEH6r/1FqWcLyfDO1KwkVnKHu4w1/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2Fcm4XQ7%2FbtqEbaLEH6r%2F1FqWcLyfDO1KwkVnKHu4w1%2Fimg.png&quot; data-filename=&quot;Screenshot_170.png&quot; data-origin-width=&quot;700&quot; data-origin-height=&quot;678&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;/&gt;&lt;/a&gt;&lt;/figure&gt;
&lt;/p&gt;
&lt;figure id=&quot;og_1589609422922&quot; contenteditable=&quot;false&quot; data-ke-type=&quot;opengraph&quot; data-og-type=&quot;website&quot; data-og-title=&quot;OpenJDK&quot; data-og-description=&quot;Download and install the open-source JDK for most popular Linux distributions. Oracle's free, GPL-licensed, production-ready OpenJDK JDK&amp;nbsp;14 binaries are at jdk.java.net/14; Oracle's commercially-licensed JDK&amp;nbsp;14 binaries for Linux, macOS, and Windows, bas&quot; data-og-host=&quot;openjdk.java.net&quot; data-og-source-url=&quot;https://openjdk.java.net/&quot; data-og-url=&quot;https://openjdk.java.net/&quot; data-og-image=&quot;&quot;&gt;&lt;a href=&quot;https://openjdk.java.net/&quot; target=&quot;_blank&quot; rel=&quot;noopener&quot; data-source-url=&quot;https://openjdk.java.net/&quot;&gt;
&lt;div class=&quot;og-image&quot; style=&quot;background-image: url();&quot;&gt;&amp;nbsp;&lt;/div&gt;
&lt;div class=&quot;og-text&quot;&gt;
&lt;p class=&quot;og-title&quot;&gt;OpenJDK&lt;/p&gt;
&lt;p class=&quot;og-desc&quot;&gt;Download and install the open-source JDK for most popular Linux distributions. Oracle's free, GPL-licensed, production-ready OpenJDK JDK&amp;nbsp;14 binaries are at jdk.java.net/14; Oracle's commercially-licensed JDK&amp;nbsp;14 binaries for Linux, macOS, and Windows, bas&lt;/p&gt;
&lt;p class=&quot;og-host&quot;&gt;openjdk.java.net&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;/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-filename=&quot;Screenshot_172.png&quot; data-origin-width=&quot;725&quot; data-origin-height=&quot;692&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/bhStaO/btqEdjArSSp/iRS4CPlNAfthv1V1hBH9sk/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/bhStaO/btqEdjArSSp/iRS4CPlNAfthv1V1hBH9sk/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/bhStaO/btqEdjArSSp/iRS4CPlNAfthv1V1hBH9sk/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FbhStaO%2FbtqEdjArSSp%2FiRS4CPlNAfthv1V1hBH9sk%2Fimg.png&quot; data-filename=&quot;Screenshot_172.png&quot; data-origin-width=&quot;725&quot; data-origin-height=&quot;692&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;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;빨간 네모칸 부분에 링크를 클릭해 주세요&lt;/p&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-filename=&quot;Screenshot_173.png&quot; data-origin-width=&quot;639&quot; data-origin-height=&quot;765&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/dIwWjH/btqEd8d9OwT/M9jed7rtem84umzY7cMpvK/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/dIwWjH/btqEd8d9OwT/M9jed7rtem84umzY7cMpvK/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/dIwWjH/btqEd8d9OwT/M9jed7rtem84umzY7cMpvK/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FdIwWjH%2FbtqEd8d9OwT%2FM9jed7rtem84umzY7cMpvK%2Fimg.png&quot; data-filename=&quot;Screenshot_173.png&quot; data-origin-width=&quot;639&quot; data-origin-height=&quot;765&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;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;그럼 위와 같은 사진에 사이트로 오게 됩니다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;여기서 각자 환경에 맞게 설치를 하시면 되는데 저는 Windows 환경 이기 때문에 Windows 환경으로 깔도록 하겠습니다.&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-filename=&quot;Screenshot_174.png&quot; data-origin-width=&quot;736&quot; data-origin-height=&quot;426&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/VeVrF/btqEbRkCz0T/YSe8npx5py8gurGfh05CT0/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/VeVrF/btqEbRkCz0T/YSe8npx5py8gurGfh05CT0/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/VeVrF/btqEbRkCz0T/YSe8npx5py8gurGfh05CT0/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FVeVrF%2FbtqEbRkCz0T%2FYSe8npx5py8gurGfh05CT0%2Fimg.png&quot; data-filename=&quot;Screenshot_174.png&quot; data-origin-width=&quot;736&quot; data-origin-height=&quot;426&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;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;만약 다른 버전을 원하시는 분은 위 사진에 네모칸을 참고해 주시길 바랍니다.&lt;/p&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-filename=&quot;Screenshot_175.png&quot; data-origin-width=&quot;800&quot; data-origin-height=&quot;606&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/etveLO/btqEaZXVML1/CK1uo4oqcADPSmdVedJ7E1/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/etveLO/btqEaZXVML1/CK1uo4oqcADPSmdVedJ7E1/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/etveLO/btqEaZXVML1/CK1uo4oqcADPSmdVedJ7E1/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FetveLO%2FbtqEaZXVML1%2FCK1uo4oqcADPSmdVedJ7E1%2Fimg.png&quot; data-filename=&quot;Screenshot_175.png&quot; data-origin-width=&quot;800&quot; data-origin-height=&quot;606&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;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;자 이제 설치가 완료되면 하나의 압축파일이 보여질 것 입니다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;압축을 해제해 줍니다.&lt;/p&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-filename=&quot;Screenshot_176.png&quot; data-origin-width=&quot;714&quot; data-origin-height=&quot;251&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/YFqmp/btqEd9jQb2Z/0Ytk2IqTkU0UNb4NC7hF90/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/YFqmp/btqEd9jQb2Z/0Ytk2IqTkU0UNb4NC7hF90/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/YFqmp/btqEd9jQb2Z/0Ytk2IqTkU0UNb4NC7hF90/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FYFqmp%2FbtqEd9jQb2Z%2F0Ytk2IqTkU0UNb4NC7hF90%2Fimg.png&quot; data-filename=&quot;Screenshot_176.png&quot; data-origin-width=&quot;714&quot; data-origin-height=&quot;251&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;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;그럼 위와 같은 파일 구조가 나오게 됩니다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;여기서 &lt;b&gt;[C:\Program Files]&lt;/b&gt; 폴더로 이동합니다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;그 후 &lt;b&gt;[&lt;/b&gt;&lt;span style=&quot;color: #333333;&quot;&gt;&lt;b&gt;C:\Program Files]&lt;/b&gt;&lt;span&gt; 폴더 안에&lt;/span&gt;&lt;/span&gt; &lt;b&gt;[openJDK]&lt;/b&gt;라는 폴더를 하나 만듭니다.&lt;/p&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-filename=&quot;Screenshot_177.png&quot; data-origin-width=&quot;690&quot; data-origin-height=&quot;680&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/caY9TS/btqEcnQ6LVr/x8gi9niTjM8xSo3xOlrQmk/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/caY9TS/btqEcnQ6LVr/x8gi9niTjM8xSo3xOlrQmk/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/caY9TS/btqEcnQ6LVr/x8gi9niTjM8xSo3xOlrQmk/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FcaY9TS%2FbtqEcnQ6LVr%2Fx8gi9niTjM8xSo3xOlrQmk%2Fimg.png&quot; data-filename=&quot;Screenshot_177.png&quot; data-origin-width=&quot;690&quot; data-origin-height=&quot;680&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;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;요렇게 말이죠&lt;/p&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-filename=&quot;Screenshot_178.png&quot; data-origin-width=&quot;1157&quot; data-origin-height=&quot;646&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/tXdJe/btqEaZwREs1/h2YdtiKYueADz7VY7X5FIK/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/tXdJe/btqEaZwREs1/h2YdtiKYueADz7VY7X5FIK/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/tXdJe/btqEaZwREs1/h2YdtiKYueADz7VY7X5FIK/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FtXdJe%2FbtqEaZwREs1%2Fh2YdtiKYueADz7VY7X5FIK%2Fimg.png&quot; data-filename=&quot;Screenshot_178.png&quot; data-origin-width=&quot;1157&quot; data-origin-height=&quot;646&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;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;그 후 &lt;b&gt;[우리가 압축을 해제한 OpenJDK]&lt;/b&gt; 파일을 &lt;b&gt;[&lt;/b&gt;&lt;span style=&quot;color: #333333;&quot;&gt;&lt;b&gt;C:\Program Files\openJDK]&lt;/b&gt; 폴더에 추가해 줍니다.&lt;/span&gt;&lt;/p&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-filename=&quot;Screenshot_179.png&quot; data-origin-width=&quot;635&quot; data-origin-height=&quot;377&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/sdntO/btqEdjUL398/Rb4mmKtzUX54RyDn3uaCVK/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/sdntO/btqEdjUL398/Rb4mmKtzUX54RyDn3uaCVK/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/sdntO/btqEdjUL398/Rb4mmKtzUX54RyDn3uaCVK/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FsdntO%2FbtqEdjUL398%2FRb4mmKtzUX54RyDn3uaCVK%2Fimg.png&quot; data-filename=&quot;Screenshot_179.png&quot; data-origin-width=&quot;635&quot; data-origin-height=&quot;377&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;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;그럼 &lt;b&gt;[&lt;/b&gt;&lt;span style=&quot;color: #333333;&quot;&gt;&lt;b&gt;C:\Program Files\openJDK\jdk-14.0.1] &lt;/b&gt;경로가 되어집니다.&lt;/span&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;자 이제 jdk 설치는 끝났습니다.&lt;/p&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;hr contenteditable=&quot;false&quot; data-ke-type=&quot;horizontalRule&quot; data-ke-style=&quot;style1&quot; /&gt;
&lt;h2 data-ke-size=&quot;size26&quot;&gt;&lt;i&gt;&lt;b&gt;JDK 환경변수 설정하기&lt;/b&gt;&lt;/i&gt;&lt;/h2&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;우리는 JDK 폴더를 경로로 환경변수를 추가하여&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;CMD에서 굳이 JDK 파일 경로로 이동하지 않아도 명령어 하나로만 사용이 가능하도록 설정해 주어야 합니다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;일단 Windows에서 폴더를 검색하는 부분에 &lt;b&gt;[제어판]&lt;/b&gt; 이라고 입력 후 제어판에 들어가도록 합니다.&lt;/p&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-filename=&quot;Screenshot_180.png&quot; data-origin-width=&quot;830&quot; data-origin-height=&quot;675&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/FmI4U/btqEcoiaDNa/HcCNZnRTR7QPC25COBt0Fk/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/FmI4U/btqEcoiaDNa/HcCNZnRTR7QPC25COBt0Fk/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/FmI4U/btqEcoiaDNa/HcCNZnRTR7QPC25COBt0Fk/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FFmI4U%2FbtqEcoiaDNa%2FHcCNZnRTR7QPC25COBt0Fk%2Fimg.png&quot; data-filename=&quot;Screenshot_180.png&quot; data-origin-width=&quot;830&quot; data-origin-height=&quot;675&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;/&gt;&lt;/span&gt;&lt;/figure&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&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-filename=&quot;Screenshot_182.png&quot; data-origin-width=&quot;1119&quot; data-origin-height=&quot;572&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/pEQFJ/btqEd7TRoDF/8tdtHeskr9hMKMdqtA6FV1/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/pEQFJ/btqEd7TRoDF/8tdtHeskr9hMKMdqtA6FV1/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/pEQFJ/btqEd7TRoDF/8tdtHeskr9hMKMdqtA6FV1/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FpEQFJ%2FbtqEd7TRoDF%2F8tdtHeskr9hMKMdqtA6FV1%2Fimg.png&quot; data-filename=&quot;Screenshot_182.png&quot; data-origin-width=&quot;1119&quot; data-origin-height=&quot;572&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;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;b&gt;[시스템] -&lt;/b&gt;&amp;nbsp;&lt;b&gt;[고급 시스템 설정]&lt;/b&gt;으로 들어갑니다.&lt;/p&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-filename=&quot;Screenshot_183.png&quot; data-origin-width=&quot;1120&quot; data-origin-height=&quot;565&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/cGJUNs/btqEd9xl1rf/jnygBhxhEvJQiz0WKliF2k/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/cGJUNs/btqEd9xl1rf/jnygBhxhEvJQiz0WKliF2k/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/cGJUNs/btqEd9xl1rf/jnygBhxhEvJQiz0WKliF2k/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FcGJUNs%2FbtqEd9xl1rf%2FjnygBhxhEvJQiz0WKliF2k%2Fimg.png&quot; data-filename=&quot;Screenshot_183.png&quot; data-origin-width=&quot;1120&quot; data-origin-height=&quot;565&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;/&gt;&lt;/span&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;p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-filename=&quot;Screenshot_185.png&quot; data-origin-width=&quot;476&quot; data-origin-height=&quot;526&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/9QHRw/btqEdj1wZ8U/u9vURpY6JFjVFwvZcEHPf0/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/9QHRw/btqEdj1wZ8U/u9vURpY6JFjVFwvZcEHPf0/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/9QHRw/btqEdj1wZ8U/u9vURpY6JFjVFwvZcEHPf0/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2F9QHRw%2FbtqEdj1wZ8U%2Fu9vURpY6JFjVFwvZcEHPf0%2Fimg.png&quot; data-filename=&quot;Screenshot_185.png&quot; data-origin-width=&quot;476&quot; data-origin-height=&quot;526&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;/&gt;&lt;/span&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;p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-filename=&quot;Screenshot_186.png&quot; data-origin-width=&quot;616&quot; data-origin-height=&quot;585&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/76BrU/btqEbuQHSBs/42WDd9kyu3ux9JdL0iruLk/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/76BrU/btqEbuQHSBs/42WDd9kyu3ux9JdL0iruLk/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/76BrU/btqEbuQHSBs/42WDd9kyu3ux9JdL0iruLk/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2F76BrU%2FbtqEbuQHSBs%2F42WDd9kyu3ux9JdL0iruLk%2Fimg.png&quot; data-filename=&quot;Screenshot_186.png&quot; data-origin-width=&quot;616&quot; data-origin-height=&quot;585&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;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;그 후 아래와 같이 입력을 해줍니다.&lt;/p&gt;
&lt;table style=&quot;border-collapse: collapse; width: 100%; height: 41px;&quot; border=&quot;1&quot;&gt;
&lt;tbody&gt;
&lt;tr style=&quot;height: 21px;&quot;&gt;
&lt;td style=&quot;width: 22.9069%; height: 21px;&quot;&gt;&lt;b&gt;변수 이름&lt;/b&gt;&lt;/td&gt;
&lt;td style=&quot;width: 77.0931%; height: 21px;&quot;&gt;&lt;span style=&quot;color: #333333;&quot;&gt;JAVA_HOME&lt;/span&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;tr style=&quot;height: 20px;&quot;&gt;
&lt;td style=&quot;width: 22.9069%; height: 20px;&quot;&gt;&lt;b&gt;변수 값&lt;/b&gt;&lt;/td&gt;
&lt;td style=&quot;width: 77.0931%; height: 20px;&quot;&gt;&lt;span style=&quot;color: #333333;&quot;&gt;C:\Program Files\openJDK\jdk-14.0.1&lt;/span&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;변수 값은 제 기준으로 적었기 때문에 사용자가 이동시킨 JDK에 위치로 설정해 주시면 됩니다.&lt;/p&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-filename=&quot;Screenshot_187.png&quot; data-origin-width=&quot;648&quot; data-origin-height=&quot;166&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/HzQw3/btqEdjN0kiJ/U1W1CN3NEobPI5tuNJu40K/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/HzQw3/btqEdjN0kiJ/U1W1CN3NEobPI5tuNJu40K/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/HzQw3/btqEdjN0kiJ/U1W1CN3NEobPI5tuNJu40K/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FHzQw3%2FbtqEdjN0kiJ%2FU1W1CN3NEobPI5tuNJu40K%2Fimg.png&quot; data-filename=&quot;Screenshot_187.png&quot; data-origin-width=&quot;648&quot; data-origin-height=&quot;166&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;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;그 후 확인 버튼을 누르면 아래와 같이 &lt;b&gt;[JAVA_HOME]&lt;/b&gt;이 들어간 것을 확인할 수 있습니다.&lt;/p&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-filename=&quot;Screenshot_188.png&quot; data-origin-width=&quot;443&quot; data-origin-height=&quot;201&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/bqCBn3/btqEcUt7Kfx/kK4kgKXLXFSyfbZz9xS8x1/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/bqCBn3/btqEcUt7Kfx/kK4kgKXLXFSyfbZz9xS8x1/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/bqCBn3/btqEcUt7Kfx/kK4kgKXLXFSyfbZz9xS8x1/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FbqCBn3%2FbtqEcUt7Kfx%2FkK4kgKXLXFSyfbZz9xS8x1%2Fimg.png&quot; data-filename=&quot;Screenshot_188.png&quot; data-origin-width=&quot;443&quot; data-origin-height=&quot;201&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;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;자 이제 JDK bin파일의 PATH를 설정해 주도록 하겠습니다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;아래 사진과 같이 &lt;b&gt;[시스템 변수] - [Path]&lt;/b&gt;를 더블클릭 해 줍니다.&lt;/p&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-filename=&quot;Screenshot_189.png&quot; data-origin-width=&quot;613&quot; data-origin-height=&quot;578&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/dAJGnQ/btqEcGiBBle/jhqkX6xDYTjqkqVmZ4MN2k/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/dAJGnQ/btqEcGiBBle/jhqkX6xDYTjqkqVmZ4MN2k/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/dAJGnQ/btqEcGiBBle/jhqkX6xDYTjqkqVmZ4MN2k/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FdAJGnQ%2FbtqEcGiBBle%2FjhqkX6xDYTjqkqVmZ4MN2k%2Fimg.png&quot; data-filename=&quot;Screenshot_189.png&quot; data-origin-width=&quot;613&quot; data-origin-height=&quot;578&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;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;그럼 아래 사진과 같이 환경변수를 편집할 수 있는 창이 뜨는데&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;여기서 &lt;b&gt;[환경 번수 편집] - [새로 만들기]&lt;/b&gt;버튼을 클릭해 줍니다.&lt;/p&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-filename=&quot;Screenshot_190.png&quot; data-origin-width=&quot;524&quot; data-origin-height=&quot;498&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/WR4tx/btqEdjHd14x/W0ju64thYp4U3KgBOXBlpK/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/WR4tx/btqEdjHd14x/W0ju64thYp4U3KgBOXBlpK/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/WR4tx/btqEdjHd14x/W0ju64thYp4U3KgBOXBlpK/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FWR4tx%2FbtqEdjHd14x%2FW0ju64thYp4U3KgBOXBlpK%2Fimg.png&quot; data-filename=&quot;Screenshot_190.png&quot; data-origin-width=&quot;524&quot; data-origin-height=&quot;498&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;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;그 후 &lt;b&gt;[%JAVA_HOME%\bin]&lt;/b&gt; 이라고 입력해 줍니다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;참고로 &lt;b&gt;[%JAVA_HOME%]&lt;/b&gt;는 우리가 시스템 변수에서 설정해 놓은 jdk 경로 변수를 사용하겠다는 의미 입니다.&lt;/p&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-filename=&quot;Screenshot_194.png&quot; data-origin-width=&quot;540&quot; data-origin-height=&quot;500&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/B3qIv/btqEaZwR7WL/97PdhgbAvsYRXfl9L08zK0/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/B3qIv/btqEaZwR7WL/97PdhgbAvsYRXfl9L08zK0/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/B3qIv/btqEaZwR7WL/97PdhgbAvsYRXfl9L08zK0/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FB3qIv%2FbtqEaZwR7WL%2F97PdhgbAvsYRXfl9L08zK0%2Fimg.png&quot; data-filename=&quot;Screenshot_194.png&quot; data-origin-width=&quot;540&quot; data-origin-height=&quot;500&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;/&gt;&lt;/span&gt;&lt;/figure&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;b&gt;[확인]&lt;/b&gt; 버튼을 클릭해 줍니다.&lt;/p&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-filename=&quot;Screenshot_192.png&quot; data-origin-width=&quot;979&quot; data-origin-height=&quot;579&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/SCvK2/btqEbbDOILc/w9WFqEmLvrTWo4JaHZQqW1/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/SCvK2/btqEbbDOILc/w9WFqEmLvrTWo4JaHZQqW1/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/SCvK2/btqEbbDOILc/w9WFqEmLvrTWo4JaHZQqW1/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FSCvK2%2FbtqEbbDOILc%2Fw9WFqEmLvrTWo4JaHZQqW1%2Fimg.png&quot; data-filename=&quot;Screenshot_192.png&quot; data-origin-width=&quot;979&quot; data-origin-height=&quot;579&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;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;자 이렇게 해서 우리는 &lt;b&gt;JDK 환경변수 작업&lt;/b&gt;까지 완료 하였습니다.&lt;/p&gt;
&lt;hr contenteditable=&quot;false&quot; data-ke-type=&quot;horizontalRule&quot; data-ke-style=&quot;style1&quot; /&gt;
&lt;h2 data-ke-size=&quot;size26&quot;&gt;&lt;i&gt;&lt;b&gt;JDK 실행해 보기&lt;/b&gt;&lt;/i&gt;&lt;/h2&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;이제 JDK가 잘 실행 되어지는지 확인해 볼까요??&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;b&gt;[Windows 검색창]&lt;/b&gt;에 &lt;b&gt;[CMD]&lt;/b&gt;라고 입력한 후 명령 프롬프트를 실행시킵니다.&lt;/p&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-filename=&quot;Screenshot_193.png&quot; data-origin-width=&quot;793&quot; data-origin-height=&quot;683&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/cKNa8W/btqEdx6ldky/yJawBNyeHj5aXePaHjXrq0/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/cKNa8W/btqEdx6ldky/yJawBNyeHj5aXePaHjXrq0/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/cKNa8W/btqEdx6ldky/yJawBNyeHj5aXePaHjXrq0/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FcKNa8W%2FbtqEdx6ldky%2FyJawBNyeHj5aXePaHjXrq0%2Fimg.png&quot; data-filename=&quot;Screenshot_193.png&quot; data-origin-width=&quot;793&quot; data-origin-height=&quot;683&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;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;그 후 아래 커맨드를 입력해 주시면 정상적으로 입력해 주시면&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;잘 동작하는것을 확인하실수 있습니다.&lt;/p&gt;
&lt;pre id=&quot;code_1589622443569&quot; class=&quot;python&quot; data-ke-language=&quot;python&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;# java 버전 확인
java -version

# java compiler 버전 확인
javac -version&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-filename=&quot;Screenshot_195.png&quot; data-origin-width=&quot;609&quot; data-origin-height=&quot;286&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/bU3v4S/btqEbRx8KOW/CokK5CXRLDpkjAkx3A9AH1/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/bU3v4S/btqEbRx8KOW/CokK5CXRLDpkjAkx3A9AH1/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/bU3v4S/btqEbRx8KOW/CokK5CXRLDpkjAkx3A9AH1/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FbU3v4S%2FbtqEbRx8KOW%2FCokK5CXRLDpkjAkx3A9AH1%2Fimg.png&quot; data-filename=&quot;Screenshot_195.png&quot; data-origin-width=&quot;609&quot; data-origin-height=&quot;286&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;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;만약 java를 찾을수 없다는 오류가 뜨면 위 과정을 정상적으로 하지 않았다는 의미이므로&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;빼먹은건 없는지 잘 확인해 보시기 바랍니다.&lt;/p&gt;
&lt;hr contenteditable=&quot;false&quot; data-ke-type=&quot;horizontalRule&quot; data-ke-style=&quot;style3&quot; /&gt;
&lt;h2 data-ke-size=&quot;size26&quot;&gt;&lt;i&gt;&lt;b&gt;&lt;span&gt;마무리&lt;/span&gt;&lt;/b&gt;&lt;/i&gt;&lt;/h2&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span&gt;자 이것으로 openJDK 설치 방법을 알아보았습니다.&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;/p&gt;</description>
      <category>프로그래밍 언어/안드로이드</category>
      <category>openjdk</category>
      <category>openjdk14</category>
      <category>설치</category>
      <category>설치법</category>
      <author>방현준</author>
      <guid isPermaLink="true">https://noogoonaa.tistory.com/66</guid>
      <comments>https://noogoonaa.tistory.com/66#entry66comment</comments>
      <pubDate>Sat, 16 May 2020 18:45:13 +0900</pubDate>
    </item>
  </channel>
</rss>