<?xml version="1.0" encoding="UTF-8"?>
<rss version="2.0">
  <channel>
    <title>야금야금 코딩 기록</title>
    <link>https://nagneo.tistory.com/</link>
    <description>퇴근하고 코딩하는 일상다반사.</description>
    <language>ko</language>
    <pubDate>Wed, 8 Apr 2026 19:22:33 +0900</pubDate>
    <generator>TISTORY</generator>
    <ttl>100</ttl>
    <managingEditor>Nagneo</managingEditor>
    <image>
      <title>야금야금 코딩 기록</title>
      <url>https://tistory1.daumcdn.net/tistory/4971220/attach/9368c0ff6ca8476cbed9d0fd10136951</url>
      <link>https://nagneo.tistory.com</link>
    </image>
    <item>
      <title>[IT Lifehack] Bitbucket PR을 Slack에서 알림받기</title>
      <link>https://nagneo.tistory.com/45</link>
      <description>&lt;p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-filename=&quot;slack_logo.png&quot; data-origin-width=&quot;1272&quot; data-origin-height=&quot;776&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/kPfVm/btsHifJh0HK/aHDc9ovmgnRWR3NbK7OGy1/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/kPfVm/btsHifJh0HK/aHDc9ovmgnRWR3NbK7OGy1/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/kPfVm/btsHifJh0HK/aHDc9ovmgnRWR3NbK7OGy1/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FkPfVm%2FbtsHifJh0HK%2FaHDc9ovmgnRWR3NbK7OGy1%2Fimg.png&quot; onerror=&quot;this.onerror=null; this.src='//t1.daumcdn.net/tistory_admin/static/images/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;387&quot; data-filename=&quot;slack_logo.png&quot; data-origin-width=&quot;1272&quot; data-origin-height=&quot;776&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;PR 확인 하셨을까요?&lt;/h3&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;회사에 출근하면 하루도 빼먹지 않고 하는 것 같은 말이 있다면, 그것은 바로 'PR 확인 부탁드립니다~ '인것 같다.&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;하루는 출근하자 마자 옆자리 동료가 '혹시 제 PR리뷰 확인하셨을까요?' 라고 했는데, 내가 이미 리뷰한 사항이었다.&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;pr-comment.png&quot; data-origin-width=&quot;1432&quot; data-origin-height=&quot;936&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/b6jSd9/btsHiKvu2jA/EZ9D2dUjLwF4wU7PcALZW0/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/b6jSd9/btsHiKvu2jA/EZ9D2dUjLwF4wU7PcALZW0/img.png&quot; data-alt=&quot;하루에도 여러번 반복하는 말&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/b6jSd9/btsHiKvu2jA/EZ9D2dUjLwF4wU7PcALZW0/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2Fb6jSd9%2FbtsHiKvu2jA%2FEZ9D2dUjLwF4wU7PcALZW0%2Fimg.png&quot; onerror=&quot;this.onerror=null; this.src='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png'; this.srcset='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png';&quot; loading=&quot;lazy&quot; width=&quot;595&quot; height=&quot;389&quot; data-filename=&quot;pr-comment.png&quot; data-origin-width=&quot;1432&quot; data-origin-height=&quot;936&quot;/&gt;&lt;/span&gt;&lt;figcaption&gt;하루에도 여러번 반복하는 말&lt;/figcaption&gt;
&lt;/figure&gt;
&lt;/p&gt;
&lt;h3 data-ke-size=&quot;size23&quot;&gt;PR 리뷰, 댓글,&amp;nbsp; 승인자동으로 알림 받고 싶다.&lt;/h3&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;기존에도, 이메일로 bitbucket활동에 관해 메일을 받고 있기는 했지만, 사실상 메일은 목록만 봐서는 직관적이지 못하고 여러개의 알림메일이 혼재되어 있어 회사에서는 메신저로 slack을 사용하고 있었기 때문에, 당연히 관련 플러그인이 있을거라고 생각하고 검색해봤다. 결론적으로는 Bitbucket에서 일어나는 여러가지 활동을 Slack에서 구독 가능하고 알림 받을 수 있다. 이를 통해 협업이 한층 더 편해졌다. 우선은 FE유닛에서 사용해보고 조만간 개발팀에도 공유해야겠다.&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;Slack에서 Bitbucket Cloud 연동하기&lt;/h3&gt;
&lt;h4 data-ke-size=&quot;size20&quot;&gt;1. Slack에서 왼쪽 네이게이션 하단 &amp;gt; 앱 추가 &amp;gt; Bitbucket 검색 &amp;gt; Bitbucket Cloud&lt;span&gt; 선택&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;slack_app.png&quot; data-origin-width=&quot;2052&quot; data-origin-height=&quot;582&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/bpUPtX/btsHiEaYtJj/xpKOigImHI2N1ZdFimajw1/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/bpUPtX/btsHiEaYtJj/xpKOigImHI2N1ZdFimajw1/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/bpUPtX/btsHiEaYtJj/xpKOigImHI2N1ZdFimajw1/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FbpUPtX%2FbtsHiEaYtJj%2FxpKOigImHI2N1ZdFimajw1%2Fimg.png&quot; onerror=&quot;this.onerror=null; this.src='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png'; this.srcset='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png';&quot; loading=&quot;lazy&quot; width=&quot;2052&quot; height=&quot;582&quot; data-filename=&quot;slack_app.png&quot; data-origin-width=&quot;2052&quot; data-origin-height=&quot;582&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;h4 data-ke-size=&quot;size20&quot;&gt;2. /Bitbucket connect &amp;lt;repository-url&amp;gt; 명령어로 Bitbucket 저장소 연결하기&lt;/h4&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;이 때, 내가 해당 계정의 admin 권한이 있어야만 해당 명령어가 정확하게 동작한다.&lt;/p&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-origin-width=&quot;1806&quot; data-origin-height=&quot;762&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/tuoF7/btsHi5e4o2z/imo6owmEvQLGqQ4voKkB7k/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/tuoF7/btsHi5e4o2z/imo6owmEvQLGqQ4voKkB7k/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/tuoF7/btsHi5e4o2z/imo6owmEvQLGqQ4voKkB7k/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FtuoF7%2FbtsHi5e4o2z%2Fimo6owmEvQLGqQ4voKkB7k%2Fimg.png&quot; onerror=&quot;this.onerror=null; this.src='//t1.daumcdn.net/tistory_admin/static/images/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;762&quot; data-origin-width=&quot;1806&quot; data-origin-height=&quot;762&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;h4 data-ke-size=&quot;size20&quot;&gt;3. Slack Notification 관련 설정 하기&lt;/h4&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;제대로 명령어를 쳤다면, 새로운 브라우저 창이 열리고 아래와 같이 slack 알림을 설정 할 수 있다. 특정 채널을 지정하고 add버튼을 누르면 아래와 같이 설정 창이 뜬다.&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;PR 생성, 승인, 거절, 병합, 댓글, 멘션등 다양한게 받을 수 있고 특정 브랜치 관련한 알림도 받을 수 있다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;우리팀은 아래와 같은 알림만 받아보기로 설정하였다. &lt;s&gt;알림 지금도 너무 많아 최대한 줄여버려&lt;/s&gt;&lt;/p&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-origin-width=&quot;719&quot; data-origin-height=&quot;380&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/bGoGIS/btsHkLz9Oa6/pnKvJgXcKG64knzWAvBxFK/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/bGoGIS/btsHkLz9Oa6/pnKvJgXcKG64knzWAvBxFK/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/bGoGIS/btsHkLz9Oa6/pnKvJgXcKG64knzWAvBxFK/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FbGoGIS%2FbtsHkLz9Oa6%2FpnKvJgXcKG64knzWAvBxFK%2Fimg.png&quot; onerror=&quot;this.onerror=null; this.src='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png'; this.srcset='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png';&quot; loading=&quot;lazy&quot; width=&quot;719&quot; height=&quot;380&quot; data-origin-width=&quot;719&quot; data-origin-height=&quot;380&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;/p&gt;
&lt;h4 data-ke-size=&quot;size20&quot;&gt;4. 연동 결과 확인하기&lt;/h4&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;아래와 같이 #bitbucket_notify_fe 채널에 설정한 알림들이 멘션기능과 함께 잘 온다. &lt;s&gt;근데 멘션기능은 좀 되다 안되다 하는듯? 역시 깃가야하나..&amp;nbsp;&amp;nbsp;&lt;/s&gt;이상 PR 독촉 쉽게 하기 끝&lt;/p&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-filename=&quot;스크린샷 2024-05-09 오후 7.58.59.png&quot; data-origin-width=&quot;1816&quot; data-origin-height=&quot;1424&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/dYHZTE/btsHipE8dCI/ugYfejmIj1jRCfQqCWAHv0/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/dYHZTE/btsHipE8dCI/ugYfejmIj1jRCfQqCWAHv0/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/dYHZTE/btsHipE8dCI/ugYfejmIj1jRCfQqCWAHv0/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FdYHZTE%2FbtsHipE8dCI%2FugYfejmIj1jRCfQqCWAHv0%2Fimg.png&quot; onerror=&quot;this.onerror=null; this.src='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png'; this.srcset='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png';&quot; loading=&quot;lazy&quot; width=&quot;1816&quot; height=&quot;1424&quot; data-filename=&quot;스크린샷 2024-05-09 오후 7.58.59.png&quot; data-origin-width=&quot;1816&quot; data-origin-height=&quot;1424&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;/p&gt;</description>
      <category>Computer Engineering/Common</category>
      <category>Bitbucket</category>
      <category>bitbucket cloud</category>
      <category>pr review</category>
      <category>pr 독촉</category>
      <category>slack</category>
      <category>slack 앱 연동</category>
      <author>Nagneo</author>
      <guid isPermaLink="true">https://nagneo.tistory.com/45</guid>
      <comments>https://nagneo.tistory.com/45#entry45comment</comments>
      <pubDate>Thu, 9 May 2024 20:05:52 +0900</pubDate>
    </item>
    <item>
      <title>Lighthouse 품질 분석하기 - 개선 사례 (1) (feat. SEO)</title>
      <link>https://nagneo.tistory.com/42</link>
      <description>&lt;p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-filename=&quot;lighthouse.webp&quot; data-origin-width=&quot;1600&quot; data-origin-height=&quot;1098&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/emBnCv/btsHarQk30b/5KpACb1mVPjLLDPCgskyHK/img.webp&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/emBnCv/btsHarQk30b/5KpACb1mVPjLLDPCgskyHK/img.webp&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/emBnCv/btsHarQk30b/5KpACb1mVPjLLDPCgskyHK/img.webp&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FemBnCv%2FbtsHarQk30b%2F5KpACb1mVPjLLDPCgskyHK%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;1600&quot; height=&quot;1098&quot; data-filename=&quot;lighthouse.webp&quot; data-origin-width=&quot;1600&quot; data-origin-height=&quot;1098&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;/p&gt;
&lt;blockquote data-ke-style=&quot;style1&quot;&gt;
&lt;h4 data-ke-size=&quot;size20&quot;&gt;There are no solutions: there are only trade-offs.&lt;/h4&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;font-family: 'Noto Serif KR';&quot;&gt;해법이라는 것은 없다. 오직 절충만이 있을 뿐이다.&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;/span&gt;&lt;/p&gt;
&lt;/blockquote&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp; &amp;nbsp; 프로그램의 성능은 비즈니스 요구사항 충족이라는 우선적인 과제에 늘 밀리기 마련이지만, 개발자에게는 성능을 관리하고 개선 시켜야할 역할과 책임이 있다고 생각한다. 성능을 개선하기 위해서는 먼저 성능을 측정해야 한다. 그래야만 성능이 개선 되었을 때, 어느정도 개선되었는지 그 수치를 정확하게 측정할 수 있다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp; &amp;nbsp; 오늘은 Lighthouse에서 웹페이지의 품질을 분석하고 그 분석 결과를 통해 간단한 개선 위주로 정리해보려고 한다. 회사에서 일본 웹 서비스의 SEO 개선을 목표로 하고 있어, 점진적으로 개선을 시도할 예정이다. (&lt;s&gt;SEO를 핑계로 프로그램 성능 왕왕 업그레이드 해보자구.!!!&lt;/s&gt;)&lt;/p&gt;
&lt;h2 data-ke-size=&quot;size26&quot;&gt;Lighthouse 소개&lt;/h2&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;Lighthouse는 크롬에서 제공하는 웹페이지의 품질을 개선하기 위한 오픈소스 자동화 도구이다. 성능을 개선한다? 그럼 개발자도구의 Performance 탭과 더불어 가장 먼저 기본적으로 사용해볼 수 있는 도구 이다. 크게 다섯가지 항목에 대해서 검사(audit)를 진행한다.&lt;/p&gt;
&lt;ul style=&quot;list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li&gt;Performance: 성능&lt;/li&gt;
&lt;li&gt;Accessibility: 접근성&lt;/li&gt;
&lt;li&gt;Best Practices:&lt;/li&gt;
&lt;li&gt;SEO&lt;/li&gt;
&lt;li&gt;그리고 Progressive Web App&lt;/li&gt;
&lt;/ul&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;검사를 진행하는 방법에는 크롬 확장도구를 이용하는 방법, 개발자 도구에서 이용하는 방법, CLI에서 사용하는 방법, 검사 사이트를 이용하는 방법 등등 여러가지가 있는데, 이 포스팅에서는 개발자도구를 이용해서 분석하는 방법을 설명하려고 한다.&lt;/p&gt;
&lt;h2 data-ke-size=&quot;size26&quot;&gt;분석 결과 및 문제 해결&lt;/h2&gt;
&lt;h3 data-ke-size=&quot;size23&quot;&gt;Performance&lt;/h3&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;성능 측정 값은 측정 할때마다 변할수 있는데 이는 인터넷 트래픽, 컴퓨터 사양 등의 영향을 받기 떄문이다. 5가지 항목정도 있지만, 그중에서 나는 LCP 시간 감소와 Render-Blocking 시간 감소 두가지에서 개선을 진행하였다.&amp;nbsp;&lt;/p&gt;
&lt;h4 data-ke-size=&quot;size20&quot;&gt;Largest Contentful Paint Element: 콘텐츠가 포함된 최대&amp;nbsp; 페인트&lt;/h4&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;background-color: #fcfcfc; color: #666666; text-align: left;&quot;&gt;사용자가 처음 페이지로 이동한 시점을 기준으로 가장 큰 이미지 또는 텍스트 블록의 렌더링 시간. GOOD의 기준은 2.5초, POOR의 기준은 4.0초이다.&lt;/span&gt;&lt;/p&gt;
&lt;blockquote data-ke-style=&quot;style3&quot;&gt;
&lt;p data-ke-size=&quot;size18&quot;&gt;&lt;b&gt;⛳️ 용어 정리 하고 가자&lt;br /&gt;&lt;br /&gt;코어 웹 바이탈&lt;br /&gt;&lt;/b&gt;좋은 사용자 경험을 제공하기 휘애 어떤 점을 개선해야 하는지에 대한 웹 성능 지표이다. 크게 LCP, FID, CLS가 있다.&lt;br /&gt;&lt;b&gt;&lt;br /&gt;&lt;/b&gt;&lt;b&gt;Cf) FCP(&lt;/b&gt;&lt;b&gt;First Contentful Paint)&lt;br /&gt;&lt;/b&gt;사용가가 처음 페이지로 이동한 시점을 기준으로 우수한 사용자 환경을 제공하려면 FCP가 1.8초 이하여야 한다.&lt;/p&gt;
&lt;/blockquote&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-filename=&quot;lcp.png&quot; data-origin-width=&quot;1658&quot; data-origin-height=&quot;1020&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/bZB77X/btsHbhTKusQ/sjm8V3VI2txEkXFNCoRKK0/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/bZB77X/btsHbhTKusQ/sjm8V3VI2txEkXFNCoRKK0/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/bZB77X/btsHbhTKusQ/sjm8V3VI2txEkXFNCoRKK0/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FbZB77X%2FbtsHbhTKusQ%2Fsjm8V3VI2txEkXFNCoRKK0%2Fimg.png&quot; onerror=&quot;this.onerror=null; this.src='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png'; this.srcset='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png';&quot; loading=&quot;lazy&quot; width=&quot;636&quot; height=&quot;391&quot; data-filename=&quot;lcp.png&quot; data-origin-width=&quot;1658&quot; data-origin-height=&quot;1020&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;일본 웹 서비스의 경우 최초 사이드 진입시 APP CTA버튼이 있었는데, 해당 이미지를 webp로 바꾸고(Render Delay), &amp;lt;img&amp;gt; 태그에 fetchpriority=&quot;high&quot;로 attribute를 삽입하였다.&lt;/p&gt;
&lt;h4 data-ke-size=&quot;size20&quot;&gt;Eliminate render-blocking resources&lt;/h4&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;기존에는 Google Font를 동기적으로 블러와 이미지를 최적화 하였다.&amp;nbsp; &lt;a href=&quot;https://web.dev/learn/performance/optimize-web-fonts?hl=ko&quot; target=&quot;_blank&quot; rel=&quot;noopener&quot;&gt;web.dev&lt;/a&gt;에서는 폰트를 인라인 @font-face로 선언하여 처리하기를 권장하고 있는것 같았자만, 가장 적은 변경으로 최대 효과를 내고자 했던지만 일단은 우선적으로 link태그에 요소를 삽입하여 font를 비동기적으로 불러와 오류를 해결하였다.&lt;/p&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-filename=&quot;render-blockin.png&quot; data-origin-width=&quot;1606&quot; data-origin-height=&quot;868&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/bw3Wx6/btsHaNZWchU/xb41tzKaeAclJIvPYQlRm1/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/bw3Wx6/btsHaNZWchU/xb41tzKaeAclJIvPYQlRm1/img.png&quot; data-alt=&quot;구글 폰트로 인한 render-blocking&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/bw3Wx6/btsHaNZWchU/xb41tzKaeAclJIvPYQlRm1/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2Fbw3Wx6%2FbtsHaNZWchU%2Fxb41tzKaeAclJIvPYQlRm1%2Fimg.png&quot; onerror=&quot;this.onerror=null; this.src='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png'; this.srcset='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png';&quot; loading=&quot;lazy&quot; width=&quot;662&quot; height=&quot;358&quot; data-filename=&quot;render-blockin.png&quot; data-origin-width=&quot;1606&quot; data-origin-height=&quot;868&quot;/&gt;&lt;/span&gt;&lt;figcaption&gt;구글 폰트로 인한 render-blocking&lt;/figcaption&gt;
&lt;/figure&gt;
&lt;/p&gt;
&lt;pre id=&quot;code_1714735617993&quot; class=&quot;html xml&quot; data-ke-language=&quot;html&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;// _document.js
&amp;lt;link rel=&quot;preconnect&quot; href=&quot;https://fonts.gstatic.com&quot; crossorigin&amp;gt;

&amp;lt;link
  href=&quot;https://fonts.googleapis.com/css2?family=Noto+Sans+JP:wght@300;400;700&amp;amp;display=swap&quot;
  rel=&quot;stylesheet&quot;
  media=&quot;print&quot;
  onload=&quot;this.onload=null;this.removeAttribute('media');&quot; fetchpriority=&quot;high&quot;
/&amp;gt;
&amp;lt;noscript&amp;gt;
  &amp;lt;link
    href=&quot;https://fonts.googleapis.com/css2?family=Noto+Sans+JP:wght@300;400;700&amp;amp;display=swap&quot;
    rel=&quot;stylesheet&quot;
  /&amp;gt;
&amp;lt;/noscript&amp;gt;&lt;/code&gt;&lt;/pre&gt;
&lt;h3 data-ke-size=&quot;size23&quot;&gt;Accessibility&lt;/h3&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;접근성 검사의 해결 방법은 비교적 간단하다.&amp;nbsp;&lt;/p&gt;
&lt;h4 data-ke-size=&quot;size20&quot;&gt;[user-scalable=&quot;no&quot;] is used in the &amp;lt;meta name=&quot;viewport&quot;&amp;gt;...&lt;/h4&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;웹 페이지의 확대는 기본적으로 허용되어야 하는데 그 이유는 부분 시력, 저시력의 사용자가 웹의 텍스트를 더 쉽게 읽을수 있도록 하기 위해서 이다. 단, 경험적으로 봤을때 해당 옵션을 true로 했을 때 일부 모바일 기기에서 (특히 iOS) 의도하지 않은 scale-up으로 인해(예컨데, &amp;lt;input&amp;gt; field focusing) 문제가 발생하지는 않을지 고려가 필요하다. 가중치는 10점이다.&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;952&quot; data-origin-height=&quot;166&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/bzbR4w/btsHcafazqG/a1ktkxmhwFoiAEtTQDnAR1/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/bzbR4w/btsHcafazqG/a1ktkxmhwFoiAEtTQDnAR1/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/bzbR4w/btsHcafazqG/a1ktkxmhwFoiAEtTQDnAR1/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FbzbR4w%2FbtsHcafazqG%2Fa1ktkxmhwFoiAEtTQDnAR1%2Fimg.png&quot; onerror=&quot;this.onerror=null; this.src='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png'; this.srcset='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png';&quot; loading=&quot;lazy&quot; width=&quot;636&quot; height=&quot;111&quot; data-origin-width=&quot;952&quot; data-origin-height=&quot;166&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-filename=&quot;scale.png&quot; data-origin-width=&quot;1660&quot; data-origin-height=&quot;322&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/buruQ7/btsHbSFRetZ/xMmHdopCCSQ91WJKvEw5xK/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/buruQ7/btsHbSFRetZ/xMmHdopCCSQ91WJKvEw5xK/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/buruQ7/btsHbSFRetZ/xMmHdopCCSQ91WJKvEw5xK/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FburuQ7%2FbtsHbSFRetZ%2FxMmHdopCCSQ91WJKvEw5xK%2Fimg.png&quot; onerror=&quot;this.onerror=null; this.src='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png'; this.srcset='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png';&quot; loading=&quot;lazy&quot; width=&quot;1660&quot; height=&quot;322&quot; data-filename=&quot;scale.png&quot; data-origin-width=&quot;1660&quot; data-origin-height=&quot;322&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;/p&gt;
&lt;h4 data-ke-size=&quot;size20&quot;&gt;&amp;lt;html&amp;gt; element does not have a [lang] attribute&lt;/h4&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;Screen Leader와 같은 기능을 사용할 때 해당 속성을 기본으로 페이지를 읽어준다. 따라서 lang 속성에 유효한 값이 있어야 하낟.&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;956&quot; data-origin-height=&quot;294&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/Z1mWx/btsHb5dWlH2/AvOks9LbJ1pRcGpAkkuPIk/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/Z1mWx/btsHb5dWlH2/AvOks9LbJ1pRcGpAkkuPIk/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/Z1mWx/btsHb5dWlH2/AvOks9LbJ1pRcGpAkkuPIk/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FZ1mWx%2FbtsHb5dWlH2%2FAvOks9LbJ1pRcGpAkkuPIk%2Fimg.png&quot; onerror=&quot;this.onerror=null; this.src='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png'; this.srcset='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png';&quot; loading=&quot;lazy&quot; width=&quot;658&quot; height=&quot;294&quot; data-origin-width=&quot;956&quot; data-origin-height=&quot;294&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-filename=&quot;lang.png&quot; data-origin-width=&quot;1642&quot; data-origin-height=&quot;706&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/oC7p8/btsHa2vHBdi/YgDkAK2V4mkKzyM2dIAHj1/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/oC7p8/btsHa2vHBdi/YgDkAK2V4mkKzyM2dIAHj1/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/oC7p8/btsHa2vHBdi/YgDkAK2V4mkKzyM2dIAHj1/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FoC7p8%2FbtsHa2vHBdi%2FYgDkAK2V4mkKzyM2dIAHj1%2Fimg.png&quot; onerror=&quot;this.onerror=null; this.src='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png'; this.srcset='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png';&quot; loading=&quot;lazy&quot; width=&quot;1642&quot; height=&quot;706&quot; data-filename=&quot;lang.png&quot; data-origin-width=&quot;1642&quot; data-origin-height=&quot;706&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;/p&gt;
&lt;h3 data-ke-size=&quot;size23&quot;&gt;SEO&lt;/h3&gt;
&lt;h4 data-ke-size=&quot;size20&quot;&gt;Image elements do not have [alt] attributes&lt;/h4&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;SEO는 정말이지 alt를 엄청나게 중요하게 생각하는 거 같다. 전역 검색을 통해 모든 alt태그에 값을 추가해준다.&lt;/p&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-filename=&quot;alt.png&quot; data-origin-width=&quot;844&quot; data-origin-height=&quot;317&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/EflvL/btsHbkJFLxH/VjWHagMFpSg1cU9oTJmXXk/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/EflvL/btsHbkJFLxH/VjWHagMFpSg1cU9oTJmXXk/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/EflvL/btsHbkJFLxH/VjWHagMFpSg1cU9oTJmXXk/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FEflvL%2FbtsHbkJFLxH%2FVjWHagMFpSg1cU9oTJmXXk%2Fimg.png&quot; onerror=&quot;this.onerror=null; this.src='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png'; this.srcset='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png';&quot; loading=&quot;lazy&quot; width=&quot;844&quot; height=&quot;317&quot; data-filename=&quot;alt.png&quot; data-origin-width=&quot;844&quot; data-origin-height=&quot;317&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;개선 결과를 간략하게 표시하면 다음과 같다. 다음에는 사용하지 않는 스크립트와 스타일 시트를 최적화 하는 방향으로 개선을 시도해보고자 한다.&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 style=&quot;color: #333333;&quot;&gt;Performance: 51 -&amp;gt; 69 (35% 향상)&lt;/li&gt;
&lt;li style=&quot;color: #333333;&quot;&gt;Accessibility: 51 -&amp;gt; 91 (78% 향상)&lt;/li&gt;
&lt;li style=&quot;color: #333333;&quot;&gt;SEO: 92 -&amp;gt; 100 (8% 향상)&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&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-filename=&quot;lighthouse.png&quot; data-origin-width=&quot;1913&quot; data-origin-height=&quot;1017&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/R5I6m/btsHbgHgoiU/pSrpQMiGOSVoBKwmZ0tYW0/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/R5I6m/btsHbgHgoiU/pSrpQMiGOSVoBKwmZ0tYW0/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/R5I6m/btsHbgHgoiU/pSrpQMiGOSVoBKwmZ0tYW0/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FR5I6m%2FbtsHbgHgoiU%2FpSrpQMiGOSVoBKwmZ0tYW0%2Fimg.png&quot; onerror=&quot;this.onerror=null; this.src='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png'; this.srcset='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png';&quot; loading=&quot;lazy&quot; width=&quot;1913&quot; height=&quot;1017&quot; data-filename=&quot;lighthouse.png&quot; data-origin-width=&quot;1913&quot; data-origin-height=&quot;1017&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;h2 data-ke-size=&quot;size26&quot;&gt;Reference&lt;/h2&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;a href=&quot;https://developer.chrome.com/docs/lighthouse/overview&quot;&gt;라이트하우스 Chrome For Developers&lt;/a&gt;&lt;/p&gt;
&lt;figure id=&quot;og_1714734160667&quot; contenteditable=&quot;false&quot; data-ke-type=&quot;opengraph&quot; data-ke-align=&quot;alignCenter&quot; data-og-type=&quot;website&quot; data-og-title=&quot;개요 &amp;nbsp;|&amp;nbsp; Lighthouse &amp;nbsp;|&amp;nbsp; Chrome for Developers&quot; data-og-description=&quot;Lighthouse를 설정하여 웹 앱을 감사하는 방법을 알아봅니다.&quot; data-og-host=&quot;developer.chrome.com&quot; data-og-source-url=&quot;https://developer.chrome.com/docs/lighthouse/overview&quot; data-og-url=&quot;https://developer.chrome.com/docs/lighthouse/overview?hl=ko&quot; data-og-image=&quot;https://scrap.kakaocdn.net/dn/bRslO9/hyVZmFvBmx/YxNvjOKRwbreOcKAtVdm3k/img.png?width=2024&amp;amp;height=1982&amp;amp;face=0_0_2024_1982,https://scrap.kakaocdn.net/dn/bcOI4O/hyVZoJ6bB6/viJRFga0dUKF2ZDjJsRJ71/img.png?width=2024&amp;amp;height=1982&amp;amp;face=0_0_2024_1982,https://scrap.kakaocdn.net/dn/sqwd1/hyVZsyXce5/ax2YkmHKOKKctLrvfgrZIK/img.png?width=2024&amp;amp;height=1662&amp;amp;face=0_0_2024_1662&quot;&gt;&lt;a href=&quot;https://developer.chrome.com/docs/lighthouse/overview&quot; target=&quot;_blank&quot; rel=&quot;noopener&quot; data-source-url=&quot;https://developer.chrome.com/docs/lighthouse/overview&quot;&gt;
&lt;div class=&quot;og-image&quot; style=&quot;background-image: url('https://scrap.kakaocdn.net/dn/bRslO9/hyVZmFvBmx/YxNvjOKRwbreOcKAtVdm3k/img.png?width=2024&amp;amp;height=1982&amp;amp;face=0_0_2024_1982,https://scrap.kakaocdn.net/dn/bcOI4O/hyVZoJ6bB6/viJRFga0dUKF2ZDjJsRJ71/img.png?width=2024&amp;amp;height=1982&amp;amp;face=0_0_2024_1982,https://scrap.kakaocdn.net/dn/sqwd1/hyVZsyXce5/ax2YkmHKOKKctLrvfgrZIK/img.png?width=2024&amp;amp;height=1662&amp;amp;face=0_0_2024_1662');&quot;&gt;&amp;nbsp;&lt;/div&gt;
&lt;div class=&quot;og-text&quot;&gt;
&lt;p class=&quot;og-title&quot; data-ke-size=&quot;size16&quot;&gt;개요 &amp;nbsp;|&amp;nbsp; Lighthouse &amp;nbsp;|&amp;nbsp; Chrome for Developers&lt;/p&gt;
&lt;p class=&quot;og-desc&quot; data-ke-size=&quot;size16&quot;&gt;Lighthouse를 설정하여 웹 앱을 감사하는 방법을 알아봅니다.&lt;/p&gt;
&lt;p class=&quot;og-host&quot; data-ke-size=&quot;size16&quot;&gt;developer.chrome.com&lt;/p&gt;
&lt;/div&gt;
&lt;/a&gt;&lt;/figure&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;a href=&quot;https://pagespeedchecklist.com/asynchronous-google-fonts&quot; target=&quot;_blank&quot; rel=&quot;noopener&quot;&gt;Asynchronouse Google Fonts&lt;/a&gt;&lt;/p&gt;
&lt;figure id=&quot;og_1714735711015&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;Asynchronous Google Fonts For Page Speed&quot; data-og-description=&quot;Eliminate the render blocking effect of Google Fonts and optimize for page speed by loading font CSS asynchronously and adding a preconnect resource hint. Hold On! Before we get into the finer points of optimizing Google Fonts, don't forget to first apply &quot; data-og-host=&quot;pagespeedchecklist.com&quot; data-og-source-url=&quot;https://pagespeedchecklist.com/asynchronous-google-fonts&quot; data-og-url=&quot;https://pagespeedchecklist.com/asynchronous-google-fonts&quot; data-og-image=&quot;&quot;&gt;&lt;a href=&quot;https://pagespeedchecklist.com/asynchronous-google-fonts&quot; target=&quot;_blank&quot; rel=&quot;noopener&quot; data-source-url=&quot;https://pagespeedchecklist.com/asynchronous-google-fonts&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;Asynchronous Google Fonts For Page Speed&lt;/p&gt;
&lt;p class=&quot;og-desc&quot; data-ke-size=&quot;size16&quot;&gt;Eliminate the render blocking effect of Google Fonts and optimize for page speed by loading font CSS asynchronously and adding a preconnect resource hint. Hold On! Before we get into the finer points of optimizing Google Fonts, don't forget to first apply&lt;/p&gt;
&lt;p class=&quot;og-host&quot; data-ke-size=&quot;size16&quot;&gt;pagespeedchecklist.com&lt;/p&gt;
&lt;/div&gt;
&lt;/a&gt;&lt;/figure&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;</description>
      <category>Computer Engineering/Web</category>
      <author>Nagneo</author>
      <guid isPermaLink="true">https://nagneo.tistory.com/42</guid>
      <comments>https://nagneo.tistory.com/42#entry42comment</comments>
      <pubDate>Fri, 3 May 2024 20:44:25 +0900</pubDate>
    </item>
    <item>
      <title>CORS(Cross-Origin Resource Sharing)와 CORS 오류</title>
      <link>https://nagneo.tistory.com/41</link>
      <description>&lt;p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-filename=&quot;cors-logo.png&quot; data-origin-width=&quot;1016&quot; data-origin-height=&quot;418&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/cmw85T/btsG6fA42v9/BTltO2sZKcuYI3gKKohot0/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/cmw85T/btsG6fA42v9/BTltO2sZKcuYI3gKKohot0/img.png&quot; data-alt=&quot;CORS&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/cmw85T/btsG6fA42v9/BTltO2sZKcuYI3gKKohot0/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2Fcmw85T%2FbtsG6fA42v9%2FBTltO2sZKcuYI3gKKohot0%2Fimg.png&quot; onerror=&quot;this.onerror=null; this.src='//t1.daumcdn.net/tistory_admin/static/images/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;288&quot; data-filename=&quot;cors-logo.png&quot; data-origin-width=&quot;1016&quot; data-origin-height=&quot;418&quot;/&gt;&lt;/span&gt;&lt;figcaption&gt;CORS&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;style2&quot; /&gt;
&lt;blockquote data-ke-style=&quot;style1&quot;&gt;&lt;span style=&quot;font-family: 'Noto Serif KR';&quot;&gt;&quot;저희는 이 api 클라이언트에서 써야하는데.. 그럼 CORS 처리해주시나요?&quot;&lt;br /&gt;&lt;br /&gt;&lt;/span&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;최근 회사에서 통합 검색 api를 다른 도메인으로 요청하라는 개발 사항을 전달 받고 다시 떠오른 CORS 이슈.&lt;/p&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;CORS를 설명하기 위해서는 먼저&amp;nbsp; SOP를 알아야 한다.&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;SOP&lt;/h3&gt;
&lt;h4 data-ke-size=&quot;size20&quot;&gt;  Same-origin Policy (동일 출처 정책) 란?&lt;/h4&gt;
&lt;blockquote data-ke-style=&quot;style3&quot;&gt;Same-origin Policy(MDN)&lt;br /&gt;&lt;br /&gt;: 하나의 출처에서 만들어진 문서/스크립트가 다른 출처의 자원과 어떻게 상호작용 할 것인가에 대해 제한하는 주요 보안 방식&lt;br /&gt;: The same-origin policy is a critical security mechanism that restricts how a document or script loaded by one origin can interact with a resource from another origin.&amp;nbsp;&amp;nbsp;&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;SOP란 말 그대로 보안을 위해 동일 출처의 요청에만 응답하도록 만든 정책이다. 예컨데, 악의적인 웹 사이트의 공격으로 개인적인 정보 (메일이나 회사 인트라넷 정보 등)가 유출 되는 문제를 해결하기 위해 &lt;b&gt;브라우저&lt;/b&gt;에서 지원한다.&lt;/p&gt;
&lt;h4 data-ke-size=&quot;size20&quot;&gt;  Same-origin(동일 출처) 란?&lt;/h4&gt;
&lt;p data-ke-size=&quot;size18&quot;&gt;그렇다면 동일 출처란 무엇일까? 쉽게 설명하자면 &lt;span style=&quot;background-color: #ffc1c8;&quot;&gt;Protocol&lt;/span&gt;, &lt;span style=&quot;background-color: #f6e199;&quot;&gt;Port&lt;/span&gt;, &lt;span style=&quot;background-color: #99cefa;&quot;&gt;Hostname&lt;/span&gt;&amp;nbsp;같은 URL을 의미한다.&lt;/p&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-origin-width=&quot;414&quot; data-origin-height=&quot;122&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/ohNVT/btsG3prS936/Bgq6RXpfWtEMkCKFhzkTi1/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/ohNVT/btsG3prS936/Bgq6RXpfWtEMkCKFhzkTi1/img.png&quot; data-alt=&quot;URL 구성 요소&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/ohNVT/btsG3prS936/Bgq6RXpfWtEMkCKFhzkTi1/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FohNVT%2FbtsG3prS936%2FBgq6RXpfWtEMkCKFhzkTi1%2Fimg.png&quot; onerror=&quot;this.onerror=null; this.src='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png'; this.srcset='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png';&quot; loading=&quot;lazy&quot; width=&quot;604&quot; height=&quot;178&quot; data-origin-width=&quot;414&quot; data-origin-height=&quot;122&quot;/&gt;&lt;/span&gt;&lt;figcaption&gt;URL 구성 요소&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;그렇다면 다음중 http://localhost와 동일 출처인 url을 찾아보자.&lt;/p&gt;
&lt;table style=&quot;border-collapse: collapse; width: 100%; height: 86px;&quot; border=&quot;1&quot; data-ke-align=&quot;alignLeft&quot; data-ke-style=&quot;style8&quot;&gt;
&lt;tbody&gt;
&lt;tr style=&quot;height: 18px;&quot;&gt;
&lt;td style=&quot;width: 50%; height: 18px;&quot;&gt;URL&lt;/td&gt;
&lt;td style=&quot;width: 50%; text-align: center; height: 18px;&quot;&gt;동일 출처 여부&lt;/td&gt;
&lt;/tr&gt;
&lt;tr style=&quot;height: 17px;&quot;&gt;
&lt;td style=&quot;width: 50%; height: 17px;&quot;&gt;https://localhost&lt;/td&gt;
&lt;td style=&quot;width: 50%; text-align: center; height: 17px;&quot;&gt;X&lt;/td&gt;
&lt;/tr&gt;
&lt;tr style=&quot;height: 17px;&quot;&gt;
&lt;td style=&quot;width: 50%; height: 17px;&quot;&gt;http://localhost:80&lt;/td&gt;
&lt;td style=&quot;width: 50%; text-align: center; height: 17px;&quot;&gt;O&lt;/td&gt;
&lt;/tr&gt;
&lt;tr style=&quot;height: 17px;&quot;&gt;
&lt;td style=&quot;width: 50%; height: 17px;&quot;&gt;http://127.0.0.1&lt;/td&gt;
&lt;td style=&quot;width: 50%; text-align: center; height: 17px;&quot;&gt;X&lt;/td&gt;
&lt;/tr&gt;
&lt;tr style=&quot;height: 17px;&quot;&gt;
&lt;td style=&quot;width: 50%; height: 17px;&quot;&gt;http://localhost/api/cors&lt;/td&gt;
&lt;td style=&quot;width: 50%; text-align: center; height: 17px;&quot;&gt;O&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;style5&quot; /&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;정답은 2, 4번이다. http의 경우 기본 포트가 80포트가 생략되어 있기 때문에 2번과 같다. 4번의 경우 protocol, port, host가 같고 path만 다르다.&amp;nbsp;&lt;br /&gt;&lt;br /&gt;&lt;/p&gt;
&lt;h4 data-ke-size=&quot;size20&quot;&gt;Cross-origin 지원&lt;/h4&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;만약 다른 서버로 부터 응답을 받고 싶다면 어떻게 해야할까? 브라우저에서는 이미 몇가지 방식의 http요청에서 cross-origin을 허용하고 있다. (embedded CORS) 그 사례는 아래와 같다.&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;background-color: #f2f1f1; color: #1b1b1b; text-align: left;&quot;&gt;&amp;lt;script src=&quot;&amp;hellip;&quot;&amp;gt;&amp;lt;/script&amp;gt;&lt;/span&gt;&lt;/li&gt;
&lt;li&gt;&lt;span style=&quot;background-color: #dddddd;&quot;&gt;&lt;span style=&quot;color: #1b1b1b; text-align: left;&quot;&gt;&lt;span style=&quot;background-color: #f2f1f1; color: #1b1b1b; text-align: left;&quot;&gt;&amp;lt;link rel=&quot;stylesheet&quot; href=&quot;&amp;hellip;&quot;&amp;gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/li&gt;
&lt;li&gt;&lt;span style=&quot;background-color: #dddddd;&quot;&gt;&lt;span style=&quot;color: #1b1b1b; text-align: left;&quot;&gt;&lt;span style=&quot;background-color: #f2f1f1; color: #1b1b1b; text-align: left;&quot;&gt;&lt;span style=&quot;background-color: #f2f1f1; color: #1b1b1b; text-align: left;&quot;&gt;&amp;lt;img&amp;gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/li&gt;
&lt;li&gt;&lt;span style=&quot;background-color: #dddddd;&quot;&gt;&lt;span style=&quot;color: #1b1b1b; text-align: left;&quot;&gt;&lt;span style=&quot;background-color: #f2f1f1; color: #1b1b1b; text-align: left;&quot;&gt;&lt;span style=&quot;background-color: #f2f1f1; color: #1b1b1b; text-align: left;&quot;&gt;&lt;span style=&quot;background-color: #f2f1f1; color: #1b1b1b; text-align: left;&quot;&gt;&amp;lt;video&amp;gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/li&gt;
&lt;li&gt;&lt;span style=&quot;background-color: #dddddd;&quot;&gt;&lt;span style=&quot;color: #1b1b1b; text-align: left;&quot;&gt;&lt;span style=&quot;background-color: #f2f1f1; color: #1b1b1b; text-align: left;&quot;&gt;&lt;span style=&quot;background-color: #f2f1f1; color: #1b1b1b; text-align: left;&quot;&gt;&lt;span style=&quot;background-color: #f2f1f1; color: #1b1b1b; text-align: left;&quot;&gt;&lt;span style=&quot;background-color: #f2f1f1; color: #1b1b1b; text-align: left;&quot;&gt;&amp;lt;iframe&amp;gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/li&gt;
&lt;li&gt;&lt;span style=&quot;background-color: #dddddd;&quot;&gt;&lt;span style=&quot;color: #1b1b1b; text-align: left;&quot;&gt;&lt;span style=&quot;background-color: #f2f1f1; color: #1b1b1b; text-align: left;&quot;&gt;&lt;span style=&quot;background-color: #f2f1f1; color: #1b1b1b; text-align: left;&quot;&gt;&lt;span style=&quot;background-color: #f2f1f1; color: #1b1b1b; text-align: left;&quot;&gt;&lt;span style=&quot;background-color: #f2f1f1; color: #1b1b1b; text-align: left;&quot;&gt;@font-face&lt;/span&gt;&lt;/span&gt;&lt;/span&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;color: #1b1b1b; text-align: left;&quot;&gt;&lt;span style=&quot;color: #1b1b1b; text-align: left;&quot;&gt;&lt;span style=&quot;color: #1b1b1b; text-align: left;&quot;&gt;&lt;span style=&quot;color: #1b1b1b; text-align: left;&quot;&gt;&lt;span style=&quot;color: #1b1b1b; text-align: left;&quot;&gt;그 밖의 교차 출처를 허용하기 위해서는 서버가 HTTP 응답 헤더에 허용하는 다른 출처를 명시해야 한다.&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/p&gt;
&lt;h3 data-ke-size=&quot;size23&quot;&gt;&amp;nbsp;&lt;/h3&gt;
&lt;h3 data-ke-size=&quot;size23&quot;&gt;CORS&lt;/h3&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-filename=&quot;cors.png&quot; data-origin-width=&quot;2324&quot; data-origin-height=&quot;1244&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/crQvr5/btsG4VDEweB/w2ZKvAPUDdAsuKKMDYxwAK/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/crQvr5/btsG4VDEweB/w2ZKvAPUDdAsuKKMDYxwAK/img.png&quot; data-alt=&quot;CORS&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/crQvr5/btsG4VDEweB/w2ZKvAPUDdAsuKKMDYxwAK/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FcrQvr5%2FbtsG4VDEweB%2Fw2ZKvAPUDdAsuKKMDYxwAK%2Fimg.png&quot; onerror=&quot;this.onerror=null; this.src='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png'; this.srcset='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png';&quot; loading=&quot;lazy&quot; width=&quot;774&quot; height=&quot;414&quot; data-filename=&quot;cors.png&quot; data-origin-width=&quot;2324&quot; data-origin-height=&quot;1244&quot;/&gt;&lt;/span&gt;&lt;figcaption&gt;CORS&lt;/figcaption&gt;
&lt;/figure&gt;
&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;h4 data-ke-size=&quot;size20&quot;&gt;  Cross-Origin Resource Sharing (교차 출처 리소스 공유) 란?&lt;/h4&gt;
&lt;blockquote data-ke-style=&quot;style3&quot;&gt;&lt;b&gt;CORS&lt;/b&gt;&lt;br /&gt;&lt;br /&gt;추가 HTTP헤더를 사용하여, 한 출처에서 실행중인 웹 어플리케이션이 다른 출처의 자원에 접근할 수 있는 권한을 부여하도록 브라우저에 알려주는 체제&lt;/blockquote&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;br /&gt;그렇다. CORS를 오류가 아니고, 일종의 정책이다.&amp;nbsp; 아래 세가지 요청 방식에 따라 '교차 출처 간 정보 공유'(cross-origin resource sharing)를 할 수 있다.&lt;/p&gt;
&lt;h4 data-ke-size=&quot;size20&quot;&gt;Preflight Request&lt;/h4&gt;
&lt;ul style=&quot;list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li&gt;OPTIONS 메서드를 통해 다른 도메인의 리소스로 HTTP요청을 보내 실제 요청이 전송하기에 안전한지 확인하는 방법&lt;/li&gt;
&lt;li&gt;cross-origin 요청으로 인해 실제 서버 데이터에 영향을 주지 않기 위해 사용된다.&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-origin-width=&quot;1024&quot; data-origin-height=&quot;1076&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/zhBQF/btsG48JHIr1/kk2mEgQrNqf1qschIAr1yK/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/zhBQF/btsG48JHIr1/kk2mEgQrNqf1qschIAr1yK/img.png&quot; data-alt=&quot;요청 헤더 및 응답 헤더에 필요한 정보들&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/zhBQF/btsG48JHIr1/kk2mEgQrNqf1qschIAr1yK/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FzhBQF%2FbtsG48JHIr1%2Fkk2mEgQrNqf1qschIAr1yK%2Fimg.png&quot; onerror=&quot;this.onerror=null; this.src='//t1.daumcdn.net/tistory_admin/static/images/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;803&quot; data-origin-width=&quot;1024&quot; data-origin-height=&quot;1076&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;Simple Request&lt;/h4&gt;
&lt;ul style=&quot;list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li&gt;preflight와 달리 cross-origin을 별도 확인과정 없이 바로 자원을 요청하는 방법&lt;/li&gt;
&lt;li&gt;Simple Request의 문제점 - 서버가 CORS처리가 되어 있지 않을 경우를 고려하지 않는다. (멱등하지 않은 HTTP 요청시 문제)&lt;/li&gt;
&lt;li&gt;Content-Type 헤더는 다음의 값들만 허용된다.
&lt;ul style=&quot;list-style-type: circle;&quot; data-ke-list-type=&quot;circle&quot;&gt;
&lt;li&gt;application/x-www-form-urlencoded&lt;/li&gt;
&lt;li&gt;multipart/form-data&lt;/li&gt;
&lt;li&gt;text/plain&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;/ul&gt;
&lt;h4 data-ke-size=&quot;size20&quot;&gt;Credential Request&lt;/h4&gt;
&lt;ul style=&quot;list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li&gt;HTTP 헤더에 인증 정보를 포함하여 요청하는 방법&lt;/li&gt;
&lt;li&gt;Access-Control-Allow-Origin에 *를 포함할 수 없음.&lt;/li&gt;
&lt;li&gt;아래는 토스 테크 블로그에서 Credential 요청으로 toss.tech에서 api-public.tosss.im으로 블로그 정보를 가지고 온 경우&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;스크린샷 2024-05-01 오후 11.20.24.png&quot; data-origin-width=&quot;3414&quot; data-origin-height=&quot;2126&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/6SztR/btsG5lPDb81/WGa35fgFeqCZKq8gqsT2Lk/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/6SztR/btsG5lPDb81/WGa35fgFeqCZKq8gqsT2Lk/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/6SztR/btsG5lPDb81/WGa35fgFeqCZKq8gqsT2Lk/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2F6SztR%2FbtsG5lPDb81%2FWGa35fgFeqCZKq8gqsT2Lk%2Fimg.png&quot; onerror=&quot;this.onerror=null; this.src='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png'; this.srcset='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png';&quot; loading=&quot;lazy&quot; width=&quot;3414&quot; height=&quot;2126&quot; data-filename=&quot;스크린샷 2024-05-01 오후 11.20.24.png&quot; data-origin-width=&quot;3414&quot; data-origin-height=&quot;2126&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;/p&gt;
&lt;h3 data-ke-size=&quot;size23&quot;&gt;&amp;nbsp;&lt;/h3&gt;
&lt;h3 data-ke-size=&quot;size23&quot;&gt;CORS 오류 대응하기&lt;/h3&gt;
&lt;blockquote data-ke-style=&quot;style3&quot;&gt;&lt;b&gt;&lt;span style=&quot;color: #ee2323;&quot;&gt;Access to XMLHttpRequest at {server url} from origin {client url} has been blocked by CORS policy: Response to preflight request doesn't pass access control check: No 'Access-Control-Allow-Origin' header is present on the requested resource.&lt;/span&gt;&lt;/b&gt;&lt;/blockquote&gt;
&lt;p style=&quot;color: #000000;&quot; data-ke-size=&quot;size18&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p style=&quot;color: #000000;&quot; data-ke-size=&quot;size18&quot;&gt;cors를 제대로 이해했다면, CORS오류에 대응하기 쉬워진다. 위에 세가지 방법 중 하나의 방법을 선택하고, api 요청 헤더 및 응답 헤더에 필요 정보를 기록하면 된다. 일반적으로 응답헤더에 Acccess-Conrol-Allow-Origin에 *를 넣고 처리하기 쉽지만, 이건 보안상 위험하기 때문에 좋은 방법이 아니다. 특별히 멱등하지 않은 HTTP 메소드(POST, PATCH)를 사용할 때는 preflight 또는 credential을 필수적으로 고려해야 한다.&amp;nbsp;&lt;/p&gt;
&lt;h4 data-ke-size=&quot;size20&quot;&gt;Cf. 프록시 서버 설정으로 Same-origin인 척하기&lt;/h4&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;일반적으로 프레임워크에서 프록시 설정하는 것도 CORS 때문이다. &lt;span style=&quot;color: #333333; text-align: start;&quot;&gt;&amp;nbsp;배포전 로컬환경에서 개발할 때에는 위와같은 CORS오류를 해결하기 위해 NextJs, NuxtJs 등의 프록시 설정을 사용한다.&amp;nbsp;&lt;/span&gt;&lt;/p&gt;
&lt;blockquote data-ke-style=&quot;style3&quot;&gt;프록시 서버란?&lt;br /&gt;&lt;br /&gt;: 클라이언트가 다른 네트워크에 접속할 수 있도록 중간에서 대리해주는 서버를 의미한다.&amp;nbsp;&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;아래는 Nuxt에서 Nitro를 사용하여 프록시 설정을 한 예시이다.&lt;/p&gt;
&lt;pre id=&quot;code_1714571513122&quot; class=&quot;javascript&quot; data-ke-language=&quot;javascript&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;export default defineNuxtConfig({
  // 생략
  nitro: {
    compressPublicAssets: true,
    devProxy: {
      &quot;/es/&quot;: {
        target: process.env.APP_API_URL + &quot;/es&quot;,
        changeOrigin: true,
      },
      &quot;/es/**&quot;: {
        target: process.env.APP_API_URL + &quot;/es/**&quot;,
        changeOrigin: true,
      },
    },
  },&lt;/code&gt;&lt;/pre&gt;
&lt;h4 data-ke-size=&quot;size20&quot;&gt;&amp;nbsp;&lt;/h4&gt;
&lt;h3 data-ke-size=&quot;size23&quot;&gt;Reference&lt;/h3&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;MDN:&amp;nbsp;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://developer.mozilla.org/ko/docs/Web/HTTP/CORS&quot; target=&quot;_blank&quot; rel=&quot;noopener&amp;nbsp;noreferrer&quot;&gt;https://developer.mozilla.org/ko/docs/Web/HTTP/CORS&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;figure id=&quot;og_1714650066594&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;교차 출처 리소스 공유 (CORS) - HTTP | MDN&quot; data-og-description=&quot;교차 출처 리소스 공유(Cross-Origin Resource Sharing, CORS)는 추가 HTTP 헤더를 사용하여, 한 출처에서 실행 중인 웹 애플리케이션이 다른 출처의 선택한 자원에 접근할 수 있는 권한을 부여하도록 브라&quot; data-og-host=&quot;developer.mozilla.org&quot; data-og-source-url=&quot;https://developer.mozilla.org/ko/docs/Web/HTTP/CORS&quot; data-og-url=&quot;https://developer.mozilla.org/ko/docs/Web/HTTP/CORS&quot; data-og-image=&quot;https://scrap.kakaocdn.net/dn/ct5lfD/hyVZqOppNX/LnOvy1H20Pxh6IlxK1DTdK/img.png?width=1920&amp;amp;height=1080&amp;amp;face=0_0_1920_1080,https://scrap.kakaocdn.net/dn/JPZXL/hyVVAE90St/YGnM8wgKmUvOkO7hDea4ik/img.png?width=1024&amp;amp;height=1076&amp;amp;face=0_0_1024_1076,https://scrap.kakaocdn.net/dn/kFN8m/hyVVMMlGcj/NRKALzrneobYNmZBUI1V0K/img.png?width=957&amp;amp;height=675&amp;amp;face=0_0_957_675&quot;&gt;&lt;a href=&quot;https://developer.mozilla.org/ko/docs/Web/HTTP/CORS&quot; target=&quot;_blank&quot; rel=&quot;noopener&quot; data-source-url=&quot;https://developer.mozilla.org/ko/docs/Web/HTTP/CORS&quot;&gt;
&lt;div class=&quot;og-image&quot; style=&quot;background-image: url('https://scrap.kakaocdn.net/dn/ct5lfD/hyVZqOppNX/LnOvy1H20Pxh6IlxK1DTdK/img.png?width=1920&amp;amp;height=1080&amp;amp;face=0_0_1920_1080,https://scrap.kakaocdn.net/dn/JPZXL/hyVVAE90St/YGnM8wgKmUvOkO7hDea4ik/img.png?width=1024&amp;amp;height=1076&amp;amp;face=0_0_1024_1076,https://scrap.kakaocdn.net/dn/kFN8m/hyVVMMlGcj/NRKALzrneobYNmZBUI1V0K/img.png?width=957&amp;amp;height=675&amp;amp;face=0_0_957_675');&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;교차 출처 리소스 공유 (CORS) - HTTP | MDN&lt;/p&gt;
&lt;p class=&quot;og-desc&quot; data-ke-size=&quot;size16&quot;&gt;교차 출처 리소스 공유(Cross-Origin Resource Sharing, CORS)는 추가 HTTP 헤더를 사용하여, 한 출처에서 실행 중인 웹 애플리케이션이 다른 출처의 선택한 자원에 접근할 수 있는 권한을 부여하도록 브라&lt;/p&gt;
&lt;p class=&quot;og-host&quot; data-ke-size=&quot;size16&quot;&gt;developer.mozilla.org&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;ul style=&quot;list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li&gt;[10분 테코톡] 나봄의 CORS: &lt;a href=&quot;https://www.youtube.com/watch?v=-2TgkKYmJt4&quot; target=&quot;_blank&quot; rel=&quot;noopener&amp;nbsp;noreferrer&quot;&gt;https://www.youtube.com/watch?v=-2TgkKYmJt4&lt;/a&gt;&lt;/li&gt;
&lt;/ul&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=-2TgkKYmJt4&quot; data-video-thumbnail=&quot;https://scrap.kakaocdn.net/dn/cojAWJ/hyVZkObRXd/JnqDynBDBDgEqT4vUMTb81/img.jpg?width=1280&amp;amp;height=720&amp;amp;face=866_232_928_300&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-original-url=&quot;&quot; data-video-title=&quot;&quot;&gt;&lt;iframe src=&quot;https://www.youtube.com/embed/-2TgkKYmJt4&quot; width=&quot;860&quot; height=&quot;484&quot; frameborder=&quot;&quot; allowfullscreen=&quot;true&quot;&gt;&lt;/iframe&gt;
&lt;figcaption style=&quot;display: none;&quot;&gt;&lt;/figcaption&gt;
&lt;/figure&gt;
&lt;ul style=&quot;list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li&gt;  악명 높은 CORS 개념 &amp;amp; 해결법 - 정리 끝판왕  : &lt;a href=&quot;https://inpa.tistory.com/entry/WEB-%F0%9F%93%9A-CORS-%F0%9F%92%AF-%EC%A0%95%EB%A6%AC-%ED%95%B4%EA%B2%B0-%EB%B0%A9%EB%B2%95-%F0%9F%91%8F&quot; target=&quot;_blank&quot; rel=&quot;noopener&amp;nbsp;noreferrer&quot;&gt;https://inpa.tistory.com/entry/WEB-%F0%9F%93%9A-CORS-%F0%9F%92%AF-%EC%A0%95%EB%A6%AC-%ED%95%B4%EA%B2%B0-%EB%B0%A9%EB%B2%95-%F0%9F%91%8F&lt;/a&gt;&lt;span style=&quot;font-family: -apple-system, BlinkMacSystemFont, 'Helvetica Neue', 'Apple SD Gothic Neo', Arial, sans-serif; letter-spacing: 0px;&quot;&gt;&lt;/span&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;figure id=&quot;og_1714651321715&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;  악명 높은 CORS 개념 &amp;amp; 해결법 - 정리 끝판왕  &quot; data-og-description=&quot;악명 높은 CORS 에러 메세지 웹 개발을 하다보면 반드시 마주치는 멍멍 같은 에러가 바로 CORS 이다. 웹 개발의 신입 신고식이라고 할 정도로, CORS는 누구나 한 번 정도는 겪게 된다고 해도 과언이 &quot; data-og-host=&quot;inpa.tistory.com&quot; data-og-source-url=&quot;https://inpa.tistory.com/entry/WEB-%F0%9F%93%9A-CORS-%F0%9F%92%AF-%EC%A0%95%EB%A6%AC-%ED%95%B4%EA%B2%B0-%EB%B0%A9%EB%B2%95-%F0%9F%91%8F&quot; data-og-url=&quot;https://inpa.tistory.com/entry/WEB-%F0%9F%93%9A-CORS-%F0%9F%92%AF-%EC%A0%95%EB%A6%AC-%ED%95%B4%EA%B2%B0-%EB%B0%A9%EB%B2%95-%F0%9F%91%8F&quot; data-og-image=&quot;https://scrap.kakaocdn.net/dn/cCfYNV/hyVVx2JAHI/spO3ZUj2ly74lfhjqqCK2k/img.png?width=800&amp;amp;height=466&amp;amp;face=0_0_800_466,https://scrap.kakaocdn.net/dn/wTFUe/hyVVx9vWSE/zRwAOcXK3LPe0LVv5QGkPK/img.png?width=800&amp;amp;height=466&amp;amp;face=0_0_800_466,https://scrap.kakaocdn.net/dn/jG5IV/hyVZp22DLR/C0jGOMkVf5IWVm5qVgUZcK/img.png?width=1200&amp;amp;height=700&amp;amp;face=0_0_1200_700&quot;&gt;&lt;a href=&quot;https://inpa.tistory.com/entry/WEB-%F0%9F%93%9A-CORS-%F0%9F%92%AF-%EC%A0%95%EB%A6%AC-%ED%95%B4%EA%B2%B0-%EB%B0%A9%EB%B2%95-%F0%9F%91%8F&quot; target=&quot;_blank&quot; rel=&quot;noopener&quot; data-source-url=&quot;https://inpa.tistory.com/entry/WEB-%F0%9F%93%9A-CORS-%F0%9F%92%AF-%EC%A0%95%EB%A6%AC-%ED%95%B4%EA%B2%B0-%EB%B0%A9%EB%B2%95-%F0%9F%91%8F&quot;&gt;
&lt;div class=&quot;og-image&quot; style=&quot;background-image: url('https://scrap.kakaocdn.net/dn/cCfYNV/hyVVx2JAHI/spO3ZUj2ly74lfhjqqCK2k/img.png?width=800&amp;amp;height=466&amp;amp;face=0_0_800_466,https://scrap.kakaocdn.net/dn/wTFUe/hyVVx9vWSE/zRwAOcXK3LPe0LVv5QGkPK/img.png?width=800&amp;amp;height=466&amp;amp;face=0_0_800_466,https://scrap.kakaocdn.net/dn/jG5IV/hyVZp22DLR/C0jGOMkVf5IWVm5qVgUZcK/img.png?width=1200&amp;amp;height=700&amp;amp;face=0_0_1200_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;  악명 높은 CORS 개념 &amp;amp; 해결법 - 정리 끝판왕  &lt;/p&gt;
&lt;p class=&quot;og-desc&quot; data-ke-size=&quot;size16&quot;&gt;악명 높은 CORS 에러 메세지 웹 개발을 하다보면 반드시 마주치는 멍멍 같은 에러가 바로 CORS 이다. 웹 개발의 신입 신고식이라고 할 정도로, CORS는 누구나 한 번 정도는 겪게 된다고 해도 과언이&lt;/p&gt;
&lt;p class=&quot;og-host&quot; data-ke-size=&quot;size16&quot;&gt;inpa.tistory.com&lt;/p&gt;
&lt;/div&gt;
&lt;/a&gt;&lt;/figure&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;</description>
      <category>Computer Engineering/Web</category>
      <category>CORS</category>
      <category>preflight</category>
      <category>SOP</category>
      <author>Nagneo</author>
      <guid isPermaLink="true">https://nagneo.tistory.com/41</guid>
      <comments>https://nagneo.tistory.com/41#entry41comment</comments>
      <pubDate>Thu, 2 May 2024 20:51:58 +0900</pubDate>
    </item>
    <item>
      <title>[책] Clean Code 북스터디 시작</title>
      <link>https://nagneo.tistory.com/39</link>
      <description>&lt;p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-filename=&quot;IMG_0979.jpeg&quot; data-origin-width=&quot;3024&quot; data-origin-height=&quot;4032&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/ODdph/btsD4FvIESB/jQqW7qH7kJ9tHMXszdC8PK/img.jpg&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/ODdph/btsD4FvIESB/jQqW7qH7kJ9tHMXszdC8PK/img.jpg&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/ODdph/btsD4FvIESB/jQqW7qH7kJ9tHMXszdC8PK/img.jpg&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FODdph%2FbtsD4FvIESB%2FjQqW7qH7kJ9tHMXszdC8PK%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; data-filename=&quot;IMG_0979.jpeg&quot; data-origin-width=&quot;3024&quot; data-origin-height=&quot;4032&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;h2 data-ke-size=&quot;size26&quot;&gt;북스터디 시작&lt;/h2&gt;
&lt;h3 data-ke-size=&quot;size23&quot;&gt;clean code 읽기&lt;/h3&gt;
&lt;h3 data-ke-size=&quot;size23&quot;&gt;clean code 완독 후기 작성하기&lt;/h3&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;h3 data-ke-size=&quot;size23&quot;&gt;친구들과 나누기&lt;/h3&gt;</description>
      <category>Computer Engineering/Common</category>
      <category>개발자북클럽</category>
      <category>노개북</category>
      <category>노마드코더</category>
      <author>Nagneo</author>
      <guid isPermaLink="true">https://nagneo.tistory.com/39</guid>
      <comments>https://nagneo.tistory.com/39#entry39comment</comments>
      <pubDate>Sat, 27 Jan 2024 00:06:17 +0900</pubDate>
    </item>
    <item>
      <title>[코엑스/삼성역] DEVIEW 2023 2/27일 참석 후기</title>
      <link>https://nagneo.tistory.com/38</link>
      <description>&lt;p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-origin-width=&quot;599&quot; data-origin-height=&quot;313&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/ZiDzY/btr0Iv1gqGE/74irA2gK3k7ZJcZkUww5Rk/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/ZiDzY/btr0Iv1gqGE/74irA2gK3k7ZJcZkUww5Rk/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/ZiDzY/btr0Iv1gqGE/74irA2gK3k7ZJcZkUww5Rk/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FZiDzY%2Fbtr0Iv1gqGE%2F74irA2gK3k7ZJcZkUww5Rk%2Fimg.png&quot; onerror=&quot;this.onerror=null; this.src='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png'; this.srcset='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png';&quot; loading=&quot;lazy&quot; width=&quot;599&quot; height=&quot;313&quot; data-origin-width=&quot;599&quot; data-origin-height=&quot;313&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 style=&quot;color: #000000; text-align: start;&quot; data-ke-size=&quot;size23&quot;&gt;&lt;b&gt;개요&lt;/b&gt;&lt;/h3&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;br /&gt;2.27일 월요일 방문한 DEVIEW 2023.&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;이전에 다니던 회사에서 보내주는 세미나 외에&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;나 홀로 오프라인 컨퍼런스를 신청해서 다녀온 것은 처음이었다.&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;웹 개발로 전향한 이후, 국내에서 들을 수 있는 컨퍼런스가 많아져서 좋다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;모든 것을 다 이해할 순 없지만, 그래도 내가 사용하는 기술과 가깝고, 사용하는 워딩도 비슷하다는 사실에 놀랐다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;더 오래, 더 많은 것을 들을 수 있었으면 좋았겠지만, 일도 있고 해서 반나절 정도만 참석했다.&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;개발의 세계는 참 넓고, 다양하고, 끊임없이 변화한다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;내가 어쩌다 이 세계에 발을 들이게 된건지,, 신세를 한탄하면서도&lt;/p&gt;
&lt;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;&lt;b&gt;1. UI 빌더를 지탱하는 레고 블록 같은 아키텍쳐 만들기&lt;/b&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;b&gt;2. 중요한 건 꺾이지 않는 마음: 스마트에디터의 도전&lt;/b&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;b&gt;3. GraphQL 잘 쓰고 계신가요? (Production-ready Graph QL)&amp;nbsp;&lt;/b&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;b&gt;4. SSR환경에서의 Micro-Frontend 구현과 퍼포먼스 향상을 위한 캐시전략&lt;/b&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;전부 A 세션에서 진행되었다.&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;왜냐면 내 앞 사람도 계속 A에 있으면 되겠다고 말했기 때문.&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;1. UI 빌더를 지탱하는 레고 블록 같은 아키텍쳐 만들기&lt;/b&gt;&lt;/h3&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;UI 블록을 사용해 페이지를 구축할 수 있는 서비스를 만드는 네이버 개발팀에서 나와 발표했다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;잘은 모르지만 mooc 같은건가? 생각했다.&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;최초 설계한 2단계의 아키텍쳐에서, UI builder를 추가하고, Chacra-UI(?) 디자인 시스템을 도입하는 등&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;단계적으로 구조화, 개선 해나가는 과정을 설명해주셨다.&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;s&gt;점심 회식을 하고 온지라 너무 많이 먹은 탓인지, 내 옆자리 사람이 자는 걸 보고 긴장이 풀려서 인지 살짝 졸고 말았다&lt;/s&gt;.&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;h3 data-ke-size=&quot;size23&quot;&gt;&lt;b&gt;2. 중요한 건 꺾이지 않는 마음: 스마트에디터의 도전4&lt;/b&gt;&lt;/h3&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;2022년 가장 많이 쓰인 유행어라는 '꺾이지 않는 마음'.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;2008년 부터 지금까지 스마트 에디터가 어떻게 변화해왔는지를 알려주는 세션이었다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;스마트 에디터는 네이버에서 글을 작성하는 많은 부분에서 사용될 수 있는 프로덕트이다.&amp;nbsp;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;브라우저가 기본적으로 제공하는 contentedittable 을 유지하면서, 여러가지 문제 해결을 하기 위해&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;upstream, downstream 등을 사용한 문제해결 사례들을 설명해주었다.&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;두 명의 발표자가 발표했는데&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;처음 발표해 주신 분의 특유한 어조 때문에 안 졸리고 잘들었는데,,&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;벌써 기억이 가물가물하다.&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;이래서 노팅이 중요한가보다.&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;h3 data-ke-size=&quot;size23&quot;&gt;&lt;b&gt;3. GraphQL 잘 쓰고 계신가요? (Production-ready Graph QL)&amp;nbsp;&lt;/b&gt;.&amp;nbsp;&lt;/h3&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;네이버에서 영수증 리뷰를 작성하고, 보는 MY 플레이스를 만드는 서비스에서&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;어떻게 자신들의 서비스에 Graph QL을 적용하고, 어떤 장점이 있었는지 알려주는 세션이었다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;다양한 서버에서 다양한 정보를 조합에서 표현해야 하는 MY 플레이스 서비스의 특성상&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;Backend for frontend를 구축하고&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;거기에 Graph QL을 사용해서 필요한 데이터들을 어떻게 관리, 표현하고 있는지 보여주었다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;솔직히 Graph QL을 사용하고 있는 사람이라면, 별로 새로울게 없을 거 같았으나&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;나는 거의 처음 접하는 지라 튜토리얼 보는 것 마냥 가볍게 들을 수 있었다.&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;h3 data-ke-size=&quot;size23&quot;&gt;4. &lt;b&gt;SSR환경에서의 Micro-Frontend 구현과 퍼포먼스 향상을 위한 캐시전략&lt;/b&gt;&lt;/h3&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;내가 들은 세션 중에서는 유일하게 외부 인사였던 세션이다.&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;쿠팡 개발자 박찬진님이 발표해주셨다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;MFE에 SSR을 적용하는 얘기였는데,&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;현재의 MFE 지원 모듈에서는 제공하지 않는 여러가지 복합적인 문제를 해결하기 위해&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;s&gt;쿠팡 서비스도 롤백을 하는구나.알게되었을 때 인간미가 느껴졌다.&amp;nbsp;&lt;/s&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;MFE가 뭔지 잘 몰랐었는데, 이 세션을 통해 어느정도 감을 잡게 된 거 같다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;늘 사용자 경험만이 최고로 대우받는 회사에서 지내다가 (물론 나도 이것을 아주 최우선으로 생각하지만)&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;개발자 경험이 않좋아지면 결국 사용자경험도 안 좋아 진다는 아젠다에&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;모두가 공감하는&amp;nbsp; 공간에 참여하고 있다는 사실이 좋았다.&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;앞으로도 이런 기회가 있다면 또 참여하고 싶다.&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;다음에는 회사가 보내줘서 올 수 있기를.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;불경기를 반영한것인지 채용부스는 많지 않았다.&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;(혹시라도 틀린 내용이 있다면, 댓글 부탁드려요:)&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;a href=&quot;https://deview.kr/2023&quot; target=&quot;_blank&quot; rel=&quot;noopener&quot;&gt;https://deview.kr/2023&lt;/a&gt;&lt;/p&gt;
&lt;figure id=&quot;og_1677497836553&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;DEVIEW 2023&quot; data-og-description=&quot;DEVIEW는 국내외 개발자들이 서로의 지식을 나누고, 탁월함을 추구하며, 함께 성장하는 컨퍼런스 입니다.&quot; data-og-host=&quot;deview.kr&quot; data-og-source-url=&quot;https://deview.kr/2023&quot; data-og-url=&quot;https://deview.kr/2023&quot; data-og-image=&quot;https://scrap.kakaocdn.net/dn/cCnyEc/hyRMxxhg3l/0CRg68fbQPVY2kwbbrZ4SK/img.jpg?width=1200&amp;amp;height=630&amp;amp;face=0_0_1200_630&quot;&gt;&lt;a href=&quot;https://deview.kr/2023&quot; target=&quot;_blank&quot; rel=&quot;noopener&quot; data-source-url=&quot;https://deview.kr/2023&quot;&gt;
&lt;div class=&quot;og-image&quot; style=&quot;background-image: url('https://scrap.kakaocdn.net/dn/cCnyEc/hyRMxxhg3l/0CRg68fbQPVY2kwbbrZ4SK/img.jpg?width=1200&amp;amp;height=630&amp;amp;face=0_0_1200_630');&quot;&gt;&amp;nbsp;&lt;/div&gt;
&lt;div class=&quot;og-text&quot;&gt;
&lt;p class=&quot;og-title&quot; data-ke-size=&quot;size16&quot;&gt;DEVIEW 2023&lt;/p&gt;
&lt;p class=&quot;og-desc&quot; data-ke-size=&quot;size16&quot;&gt;DEVIEW는 국내외 개발자들이 서로의 지식을 나누고, 탁월함을 추구하며, 함께 성장하는 컨퍼런스 입니다.&lt;/p&gt;
&lt;p class=&quot;og-host&quot; data-ke-size=&quot;size16&quot;&gt;deview.kr&lt;/p&gt;
&lt;/div&gt;
&lt;/a&gt;&lt;/figure&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;</description>
      <category>Computer Engineering/Web</category>
      <category>DEVIEW</category>
      <category>deview 2023</category>
      <category>그랜드볼룸</category>
      <category>삼성역</category>
      <category>코엑스</category>
      <author>Nagneo</author>
      <guid isPermaLink="true">https://nagneo.tistory.com/38</guid>
      <comments>https://nagneo.tistory.com/38#entry38comment</comments>
      <pubDate>Mon, 27 Feb 2023 20:59:06 +0900</pubDate>
    </item>
    <item>
      <title>[코엑스/삼성역] 혼밥하기 좋은 노브랜드 버거, 치킨 시저 샐러드</title>
      <link>https://nagneo.tistory.com/37</link>
      <description>&lt;h3 data-ke-size=&quot;size23&quot;&gt;삼성역 노브랜드 버거&lt;/h3&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;차마 맛집이라고는 할 수 없으나, 이 가격에 삼성역에서 치킨 샐러드를 먹기는 힘드니까 남겨본다.&lt;/p&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-filename=&quot;edited_KakaoTalk_20230227_192102736.jpg&quot; data-origin-width=&quot;1201&quot; data-origin-height=&quot;764&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/bDnUtD/btr1bd449Gp/gieaOWMBR26n0vPdlpx0kK/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/bDnUtD/btr1bd449Gp/gieaOWMBR26n0vPdlpx0kK/img.png&quot; data-alt=&quot;노브랜드 버거&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/bDnUtD/btr1bd449Gp/gieaOWMBR26n0vPdlpx0kK/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FbDnUtD%2Fbtr1bd449Gp%2FgieaOWMBR26n0vPdlpx0kK%2Fimg.png&quot; onerror=&quot;this.onerror=null; this.src='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png'; this.srcset='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png';&quot; loading=&quot;lazy&quot; width=&quot;1201&quot; height=&quot;764&quot; data-filename=&quot;edited_KakaoTalk_20230227_192102736.jpg&quot; data-origin-width=&quot;1201&quot; data-origin-height=&quot;764&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;예전에 이거 먹어보겠다고 멀리서 포장해와서 먹기도 했었는데, 딱히 군더더기 없이 평범한 버거 맛이었다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;요즘 경기가 다시 어렵다고 하기 다시 뜨는 것인가..&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;h4 data-ke-size=&quot;size20&quot;&gt;위치&lt;/h4&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;위치는 여기. (빨간 동그라미)&lt;/p&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-filename=&quot;노브랜드버거 위치.png&quot; data-origin-width=&quot;1293&quot; data-origin-height=&quot;884&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/WjWJj/btr0VKiqyg7/annDBA4JX5c9mjFmzsPdVk/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/WjWJj/btr0VKiqyg7/annDBA4JX5c9mjFmzsPdVk/img.png&quot; data-alt=&quot;노브랜드 버거 위치. 예전에는 버거플랜트가 있었나보다.&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/WjWJj/btr0VKiqyg7/annDBA4JX5c9mjFmzsPdVk/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FWjWJj%2Fbtr0VKiqyg7%2FannDBA4JX5c9mjFmzsPdVk%2Fimg.png&quot; onerror=&quot;this.onerror=null; this.src='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png'; this.srcset='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png';&quot; loading=&quot;lazy&quot; width=&quot;1293&quot; height=&quot;884&quot; data-filename=&quot;노브랜드버거 위치.png&quot; data-origin-width=&quot;1293&quot; data-origin-height=&quot;884&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;h4 data-ke-size=&quot;size20&quot;&gt;치킨 시저 샐러드&lt;/h4&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;공홈에서 가져온 이미지이고, 분명 여기 있었던거 같은데, 사진은 업데이트 되지 않았다.&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;코엑스 몰에서는 조금 떨어진 위치다.&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-ke-mobileStyle=&quot;widthOrigin&quot; data-filename=&quot;edited_KakaoTalk_20230227_192102736_01.jpg&quot; data-origin-width=&quot;500&quot; data-origin-height=&quot;666&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/TbsuX/btr0KHtkgKg/UBJ3d9oRvVqIbrfaTRv2CK/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/TbsuX/btr0KHtkgKg/UBJ3d9oRvVqIbrfaTRv2CK/img.png&quot; data-alt=&quot;치킨 시저 샐러드 콤보 5,800원&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/TbsuX/btr0KHtkgKg/UBJ3d9oRvVqIbrfaTRv2CK/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FTbsuX%2Fbtr0KHtkgKg%2FUBJ3d9oRvVqIbrfaTRv2CK%2Fimg.png&quot; onerror=&quot;this.onerror=null; this.src='//t1.daumcdn.net/tistory_admin/static/images/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;666&quot; data-filename=&quot;edited_KakaoTalk_20230227_192102736_01.jpg&quot; data-origin-width=&quot;500&quot; data-origin-height=&quot;666&quot;/&gt;&lt;/span&gt;&lt;figcaption&gt;치킨 시저 샐러드 콤보 5,800원&lt;/figcaption&gt;
&lt;/figure&gt;
&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;사진에는 없지만, 시저 소스가 별도로 나온다. 개인적으로 소스 킬러인데, 이 소스는 너무 짜서 많이 먹지는 못했다.&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;메뉴는 대체로 5,000원 ~ 9,000원 사이였다. 삼성역 기준 담 없는 가격이었지만, 샐러드의 가성비는 별로.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;버거 세트를 먹고, 칼로리가 부담스럽다면 감자튀김을 적당히 남기는 걸 추천.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;h4 data-ke-size=&quot;size20&quot;&gt;Link&lt;/h4&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;a href=&quot;https://place.map.kakao.com/1628132988?referrer=daumsearch_local&quot;&gt;https://place.map.kakao.com/1628132988?referrer=daumsearch_local&lt;/a&gt;&amp;nbsp;&lt;/p&gt;
&lt;figure id=&quot;og_1677494066366&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;서울 강남구 영동대로 513 1층 (삼성동 159)&quot; data-og-host=&quot;place.map.kakao.com&quot; data-og-source-url=&quot;https://place.map.kakao.com/1628132988?referrer=daumsearch_local&quot; data-og-url=&quot;https://place.map.kakao.com/1628132988&quot; data-og-image=&quot;https://scrap.kakaocdn.net/dn/RtVci/hyRMzIAytm/UKAIm4jyFz9rTqzpPw3Od1/img.png?width=800&amp;amp;height=400&amp;amp;face=0_0_800_400,https://scrap.kakaocdn.net/dn/ctXzOZ/hyRMmP0Mje/vFlBJHeZVqSZnqPIPStXdK/img.png?width=800&amp;amp;height=400&amp;amp;face=0_0_800_400&quot;&gt;&lt;a href=&quot;https://place.map.kakao.com/1628132988?referrer=daumsearch_local&quot; target=&quot;_blank&quot; rel=&quot;noopener&quot; data-source-url=&quot;https://place.map.kakao.com/1628132988?referrer=daumsearch_local&quot;&gt;
&lt;div class=&quot;og-image&quot; style=&quot;background-image: url('https://scrap.kakaocdn.net/dn/RtVci/hyRMzIAytm/UKAIm4jyFz9rTqzpPw3Od1/img.png?width=800&amp;amp;height=400&amp;amp;face=0_0_800_400,https://scrap.kakaocdn.net/dn/ctXzOZ/hyRMmP0Mje/vFlBJHeZVqSZnqPIPStXdK/img.png?width=800&amp;amp;height=400&amp;amp;face=0_0_800_400');&quot;&gt;&amp;nbsp;&lt;/div&gt;
&lt;div class=&quot;og-text&quot;&gt;
&lt;p class=&quot;og-title&quot; data-ke-size=&quot;size16&quot;&gt;노브랜드버거 코엑스점&lt;/p&gt;
&lt;p class=&quot;og-desc&quot; data-ke-size=&quot;size16&quot;&gt;서울 강남구 영동대로 513 1층 (삼성동 159)&lt;/p&gt;
&lt;p class=&quot;og-host&quot; data-ke-size=&quot;size16&quot;&gt;place.map.kakao.com&lt;/p&gt;
&lt;/div&gt;
&lt;/a&gt;&lt;/figure&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;a href=&quot;http://www.coex.co.kr/services/catering-service-5?type=organizer&quot;&gt;http://www.coex.co.kr/services/catering-service-5?type=organizer&lt;/a&gt;&amp;nbsp;&lt;/p&gt;
&lt;figure id=&quot;og_1677493750872&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;코엑스 ORGANIZER&quot; data-og-description=&quot;노브랜드 버거는 최적의 식자재와 요리방법을 찾아 버거를 중심으로 다양하고 맛있는 웨스턴 스낵을 제공하는 캐주얼 버거 하우스입니다. 두툼하고 스모키한 직화구이 패티와 이에 어울리는 &quot; data-og-host=&quot;www.coex.co.kr&quot; data-og-source-url=&quot;http://www.coex.co.kr/services/catering-service-5?type=organizer&quot; data-og-url=&quot;http://www.coex.co.kr/services/catering-service-5?type=organizer&quot; data-og-image=&quot;https://scrap.kakaocdn.net/dn/djzJDm/hyRKSC0ogC/40RoiZJi6E08AvHSjgwp81/img.png?width=410&amp;amp;height=200&amp;amp;face=0_0_410_200,https://scrap.kakaocdn.net/dn/izyOd/hyRMp0hewa/lKYPDfRKftKRiFQqmOzr3K/img.jpg?width=386&amp;amp;height=263&amp;amp;face=0_0_386_263&quot;&gt;&lt;a href=&quot;http://www.coex.co.kr/services/catering-service-5?type=organizer&quot; target=&quot;_blank&quot; rel=&quot;noopener&quot; data-source-url=&quot;http://www.coex.co.kr/services/catering-service-5?type=organizer&quot;&gt;
&lt;div class=&quot;og-image&quot; style=&quot;background-image: url('https://scrap.kakaocdn.net/dn/djzJDm/hyRKSC0ogC/40RoiZJi6E08AvHSjgwp81/img.png?width=410&amp;amp;height=200&amp;amp;face=0_0_410_200,https://scrap.kakaocdn.net/dn/izyOd/hyRMp0hewa/lKYPDfRKftKRiFQqmOzr3K/img.jpg?width=386&amp;amp;height=263&amp;amp;face=0_0_386_263');&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;코엑스 ORGANIZER&lt;/p&gt;
&lt;p class=&quot;og-desc&quot; data-ke-size=&quot;size16&quot;&gt;노브랜드 버거는 최적의 식자재와 요리방법을 찾아 버거를 중심으로 다양하고 맛있는 웨스턴 스낵을 제공하는 캐주얼 버거 하우스입니다. 두툼하고 스모키한 직화구이 패티와 이에 어울리는&lt;/p&gt;
&lt;p class=&quot;og-host&quot; data-ke-size=&quot;size16&quot;&gt;www.coex.co.kr&lt;/p&gt;
&lt;/div&gt;
&lt;/a&gt;&lt;/figure&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;</description>
      <category>Ordinary</category>
      <category>그랜드볼룸</category>
      <category>노브랜드</category>
      <category>노브랜드 버거</category>
      <category>봉은사</category>
      <category>삼성역</category>
      <category>삼성역 샐러드</category>
      <category>이마트</category>
      <category>치킨 시저 샐러드</category>
      <category>코엑스</category>
      <category>혼밥</category>
      <author>Nagneo</author>
      <guid isPermaLink="true">https://nagneo.tistory.com/37</guid>
      <comments>https://nagneo.tistory.com/37#entry37comment</comments>
      <pubDate>Mon, 27 Feb 2023 19:37:50 +0900</pubDate>
    </item>
    <item>
      <title>[코엑스/삼성역] 카공하기 좋은 넓은 카페 추천 '가배도'</title>
      <link>https://nagneo.tistory.com/36</link>
      <description>&lt;p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-filename=&quot;edited_edited_KakaoTalk_20230227_184116617_02.jpg&quot; data-origin-width=&quot;500&quot; data-origin-height=&quot;486&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/c8ETRD/btr0NIeoNpD/VDCvjSUrWVMao6MpfDqzm1/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/c8ETRD/btr0NIeoNpD/VDCvjSUrWVMao6MpfDqzm1/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/c8ETRD/btr0NIeoNpD/VDCvjSUrWVMao6MpfDqzm1/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2Fc8ETRD%2Fbtr0NIeoNpD%2FVDCvjSUrWVMao6MpfDqzm1%2Fimg.png&quot; onerror=&quot;this.onerror=null; this.src='//t1.daumcdn.net/tistory_admin/static/images/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;486&quot; data-filename=&quot;edited_edited_KakaoTalk_20230227_184116617_02.jpg&quot; data-origin-width=&quot;500&quot; data-origin-height=&quot;486&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;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;가배도 위치.png&quot; data-origin-width=&quot;1293&quot; data-origin-height=&quot;884&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/2NRyX/btr07ATLFlf/0kDDy7Z6KhLfFGuQ0IEyl1/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/2NRyX/btr07ATLFlf/0kDDy7Z6KhLfFGuQ0IEyl1/img.png&quot; data-alt=&quot;공홈에서 가져왔지만, 2018년도 자료라서 다른 가게이름으로 표시되어이있다.&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/2NRyX/btr07ATLFlf/0kDDy7Z6KhLfFGuQ0IEyl1/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2F2NRyX%2Fbtr07ATLFlf%2F0kDDy7Z6KhLfFGuQ0IEyl1%2Fimg.png&quot; onerror=&quot;this.onerror=null; this.src='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png'; this.srcset='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png';&quot; loading=&quot;lazy&quot; width=&quot;1293&quot; height=&quot;884&quot; data-filename=&quot;가배도 위치.png&quot; data-origin-width=&quot;1293&quot; data-origin-height=&quot;884&quot;/&gt;&lt;/span&gt;&lt;figcaption&gt;공홈에서 가져왔지만, 2018년도 자료라서 다른 가게이름으로 표시되어이있다.&lt;/figcaption&gt;
&lt;/figure&gt;
&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;삼성역 6번 출구에서 별마당 도서관을 지나 직진하다보면 나타나는 길다란 복도 바로 다음에 위치해 있다.&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;edited_KakaoTalk_20230227_184116617_04.jpg&quot; data-origin-width=&quot;500&quot; data-origin-height=&quot;666&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/Wbmte/btr0IGPd6Bn/gWhrr99kj3VRrBYIy1FkKK/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/Wbmte/btr0IGPd6Bn/gWhrr99kj3VRrBYIy1FkKK/img.png&quot; data-alt=&quot;노트북 놓기 편한 자리&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/Wbmte/btr0IGPd6Bn/gWhrr99kj3VRrBYIy1FkKK/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FWbmte%2Fbtr0IGPd6Bn%2FgWhrr99kj3VRrBYIy1FkKK%2Fimg.png&quot; onerror=&quot;this.onerror=null; this.src='//t1.daumcdn.net/tistory_admin/static/images/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;666&quot; data-filename=&quot;edited_KakaoTalk_20230227_184116617_04.jpg&quot; data-origin-width=&quot;500&quot; data-origin-height=&quot;666&quot;/&gt;&lt;/span&gt;&lt;figcaption&gt;노트북 놓기 편한 자리&lt;/figcaption&gt;
&lt;/figure&gt;
&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;이런 노트북 놓고 공부하기 좋은 자리가 한 쪽 벽면에 줄지어 있어서 책 읽거나 공부하기 좋다.&lt;/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;edited_KakaoTalk_20230227_184116617_07.jpg&quot; data-origin-width=&quot;500&quot; data-origin-height=&quot;666&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/eiJc69/btr1dmUW60r/ipbw6clTDtbQzIBaWz4sR1/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/eiJc69/btr1dmUW60r/ipbw6clTDtbQzIBaWz4sR1/img.png&quot; data-alt=&quot;편해 보였던 쇼파 자리&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/eiJc69/btr1dmUW60r/ipbw6clTDtbQzIBaWz4sR1/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FeiJc69%2Fbtr1dmUW60r%2Fipbw6clTDtbQzIBaWz4sR1%2Fimg.png&quot; onerror=&quot;this.onerror=null; this.src='//t1.daumcdn.net/tistory_admin/static/images/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;666&quot; data-filename=&quot;edited_KakaoTalk_20230227_184116617_07.jpg&quot; data-origin-width=&quot;500&quot; data-origin-height=&quot;666&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&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-filename=&quot;KakaoTalk_20230227_184116617.jpg&quot; data-origin-width=&quot;1440&quot; data-origin-height=&quot;1080&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/dVrUQo/btr0WfvVQmu/Vp9tCLpN11FX7XXgg7aqck/img.jpg&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/dVrUQo/btr0WfvVQmu/Vp9tCLpN11FX7XXgg7aqck/img.jpg&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/dVrUQo/btr0WfvVQmu/Vp9tCLpN11FX7XXgg7aqck/img.jpg&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FdVrUQo%2Fbtr0WfvVQmu%2FVp9tCLpN11FX7XXgg7aqck%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;1440&quot; height=&quot;1080&quot; data-filename=&quot;KakaoTalk_20230227_184116617.jpg&quot; data-origin-width=&quot;1440&quot; data-origin-height=&quot;1080&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;시그니처 메뉴가 정리되어 있는 메뉴판.&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;edited_edited_KakaoTalk_20230227_184116617_06.jpg&quot; data-origin-width=&quot;500&quot; data-origin-height=&quot;531&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/ye1D8/btr06WCAVgz/C6eknq8DJWOuPoQgltxoN0/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/ye1D8/btr06WCAVgz/C6eknq8DJWOuPoQgltxoN0/img.png&quot; data-alt=&quot;코르타도&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/ye1D8/btr06WCAVgz/C6eknq8DJWOuPoQgltxoN0/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2Fye1D8%2Fbtr06WCAVgz%2FC6eknq8DJWOuPoQgltxoN0%2Fimg.png&quot; onerror=&quot;this.onerror=null; this.src='//t1.daumcdn.net/tistory_admin/static/images/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;531&quot; data-filename=&quot;edited_edited_KakaoTalk_20230227_184116617_06.jpg&quot; data-origin-width=&quot;500&quot; data-origin-height=&quot;531&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;스페니쉬 라떼라는 코르타도. 이제보니 에스프레소 40ml. 우유 40ml 인거 같다. &lt;s&gt;그렇다면 정말 많이 남겠다.&lt;/s&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;밥먹고 배부른데 아아는 싫다면 추천. 따뜻하게만 가능하다.&lt;s&gt;&lt;/s&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;예쁘게 라떼 아트도 올려주셨다.&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&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_20230227_184116617_05.jpg&quot; data-origin-width=&quot;500&quot; data-origin-height=&quot;666&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/BcEHu/btr01UE1GyQ/uQAMqnH3kLrGtiB5GYrm40/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/BcEHu/btr01UE1GyQ/uQAMqnH3kLrGtiB5GYrm40/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/BcEHu/btr01UE1GyQ/uQAMqnH3kLrGtiB5GYrm40/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FBcEHu%2Fbtr01UE1GyQ%2FuQAMqnH3kLrGtiB5GYrm40%2Fimg.png&quot; onerror=&quot;this.onerror=null; this.src='//t1.daumcdn.net/tistory_admin/static/images/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;666&quot; data-filename=&quot;edited_KakaoTalk_20230227_184116617_05.jpg&quot; data-origin-width=&quot;500&quot; data-origin-height=&quot;666&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;와이파이 정보는 위와 같다.&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;어디나 사람 많은 삼성역. 맛있는 커피와 함께 조용한 카페 찾는다면 추천한다.&amp;nbsp;&lt;/p&gt;</description>
      <category>Ordinary</category>
      <category>디저트 맛집</category>
      <category>맛집</category>
      <category>봉은사역</category>
      <category>삼성역</category>
      <category>삼성역 맛집</category>
      <category>카공</category>
      <category>카페</category>
      <category>커피</category>
      <category>코엑스</category>
      <author>Nagneo</author>
      <guid isPermaLink="true">https://nagneo.tistory.com/36</guid>
      <comments>https://nagneo.tistory.com/36#entry36comment</comments>
      <pubDate>Mon, 27 Feb 2023 19:16:17 +0900</pubDate>
    </item>
    <item>
      <title>[Git] stash를 이용한 변경 내역 임시 저장 (옵션 및 꿀팁 포함)</title>
      <link>https://nagneo.tistory.com/35</link>
      <description>&lt;p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-origin-width=&quot;696&quot; data-origin-height=&quot;464&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/qmELp/btrWsVAP0mF/AQpAVLfoC0aaobxnIoQII0/img.jpg&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/qmELp/btrWsVAP0mF/AQpAVLfoC0aaobxnIoQII0/img.jpg&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/qmELp/btrWsVAP0mF/AQpAVLfoC0aaobxnIoQII0/img.jpg&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FqmELp%2FbtrWsVAP0mF%2FAQpAVLfoC0aaobxnIoQII0%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;696&quot; height=&quot;464&quot; data-origin-width=&quot;696&quot; data-origin-height=&quot;464&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;blockquote data-ke-style=&quot;style1&quot;&gt;&lt;span style=&quot;font-family: 'Noto Serif KR';&quot;&gt;Stash: (안전한 곳에) 넣어두다[숨기다]&lt;br /&gt;&lt;br /&gt;&lt;/span&gt;&lt;/blockquote&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;letter-spacing: 0px;&quot;&gt;&amp;nbsp; &amp;nbsp; 보통 한 번에 하나의 이슈만을 처리하면 좋겠지만, 일을 하다보면 여러개의 일을 처리해야 할때도 있고, 특정 브랜치에서 뭔가를 확인해야 할일 도 생긴다. 이 때,&amp;nbsp; 작업중인 내역을 커밋할 수는 없고, 날리기도 아까울 때 필수적으로 사용하게 되는 명령어가 바로 stash 이다.&amp;nbsp;&lt;/span&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;h3 data-ke-size=&quot;size23&quot;&gt;&lt;span style=&quot;letter-spacing: 0px;&quot;&gt;기본 사용법&lt;/span&gt;&lt;/h3&gt;
&lt;h4 data-ke-size=&quot;size20&quot;&gt;&lt;span style=&quot;letter-spacing: 0px;&quot;&gt;1) 저장(save)&lt;/span&gt;&lt;/h4&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;letter-spacing: 0px;&quot;&gt;save 뒤에 따옴표로 description을 포함하여 저장한다. &lt;/span&gt;&lt;/p&gt;
&lt;pre id=&quot;code_1673693472199&quot; class=&quot;bash&quot; data-ke-language=&quot;bash&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;$ git stash save '[Feature] ** 작업중'&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-origin-width=&quot;857&quot; data-origin-height=&quot;138&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/Ji4ET/btrWc13Sb5D/3Taxe4sKWQEhmHDedBZT8K/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/Ji4ET/btrWc13Sb5D/3Taxe4sKWQEhmHDedBZT8K/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/Ji4ET/btrWc13Sb5D/3Taxe4sKWQEhmHDedBZT8K/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FJi4ET%2FbtrWc13Sb5D%2F3Taxe4sKWQEhmHDedBZT8K%2Fimg.png&quot; onerror=&quot;this.onerror=null; this.src='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png'; this.srcset='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png';&quot; loading=&quot;lazy&quot; width=&quot;857&quot; height=&quot;138&quot; data-origin-width=&quot;857&quot; data-origin-height=&quot;138&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;/p&gt;
&lt;h4 data-ke-size=&quot;size20&quot;&gt;&lt;span style=&quot;letter-spacing: 0px;&quot;&gt;2) 목록 보기(list)&lt;/span&gt;&lt;/h4&gt;
&lt;pre id=&quot;code_1673693684484&quot; class=&quot;bash&quot; data-ke-language=&quot;bash&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;$ git stash list&lt;/code&gt;&lt;/pre&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;letter-spacing: 0px;&quot;&gt;위와 같이 저장한 목록은 list 명령어로 볼수 있다. stash는 스택으로 관리된다(FILO/선입후출). &lt;/span&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;letter-spacing: 0px;&quot;&gt;결과는 아래와 같이 출력된다.&lt;/span&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;h4 data-ke-size=&quot;size20&quot;&gt;&lt;span style=&quot;letter-spacing: 0px;&quot;&gt;3) 적용하기(apply)&lt;/span&gt;&lt;/h4&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;letter-spacing: 0px;&quot;&gt;변경 사항은 apply 명령어로 저장한다. 2)번에서 확인한 목록에서 적용할 목록을 적어주면 된다.&lt;/span&gt;&lt;/p&gt;
&lt;pre id=&quot;code_1673693843141&quot; class=&quot;bash&quot; data-ke-language=&quot;bash&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;// 0번째 stash를 적용하기 위해서는 단순히 apply 만 사용해도 적용된다.  
$ git stash apply

// 특정 stash를 적용할 때는 다음과 같이 적용한다. 
$ git stash apply stash@{n}&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-origin-width=&quot;1184&quot; data-origin-height=&quot;251&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/co0Kew/btrWbTL9p6E/Ne8MI6aIQ6Z3KdkRTc5KTk/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/co0Kew/btrWbTL9p6E/Ne8MI6aIQ6Z3KdkRTc5KTk/img.png&quot; data-alt=&quot;terminal은 git bash를 사용하였다.&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/co0Kew/btrWbTL9p6E/Ne8MI6aIQ6Z3KdkRTc5KTk/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2Fco0Kew%2FbtrWbTL9p6E%2FNe8MI6aIQ6Z3KdkRTc5KTk%2Fimg.png&quot; onerror=&quot;this.onerror=null; this.src='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png'; this.srcset='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png';&quot; loading=&quot;lazy&quot; width=&quot;1184&quot; height=&quot;251&quot; data-origin-width=&quot;1184&quot; data-origin-height=&quot;251&quot;/&gt;&lt;/span&gt;&lt;figcaption&gt;terminal은 git bash를 사용하였다.&lt;/figcaption&gt;
&lt;/figure&gt;
&lt;/p&gt;
&lt;h4 data-ke-size=&quot;size20&quot;&gt;&lt;span style=&quot;letter-spacing: 0px;&quot;&gt;4) 사용한 목록 삭제&lt;/span&gt;&lt;/h4&gt;
&lt;ul style=&quot;list-style-type: circle;&quot; data-ke-list-type=&quot;circle&quot;&gt;
&lt;li&gt;특정 목록 삭제(drop)&lt;/li&gt;
&lt;/ul&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;이미 적용했거나, 더 이상 사용하지 않은 stash는 아래 명령어로 삭제한다.&amp;nbsp;&lt;/p&gt;
&lt;pre id=&quot;code_1673694056364&quot; class=&quot;bash&quot; data-ke-language=&quot;bash&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;$ git stash drop stash@{n}&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-origin-width=&quot;1190&quot; data-origin-height=&quot;131&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/I4Tj7/btrWg0WU4VQ/Fcd4OhiBH5yjqTWiZ4kUHk/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/I4Tj7/btrWg0WU4VQ/Fcd4OhiBH5yjqTWiZ4kUHk/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/I4Tj7/btrWg0WU4VQ/Fcd4OhiBH5yjqTWiZ4kUHk/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FI4Tj7%2FbtrWg0WU4VQ%2FFcd4OhiBH5yjqTWiZ4kUHk%2Fimg.png&quot; onerror=&quot;this.onerror=null; this.src='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png'; this.srcset='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png';&quot; loading=&quot;lazy&quot; width=&quot;1190&quot; height=&quot;131&quot; data-origin-width=&quot;1190&quot; data-origin-height=&quot;131&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;/p&gt;
&lt;ul style=&quot;list-style-type: circle;&quot; data-ke-list-type=&quot;circle&quot;&gt;
&lt;li&gt;모든 목록 삭제(clear)&lt;/li&gt;
&lt;/ul&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;아래 명령어를 사용하면 모든 목록이 삭제된다. 주의해서 사용하자.&amp;nbsp;&lt;/p&gt;
&lt;pre id=&quot;code_1673694081758&quot; class=&quot;bash&quot; data-ke-language=&quot;bash&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;$ git stash clear&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-origin-width=&quot;1009&quot; data-origin-height=&quot;102&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/bIwySW/btrWdfASnmk/Q8MXTRmpXlkOtOZ5RHWgOK/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/bIwySW/btrWdfASnmk/Q8MXTRmpXlkOtOZ5RHWgOK/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/bIwySW/btrWdfASnmk/Q8MXTRmpXlkOtOZ5RHWgOK/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FbIwySW%2FbtrWdfASnmk%2FQ8MXTRmpXlkOtOZ5RHWgOK%2Fimg.png&quot; onerror=&quot;this.onerror=null; this.src='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png'; this.srcset='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png';&quot; loading=&quot;lazy&quot; width=&quot;1009&quot; height=&quot;102&quot; data-origin-width=&quot;1009&quot; data-origin-height=&quot;102&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;span style=&quot;letter-spacing: 0px;&quot;&gt;-u: untracked 파일 저장 (필수)&lt;/span&gt;&lt;/h3&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;letter-spacing: 0px;&quot;&gt;사실 위에 내용만 가지고 사용한다면 stash는 당신이 원하는 대로 동작하지 않을 가능성이 높다. 왜냐하면 stash는 나도 처음에는 모르고 사용하다가 작성중인 파일을 날려먹은 경험이 있다. (눙물&lt;/span&gt;&lt;span style=&quot;letter-spacing: 0px;&quot;&gt;ㅠㅠ)&lt;/span&gt;&lt;span style=&quot;letter-spacing: 0px;&quot;&gt;&amp;nbsp;&lt;/span&gt;&lt;/p&gt;
&lt;pre id=&quot;code_1673694951305&quot; class=&quot;bash&quot; data-ke-language=&quot;bash&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;$ git stash -u
$ git stash --include-untracked&lt;/code&gt;&lt;/pre&gt;
&lt;p data-ke-size=&quot;size18&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;h3 data-ke-size=&quot;size23&quot;&gt;&lt;span style=&quot;letter-spacing: 0px;&quot;&gt;--index: staged 상태까지 저장하기 및 불러오기&lt;/span&gt;&lt;/h3&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;letter-spacing: 0px;&quot;&gt;-u 옵션을 이용해서 모든 타일을 저장했다면 불러올때는 --index를 이용하여 stage 상태까지 불러오기 할 수 있다. &lt;/span&gt;&lt;/p&gt;
&lt;pre id=&quot;code_1673695497377&quot; class=&quot;bash&quot; data-ke-language=&quot;bash&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;$ git stash apply --index&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;span style=&quot;letter-spacing: 0px;&quot;&gt;그외 명령어들&lt;/span&gt;&lt;/h3&gt;
&lt;h4 data-ke-size=&quot;size20&quot;&gt;1) 적용과 동시에 삭제하기.&lt;/h4&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;계속해서 쌓이는 stash들을 일일이 관리하기 귀찮다면 아래 명령어를 이용해서 사용하면서 삭제할 수 있다. 다만, 바로 삭제됨으로 적용할 stash가 무엇인지 정확하게 적는 것이 중요할 것이다.&amp;nbsp;&lt;/p&gt;
&lt;pre id=&quot;code_1673694408697&quot; class=&quot;bash&quot; data-ke-language=&quot;bash&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;$ git stash pop&lt;/code&gt;&lt;/pre&gt;
&lt;h4 data-ke-size=&quot;size20&quot;&gt;&lt;span style=&quot;letter-spacing: 0px;&quot;&gt;2) 되돌리기&lt;/span&gt;&lt;span style=&quot;letter-spacing: 0px;&quot;&gt;&lt;/span&gt;&lt;/h4&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;stask를 무자비하게 사용하다 보면 해당 브런치에서 불러오지 말아야 할 stash를 불러오기도 한다.&amp;nbsp; &amp;nbsp;그런데 이 때, 해당 브랜치에 이미 작업하던 내용이 있다면?? restore를 이용해서 변경 내역을 마냥 지울 수도 없는 일이다.&amp;nbsp; 그 때를 위해 다음의 명령어를 기억해두자.&amp;nbsp;&lt;/p&gt;
&lt;pre id=&quot;code_1673694647737&quot; class=&quot;bash&quot; data-ke-language=&quot;bash&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;$ git stash show -p | git apply -R&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;span style=&quot;letter-spacing: 0px;&quot;&gt;&lt;span style=&quot;letter-spacing: 0px;&quot;&gt;Reference&lt;/span&gt;&lt;/span&gt;&lt;/h3&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;letter-spacing: 0px;&quot;&gt;&lt;span style=&quot;letter-spacing: 0px;&quot;&gt;&lt;a href=&quot;https://git-scm.com/book/ko/v2/Git-%EB%8F%84%EA%B5%AC-Stashing%EA%B3%BC-Cleaning&quot; target=&quot;_blank&quot; rel=&quot;noopener&quot;&gt;https://git-scm.com/book/ko/v2/Git-%EB%8F%84%EA%B5%AC-Stashing%EA%B3%BC-Cleaning&lt;/a&gt;&lt;/span&gt;&lt;/span&gt;&lt;/p&gt;
&lt;figure id=&quot;og_1673694898772&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;Git - Stashing과 Cleaning&quot; data-og-description=&quot;작업하던 저장소가 완전 지저분해져서 Git에게 진짜로 강제로 정리하도록 해야 하는 경우가 생길 수 있다. 예를 들어 Git 버전관리 데이터가 포함된 디렉토리를 복사해왔거나 서브모듈 디렉토리&quot; data-og-host=&quot;git-scm.com&quot; data-og-source-url=&quot;https://git-scm.com/book/ko/v2/Git-%EB%8F%84%EA%B5%AC-Stashing%EA%B3%BC-Cleaning&quot; data-og-url=&quot;https://git-scm.com/book/ko/v2/Git-%EB%8F%84%EA%B5%AC-Stashing%EA%B3%BC-Cleaning&quot; data-og-image=&quot;&quot;&gt;&lt;a href=&quot;https://git-scm.com/book/ko/v2/Git-%EB%8F%84%EA%B5%AC-Stashing%EA%B3%BC-Cleaning&quot; target=&quot;_blank&quot; rel=&quot;noopener&quot; data-source-url=&quot;https://git-scm.com/book/ko/v2/Git-%EB%8F%84%EA%B5%AC-Stashing%EA%B3%BC-Cleaning&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;Git - Stashing과 Cleaning&lt;/p&gt;
&lt;p class=&quot;og-desc&quot; data-ke-size=&quot;size16&quot;&gt;작업하던 저장소가 완전 지저분해져서 Git에게 진짜로 강제로 정리하도록 해야 하는 경우가 생길 수 있다. 예를 들어 Git 버전관리 데이터가 포함된 디렉토리를 복사해왔거나 서브모듈 디렉토리&lt;/p&gt;
&lt;p class=&quot;og-host&quot; data-ke-size=&quot;size16&quot;&gt;git-scm.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;span style=&quot;letter-spacing: 0px;&quot;&gt;&lt;span style=&quot;letter-spacing: 0px;&quot;&gt;이상 꿀팁인지는 모르겠지만, 다양한 stash 사용법을 정리해보았다.&lt;/span&gt;&lt;/span&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;letter-spacing: 0px;&quot;&gt;혹시 잘못된 내용 &lt;/span&gt;&lt;span style=&quot;letter-spacing: 0px;&quot;&gt;이나 다른 꿀팁 있다면 댓글로 남겨주세요.!&lt;/span&gt;&lt;/p&gt;</description>
      <category>Computer Engineering/Common</category>
      <category>Git</category>
      <category>git command</category>
      <category>git stash</category>
      <author>Nagneo</author>
      <guid isPermaLink="true">https://nagneo.tistory.com/35</guid>
      <comments>https://nagneo.tistory.com/35#entry35comment</comments>
      <pubDate>Sat, 14 Jan 2023 19:36:30 +0900</pubDate>
    </item>
    <item>
      <title>[Daily] 기계식 키보드 청소하기 (다이소제공)</title>
      <link>https://nagneo.tistory.com/33</link>
      <description>&lt;p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-origin-width=&quot;600&quot; data-origin-height=&quot;376&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/c4hoQH/btrMUGhdptJ/HqkKkdIaS7r3Ju7liUkTpk/img.jpg&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/c4hoQH/btrMUGhdptJ/HqkKkdIaS7r3Ju7liUkTpk/img.jpg&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/c4hoQH/btrMUGhdptJ/HqkKkdIaS7r3Ju7liUkTpk/img.jpg&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2Fc4hoQH%2FbtrMUGhdptJ%2FHqkKkdIaS7r3Ju7liUkTpk%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;600&quot; height=&quot;376&quot; data-origin-width=&quot;600&quot; data-origin-height=&quot;376&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;100년만에 회사 키보드를 청소했다.&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;더럽다고 생각한지는 꽤 되었는데 청소할 엄두는 내지 못했다.&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;무엇보다 나의 퇴근 시간은 소중하니까.&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;점심시간을 이용해 빠르게 청소하고, 후기도 빠르게 남겨 보려고 한다.&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;나의 키보드는 레오폴드 FC750R 저소음 적축&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;h3 data-ke-size=&quot;size23&quot;&gt;준비물&lt;/h3&gt;
&lt;h4 data-ke-size=&quot;size20&quot;&gt;에어스프레이, 미니 빗자루, 청소 티슈&lt;/h4&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;모두 다이소 제공&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;내돈내산 아님 동료돈동료산.&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;처음 청소를 마음 먹었을 때는&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;거창하게 키보드 청소기를 사려고 찾아보기도 했는데&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;역시나 출력이 좋을수록 가격이 비싸고,&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;많이 쓰지도 않고 둘데도 없어서 알아보다가 에어스프레이로 청소하였다.&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;하고나니 굳이 그걸 살 필요없었던 거 같다.&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;h3 data-ke-size=&quot;size23&quot;&gt;본격 청소하기&lt;/h3&gt;
&lt;h4 data-ke-size=&quot;size20&quot;&gt;1. 키캡 리무버로 키캡을 분리한다.&lt;/h4&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;순서대로 분리가 중요하다. 화살표 키의 경우 헷갈리게 두면, 다시 꽂을 때 당황스럽다.&amp;nbsp;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-filename=&quot;edited_KakaoTalk_20220925_164150488.jpg&quot; data-origin-width=&quot;666&quot; data-origin-height=&quot;500&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/9uLlL/btrMVGU6yID/9wuARvj2K9fachxjGqBTi0/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/9uLlL/btrMVGU6yID/9wuARvj2K9fachxjGqBTi0/img.png&quot; data-alt=&quot;더러운 키보드. 확대 주의&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/9uLlL/btrMVGU6yID/9wuARvj2K9fachxjGqBTi0/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2F9uLlL%2FbtrMVGU6yID%2F9wuARvj2K9fachxjGqBTi0%2Fimg.png&quot; onerror=&quot;this.onerror=null; this.src='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png'; this.srcset='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png';&quot; loading=&quot;lazy&quot; width=&quot;666&quot; height=&quot;500&quot; data-filename=&quot;edited_KakaoTalk_20220925_164150488.jpg&quot; data-origin-width=&quot;666&quot; data-origin-height=&quot;500&quot;/&gt;&lt;/span&gt;&lt;figcaption&gt;더러운 키보드. 확대 주의&lt;/figcaption&gt;
&lt;/figure&gt;
&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-filename=&quot;KakaoTalk_20220925_164150488_03.jpg&quot; data-origin-width=&quot;1440&quot; data-origin-height=&quot;1080&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/umne7/btrMYqRDgi4/NwK1pDzgFEBpfHHLdEkEr1/img.jpg&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/umne7/btrMYqRDgi4/NwK1pDzgFEBpfHHLdEkEr1/img.jpg&quot; data-alt=&quot;잘못 놓인 키캡을 찾으시오.&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/umne7/btrMYqRDgi4/NwK1pDzgFEBpfHHLdEkEr1/img.jpg&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2Fumne7%2FbtrMYqRDgi4%2FNwK1pDzgFEBpfHHLdEkEr1%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;1440&quot; height=&quot;1080&quot; data-filename=&quot;KakaoTalk_20220925_164150488_03.jpg&quot; data-origin-width=&quot;1440&quot; data-origin-height=&quot;1080&quot;/&gt;&lt;/span&gt;&lt;figcaption&gt;잘못 놓인 키캡을 찾으시오.&lt;/figcaption&gt;
&lt;/figure&gt;
&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;주의 했으나 결국 하나 틀려서 나중에 실제 타자 칠 때 이상함을 감지했다.&amp;nbsp;&lt;/p&gt;
&lt;h4 data-ke-size=&quot;size20&quot;&gt;2. 에어스프레이로 내부 먼지를 떼어낸다&amp;nbsp;&lt;/h4&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;620&quot; data-origin-height=&quot;827&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/c00avK/btrMVG8D15t/fOWH5bPQkJl29ytqOvEsa1/img.jpg&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/c00avK/btrMVG8D15t/fOWH5bPQkJl29ytqOvEsa1/img.jpg&quot; data-alt=&quot;사진 참고&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/c00avK/btrMVG8D15t/fOWH5bPQkJl29ytqOvEsa1/img.jpg&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2Fc00avK%2FbtrMVG8D15t%2FfOWH5bPQkJl29ytqOvEsa1%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;620&quot; height=&quot;827&quot; data-origin-width=&quot;620&quot; data-origin-height=&quot;827&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;3. 빗자루로 먼지를 털어낸다.&lt;/h4&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_20220925_164150488_01.jpg&quot; data-origin-width=&quot;533&quot; data-origin-height=&quot;399&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/clEg4T/btrM0nGYSAV/6COZYvvmyqiSXbtxM5FIP0/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/clEg4T/btrM0nGYSAV/6COZYvvmyqiSXbtxM5FIP0/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/clEg4T/btrM0nGYSAV/6COZYvvmyqiSXbtxM5FIP0/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FclEg4T%2FbtrM0nGYSAV%2F6COZYvvmyqiSXbtxM5FIP0%2Fimg.png&quot; onerror=&quot;this.onerror=null; this.src='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png'; this.srcset='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png';&quot; loading=&quot;lazy&quot; width=&quot;533&quot; height=&quot;399&quot; data-filename=&quot;edited_KakaoTalk_20220925_164150488_01.jpg&quot; data-origin-width=&quot;533&quot; data-origin-height=&quot;399&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;/p&gt;
&lt;h4 data-ke-size=&quot;size20&quot;&gt;4. 클리너/물티슈로 굳은 먼지를 닦는다.&lt;/h4&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;쓸었으면 닦아야지.&lt;/p&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-filename=&quot;edited_KakaoTalk_20220925_164150488_02.jpg&quot; data-origin-width=&quot;666&quot; data-origin-height=&quot;500&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/ArLLO/btrMVve6a3i/ykfvHB6iIDmygD99ZL5T50/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/ArLLO/btrMVve6a3i/ykfvHB6iIDmygD99ZL5T50/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/ArLLO/btrMVve6a3i/ykfvHB6iIDmygD99ZL5T50/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FArLLO%2FbtrMVve6a3i%2FykfvHB6iIDmygD99ZL5T50%2Fimg.png&quot; onerror=&quot;this.onerror=null; this.src='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png'; this.srcset='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png';&quot; loading=&quot;lazy&quot; width=&quot;666&quot; height=&quot;500&quot; data-filename=&quot;edited_KakaoTalk_20220925_164150488_02.jpg&quot; data-origin-width=&quot;666&quot; data-origin-height=&quot;500&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;/p&gt;
&lt;h4 data-ke-size=&quot;size20&quot;&gt;5. 키캡을 하나하나 닦으면서 순서대로 꽂는다.&amp;nbsp;&lt;/h4&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;이게 예상외로 오래 걸린다ㅠㅠ 집에서 닦으신다면, 물에 담가 씻는것도 좋은 방법일거 같다. 잘 말릴수 만 있다면.!!&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;깔끔해진 모습. 40분정도 소요되었다.&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_edited_KakaoTalk_20220925_164150488_04.jpg&quot; data-origin-width=&quot;533&quot; data-origin-height=&quot;302&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/ndalB/btrMU6mgJKb/xkgzQ4tK3JMbMTPdeZKnHK/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/ndalB/btrMU6mgJKb/xkgzQ4tK3JMbMTPdeZKnHK/img.png&quot; data-alt=&quot;보이시나요?? ㅂ과 ㅈ의 위치가 바뀌었다ㅋㅋㅠㅠㅠ&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/ndalB/btrMU6mgJKb/xkgzQ4tK3JMbMTPdeZKnHK/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FndalB%2FbtrMU6mgJKb%2FxkgzQ4tK3JMbMTPdeZKnHK%2Fimg.png&quot; onerror=&quot;this.onerror=null; this.src='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png'; this.srcset='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png';&quot; loading=&quot;lazy&quot; width=&quot;533&quot; height=&quot;302&quot; data-filename=&quot;edited_edited_KakaoTalk_20220925_164150488_04.jpg&quot; data-origin-width=&quot;533&quot; data-origin-height=&quot;302&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;</description>
      <category>Ordinary</category>
      <category>fc750r</category>
      <category>다이소</category>
      <category>레오폴드</category>
      <category>먼지제거스프레이</category>
      <category>사무실청소</category>
      <category>에어건</category>
      <category>에어스프레이</category>
      <category>키보드청소</category>
      <category>키보드청소기</category>
      <category>키보드청소시간</category>
      <author>Nagneo</author>
      <guid isPermaLink="true">https://nagneo.tistory.com/33</guid>
      <comments>https://nagneo.tistory.com/33#entry33comment</comments>
      <pubDate>Mon, 19 Sep 2022 07:41:13 +0900</pubDate>
    </item>
    <item>
      <title>[Hello, React!] Trouble Shooting - Sandbox 코드 VScode에서 실행하기</title>
      <link>https://nagneo.tistory.com/30</link>
      <description>&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-origin-width=&quot;1280&quot; data-origin-height=&quot;700&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/ciRE66/btrGJ1LfFih/gKmsaPh7xE4Z2K5Xr25sak/img.jpg&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/ciRE66/btrGJ1LfFih/gKmsaPh7xE4Z2K5Xr25sak/img.jpg&quot; data-alt=&quot;Hello, React&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/ciRE66/btrGJ1LfFih/gKmsaPh7xE4Z2K5Xr25sak/img.jpg&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FciRE66%2FbtrGJ1LfFih%2FgKmsaPh7xE4Z2K5Xr25sak%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;618&quot; height=&quot;338&quot; data-origin-width=&quot;1280&quot; data-origin-height=&quot;700&quot;/&gt;&lt;/span&gt;&lt;figcaption&gt;Hello, React&lt;/figcaption&gt;
&lt;/figure&gt;
&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;샌드박스에서 React 코딩을 하다가 VScode로 복사 해왔는데, 몇가지 오류를 경험하고 해결 과정을 기록해둔다.&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;1. npm start 가 안될 때&lt;/h2&gt;
&lt;pre id=&quot;code_1657191739609&quot; class=&quot;shell&quot; data-ke-language=&quot;shell&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;PS C:\Users\workspace\react-hooks\src&amp;gt; npm start

&amp;gt; react@1.0.0 start
&amp;gt; react-scripts start

'react-scripts'은(는) 내부 또는 외부 명령, 실행할 수 있는 프로그램, 또는
배치 파일이 아닙니다.&lt;/code&gt;&lt;/pre&gt;
&lt;h3 data-ke-size=&quot;size23&quot;&gt;해결 방법&amp;nbsp;&lt;/h3&gt;
&lt;pre id=&quot;code_1657191889738&quot; class=&quot;shell&quot; data-ke-language=&quot;shell&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;npm install -save react-scripts&lt;/code&gt;&lt;/pre&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;해당 명령어를 실행하면 node_modules를 폴더가 생기면서&amp;nbsp; npm start가 가능해진다.&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;h2 data-ke-size=&quot;size26&quot;&gt;2. Manifest: Line: 1, column: 1, Syntax error. 오류&lt;/h2&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-origin-width=&quot;940&quot; data-origin-height=&quot;104&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/bBJ5HY/btrGLAeAAKS/D6LwmFl7ul0bII30O4wrD1/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/bBJ5HY/btrGLAeAAKS/D6LwmFl7ul0bII30O4wrD1/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/bBJ5HY/btrGLAeAAKS/D6LwmFl7ul0bII30O4wrD1/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FbBJ5HY%2FbtrGLAeAAKS%2FD6LwmFl7ul0bII30O4wrD1%2Fimg.png&quot; onerror=&quot;this.onerror=null; this.src='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png'; this.srcset='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png';&quot; loading=&quot;lazy&quot; width=&quot;940&quot; height=&quot;104&quot; data-origin-width=&quot;940&quot; data-origin-height=&quot;104&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;&lt;span style=&quot;color: #666666;&quot;&gt;index.html&lt;span&gt; 파일을 열어 아래와 같이 상대경로를 수정해준다.&lt;/span&gt;&lt;/span&gt;&lt;/p&gt;
&lt;pre id=&quot;code_1657192753504&quot; class=&quot;shell&quot; data-ke-language=&quot;shell&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;&amp;lt;link rel=&quot;manifest&quot; href=&quot;%PUBLIC_URL%/manifest.json&quot; /&amp;gt;

=&amp;gt; &amp;lt;link rel=&quot;/manifest&quot; href=&quot;%PUBLIC_URL%/manifest.json&quot; /&amp;gt;&lt;/code&gt;&lt;/pre&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;참고로, manifest.json 파일은 해당 React 앱이 안드로이 홈 스크린에 추가될 데 메타정보를 제공한다고 한다. (주석 참고: &lt;span style=&quot;color: #546e7a;&quot;&gt;manifest.json provides metadata used when your web app is added to the &lt;/span&gt;&lt;span style=&quot;color: #546e7a;&quot;&gt;homescreen on Android. See &lt;a href=&quot;https://developers.google.com/web/fundamentals/engage-and-retain/web-app-manifest/&quot;&gt;https://developers.google.com/web/fundamentals/engage-and-retain/web-app-manifest/ )&lt;/a&gt;&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;2. ETC. npm ERR! code EJSONPARSE&lt;/h2&gt;
&lt;pre id=&quot;code_1657191962639&quot; class=&quot;shell&quot; data-ke-language=&quot;shell&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;npm ERR! code EJSONPARSE
npm ERR! path C:\Users\tosk3\workspace\react-hooks/package.json&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;/h3&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;뭐 명령어만 입력하면, 자꾸 Json 파싱이 안된다는 것이다. 알고보니 정말로 json 파일에 &quot;,&quot;가 남아있었다.&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;잘 생각해보니 sandbox에서 코드를 받아서 typescript관련 설정을 지우면서 (나 타입스크립트 안쓸건데?? 하면서 지워버림..ㅎㅎ) &quot;,&quot; 지우는 것을 빼먹은 것이다.&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;h2 data-ke-size=&quot;size26&quot;&gt;Reference&lt;/h2&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;a href=&quot;https://codesandbox.io/&quot; target=&quot;_blank&quot; rel=&quot;noopener&quot;&gt;https://codesandbox.io/&lt;/a&gt;&lt;/p&gt;
&lt;figure id=&quot;og_1657192361909&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;CodeSandbox: Online Code Editor and IDE for Rapid Web Development&quot; data-og-description=&quot;Optimized for frameworks Custom environments built specifically for React, Vue, Angular, and many more.&quot; data-og-host=&quot;codesandbox.io&quot; data-og-source-url=&quot;https://codesandbox.io/&quot; data-og-url=&quot;https://codesandbox.io/&quot; data-og-image=&quot;https://scrap.kakaocdn.net/dn/wKmHp/hyO0OQluEB/k7kBg6CZt5VcSJY5j4p8j0/img.jpg?width=2720&amp;amp;height=640&amp;amp;face=0_0_2720_640&quot;&gt;&lt;a href=&quot;https://codesandbox.io/&quot; target=&quot;_blank&quot; rel=&quot;noopener&quot; data-source-url=&quot;https://codesandbox.io/&quot;&gt;
&lt;div class=&quot;og-image&quot; style=&quot;background-image: url('https://scrap.kakaocdn.net/dn/wKmHp/hyO0OQluEB/k7kBg6CZt5VcSJY5j4p8j0/img.jpg?width=2720&amp;amp;height=640&amp;amp;face=0_0_2720_640');&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;CodeSandbox: Online Code Editor and IDE for Rapid Web Development&lt;/p&gt;
&lt;p class=&quot;og-desc&quot; data-ke-size=&quot;size16&quot;&gt;Optimized for frameworks Custom environments built specifically for React, Vue, Angular, and many more.&lt;/p&gt;
&lt;p class=&quot;og-host&quot; data-ke-size=&quot;size16&quot;&gt;codesandbox.io&lt;/p&gt;
&lt;/div&gt;
&lt;/a&gt;&lt;/figure&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;a href=&quot;https://anerim.tistory.com/209&quot; target=&quot;_blank&quot; rel=&quot;noopener&quot;&gt;https://anerim.tistory.com/209&lt;/a&gt;&lt;/p&gt;
&lt;figure id=&quot;og_1657192867630&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;[react Error] Manifest: Line: 1, column: 1, Syntax error.&quot; data-og-description=&quot;안녕하세요. 디자인도 하고, 개발도 하는 '디발자 뚝딱'입니다. 이번 포스팅에서는 리액트로 개발할 때 볼 수 있는 'Manifest: Line: 1, column: 1, Syntax error.' 에러 해결방법에 대해 알아보겠습니다. CRA&quot; data-og-host=&quot;anerim.tistory.com&quot; data-og-source-url=&quot;https://anerim.tistory.com/209&quot; data-og-url=&quot;https://anerim.tistory.com/209&quot; data-og-image=&quot;https://scrap.kakaocdn.net/dn/hlgUt/hyO0KAoUK6/n8A4PXMZ5o7kXz1wskHpS1/img.png?width=487&amp;amp;height=53&amp;amp;face=0_0_487_53,https://scrap.kakaocdn.net/dn/rO0gT/hyO0R0z3zG/juKYK1s7PDGsxAUa98yer1/img.png?width=487&amp;amp;height=53&amp;amp;face=0_0_487_53,https://scrap.kakaocdn.net/dn/IN61O/hyO0RfdR86/zQepetKOnbb3AklvXKuOOK/img.png?width=264&amp;amp;height=200&amp;amp;face=0_0_264_200&quot;&gt;&lt;a href=&quot;https://anerim.tistory.com/209&quot; target=&quot;_blank&quot; rel=&quot;noopener&quot; data-source-url=&quot;https://anerim.tistory.com/209&quot;&gt;
&lt;div class=&quot;og-image&quot; style=&quot;background-image: url('https://scrap.kakaocdn.net/dn/hlgUt/hyO0KAoUK6/n8A4PXMZ5o7kXz1wskHpS1/img.png?width=487&amp;amp;height=53&amp;amp;face=0_0_487_53,https://scrap.kakaocdn.net/dn/rO0gT/hyO0R0z3zG/juKYK1s7PDGsxAUa98yer1/img.png?width=487&amp;amp;height=53&amp;amp;face=0_0_487_53,https://scrap.kakaocdn.net/dn/IN61O/hyO0RfdR86/zQepetKOnbb3AklvXKuOOK/img.png?width=264&amp;amp;height=200&amp;amp;face=0_0_264_200');&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;[react Error] Manifest: Line: 1, column: 1, Syntax error.&lt;/p&gt;
&lt;p class=&quot;og-desc&quot; data-ke-size=&quot;size16&quot;&gt;안녕하세요. 디자인도 하고, 개발도 하는 '디발자 뚝딱'입니다. 이번 포스팅에서는 리액트로 개발할 때 볼 수 있는 'Manifest: Line: 1, column: 1, Syntax error.' 에러 해결방법에 대해 알아보겠습니다. CRA&lt;/p&gt;
&lt;p class=&quot;og-host&quot; data-ke-size=&quot;size16&quot;&gt;anerim.tistory.com&lt;/p&gt;
&lt;/div&gt;
&lt;/a&gt;&lt;/figure&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;</description>
      <category>Computer Engineering/Web</category>
      <category>CodeSandbox</category>
      <category>react</category>
      <category>vscode</category>
      <category>리액트</category>
      <author>Nagneo</author>
      <guid isPermaLink="true">https://nagneo.tistory.com/30</guid>
      <comments>https://nagneo.tistory.com/30#entry30comment</comments>
      <pubDate>Thu, 7 Jul 2022 20:21:49 +0900</pubDate>
    </item>
  </channel>
</rss>