<?xml version="1.0" encoding="UTF-8"?>
<rss version="2.0">
  <channel>
    <title>sammyDevLog</title>
    <link>https://23log.tistory.com/</link>
    <description>우뇌가 발달한 개발자, 새미의 개발로그</description>
    <language>ko</language>
    <pubDate>Wed, 29 Jul 2026 12:22:23 +0900</pubDate>
    <generator>TISTORY</generator>
    <ttl>100</ttl>
    <managingEditor>3sammy</managingEditor>
    <image>
      <title>sammyDevLog</title>
      <url>https://tistory1.daumcdn.net/tistory/3064062/attach/751deb6a8704463ca3d9080f79988584</url>
      <link>https://23log.tistory.com</link>
    </image>
    <item>
      <title>[Python][MAC] VSCode에서 ModuleNotFoundError: No module named 계속 발생</title>
      <link>https://23log.tistory.com/195</link>
      <description>&lt;blockquote data-ke-style=&quot;style3&quot;&gt;&lt;b&gt;개발 환경&lt;/b&gt;&lt;br /&gt;- device : 2021 Macbook Pro M1 Pro 14inch (맥북프로 14 M1 Pro 모델)&lt;br /&gt;- OS : macOS Ventura 13.2&lt;/blockquote&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;h1&gt; &amp;nbsp;에러 내용 및 상황&lt;/h1&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;저는 MAC 환경에서, Python을 설치했고 VSCode에서 확장프로그램을 다운받아 사용중입니다. 디버깅이 필요해서 VSCode의 &lt;b&gt;Python Debugger&lt;/b&gt;를 추가 다운해서 사용했는데, 계속 모듈이 없다는 에러메세지만 발생하고 있었습니다.&lt;/p&gt;
&lt;pre class=&quot;yaml&quot;&gt;&lt;code&gt;ModuleNotFoundError: No module named 'requests'
&lt;/code&gt;&lt;/pre&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;VSCode의 터미널에서 &lt;span style=&quot;color: #333333; text-align: start;&quot;&gt;&lt;b&gt;python3 main.py&lt;/b&gt;&lt;span&gt;&amp;nbsp;&lt;/span&gt;&lt;/span&gt;를 하면 정상적으로 실행이 잘 되었었고, 혹시나 하는 맘에&lt;/p&gt;
&lt;ul style=&quot;list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li&gt;pip install requests&lt;/li&gt;
&lt;li&gt;pip3 install requests&lt;/li&gt;
&lt;li&gt;pip uninstall requests &amp;rarr; pip install requests&lt;/li&gt;
&lt;/ul&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;재설치까지 모두 해보았지만 결국 안되었습니다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;디버깅은 아래의 코드가 실행되었습니다.&lt;/p&gt;
&lt;pre class=&quot;awk&quot;&gt;&lt;code&gt;/usr/bin/env /usr/local/bin/python3 /Users/{folder}/.vscode/extensions/ms-python.debugpy-2024.6.0-darwin-arm64/bundled/libs/debugpy/
adapter/../../debugpy/launcher 53409 -- main.py 
&lt;/code&gt;&lt;/pre&gt;
&lt;h1&gt;&amp;nbsp;&lt;/h1&gt;
&lt;h1&gt; &amp;nbsp;원인&lt;/h1&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;원인은 VSCode IDE 에서의 Python 실행 환경 버젼의 싱크가 맞지 않아서입니다. IDE의 실행 환경을 맞춰주면 됩니다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;hr contenteditable=&quot;false&quot; data-ke-type=&quot;horizontalRule&quot; data-ke-style=&quot;style3&quot; /&gt;
&lt;h1&gt; &amp;nbsp;해결&lt;/h1&gt;
&lt;p data-ke-size=&quot;size18&quot;&gt;1. 터미널에서 &lt;span style=&quot;color: #ef5369;&quot;&gt;&lt;b&gt;python3 &amp;mdash;-version&lt;/b&gt;&lt;/span&gt; 을 해서, 현재 버젼을 확인합니다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;위 처럼 version을 체크해야지, 현재 vscode에서 구동할때 사용하는 버젼을 알 수 있습니다.&lt;/p&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-origin-width=&quot;2000&quot; data-origin-height=&quot;472&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/bo3jdv/btsHq4FTe7v/IjuiSR671tYqRrX24m1Kd0/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/bo3jdv/btsHq4FTe7v/IjuiSR671tYqRrX24m1Kd0/img.png&quot; data-alt=&quot;저는 Python 3.9.13 이네요.&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/bo3jdv/btsHq4FTe7v/IjuiSR671tYqRrX24m1Kd0/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2Fbo3jdv%2FbtsHq4FTe7v%2FIjuiSR671tYqRrX24m1Kd0%2Fimg.png&quot; onerror=&quot;this.onerror=null; this.src='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png'; this.srcset='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png';&quot; loading=&quot;lazy&quot; width=&quot;534&quot; height=&quot;126&quot; data-origin-width=&quot;2000&quot; data-origin-height=&quot;472&quot;/&gt;&lt;/span&gt;&lt;figcaption&gt;저는 Python 3.9.13 이네요.&lt;/figcaption&gt;
&lt;/figure&gt;
&lt;/p&gt;
&lt;ol style=&quot;list-style-type: decimal;&quot; data-ke-list-type=&quot;decimal&quot;&gt;
&lt;li style=&quot;list-style-type: none;&quot;&gt;&amp;nbsp;&lt;/li&gt;
&lt;/ol&gt;
&lt;p data-ke-size=&quot;size18&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size18&quot;&gt;2. VSCode에서 명령어 창을 열어 아래 순서대로 구동 환경을 바꿔줍니다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;color: #333333; text-align: start;&quot;&gt;2-1.&lt;span&gt;&amp;nbsp;&lt;/span&gt;&lt;/span&gt;&lt;span style=&quot;background-color: #000000; color: #eb5757;&quot; data-token-index=&quot;0&quot;&gt;cmd + shift + P&lt;/span&gt;&lt;span style=&quot;color: #333333; text-align: start;&quot;&gt;&lt;span&gt;&amp;nbsp;&lt;/span&gt;를 눌러, 커맨드 창을 엽니다.&lt;/span&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;color: #333333; text-align: start;&quot;&gt;2-2.&lt;span&gt;&amp;nbsp;&lt;/span&gt;&lt;/span&gt;&lt;span style=&quot;background-color: #000000; color: #eb5757;&quot; data-token-index=&quot;0&quot;&gt;Python: create Environment&lt;/span&gt;&lt;span style=&quot;color: #333333; text-align: start;&quot;&gt;&lt;span&gt;&amp;nbsp;&lt;/span&gt;을 입력하여 구동 환경을 만들어줍니다.&lt;/span&gt;&lt;/p&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-origin-width=&quot;2000&quot; data-origin-height=&quot;473&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/dT1TRn/btsHpsVNWHL/P1ccUaBmIWQSZylc6dtZV0/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/dT1TRn/btsHpsVNWHL/P1ccUaBmIWQSZylc6dtZV0/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/dT1TRn/btsHpsVNWHL/P1ccUaBmIWQSZylc6dtZV0/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FdT1TRn%2FbtsHpsVNWHL%2FP1ccUaBmIWQSZylc6dtZV0%2Fimg.png&quot; onerror=&quot;this.onerror=null; this.src='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png'; this.srcset='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png';&quot; loading=&quot;lazy&quot; width=&quot;576&quot; height=&quot;136&quot; data-origin-width=&quot;2000&quot; data-origin-height=&quot;473&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;2-3. Venv를 클릭합니다.&lt;/p&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-origin-width=&quot;2000&quot; data-origin-height=&quot;320&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/cCg195/btsHpw4WyBb/BLTqLtkktzhcTHPWTD810K/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/cCg195/btsHpw4WyBb/BLTqLtkktzhcTHPWTD810K/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/cCg195/btsHpw4WyBb/BLTqLtkktzhcTHPWTD810K/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FcCg195%2FbtsHpw4WyBb%2FBLTqLtkktzhcTHPWTD810K%2Fimg.png&quot; onerror=&quot;this.onerror=null; this.src='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png'; this.srcset='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png';&quot; loading=&quot;lazy&quot; width=&quot;574&quot; height=&quot;92&quot; data-origin-width=&quot;2000&quot; data-origin-height=&quot;320&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;2-4. 1번에서 확인한 자신의 버젼과 동일한 Path를 선택합니다.&lt;/p&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-origin-width=&quot;2000&quot; data-origin-height=&quot;549&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/vr62R/btsHpKPppKZ/SIdQkCKrkEHSPNnaaneB51/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/vr62R/btsHpKPppKZ/SIdQkCKrkEHSPNnaaneB51/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/vr62R/btsHpKPppKZ/SIdQkCKrkEHSPNnaaneB51/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2Fvr62R%2FbtsHpKPppKZ%2FSIdQkCKrkEHSPNnaaneB51%2Fimg.png&quot; onerror=&quot;this.onerror=null; this.src='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png'; this.srcset='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png';&quot; loading=&quot;lazy&quot; width=&quot;561&quot; height=&quot;154&quot; data-origin-width=&quot;2000&quot; data-origin-height=&quot;549&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size18&quot;&gt;3. VSCode IDE 하단의 버젼과 일치하는지 확인합니다.&lt;/p&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-origin-width=&quot;2000&quot; data-origin-height=&quot;551&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/rgiaC/btsHqcSsgsZ/6PKo9DAzpxTfFYjBkf9u11/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/rgiaC/btsHqcSsgsZ/6PKo9DAzpxTfFYjBkf9u11/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/rgiaC/btsHqcSsgsZ/6PKo9DAzpxTfFYjBkf9u11/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FrgiaC%2FbtsHqcSsgsZ%2F6PKo9DAzpxTfFYjBkf9u11%2Fimg.png&quot; onerror=&quot;this.onerror=null; this.src='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png'; this.srcset='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png';&quot; loading=&quot;lazy&quot; width=&quot;795&quot; height=&quot;219&quot; data-origin-width=&quot;2000&quot; data-origin-height=&quot;551&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;/p&gt;
&lt;h1&gt;&amp;nbsp;&lt;/h1&gt;
&lt;h1&gt; &amp;nbsp;레퍼런스&lt;/h1&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;a href=&quot;https://code.visualstudio.com/docs/python/environments&quot; target=&quot;_blank&quot; rel=&quot;noopener&amp;nbsp;noreferrer&quot;&gt;https://code.visualstudio.com/docs/python/environments&lt;/a&gt;&lt;/p&gt;
&lt;figure id=&quot;og_1715789913880&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;Using Python Environments in Visual Studio Code&quot; data-og-description=&quot;Configuring Python Environments in Visual Studio Code&quot; data-og-host=&quot;code.visualstudio.com&quot; data-og-source-url=&quot;https://code.visualstudio.com/docs/python/environments&quot; data-og-url=&quot;https://code.visualstudio.com/docs/python/environments&quot; data-og-image=&quot;https://scrap.kakaocdn.net/dn/fPbdp/hyV57Bb3tV/hvMgPGKUvXZGyFkvtkdUn0/img.png?width=1069&amp;amp;height=534&amp;amp;face=0_0_1069_534&quot;&gt;&lt;a href=&quot;https://code.visualstudio.com/docs/python/environments&quot; target=&quot;_blank&quot; rel=&quot;noopener&quot; data-source-url=&quot;https://code.visualstudio.com/docs/python/environments&quot;&gt;
&lt;div class=&quot;og-image&quot; style=&quot;background-image: url('https://scrap.kakaocdn.net/dn/fPbdp/hyV57Bb3tV/hvMgPGKUvXZGyFkvtkdUn0/img.png?width=1069&amp;amp;height=534&amp;amp;face=0_0_1069_534');&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;Using Python Environments in Visual Studio Code&lt;/p&gt;
&lt;p class=&quot;og-desc&quot; data-ke-size=&quot;size16&quot;&gt;Configuring Python Environments in Visual Studio Code&lt;/p&gt;
&lt;p class=&quot;og-host&quot; data-ke-size=&quot;size16&quot;&gt;code.visualstudio.com&lt;/p&gt;
&lt;/div&gt;
&lt;/a&gt;&lt;/figure&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;</description>
      <category>develop/back-side</category>
      <category>python</category>
      <category>에러 리포트</category>
      <author>3sammy</author>
      <guid isPermaLink="true">https://23log.tistory.com/195</guid>
      <comments>https://23log.tistory.com/195#entry195comment</comments>
      <pubDate>Thu, 16 May 2024 01:19:18 +0900</pubDate>
    </item>
    <item>
      <title>[python] OSError: [Errno 63] File name too long 해결 Method</title>
      <link>https://23log.tistory.com/194</link>
      <description>&lt;body&gt;&lt;article class=&quot;page sans Notion&quot; id=&quot;6e808328-8a24-4dc1-8515-61458c908c23&quot;&gt;&lt;div class=&quot;page-body Tistory&quot;&gt;&lt;div class=&quot;image notion-img&quot; id=&quot;d9ad324b-9108-4a99-940d-a8380c66466a&quot;&gt;&lt;figure class=&quot;imageblock alignCenter&quot; width=&quot;694&quot; height=&quot;347&quot; data-origin-width=&quot;694&quot; data-origin-height=&quot;347&quot; data-ke-mobilestyle=&quot;widthOrigin&quot; filename=&quot;img.png&quot; filemime=&quot;image/png&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/cK4p3x/btsjjBPDd4b/hKYWIvZfvhkPXdzOwb3IiK/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/cK4p3x/btsjjBPDd4b/hKYWIvZfvhkPXdzOwb3IiK/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/cK4p3x/btsjjBPDd4b/hKYWIvZfvhkPXdzOwb3IiK/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FcK4p3x%2FbtsjjBPDd4b%2FhKYWIvZfvhkPXdzOwb3IiK%2Fimg.png&quot; width=&quot;694&quot; height=&quot;347&quot; data-origin-width=&quot;694&quot; data-origin-height=&quot;347&quot; data-ke-mobilestyle=&quot;widthOrigin&quot; filename=&quot;img.png&quot; filemime=&quot;image/png&quot; onerror=&quot;this.onerror=null; this.src='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png'; this.srcset='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png';&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;/div&gt;&lt;figure class=&quot;callout&quot; id=&quot;0c5589bd-49ad-4730-8d98-967cba2e2465&quot; style=&quot;white-space:pre-wrap;display:flex&quot;&gt;&lt;div style=&quot;font-size:1.5em&quot;&gt;&lt;span class=&quot;icon&quot;&gt;⚙&lt;/span&gt;&lt;/div&gt;&lt;div style=&quot;width:100%&quot;&gt;&lt;strong&gt;개발 환경&lt;/strong&gt;
- device : &lt;code&gt;2021 Macbook Pro M1 Pro 14inch&lt;/code&gt;&lt;code&gt;&lt;mark class=&quot;highlight-gray&quot;&gt;(맥북프로 14 M1 Pro 모델)&lt;/mark&gt;&lt;/code&gt;
- OS : &lt;code&gt;macOS Ventura 13.2&lt;/code&gt;&lt;/div&gt;&lt;/figure&gt;&lt;figure class=&quot;callout&quot; id=&quot;3eea3b96-3f82-440e-a93a-47fc3ddd3151&quot; style=&quot;white-space:pre-wrap;display:flex&quot;&gt;&lt;div style=&quot;font-size:1.5em&quot;&gt;&lt;span class=&quot;icon&quot;&gt;⚠️&lt;/span&gt;&lt;/div&gt;&lt;div style=&quot;width:100%&quot;&gt;본 포스팅은 저의 &lt;span style=&quot;border-bottom:0.05em solid&quot;&gt;개인적 생각을 기반&lt;/span&gt;으로 작성되었습니다.
따라서 정답이 아닌, 에러 해결을 위한 하나의 과정으로서 참고하시길 바랍니다.
*수정이 필요한 부분이 있을 경우, 댓글로 알려 주시면 수정하도록 하겠습니다 &lt;/div&gt;&lt;/figure&gt;&lt;h1 class=&quot;&quot; id=&quot;ceb02edd-d15b-4437-a8f5-5cefdfa81349&quot;&gt;  에러 내용 및 상황&lt;/h1&gt;&lt;ul class=&quot;bulleted-list&quot; id=&quot;ffaff6a4-70a8-4617-aa3d-0953d770ea4d&quot;&gt;&lt;li style=&quot;list-style-type:disc&quot;&gt;zip파일의 압축을 해제하기 위해서, &lt;code&gt;zip.extractall(zip_folder)&lt;/code&gt; 기능을 사용하고 있음&lt;/li&gt;&lt;/ul&gt;&lt;ul class=&quot;bulleted-list&quot; id=&quot;d678a132-06a4-41a4-a0f7-3fcd5eaefd3a&quot;&gt;&lt;li style=&quot;list-style-type:disc&quot;&gt;그런데 압축 폴더명도 길고, 파일명도 길어서 아래의 에러가 발생하고 있음&lt;/li&gt;&lt;/ul&gt;&lt;pre class=&quot;code JavaScript&quot; id=&quot;d3d0b03d-06d5-4926-8fd5-2e956b032a11&quot;&gt;&lt;code&gt;OSError: [Errno 63] File name too long: {파일경로}/{파일명.zip}&lt;/code&gt;&lt;/pre&gt;&lt;h1 class=&quot;&quot; id=&quot;310840e9-ff71-42c8-ba8d-3e02e6f7f2dd&quot;&gt;  원인&lt;/h1&gt;&lt;ul class=&quot;bulleted-list&quot; id=&quot;56725be8-2f4b-42cc-b83f-8404026d50f6&quot;&gt;&lt;li style=&quot;list-style-type:disc&quot;&gt;위 에러는 python에서 파일 경로와 파일 이름이 결합하여 너무 길어지는 경우 지나치게 긴 경우 발생함&lt;/li&gt;&lt;/ul&gt;&lt;ul class=&quot;bulleted-list&quot; id=&quot;42c806ca-e434-430c-b33a-86ca6950f916&quot;&gt;&lt;li style=&quot;list-style-type:disc&quot;&gt;대부분의 운영 체제에서는 파일 이름의 최대 길이를 제한하고 있으며, 이를 초과하면 파일 이름이 너무 길다는 오류를 발생시킴&lt;/li&gt;&lt;/ul&gt;&lt;hr id=&quot;92e5324e-61d4-4c4d-9b13-ab817fb20e03&quot;/&gt;&lt;figure class=&quot;block-color-orange_background callout&quot; id=&quot;b580b7c9-a483-45e5-bb48-e9ecb4e439f3&quot; style=&quot;white-space:pre-wrap;display:flex&quot;&gt;&lt;div style=&quot;font-size:1.5em&quot;&gt;&lt;span class=&quot;icon&quot;&gt; &lt;/span&gt;&lt;/div&gt;&lt;div style=&quot;width:100%&quot;&gt;&lt;strong&gt;::결론::&lt;/strong&gt;
너무 긴 파일명!&lt;/div&gt;&lt;/figure&gt;&lt;p class=&quot;&quot; id=&quot;29a59a7a-bd93-4134-b448-fd9c53393878&quot;&gt;
&lt;/p&gt;&lt;h1 class=&quot;&quot; id=&quot;69143a03-bb49-4f1c-8d4d-c68369c5d14e&quot;&gt;  해결&lt;/h1&gt;&lt;p class=&quot;&quot; id=&quot;2f7d31d0-b67b-4b45-827f-1071e7827cff&quot;&gt;파일명 혹은 파일 경로를 단축하여, 길지 않게 바꿔주면 된다.
다음은 파이썬에서 해결할 수 있도록 간단하게 작성해본 기능이다.&lt;/p&gt;&lt;p class=&quot;&quot; id=&quot;d22823e1-9e59-4fbb-abf7-1ad209691d22&quot;&gt;
&lt;/p&gt;&lt;h3 class=&quot;&quot; id=&quot;f15506eb-1404-403e-b227-da6fc0622d30&quot;&gt;파이썬 코드&lt;/h3&gt;&lt;pre class=&quot;code Python&quot; id=&quot;0dc9f3ad-b90a-4521-9eb9-6f1e6ea006b9&quot;&gt;&lt;code&gt;def modify_zip_filenames(zip_file_path):
    with zipfile.ZipFile(zip_file_path, 'r') as zip_ref:
        for member in zip_ref.infolist():
            # 파일 이름이 255자를 초과하는지 확인
            if len(member.filename) &amp;gt; 255:
                # 파일 이름을 255자로 수정
                modified_filename = member.filename[:255]
                member.filename = modified_filename

            yield member, zip_ref&lt;/code&gt;&lt;/pre&gt;&lt;p class=&quot;&quot; id=&quot;2e5a8e39-ac7e-40c7-9f46-58bb0200fec0&quot;&gt;
&lt;/p&gt;&lt;h3 class=&quot;&quot; id=&quot;de6d35b2-1afa-45f8-9ed7-c2c8dd354e44&quot;&gt;적용&lt;/h3&gt;&lt;pre class=&quot;code Python&quot; id=&quot;5537db02-891a-4e75-8b2b-a01cb38589a9&quot;&gt;&lt;code&gt;def exportZip(download_dir='~/'):
    # zip 파일로 다운로드 한 경우 압축해제
    pages_zip = glob(get_dir(os.path.join(download_dir, 'Export*.zip')))
    for zip_fp in pages_zip:
        zip = zipfile.ZipFile(zip_fp)
        # 압축할 폴더 생성
        zip_folder = get_dir(os.path.join(download_dir, zip_fp.replace('.zip', '')))
        os.makedirs(zip_folder, exist_ok=True)

        # 압축 풀기
        for member, zip_ref in modify_zip_filenames(zip_fp):
            zip_ref.extract(member, zip_folder)

        # zip 파일 제거
        os.remove(zip_fp)&lt;/code&gt;&lt;/pre&gt;&lt;p class=&quot;&quot; id=&quot;0ed8f1c6-2970-4851-8f42-37e168c253f4&quot;&gt;
&lt;/p&gt;&lt;h1 class=&quot;&quot; id=&quot;1211187d-3478-470a-aa7b-0408540867d4&quot;&gt;  레퍼런스&lt;/h1&gt;&lt;/div&gt;&lt;/article&gt;&lt;/body&gt;</description>
      <category>develop/back-side</category>
      <category>python</category>
      <category>에러 리포트</category>
      <author>3sammy</author>
      <guid isPermaLink="true">https://23log.tistory.com/194</guid>
      <comments>https://23log.tistory.com/194#entry194comment</comments>
      <pubDate>Sun, 11 Jun 2023 02:16:12 +0900</pubDate>
    </item>
    <item>
      <title>void(0)에 대하여 + 마우스 우클릭 활성화하기</title>
      <link>https://23log.tistory.com/193</link>
      <description>&lt;body&gt;&lt;article class=&quot;page sans Notion&quot; id=&quot;86aa2591-b090-4b0b-8c71-b27c646d5a28&quot;&gt;&lt;div class=&quot;page-body Tistory&quot;&gt;&lt;div class=&quot;image notion-img&quot; id=&quot;f7a9541b-ae82-4b24-b089-9db408659393&quot;&gt;&lt;figure class=&quot;imageblock alignCenter&quot; width=&quot;1005&quot; height=&quot;501&quot; data-origin-width=&quot;1005&quot; data-origin-height=&quot;501&quot; data-ke-mobilestyle=&quot;widthOrigin&quot; filename=&quot;img.png&quot; filemime=&quot;image/png&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/bjphd0/btsjpC68M6x/u7GT7IuhPoQX2XVEFaC0w1/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/bjphd0/btsjpC68M6x/u7GT7IuhPoQX2XVEFaC0w1/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/bjphd0/btsjpC68M6x/u7GT7IuhPoQX2XVEFaC0w1/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2Fbjphd0%2FbtsjpC68M6x%2Fu7GT7IuhPoQX2XVEFaC0w1%2Fimg.png&quot; width=&quot;1005&quot; height=&quot;501&quot; data-origin-width=&quot;1005&quot; data-origin-height=&quot;501&quot; data-ke-mobilestyle=&quot;widthOrigin&quot; filename=&quot;img.png&quot; filemime=&quot;image/png&quot; onerror=&quot;this.onerror=null; this.src='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png'; this.srcset='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png';&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;/div&gt;&lt;h2 class=&quot;&quot; id=&quot;136067b6-5b79-41c2-a86a-08da05280f22&quot;&gt;왜 href에 &lt;code&gt;javascript:void(0)&lt;/code&gt;를 사용할까?&lt;/h2&gt;&lt;pre class=&quot;code JavaScript&quot; id=&quot;431e00de-4492-407c-9d5b-235caf0f9161&quot;&gt;&lt;code&gt;&amp;lt;a href=&quot;javascript:void(0);&quot;&amp;gt;
	&amp;lt;div&amp;gt;
		...
	&amp;lt;/div&amp;gt;
&amp;lt;/a&amp;gt;

or
&amp;lt;a href=&quot;javascript:undefined;&quot;&amp;gt;Main&amp;lt;/a&amp;gt;&lt;/code&gt;&lt;/pre&gt;&lt;p class=&quot;&quot; id=&quot;34b778f8-4127-4f0e-88eb-889c307e1e26&quot;&gt;레거시 사이트들의 소스를 살펴보면 위와 같은 형태로 a태그의 href를 처리한 경우를 볼 수 있다.&lt;/p&gt;&lt;p class=&quot;&quot; id=&quot;cef4b7e8-d2d4-4f91-8376-83c31319485f&quot;&gt;왜 a태그에 &lt;code&gt;href=&quot;javascript:void(0);&quot;&lt;/code&gt;를 사용했을까?&lt;/p&gt;&lt;ul class=&quot;bulleted-list&quot; id=&quot;e4f520ed-0912-4d9a-91d4-5cda736966e1&quot;&gt;&lt;li style=&quot;list-style-type:disc&quot;&gt;&lt;code&gt;void(0)&lt;/code&gt;을 사용하면, &lt;code&gt;undefinded&lt;/code&gt;가 반환된다. 즉, 위 코드는 a태그의 고유 동작인 &lt;mark class=&quot;highlight-red&quot;&gt;&lt;span style=&quot;border-bottom:0.05em solid&quot;&gt;&lt;strong&gt;링크 이동을 막기 위함&lt;/strong&gt;&lt;/span&gt;&lt;/mark&gt;이다.&lt;/li&gt;&lt;/ul&gt;&lt;ul class=&quot;bulleted-list&quot; id=&quot;d78ee3fe-b93a-48f0-a595-9a86a93f3ae8&quot;&gt;&lt;li style=&quot;list-style-type:disc&quot;&gt;즉, a태그에 걸어둔 공통 CSS 스타일링을 유지하며 실제 Link 이동을 방지하기 위함이라고 볼 수 있다.&lt;/li&gt;&lt;/ul&gt;&lt;p class=&quot;&quot; id=&quot;3f5df78b-c984-4325-be00-57fbd0fc0491&quot;&gt;하지만 위에 처럼 a태그의 리다이렉트를 막기 위해 &lt;code&gt;javascript:void(0);&lt;/code&gt; 을 처리하게 될 경우, 어떤 문제가 발생할까?&lt;/p&gt;&lt;h2 class=&quot;&quot; id=&quot;665be44c-d8b2-43d1-a934-0dd98b16fbae&quot;&gt;문제 : 마우스 우클릭 액션이 막힌다&lt;/h2&gt;&lt;p class=&quot;&quot; id=&quot;162f4596-fd0c-4afe-b740-ad6960730300&quot;&gt;마우스 우클릭을 했을 때의 “새탭에서 링크 열기/링크 주소 복사” 기능(액션)은 모두 href의 주소를 기반으로 작동한다.&lt;/p&gt;&lt;p class=&quot;&quot; id=&quot;79a549a2-4fcf-4984-a016-d3c5b83f01e5&quot;&gt;즉, a태그의 href 링크가 비어져 있어 위 동작을 했을 때. 새탭에선 &lt;code&gt;about:blank#blocked&lt;/code&gt; 등의 링크가 열리는 불상사가 발생한다.&lt;/p&gt;&lt;div class=&quot;image notion-img&quot; id=&quot;8ac7b820-5bea-418d-9a9c-59da3425633c&quot;&gt;&lt;figure class=&quot;imageblock alignCenter&quot; width=&quot;1002&quot; height=&quot;1047&quot; data-origin-width=&quot;1002&quot; data-origin-height=&quot;1047&quot; data-ke-mobilestyle=&quot;widthOrigin&quot; filename=&quot;img.png&quot; filemime=&quot;image/png&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/blDWU7/btsjpEjzrZH/BmB11MukX3spyhst40ZLkK/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/blDWU7/btsjpEjzrZH/BmB11MukX3spyhst40ZLkK/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/blDWU7/btsjpEjzrZH/BmB11MukX3spyhst40ZLkK/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FblDWU7%2FbtsjpEjzrZH%2FBmB11MukX3spyhst40ZLkK%2Fimg.png&quot; width=&quot;1002&quot; height=&quot;1047&quot; data-origin-width=&quot;1002&quot; data-origin-height=&quot;1047&quot; data-ke-mobilestyle=&quot;widthOrigin&quot; filename=&quot;img.png&quot; filemime=&quot;image/png&quot; onerror=&quot;this.onerror=null; this.src='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png'; this.srcset='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png';&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;/div&gt;&lt;p class=&quot;&quot; id=&quot;7524d380-87bd-48b7-b4c5-71db8b032f09&quot;&gt;
&lt;/p&gt;&lt;h2 class=&quot;&quot; id=&quot;4895f235-0daf-4c4f-bde6-9e1d9a424611&quot;&gt;담당 서비스에선?&lt;/h2&gt;&lt;pre class=&quot;code JavaScript&quot; id=&quot;41cdcb23-9542-4c37-80bf-bac1af7ad8c1&quot;&gt;&lt;code&gt;&amp;lt;div class=&quot;prod-list&quot;&amp;gt;
	&amp;lt;a href=&quot;javascript:void(0);&quot; type=&quot;B&quot;&amp;gt;...&amp;lt;/a&amp;gt;
	&amp;lt;a href=&quot;javascript:void(0);&quot; type=&quot;A&quot;&amp;gt;...&amp;lt;/a&amp;gt;
	&amp;lt;a href=&quot;javascript:void(0);&quot; type=&quot;A&quot;&amp;gt;...&amp;lt;/a&amp;gt;
&amp;lt;/div&amp;gt;


// script
$(document).on(&quot;click&quot;,'.prod-list a',function (event) {
	const type = $(this).attr(&quot;type&quot;);
	if(type == 'B'){
		window.location.href = &quot;...&quot;
	}else{
		window.location.href = &quot;...&quot;
	}
	...
}&lt;/code&gt;&lt;/pre&gt;&lt;p class=&quot;&quot; id=&quot;f499cb3e-9ff2-4a1b-8580-223ebe7cdcf5&quot;&gt;지금 내가 담당하는 서비스에선, &lt;code&gt;href=&quot;javascript:void(0);&quot;&lt;/code&gt;를 통해 링크 기능은 막은 뒤, 모든 a태그에 클릭 이벤트를 동적으로 부여해, 타입에 따라 링크를 바꾸는 추가적인 작업을 진행한다. (예시 코드 참조)&lt;/p&gt;&lt;p class=&quot;&quot; id=&quot;2ac79497-53dd-4db4-bbed-6fccaff89dfb&quot;&gt;하지만 위와 같이 할 경우, &lt;span style=&quot;border-bottom:0.05em solid&quot;&gt;&lt;strong&gt;PC에서 상품마다 우클릭 기능이 제한되어. 효율적인 쇼핑의 경험을 방해하는 요인&lt;/strong&gt;&lt;/span&gt;이 된다. 따라서 마우스의 우클릭을 살리면서, 링크 변환을 수행할 수 있도록 처리가 되어야 한다.&lt;/p&gt;&lt;p class=&quot;&quot; id=&quot;09e8909e-94a3-4697-86d4-00e1379435a6&quot;&gt;
&lt;/p&gt;&lt;h2 class=&quot;&quot; id=&quot;b1977956-a31b-4992-b608-5a4773d1919b&quot;&gt;마우스 우클릭 액션을 살리고, a태그의 리다이렉션은 막는 방법&lt;/h2&gt;&lt;p class=&quot;&quot; id=&quot;06175543-351c-4235-9fa3-f2826e7d3cd4&quot;&gt;아주 간단하게, &lt;code&gt;event.preventDefault();&lt;/code&gt; 처리를 통해 해결이 가능하다.&lt;/p&gt;&lt;ul class=&quot;bulleted-list&quot; id=&quot;1083cfac-a8a4-4293-b34e-911b91f3de8d&quot;&gt;&lt;li style=&quot;list-style-type:disc&quot;&gt;마우스 우클릭 액션을 위해, href에 필요한 링크를 삽입한다.&lt;/li&gt;&lt;/ul&gt;&lt;ul class=&quot;bulleted-list&quot; id=&quot;ecd9f592-19ed-4963-9c4b-ab7a45cc8712&quot;&gt;&lt;li style=&quot;list-style-type:disc&quot;&gt;onclick 이벤트 내부에 &lt;code&gt;event.preventDefault()&lt;/code&gt; 를 선언하여, a태그의 기본 동작을 막는다.&lt;/li&gt;&lt;/ul&gt;&lt;p class=&quot;&quot; id=&quot;fdd3c5eb-59fd-41d5-ad7d-a2a9252fde0a&quot;&gt;
&lt;/p&gt;&lt;pre class=&quot;code JavaScript&quot; id=&quot;a0f6acf0-e1d0-48fb-9f3a-b7fcd29dc6f7&quot;&gt;&lt;code&gt;&amp;lt;div class=&quot;prod-list&quot;&amp;gt;
	&amp;lt;a href=&quot;/100/detail?type=B&quot; type=&quot;B&quot;&amp;gt;...&amp;lt;/a&amp;gt;
	&amp;lt;a href=&quot;/101/detail&quot; type=&quot;A&quot;&amp;gt;...&amp;lt;/a&amp;gt;
	&amp;lt;a href=&quot;/102/detail&quot; type=&quot;A&quot;&amp;gt;...&amp;lt;/a&amp;gt;
&amp;lt;/div&amp;gt;

// script
$(document).on(&quot;click&quot;,'.prod-list a',function (event) {
	const type = $(this).attr(&quot;type&quot;);

	event.preventDefault(); // a태그의 기본동작을 방지한다

	// 이동은 아래에서
	if(type == 'B'){
		window.location.href = &quot;...&quot;
	}else{
		window.location.href = &quot;...&quot;
	}
	...
}&lt;/code&gt;&lt;/pre&gt;&lt;p class=&quot;&quot; id=&quot;c7c8c20b-7c12-4c1f-b5f9-b37129c7d18a&quot;&gt;
&lt;/p&gt;&lt;h2 class=&quot;&quot; id=&quot;fb2cb079-386a-4341-add8-05dfe0194e6b&quot;&gt;event.preventDefault()에 대하여&lt;/h2&gt;&lt;p class=&quot;&quot; id=&quot;8ddc0d04-f1f0-45c5-9d36-efc03cddcdee&quot;&gt;위 기능에 대해선 아래 포스팅에서 더욱 세부적으로 다뤄보겠다.&lt;/p&gt;&lt;p class=&quot;&quot; id=&quot;16011eb9-b3df-4e4a-a9b7-6e9277668d7e&quot;&gt;
&lt;/p&gt;&lt;/div&gt;&lt;/article&gt;&lt;/body&gt;</description>
      <category>front/javascript</category>
      <category>frontend</category>
      <author>3sammy</author>
      <guid isPermaLink="true">https://23log.tistory.com/193</guid>
      <comments>https://23log.tistory.com/193#entry193comment</comments>
      <pubDate>Sun, 11 Jun 2023 01:09:21 +0900</pubDate>
    </item>
    <item>
      <title>[React] useEffect와 useCallback 차이 간단 정리!</title>
      <link>https://23log.tistory.com/192</link>
      <description>&lt;body&gt;&lt;article class=&quot;page sans Notion&quot; id=&quot;5dfb7969-e470-4675-b1ef-5173b2af36ba&quot;&gt;&lt;div class=&quot;page-body Tistory&quot;&gt;&lt;div class=&quot;image notion-img&quot; id=&quot;94ba813d-35e4-4cb8-8fcd-c22c4491f970&quot;&gt;&lt;figure class=&quot;imageblock alignCenter&quot; width=&quot;700&quot; height=&quot;350&quot; data-origin-width=&quot;700&quot; data-origin-height=&quot;350&quot; data-ke-mobilestyle=&quot;widthOrigin&quot; filename=&quot;img.png&quot; filemime=&quot;image/png&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/zHIGZ/btr2ZDPDs1v/lnKR9KdB6VrK23ve89uiD1/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/zHIGZ/btr2ZDPDs1v/lnKR9KdB6VrK23ve89uiD1/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/zHIGZ/btr2ZDPDs1v/lnKR9KdB6VrK23ve89uiD1/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FzHIGZ%2Fbtr2ZDPDs1v%2FlnKR9KdB6VrK23ve89uiD1%2Fimg.png&quot; width=&quot;700&quot; height=&quot;350&quot; data-origin-width=&quot;700&quot; data-origin-height=&quot;350&quot; data-ke-mobilestyle=&quot;widthOrigin&quot; filename=&quot;img.png&quot; filemime=&quot;image/png&quot; onerror=&quot;this.onerror=null; this.src='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png'; this.srcset='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png';&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;/div&gt;&lt;h2 class=&quot;&quot; id=&quot;e688ba68-b173-4747-b598-0669e5e6c9b9&quot;&gt;&lt;strong&gt;useCallback()&lt;/strong&gt;&lt;/h2&gt;&lt;ul class=&quot;bulleted-list&quot; id=&quot;9fc4f6ed-5f58-4acb-a6ee-5b784498e40f&quot;&gt;&lt;li style=&quot;list-style-type:disc&quot;&gt;&lt;code&gt;useCallback(함수, [검사값])&lt;/code&gt; 검사값이 변경되었을 때에만 &lt;span style=&quot;border-bottom:0.05em solid&quot;&gt;&lt;strong&gt;함수를 생성&lt;/strong&gt;&lt;/span&gt;하는 Hook이다.&lt;/li&gt;&lt;/ul&gt;&lt;ul class=&quot;bulleted-list&quot; id=&quot;a29ea635-a717-4748-8695-b5897d5f08d9&quot;&gt;&lt;li style=&quot;list-style-type:disc&quot;&gt;함수를 memoize → 재사용하기 위해서 사용(랜더링 성능 최적화)&lt;/li&gt;&lt;/ul&gt;&lt;ul class=&quot;bulleted-list&quot; id=&quot;1f8acdc0-cf45-42e2-9cad-47f21661aa24&quot;&gt;&lt;li style=&quot;list-style-type:disc&quot;&gt;검사값에 따른 랜더링 비교&lt;ul class=&quot;bulleted-list&quot; id=&quot;9a9ef68b-38cf-4bdd-ad77-c142458f537e&quot;&gt;&lt;li style=&quot;list-style-type:circle&quot;&gt;&lt;code&gt;[]&lt;/code&gt; : 검사값이 비어있으므로, 최초 랜더링시에만 함수를 선언하고 이후 계속 재사용한다&lt;/li&gt;&lt;/ul&gt;&lt;ul class=&quot;bulleted-list&quot; id=&quot;b3d251f1-fc82-4a2d-b6bf-bd22031758f5&quot;&gt;&lt;li style=&quot;list-style-type:circle&quot;&gt;&lt;code&gt;[number]&lt;/code&gt; : number 값이 변경되었을 때에만, 함수를 다시 선언&lt;/li&gt;&lt;/ul&gt;&lt;/li&gt;&lt;/ul&gt;&lt;ul class=&quot;bulleted-list&quot; id=&quot;879cf036-19ae-4d77-807a-38f056bc0f00&quot;&gt;&lt;li style=&quot;list-style-type:disc&quot;&gt;사용 이유&lt;ul class=&quot;bulleted-list&quot; id=&quot;3b83935f-f83a-44f0-9b55-296b901be808&quot;&gt;&lt;li style=&quot;list-style-type:circle&quot;&gt;자식 컴포넌트에게 props로 함수를 전달할 때 사용 → 자식 컴포넌트의 불필요한 랜더링을 방지&lt;/li&gt;&lt;/ul&gt;&lt;ul class=&quot;bulleted-list&quot; id=&quot;cb2b2dfd-a72b-4373-be9f-1ebf5c75af3c&quot;&gt;&lt;li style=&quot;list-style-type:circle&quot;&gt;함수 변경이 없거나, 연산이 큰 함수를 최초에만 선언하기 위해서 사용&lt;/li&gt;&lt;/ul&gt;&lt;/li&gt;&lt;/ul&gt;&lt;p class=&quot;&quot; id=&quot;4356940c-9757-444f-ad4d-244bcc40b5c4&quot;&gt;
&lt;/p&gt;&lt;h2 class=&quot;&quot; id=&quot;a0a466a0-21ca-47f7-bc77-5301eaa4b700&quot;&gt;&lt;strong&gt;useEffect()&lt;/strong&gt;&lt;/h2&gt;&lt;ul class=&quot;bulleted-list&quot; id=&quot;b2d64f58-b32c-4989-b241-fa7c911ca3ff&quot;&gt;&lt;li style=&quot;list-style-type:disc&quot;&gt;사이드 이펙트를 방지하기 위해서 사용함&lt;/li&gt;&lt;/ul&gt;&lt;ul class=&quot;bulleted-list&quot; id=&quot;268a3758-ed7d-4549-9a9f-56e30c54317a&quot;&gt;&lt;li style=&quot;list-style-type:disc&quot;&gt;상세 사례&lt;ul class=&quot;bulleted-list&quot; id=&quot;7c76c3f1-1125-423a-a322-9a38bbd54532&quot;&gt;&lt;li style=&quot;list-style-type:circle&quot;&gt;&lt;strong&gt;API Fetching &lt;/strong&gt;: 컴포넌트 내에 axios를 선언해놓았는데, 해당 컴포넌트가 부모에 의해 계속 재랜더링된다면? 불필요한 api 요청이 계속 반복됨(side effect 발생)&lt;pre class=&quot;code JavaScript&quot; id=&quot;65e56d92-2ce3-4437-9130-c93e3851c37a&quot;&gt;&lt;code&gt;const [data, setData] = useState([]);

// 컴포넌트 최초 마운트시에만 실행 -&amp;gt; 
useEffect(() =&amp;gt; {
  const fetchData = async () =&amp;gt; {
    const result = await axios(
      'https://23log.tistory.com/api/v2/getPost'
    );
    setData(result.data);
  };
	// fetch 후 setDate()로 state 등록
  fetchData();
}, []);&lt;/code&gt;&lt;/pre&gt;&lt;/li&gt;&lt;/ul&gt;&lt;ul class=&quot;bulleted-list&quot; id=&quot;07649393-0946-43ca-9e8b-50053cf1a84e&quot;&gt;&lt;li style=&quot;list-style-type:circle&quot;&gt;&lt;strong&gt;이벤트 리스너 추가/제거 &lt;/strong&gt;: 컴포넌트 마운트 될 때, 이벤트 추가하고. 해제될 때 이벤트 제거를 위해서&lt;pre class=&quot;code JavaScript&quot; id=&quot;e9315818-4dd9-4d92-848f-38577a23872e&quot;&gt;&lt;code&gt;useEffect(() =&amp;gt; {
  function handleResize() {
    // 등록하고자 하는 이벤트 등록
  }

	// 검사값배열이 [] : 최초 랜더링 시 실행
  window.addEventListener('resize', handleResize);
	// 클린업 함수 : 
  return () =&amp;gt; {
    window.removeEventListener('resize', handleResize);
  };
}, []);&lt;/code&gt;&lt;/pre&gt;&lt;/li&gt;&lt;/ul&gt;&lt;ul class=&quot;bulleted-list&quot; id=&quot;d8ac803d-0e3c-421e-8734-6defefe326ef&quot;&gt;&lt;li style=&quot;list-style-type:circle&quot;&gt;DOM 업데이트 시 처리 등&lt;/li&gt;&lt;/ul&gt;&lt;/li&gt;&lt;/ul&gt;&lt;p class=&quot;&quot; id=&quot;b55706af-9f58-40f6-8bcb-f66ee11daa84&quot;&gt;
&lt;/p&gt;&lt;h2 class=&quot;&quot; id=&quot;d542c630-af19-44d3-9315-0dbf816f8563&quot;&gt;  그래서, 차이점은?&lt;/h2&gt;&lt;p class=&quot;&quot; id=&quot;ba973e8d-506a-4800-8c77-85b1b3ea2c6f&quot;&gt;둘다 두번째 인자로 검사값(종속성 배열)을 받고 있어 비슷한 형태인데, 어떤 차이점이 있을까?
바로 위 설명처럼, &lt;span style=&quot;border-bottom:0.05em solid&quot;&gt;&lt;strong&gt;사용 목적&lt;/strong&gt;&lt;/span&gt;에 그 차이점이 존재한다.&lt;/p&gt;&lt;ul class=&quot;bulleted-list&quot; id=&quot;e534d5f8-a8c2-41ec-a397-7d2384d6cced&quot;&gt;&lt;li style=&quot;list-style-type:disc&quot;&gt;&lt;strong&gt;useCallback&lt;/strong&gt;&lt;ul class=&quot;bulleted-list&quot; id=&quot;1186b303-f30b-4e45-ae94-33ed5c10ff52&quot;&gt;&lt;li style=&quot;list-style-type:circle&quot;&gt;콜백함수를 자식에게 전달해줄 때 사용&lt;/li&gt;&lt;/ul&gt;&lt;ul class=&quot;bulleted-list&quot; id=&quot;f58fafab-14ab-44ed-89a5-afa2ef4498d6&quot;&gt;&lt;li style=&quot;list-style-type:circle&quot;&gt;자주 렌더링 위험이 있는 요소를 성능 최적화를 위해 사용&lt;/li&gt;&lt;/ul&gt;&lt;ul class=&quot;bulleted-list&quot; id=&quot;423b4868-94e0-46cc-8a1f-ca9b92640011&quot;&gt;&lt;li style=&quot;list-style-type:circle&quot;&gt;&lt;code&gt;const onChange = useCallback(e =&amp;gt; {...});&lt;/code&gt; 이렇게 지정하고 자식에게 던진다!&lt;/li&gt;&lt;/ul&gt;&lt;/li&gt;&lt;/ul&gt;&lt;ul class=&quot;bulleted-list&quot; id=&quot;66cf4f9d-5eb0-4cd0-866c-226f752f4a3e&quot;&gt;&lt;li style=&quot;list-style-type:disc&quot;&gt;&lt;strong&gt;useEffect&lt;/strong&gt;&lt;ul class=&quot;bulleted-list&quot; id=&quot;b6eebe4a-e96d-44b6-9198-5d8ea3dac293&quot;&gt;&lt;li style=&quot;list-style-type:circle&quot;&gt;사이드 이펙트 방지를 위해 사용&lt;/li&gt;&lt;/ul&gt;&lt;ul class=&quot;bulleted-list&quot; id=&quot;caee0c04-f244-41b7-a277-57d7879fb74c&quot;&gt;&lt;li style=&quot;list-style-type:circle&quot;&gt;API 통신(data fetch), 이벤트 리스너 추가, DOM 업데이트 등&lt;/li&gt;&lt;/ul&gt;&lt;ul class=&quot;bulleted-list&quot; id=&quot;2d168d82-a55a-4df0-9518-fc254a94eae7&quot;&gt;&lt;li style=&quot;list-style-type:circle&quot;&gt;&lt;code&gt;useEffect(()=&amp;gt;{...});&lt;/code&gt; 함수 호출을 통해, 실행한다!&lt;/li&gt;&lt;/ul&gt;&lt;/li&gt;&lt;/ul&gt;&lt;p class=&quot;&quot; id=&quot;7666e30a-8244-4480-8503-79fbece894bb&quot;&gt;
&lt;/p&gt;&lt;p class=&quot;&quot; id=&quot;9aef19e6-cec7-454d-b93d-76f10e0fc917&quot;&gt;
&lt;/p&gt;&lt;p class=&quot;&quot; id=&quot;645e845d-6214-4d17-8077-7c2b6a03119d&quot;&gt;
&lt;/p&gt;&lt;/div&gt;&lt;/article&gt;&lt;/body&gt;</description>
      <category>front/react</category>
      <category>frontend</category>
      <category>React</category>
      <author>3sammy</author>
      <guid isPermaLink="true">https://23log.tistory.com/192</guid>
      <comments>https://23log.tistory.com/192#entry192comment</comments>
      <pubDate>Wed, 8 Mar 2023 01:10:36 +0900</pubDate>
    </item>
    <item>
      <title>다시 시작하는 맥북 셋업 - Alfred 설정 백업하기</title>
      <link>https://23log.tistory.com/191</link>
      <description>&lt;body&gt;&lt;article class=&quot;page sans Notion&quot; id=&quot;ee385620-c2b7-40d1-b556-7c5b765be668&quot;&gt;&lt;div class=&quot;page-body Tistory&quot;&gt;&lt;h1 class=&quot;&quot; id=&quot;0662086e-7c82-4302-9677-75d1fd127113&quot;&gt;Alfred 설정 백업 방법&lt;/h1&gt;&lt;ol class=&quot;numbered-list&quot; id=&quot;a9932b17-9095-448e-85e6-956cd0cc32b2&quot; start=&quot;1&quot; type=&quot;1&quot;&gt;&lt;li&gt;&lt;code&gt;Advanced&lt;/code&gt; 로 접속하면, 우측 하단에 &lt;code&gt;Reveal in Finder&lt;/code&gt; 버튼이 보인다.&lt;div class=&quot;image notion-img&quot; id=&quot;6146fd9a-59b4-4bdd-981e-fc73a95796d7&quot;&gt;&lt;figure class=&quot;imageblock alignCenter&quot; width=&quot;1292&quot; height=&quot;878&quot; data-origin-width=&quot;1292&quot; data-origin-height=&quot;878&quot; data-ke-mobilestyle=&quot;widthOrigin&quot; filename=&quot;img.png&quot; filemime=&quot;image/png&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/dhSARI/btr1yzBbvjs/DQpnoKlkTftgk8QCwAPMV1/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/dhSARI/btr1yzBbvjs/DQpnoKlkTftgk8QCwAPMV1/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/dhSARI/btr1yzBbvjs/DQpnoKlkTftgk8QCwAPMV1/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FdhSARI%2Fbtr1yzBbvjs%2FDQpnoKlkTftgk8QCwAPMV1%2Fimg.png&quot; width=&quot;1292&quot; height=&quot;878&quot; data-origin-width=&quot;1292&quot; data-origin-height=&quot;878&quot; data-ke-mobilestyle=&quot;widthOrigin&quot; filename=&quot;img.png&quot; filemime=&quot;image/png&quot; onerror=&quot;this.onerror=null; this.src='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png'; this.srcset='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png';&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;/div&gt;&lt;/li&gt;&lt;/ol&gt;&lt;ol class=&quot;numbered-list&quot; id=&quot;e5557e83-792b-4a34-8406-c66828dd277e&quot; start=&quot;2&quot; type=&quot;1&quot;&gt;&lt;li&gt;해당 버튼을 누르면 폴더가 나타나는데, 거기의 &lt;code&gt;Alfred.alfredpreferences&lt;/code&gt; 파일이 존재한다.&lt;div class=&quot;image notion-img&quot; id=&quot;ecb6672c-91a8-48c8-b43f-85cef8eaeaae&quot;&gt;&lt;figure class=&quot;imageblock alignCenter&quot; width=&quot;766&quot; height=&quot;180&quot; data-origin-width=&quot;766&quot; data-origin-height=&quot;180&quot; data-ke-mobilestyle=&quot;widthOrigin&quot; filename=&quot;img.png&quot; filemime=&quot;image/png&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/b1evOf/btr1MjwEdMP/kRHLaRo5jUkMGNqzA2ZNN1/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/b1evOf/btr1MjwEdMP/kRHLaRo5jUkMGNqzA2ZNN1/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/b1evOf/btr1MjwEdMP/kRHLaRo5jUkMGNqzA2ZNN1/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2Fb1evOf%2Fbtr1MjwEdMP%2FkRHLaRo5jUkMGNqzA2ZNN1%2Fimg.png&quot; width=&quot;766&quot; height=&quot;180&quot; data-origin-width=&quot;766&quot; data-origin-height=&quot;180&quot; data-ke-mobilestyle=&quot;widthOrigin&quot; filename=&quot;img.png&quot; filemime=&quot;image/png&quot; onerror=&quot;this.onerror=null; this.src='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png'; this.srcset='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png';&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;/div&gt;&lt;/li&gt;&lt;/ol&gt;&lt;ol class=&quot;numbered-list&quot; id=&quot;beb3044d-a1ea-4bc0-a585-3936fcd2d83f&quot; start=&quot;3&quot; type=&quot;1&quot;&gt;&lt;li&gt;해당 파일을 신규 Mac으로 가져가서 동일 폴더에 덮어 씌우면 모든 설정이 그대로 백업된다!&lt;/li&gt;&lt;/ol&gt;&lt;ol class=&quot;numbered-list&quot; id=&quot;5f5ef8ad-944b-40bb-b2db-2269443d5dc3&quot; start=&quot;4&quot; type=&quot;1&quot;&gt;&lt;li&gt;야호!&lt;/li&gt;&lt;/ol&gt;&lt;/div&gt;&lt;/article&gt;&lt;/body&gt;</description>
      <category>정보/TECH</category>
      <category>MAC</category>
      <category>고단한_환경셋팅</category>
      <category>생산성</category>
      <author>3sammy</author>
      <guid isPermaLink="true">https://23log.tistory.com/191</guid>
      <comments>https://23log.tistory.com/191#entry191comment</comments>
      <pubDate>Fri, 3 Mar 2023 00:57:39 +0900</pubDate>
    </item>
    <item>
      <title>[MAC] 업데이트 이후 오류 해결하기. xcrun: error: invalid active developer path</title>
      <link>https://23log.tistory.com/189</link>
      <description>&lt;body&gt;&lt;article class=&quot;page sans Notion&quot; id=&quot;6de475eb-f711-4c4d-bb64-fcc011115f8c&quot;&gt;&lt;div class=&quot;page-body Tistory&quot;&gt;&lt;figure class=&quot;callout&quot; id=&quot;2738f2c6-ebb2-4141-a5b1-37952afefe72&quot; style=&quot;white-space:pre-wrap;display:flex&quot;&gt;&lt;div style=&quot;font-size:1.5em&quot;&gt;&lt;span class=&quot;icon&quot;&gt;⚙&lt;/span&gt;&lt;/div&gt;&lt;div style=&quot;width:100%&quot;&gt;&lt;strong&gt;개발 환경&lt;/strong&gt;
- device : &lt;code&gt;2021 Macbook Pro M1 Pro 14inch&lt;/code&gt;&lt;code&gt;&lt;mark class=&quot;highlight-gray&quot;&gt;(맥북프로 14 M1 Pro 모델)&lt;/mark&gt;&lt;/code&gt;
- OS : &lt;code&gt;macOS Ventura 13.2&lt;/code&gt;&lt;/div&gt;&lt;/figure&gt;&lt;figure class=&quot;callout&quot; id=&quot;64e850d1-701f-42d4-a7c2-c5d3e8303ca1&quot; style=&quot;white-space:pre-wrap;display:flex&quot;&gt;&lt;div style=&quot;font-size:1.5em&quot;&gt;&lt;span class=&quot;icon&quot;&gt;⚠️&lt;/span&gt;&lt;/div&gt;&lt;div style=&quot;width:100%&quot;&gt;본 포스팅은 저의 &lt;span style=&quot;border-bottom:0.05em solid&quot;&gt;개인적 생각을 기반&lt;/span&gt;으로 작성되었습니다.
따라서 정답이 아닌, 에러 해결을 위한 하나의 과정으로서 참고하시길 바랍니다.
*수정이 필요한 부분이 있을 경우, 댓글로 알려 주시면 수정하도록 하겠습니다 &lt;/div&gt;&lt;/figure&gt;&lt;h1 class=&quot;&quot; id=&quot;e1cc9abd-2c90-46ca-890f-737ec9608e57&quot;&gt;  에러 내용 및 상황&lt;/h1&gt;&lt;div class=&quot;image notion-img&quot; id=&quot;1b805e59-daf7-4315-bc13-e2d753aead7e&quot;&gt;&lt;figure class=&quot;imageblock alignCenter&quot; width=&quot;682&quot; height=&quot;570&quot; data-origin-width=&quot;682&quot; data-origin-height=&quot;570&quot; data-ke-mobilestyle=&quot;widthOrigin&quot; filename=&quot;img.png&quot; filemime=&quot;image/png&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/6c1sn/btrXAkzBKmq/LOMdqPDcySmkCHPC8FovG0/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/6c1sn/btrXAkzBKmq/LOMdqPDcySmkCHPC8FovG0/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/6c1sn/btrXAkzBKmq/LOMdqPDcySmkCHPC8FovG0/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2F6c1sn%2FbtrXAkzBKmq%2FLOMdqPDcySmkCHPC8FovG0%2Fimg.png&quot; width=&quot;682&quot; height=&quot;570&quot; data-origin-width=&quot;682&quot; data-origin-height=&quot;570&quot; data-ke-mobilestyle=&quot;widthOrigin&quot; filename=&quot;img.png&quot; filemime=&quot;image/png&quot; onerror=&quot;this.onerror=null; this.src='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png'; this.srcset='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png';&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;/div&gt;&lt;p class=&quot;&quot; id=&quot;61248ee4-d0e3-4313-873c-6f9b4a425481&quot;&gt;MAC OS를 기존 몬트레이에서, 벤추라로 업데이트했다. 그 후 평소처럼 git을 사용하려는데, 위와 같은 에러가 발생했다.&lt;/p&gt;&lt;pre class=&quot;code JavaScript&quot; id=&quot;5b5c40c8-e8e3-446d-aa51-bf6f502f347e&quot;&gt;&lt;code&gt;xcrun: error: invalid active developer path (/Library/Developer/CommandLineTools ), missing xcrun at: /Library/Developer/CommandLineTools/us/bin/xcrun&lt;/code&gt;&lt;/pre&gt;&lt;h1 class=&quot;&quot; id=&quot;f946632d-ad87-4f2a-82d1-a06a0f92dce5&quot;&gt;  원인&lt;/h1&gt;&lt;p class=&quot;&quot; id=&quot;9990eb21-7eb0-4fbc-9409-57c27e560fd0&quot;&gt;맥북 OS를 업데이트하면 꼭 기존에 설치되었던 커맨드라인툴 을 인식하지 못하는 문제가 발생한다고 한다. (대다수의 유저가 겪는 현상..)&lt;/p&gt;&lt;p class=&quot;&quot; id=&quot;27a71157-f110-4c49-9b17-9054f9b2bf10&quot;&gt;이럴 땐, &lt;strong&gt;재설치&lt;/strong&gt;가 답이다.&lt;/p&gt;&lt;h1 class=&quot;&quot; id=&quot;35647041-c54b-4f2a-865c-ec9ba55c1543&quot;&gt;  해결&lt;/h1&gt;&lt;pre class=&quot;code JavaScript&quot; id=&quot;4e49e513-f489-4439-b9da-6e9b263cff78&quot;&gt;&lt;code&gt;xcode-select --install&lt;/code&gt;&lt;/pre&gt;&lt;ul class=&quot;bulleted-list&quot; id=&quot;2fcfd939-d980-4402-91e0-9ee365f4d1fd&quot;&gt;&lt;li style=&quot;list-style-type:disc&quot;&gt;터미널을 열고, 위의 명령어를 입력하여 CommandLineTools(command line developer tools)를 설치한다.&lt;/li&gt;&lt;/ul&gt;&lt;p class=&quot;&quot; id=&quot;a3a6db83-533e-4b80-bf88-dfdb95295eea&quot;&gt;
&lt;/p&gt;&lt;div class=&quot;image notion-img&quot; id=&quot;88ff02a0-f7be-4b49-9614-4b4b1d074614&quot;&gt;&lt;figure class=&quot;imageblock alignCenter&quot; width=&quot;465&quot; height=&quot;174&quot; data-origin-width=&quot;465&quot; data-origin-height=&quot;174&quot; data-ke-mobilestyle=&quot;widthOrigin&quot; filename=&quot;img.png&quot; filemime=&quot;image/png&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/bbpkuS/btrXoD16qv2/TcTK5mmMtyrcyAlzj5p7Rk/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/bbpkuS/btrXoD16qv2/TcTK5mmMtyrcyAlzj5p7Rk/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/bbpkuS/btrXoD16qv2/TcTK5mmMtyrcyAlzj5p7Rk/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FbbpkuS%2FbtrXoD16qv2%2FTcTK5mmMtyrcyAlzj5p7Rk%2Fimg.png&quot; width=&quot;465&quot; height=&quot;174&quot; data-origin-width=&quot;465&quot; data-origin-height=&quot;174&quot; data-ke-mobilestyle=&quot;widthOrigin&quot; filename=&quot;img.png&quot; filemime=&quot;image/png&quot; onerror=&quot;this.onerror=null; this.src='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png'; this.srcset='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png';&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;/div&gt;&lt;ul class=&quot;bulleted-list&quot; id=&quot;be6ce70b-e6b2-40ca-ba2a-9989abd865e7&quot;&gt;&lt;li style=&quot;list-style-type:disc&quot;&gt;입력하면, 개발자 도구 팝업이 나오는데 설치를 진행한다. 보통 3~5분 정도면 설치가 끝난다.&lt;/li&gt;&lt;/ul&gt;&lt;ul class=&quot;bulleted-list&quot; id=&quot;78b1a6b2-df29-4d5d-8ca4-30d6a621ba92&quot;&gt;&lt;li style=&quot;list-style-type:disc&quot;&gt;다시 git을 실행해보면, 정상적으로 인식하는 걸 확인할 수 있다.&lt;/li&gt;&lt;/ul&gt;&lt;p class=&quot;&quot; id=&quot;4c89b820-baf8-423a-8d3d-0d9bfe2781e4&quot;&gt;
&lt;/p&gt;&lt;/div&gt;&lt;/article&gt;&lt;/body&gt;</description>
      <category>정보/TECH</category>
      <category>MAC</category>
      <category>맥북</category>
      <category>에러 리포트</category>
      <author>3sammy</author>
      <guid isPermaLink="true">https://23log.tistory.com/189</guid>
      <comments>https://23log.tistory.com/189#entry189comment</comments>
      <pubDate>Sun, 29 Jan 2023 10:01:02 +0900</pubDate>
    </item>
    <item>
      <title>[후기] 로지텍 MX Master 3S 페일 그레이, 3달 후 변색에 대하여</title>
      <link>https://23log.tistory.com/188</link>
      <description>&lt;body&gt;&lt;article class=&quot;page sans Notion&quot; id=&quot;d5155b3f-81ce-417d-896e-b804ac6b5754&quot;&gt;&lt;div class=&quot;page-body Tistory&quot;&gt;&lt;p class=&quot;&quot; id=&quot;4e21f3ab-b7e4-4fe2-8890-e214f9703c7e&quot;&gt;2023년 8월 18일에 로지텍 MX Master 3S 페일 그레이 색상을 구매했다.&lt;/p&gt;&lt;figure id=&quot;210e244b-c23e-4a3d-9e96-c02bddf741ae&quot;&gt;&lt;a class=&quot;bookmark source&quot; href=&quot;https://23log.tistory.com/180&quot;&gt;&lt;div class=&quot;bookmark-info&quot;&gt;&lt;div class=&quot;bookmark-text&quot;&gt;&lt;div class=&quot;bookmark-title&quot;&gt;로지텍 MX Master 3S 개봉기, 구매 이유와 Logi Option까지&lt;/div&gt;&lt;div class=&quot;bookmark-description&quot;&gt;구매 이유2년 넘게 사용했다. 옆엔 세월의 흔적 ㅎㅎ..원래 로지텍의 MX Anywhere 2 모델을 사용했다. 아마존에서 벌크로 된 제품을 저렴한 가격에 구매했었다.당시 사용한 MX Anywhere 2에서 맘에 드는 점은 아래와 같았다.손에 딱 알맞는 사이즈 : 손이 일반 남성 사이즈이긴 하지만, 마우스라는게 손 안에 딱 맞게 들어오니 컨트롤이 훨씬 쉬었다.다양한 버튼들 지원 : Anywhere 시리즈의 경우 휠이 좌우로 틸팅?&lt;/div&gt;&lt;/div&gt;&lt;div class=&quot;bookmark-href&quot;&gt;&lt;img class=&quot;icon bookmark-icon&quot; src=&quot;https://23log.tistory.com/favicon.ico&quot;/&gt;https://23log.tistory.com/180&lt;/div&gt;&lt;/div&gt;&lt;img class=&quot;bookmark-image&quot; src=&quot;https://img1.daumcdn.net/thumb/R800x0/?scode=mtistory2&amp;amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2Fbl8AdZ%2FbtrJ4ExTkqX%2FscV5wSv0TMBds1gbb3XmW0%2Fimg.png&quot;/&gt;&lt;/a&gt;&lt;/figure&gt;&lt;p class=&quot;&quot; id=&quot;f047941c-f4bb-4a7f-bc63-86813f1238cf&quot;&gt;위 글을 읽으면 알 수 있지만, 주요 구매 이유는&lt;/p&gt;&lt;ul class=&quot;bulleted-list&quot; id=&quot;b1ce285b-4645-4cba-b54c-cf4c2654e168&quot;&gt;&lt;li style=&quot;list-style-type:disc&quot;&gt;컴퓨터 주변 기기 브랜드 중, 단연 No.1이 로지텍!&lt;/li&gt;&lt;/ul&gt;&lt;ul class=&quot;bulleted-list&quot; id=&quot;4275d3a8-3008-440d-8e99-5249c9617380&quot;&gt;&lt;li style=&quot;list-style-type:disc&quot;&gt;자체 소프트웨어(Logi Option+)의 활용성 및 확장성!&lt;/li&gt;&lt;/ul&gt;&lt;ul class=&quot;bulleted-list&quot; id=&quot;3a194ae7-4b24-4aa6-bdc0-84c154e51e6d&quot;&gt;&lt;li style=&quot;list-style-type:disc&quot;&gt;3S 모델에 적용된 무소음 클릭!&lt;/li&gt;&lt;/ul&gt;&lt;p class=&quot;&quot; id=&quot;eac3f1eb-9b6d-430b-9fe7-425c8d1564f8&quot;&gt;이런 것들이 있고, 그 중에서도 &lt;code&gt;&lt;strong&gt;페일 그레이(화이트)&lt;/strong&gt;&lt;/code&gt;&lt;strong&gt; 색상으로 구매한 이유&lt;/strong&gt;는 &lt;strong&gt;나의 데스크 환경이 화이트를 바탕&lt;/strong&gt;으로 되어 있었기 때문이다.&lt;/p&gt;&lt;p class=&quot;&quot; id=&quot;7a6a6c75-040c-40ca-9a4b-3c81bfd5e56a&quot;&gt;
&lt;/p&gt;&lt;hr id=&quot;deba4159-f6a1-4312-9b14-96f55acfe21d&quot;/&gt;&lt;h1 class=&quot;&quot; id=&quot;1b9115f0-3488-46e4-8c95-75a606901ab3&quot;&gt;변색 이슈?&lt;/h1&gt;&lt;p class=&quot;&quot; id=&quot;3898c899-da8d-4da4-81f4-0f2d4a7feead&quot;&gt;MX Master 3S 페일 그레이 색에서 색 변색, 착색 이슈(&lt;code&gt;discoloration&lt;/code&gt;)가 있다는 글을 구매 전에도 본 적이 있다. 아무래도 화이트 색상이다보니 사용에 따라 노랗게 착색되거나 변색되는 현상인데. 구글에서 검색하니 외국에선 꽤나 많은 이슈가 있는 것으로 보인다.&lt;/p&gt;&lt;p class=&quot;&quot; id=&quot;bdf50788-fcdb-4cc5-bcf9-dc7ea2dcc149&quot;&gt;
&lt;/p&gt;&lt;figure class=&quot;block-color-orange_background callout&quot; id=&quot;2bd88fc1-5097-41bd-92b1-96e113be0335&quot; style=&quot;white-space:pre-wrap;display:flex&quot;&gt;&lt;div style=&quot;font-size:1.5em&quot;&gt;&lt;span class=&quot;icon&quot;&gt; &lt;/span&gt;&lt;/div&gt;&lt;div style=&quot;width:100%&quot;&gt;다음의 사진들은 &lt;strong&gt;reddit&lt;/strong&gt; 커뮤니티 외국 사용자들의 사용 후기입니다.&lt;/div&gt;&lt;/figure&gt;&lt;div class=&quot;column-list&quot; id=&quot;7c7af004-a352-4725-9496-dcbc863c2980&quot;&gt;&lt;div class=&quot;column&quot; id=&quot;353466b6-cee0-429a-aacf-8c54b81988e7&quot; style=&quot;width:50%&quot;&gt;&lt;div class=&quot;image notion-img&quot; id=&quot;d4b23d13-c7ef-4539-aac4-3907379fb052&quot;&gt;&lt;figure class=&quot;imageblock alignCenter&quot; width=&quot;3000&quot; height=&quot;4000&quot; data-origin-width=&quot;3000&quot; data-origin-height=&quot;4000&quot; data-ke-mobilestyle=&quot;widthOrigin&quot; filename=&quot;img.png&quot; filemime=&quot;image/png&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/bBVOIa/btrR2H2Rwoy/6KHI7qS3Dx2sAKmKaBubGk/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/bBVOIa/btrR2H2Rwoy/6KHI7qS3Dx2sAKmKaBubGk/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/bBVOIa/btrR2H2Rwoy/6KHI7qS3Dx2sAKmKaBubGk/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FbBVOIa%2FbtrR2H2Rwoy%2F6KHI7qS3Dx2sAKmKaBubGk%2Fimg.png&quot; width=&quot;3000&quot; height=&quot;4000&quot; data-origin-width=&quot;3000&quot; data-origin-height=&quot;4000&quot; data-ke-mobilestyle=&quot;widthOrigin&quot; filename=&quot;img.png&quot; filemime=&quot;image/png&quot; onerror=&quot;this.onerror=null; this.src='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png'; this.srcset='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png';&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;/div&gt;&lt;/div&gt;&lt;div class=&quot;column&quot; id=&quot;eafc313b-aa53-47ac-af34-afc4ee6b905b&quot; style=&quot;width:50%&quot;&gt;&lt;div class=&quot;image notion-img&quot; id=&quot;c14d0b47-3036-4101-af7e-13f444a88ea9&quot;&gt;&lt;figure class=&quot;imageblock alignCenter&quot; width=&quot;3000&quot; height=&quot;4000&quot; data-origin-width=&quot;3000&quot; data-origin-height=&quot;4000&quot; data-ke-mobilestyle=&quot;widthOrigin&quot; filename=&quot;img.png&quot; filemime=&quot;image/png&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/SHXMZ/btrR5y4qzWx/8dHKKn9mGTnCllz3JzGHEk/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/SHXMZ/btrR5y4qzWx/8dHKKn9mGTnCllz3JzGHEk/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/SHXMZ/btrR5y4qzWx/8dHKKn9mGTnCllz3JzGHEk/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FSHXMZ%2FbtrR5y4qzWx%2F8dHKKn9mGTnCllz3JzGHEk%2Fimg.png&quot; width=&quot;3000&quot; height=&quot;4000&quot; data-origin-width=&quot;3000&quot; data-origin-height=&quot;4000&quot; data-ke-mobilestyle=&quot;widthOrigin&quot; filename=&quot;img.png&quot; filemime=&quot;image/png&quot; onerror=&quot;this.onerror=null; this.src='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png'; this.srcset='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png';&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;/div&gt;&lt;/div&gt;&lt;/div&gt;&lt;ul class=&quot;bulleted-list&quot; id=&quot;535b9842-ca8b-45ce-b205-e6e19aa74f28&quot;&gt;&lt;li style=&quot;list-style-type:disc&quot;&gt;&lt;a href=&quot;https://www.reddit.com/r/logitech/comments/vxutdo/mx_master_3s_pale_gray_have_turned_yellow/&quot;&gt;https://www.reddit.com/r/logitech/comments/vxutdo/mx_master_3s_pale_gray_have_turned_yellow/&lt;/a&gt;&lt;/li&gt;&lt;/ul&gt;&lt;div class=&quot;column-list&quot; id=&quot;5a3608d1-e119-462c-8fa3-11833eea9b52&quot;&gt;&lt;div class=&quot;column&quot; id=&quot;0c245181-55d5-4749-9de2-93178b8c9300&quot; style=&quot;width:50%&quot;&gt;&lt;div class=&quot;image notion-img&quot; id=&quot;06c0a82f-6022-4dab-a6d5-756bca98af3a&quot;&gt;&lt;figure class=&quot;imageblock alignCenter&quot; width=&quot;640&quot; height=&quot;853&quot; data-origin-width=&quot;640&quot; data-origin-height=&quot;853&quot; data-ke-mobilestyle=&quot;widthOrigin&quot; filename=&quot;img.png&quot; filemime=&quot;image/png&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/5Fj7L/btrR2F470Xv/kLRPTc4WTLakhX6Ub68rik/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/5Fj7L/btrR2F470Xv/kLRPTc4WTLakhX6Ub68rik/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/5Fj7L/btrR2F470Xv/kLRPTc4WTLakhX6Ub68rik/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2F5Fj7L%2FbtrR2F470Xv%2FkLRPTc4WTLakhX6Ub68rik%2Fimg.png&quot; width=&quot;640&quot; height=&quot;853&quot; data-origin-width=&quot;640&quot; data-origin-height=&quot;853&quot; data-ke-mobilestyle=&quot;widthOrigin&quot; filename=&quot;img.png&quot; filemime=&quot;image/png&quot; onerror=&quot;this.onerror=null; this.src='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png'; this.srcset='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png';&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;/div&gt;&lt;/div&gt;&lt;div class=&quot;column&quot; id=&quot;9715d0d4-24d2-43ce-9af1-e42a3f70f4d7&quot; style=&quot;width:50%&quot;&gt;&lt;div class=&quot;image notion-img&quot; id=&quot;adc9f4ab-479c-4a98-991d-0de1515c866a&quot;&gt;&lt;figure class=&quot;imageblock alignCenter&quot; width=&quot;465&quot; height=&quot;616&quot; data-origin-width=&quot;465&quot; data-origin-height=&quot;616&quot; data-ke-mobilestyle=&quot;widthOrigin&quot; filename=&quot;img.png&quot; filemime=&quot;image/png&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/bh2evu/btrR1fsnphW/g8Rm87530F74IwXnYMkU91/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/bh2evu/btrR1fsnphW/g8Rm87530F74IwXnYMkU91/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/bh2evu/btrR1fsnphW/g8Rm87530F74IwXnYMkU91/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2Fbh2evu%2FbtrR1fsnphW%2Fg8Rm87530F74IwXnYMkU91%2Fimg.png&quot; width=&quot;465&quot; height=&quot;616&quot; data-origin-width=&quot;465&quot; data-origin-height=&quot;616&quot; data-ke-mobilestyle=&quot;widthOrigin&quot; filename=&quot;img.png&quot; filemime=&quot;image/png&quot; onerror=&quot;this.onerror=null; this.src='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png'; this.srcset='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png';&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;/div&gt;&lt;/div&gt;&lt;/div&gt;&lt;ul class=&quot;bulleted-list&quot; id=&quot;8b0f4515-5655-4cf1-8754-644e6bba010f&quot;&gt;&lt;li style=&quot;list-style-type:disc&quot;&gt;&lt;a href=&quot;https://www.reddit.com/r/logitech/comments/wadhau/mx_master_3s_pale_gray_is_turning_yellow_due_to/&quot;&gt;https://www.reddit.com/r/logitech/comments/wadhau/mx_master_3s_pale_gray_is_turning_yellow_due_to/&lt;/a&gt;&lt;/li&gt;&lt;/ul&gt;&lt;p class=&quot;&quot; id=&quot;3ee582f5-b3f2-4aba-917c-95b7de75c08c&quot;&gt;
&lt;/p&gt;&lt;h1 class=&quot;&quot; id=&quot;19e9f4bd-d228-4d67-b5a4-64ebd451312b&quot;&gt;3달 사용 후, 상태&lt;/h1&gt;&lt;p class=&quot;&quot; id=&quot;4bf0c9d0-05a3-43e7-bcf0-34b556f923b7&quot;&gt;2023년 8월 18일 구매 이후, 현재 기준(11월 25일). 3달 이상 실 사용한 상태이다.
3달 동안 퇴근 후 매일 마우스를 조작하였으며, 웹서핑, 디자인 작업, 개발 작업 위주로 사용했다.&lt;/p&gt;&lt;p class=&quot;&quot; id=&quot;54948e7c-9f98-4a44-adff-afeaa1b64043&quot;&gt;마우스를 사용한 게임(FPS류)을 하지 않아 하드하게 사용했다 말할 순 없지만, 웹서핑이나 디자인 등등 마우스 기반의 작업이 많았기에 결코 라이트하게 사용하진 않았다.&lt;/p&gt;&lt;div class=&quot;column-list&quot; id=&quot;b47fbdd3-b5f6-466e-8780-35e89e54a77e&quot;&gt;&lt;div class=&quot;column&quot; id=&quot;c89d0597-bc6b-44e0-be1e-d7617d62a557&quot; style=&quot;width:50%&quot;&gt;&lt;div class=&quot;image notion-img&quot; id=&quot;b3ace5ee-1e12-4e96-8d7e-58d5af754165&quot;&gt;&lt;figure class=&quot;imageblock alignCenter&quot; width=&quot;4032&quot; height=&quot;3024&quot; data-origin-width=&quot;4032&quot; data-origin-height=&quot;3024&quot; data-ke-mobilestyle=&quot;widthOrigin&quot; filename=&quot;img.jpg&quot; filemime=&quot;image/jpeg&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/xDjuC/btrR3Z2BrvN/dpnKC1sCkU4wfXiCrW57ak/img.jpg&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/xDjuC/btrR3Z2BrvN/dpnKC1sCkU4wfXiCrW57ak/img.jpg&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/xDjuC/btrR3Z2BrvN/dpnKC1sCkU4wfXiCrW57ak/img.jpg&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FxDjuC%2FbtrR3Z2BrvN%2FdpnKC1sCkU4wfXiCrW57ak%2Fimg.jpg&quot; width=&quot;4032&quot; height=&quot;3024&quot; data-origin-width=&quot;4032&quot; data-origin-height=&quot;3024&quot; data-ke-mobilestyle=&quot;widthOrigin&quot; filename=&quot;img.jpg&quot; filemime=&quot;image/jpeg&quot; onerror=&quot;this.onerror=null; this.src='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png'; this.srcset='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png';&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;/div&gt;&lt;/div&gt;&lt;div class=&quot;column&quot; id=&quot;30d1fea7-aa79-4ef3-bfa7-c5f83d5b7519&quot; style=&quot;width:50%&quot;&gt;&lt;div class=&quot;image notion-img&quot; id=&quot;b7520321-eee5-4779-ae4f-370eceec619e&quot;&gt;&lt;figure class=&quot;imageblock alignCenter&quot; width=&quot;4032&quot; height=&quot;3024&quot; data-origin-width=&quot;4032&quot; data-origin-height=&quot;3024&quot; data-ke-mobilestyle=&quot;widthOrigin&quot; filename=&quot;img.jpg&quot; filemime=&quot;image/jpeg&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/cebZR2/btrR21Uji1S/pmsnBENbzJoUrwx8mtN4Ok/img.jpg&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/cebZR2/btrR21Uji1S/pmsnBENbzJoUrwx8mtN4Ok/img.jpg&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/cebZR2/btrR21Uji1S/pmsnBENbzJoUrwx8mtN4Ok/img.jpg&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FcebZR2%2FbtrR21Uji1S%2FpmsnBENbzJoUrwx8mtN4Ok%2Fimg.jpg&quot; width=&quot;4032&quot; height=&quot;3024&quot; data-origin-width=&quot;4032&quot; data-origin-height=&quot;3024&quot; data-ke-mobilestyle=&quot;widthOrigin&quot; filename=&quot;img.jpg&quot; filemime=&quot;image/jpeg&quot; onerror=&quot;this.onerror=null; this.src='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png'; this.srcset='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png';&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;/div&gt;&lt;/div&gt;&lt;/div&gt;&lt;div class=&quot;image notion-img&quot; id=&quot;9a147c1d-d9b8-446a-b4a5-ffd203b76f44&quot;&gt;&lt;figure class=&quot;imageblock alignCenter&quot; width=&quot;4032&quot; height=&quot;3024&quot; data-origin-width=&quot;4032&quot; data-origin-height=&quot;3024&quot; data-ke-mobilestyle=&quot;widthOrigin&quot; filename=&quot;img.jpg&quot; filemime=&quot;image/jpeg&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/bCR9RW/btrR1gkvHvn/tTYx12QieeH5O7XlHRHE2K/img.jpg&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/bCR9RW/btrR1gkvHvn/tTYx12QieeH5O7XlHRHE2K/img.jpg&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/bCR9RW/btrR1gkvHvn/tTYx12QieeH5O7XlHRHE2K/img.jpg&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FbCR9RW%2FbtrR1gkvHvn%2FtTYx12QieeH5O7XlHRHE2K%2Fimg.jpg&quot; width=&quot;4032&quot; height=&quot;3024&quot; data-origin-width=&quot;4032&quot; data-origin-height=&quot;3024&quot; data-ke-mobilestyle=&quot;widthOrigin&quot; filename=&quot;img.jpg&quot; filemime=&quot;image/jpeg&quot; onerror=&quot;this.onerror=null; this.src='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png'; this.srcset='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png';&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;figcaption&gt;사진3) 굴곡진 부분은 그림자로 인해 어둡다&lt;/figcaption&gt;&lt;/div&gt;&lt;p class=&quot;&quot; id=&quot;2669daa1-54db-4258-9183-90b1b5489561&quot;&gt;아무래도 손바닥과 가장 밀착되는 부분이 변색 이슈가 있을 것 같아, (사진3)처럼 플래시를 터트렸지만 별도의 오염이나 이염은 없었다. 지금도 처음 상태처럼 화이트에 회색 한방울 떨어뜨린 색감을 보여준다.&lt;/p&gt;&lt;p class=&quot;&quot; id=&quot;0cf50ad8-323d-48c5-acbf-81eb725b2ce2&quot;&gt;
&lt;/p&gt;&lt;figure class=&quot;callout&quot; id=&quot;02d8fe81-309c-4b96-9d6c-723b2f88c307&quot; style=&quot;white-space:pre-wrap;display:flex&quot;&gt;&lt;div style=&quot;font-size:1.5em&quot;&gt;&lt;span class=&quot;icon&quot;&gt; &lt;/span&gt;&lt;/div&gt;&lt;div style=&quot;width:100%&quot;&gt;&lt;strong&gt;결론 : 3달 이상 하드하게 사용했지만, 변색 및 착색 이슈는 없었다.&lt;/strong&gt;&lt;/div&gt;&lt;/figure&gt;&lt;hr id=&quot;3adfd4f9-40ac-40c4-b91f-b54c11af8b85&quot;/&gt;&lt;h1 class=&quot;&quot; id=&quot;94dac508-9f1d-4f6c-8b91-61774cde2e4c&quot;&gt;후기&lt;/h1&gt;&lt;p class=&quot;&quot; id=&quot;3100397b-0f53-4ff9-8199-16f90ac667d2&quot;&gt;데스크 셋업으로 인해, 맨 처음부터 내 선택지는 페일 그레이 색상이었다.
변색 이슈를 보긴 했지만, 뽑기겠거니 하는 생각에 그냥 구매했다.&lt;/p&gt;&lt;p class=&quot;&quot; id=&quot;5a197bef-ecb4-4033-89ee-86e38abe3b09&quot;&gt;
&lt;/p&gt;&lt;div class=&quot;image notion-img&quot; id=&quot;caaa4a98-58a5-46eb-a62f-c11fd673f114&quot;&gt;&lt;figure class=&quot;imageblock alignCenter&quot; width=&quot;552&quot; height=&quot;514&quot; data-origin-width=&quot;552&quot; data-origin-height=&quot;514&quot; data-ke-mobilestyle=&quot;widthOrigin&quot; filename=&quot;img.png&quot; filemime=&quot;image/png&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/bDQnoa/btrR2SC9Tq4/8nfhtmoJPQ59wsPv9KPwd0/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/bDQnoa/btrR2SC9Tq4/8nfhtmoJPQ59wsPv9KPwd0/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/bDQnoa/btrR2SC9Tq4/8nfhtmoJPQ59wsPv9KPwd0/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FbDQnoa%2FbtrR2SC9Tq4%2F8nfhtmoJPQ59wsPv9KPwd0%2Fimg.png&quot; width=&quot;552&quot; height=&quot;514&quot; data-origin-width=&quot;552&quot; data-origin-height=&quot;514&quot; data-ke-mobilestyle=&quot;widthOrigin&quot; filename=&quot;img.png&quot; filemime=&quot;image/png&quot; onerror=&quot;this.onerror=null; this.src='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png'; this.srcset='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png';&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;/div&gt;&lt;p class=&quot;&quot; id=&quot;1edb3fe6-fc0c-491e-a15e-c0064669b689&quot;&gt;다른 지인이 MX Master 3 블랙 색상을 사용중이었는데, 3 버전의 경우 플라스틱 같은 재질로 되어 있다. 그래서 오래 사용할 경우, &lt;code&gt;검정색임에도 특유의 기름때가 묻거나 좀 맨들해지는 사용감&lt;/code&gt;을 보게 되었다.&lt;/p&gt;&lt;p class=&quot;&quot; id=&quot;f3a13797-3ad1-484a-80dc-98e90c12e1e0&quot;&gt;하지만, MX Master 3S의 경우 겉 재질이 지우개 같은 고무 느낌? 타이어 같은 고무가 아닌 약간 맨들한 실리콘 같은 고무라고 해야하나? 그런 재질이어서 기름때가 묻거나 사용감이 드러나진 않았다. 또 사용할수록 뭔가 계속 잡고 싶어졌다.&lt;/p&gt;&lt;p class=&quot;&quot; id=&quot;d97c17c0-c30f-4ab7-802b-bdc03820516c&quot;&gt;나는 현재도 MX Master 3S 페일 그레이 색상을 구매한 것을 아주 잘한 소비라 생각한다. 무소음도 만족스럽고, 이전 Anywhere2에서 겪었던 휠씹힘도 없고, 색상도 아주 마음에 든다. (다만, 가로 스크롤은 뭔가 활용하기가 어렵다)&lt;/p&gt;&lt;p class=&quot;&quot; id=&quot;eb4f1908-f1f1-4e86-b6d4-18eab8ef1f81&quot;&gt;
&lt;/p&gt;&lt;p class=&quot;&quot; id=&quot;bc04da2c-db20-4846-92ea-793227541386&quot;&gt;변색 이슈로 인해 구매가 꺼려졌던 분들이 계시다면, 이 글이 약간의 도움이 되길 바랍니다.
궁금한 사항은 댓글 달아주시면, 답글 달도록 하겠습니다 :D&lt;/p&gt;&lt;/div&gt;&lt;/article&gt;&lt;/body&gt;</description>
      <category>정보/TECH</category>
      <category>IT기기</category>
      <category>마우스</category>
      <author>3sammy</author>
      <guid isPermaLink="true">https://23log.tistory.com/188</guid>
      <comments>https://23log.tistory.com/188#entry188comment</comments>
      <pubDate>Fri, 25 Nov 2022 00:38:13 +0900</pubDate>
    </item>
    <item>
      <title>[에러 리포트] 파이썬 셀레니움, ValueError: There is no such driver by url</title>
      <link>https://23log.tistory.com/187</link>
      <description>&lt;body&gt;&lt;article class=&quot;page sans Notion&quot; id=&quot;270eff6b-a594-4fd7-abf2-204fda2238f6&quot;&gt;&lt;div class=&quot;page-body Tistory&quot;&gt;&lt;figure class=&quot;callout&quot; id=&quot;646b886b-575e-484d-a050-bebf06562061&quot; style=&quot;white-space:pre-wrap;display:flex&quot;&gt;&lt;div style=&quot;font-size:1.5em&quot;&gt;&lt;span class=&quot;icon&quot;&gt;⚙&lt;/span&gt;&lt;/div&gt;&lt;div style=&quot;width:100%&quot;&gt;&lt;strong&gt;개발 환경&lt;/strong&gt;
- device : &lt;code&gt;2021 Macbook Pro M1 Pro 14inch&lt;/code&gt;&lt;code&gt;&lt;mark class=&quot;highlight-gray&quot;&gt;(맥북프로 14 M1 Pro 모델)&lt;/mark&gt;&lt;/code&gt;
- OS : &lt;code&gt;macOS Monterey 12.5.1&lt;/code&gt;&lt;/div&gt;&lt;/figure&gt;&lt;figure class=&quot;callout&quot; id=&quot;145d4e6e-4f62-4239-9879-a278b8fa365b&quot; style=&quot;white-space:pre-wrap;display:flex&quot;&gt;&lt;div style=&quot;font-size:1.5em&quot;&gt;&lt;span class=&quot;icon&quot;&gt;⚠️&lt;/span&gt;&lt;/div&gt;&lt;div style=&quot;width:100%&quot;&gt;본 포스팅은 저의 &lt;span style=&quot;border-bottom:0.05em solid&quot;&gt;개인적 생각을 기반&lt;/span&gt;으로 작성되었습니다.
따라서 정답이 아닌, 에러 해결을 위한 하나의 과정으로서 참고하시길 바랍니다.
*수정이 필요한 부분이 있을 경우, 댓글로 알려 주시면 수정하도록 하겠습니다 &lt;/div&gt;&lt;/figure&gt;&lt;h1 class=&quot;&quot; id=&quot;615fba7b-97b9-4434-9222-0452cb881419&quot;&gt;  에러 내용 및 상황&lt;/h1&gt;&lt;ul class=&quot;bulleted-list&quot; id=&quot;69d2f721-b923-4421-866c-34d9a493031e&quot;&gt;&lt;li style=&quot;list-style-type:disc&quot;&gt;셀레니움을 활용하여, 노션에서 티스토리로 자동 업로드를 실행하던 도중. 위와 같은 에러가 발생함.&lt;/li&gt;&lt;/ul&gt;&lt;ul class=&quot;bulleted-list&quot; id=&quot;54488dea-217e-4dc6-81d6-a5f53ffe167c&quot;&gt;&lt;li style=&quot;list-style-type:disc&quot;&gt;생각해보니 크롬 웹드라이버를 설치하지 않았던 것 같아서, 내 버전에 맞는 크롬 드라이버를 설치함&lt;ul class=&quot;bulleted-list&quot; id=&quot;a99ed022-285c-426b-9063-d0daa23a7319&quot;&gt;&lt;li style=&quot;list-style-type:circle&quot;&gt;&lt;a href=&quot;https://chromedriver.chromium.org/downloads&quot;&gt;https://chromedriver.chromium.org/downloads&lt;/a&gt;&lt;/li&gt;&lt;/ul&gt;&lt;ul class=&quot;bulleted-list&quot; id=&quot;662f67ab-e647-4c80-9f90-3088357bdc4a&quot;&gt;&lt;li style=&quot;list-style-type:circle&quot;&gt;M1으로 분류된 항목이 없어서, &lt;code&gt;arm64&lt;/code&gt;로 설치&lt;/li&gt;&lt;/ul&gt;&lt;/li&gt;&lt;/ul&gt;&lt;ul class=&quot;bulleted-list&quot; id=&quot;6bf3239f-3def-4bd2-bdb7-c378e56a8996&quot;&gt;&lt;li style=&quot;list-style-type:disc&quot;&gt;하지만 실행을 하니, 셀레니움을 로드할 때 아래의 에러가 발생함&lt;/li&gt;&lt;/ul&gt;&lt;pre class=&quot;code JavaScript&quot; id=&quot;5abcbcbf-b01a-47e1-8b3a-2f8bc69abe61&quot;&gt;&lt;code&gt;ValueError: There is no such driver by url https://chromedriver.storage.googleapis.com/106.0.5249.61/chromedriver_mac_arm64.zip/107.0.5304.62/chromedriver_mac64_m1.zip&lt;/code&gt;&lt;/pre&gt;&lt;h1 class=&quot;&quot; id=&quot;bc14d4cc-fcc5-4e36-a122-06e257b6b8cc&quot;&gt;  원인&lt;/h1&gt;&lt;ul class=&quot;bulleted-list&quot; id=&quot;15b8e49a-3772-4129-820d-5ccb2b698365&quot;&gt;&lt;li style=&quot;list-style-type:disc&quot;&gt;코드상에서 &lt;code&gt;from webdriver_manager.chrome import ChromeDriverManager&lt;/code&gt; 으로, 크롬의 웹드라이버 매니저를 import 하는데 이 때, 버젼을 받아오는 과정에서 에러가 발생함&lt;/li&gt;&lt;/ul&gt;&lt;ul class=&quot;bulleted-list&quot; id=&quot;41bfa003-0184-4eb4-bbda-cc5d0f685e48&quot;&gt;&lt;li style=&quot;list-style-type:disc&quot;&gt;&lt;a href=&quot;https://chromedriver.chromium.org/downloads&quot;&gt;크롬드라이버 사이트&lt;/a&gt;를 확인해보니,&lt;ul class=&quot;bulleted-list&quot; id=&quot;22db5a09-7451-4590-8c97-362aa6ead95f&quot;&gt;&lt;li style=&quot;list-style-type:circle&quot;&gt;이전 버전에선 &lt;code&gt;chromedriver_mac64_m1.zip&lt;/code&gt; 의 형태로 &lt;code&gt;_m1&lt;/code&gt; 키워드가 파일명에 포함되고 있는데&lt;div class=&quot;image notion-img&quot; id=&quot;b7b960bb-857e-40fd-8ae6-a3d010596b50&quot;&gt;&lt;figure class=&quot;imageblock alignCenter&quot; width=&quot;766&quot; height=&quot;281&quot; data-origin-width=&quot;766&quot; data-origin-height=&quot;281&quot; data-ke-mobilestyle=&quot;widthOrigin&quot; filename=&quot;img.png&quot; filemime=&quot;image/png&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/dvjmQ6/btrQ3TCq0Z0/m9d7DgwzbcyQYH3ZKEzFHk/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/dvjmQ6/btrQ3TCq0Z0/m9d7DgwzbcyQYH3ZKEzFHk/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/dvjmQ6/btrQ3TCq0Z0/m9d7DgwzbcyQYH3ZKEzFHk/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FdvjmQ6%2FbtrQ3TCq0Z0%2Fm9d7DgwzbcyQYH3ZKEzFHk%2Fimg.png&quot; width=&quot;766&quot; height=&quot;281&quot; data-origin-width=&quot;766&quot; data-origin-height=&quot;281&quot; data-ke-mobilestyle=&quot;widthOrigin&quot; filename=&quot;img.png&quot; filemime=&quot;image/png&quot; onerror=&quot;this.onerror=null; this.src='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png'; this.srcset='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png';&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;/div&gt;&lt;/li&gt;&lt;/ul&gt;&lt;ul class=&quot;bulleted-list&quot; id=&quot;1a846341-1799-447d-b6f7-6882eb87e4c6&quot;&gt;&lt;li style=&quot;list-style-type:circle&quot;&gt;최신의 버전으로 갈 수록, &lt;code&gt;_m1&lt;/code&gt; 이란 키워드가 사라지고 arm64로 대체되고 있음&lt;div class=&quot;image notion-img&quot; id=&quot;7e132f5c-32a6-4e5c-9efc-0f6dcd5131e1&quot;&gt;&lt;figure class=&quot;imageblock alignCenter&quot; width=&quot;786&quot; height=&quot;285&quot; data-origin-width=&quot;786&quot; data-origin-height=&quot;285&quot; data-ke-mobilestyle=&quot;widthOrigin&quot; filename=&quot;img.png&quot; filemime=&quot;image/png&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/O8XXR/btrQ9bvviE5/FTyI3BykVkBtEtYP8do6U0/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/O8XXR/btrQ9bvviE5/FTyI3BykVkBtEtYP8do6U0/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/O8XXR/btrQ9bvviE5/FTyI3BykVkBtEtYP8do6U0/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FO8XXR%2FbtrQ9bvviE5%2FFTyI3BykVkBtEtYP8do6U0%2Fimg.png&quot; width=&quot;786&quot; height=&quot;285&quot; data-origin-width=&quot;786&quot; data-origin-height=&quot;285&quot; data-ke-mobilestyle=&quot;widthOrigin&quot; filename=&quot;img.png&quot; filemime=&quot;image/png&quot; onerror=&quot;this.onerror=null; this.src='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png'; this.srcset='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png';&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;/div&gt;&lt;/li&gt;&lt;/ul&gt;&lt;/li&gt;&lt;/ul&gt;&lt;ul class=&quot;bulleted-list&quot; id=&quot;83da619d-55b0-4e6f-afbe-c6147ac2a0b9&quot;&gt;&lt;li style=&quot;list-style-type:disc&quot;&gt;에러의 url로 접속해보면, 해당 파일명의 드라이버가 없어서 에러 페이지로 연결됨을 확인할 수 있음&lt;/li&gt;&lt;/ul&gt;&lt;ul class=&quot;bulleted-list&quot; id=&quot;0df139e5-7fc9-465d-b6d9-0c51f518e60c&quot;&gt;&lt;li style=&quot;list-style-type:disc&quot;&gt;따라서 새롭게 올라가는 파일명 형식으로의 대응이 필요함&lt;/li&gt;&lt;/ul&gt;&lt;figure class=&quot;block-color-orange_background callout&quot; id=&quot;07e9fa3a-6cfa-4127-80e1-f358242a73ef&quot; style=&quot;white-space:pre-wrap;display:flex&quot;&gt;&lt;div style=&quot;font-size:1.5em&quot;&gt;&lt;span class=&quot;icon&quot;&gt; &lt;/span&gt;&lt;/div&gt;&lt;div style=&quot;width:100%&quot;&gt;&lt;strong&gt;::결론::&lt;/strong&gt;
드라이버 파일명이 &lt;code&gt;_arm64&lt;/code&gt; 로 바뀌어 업로드 되고 있으나, 웹드라이버 매니저가 이를 캐치하고 못하고 있음&lt;/div&gt;&lt;/figure&gt;&lt;hr id=&quot;09662db4-4afd-4aa3-a789-31ceb113e8ca&quot;/&gt;&lt;h3 class=&quot;&quot; id=&quot;2fd0e899-61e3-422e-8e46-cb1e849b94e8&quot;&gt;추가내용&lt;/h3&gt;&lt;ul class=&quot;bulleted-list&quot; id=&quot;b982ac3e-b484-47a0-b8be-5e732d005607&quot;&gt;&lt;li style=&quot;list-style-type:disc&quot;&gt;웹드라이버 매니저 &lt;code&gt;webdriver-manager&lt;/code&gt; 는, &lt;code&gt;selenium(셀레니움)&lt;/code&gt; 모듈의 웹드라이버 경로 지정의 번거로움을 해결해주는 하나의 모듈이다.&lt;ul class=&quot;bulleted-list&quot; id=&quot;3bdf4900-d747-43e0-b37a-b49747c51fdf&quot;&gt;&lt;li style=&quot;list-style-type:circle&quot;&gt;셀레니움 사용시, 크롬의 웹 드라이버 경로를 사용자가 직접 지정하고 교차 검증까지 해야 한다.&lt;/li&gt;&lt;/ul&gt;&lt;ul class=&quot;bulleted-list&quot; id=&quot;db343331-129c-4fd1-a794-efa9ed8da784&quot;&gt;&lt;li style=&quot;list-style-type:circle&quot;&gt;하지만 위 웹드라이버 매니저를 설치하게 되면, 모듈이 알아서 버젼을 탐색 → 버젼에 맞는 웹드라이버 다운로드 및 경로를 한번에 셀레니움에 넘겨주게 된다.&lt;/li&gt;&lt;/ul&gt;&lt;/li&gt;&lt;/ul&gt;&lt;ul class=&quot;bulleted-list&quot; id=&quot;e93ca350-d4e7-44a3-8077-de2ea6dba793&quot;&gt;&lt;li style=&quot;list-style-type:disc&quot;&gt;따라서 기존에 설치된 웹드라이버 매니저가 이전 버전이어서, 새롭게 바뀌어 올라가는 파일명에 대응하지 못하고 있었다.&lt;/li&gt;&lt;/ul&gt;&lt;h1 class=&quot;&quot; id=&quot;0a3c0eaf-3bfa-4e62-a17f-f3f237b10867&quot;&gt;  해결&lt;/h1&gt;&lt;pre class=&quot;code JavaScript&quot; id=&quot;dff9d40a-4e2f-4798-b760-72a78b944813&quot;&gt;&lt;code&gt;pip uninstall webdriver_manager
pip install git+https://github.com/SergeyPirogov/webdriver_manager@master&lt;/code&gt;&lt;/pre&gt;&lt;ul class=&quot;bulleted-list&quot; id=&quot;e45eec45-88cd-40ec-92dd-ecfa7e79eff0&quot;&gt;&lt;li style=&quot;list-style-type:disc&quot;&gt;기존 웹드라이브 매니저를 삭제하고, 최신의 버전으로 새롭게 설치한다.&lt;/li&gt;&lt;/ul&gt;&lt;p class=&quot;&quot; id=&quot;57a78a0f-2ee6-4677-abde-08ab11891cd0&quot;&gt;
&lt;/p&gt;&lt;h1 class=&quot;&quot; id=&quot;7c7a9375-db2e-4db8-8785-0a718f10c76f&quot;&gt;  레퍼런스&lt;/h1&gt;&lt;p class=&quot;&quot; id=&quot;a6abe975-6549-4794-8d34-78792d090341&quot;&gt;&lt;a href=&quot;https://stackoverflow.com/questions/74011776/valueerror-there-is-no-such-driver-by-url&quot;&gt;https://stackoverflow.com/questions/74011776/valueerror-there-is-no-such-driver-by-url&lt;/a&gt;&lt;/p&gt;&lt;p class=&quot;&quot; id=&quot;a0344b02-2ce4-493b-b3dd-083dd7d5ffe2&quot;&gt;&lt;a href=&quot;https://github.com/SergeyPirogov/webdriver_manager/pull/445&quot;&gt;https://github.com/SergeyPirogov/webdriver_manager/pull/445&lt;/a&gt;&lt;/p&gt;&lt;p class=&quot;&quot; id=&quot;56e6256a-4302-47e8-949e-c3072579d269&quot;&gt;
&lt;/p&gt;&lt;p class=&quot;&quot; id=&quot;a28c4614-0506-4411-ad40-948d8dc0184b&quot;&gt;
&lt;/p&gt;&lt;/div&gt;&lt;/article&gt;&lt;/body&gt;</description>
      <category>toy project/notion-to-tistory</category>
      <category>python</category>
      <category>에러 리포트</category>
      <author>3sammy</author>
      <guid isPermaLink="true">https://23log.tistory.com/187</guid>
      <comments>https://23log.tistory.com/187#entry187comment</comments>
      <pubDate>Sun, 13 Nov 2022 21:19:18 +0900</pubDate>
    </item>
    <item>
      <title>크롬 확장 프로그램 압축 및 설치, 2가지 방법 간단 정리</title>
      <link>https://23log.tistory.com/186</link>
      <description>&lt;body&gt;&lt;article class=&quot;page sans Notion&quot; id=&quot;923a10f4-e12f-4431-9bd3-a4a2d306e4ba&quot;&gt;&lt;div class=&quot;page-body Tistory&quot;&gt;&lt;figure class=&quot;callout&quot; id=&quot;bedc1aa8-1f92-4c68-8b53-9161aafac093&quot; style=&quot;white-space:pre-wrap;display:flex&quot;&gt;&lt;div style=&quot;font-size:1.5em&quot;&gt;&lt;span class=&quot;icon&quot;&gt; &lt;/span&gt;&lt;/div&gt;&lt;div style=&quot;width:100%&quot;&gt;본 포스팅은 망분리 환경에서
크롬 확장 프로그램을 설치하기 위한 방법에 대해 기술하였습니다.&lt;/div&gt;&lt;/figure&gt;&lt;h1 class=&quot;&quot; id=&quot;f64be61c-447b-439a-9387-6f9a48270f65&quot;&gt;확장 프로그램 압축하기&lt;/h1&gt;&lt;h2 class=&quot;&quot; id=&quot;945601f0-24ba-4ddd-b232-202676a4a64d&quot;&gt;&amp;lt;방법1&amp;gt; 사이트 이용 (추천 )&lt;/h2&gt;&lt;ol class=&quot;numbered-list&quot; id=&quot;917b1940-661f-4cef-b2d7-69275d991502&quot; start=&quot;1&quot; type=&quot;1&quot;&gt;&lt;li&gt;아래의 압축 사이트에 접속한다.&lt;figure id=&quot;a6d96eff-5042-4226-b647-d708140c19cc&quot;&gt;&lt;a class=&quot;bookmark source&quot; href=&quot;https://crxextractor.com/&quot;&gt;&lt;div class=&quot;bookmark-info&quot;&gt;&lt;div class=&quot;bookmark-text&quot;&gt;&lt;div class=&quot;bookmark-title&quot;&gt;Get .CRX Chrome Extension file, it's source code and download .CRX to your computer.&lt;/div&gt;&lt;div class=&quot;bookmark-description&quot;&gt;Turn any Chrome extension into white box. Learn from code, debug and pentest it! Hey, stranger!   Take a look at the special page Just download chrome extension!. This article uncovers a number of extremely useful Chrome Extensions to download.&lt;/div&gt;&lt;/div&gt;&lt;div class=&quot;bookmark-href&quot;&gt;&lt;img class=&quot;icon bookmark-icon&quot; src=&quot;https://crxextractor.com/favicons/icon-32x32.png&quot;/&gt;https://crxextractor.com/&lt;/div&gt;&lt;/div&gt;&lt;/a&gt;&lt;/figure&gt;&lt;/li&gt;&lt;/ol&gt;&lt;ol class=&quot;numbered-list&quot; id=&quot;c15dcbf8-de06-497e-a3a7-29fac6f8e908&quot; start=&quot;2&quot; type=&quot;1&quot;&gt;&lt;li&gt;크롬 웹 스토어으로 이동하여, 설치하고자 하는 확장프로그램 페이지로 이동한다.&lt;figure id=&quot;73c185c1-e286-4eee-ad71-ac1ea264e7b3&quot;&gt;&lt;a class=&quot;bookmark source&quot; href=&quot;https://chrome.google.com/webstore/category/extensions?hl=ko&quot;&gt;&lt;div class=&quot;bookmark-info&quot;&gt;&lt;div class=&quot;bookmark-text&quot;&gt;&lt;div class=&quot;bookmark-title&quot;&gt;Chrome 웹 스토어&lt;/div&gt;&lt;div class=&quot;bookmark-description&quot;&gt;브라우저에 새로운 기능을 추가하고 인터넷 탐색 환경을 맞춤설정할 수 있는 소규모 프로그램입니다.&lt;/div&gt;&lt;/div&gt;&lt;div class=&quot;bookmark-href&quot;&gt;&lt;img class=&quot;icon bookmark-icon&quot; src=&quot;https://ssl.gstatic.com/chrome/webstore/images/icon_144px.png&quot;/&gt;https://chrome.google.com/webstore/category/extensions?hl=ko&lt;/div&gt;&lt;/div&gt;&lt;img class=&quot;bookmark-image&quot; src=&quot;https://ssl.gstatic.com/chrome/webstore/images/chrome_web_store_1200x630.png&quot;/&gt;&lt;/a&gt;&lt;/figure&gt;&lt;/li&gt;&lt;/ol&gt;&lt;ol class=&quot;numbered-list&quot; id=&quot;da90e4f7-e49d-4109-b5bc-e94d28e14657&quot; start=&quot;3&quot; type=&quot;1&quot;&gt;&lt;li&gt;원하는 확장프로그램 페이지의 URL을 1번 사이트에 넣고, &lt;code&gt;다운로드&lt;/code&gt; → &lt;code&gt;GET .CRX&lt;/code&gt; 버튼을 눌러 다운로드를 받는다.&lt;div class=&quot;image notion-img&quot; id=&quot;99a0d236-d100-4b41-81a2-a08fb48640a0&quot;&gt;&lt;figure class=&quot;imageblock alignCenter&quot; width=&quot;2444&quot; height=&quot;1834&quot; data-origin-width=&quot;2444&quot; data-origin-height=&quot;1834&quot; data-ke-mobilestyle=&quot;widthOrigin&quot; filename=&quot;img.png&quot; filemime=&quot;image/png&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/bDdMSC/btrQ1mL35sW/YYe6Q8d1oeCCMwr1M91j1k/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/bDdMSC/btrQ1mL35sW/YYe6Q8d1oeCCMwr1M91j1k/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/bDdMSC/btrQ1mL35sW/YYe6Q8d1oeCCMwr1M91j1k/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FbDdMSC%2FbtrQ1mL35sW%2FYYe6Q8d1oeCCMwr1M91j1k%2Fimg.png&quot; width=&quot;2444&quot; height=&quot;1834&quot; data-origin-width=&quot;2444&quot; data-origin-height=&quot;1834&quot; data-ke-mobilestyle=&quot;widthOrigin&quot; filename=&quot;img.png&quot; filemime=&quot;image/png&quot; onerror=&quot;this.onerror=null; this.src='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png'; this.srcset='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png';&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;figcaption&gt;컴퓨터가 손상될 수 있다는 경고가 뜨지만, &lt;strong&gt;계속&lt;/strong&gt; 한다.&lt;/figcaption&gt;&lt;/div&gt;&lt;/li&gt;&lt;/ol&gt;&lt;ol class=&quot;numbered-list&quot; id=&quot;8eee2d8e-b601-464d-a332-ae87e1991bf2&quot; start=&quot;4&quot; type=&quot;1&quot;&gt;&lt;li&gt;&lt;code&gt;crx&lt;/code&gt; 파일을 원하는 PC로 가져간다.&lt;/li&gt;&lt;/ol&gt;&lt;ol class=&quot;numbered-list&quot; id=&quot;a267aee8-71d0-45c9-a079-529635fdf679&quot; start=&quot;5&quot; type=&quot;1&quot;&gt;&lt;li&gt;끝.&lt;/li&gt;&lt;/ol&gt;&lt;hr id=&quot;00925c66-a89c-4485-afef-fd58fe79be16&quot;/&gt;&lt;h2 class=&quot;&quot; id=&quot;58e3e2a5-0ad4-4a82-9526-adbc1dd606f8&quot;&gt;&amp;lt;방법2&amp;gt; 개발자 모드 내 압축/해제 이용하기 &lt;/h2&gt;&lt;ol class=&quot;numbered-list&quot; id=&quot;761dd1b1-1fe6-4b65-a95c-50a20f9c664b&quot; start=&quot;1&quot; type=&quot;1&quot;&gt;&lt;li&gt;원하는 확장프로그램을 다운로드 받아 설치한다.&lt;/li&gt;&lt;/ol&gt;&lt;ol class=&quot;numbered-list&quot; id=&quot;ff6cd891-d08e-4865-9ce8-6ba88a3ffc4e&quot; start=&quot;2&quot; type=&quot;1&quot;&gt;&lt;li&gt;&lt;code&gt;chrome://version/&lt;/code&gt; 으로 이동하여, 프로필 경로 확인한다.&lt;/li&gt;&lt;/ol&gt;&lt;ol class=&quot;numbered-list&quot; id=&quot;f1edaea2-5218-4051-94a9-633451822145&quot; start=&quot;3&quot; type=&quot;1&quot;&gt;&lt;li&gt;프로필 경로의 폴더로 이동한 뒤, &lt;code&gt;\Extensions&lt;/code&gt; 폴더로 들어간다.&lt;/li&gt;&lt;/ol&gt;&lt;ol class=&quot;numbered-list&quot; id=&quot;241beafc-76f7-4216-a8ff-30c58d023ad5&quot; start=&quot;4&quot; type=&quot;1&quot;&gt;&lt;li&gt;확장 프로그램(&lt;code&gt;chrome://extensions/&lt;/code&gt;) 목록에서 ID 값을 활용하여 압축하고자 하는 폴더로 이동한다.&lt;/li&gt;&lt;/ol&gt;&lt;ol class=&quot;numbered-list&quot; id=&quot;02fb4ba5-d533-488c-9538-b5421bf2ad50&quot; start=&quot;5&quot; type=&quot;1&quot;&gt;&lt;li&gt;&lt;code&gt;chrome://extensions/&lt;/code&gt; 에서 확장프로그램 압축 버튼 클릭한 뒤, 4번 폴더를 선택하여 확장프로그램 압축한다 → &lt;code&gt;crx&lt;/code&gt;, &lt;code&gt;pem&lt;/code&gt; 파일이 생성된다.&lt;/li&gt;&lt;/ol&gt;&lt;ol class=&quot;numbered-list&quot; id=&quot;58e6aa32-46df-4a8a-b34c-d761710c7484&quot; start=&quot;6&quot; type=&quot;1&quot;&gt;&lt;li&gt;&lt;code&gt;crx&lt;/code&gt; 파일을 원하는 PC로 가져간다.&lt;/li&gt;&lt;/ol&gt;&lt;ol class=&quot;numbered-list&quot; id=&quot;9ab2aee6-f6ae-4ed5-a546-fa934452a04f&quot; start=&quot;7&quot; type=&quot;1&quot;&gt;&lt;li&gt;끝&lt;/li&gt;&lt;/ol&gt;&lt;p class=&quot;&quot; id=&quot;63eb5f06-bf0b-43bf-8f91-45402c8866dd&quot;&gt;
&lt;/p&gt;&lt;hr id=&quot;608bf26c-22b9-4964-b14b-7ace67b3d7a1&quot;/&gt;&lt;figure class=&quot;callout&quot; id=&quot;7a5e73d1-d651-4a37-84a6-61b221c9aa9a&quot; style=&quot;white-space:pre-wrap;display:flex&quot;&gt;&lt;div style=&quot;font-size:1.5em&quot;&gt;&lt;span class=&quot;icon&quot;&gt; &lt;/span&gt;&lt;/div&gt;&lt;div style=&quot;width:100%&quot;&gt;압축/해제 방법의 경우 폴더 구조나 지정 방식에 따라 압축이 잘못되는 경우가 있습니다. 이 경우, 설치시 손상되었다며 제대로 진행이 불가하게 됩니다.

설치가 안된 파일들도, 첫번째 방법의 사이트를 이용해서 바로 압축 → 해제 하니 정상 설치되었습니다.
사이트를 이용하는 방식이 더욱 안정적이고 편리하므로, &lt;mark class=&quot;highlight-blue&quot;&gt;&lt;strong&gt;첫 번 째 방식으로 사용을 추천&lt;/strong&gt;&lt;/mark&gt;드립니다!&lt;/div&gt;&lt;/figure&gt;&lt;h1 class=&quot;&quot; id=&quot;5cc42523-97f1-490c-86c7-2d2f7d7ba16c&quot;&gt;확장 프로그램 설치하기&lt;/h1&gt;&lt;ol class=&quot;numbered-list&quot; id=&quot;c60f0504-96ea-4138-9190-0daf0926a021&quot; start=&quot;1&quot; type=&quot;1&quot;&gt;&lt;li&gt;확장프로그램 관리로 이동한다.&lt;p class=&quot;&quot; id=&quot;bd98a910-1369-4007-b8e4-b1656ff64a5d&quot;&gt;&lt;code&gt;chrome://extensions/&lt;/code&gt;&lt;/p&gt;&lt;/li&gt;&lt;/ol&gt;&lt;ol class=&quot;numbered-list&quot; id=&quot;db24079b-f143-40d4-bad9-5861829c6a04&quot; start=&quot;2&quot; type=&quot;1&quot;&gt;&lt;li&gt;&lt;code&gt;crx&lt;/code&gt; 파일을 드래그하여 페이지에 두면, 설치가 진행된다.&lt;/li&gt;&lt;/ol&gt;&lt;p class=&quot;&quot; id=&quot;672b2fd1-3752-4b8b-9603-4cf60f25c998&quot;&gt;
&lt;/p&gt;&lt;/div&gt;&lt;/article&gt;&lt;/body&gt;</description>
      <category>정보/TECH</category>
      <category>Chrome</category>
      <author>3sammy</author>
      <guid isPermaLink="true">https://23log.tistory.com/186</guid>
      <comments>https://23log.tistory.com/186#entry186comment</comments>
      <pubDate>Sun, 13 Nov 2022 20:09:08 +0900</pubDate>
    </item>
    <item>
      <title>Next.js 프로젝트 셋업 하기</title>
      <link>https://23log.tistory.com/185</link>
      <description>&lt;body&gt;&lt;article class=&quot;page sans Notion&quot; id=&quot;551477c5-702b-4a9b-a887-4ec26bf874a2&quot;&gt;&lt;div class=&quot;page-body Tistory&quot;&gt;&lt;figure id=&quot;e31845fb-95d2-45f0-abe9-9cda1b4c8dd7&quot;&gt;&lt;a class=&quot;bookmark source&quot; href=&quot;https://nextjs.org/docs/getting-started&quot;&gt;&lt;div class=&quot;bookmark-info&quot;&gt;&lt;div class=&quot;bookmark-text&quot;&gt;&lt;div class=&quot;bookmark-title&quot;&gt;Getting Started | Next.js&lt;/div&gt;&lt;div class=&quot;bookmark-description&quot;&gt;Welcome to the Next.js documentation! If you're new to Next.js, we recommend starting with the learn course. The interactive course with quizzes will guide you through everything you need to know to use Next.js. If you have questions about anything related to Next.js, you're always welcome to ask our community on GitHub Discussions.&lt;/div&gt;&lt;/div&gt;&lt;div class=&quot;bookmark-href&quot;&gt;&lt;img class=&quot;icon bookmark-icon&quot; src=&quot;https://nextjs.org/static/favicon/favicon.ico&quot;/&gt;https://nextjs.org/docs/getting-started&lt;/div&gt;&lt;/div&gt;&lt;img class=&quot;bookmark-image&quot; src=&quot;https://nextjs.org/static/twitter-cards/documentation.png&quot;/&gt;&lt;/a&gt;&lt;/figure&gt;&lt;h1 class=&quot;&quot; id=&quot;38368102-57e7-4bdd-911f-c6b0557ed825&quot;&gt;1️⃣ 설치하기&lt;/h1&gt;&lt;ol class=&quot;numbered-list&quot; id=&quot;58080664-d902-4107-bc75-919762d782d9&quot; start=&quot;1&quot; type=&quot;1&quot;&gt;&lt;li&gt;프로젝트 생성을 원하는 폴더로 이동하여, 터미널을 연다.&lt;/li&gt;&lt;/ol&gt;&lt;ol class=&quot;numbered-list&quot; id=&quot;4c0a4b72-afcd-4a1c-a2f8-e8881cf03761&quot; start=&quot;2&quot; type=&quot;1&quot;&gt;&lt;li&gt;아래의 명령어를 입력한다.&lt;pre class=&quot;code Bash&quot; id=&quot;cd238e39-3ef8-4530-b33e-16b6cba7d262&quot;&gt;&lt;code&gt;npx create-next-app@latest&lt;/code&gt;&lt;/pre&gt;&lt;/li&gt;&lt;/ol&gt;&lt;ol class=&quot;numbered-list&quot; id=&quot;dcea4691-3a69-4e5e-b500-791c32561f96&quot; start=&quot;3&quot; type=&quot;1&quot;&gt;&lt;li&gt;원하는 프로젝트명을 입력하면, 자동으로 생성 및 관련 라이브러리 및 디펜던시를 설치해준다.&lt;div class=&quot;image notion-img&quot; id=&quot;7ce3ae14-fb8e-499a-a49d-a775505dc474&quot;&gt;&lt;figure class=&quot;imageblock alignCenter&quot; width=&quot;1134&quot; height=&quot;826&quot; data-origin-width=&quot;1134&quot; data-origin-height=&quot;826&quot; data-ke-mobilestyle=&quot;widthOrigin&quot; filename=&quot;img.png&quot; filemime=&quot;image/png&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/bcdkyO/btrNxdRCRfu/S9DSHKxZPkEw1HuzhgkyOk/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/bcdkyO/btrNxdRCRfu/S9DSHKxZPkEw1HuzhgkyOk/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/bcdkyO/btrNxdRCRfu/S9DSHKxZPkEw1HuzhgkyOk/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FbcdkyO%2FbtrNxdRCRfu%2FS9DSHKxZPkEw1HuzhgkyOk%2Fimg.png&quot; width=&quot;1134&quot; height=&quot;826&quot; data-origin-width=&quot;1134&quot; data-origin-height=&quot;826&quot; data-ke-mobilestyle=&quot;widthOrigin&quot; filename=&quot;img.png&quot; filemime=&quot;image/png&quot; onerror=&quot;this.onerror=null; this.src='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png'; this.srcset='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png';&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;/div&gt;&lt;/li&gt;&lt;/ol&gt;&lt;p class=&quot;&quot; id=&quot;ed6c5132-5bcd-4cc2-b9f9-01a61be5123b&quot;&gt;
&lt;/p&gt;&lt;h1 class=&quot;&quot; id=&quot;6fb33861-0433-477f-a1e9-392a3dad2fbf&quot;&gt;2️⃣ 실행하기&lt;/h1&gt;&lt;pre class=&quot;code Bash&quot; id=&quot;020ec68c-e5ef-48c0-a0f7-c8e68c0bb327&quot;&gt;&lt;code&gt;yarn dev&lt;/code&gt;&lt;/pre&gt;&lt;p class=&quot;&quot; id=&quot;442668e2-4634-4e99-b04b-39c6c01ffc9c&quot;&gt;vscode/터미널 에서 &lt;code&gt;yarn dev&lt;/code&gt; 명령어를 입력하여 프로젝트를 실행한다&lt;code&gt;http://localhost:3000&lt;/code&gt; 로 접속하면 아래 사진처럼 정상적으로 사이트가 로드됨을 확인 할 수 있다.&lt;/p&gt;&lt;div class=&quot;image notion-img&quot; id=&quot;532786fe-4049-40bf-a190-d7aa389d156d&quot;&gt;&lt;figure class=&quot;imageblock alignCenter&quot; width=&quot;1780&quot; height=&quot;1846&quot; data-origin-width=&quot;1780&quot; data-origin-height=&quot;1846&quot; data-ke-mobilestyle=&quot;widthOrigin&quot; filename=&quot;img.png&quot; filemime=&quot;image/png&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/buv4DO/btrNyG0jZER/Dg24mC9nWR2jZ4WU7nhF10/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/buv4DO/btrNyG0jZER/Dg24mC9nWR2jZ4WU7nhF10/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/buv4DO/btrNyG0jZER/Dg24mC9nWR2jZ4WU7nhF10/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2Fbuv4DO%2FbtrNyG0jZER%2FDg24mC9nWR2jZ4WU7nhF10%2Fimg.png&quot; width=&quot;1780&quot; height=&quot;1846&quot; data-origin-width=&quot;1780&quot; data-origin-height=&quot;1846&quot; data-ke-mobilestyle=&quot;widthOrigin&quot; filename=&quot;img.png&quot; filemime=&quot;image/png&quot; onerror=&quot;this.onerror=null; this.src='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png'; this.srcset='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png';&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;/div&gt;&lt;h1 class=&quot;&quot; id=&quot;8ee46d9a-c569-415a-89dc-cca5f8f0a705&quot;&gt;⌨️ 실행되는 파일은?&lt;/h1&gt;&lt;h3 class=&quot;&quot; id=&quot;7d03cdb6-833c-4eae-af8a-d771c08039e3&quot;&gt;_app.js&lt;/h3&gt;&lt;pre class=&quot;code JavaScript&quot; id=&quot;5453de15-81f4-4f6b-8fc7-449c7ace262d&quot;&gt;&lt;code&gt;import '../styles/globals.css'

function MyApp({ Component, pageProps }) {
  return &amp;lt;Component {...pageProps} /&amp;gt;
}

export default MyApp&lt;/code&gt;&lt;/pre&gt;&lt;p class=&quot;&quot; id=&quot;702a8515-e4cc-412d-b670-fe4cdddb87b5&quot;&gt;최초엔 &lt;code&gt;_app.js&lt;/code&gt; 파일이 실행되며, 내부에 존재하는 컴포넌트를 실행하는 형태로 되어 있습니다.&lt;/p&gt;&lt;p class=&quot;&quot; id=&quot;b9472623-c7f1-422f-a8ad-d4c3bfe99d90&quot;&gt;위 파일에서 글로벌 스타일(&lt;code&gt;globals.css&lt;/code&gt;)을 정의할 수 있습니다.&lt;/p&gt;&lt;figure id=&quot;ee3971cf-5210-4c3d-94cf-aaa39151bc81&quot;&gt;&lt;a class=&quot;bookmark source&quot; href=&quot;https://github.com/vercel/next.js/blob/canary/examples/next-forms/pages/_app.tsx&quot;&gt;&lt;div class=&quot;bookmark-info&quot;&gt;&lt;div class=&quot;bookmark-text&quot;&gt;&lt;div class=&quot;bookmark-title&quot;&gt;next.js/_app.tsx at canary · vercel/next.js&lt;/div&gt;&lt;div class=&quot;bookmark-description&quot;&gt;This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters. Learn more about bidirectional Unicode characters You can't perform that action at this time. You signed in with another tab or window.&lt;/div&gt;&lt;/div&gt;&lt;div class=&quot;bookmark-href&quot;&gt;&lt;img class=&quot;icon bookmark-icon&quot; src=&quot;https://github.com/favicon.ico&quot;/&gt;https://github.com/vercel/next.js/blob/canary/examples/next-forms/pages/_app.tsx&lt;/div&gt;&lt;/div&gt;&lt;img class=&quot;bookmark-image&quot; src=&quot;https://repository-images.githubusercontent.com/70107786/15008733-bde8-4a40-8763-d45e4f4821a7&quot;/&gt;&lt;/a&gt;&lt;/figure&gt;&lt;h3 class=&quot;&quot; id=&quot;2ff20ba3-cdb4-4b76-8c57-009b322ebd6b&quot;&gt;index.js&lt;/h3&gt;&lt;pre class=&quot;code JavaScript&quot; id=&quot;eba96c3b-b01c-4f92-9fc8-43d8cd4057fc&quot;&gt;&lt;code&gt;import Head from 'next/head'
import Image from 'next/image'
import styles from '../styles/Home.module.css'

export default function Home() {
  return (
    &amp;lt;div className={styles.container}&amp;gt;
      &amp;lt;Head&amp;gt;
        &amp;lt;title&amp;gt;Create Next App&amp;lt;/title&amp;gt;
        &amp;lt;meta name=&quot;description&quot; content=&quot;Generated by create next app&quot; /&amp;gt;
        &amp;lt;link rel=&quot;icon&quot; href=&quot;/favicon.ico&quot; /&amp;gt;
      &amp;lt;/Head&amp;gt;

      &amp;lt;main className={styles.main}&amp;gt;
				...
      &amp;lt;/main&amp;gt;

      &amp;lt;footer className={styles.footer}&amp;gt;
				...
      &amp;lt;/footer&amp;gt;
    &amp;lt;/div&amp;gt;
  )
}&lt;/code&gt;&lt;/pre&gt;&lt;p class=&quot;&quot; id=&quot;a225aa72-357a-4145-8732-bc4c6e4dc036&quot;&gt;이후 pages 폴더에 존재하는 &lt;code&gt;index.js&lt;/code&gt; 파일을 랜더링합니다.&lt;/p&gt;&lt;p class=&quot;&quot; id=&quot;2e225fb6-f14b-4642-b9e0-234d9c7c6d1e&quot;&gt;위 js파일이 정상적으로 랜더링되어 위와 같은 &lt;mark class=&quot;highlight-blue&quot;&gt;&lt;strong&gt;Welcome &lt;/strong&gt;&lt;/mark&gt;페이지를 브라우저에 표시하여 줍니다.&lt;/p&gt;&lt;p class=&quot;&quot; id=&quot;b853098f-af7d-49b8-8263-221bb6487198&quot;&gt;위의 파일에서 head에 meta 태그 등을 선언할 수 있고, 이런 과정을 통해 SEO 최적화를 가능하게 해줍니다.&lt;/p&gt;&lt;figure id=&quot;616f47ab-e808-4ae0-b9c5-07db6a20b5cb&quot;&gt;&lt;a class=&quot;bookmark source&quot; href=&quot;https://github.com/vercel/next.js/blob/canary/examples/next-forms/pages/index.tsx&quot;&gt;&lt;div class=&quot;bookmark-info&quot;&gt;&lt;div class=&quot;bookmark-text&quot;&gt;&lt;div class=&quot;bookmark-title&quot;&gt;next.js/index.tsx at canary · vercel/next.js&lt;/div&gt;&lt;div class=&quot;bookmark-description&quot;&gt;This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters. Learn more about bidirectional Unicode characters You can't perform that action at this time. You signed in with another tab or window.&lt;/div&gt;&lt;/div&gt;&lt;div class=&quot;bookmark-href&quot;&gt;&lt;img class=&quot;icon bookmark-icon&quot; src=&quot;https://github.com/favicon.ico&quot;/&gt;https://github.com/vercel/next.js/blob/canary/examples/next-forms/pages/index.tsx&lt;/div&gt;&lt;/div&gt;&lt;img class=&quot;bookmark-image&quot; src=&quot;https://repository-images.githubusercontent.com/70107786/15008733-bde8-4a40-8763-d45e4f4821a7&quot;/&gt;&lt;/a&gt;&lt;/figure&gt;&lt;p class=&quot;&quot; id=&quot;9bb9a2a4-7eba-41f3-a4a5-bc1a90836f31&quot;&gt;
&lt;/p&gt;&lt;p class=&quot;&quot; id=&quot;565ba5db-8525-47fd-843a-48757eb25c58&quot;&gt;
&lt;/p&gt;&lt;/div&gt;&lt;/article&gt;&lt;/body&gt;</description>
      <category>front/react</category>
      <category>frontend</category>
      <author>3sammy</author>
      <guid isPermaLink="true">https://23log.tistory.com/185</guid>
      <comments>https://23log.tistory.com/185#entry185comment</comments>
      <pubDate>Sat, 1 Oct 2022 12:37:25 +0900</pubDate>
    </item>
    <item>
      <title>CSR, SSR에 대한 장단점 정리 (feat. SPA)</title>
      <link>https://23log.tistory.com/184</link>
      <description>&lt;body&gt;&lt;article class=&quot;page sans Notion&quot; id=&quot;891d5430-143e-4327-8b8a-1f232734347b&quot;&gt;&lt;div class=&quot;page-body Tistory&quot;&gt;&lt;div class=&quot;image notion-img&quot; id=&quot;daaf0bed-13bd-483f-8976-a4ccab46cb76&quot;&gt;&lt;figure class=&quot;imageblock alignCenter&quot; width=&quot;1280&quot; height=&quot;905&quot; data-origin-width=&quot;1280&quot; data-origin-height=&quot;905&quot; data-ke-mobilestyle=&quot;widthOrigin&quot; filename=&quot;img.png&quot; filemime=&quot;image/png&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/8MIbA/btrNwnHbGRu/G5bwD4vWqYwBDlQCVwNCiK/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/8MIbA/btrNwnHbGRu/G5bwD4vWqYwBDlQCVwNCiK/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/8MIbA/btrNwnHbGRu/G5bwD4vWqYwBDlQCVwNCiK/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2F8MIbA%2FbtrNwnHbGRu%2FG5bwD4vWqYwBDlQCVwNCiK%2Fimg.png&quot; width=&quot;1280&quot; height=&quot;905&quot; data-origin-width=&quot;1280&quot; data-origin-height=&quot;905&quot; data-ke-mobilestyle=&quot;widthOrigin&quot; filename=&quot;img.png&quot; filemime=&quot;image/png&quot; onerror=&quot;this.onerror=null; this.src='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png'; this.srcset='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png';&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;/div&gt;&lt;h1 class=&quot;&quot; id=&quot;212778cd-27cc-4dca-bf93-d245d4d1d9e0&quot;&gt;ℹ️ SSR (Server Side Rendering)&lt;/h1&gt;&lt;p class=&quot;&quot; id=&quot;56ec7224-97a8-4814-aae3-71c06d68645d&quot;&gt;서버 사이드 랜더링은 서버측에서 데이터를 모두 구성하여 클라이언트에게 전달해주는, 전통적인 랜더링 방식입니다. 서버에서 HTML을 모두 작성하여 브라우저에게 전달, 브라우저는 랜더링을 통해 사용자에게 보여주는 형태이죠.&lt;/p&gt;&lt;h2 class=&quot;&quot; id=&quot;b7834732-5c2e-4eb6-bc8c-4109df21889e&quot;&gt;☀️ 장점&lt;/h2&gt;&lt;ul class=&quot;bulleted-list&quot; id=&quot;53362544-f282-42fc-8766-07fe94995f1a&quot;&gt;&lt;li style=&quot;list-style-type:disc&quot;&gt;검색 엔진 최적화(SEO)에 유리&lt;ul class=&quot;bulleted-list&quot; id=&quot;8690dda2-e514-4528-8054-6ba3c3793689&quot;&gt;&lt;li style=&quot;list-style-type:circle&quot;&gt;이미 HTML 내에 모든 정보가 포함되어 있으므로, 검색엔진이 사이트를 탐색할 때 해당 정보를 가지고 올 수 있습니다.&lt;/li&gt;&lt;/ul&gt;&lt;/li&gt;&lt;/ul&gt;&lt;h2 class=&quot;&quot; id=&quot;4c1b28ce-cfda-4453-8910-40eee4d645f1&quot;&gt;  단점&lt;/h2&gt;&lt;ul class=&quot;bulleted-list&quot; id=&quot;9d2bab71-2215-42ea-ad4b-7b09f4697a03&quot;&gt;&lt;li style=&quot;list-style-type:disc&quot;&gt;서버의 부하 증가 + 웹 로딩 속도 증가&lt;ul class=&quot;bulleted-list&quot; id=&quot;c9c8a2f5-83d4-4e43-932a-b69cfec0dafc&quot;&gt;&lt;li style=&quot;list-style-type:circle&quot;&gt;웹의 정보가 많아질수록 서버에서 담당하는 처리양도 늘어나게 됩니다.&lt;/li&gt;&lt;/ul&gt;&lt;ul class=&quot;bulleted-list&quot; id=&quot;7fa8d50b-50a9-47b9-93a9-bb8c58485e6c&quot;&gt;&lt;li style=&quot;list-style-type:circle&quot;&gt;웹에서 모든 정보를 다 처리해서 전달하므로, 서버의 부하가 클 수록 웹 로딩 속도도 증가하게 됩니다.&lt;/li&gt;&lt;/ul&gt;&lt;/li&gt;&lt;/ul&gt;&lt;ul class=&quot;bulleted-list&quot; id=&quot;658b08d1-ffc6-4d94-ac1b-5c2e0b936dcc&quot;&gt;&lt;li style=&quot;list-style-type:disc&quot;&gt;사용자 경험(UX) 감소&lt;ul class=&quot;bulleted-list&quot; id=&quot;16032195-1a83-456c-b777-9d073250f14d&quot;&gt;&lt;li style=&quot;list-style-type:circle&quot;&gt;새로운 페이지로 이동할 때마다 새로고침(깜빡)이 일어나게 됩니다.&lt;/li&gt;&lt;/ul&gt;&lt;ul class=&quot;bulleted-list&quot; id=&quot;e41d2fe9-c6fe-483a-97de-8c08ca30d5c0&quot;&gt;&lt;li style=&quot;list-style-type:circle&quot;&gt;여기에 웹 로딩 속도까지 오래걸린다면?  &lt;/li&gt;&lt;/ul&gt;&lt;/li&gt;&lt;/ul&gt;&lt;p class=&quot;&quot; id=&quot;ac925baf-6a79-4571-91f5-edf21a02ae04&quot;&gt;
&lt;/p&gt;&lt;h1 class=&quot;&quot; id=&quot;c277c0a4-c500-454b-96fd-5c39d0a8e826&quot;&gt;ℹ️ CSR (Client Side Rendering)&lt;/h1&gt;&lt;p class=&quot;&quot; id=&quot;f1ae6fb7-1c5e-4582-8b45-bf435da9802e&quot;&gt;클라이언트 사이드 랜더링인, CSR은 말 그대로 클라이언트 측에서 모든 랜더링을 진행한다는 의미입니다.&lt;/p&gt;&lt;p class=&quot;&quot; id=&quot;5334844d-4126-44bb-9567-1444f5093ab0&quot;&gt;브라우저에게 비어있는 HTML과 JS를 전달하고. JS가 실행되는 과정을 통해 서버로 부터 관련 데이터를 받아 랜더링을 진행하는 형식입니다.&lt;/p&gt;&lt;h2 class=&quot;&quot; id=&quot;fb6d9c8d-cd44-47d8-8f0c-b915ab11e058&quot;&gt;☀️ 장점&lt;/h2&gt;&lt;ul class=&quot;bulleted-list&quot; id=&quot;063b228f-06d3-44a0-9526-a564909cb3c5&quot;&gt;&lt;li style=&quot;list-style-type:disc&quot;&gt;최초 랜더링 이후, 필요한 부분만 서버에서 데이터를 받아오기 때문에 빠른 응답이 가능합니다.&lt;/li&gt;&lt;/ul&gt;&lt;ul class=&quot;bulleted-list&quot; id=&quot;f8c0c522-cd63-4345-b7da-3515019dba9c&quot;&gt;&lt;li style=&quot;list-style-type:disc&quot;&gt;공통적으로 사용되는 레이아웃이나 CSS, JS를 다시 다운로드 받을 필요가 없기 때문에 서버 부담이 감소합니다.&lt;/li&gt;&lt;/ul&gt;&lt;ul class=&quot;bulleted-list&quot; id=&quot;622d2862-0cb7-4163-b242-7c350651956d&quot;&gt;&lt;li style=&quot;list-style-type:disc&quot;&gt;모듈화 및 컴포넌트화가 용이해집니다.&lt;ul class=&quot;bulleted-list&quot; id=&quot;8c66eb53-9594-4942-8630-10c027574942&quot;&gt;&lt;li style=&quot;list-style-type:circle&quot;&gt;&lt;code&gt;필요한 부분&lt;/code&gt;만 랜더링을 진행하는 방식이기 때문에, 컴포넌트에 대해서 독립적인 구성이 가능해집니다.&lt;/li&gt;&lt;/ul&gt;&lt;ul class=&quot;bulleted-list&quot; id=&quot;3fc794e6-1578-4860-b035-f7419fcf35cf&quot;&gt;&lt;li style=&quot;list-style-type:circle&quot;&gt;간편 로그인 컴포넌트를 개발한다고 했을때, 로그인 페이지 전체를 개발하는 것이 아닌.
해당 컴포넌트만 개발하여 서버로 따로 요청하는 방식으로 처리할 수 있습니다.&lt;/li&gt;&lt;/ul&gt;&lt;/li&gt;&lt;/ul&gt;&lt;ul class=&quot;bulleted-list&quot; id=&quot;edbb9597-a348-4386-822b-77d3856c8ebe&quot;&gt;&lt;li style=&quot;list-style-type:disc&quot;&gt;&lt;code&gt;APP LIKE&lt;/code&gt; 한 경험이 가능해집니다.&lt;ul class=&quot;bulleted-list&quot; id=&quot;b3cf0520-4ecc-43f6-8044-eb71be0a6bb6&quot;&gt;&lt;li style=&quot;list-style-type:circle&quot;&gt;별도의 새로고침 없이 페이지를 랜더링하기 때문에 앱과 같은 경험을 제공해줍니다.&lt;/li&gt;&lt;/ul&gt;&lt;blockquote class=&quot;&quot; id=&quot;59ae3997-4f71-439e-b04c-bcbdfa4f47f3&quot;&gt;&lt;strong&gt;  SPA(Single Page Application)&lt;/strong&gt;&lt;p class=&quot;&quot; id=&quot;0eff04e7-5d6f-41fa-be90-b06d7c9d52d7&quot;&gt;SPA는 싱글 페이지, 즉 하나의 페이지로 구성된 어플리케이션을 의미합니다.&lt;/p&gt;&lt;p class=&quot;&quot; id=&quot;77335552-4fa8-47d9-b386-b20ad5dcbd53&quot;&gt;최초의 첫 페이지를 랜더링 한 이후, 공통 요소들(헤더, 푸터)는 유지한 채 메인 컨텐츠를 교체하는 식으로 구성하는 형태입니다. 실제 앱 처럼 구동이 가능하기 때문에 (아마도?) 20년도 이후로 크게 주목받기 시작했습니다.&lt;/p&gt;&lt;p class=&quot;&quot; id=&quot;464e115a-6b17-4493-94b5-480d04651c66&quot;&gt;해당 페이지를 구성하는 대표적인 기술로는, &lt;code&gt;Vue.js&lt;/code&gt;, &lt;code&gt;React.js&lt;/code&gt; 가 존재합니다.&lt;/p&gt;&lt;/blockquote&gt;&lt;/li&gt;&lt;/ul&gt;&lt;h2 class=&quot;&quot; id=&quot;d0b9a88d-75ab-4d2b-aef9-85b1e4aa8d66&quot;&gt;  단점&lt;/h2&gt;&lt;ul class=&quot;bulleted-list&quot; id=&quot;617f5805-eaa3-4168-9396-b2fcae3a94c2&quot;&gt;&lt;li style=&quot;list-style-type:disc&quot;&gt;보안상의 문제가 발생할 수 있습니다.&lt;ul class=&quot;bulleted-list&quot; id=&quot;717c2b57-0966-4e36-9285-f8ca812db5df&quot;&gt;&lt;li style=&quot;list-style-type:circle&quot;&gt;CSR, SPA 구조상 클라이언트 측에서 다양한 로직이 수행되는데, 만약 이 과정에서 비즈니스 로직이 노출된다면 보안상 이슈가 발생할 수 있습니다.&lt;/li&gt;&lt;/ul&gt;&lt;ul class=&quot;bulleted-list&quot; id=&quot;fdfb38b8-9b10-4172-be63-5d33dc6ba0f1&quot;&gt;&lt;li style=&quot;list-style-type:circle&quot;&gt;프론트엔드 상에선 비즈니스 로직을 최소화하는 것이 필요합니다.&lt;/li&gt;&lt;/ul&gt;&lt;/li&gt;&lt;/ul&gt;&lt;ul class=&quot;bulleted-list&quot; id=&quot;1f7c1bc4-e4f0-4973-aa2c-69d8d78c28dd&quot;&gt;&lt;li style=&quot;list-style-type:disc&quot;&gt;검색 엔진 최적화(SEO)가 어렵습니다.&lt;ul class=&quot;bulleted-list&quot; id=&quot;5de89855-3acf-4b7e-a942-d70604b803ee&quot;&gt;&lt;li style=&quot;list-style-type:circle&quot;&gt;검색 엔진 BOT의 크롤링 과정에서 비어있는 HTML을 받아가기 때문에, 사이트의 정보를 실시간으로 반영하기 어렵습니다.&lt;/li&gt;&lt;/ul&gt;&lt;/li&gt;&lt;/ul&gt;&lt;h1 class=&quot;&quot; id=&quot;cc578ce3-edc5-4b98-8541-b964b0bd998b&quot;&gt; ‍♂️ SPA으로 구성된 페이지에서 SSR 필요한 이유?&lt;/h1&gt;&lt;p class=&quot;&quot; id=&quot;0a31d415-f10c-458c-8670-00450396c6de&quot;&gt;가장 대표적으론 &lt;code&gt;검색 엔진 최적화(SEO)&lt;/code&gt;를 하기 위해서 입니다.&lt;/p&gt;&lt;p class=&quot;&quot; id=&quot;15842b10-52f1-465e-8aa3-9f1c692a3a7b&quot;&gt;사용자가 사용하기 편한 UI/UX를 지닌 사이트를 만드는 것도 중요하지만, &lt;strong&gt;사용자를 자신의 사이트로 불러올 수 있도록 노출시키는 것도 중요&lt;/strong&gt;합니다. 구글/네이버 와 같은 포털에서 얼마나 잘 노출되어 새로운 유저를 끌어올 수 있느냐는, 사이트의 성패를 결정하기도 합니다.&lt;/p&gt;&lt;p class=&quot;&quot; id=&quot;b4ae54ed-8257-4740-a1fc-13d802d1f3c8&quot;&gt;따라서 검색 엔진 봇이 우리 사이트의 새로운 정보, 예를 들면 신규 입점 상품이라던가 신규 경제 칼럼과 같은 내용들을, 제대로 긁어가고 포털 사이트에 노출시키도록 해줘야 합니다.&lt;/p&gt;&lt;p class=&quot;&quot; id=&quot;d3daaf31-489b-4ee3-bbc4-cfa3d6ec77ac&quot;&gt;따라서 &lt;code&gt;Next.js&lt;/code&gt; 와 같은 라이브러리를 통해 SSR과 CSR의 단점을 커버하여 웹을 구성하는 것이 중요합니다.&lt;/p&gt;&lt;figure class=&quot;callout&quot; id=&quot;30399299-d0d7-4755-8401-665d5606e9c2&quot; style=&quot;white-space:pre-wrap;display:flex&quot;&gt;&lt;div style=&quot;font-size:1.5em&quot;&gt;&lt;span class=&quot;icon&quot;&gt; &lt;/span&gt;&lt;/div&gt;&lt;div style=&quot;width:100%&quot;&gt;&lt;code&gt;Next.js&lt;/code&gt; 는 첫 페이지는 백엔드 서버에서 작업하여, 비어있는 HTML이 아닌 데이터가 존재하는 페이지를 반환하고 그 이후부턴 CSR과 같은 방식을 취하도록 하는 라이브러리입니다.&lt;/div&gt;&lt;/figure&gt;&lt;hr id=&quot;4a0b0305-8c71-4fbf-ba64-9053c7477ffa&quot;/&gt;&lt;p class=&quot;block-color-gray&quot; id=&quot;f614f787-8d6a-4fe4-be37-e8179287c639&quot;&gt;
&lt;/p&gt;&lt;h1 class=&quot;block-color-gray&quot; id=&quot;b9bad0de-31c5-4056-adb7-d1b10c65e589&quot;&gt;다음 글&lt;/h1&gt;&lt;p class=&quot;&quot; id=&quot;9853e289-1199-4823-a3c7-fc678fec86a5&quot;&gt;next.js 프로젝트 셋업과 최초 실행 코드에 대한 간단한 설명은? ⬇️⬇️&lt;/p&gt;&lt;figure id=&quot;7a89913b-b670-4e66-9b18-f3b7ab9ff7c7&quot;&gt;&lt;a class=&quot;bookmark source&quot; href=&quot;https://23log.tistory.com/185&quot;&gt;&lt;div class=&quot;bookmark-info&quot;&gt;&lt;div class=&quot;bookmark-text&quot;&gt;&lt;div class=&quot;bookmark-title&quot;&gt;Next.js 프로젝트 셋업 하기&lt;/div&gt;&lt;div class=&quot;bookmark-description&quot;&gt;프로젝트 생성을 원하는 폴더로 이동하여, 터미널을 연다. 아래의 명령어를 입력한다. npx create-next-app@latest 원하는 프로젝트명을 입력하면, 자동으로 생성 및 관련 라이브러리 및 디펜던시를 설치해준다. vscode/터미널 에서 yarn dev 명령어를 입력하여 프로젝트를 실행한다 http://localhost:3000 로 접속하면 아래 사진처럼 정상적으로 사이트가 로드됨을 확인 할 수 있다.&lt;/div&gt;&lt;/div&gt;&lt;div class=&quot;bookmark-href&quot;&gt;&lt;img class=&quot;icon bookmark-icon&quot; src=&quot;https://tistory4.daumcdn.net/tistory/3064062/3e945573a770462486ce76d7ee97e078&quot;/&gt;https://23log.tistory.com/185&lt;/div&gt;&lt;/div&gt;&lt;img class=&quot;bookmark-image&quot; src=&quot;https://img1.daumcdn.net/thumb/R800x0/?scode=mtistory2&amp;amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2Fbuv4DO%2FbtrNyG0jZER%2FDg24mC9nWR2jZ4WU7nhF10%2Fimg.png&quot;/&gt;&lt;/a&gt;&lt;/figure&gt;&lt;p class=&quot;block-color-gray&quot; id=&quot;a607b82a-3395-420f-9291-7426386cd829&quot;&gt;*본 포스팅은 &lt;strong&gt;원티드 프리온보딩 기술 챌린지&lt;/strong&gt; 과제를 위해 작성된 글입니다.&lt;/p&gt;&lt;/div&gt;&lt;/article&gt;&lt;/body&gt;</description>
      <category>front</category>
      <category>frontend</category>
      <author>3sammy</author>
      <guid isPermaLink="true">https://23log.tistory.com/184</guid>
      <comments>https://23log.tistory.com/184#entry184comment</comments>
      <pubDate>Sat, 1 Oct 2022 12:35:12 +0900</pubDate>
    </item>
    <item>
      <title>내가 보려고 만든, 잠스트 무릎 보호대 시리즈 총정리! (테니스, 러닝 보호대 추천)</title>
      <link>https://23log.tistory.com/183</link>
      <description>&lt;body&gt;&lt;article class=&quot;page sans Notion&quot; id=&quot;3d36eb03-b8eb-49c1-9103-0b3b515f247e&quot;&gt;&lt;div class=&quot;page-body Tistory&quot;&gt;&lt;figure class=&quot;block-color-yellow_background callout&quot; id=&quot;fd0740e7-5e20-440f-b06b-6903b217889a&quot; style=&quot;white-space:pre-wrap;display:flex&quot;&gt;&lt;div style=&quot;font-size:1.5em&quot;&gt;&lt;span class=&quot;icon&quot;&gt; &lt;/span&gt;&lt;/div&gt;&lt;div style=&quot;width:100%&quot;&gt;구매하기 위해서 정리한 내용인데, 나와 같은 고민을 하고 있는 사람들이 보면 좋을 것 같아서 공유합니다. 합리적인 소비에 참고해주세요  !&lt;/div&gt;&lt;/figure&gt;&lt;h1 class=&quot;&quot; id=&quot;d2183a21-e25a-4ed1-96e9-4562fdabf607&quot;&gt;인트로&lt;/h1&gt;&lt;p class=&quot;&quot; id=&quot;8d37a21e-bdd9-4028-850e-115f33b9b7b1&quot;&gt;원래 운동을 러닝 위주로 했는데, 최근에 등산과 테니스에 순차적으로 빠지게 되면서 점점 무릎을 혹사하는 환경에 처하게 되었다. 그러다 코로나 걸린 이후 ‘확찐자’가 되며 체중이 늘었고, 그로 인해 무릎에 부담이 더욱 가중되는 환경에서 서울 둘레길 26K를 트레일하게 되었다.&lt;/p&gt;&lt;p class=&quot;&quot; id=&quot;1c47d098-c441-48c4-a70e-35fc1f0791a9&quot;&gt;그리고 그 이후부터 왼쪽 무릎 아래가 너무 시큰거리기 시작했다    생각보다 통증이 심해졌는데, 등산은 잠깐 쉰다해도 러닝과 테니스는 계속 하고 있기 때문에, 좀 제대로 된 무릎 보호대를 장만 해야겠다 싶었다.&lt;/p&gt;&lt;p class=&quot;&quot; id=&quot;af9ff8d2-d878-48e7-95e8-4769497b96d1&quot;&gt;
&lt;/p&gt;&lt;div class=&quot;image notion-img&quot; id=&quot;d52aa48a-a6dd-4bde-a297-d46413ce56f5&quot;&gt;&lt;figure class=&quot;imageblock alignCenter&quot; width=&quot;193&quot; height=&quot;194&quot; data-origin-width=&quot;193&quot; data-origin-height=&quot;194&quot; data-ke-mobilestyle=&quot;widthOrigin&quot; filename=&quot;img.png&quot; filemime=&quot;image/png&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/cAZ9ub/btrLu8yebJa/vRCVKVyg4sNULQAO1lkvKk/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/cAZ9ub/btrLu8yebJa/vRCVKVyg4sNULQAO1lkvKk/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/cAZ9ub/btrLu8yebJa/vRCVKVyg4sNULQAO1lkvKk/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FcAZ9ub%2FbtrLu8yebJa%2FvRCVKVyg4sNULQAO1lkvKk%2Fimg.png&quot; width=&quot;193&quot; height=&quot;194&quot; data-origin-width=&quot;193&quot; data-origin-height=&quot;194&quot; data-ke-mobilestyle=&quot;widthOrigin&quot; filename=&quot;img.png&quot; filemime=&quot;image/png&quot; onerror=&quot;this.onerror=null; this.src='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png'; this.srcset='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png';&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;figcaption&gt;가볍게 사용하기 최고다!&lt;/figcaption&gt;&lt;/div&gt;&lt;p class=&quot;&quot; id=&quot;49c9b5bf-fb76-4db5-9e39-14f23e199806&quot;&gt;난 이전부터 잠스트의 JK-BAND 제품 두개를 구매해서 러닝 할 때 사용했다. 이젠 라벨이 노랗게 물들 만큼 자주 또 오래동안 사용했는데, 아직까지도 벨크로 짱짱하고 고정도 잘 되는걸 보면서 이번 보호대도 잠스트로 사야겠다 맘먹었다. 아무 생각없이 쿠팡으로 보는데, 왠걸 너무 종류도 용도도 다양한 것이 아닌가..&lt;/p&gt;&lt;p class=&quot;&quot; id=&quot;300ac920-854c-49af-b643-79feff3c666c&quot;&gt;원래 이런거 구매할 때 다 비교해보고 가장 적합한 걸 합리적으로 구매하려 하는데, 이번에도 그 심리가 발동했다.. 하나씩 정리하다 못해 표까지 만들었는데, 그 자료가 꽤 괜찮길래, 호오오옥시나 필요한 사람이 있을까봐 포스팅을 하게 된다. (정보 공유는 좋은거니까 ^-^Vv)&lt;/p&gt;&lt;figure class=&quot;callout&quot; id=&quot;5b78526b-357a-4794-973c-3b93d4410f7f&quot; style=&quot;white-space:pre-wrap;display:flex&quot;&gt;&lt;div style=&quot;font-size:1.5em&quot;&gt;&lt;span class=&quot;icon&quot;&gt;⚠️&lt;/span&gt;&lt;/div&gt;&lt;div style=&quot;width:100%&quot;&gt;저는 일반 소비자입니다.
잠스트와 아무런 연관도 없고, 쿠팡 파트너스로도 활동하지 않는, 그냥 커머스 개발자 입니다..&lt;/div&gt;&lt;/figure&gt;&lt;figure class=&quot;callout&quot; id=&quot;022e2e93-b383-48c2-b344-fddbef9c761d&quot; style=&quot;white-space:pre-wrap;display:flex&quot;&gt;&lt;div style=&quot;font-size:1.5em&quot;&gt;&lt;span class=&quot;icon&quot;&gt; &lt;/span&gt;&lt;/div&gt;&lt;div style=&quot;width:100%&quot;&gt;유튜브와 상품 설명, 후기들을 바탕으로 내용을 정리하였습니다.
’파편화된 정보를 한번에 볼 수 있구나’ 정도로 편하게 봐주시면 감사하겠습니다.

정리하는 과정에서 제 개인적 주관이나 견해가 들어갈 수 있음을 참고바랍니다.&lt;/div&gt;&lt;/figure&gt;&lt;h1 class=&quot;&quot; id=&quot;697b2561-c961-4639-b3dc-da314d0f6c52&quot;&gt;시리즈별 비교&lt;/h1&gt;&lt;ul class=&quot;bulleted-list&quot; id=&quot;16d41561-b25f-4791-b165-e253e320c41b&quot;&gt;&lt;li style=&quot;list-style-type:disc&quot;&gt;&lt;mark class=&quot;highlight-orange&quot;&gt;&lt;strong&gt;슬개골 폐쇄형(일체형)&lt;/strong&gt;&lt;/mark&gt; : 움직임이 편하며, 혈액순환이 편함&lt;ul class=&quot;bulleted-list&quot; id=&quot;b7034232-ebbc-4a9e-b37d-5382d6251824&quot;&gt;&lt;li style=&quot;list-style-type:circle&quot;&gt;러닝, 마라톤 등이나 편하게 움직이는걸 선호할 경우&lt;/li&gt;&lt;/ul&gt;&lt;/li&gt;&lt;/ul&gt;&lt;ul class=&quot;bulleted-list&quot; id=&quot;49dc9782-9d96-469e-b36e-cd68d0452c2f&quot;&gt;&lt;li style=&quot;list-style-type:disc&quot;&gt;&lt;mark class=&quot;highlight-teal&quot;&gt;&lt;strong&gt;슬개골 오픈형(구멍형)&lt;/strong&gt;&lt;/mark&gt; : 슬개골 주변 움직임 제한, 무릎 고정력 좋음, 장시간 운동에 적합&lt;ul class=&quot;bulleted-list&quot; id=&quot;61857b59-066b-4280-8fd5-1fc510b6ca36&quot;&gt;&lt;li style=&quot;list-style-type:circle&quot;&gt;등산, 계단 오르기, 줄넘기 등 무릎이 자주 움직이는 경우&lt;/li&gt;&lt;/ul&gt;&lt;/li&gt;&lt;/ul&gt;&lt;hr id=&quot;f4d72ffc-f8c1-40ad-a8d3-a8020befafdf&quot;/&gt;&lt;div class=&quot;column-list&quot; id=&quot;c54361eb-7661-4199-9a4f-e57f9fd45ef9&quot;&gt;&lt;div class=&quot;column&quot; id=&quot;436877df-acff-40df-bc90-ea4b85312c8c&quot; style=&quot;width:50%&quot;&gt;&lt;h2 class=&quot;&quot; id=&quot;1cf0c698-b24d-4c0a-96a5-70d479454dc7&quot;&gt;RK-1+&lt;/h2&gt;&lt;div class=&quot;image notion-img&quot; id=&quot;7cb7c40a-e152-4696-819b-107b2884a569&quot;&gt;&lt;figure class=&quot;imageblock alignCenter&quot; width=&quot;371&quot; height=&quot;403&quot; data-origin-width=&quot;371&quot; data-origin-height=&quot;403&quot; data-ke-mobilestyle=&quot;widthOrigin&quot; filename=&quot;img.png&quot; filemime=&quot;image/png&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/bOZhfU/btrLqdU2KOI/4WWCrhpK0uecaY2Y0D2f4K/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/bOZhfU/btrLqdU2KOI/4WWCrhpK0uecaY2Y0D2f4K/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/bOZhfU/btrLqdU2KOI/4WWCrhpK0uecaY2Y0D2f4K/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FbOZhfU%2FbtrLqdU2KOI%2F4WWCrhpK0uecaY2Y0D2f4K%2Fimg.png&quot; width=&quot;371&quot; height=&quot;403&quot; data-origin-width=&quot;371&quot; data-origin-height=&quot;403&quot; data-ke-mobilestyle=&quot;widthOrigin&quot; filename=&quot;img.png&quot; filemime=&quot;image/png&quot; onerror=&quot;this.onerror=null; this.src='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png'; this.srcset='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png';&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;figcaption&gt;잠스트 RK-1+ 모델&lt;/figcaption&gt;&lt;/div&gt;&lt;ul class=&quot;bulleted-list&quot; id=&quot;76b386d7-cab9-49fe-a360-de9ca1df22ea&quot;&gt;&lt;li style=&quot;list-style-type:disc&quot;&gt;&lt;mark class=&quot;highlight-orange&quot;&gt;&lt;strong&gt;슬개골 폐쇄형(일체형)&lt;/strong&gt;&lt;/mark&gt;&lt;/li&gt;&lt;/ul&gt;&lt;ul class=&quot;bulleted-list&quot; id=&quot;24f4d6cb-d8bb-4b8a-95be-f1f9d946ad0f&quot;&gt;&lt;li style=&quot;list-style-type:disc&quot;&gt;무릎 외측 서포트 : 무릎 부담 완화&lt;ul class=&quot;bulleted-list&quot; id=&quot;e255cbed-4bf4-4d4c-a33b-1f96f5ed7c72&quot;&gt;&lt;li style=&quot;list-style-type:circle&quot;&gt;바깥 지지대&lt;/li&gt;&lt;/ul&gt;&lt;/li&gt;&lt;/ul&gt;&lt;ul class=&quot;bulleted-list&quot; id=&quot;1dd904c4-e7bb-41f3-8182-3fb976078289&quot;&gt;&lt;li style=&quot;list-style-type:disc&quot;&gt;소재 : 아쿠아홀(러닝 쾌적)&lt;/li&gt;&lt;/ul&gt;&lt;ul class=&quot;bulleted-list&quot; id=&quot;afc8c668-c598-4500-98d1-429425313ec6&quot;&gt;&lt;li style=&quot;list-style-type:disc&quot;&gt;추천 운동 : 러닝&lt;/li&gt;&lt;/ul&gt;&lt;ul class=&quot;bulleted-list&quot; id=&quot;bd647c2d-e72a-4c4c-8f55-08ae2a14132a&quot;&gt;&lt;li style=&quot;list-style-type:disc&quot;&gt;&lt;a href=&quot;https://www.coupang.com/vp/products/5722956020?itemId=9578009263&amp;amp;vendorItemId=76862614235&amp;amp;q=%EC%9E%A0%EC%8A%A4%ED%8A%B8+RK-1&amp;amp;itemsCount=36&amp;amp;searchId=be83807c124749009b685f4d006dc273&amp;amp;rank=1&amp;amp;isAddedCart=&quot;&gt;쿠팡가&lt;/a&gt; : 54000&lt;/li&gt;&lt;/ul&gt;&lt;figure class=&quot;callout&quot; id=&quot;bd792c28-17c4-49e5-ab3b-f68f4aee32a4&quot; style=&quot;white-space:pre-wrap;display:flex&quot;&gt;&lt;div style=&quot;font-size:1.5em&quot;&gt;&lt;span class=&quot;icon&quot;&gt; &lt;/span&gt;&lt;/div&gt;&lt;div style=&quot;width:100%&quot;&gt;무릎이 오픈되지 않은 일체형이기 때문에, 러닝이나 마라톤 등에 쾌적한 경험을 제공함. 러닝을 전문적으로 하는 분들께 추천!&lt;/div&gt;&lt;/figure&gt;&lt;/div&gt;&lt;div class=&quot;column&quot; id=&quot;53cd325e-1dfc-4a9e-b556-f3f15fd9b985&quot; style=&quot;width:50%&quot;&gt;&lt;h2 class=&quot;&quot; id=&quot;a1e70c67-82f5-4e0c-af8f-636b97e88f80&quot;&gt;JK-2&lt;/h2&gt;&lt;div class=&quot;image notion-img&quot; id=&quot;0658d0cd-8016-45ac-bb62-a77a9b9e4e8b&quot;&gt;&lt;figure class=&quot;imageblock alignCenter&quot; width=&quot;392&quot; height=&quot;405&quot; data-origin-width=&quot;392&quot; data-origin-height=&quot;405&quot; data-ke-mobilestyle=&quot;widthOrigin&quot; filename=&quot;img.png&quot; filemime=&quot;image/png&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/lWulj/btrLwAVjvML/oaoemy3DbTXIcVWsQL3Hvk/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/lWulj/btrLwAVjvML/oaoemy3DbTXIcVWsQL3Hvk/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/lWulj/btrLwAVjvML/oaoemy3DbTXIcVWsQL3Hvk/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FlWulj%2FbtrLwAVjvML%2Foaoemy3DbTXIcVWsQL3Hvk%2Fimg.png&quot; width=&quot;392&quot; height=&quot;405&quot; data-origin-width=&quot;392&quot; data-origin-height=&quot;405&quot; data-ke-mobilestyle=&quot;widthOrigin&quot; filename=&quot;img.png&quot; filemime=&quot;image/png&quot; onerror=&quot;this.onerror=null; this.src='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png'; this.srcset='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png';&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;figcaption&gt;잠스트 JK-2 모델&lt;/figcaption&gt;&lt;/div&gt;&lt;ul class=&quot;block-color-teal bulleted-list&quot; id=&quot;11fec090-c69d-4343-9300-b98dcf6bd356&quot;&gt;&lt;li style=&quot;list-style-type:disc&quot;&gt;&lt;strong&gt;슬개골 오픈형(구멍형)&lt;/strong&gt;&lt;/li&gt;&lt;/ul&gt;&lt;ul class=&quot;bulleted-list&quot; id=&quot;99f9de4b-ecbf-46c5-8f01-3733ba9ebb12&quot;&gt;&lt;li style=&quot;list-style-type:disc&quot;&gt;무릎 패드 : 무릎 아래 부담 감소&lt;ul class=&quot;bulleted-list&quot; id=&quot;0e3d932e-b545-4267-ad5e-a9bf3a3401aa&quot;&gt;&lt;li style=&quot;list-style-type:circle&quot;&gt;하단&lt;/li&gt;&lt;/ul&gt;&lt;ul class=&quot;bulleted-list&quot; id=&quot;2b01ed31-abaa-473f-bcdd-ddebd5d00ed7&quot;&gt;&lt;li style=&quot;list-style-type:circle&quot;&gt;무릎 위 반원형 패드&lt;/li&gt;&lt;/ul&gt;&lt;/li&gt;&lt;/ul&gt;&lt;ul class=&quot;bulleted-list&quot; id=&quot;5acd61bc-49c9-4fcb-acb1-38b8454a2435&quot;&gt;&lt;li style=&quot;list-style-type:disc&quot;&gt;소재 : 파워 더블 라셀(통기성, 착용감 좋음)&lt;/li&gt;&lt;/ul&gt;&lt;ul class=&quot;bulleted-list&quot; id=&quot;cccd9fe2-e54b-402f-8ca4-d87e9adc8f2f&quot;&gt;&lt;li style=&quot;list-style-type:disc&quot;&gt;추천 운동 : 등산&lt;/li&gt;&lt;/ul&gt;&lt;ul class=&quot;bulleted-list&quot; id=&quot;7ba68082-38c6-46ce-a3e6-66248302c815&quot;&gt;&lt;li style=&quot;list-style-type:disc&quot;&gt;&lt;a href=&quot;https://www.coupang.com/vp/products/6225024090?itemId=12478661987&amp;amp;vendorItemId=3240940182&amp;amp;pickType=COU_PICK&amp;amp;sourceType=srp_product_ads&amp;amp;clickEventId=e1d37bee-22a5-4bc1-a8e6-d2bc8a1865c6&amp;amp;korePlacement=15&amp;amp;koreSubPlacement=1&amp;amp;q=%EB%AC%B4%EB%A6%8E+%EB%B3%B4%ED%98%B8%EB%8C%80+JK-2&amp;amp;itemsCount=36&amp;amp;searchId=bef9b33b7afc4a4fb91c0de838f9bf7b&amp;amp;rank=0&amp;amp;isAddedCart=&quot;&gt;쿠팡가&lt;/a&gt; : 49500&lt;/li&gt;&lt;/ul&gt;&lt;figure class=&quot;callout&quot; id=&quot;66fac64b-bff9-40a5-9817-df57fe6c2c43&quot; style=&quot;white-space:pre-wrap;display:flex&quot;&gt;&lt;div style=&quot;font-size:1.5em&quot;&gt;&lt;span class=&quot;icon&quot;&gt; &lt;/span&gt;&lt;/div&gt;&lt;div style=&quot;width:100%&quot;&gt;무릎 패드를 통해 무릎 부담을 덜어주는 구조임. 바깥 지지대가 없으므로, 등산 등의 운동에 적합해 보임&lt;/div&gt;&lt;/figure&gt;&lt;p class=&quot;&quot; id=&quot;b04785d6-1b1f-4c4e-8d75-3ebb632d0775&quot;&gt;
&lt;/p&gt;&lt;/div&gt;&lt;/div&gt;&lt;hr id=&quot;344fe913-7350-425d-92d5-dd2da6957f95&quot;/&gt;&lt;div class=&quot;column-list&quot; id=&quot;6787bcf4-a6fc-4269-b247-b4d4ee95b875&quot;&gt;&lt;div class=&quot;column&quot; id=&quot;6647754c-5d97-4ae6-a40d-41b36bafc6d6&quot; style=&quot;width:50%&quot;&gt;&lt;h2 class=&quot;&quot; id=&quot;3d883ec6-d45f-477e-a265-11d02cde4d0b&quot;&gt;EK-5&lt;/h2&gt;&lt;div class=&quot;image notion-img&quot; id=&quot;26467c8e-f831-4d40-b3e8-08563b6c35d9&quot;&gt;&lt;figure class=&quot;imageblock alignCenter&quot; width=&quot;402&quot; height=&quot;406&quot; data-origin-width=&quot;402&quot; data-origin-height=&quot;406&quot; data-ke-mobilestyle=&quot;widthOrigin&quot; filename=&quot;img.png&quot; filemime=&quot;image/png&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/Jkkfy/btrLqc2XpTy/HtoG4f4C4Yxj7XmIAyaVw1/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/Jkkfy/btrLqc2XpTy/HtoG4f4C4Yxj7XmIAyaVw1/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/Jkkfy/btrLqc2XpTy/HtoG4f4C4Yxj7XmIAyaVw1/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FJkkfy%2FbtrLqc2XpTy%2FHtoG4f4C4Yxj7XmIAyaVw1%2Fimg.png&quot; width=&quot;402&quot; height=&quot;406&quot; data-origin-width=&quot;402&quot; data-origin-height=&quot;406&quot; data-ke-mobilestyle=&quot;widthOrigin&quot; filename=&quot;img.png&quot; filemime=&quot;image/png&quot; onerror=&quot;this.onerror=null; this.src='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png'; this.srcset='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png';&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;figcaption&gt;잠스트 EK-5 모델&lt;/figcaption&gt;&lt;/div&gt;&lt;ul class=&quot;bulleted-list&quot; id=&quot;4c509d47-fe9d-4701-bf04-ae82e10cc31d&quot;&gt;&lt;li style=&quot;list-style-type:disc&quot;&gt;&lt;mark class=&quot;highlight-teal&quot;&gt;&lt;strong&gt;슬개골 오픈형(구멍형)&lt;/strong&gt;&lt;/mark&gt;&lt;/li&gt;&lt;/ul&gt;&lt;ul class=&quot;bulleted-list&quot; id=&quot;aec66d8c-0b6a-4082-bacf-507f1da9ef3d&quot;&gt;&lt;li style=&quot;list-style-type:disc&quot;&gt;액티브 경량 가드 : 좌우 흔들림 억제&lt;ul class=&quot;bulleted-list&quot; id=&quot;993351fe-b68b-40e7-84de-a05fb180d0ee&quot;&gt;&lt;li style=&quot;list-style-type:circle&quot;&gt;바깥 지지대&lt;/li&gt;&lt;/ul&gt;&lt;ul class=&quot;bulleted-list&quot; id=&quot;02d3b4fc-c7cb-436b-8b47-cf5b1bf8e353&quot;&gt;&lt;li style=&quot;list-style-type:circle&quot;&gt;무릎 좌우에 패드&lt;/li&gt;&lt;/ul&gt;&lt;/li&gt;&lt;/ul&gt;&lt;ul class=&quot;bulleted-list&quot; id=&quot;df0c326e-b039-4119-9ef3-efde7259997d&quot;&gt;&lt;li style=&quot;list-style-type:disc&quot;&gt;대퇴 크로스 스트랩&lt;/li&gt;&lt;/ul&gt;&lt;ul class=&quot;bulleted-list&quot; id=&quot;e222c51d-8946-471d-9655-3e6916701d39&quot;&gt;&lt;li style=&quot;list-style-type:disc&quot;&gt;소재 : 파워 더블 라셀(통기성, 착용감 좋음)&lt;/li&gt;&lt;/ul&gt;&lt;ul class=&quot;bulleted-list&quot; id=&quot;194c23e2-14f2-4ab8-a710-2fba870020ad&quot;&gt;&lt;li style=&quot;list-style-type:disc&quot;&gt;추천 운동 : 조깅, 등산, 테니스 등&lt;/li&gt;&lt;/ul&gt;&lt;ul class=&quot;bulleted-list&quot; id=&quot;21b932d3-7c70-43fd-bac1-e3fe91c01971&quot;&gt;&lt;li style=&quot;list-style-type:disc&quot;&gt;&lt;a href=&quot;https://www.coupang.com/vp/products/2475464?itemId=11408522&amp;amp;vendorItemId=3017191670&amp;amp;pickType=COU_PICK&amp;amp;sourceType=srp_product_ads&amp;amp;clickEventId=812fe0aa-71a6-418b-a237-54f1aca63ae7&amp;amp;korePlacement=15&amp;amp;koreSubPlacement=1&amp;amp;q=%EC%9E%A0%EC%8A%A4%ED%8A%B8+EK-5&amp;amp;itemsCount=36&amp;amp;searchId=0009d1e0540b4ffd9489deb777d635e5&amp;amp;rank=0&amp;amp;isAddedCart=&quot;&gt;쿠팡가&lt;/a&gt; : 49500&lt;/li&gt;&lt;/ul&gt;&lt;figure class=&quot;callout&quot; id=&quot;3dd68991-7736-4e7d-b6b2-a23d1738ccd9&quot; style=&quot;white-space:pre-wrap;display:flex&quot;&gt;&lt;div style=&quot;font-size:1.5em&quot;&gt;&lt;span class=&quot;icon&quot;&gt; &lt;/span&gt;&lt;/div&gt;&lt;div style=&quot;width:100%&quot;&gt;바깥 지지대와 무릎 좌우를 잡아주는 형태임. 대퇴부 쪽 스트랩을 통해 대퇴부를 잘 잡아줌.&lt;/div&gt;&lt;/figure&gt;&lt;/div&gt;&lt;div class=&quot;column&quot; id=&quot;52126dba-97c8-4e46-bcb2-933afd90ac0e&quot; style=&quot;width:50%&quot;&gt;&lt;h2 class=&quot;&quot; id=&quot;37048163-a4d2-4fbf-a5e5-af8976b74648&quot;&gt;ZK-7&lt;/h2&gt;&lt;div class=&quot;image notion-img&quot; id=&quot;a77881c8-8b6a-49f6-af42-cc731088df43&quot;&gt;&lt;figure class=&quot;imageblock alignCenter&quot; width=&quot;411&quot; height=&quot;400&quot; data-origin-width=&quot;411&quot; data-origin-height=&quot;400&quot; data-ke-mobilestyle=&quot;widthOrigin&quot; filename=&quot;img.png&quot; filemime=&quot;image/png&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/BTryX/btrLvCsiRUL/XK6guKK1UnZ4XWuPW2QbmK/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/BTryX/btrLvCsiRUL/XK6guKK1UnZ4XWuPW2QbmK/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/BTryX/btrLvCsiRUL/XK6guKK1UnZ4XWuPW2QbmK/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FBTryX%2FbtrLvCsiRUL%2FXK6guKK1UnZ4XWuPW2QbmK%2Fimg.png&quot; width=&quot;411&quot; height=&quot;400&quot; data-origin-width=&quot;411&quot; data-origin-height=&quot;400&quot; data-ke-mobilestyle=&quot;widthOrigin&quot; filename=&quot;img.png&quot; filemime=&quot;image/png&quot; onerror=&quot;this.onerror=null; this.src='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png'; this.srcset='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png';&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;figcaption&gt;잠스트 ZK-7 모델&lt;/figcaption&gt;&lt;/div&gt;&lt;ul class=&quot;block-color-teal bulleted-list&quot; id=&quot;543843d0-2655-4f99-af05-e035d8e6b8cb&quot;&gt;&lt;li style=&quot;list-style-type:disc&quot;&gt;&lt;strong&gt;슬개골 오픈형(구멍형)&lt;/strong&gt;&lt;/li&gt;&lt;/ul&gt;&lt;ul class=&quot;bulleted-list&quot; id=&quot;a3f386ec-8b7f-491a-937a-248d02d9724a&quot;&gt;&lt;li style=&quot;list-style-type:disc&quot;&gt;무릎 패드 : 무릎 안정감 향상&lt;ul class=&quot;bulleted-list&quot; id=&quot;5a2db435-39ab-4767-8f86-f75cafb019c1&quot;&gt;&lt;li style=&quot;list-style-type:circle&quot;&gt;무릎 위 반원형 패드&lt;/li&gt;&lt;/ul&gt;&lt;/li&gt;&lt;/ul&gt;&lt;ul class=&quot;bulleted-list&quot; id=&quot;42789af1-d781-4436-b1ac-8f71ef6ce972&quot;&gt;&lt;li style=&quot;list-style-type:disc&quot;&gt;액티브 경량 가드 : 좌우 흔들림 억제&lt;ul class=&quot;bulleted-list&quot; id=&quot;07f2f33b-34d8-4ead-baa1-f1bc16590cab&quot;&gt;&lt;li style=&quot;list-style-type:circle&quot;&gt;바깥 지지대&lt;/li&gt;&lt;/ul&gt;&lt;/li&gt;&lt;/ul&gt;&lt;ul class=&quot;bulleted-list&quot; id=&quot;a6bc2e63-2764-4647-a6ec-8410d97cf184&quot;&gt;&lt;li style=&quot;list-style-type:disc&quot;&gt;X 스트랩, 병렬 스트랩 : 고정력 높음&lt;/li&gt;&lt;/ul&gt;&lt;ul class=&quot;bulleted-list&quot; id=&quot;db56d00e-5816-414c-8ecf-3e99abce8300&quot;&gt;&lt;li style=&quot;list-style-type:disc&quot;&gt;소재 : 파워 더블 라셀(통기성, 착용감 좋음)&lt;/li&gt;&lt;/ul&gt;&lt;ul class=&quot;bulleted-list&quot; id=&quot;8c445e77-a656-48a7-b6ed-b5b814dddc46&quot;&gt;&lt;li style=&quot;list-style-type:disc&quot;&gt;추천 운동 : 농구, 배구, 스노우보드 등&lt;/li&gt;&lt;/ul&gt;&lt;ul class=&quot;bulleted-list&quot; id=&quot;c2cc2740-479b-498a-98b9-ca93f09443e4&quot;&gt;&lt;li style=&quot;list-style-type:disc&quot;&gt;&lt;a href=&quot;https://www.coupang.com/vp/products/31648443?itemId=119182181&amp;amp;vendorItemId=3240940299&amp;amp;pickType=COU_PICK&amp;amp;sourceType=srp_product_ads&amp;amp;clickEventId=493d19af-6c43-4ccd-853a-0c9b433ff223&amp;amp;korePlacement=15&amp;amp;koreSubPlacement=1&amp;amp;q=%EC%9E%A0%EC%8A%A4%ED%8A%B8+ZK-7&amp;amp;itemsCount=36&amp;amp;searchId=9136a7f588694d4e85991b5b8f389e7b&amp;amp;rank=0&amp;amp;isAddedCart=&quot;&gt;쿠팡가&lt;/a&gt; : 84640&lt;/li&gt;&lt;/ul&gt;&lt;figure class=&quot;callout&quot; id=&quot;263ed09a-cbf9-41a2-87dc-01844c674718&quot; style=&quot;white-space:pre-wrap;display:flex&quot;&gt;&lt;div style=&quot;font-size:1.5em&quot;&gt;&lt;span class=&quot;icon&quot;&gt; &lt;/span&gt;&lt;/div&gt;&lt;div style=&quot;width:100%&quot;&gt;스트랩을 통해 고정력을 높여, 급격한 턴이 많은 스노우보드, 농구, 배드민턴, 테니스 등의 격한 운동에 적합함.&lt;/div&gt;&lt;/figure&gt;&lt;/div&gt;&lt;/div&gt;&lt;hr id=&quot;7357d2d2-1d0c-48a1-a9af-39c2b6540e54&quot;/&gt;&lt;p class=&quot;&quot; id=&quot;106c8942-4124-4497-904f-0b40ff867421&quot;&gt;
&lt;/p&gt;&lt;table class=&quot;simple-table&quot; id=&quot;e890bcba-e609-4b2e-b40e-04e7d83d08f3&quot;&gt;&lt;thead class=&quot;simple-table-header&quot;&gt;&lt;tr id=&quot;0dbd3f14-324f-4abd-ba6a-0c9e38663094&quot;&gt;&lt;th class=&quot;simple-table-header-color simple-table-header&quot; id=&quot;gdyt&quot; style=&quot;width:139.60169677734376px&quot;&gt;&lt;/th&gt;&lt;th class=&quot;simple-table-header-color simple-table-header&quot; id=&quot;]XJ=&quot; style=&quot;width:139.60169677734376px&quot;&gt;&lt;strong&gt;RK 시리즈&lt;/strong&gt;&lt;/th&gt;&lt;th class=&quot;simple-table-header-color simple-table-header&quot; id=&quot;Ex@A&quot; style=&quot;width:139.60169677734376px&quot;&gt;&lt;strong&gt;JK 시리즈&lt;/strong&gt;&lt;/th&gt;&lt;th class=&quot;simple-table-header-color simple-table-header&quot; id=&quot;t[s:&quot; style=&quot;width:139.60169677734376px&quot;&gt;&lt;strong&gt;EK 시리즈&lt;/strong&gt;&lt;/th&gt;&lt;th class=&quot;simple-table-header-color simple-table-header&quot; id=&quot;qNzU&quot; style=&quot;width:139.60169677734376px&quot;&gt;&lt;strong&gt;ZK 시리즈&lt;/strong&gt;&lt;/th&gt;&lt;/tr&gt;&lt;/thead&gt;&lt;tbody&gt;&lt;tr id=&quot;4860b2fb-f1df-45a5-9d96-545be4bea0ab&quot;&gt;&lt;th class=&quot;simple-table-header-color simple-table-header&quot; id=&quot;gdyt&quot; style=&quot;width:139.60169677734376px&quot;&gt;타입&lt;/th&gt;&lt;td class=&quot;&quot; id=&quot;]XJ=&quot; style=&quot;width:139.60169677734376px&quot;&gt;일체형&lt;/td&gt;&lt;td class=&quot;&quot; id=&quot;Ex@A&quot; style=&quot;width:139.60169677734376px&quot;&gt;오픈형&lt;/td&gt;&lt;td class=&quot;&quot; id=&quot;t[s:&quot; style=&quot;width:139.60169677734376px&quot;&gt;오픈형&lt;/td&gt;&lt;td class=&quot;&quot; id=&quot;qNzU&quot; style=&quot;width:139.60169677734376px&quot;&gt;오픈형&lt;/td&gt;&lt;/tr&gt;&lt;tr id=&quot;7255ff77-78b8-4ae7-a473-3c50e01c947b&quot;&gt;&lt;th class=&quot;simple-table-header-color simple-table-header&quot; id=&quot;gdyt&quot; style=&quot;width:139.60169677734376px&quot;&gt;무릎 지지&lt;/th&gt;&lt;td class=&quot;&quot; id=&quot;]XJ=&quot; style=&quot;width:139.60169677734376px&quot;&gt;&lt;mark class=&quot;highlight-red&quot;&gt;X&lt;/mark&gt;&lt;/td&gt;&lt;td class=&quot;&quot; id=&quot;Ex@A&quot; style=&quot;width:139.60169677734376px&quot;&gt;상단, 하단&lt;/td&gt;&lt;td class=&quot;&quot; id=&quot;t[s:&quot; style=&quot;width:139.60169677734376px&quot;&gt;좌우&lt;/td&gt;&lt;td class=&quot;&quot; id=&quot;qNzU&quot; style=&quot;width:139.60169677734376px&quot;&gt;상단&lt;/td&gt;&lt;/tr&gt;&lt;tr id=&quot;418fba4f-c78e-480a-96f4-a99fe0645195&quot;&gt;&lt;th class=&quot;simple-table-header-color simple-table-header&quot; id=&quot;gdyt&quot; style=&quot;width:139.60169677734376px&quot;&gt;좌우 흔들림&lt;/th&gt;&lt;td class=&quot;&quot; id=&quot;]XJ=&quot; style=&quot;width:139.60169677734376px&quot;&gt;바깥 지지대 O&lt;/td&gt;&lt;td class=&quot;&quot; id=&quot;Ex@A&quot; style=&quot;width:139.60169677734376px&quot;&gt;&lt;mark class=&quot;highlight-red&quot;&gt;X&lt;/mark&gt;&lt;/td&gt;&lt;td class=&quot;&quot; id=&quot;t[s:&quot; style=&quot;width:139.60169677734376px&quot;&gt;바깥 지지대 O&lt;/td&gt;&lt;td class=&quot;&quot; id=&quot;qNzU&quot; style=&quot;width:139.60169677734376px&quot;&gt;바깥 지지대 O&lt;/td&gt;&lt;/tr&gt;&lt;tr id=&quot;02353b85-d78b-47e7-9bdb-ffe92224041e&quot;&gt;&lt;th class=&quot;simple-table-header-color simple-table-header&quot; id=&quot;gdyt&quot; style=&quot;width:139.60169677734376px&quot;&gt;소재&lt;/th&gt;&lt;td class=&quot;&quot; id=&quot;]XJ=&quot; style=&quot;width:139.60169677734376px&quot;&gt;아쿠아홀&lt;/td&gt;&lt;td class=&quot;&quot; id=&quot;Ex@A&quot; style=&quot;width:139.60169677734376px&quot;&gt;파워 더블 라셀&lt;/td&gt;&lt;td class=&quot;&quot; id=&quot;t[s:&quot; style=&quot;width:139.60169677734376px&quot;&gt;파워 더블 라셀&lt;/td&gt;&lt;td class=&quot;&quot; id=&quot;qNzU&quot; style=&quot;width:139.60169677734376px&quot;&gt;파워 더블 라셀&lt;/td&gt;&lt;/tr&gt;&lt;tr id=&quot;c86163d9-ad37-4d4b-9499-827bae801faa&quot;&gt;&lt;th class=&quot;simple-table-header-color simple-table-header&quot; id=&quot;gdyt&quot; style=&quot;width:139.60169677734376px&quot;&gt;금액&lt;/th&gt;&lt;td class=&quot;&quot; id=&quot;]XJ=&quot; style=&quot;width:139.60169677734376px&quot;&gt;4~5만원대&lt;/td&gt;&lt;td class=&quot;&quot; id=&quot;Ex@A&quot; style=&quot;width:139.60169677734376px&quot;&gt;4~5만원대&lt;/td&gt;&lt;td class=&quot;&quot; id=&quot;t[s:&quot; style=&quot;width:139.60169677734376px&quot;&gt;3~4만원대&lt;/td&gt;&lt;td class=&quot;&quot; id=&quot;qNzU&quot; style=&quot;width:139.60169677734376px&quot;&gt;7~8만원대&lt;/td&gt;&lt;/tr&gt;&lt;tr id=&quot;15048773-cfbd-4364-b65b-74abe7dfcdcf&quot;&gt;&lt;th class=&quot;simple-table-header-color simple-table-header&quot; id=&quot;gdyt&quot; style=&quot;width:139.60169677734376px&quot;&gt;서포팅 범위&lt;/th&gt;&lt;td class=&quot;&quot; id=&quot;]XJ=&quot; style=&quot;width:139.60169677734376px&quot;&gt;무릎 좌우&lt;/td&gt;&lt;td class=&quot;&quot; id=&quot;Ex@A&quot; style=&quot;width:139.60169677734376px&quot;&gt;무릎 아래 위주&lt;/td&gt;&lt;td class=&quot;&quot; id=&quot;t[s:&quot; style=&quot;width:139.60169677734376px&quot;&gt;무릎 전체&lt;/td&gt;&lt;td class=&quot;&quot; id=&quot;qNzU&quot; style=&quot;width:139.60169677734376px&quot;&gt;무릎 전체&lt;/td&gt;&lt;/tr&gt;&lt;tr id=&quot;4c31637b-08f9-42e6-a6f9-29e40ab19d1d&quot;&gt;&lt;th class=&quot;simple-table-header-color simple-table-header&quot; id=&quot;gdyt&quot; style=&quot;width:139.60169677734376px&quot;&gt;서포팅 강도&lt;/th&gt;&lt;td class=&quot;&quot; id=&quot;]XJ=&quot; style=&quot;width:139.60169677734376px&quot;&gt;적당한 지지&lt;/td&gt;&lt;td class=&quot;&quot; id=&quot;Ex@A&quot; style=&quot;width:139.60169677734376px&quot;&gt;적당한 고정&lt;/td&gt;&lt;td class=&quot;&quot; id=&quot;t[s:&quot; style=&quot;width:139.60169677734376px&quot;&gt;적당한 고정&lt;/td&gt;&lt;td class=&quot;&quot; id=&quot;qNzU&quot; style=&quot;width:139.60169677734376px&quot;&gt;강력한 고정&lt;/td&gt;&lt;/tr&gt;&lt;tr id=&quot;b72a8a45-18fe-443c-ac7c-fff35ead25dd&quot;&gt;&lt;th class=&quot;simple-table-header-color simple-table-header&quot; id=&quot;gdyt&quot; style=&quot;width:139.60169677734376px&quot;&gt;추천 운동&lt;/th&gt;&lt;td class=&quot;&quot; id=&quot;]XJ=&quot; style=&quot;width:139.60169677734376px&quot;&gt;러닝&lt;/td&gt;&lt;td class=&quot;&quot; id=&quot;Ex@A&quot; style=&quot;width:139.60169677734376px&quot;&gt;등산&lt;/td&gt;&lt;td class=&quot;&quot; id=&quot;t[s:&quot; style=&quot;width:139.60169677734376px&quot;&gt;등산, 테니스, 농구 등&lt;/td&gt;&lt;td class=&quot;&quot; id=&quot;qNzU&quot; style=&quot;width:139.60169677734376px&quot;&gt;농구, 테니스, 스노우보드&lt;/td&gt;&lt;/tr&gt;&lt;tr id=&quot;284155ca-adcc-4054-8740-22507eeb4a0a&quot;&gt;&lt;th class=&quot;simple-table-header-color simple-table-header&quot; id=&quot;gdyt&quot; style=&quot;width:139.60169677734376px&quot;&gt;한줄 정리&lt;/th&gt;&lt;td class=&quot;&quot; id=&quot;]XJ=&quot; style=&quot;width:139.60169677734376px&quot;&gt;러닝 특화&lt;/td&gt;&lt;td class=&quot;&quot; id=&quot;Ex@A&quot; style=&quot;width:139.60169677734376px&quot;&gt;무릎 집중 보호&lt;/td&gt;&lt;td class=&quot;&quot; id=&quot;t[s:&quot; style=&quot;width:139.60169677734376px&quot;&gt;전천후용&lt;/td&gt;&lt;td class=&quot;&quot; id=&quot;qNzU&quot; style=&quot;width:139.60169677734376px&quot;&gt;격한 운동용&lt;/td&gt;&lt;/tr&gt;&lt;/tbody&gt;&lt;/table&gt;&lt;p class=&quot;&quot; id=&quot;3d32e3d6-4bb5-4d65-9f26-568a161b3904&quot;&gt;
&lt;/p&gt;&lt;h1 class=&quot;&quot; id=&quot;a769d069-8062-4521-8f1a-2d81c8435d54&quot;&gt;내 선택은?&lt;/h1&gt;&lt;p class=&quot;&quot; id=&quot;ffc42ecb-058b-4fbe-adda-b6f87b3a13bf&quot;&gt;나는 앞서 말했듯, 메인으로 가져가는 스포츠가 아래 세가지 이다.&lt;/p&gt;&lt;ul class=&quot;bulleted-list&quot; id=&quot;31c79174-ae66-4a36-8da8-700d6911598f&quot;&gt;&lt;li style=&quot;list-style-type:disc&quot;&gt;&lt;strong&gt;러닝  ‍♂️&lt;/strong&gt;&lt;ul class=&quot;bulleted-list&quot; id=&quot;d89c3172-3400-4566-b5d4-fccd3b44b7c1&quot;&gt;&lt;li style=&quot;list-style-type:circle&quot;&gt;보통 3~7K 정도를 6분대 페이스로 러닝함.&lt;/li&gt;&lt;/ul&gt;&lt;ul class=&quot;bulleted-list&quot; id=&quot;38b34660-0635-4cf6-834c-e0a5a403e7fd&quot;&gt;&lt;li style=&quot;list-style-type:circle&quot;&gt;운동 빈도 : 높음 &lt;/li&gt;&lt;/ul&gt;&lt;/li&gt;&lt;/ul&gt;&lt;ul class=&quot;bulleted-list&quot; id=&quot;799566f3-b71e-477b-93da-5ee05f4487ce&quot;&gt;&lt;li style=&quot;list-style-type:disc&quot;&gt;&lt;strong&gt;등산 ⛰&lt;/strong&gt;&lt;ul class=&quot;bulleted-list&quot; id=&quot;dfece56f-2966-4e7c-8f16-fd2ca7a79b95&quot;&gt;&lt;li style=&quot;list-style-type:circle&quot;&gt;요즘은 잘 안가는데, 1달에 1번은 가는 편. 조만간 백팩킹 도전 예정!&lt;/li&gt;&lt;/ul&gt;&lt;ul class=&quot;bulleted-list&quot; id=&quot;852e3236-5240-4f83-9e40-217638adedb2&quot;&gt;&lt;li style=&quot;list-style-type:circle&quot;&gt;운동 빈도 : 낮음 &lt;/li&gt;&lt;/ul&gt;&lt;/li&gt;&lt;/ul&gt;&lt;ul class=&quot;bulleted-list&quot; id=&quot;6c254561-88fa-4c16-8d85-27d176a72d1f&quot;&gt;&lt;li style=&quot;list-style-type:disc&quot;&gt;&lt;strong&gt;테니스  &lt;/strong&gt;&lt;ul class=&quot;bulleted-list&quot; id=&quot;299ce193-3dab-47a0-a6af-53240d593abc&quot;&gt;&lt;li style=&quot;list-style-type:circle&quot;&gt;매주 레슨을 받고 있으며(곧 1년차), 코트가 잡히면 경기함!&lt;/li&gt;&lt;/ul&gt;&lt;ul class=&quot;bulleted-list&quot; id=&quot;d4e40712-96c4-41e3-b0b5-925dc7b9d243&quot;&gt;&lt;li style=&quot;list-style-type:circle&quot;&gt;운동 빈도 : 보통 &lt;/li&gt;&lt;/ul&gt;&lt;/li&gt;&lt;/ul&gt;&lt;p class=&quot;&quot; id=&quot;fc4648f7-1e58-4229-9c9a-1ef16ab7e8af&quot;&gt;
&lt;/p&gt;&lt;p class=&quot;&quot; id=&quot;6174afa0-1436-4389-b910-2a9f66a96e77&quot;&gt;일단 러닝만 하는게 아니고, 테니스와 등산도 하고 있으므로 RK 시리즈는 제외하였다.
무릎이 아파서 무릎 주위 서포팅이 강한 JK 시리즈도 고민했지만, 바깥 지지대가 없는 부분이 아쉬웠다.&lt;/p&gt;&lt;div class=&quot;indented&quot;&gt;&lt;p class=&quot;&quot; id=&quot;4272b260-6653-4c27-82d0-aac049634b0b&quot;&gt;&lt;mark class=&quot;highlight-gray&quot;&gt;→ 바깥 지지대가 있을 경우 관절 주변 근육 부담을 덜어주는데, 이것이 러너들에게 좋다고 한다. (영상 참고)&lt;/mark&gt;&lt;/p&gt;&lt;/div&gt;&lt;p class=&quot;&quot; id=&quot;c04f3511-4825-4f30-bcef-7f5751e61048&quot;&gt;이렇게 남은건 EK 시리즈와 ZK 시리즈인데, 농구나 스노우보드 처럼 회전이 격한 운동은 안하고 있으므로
&lt;span style=&quot;border-bottom:0.05em solid&quot;&gt;&lt;mark class=&quot;highlight-blue&quot;&gt;&lt;strong&gt;전천후에 좋은 EK 시리즈&lt;/strong&gt;&lt;/mark&gt;&lt;/span&gt;로 결정했다. 그중에서도 가장 빡세게 근육을 잡아줄 수 있는 &lt;span style=&quot;border-bottom:0.05em solid&quot;&gt;&lt;strong&gt;EK-5&lt;/strong&gt;&lt;/span&gt; 으로 선택했다.&lt;/p&gt;&lt;p class=&quot;&quot; id=&quot;54be8691-33c7-4fc8-bfcb-36bf4dee65b9&quot;&gt;이제 아푸지말구 운동 열시미하자 !_!&lt;/p&gt;&lt;h1 class=&quot;&quot; id=&quot;e2da8609-1b9c-4bbf-8a36-108cdae79944&quot;&gt;참고자료&lt;/h1&gt;&lt;ul class=&quot;bulleted-list&quot; id=&quot;f4022e79-1b3e-4777-bbed-24fede169a53&quot;&gt;&lt;li style=&quot;list-style-type:disc&quot;&gt;&lt;a href=&quot;https://www.youtube.com/watch?v=MiAhSYK3Wv8&quot;&gt;https://www.youtube.com/watch?v=MiAhSYK3Wv8&lt;/a&gt;&lt;/li&gt;&lt;/ul&gt;&lt;/div&gt;&lt;/article&gt;&lt;/body&gt;</description>
      <category>정보/일상</category>
      <category>소비정리</category>
      <category>취미</category>
      <author>3sammy</author>
      <guid isPermaLink="true">https://23log.tistory.com/183</guid>
      <comments>https://23log.tistory.com/183#entry183comment</comments>
      <pubDate>Tue, 6 Sep 2022 00:17:31 +0900</pubDate>
    </item>
    <item>
      <title>[MAC] 안정적인 파이썬 3.9.x 버전, M1에 설치하기</title>
      <link>https://23log.tistory.com/182</link>
      <description>&lt;body&gt;&lt;article class=&quot;page sans Notion&quot; id=&quot;15b2ec9d-4bd7-41c4-ae5d-5cb7258ce6b9&quot;&gt;&lt;div class=&quot;page-body Tistory&quot;&gt;&lt;h3 class=&quot;&quot; id=&quot;885e8033-59cc-4a60-87e1-c0099d98543a&quot;&gt;안정적인 버전?&lt;/h3&gt;&lt;p class=&quot;&quot; id=&quot;f3497ee7-70eb-45c5-b0f3-43fe729f69ff&quot;&gt;본인에게 필요한 버전을 설치하면 된다. 하지만 아무래도 가장 최신(Latest) 버전은 안정화가 덜 되어 있을 수 있고, 특정 에러를 맞닥뜨렸을 때 정보를 얻기도 어렵다. 따라서 한단계 낮은 &lt;strong&gt;마이너 버전의 최신 패치&lt;/strong&gt;를 받으면 된다.&lt;/p&gt;&lt;ul class=&quot;bulleted-list&quot; id=&quot;fe6ea704-e7b5-4906-8e58-90417c96c060&quot;&gt;&lt;li style=&quot;list-style-type:disc&quot;&gt;현재 파이썬은 10버전까지 릴리즈 되었다.&lt;/li&gt;&lt;/ul&gt;&lt;ul class=&quot;bulleted-list&quot; id=&quot;f8cd057a-6eb3-473b-9f0f-7772c3871e1a&quot;&gt;&lt;li style=&quot;list-style-type:disc&quot;&gt;버전마다 기능이나 라이브러리는 약간 상이하겠지만, 최신 버전은 안정성이 다소 떨어질 수 있으니 바로 이전 버전인 3.9 버전의 최신으로 다운받는다.&lt;/li&gt;&lt;/ul&gt;&lt;ul class=&quot;bulleted-list&quot; id=&quot;1a2e2e45-a29a-4cc1-b6ac-6bf3465ecb00&quot;&gt;&lt;li style=&quot;list-style-type:disc&quot;&gt;220901 기준으로, 3.9.13 버전이 가장 최신이고 안정적인 버전이다.&lt;/li&gt;&lt;/ul&gt;&lt;figure class=&quot;callout&quot; id=&quot;7ab3df5e-8564-4a41-adfd-1a497c120c51&quot; style=&quot;white-space:pre-wrap;display:flex&quot;&gt;&lt;div style=&quot;font-size:1.5em&quot;&gt;&lt;span class=&quot;icon&quot;&gt; &lt;/span&gt;&lt;/div&gt;&lt;div style=&quot;width:100%&quot;&gt;&lt;strong&gt;Version 표기법! (v3.9.10)&lt;/strong&gt;
- 첫 째 자리, 메이저(Major) : 엄청난 변화가 생겼을 때! 이전 버전과 확연한 차이!
- 둘째 자리, 마이너(Minor) : 기능에서 변화되거나 새로운 기능이 추가되었을 때!
- 셋째 자리, 패치(Patch) : 사소한 변경으로, 오류나 에러 등을 해결한 경우&lt;/div&gt;&lt;/figure&gt;&lt;p class=&quot;&quot; id=&quot;a9ba9a65-e0b9-442e-867d-e33a998e0034&quot;&gt;
&lt;/p&gt;&lt;h3 class=&quot;&quot; id=&quot;5875a636-152b-4929-b81a-21a5583a5516&quot;&gt;설치&lt;/h3&gt;&lt;figure id=&quot;b22c8057-938f-4913-96e1-d67da1e0589a&quot;&gt;&lt;a class=&quot;bookmark source&quot; href=&quot;https://www.python.org/downloads/release/python-3913/&quot;&gt;&lt;div class=&quot;bookmark-info&quot;&gt;&lt;div class=&quot;bookmark-text&quot;&gt;&lt;div class=&quot;bookmark-title&quot;&gt;Python Release Python 3.9.13&lt;/div&gt;&lt;div class=&quot;bookmark-description&quot;&gt;Release Date: May 17, 2022 Note: The release you're looking at is Python 3.9.13, a bugfix release for the legacy 3.9 series. Python 3.10 is now the latest feature release series of Python 3. Get the latest release of 3.10.x here. According to the release calendar specified in PEP 596, Python 3.9.13 is the final regular maintenance release.&lt;/div&gt;&lt;/div&gt;&lt;div class=&quot;bookmark-href&quot;&gt;&lt;img class=&quot;icon bookmark-icon&quot; src=&quot;https://www.python.org/static/favicon.ico&quot;/&gt;https://www.python.org/downloads/release/python-3913/&lt;/div&gt;&lt;/div&gt;&lt;img class=&quot;bookmark-image&quot; src=&quot;https://www.python.org/static/opengraph-icon-200x200.png&quot;/&gt;&lt;/a&gt;&lt;/figure&gt;&lt;ul class=&quot;bulleted-list&quot; id=&quot;6a635aa9-3598-4bab-9300-33495f1c6ab5&quot;&gt;&lt;li style=&quot;list-style-type:disc&quot;&gt;하단에서 본인의 운영체제에 맞게 다운로드 한다.&lt;/li&gt;&lt;/ul&gt;&lt;ul class=&quot;bulleted-list&quot; id=&quot;2fd244e8-1972-487d-8cc1-de57ff028779&quot;&gt;&lt;li style=&quot;list-style-type:disc&quot;&gt;M1 PRO 칩이므로, &lt;code&gt;universal2&lt;/code&gt; 를 선택한다.&lt;/li&gt;&lt;/ul&gt;&lt;p class=&quot;&quot; id=&quot;f4017b44-efd7-458e-9583-50d4249409b3&quot;&gt;
&lt;/p&gt;&lt;div class=&quot;image notion-img&quot; id=&quot;2c773215-bcbc-4bbf-8a01-8b57d6497745&quot;&gt;&lt;figure class=&quot;imageblock alignCenter&quot; width=&quot;732&quot; height=&quot;556&quot; data-origin-width=&quot;732&quot; data-origin-height=&quot;556&quot; data-ke-mobilestyle=&quot;widthOrigin&quot; filename=&quot;img.png&quot; filemime=&quot;image/png&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/bfnDOx/btrK7DmkYIz/WvXWsYiuSgaVH3rufiarhK/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/bfnDOx/btrK7DmkYIz/WvXWsYiuSgaVH3rufiarhK/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/bfnDOx/btrK7DmkYIz/WvXWsYiuSgaVH3rufiarhK/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FbfnDOx%2FbtrK7DmkYIz%2FWvXWsYiuSgaVH3rufiarhK%2Fimg.png&quot; width=&quot;732&quot; height=&quot;556&quot; data-origin-width=&quot;732&quot; data-origin-height=&quot;556&quot; data-ke-mobilestyle=&quot;widthOrigin&quot; filename=&quot;img.png&quot; filemime=&quot;image/png&quot; onerror=&quot;this.onerror=null; this.src='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png'; this.srcset='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png';&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;/div&gt;&lt;ul class=&quot;bulleted-list&quot; id=&quot;b53b7827-772c-4e19-bdfc-6d944c74078b&quot;&gt;&lt;li style=&quot;list-style-type:disc&quot;&gt;퀵하게 퀵퀵퀵! 설치한다!&lt;/li&gt;&lt;/ul&gt;&lt;p class=&quot;&quot; id=&quot;d269f3c5-6d5e-47be-89f3-d25720749e5e&quot;&gt;
&lt;/p&gt;&lt;div class=&quot;image notion-img&quot; id=&quot;28233c19-8045-49d2-8bd3-cf43f497f62e&quot;&gt;&lt;figure class=&quot;imageblock alignCenter&quot; width=&quot;697&quot; height=&quot;591&quot; data-origin-width=&quot;697&quot; data-origin-height=&quot;591&quot; data-ke-mobilestyle=&quot;widthOrigin&quot; filename=&quot;img.png&quot; filemime=&quot;image/png&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/D5Cim/btrLb5VGGUQ/9kTugK73UUfte6F0kMzlF1/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/D5Cim/btrLb5VGGUQ/9kTugK73UUfte6F0kMzlF1/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/D5Cim/btrLb5VGGUQ/9kTugK73UUfte6F0kMzlF1/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FD5Cim%2FbtrLb5VGGUQ%2F9kTugK73UUfte6F0kMzlF1%2Fimg.png&quot; width=&quot;697&quot; height=&quot;591&quot; data-origin-width=&quot;697&quot; data-origin-height=&quot;591&quot; data-ke-mobilestyle=&quot;widthOrigin&quot; filename=&quot;img.png&quot; filemime=&quot;image/png&quot; onerror=&quot;this.onerror=null; this.src='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png'; this.srcset='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png';&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;/div&gt;&lt;ul class=&quot;bulleted-list&quot; id=&quot;70ce4825-ca6e-4217-ab00-092cd30d95e6&quot;&gt;&lt;li style=&quot;list-style-type:disc&quot;&gt;터미널을 열고, &lt;code&gt;python3 --version&lt;/code&gt; 을 하여 설치가 제대로 되었는지 확인한다.&lt;blockquote class=&quot;&quot; id=&quot;92b41368-f188-41cd-99de-ece1c85d78ff&quot;&gt;3버젼 이하에선 그냥 &lt;code&gt;python --version&lt;/code&gt; 을 하면 되지만,
3버젼부턴 &lt;code&gt;python3&lt;/code&gt; 라고 명시해주자.&lt;/blockquote&gt;&lt;/li&gt;&lt;/ul&gt;&lt;p class=&quot;&quot; id=&quot;9b127fcc-fa07-4c34-ac46-38ed8c4720bb&quot;&gt;
&lt;/p&gt;&lt;hr id=&quot;742e53f0-cb4c-4bc5-8f03-1cc5c492b300&quot;/&gt;&lt;h3 class=&quot;&quot; id=&quot;8b3b5776-cf59-4a7e-b37e-03137dc4cca9&quot;&gt;설치 끝!&lt;/h3&gt;&lt;p class=&quot;&quot; id=&quot;7d31f659-411c-4acc-afe6-58d131976d08&quot;&gt;설치가 끝났으니, 이제 원하는 파일을 실행한다.&lt;/p&gt;&lt;p class=&quot;&quot; id=&quot;1e54f9b5-ceed-4f37-883e-55015fc2041e&quot;&gt;따로 파이참과 같은 IDE는 사용하지 않으므로, 필자는 터미널에서 바로 실행했다.&lt;/p&gt;&lt;ul class=&quot;bulleted-list&quot; id=&quot;242f0461-c795-4db5-9c46-afec35b1f308&quot;&gt;&lt;li style=&quot;list-style-type:disc&quot;&gt;&lt;code&gt;pip3 install requirements.txt&lt;/code&gt; : txt파일로 관리되는 라이브러리 설치하기&lt;/li&gt;&lt;/ul&gt;&lt;ul class=&quot;bulleted-list&quot; id=&quot;dbf87a86-fc18-419d-840a-52274b02ea59&quot;&gt;&lt;li style=&quot;list-style-type:disc&quot;&gt;&lt;code&gt;python3 main.py&lt;/code&gt; : 파이썬 실행하기&lt;/li&gt;&lt;/ul&gt;&lt;p class=&quot;&quot; id=&quot;ed5bcf80-b0b0-4b13-81f5-fa94ee7d7cbe&quot;&gt;
&lt;/p&gt;&lt;/div&gt;&lt;/article&gt;&lt;/body&gt;</description>
      <category>develop</category>
      <category>MAC</category>
      <category>python</category>
      <category>고단한_환경셋팅</category>
      <author>3sammy</author>
      <guid isPermaLink="true">https://23log.tistory.com/182</guid>
      <comments>https://23log.tistory.com/182#entry182comment</comments>
      <pubDate>Thu, 1 Sep 2022 21:33:28 +0900</pubDate>
    </item>
    <item>
      <title>옵시디언(Obsidian) 플러그인과 테마, 오프라인 설치 방법</title>
      <link>https://23log.tistory.com/181</link>
      <description>&lt;body&gt;&lt;article class=&quot;page sans Notion&quot; id=&quot;8feab59c-7f9b-4a08-8adb-8dbf20ee1fa6&quot;&gt;&lt;div class=&quot;page-body Tistory&quot;&gt;&lt;div class=&quot;image notion-img&quot; id=&quot;6c3c0752-bd6c-45aa-a7dc-765894b367f5&quot;&gt;&lt;figure class=&quot;imageblock alignCenter&quot; width=&quot;600&quot; height=&quot;550&quot; data-origin-width=&quot;600&quot; data-origin-height=&quot;550&quot; data-ke-mobilestyle=&quot;widthOrigin&quot; filename=&quot;img.png&quot; filemime=&quot;image/png&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/bWpcrr/btrKwVOILr1/okt2I7UEZ4TG9JBltk9oA0/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/bWpcrr/btrKwVOILr1/okt2I7UEZ4TG9JBltk9oA0/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/bWpcrr/btrKwVOILr1/okt2I7UEZ4TG9JBltk9oA0/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FbWpcrr%2FbtrKwVOILr1%2Fokt2I7UEZ4TG9JBltk9oA0%2Fimg.png&quot; width=&quot;600&quot; height=&quot;550&quot; data-origin-width=&quot;600&quot; data-origin-height=&quot;550&quot; data-ke-mobilestyle=&quot;widthOrigin&quot; filename=&quot;img.png&quot; filemime=&quot;image/png&quot; onerror=&quot;this.onerror=null; this.src='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png'; this.srcset='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png';&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;/div&gt;&lt;h1 class=&quot;&quot; id=&quot;cbe858e9-7d54-4d4a-8e14-bbfdaf412bc2&quot;&gt;인트로&lt;/h1&gt;&lt;p class=&quot;&quot; id=&quot;d56703ce-26ee-4724-b8f1-944d1cbbf0de&quot;&gt;업무 내용 정리 및 관리를 위해, 옵시디언을 적극 활용하고자 생각했다.. 계속 마크다운(&lt;code&gt;.md&lt;/code&gt;)으로 업무 내용을 정리했기 때문에, 마크다운 파일 기반의 관리 프로그램인 옵시디언을 도입하는데, 망설임은 없었다.&lt;/p&gt;&lt;p class=&quot;&quot; id=&quot;e6165c00-3e84-4500-9e05-1866fff03128&quot;&gt;옵시디안의 장점은, 600여개에 달하는 막강한 기능의 외부 플러그인 인데, 망이 분리되어 있는 상황에서 편하게 사용이 불가능하다.&lt;/p&gt;&lt;blockquote class=&quot;&quot; id=&quot;ebfe5f26-8735-4b5f-b283-69be31e67d46&quot;&gt;커뮤니티 플러그인이나 테마를 검색하는 과정에서 옵시디언 API가 통신을 하는데,
이때 해당 URL이 내부망에서 허용되지 않았기 때문에, fetch가 되지 않는다..&lt;/blockquote&gt;&lt;p class=&quot;&quot; id=&quot;80859abd-3034-40c2-8b16-f5f589de8208&quot;&gt;이에 따라 내부망에서도 옵시디언을 사용할 수 있도록, 오프라인 환경에서 커뮤니티 플러그인과 테마를 적용해보고자 한다.&lt;/p&gt;&lt;h1 class=&quot;&quot; id=&quot;ce7366fd-9cf2-43d2-ad01-97e69952bde0&quot;&gt;방법&lt;/h1&gt;&lt;h2 class=&quot;&quot; id=&quot;6daa93f8-9adc-4741-bfa6-25c5536efdaa&quot;&gt;플러그인 설치 방법&lt;/h2&gt;&lt;ol class=&quot;numbered-list&quot; id=&quot;8d58e5cf-4c1c-4d79-b524-2da39cc9f859&quot; start=&quot;1&quot; type=&quot;1&quot;&gt;&lt;li&gt;외부망이 되어있는 환경(커뮤니티 플러그인에 접속이 가능한)에서 옵시디언을 켠다.&lt;/li&gt;&lt;/ol&gt;&lt;ol class=&quot;numbered-list&quot; id=&quot;ebde14fc-9667-4ff8-9733-e842b888a6df&quot; start=&quot;2&quot; type=&quot;1&quot;&gt;&lt;li&gt;원하는 플러그인을 설치한다.&lt;/li&gt;&lt;/ol&gt;&lt;ol class=&quot;numbered-list&quot; id=&quot;8a40b796-5267-4825-ba31-63fb48c92a57&quot; start=&quot;3&quot; type=&quot;1&quot;&gt;&lt;li&gt;자신이 지정한 보관함(vault)의 &lt;code&gt;.obsidian/plugins&lt;/code&gt; 폴더로 이동한다.&lt;ul class=&quot;bulleted-list&quot; id=&quot;567cc85d-b87e-49dd-8212-29fa16b75045&quot;&gt;&lt;li style=&quot;list-style-type:disc&quot;&gt;&lt;code&gt;.obsidian&lt;/code&gt; 폴더는 숨김처리 되어있다.&lt;/li&gt;&lt;/ul&gt;&lt;ul class=&quot;bulleted-list&quot; id=&quot;98d3552d-0e7e-4105-bdb3-db083d4ba467&quot;&gt;&lt;li style=&quot;list-style-type:disc&quot;&gt;MAC 유저는, &lt;code&gt;cmd + shift + .&lt;/code&gt; 으로 숨김파일을 볼 수 있다.&lt;/li&gt;&lt;/ul&gt;&lt;/li&gt;&lt;/ol&gt;&lt;ol class=&quot;numbered-list&quot; id=&quot;b02207bb-ddc3-43f3-8021-277a6faaf422&quot; start=&quot;4&quot; type=&quot;1&quot;&gt;&lt;li&gt;해당 폴더 내에 설치한 플러그인이 각 폴더별로 생성되어 있다.
플러그인은 플러그인 폴더 내 아래의 파일들만 있으면 동작한다.&lt;ul class=&quot;bulleted-list&quot; id=&quot;7000c1be-f070-4e1d-ae3f-77221b4db0c1&quot;&gt;&lt;li style=&quot;list-style-type:disc&quot;&gt;main.ts&lt;/li&gt;&lt;/ul&gt;&lt;ul class=&quot;bulleted-list&quot; id=&quot;e178b53a-4c93-4c1d-8388-e1f25c86f1ac&quot;&gt;&lt;li style=&quot;list-style-type:disc&quot;&gt;style.css&lt;/li&gt;&lt;/ul&gt;&lt;ul class=&quot;bulleted-list&quot; id=&quot;c7333735-f9bb-46e1-830e-3d81734de65f&quot;&gt;&lt;li style=&quot;list-style-type:disc&quot;&gt;msconfig.json&lt;blockquote class=&quot;&quot; id=&quot;586f1baa-8253-463d-9a2f-31a9620b73f6&quot;&gt;이 녀석들만 있으면, 어디든 가지고 다닐 수 있다!&lt;/blockquote&gt;&lt;/li&gt;&lt;/ul&gt;&lt;/li&gt;&lt;/ol&gt;&lt;ol class=&quot;numbered-list&quot; id=&quot;7ef1a8a4-56c9-49c6-832f-47503fbf7eeb&quot; start=&quot;5&quot; type=&quot;1&quot;&gt;&lt;li&gt;폴더 통째로 압축하여, 내부망으로 가지고 간다!&lt;/li&gt;&lt;/ol&gt;&lt;ol class=&quot;numbered-list&quot; id=&quot;49aca573-710a-4308-bb9c-5ae49f76407c&quot; start=&quot;6&quot; type=&quot;1&quot;&gt;&lt;li&gt;unzip 한 뒤, 내부망의 보관함(vault)속 &lt;code&gt;.obsidian/plugins&lt;/code&gt;폴더에 넣어준다.&lt;ul class=&quot;bulleted-list&quot; id=&quot;72d59120-8bf1-4b05-b9cf-ba59382784e6&quot;&gt;&lt;li style=&quot;list-style-type:disc&quot;&gt;plugins 폴더가 없다면, 직접 생성한다.&lt;/li&gt;&lt;/ul&gt;&lt;/li&gt;&lt;/ol&gt;&lt;ol class=&quot;numbered-list&quot; id=&quot;47bc8987-c60c-401f-91fe-b49edabc7859&quot; start=&quot;7&quot; type=&quot;1&quot;&gt;&lt;li&gt;옵시디언을 재실행하면, 커뮤니티 플러그인에 추가되어 있는 것을 볼 수 있다.
원하는 플러그인을 ON 하여 사용한다.&lt;/li&gt;&lt;/ol&gt;&lt;div class=&quot;image notion-img&quot; id=&quot;cb817e90-55ee-478c-a9b8-d769a6584674&quot;&gt;&lt;figure class=&quot;imageblock alignCenter&quot; width=&quot;1235&quot; height=&quot;894&quot; data-origin-width=&quot;1235&quot; data-origin-height=&quot;894&quot; data-ke-mobilestyle=&quot;widthOrigin&quot; filename=&quot;img.png&quot; filemime=&quot;image/png&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/UTxDy/btrKzKluRv4/riw6IDtnWVTvOu7M6sUrFk/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/UTxDy/btrKzKluRv4/riw6IDtnWVTvOu7M6sUrFk/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/UTxDy/btrKzKluRv4/riw6IDtnWVTvOu7M6sUrFk/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FUTxDy%2FbtrKzKluRv4%2Friw6IDtnWVTvOu7M6sUrFk%2Fimg.png&quot; width=&quot;1235&quot; height=&quot;894&quot; data-origin-width=&quot;1235&quot; data-origin-height=&quot;894&quot; data-ke-mobilestyle=&quot;widthOrigin&quot; filename=&quot;img.png&quot; filemime=&quot;image/png&quot; onerror=&quot;this.onerror=null; this.src='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png'; this.srcset='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png';&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;/div&gt;&lt;hr id=&quot;d2ed438c-04b7-4461-8554-f86e57058232&quot;/&gt;&lt;h2 class=&quot;&quot; id=&quot;7ef15bec-05f5-472f-9b2a-30381c3bb9db&quot;&gt;테마 설치 방법&lt;/h2&gt;&lt;ol class=&quot;numbered-list&quot; id=&quot;4dbb0cec-6a81-47ad-ac4a-1bb6dcc96013&quot; start=&quot;1&quot; type=&quot;1&quot;&gt;&lt;li&gt;옵시디언 &lt;code&gt;설정 - Appearance - Themes - Manage&lt;/code&gt; 로 접속하여 원하는 테마를 설치한다.&lt;/li&gt;&lt;/ol&gt;&lt;ol class=&quot;numbered-list&quot; id=&quot;ea5806d7-e576-4c38-87c6-af2a5ec32188&quot; start=&quot;2&quot; type=&quot;1&quot;&gt;&lt;li&gt;&lt;code&gt;{자신의 vault 주소}/.obsidian/themes&lt;/code&gt; 로 가보면, 테마 CSS 파일들이 존재한다.&lt;ul class=&quot;bulleted-list&quot; id=&quot;2ddff465-d9a1-47d1-9194-19b6ef93d395&quot;&gt;&lt;li style=&quot;list-style-type:disc&quot;&gt;Manage 버튼 옆에 폴더 버튼이 있다. 이걸 눌러도 된다.&lt;/li&gt;&lt;/ul&gt;&lt;/li&gt;&lt;/ol&gt;&lt;ol class=&quot;numbered-list&quot; id=&quot;b90b74db-6201-4f59-b9ef-d32b32a816f4&quot; start=&quot;3&quot; type=&quot;1&quot;&gt;&lt;li&gt;해당 CSS 파일들을 압축하여, 내부망으로 가져온다.&lt;/li&gt;&lt;/ol&gt;&lt;ol class=&quot;numbered-list&quot; id=&quot;1a1b558d-7f92-4a6f-9b79-e65ae9654a96&quot; start=&quot;4&quot; type=&quot;1&quot;&gt;&lt;li&gt;unzip 한 뒤, 동일 폴더에 압축을 풀어준다.&lt;ul class=&quot;bulleted-list&quot; id=&quot;2e5bdfec-8ea6-409f-a4f5-cb79018f3517&quot;&gt;&lt;li style=&quot;list-style-type:disc&quot;&gt;동일하게 themes 폴더가 없으면 생성한다.&lt;/li&gt;&lt;/ul&gt;&lt;/li&gt;&lt;/ol&gt;&lt;ol class=&quot;numbered-list&quot; id=&quot;9af6997e-2f82-44ef-bbd8-163bd0418a8c&quot; start=&quot;5&quot; type=&quot;1&quot;&gt;&lt;li&gt;옵시디언 재실행 후, 1번의 Manage 메뉴를 눌러보면 설치한 테마들이 표시된다.&lt;/li&gt;&lt;/ol&gt;&lt;ol class=&quot;numbered-list&quot; id=&quot;6c285dff-3a39-4088-a1db-a365f30c2f0b&quot; start=&quot;6&quot; type=&quot;1&quot;&gt;&lt;li&gt;만약 fetch를 못받아와 아무런 테마가 보이지 않는다면, 아래의 방법을 따라한다.&lt;ol class=&quot;numbered-list&quot; id=&quot;8567c792-ea25-468d-bd81-d9d874210a9c&quot; start=&quot;1&quot; type=&quot;a&quot;&gt;&lt;li&gt;&lt;code&gt;.obsidian&lt;/code&gt;폴더 내에 &lt;code&gt;appearance.json&lt;/code&gt; 파일을 생성한다.&lt;/li&gt;&lt;/ol&gt;&lt;ol class=&quot;numbered-list&quot; id=&quot;76dce9b0-975c-4559-8dcc-e3960e7fed1e&quot; start=&quot;2&quot; type=&quot;a&quot;&gt;&lt;li&gt;아래의 내용을 적어 저장한다.&lt;pre class=&quot;code JSON&quot; id=&quot;2b3f1a5c-7fe6-4eaa-8930-3a33448f7899&quot;&gt;&lt;code&gt;{
	&quot;cssTheme&quot; : &quot;{3번의 CSS 파일명}&quot;
}&lt;/code&gt;&lt;/pre&gt;&lt;ul class=&quot;bulleted-list&quot; id=&quot;98a84070-6ae1-4940-992c-ee893be3c618&quot;&gt;&lt;li style=&quot;list-style-type:disc&quot;&gt;필자는 &lt;code&gt;&quot;cssTheme&quot; : &quot;California Coast&quot;&lt;/code&gt; 테마를 적용했다.&lt;/li&gt;&lt;/ul&gt;&lt;/li&gt;&lt;/ol&gt;&lt;ol class=&quot;numbered-list&quot; id=&quot;8c22672a-8e77-4f86-9b10-106d6d354510&quot; start=&quot;3&quot; type=&quot;a&quot;&gt;&lt;li&gt;위 방법으로 하면 정상 인식되고, 이후 Manage 에서도 정상적으로 CSS 파일들을 인식한다.&lt;/li&gt;&lt;/ol&gt;&lt;/li&gt;&lt;/ol&gt;&lt;ol class=&quot;numbered-list&quot; id=&quot;b07085e9-5728-4d6c-9714-e5e492329cc9&quot; start=&quot;7&quot; type=&quot;1&quot;&gt;&lt;li&gt;끝!&lt;/li&gt;&lt;/ol&gt;&lt;p class=&quot;&quot; id=&quot;d5dfaa6d-dcb1-44b9-8ff8-4f844a2f0ef2&quot;&gt;
&lt;/p&gt;&lt;h1 class=&quot;&quot; id=&quot;d68fe2ba-a6be-4b54-9e62-3ac7b6af1749&quot;&gt;마무리&lt;/h1&gt;&lt;p class=&quot;&quot; id=&quot;2e3bc6e1-0d27-4199-a609-7cf7b0b3000f&quot;&gt;옵시디언은 정말 강력한 툴이다. 마크다운을 알고있는 유저라면 사용법은 어렵진 않지만, &lt;mark class=&quot;highlight-teal&quot;&gt;&lt;strong&gt;잘 쓰려면&lt;/strong&gt;&lt;/mark&gt; 많은 공부가 필요하다.&lt;/p&gt;&lt;p class=&quot;&quot; id=&quot;f9876417-2bf4-4817-9218-61d1cdf13698&quot;&gt;특히, 나는 옵시디언을 접하며, “두번째 뇌”와 “제텔카스텐”이란 개념도 처음으로 접하였는데, 새로운 지식 관리 방법에 머리가 띵- 했다. 이 개념들은 내 삶을 관통하는 답답함이나 의문들에 대한 하나의 구체적인 방법론을 제시하고 있었다. 아직은 어려운 개념이지만 계속 공부하고 또 방법론을 하나씩 적용해보며, 나에게 알맞는 “두번째 뇌”를 구축 해봐야겠다.&lt;/p&gt;&lt;p class=&quot;&quot; id=&quot;f1f9954f-2dc4-4e79-92a2-4741952998bf&quot;&gt;
&lt;/p&gt;&lt;figure class=&quot;callout&quot; id=&quot;ba6a485e-7850-428a-b085-797afd66775a&quot; style=&quot;white-space:pre-wrap;display:flex&quot;&gt;&lt;div style=&quot;font-size:1.5em&quot;&gt;&lt;span class=&quot;icon&quot;&gt; &lt;/span&gt;&lt;/div&gt;&lt;div style=&quot;width:100%&quot;&gt;어려운 만큼 내 생활에 잘 적용하면 좋을 것 같다.
옵시디언을 통해 어제보다 오늘 더 정돈되고 단정한 삶을 살 수 있을 것 같아 좋다.
내일이 더욱 기대가 된다 :D&lt;/div&gt;&lt;/figure&gt;&lt;p class=&quot;&quot; id=&quot;f6f5cfc8-3daa-4701-b4da-3833fd1339f9&quot;&gt;
&lt;/p&gt;&lt;/div&gt;&lt;/article&gt;&lt;/body&gt;</description>
      <category>정보/생산성</category>
      <category>생산성</category>
      <category>옵시디언</category>
      <author>3sammy</author>
      <guid isPermaLink="true">https://23log.tistory.com/181</guid>
      <comments>https://23log.tistory.com/181#entry181comment</comments>
      <pubDate>Thu, 25 Aug 2022 22:15:48 +0900</pubDate>
    </item>
    <item>
      <title>로지텍 MX Master 3S 개봉기, 구매 이유와 Logi Option까지</title>
      <link>https://23log.tistory.com/180</link>
      <description>&lt;body&gt;&lt;article class=&quot;page sans Notion&quot; id=&quot;4a96a42f-cc4e-4e23-bf04-af0a07566898&quot;&gt;&lt;div class=&quot;page-body Tistory&quot;&gt;&lt;h1 class=&quot;&quot; id=&quot;3dd56660-ba43-4a9c-937c-7586387606be&quot;&gt;구매 이유&lt;/h1&gt;&lt;div class=&quot;image notion-img&quot; id=&quot;93157af4-5411-4beb-8141-eb1a97e7f2c6&quot;&gt;&lt;figure class=&quot;imageblock alignCenter&quot; width=&quot;4032&quot; height=&quot;3024&quot; data-origin-width=&quot;4032&quot; data-origin-height=&quot;3024&quot; data-ke-mobilestyle=&quot;widthOrigin&quot; filename=&quot;img.png&quot; filemime=&quot;image/png&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/d6Zt8I/btrR3CGx43A/Huiapk8PtFzDkLv39CG1KK/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/d6Zt8I/btrR3CGx43A/Huiapk8PtFzDkLv39CG1KK/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/d6Zt8I/btrR3CGx43A/Huiapk8PtFzDkLv39CG1KK/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2Fd6Zt8I%2FbtrR3CGx43A%2FHuiapk8PtFzDkLv39CG1KK%2Fimg.png&quot; width=&quot;4032&quot; height=&quot;3024&quot; data-origin-width=&quot;4032&quot; data-origin-height=&quot;3024&quot; data-ke-mobilestyle=&quot;widthOrigin&quot; filename=&quot;img.png&quot; filemime=&quot;image/png&quot; onerror=&quot;this.onerror=null; this.src='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png'; this.srcset='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png';&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;figcaption&gt;2년 넘게 사용했다. 옆엔 세월의 흔적 ㅎㅎ..&lt;/figcaption&gt;&lt;/div&gt;&lt;p class=&quot;&quot; id=&quot;b82a95a2-44f4-4e56-9af8-32016c2e0ad3&quot;&gt;원래 로지텍의 MX Anywhere 2 모델을 사용했다. 아마존에서 벌크로 된 제품을 저렴한 가격에 구매했었다.&lt;/p&gt;&lt;p class=&quot;&quot; id=&quot;3d402500-59bd-4071-bc73-97f04df375bd&quot;&gt;당시 사용한 MX Anywhere 2에서 맘에 드는 점은 아래와 같았다.&lt;/p&gt;&lt;ul class=&quot;bulleted-list&quot; id=&quot;7ef05e3c-d1b7-42a3-a85a-a1dd4655a09b&quot;&gt;&lt;li style=&quot;list-style-type:disc&quot;&gt;&lt;strong&gt;손에 딱 알맞는 사이즈&lt;/strong&gt; : 손이 일반 남성 사이즈이긴 하지만, 마우스라는게 손 안에 딱 맞게 들어오니 컨트롤이 훨씬 쉬었다.&lt;/li&gt;&lt;/ul&gt;&lt;ul class=&quot;bulleted-list&quot; id=&quot;e88a4da1-5d24-4f35-9930-f071e245d6d8&quot;&gt;&lt;li style=&quot;list-style-type:disc&quot;&gt;&lt;strong&gt;다양한 버튼들 지원&lt;/strong&gt; : Anywhere 시리즈의 경우 휠이 좌우로 틸팅? 기울이기? 가 된다. 그래서 나는 휠 좌우 기울이기를 &lt;code&gt;앞/뒤&lt;/code&gt; 버튼으로 사용했고. &lt;code&gt;앞으로/뒤로&lt;/code&gt; 버튼을 원하는 대로 커스텀해서 사용했다.&lt;/li&gt;&lt;/ul&gt;&lt;ul class=&quot;bulleted-list&quot; id=&quot;cd222d44-3617-445c-8804-1162f7558e50&quot;&gt;&lt;li style=&quot;list-style-type:disc&quot;&gt;&lt;strong&gt;버튼 커스터마이징의 편리함 &lt;/strong&gt;: 로지텍 소프트웨어를 통해 각 버튼별로 커스터마이징이 가능하다. 근데 소프트웨어 중에 캡쳐 기능을 제공하는데, 이게 클립보드에 저장되도록 설정할 수 있어 굉장히 편리하다. 사실상 이 부분이 다시 로지텍을 선택한 이유라고 해도 무방하다.&lt;/li&gt;&lt;/ul&gt;&lt;ul class=&quot;bulleted-list&quot; id=&quot;a10a9b1c-4752-4d10-ad48-a24aeb37ca62&quot;&gt;&lt;li style=&quot;list-style-type:disc&quot;&gt;&lt;strong&gt;휴대하기 좋은&lt;/strong&gt; &lt;strong&gt;사이즈 &lt;/strong&gt;: 역시 사이즈가 작으면 이동이 간편하다. 맥북은 트랙패드가 많은 걸 커버해주지만, 포토샵 같은 작업은 마우스의 영역이긴 하다.. ㅎㅎ..&lt;/li&gt;&lt;/ul&gt;&lt;p class=&quot;&quot; id=&quot;eef4a5bd-848c-40ce-a3da-6a1883759660&quot;&gt;
&lt;/p&gt;&lt;p class=&quot;&quot; id=&quot;b02d4db0-6efa-4e15-8717-cd27ec4f6259&quot;&gt;열심히 잘 사용하고 있었는데, 저번주부터 마우스의 휠이 계속 씹히는 &lt;code&gt;휠 씹힘&lt;/code&gt; 현상이 생겼다. 이게 한 두번이면 괜찮은데, 진짜 휠을 해도 스크롤이 내려가질 않아 굉장히 답답했다..&lt;/p&gt;&lt;blockquote class=&quot;&quot; id=&quot;921837bf-acf8-4935-9dc7-c528341227ec&quot;&gt;&lt;strong&gt;휠 씹힘&lt;/strong&gt;
이 현상은 Mag Scroll 휠을 탑재한 로지텍 마우스의 고질병인 부분인데,
&lt;code&gt;아래로 내려가다가 위로 스크롤 방향을 빠르게 전환했을 때&lt;/code&gt; 주로 발생한다.&lt;/blockquote&gt;&lt;p class=&quot;&quot; id=&quot;835fde77-f95b-4a08-bf92-5c09a0ada1e5&quot;&gt;근데 난 기본 단방향 스크롤에서 휠이 씹히고 있어서 많이 불편했다.&lt;/p&gt;&lt;p class=&quot;&quot; id=&quot;403e26e9-527c-4348-bf0a-b16f10ee23fd&quot;&gt;
&lt;/p&gt;&lt;h2 class=&quot;&quot; id=&quot;581cfdd4-d0f7-4143-9560-c6055cff5d2c&quot;&gt;장비 소개&lt;/h2&gt;&lt;div class=&quot;image notion-img&quot; id=&quot;b3f94699-de0d-42ac-9ed6-66f0ba07c7de&quot;&gt;&lt;figure class=&quot;imageblock alignCenter&quot; width=&quot;4032&quot; height=&quot;3024&quot; data-origin-width=&quot;4032&quot; data-origin-height=&quot;3024&quot; data-ke-mobilestyle=&quot;widthOrigin&quot; filename=&quot;img.png&quot; filemime=&quot;image/png&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/xHJD1/btrR34vZRUF/LaVOtg5rR7SropyIFwWKIk/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/xHJD1/btrR34vZRUF/LaVOtg5rR7SropyIFwWKIk/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/xHJD1/btrR34vZRUF/LaVOtg5rR7SropyIFwWKIk/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FxHJD1%2FbtrR34vZRUF%2FLaVOtg5rR7SropyIFwWKIk%2Fimg.png&quot; width=&quot;4032&quot; height=&quot;3024&quot; data-origin-width=&quot;4032&quot; data-origin-height=&quot;3024&quot; data-ke-mobilestyle=&quot;widthOrigin&quot; filename=&quot;img.png&quot; filemime=&quot;image/png&quot; onerror=&quot;this.onerror=null; this.src='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png'; this.srcset='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png';&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;/div&gt;&lt;p class=&quot;&quot; id=&quot;07d8fd1a-46f5-4433-849a-39ce98b692e8&quot;&gt;제 친구 중에 마술사 친구가 있는데, 친구가 런던으로 워홀을 떠났다. 떠나기 전 친구에게 부탁받기도 했고 또 응원하는 맘으로 명함을 만들어줬다. 사실 대가 없이 한 일이라 딱 제작 비용까지만 받으려 했는데 친구가 너무 고맙다고 애플 제품을 선물해주겠다는게 아닌가?&lt;/p&gt;&lt;p class=&quot;&quot; id=&quot;6c6cb0e2-44af-4413-9ca7-89ae5f204bcc&quot;&gt;그래서 트랙패드를 냅다 얘기했다. 왜냐면, 클램쉘 모드로 맥북을 사용중이라 트랙패드가 필요했다. 하지만 그럼에도!! 포토샵 같은 작업을 위해선 마우스가 필요하다. (난 늘 소비를 하기 위한 이유는 차고 넘친다 생각한다  )&lt;/p&gt;&lt;h2 class=&quot;&quot; id=&quot;94f80838-4a0d-4d00-8767-71e6b9d7a425&quot;&gt;여담) 마술사 친구의 브이로그 보고가세요!&lt;/h2&gt;&lt;figure id=&quot;745123e7-344d-45a6-b257-3f289f21c8c6&quot;&gt;&lt;div class=&quot;source&quot;&gt;&lt;a href=&quot;https://www.youtube.com/watch?v=iWlgP6VHJdk&quot;&gt;https://www.youtube.com/watch?v=iWlgP6VHJdk&lt;/a&gt;&lt;/div&gt;&lt;/figure&gt;&lt;p class=&quot;&quot; id=&quot;b577ad9a-8b0d-4f20-acf0-2d3e271a90f9&quot;&gt;정말 멋진 친구입니다. ㅎㅎ&lt;/p&gt;&lt;p class=&quot;&quot; id=&quot;240a91dd-ee25-4c9f-8ae2-b5cdf1d0935d&quot;&gt;
&lt;/p&gt;&lt;h1 class=&quot;&quot; id=&quot;800837ef-e401-4ee2-a5fa-1ab97aa63b61&quot;&gt;구매했다!&lt;/h1&gt;&lt;div class=&quot;column-list&quot; id=&quot;c3a8dac0-4493-45cc-9fc2-77b79158bcae&quot;&gt;&lt;div class=&quot;column&quot; id=&quot;d68e7aea-c362-4c63-bb74-98ad4071dac8&quot; style=&quot;width:50%&quot;&gt;&lt;div class=&quot;image notion-img&quot; id=&quot;556a2625-8dd0-4541-9596-31ce566c6d40&quot;&gt;&lt;figure class=&quot;imageblock alignCenter&quot; width=&quot;4032&quot; height=&quot;3024&quot; data-origin-width=&quot;4032&quot; data-origin-height=&quot;3024&quot; data-ke-mobilestyle=&quot;widthOrigin&quot; filename=&quot;img.png&quot; filemime=&quot;image/png&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/bz1XNI/btrR2xzrxDU/dS5a15zhOYr0nWWnCimb2K/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/bz1XNI/btrR2xzrxDU/dS5a15zhOYr0nWWnCimb2K/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/bz1XNI/btrR2xzrxDU/dS5a15zhOYr0nWWnCimb2K/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2Fbz1XNI%2FbtrR2xzrxDU%2FdS5a15zhOYr0nWWnCimb2K%2Fimg.png&quot; width=&quot;4032&quot; height=&quot;3024&quot; data-origin-width=&quot;4032&quot; data-origin-height=&quot;3024&quot; data-ke-mobilestyle=&quot;widthOrigin&quot; filename=&quot;img.png&quot; filemime=&quot;image/png&quot; onerror=&quot;this.onerror=null; this.src='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png'; this.srcset='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png';&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;/div&gt;&lt;/div&gt;&lt;div class=&quot;column&quot; id=&quot;396e76d5-bd91-4b90-9e8d-7c5ce91e437d&quot; style=&quot;width:50%&quot;&gt;&lt;div class=&quot;image notion-img&quot; id=&quot;41fad2b9-f0ca-4979-a213-a7b9643a3f97&quot;&gt;&lt;figure class=&quot;imageblock alignCenter&quot; width=&quot;4032&quot; height=&quot;3024&quot; data-origin-width=&quot;4032&quot; data-origin-height=&quot;3024&quot; data-ke-mobilestyle=&quot;widthOrigin&quot; filename=&quot;img.png&quot; filemime=&quot;image/png&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/Foe6n/btrR2TowXlZ/V7Xk50yZ87VtUbKu9Rc1dK/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/Foe6n/btrR2TowXlZ/V7Xk50yZ87VtUbKu9Rc1dK/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/Foe6n/btrR2TowXlZ/V7Xk50yZ87VtUbKu9Rc1dK/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FFoe6n%2FbtrR2TowXlZ%2FV7Xk50yZ87VtUbKu9Rc1dK%2Fimg.png&quot; width=&quot;4032&quot; height=&quot;3024&quot; data-origin-width=&quot;4032&quot; data-origin-height=&quot;3024&quot; data-ke-mobilestyle=&quot;widthOrigin&quot; filename=&quot;img.png&quot; filemime=&quot;image/png&quot; onerror=&quot;this.onerror=null; this.src='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png'; this.srcset='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png';&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;/div&gt;&lt;/div&gt;&lt;/div&gt;&lt;p class=&quot;&quot; id=&quot;7333c7ac-fd9e-47f9-be07-a066b2f9a73d&quot;&gt;그렇게 MX MASTER 3S를 구매했다!&lt;/p&gt;&lt;p class=&quot;&quot; id=&quot;0a4077c4-39fa-4229-863d-002326a3f49d&quot;&gt;이전부터 MX MASTER 시리즈를 눈여겨 보고 있었는데, 쓰고있는 애니웨어가 굉장히 만족스러워서 괜찮았다. 그리고 가격도 10만원이 넘어가는게 좀 부담스럽기두 했구.&lt;/p&gt;&lt;p class=&quot;&quot; id=&quot;d40dfcdb-f9f2-449d-b587-ddaa0572ecb4&quot;&gt;이젠 더이상 쓸 수 없는 상황인지라, 곧바로 복지포인트 받은거에 돈 보태서 구매했다. 오랜만에 테크기기 개봉이라 설렜다 ㅋ&lt;/p&gt;&lt;p class=&quot;&quot; id=&quot;a9a6bb40-62cd-4c3c-ba0f-880127f29547&quot;&gt;
&lt;/p&gt;&lt;div class=&quot;image notion-img&quot; id=&quot;758068b6-cf72-4aa7-bb0f-3b45b44984d5&quot;&gt;&lt;figure class=&quot;imageblock alignCenter&quot; width=&quot;4032&quot; height=&quot;3024&quot; data-origin-width=&quot;4032&quot; data-origin-height=&quot;3024&quot; data-ke-mobilestyle=&quot;widthOrigin&quot; filename=&quot;img.png&quot; filemime=&quot;image/png&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/puqPh/btrR5zChn3K/h01x6wTeiapA3UsaNJGAA1/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/puqPh/btrR5zChn3K/h01x6wTeiapA3UsaNJGAA1/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/puqPh/btrR5zChn3K/h01x6wTeiapA3UsaNJGAA1/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FpuqPh%2FbtrR5zChn3K%2Fh01x6wTeiapA3UsaNJGAA1%2Fimg.png&quot; width=&quot;4032&quot; height=&quot;3024&quot; data-origin-width=&quot;4032&quot; data-origin-height=&quot;3024&quot; data-ke-mobilestyle=&quot;widthOrigin&quot; filename=&quot;img.png&quot; filemime=&quot;image/png&quot; onerror=&quot;this.onerror=null; this.src='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png'; this.srcset='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png';&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;/div&gt;&lt;p class=&quot;&quot; id=&quot;6a018155-8eb1-4f77-a6fa-debe07d2be27&quot;&gt;색상은 페일그레이 색으로 했다. 데스크 셋업이 전체적으로 화이트여서 선택했다. 만족스럽다. 곱다 고와 ㅎㅎ. 그런데 찾아보니 MX Master 3S 페일 그레이 색에서 색 변색, 착색 이슈(&lt;code&gt;discoloration&lt;/code&gt;)가 있다고 한다.. 음 걱정은 되는데 그렇다고 검정으로 살 건 아니었다. 이 부분은 사용한 뒤에 한달사용기 등으로 다시 공유해보겠다.&lt;/p&gt;&lt;h2 class=&quot;&quot; id=&quot;3e8c332e-3772-41c2-a3f5-e0ac207f88f8&quot;&gt;(추가) 실 사용 후기&lt;/h2&gt;&lt;p class=&quot;&quot; id=&quot;eccdf765-0b0d-4cda-8f04-871c0310f0af&quot;&gt;3달 동안 실사용 해보았다. 과연 변색이 되었을까? 그 후기를 확인해보자!&lt;/p&gt;&lt;figure id=&quot;ee26dc5b-5a5e-411a-8a5a-cc87a208e740&quot;&gt;&lt;a class=&quot;bookmark source&quot; href=&quot;https://23log.tistory.com/188&quot;&gt;&lt;div class=&quot;bookmark-info&quot;&gt;&lt;div class=&quot;bookmark-text&quot;&gt;&lt;div class=&quot;bookmark-title&quot;&gt;&lt;/div&gt;&lt;/div&gt;&lt;div class=&quot;bookmark-href&quot;&gt;https://23log.tistory.com/188&lt;/div&gt;&lt;/div&gt;&lt;/a&gt;&lt;/figure&gt;&lt;p class=&quot;&quot; id=&quot;1d95ba13-f160-42c3-9988-de24051affab&quot;&gt;
&lt;/p&gt;&lt;h2 class=&quot;&quot; id=&quot;79b62987-8be7-49b7-b7ba-82cd46d9d67c&quot;&gt;짧은 사용 후기&lt;/h2&gt;&lt;ul class=&quot;bulleted-list&quot; id=&quot;b85f8a85-9aca-4ca8-a948-fe72c5c1aab1&quot;&gt;&lt;li style=&quot;list-style-type:disc&quot;&gt;일단 &lt;strong&gt;무소음 클릭&lt;/strong&gt;이 굉장히 마음에 든다. 약간 서걱서걱 거리는 느낌이어서 좋다.&lt;/li&gt;&lt;/ul&gt;&lt;ul class=&quot;bulleted-list&quot; id=&quot;7adee784-40a6-4376-b8c6-4475ac44b16a&quot;&gt;&lt;li style=&quot;list-style-type:disc&quot;&gt;휠을 굴리는 압력에 따라 변화되는 &lt;strong&gt;Shift 방식&lt;/strong&gt;이 신기했다.
빠르게 굴리면 무한모드에 진입하는데 확실히 긴 문서 읽기 편리했다.&lt;/li&gt;&lt;/ul&gt;&lt;ul class=&quot;bulleted-list&quot; id=&quot;2e052080-6df2-4982-beab-e8d630b2df6b&quot;&gt;&lt;li style=&quot;list-style-type:disc&quot;&gt;휠 씹힘의 경우.. 글쎄.. 막 엄청 부드럽게 트랙패드로 스크롤 하는 것 처럼 자연스럽진 못했다. 실제로 휠씹힘도 몇회 정도 발생했다. 지금은 스크롤 속도 조정하고 해서 좀 덜해지긴 했는데, &lt;strong&gt;휠 씹힘은 여전&lt;/strong&gt;히 있는 것 같다. (혹은 내 맥북 문제일수도 있구 )&lt;/li&gt;&lt;/ul&gt;&lt;ul class=&quot;bulleted-list&quot; id=&quot;da902140-79d3-44a2-b67d-3d6876347f55&quot;&gt;&lt;li style=&quot;list-style-type:disc&quot;&gt;&lt;strong&gt;소프트웨어 커스터마이징은 정말 최고다!&lt;/strong&gt;
특히 크롬에선 가로 스크롤을 키보드 좌우로 설정해두었는데 유튜브나 영상 컨텐츠 볼 때 5초 이동이 간편해서 너무 좋다 ㅎㅎ&lt;/li&gt;&lt;/ul&gt;&lt;h1 class=&quot;&quot; id=&quot;44000a67-5aa3-42e1-9ff3-a963e4fe6824&quot;&gt;소프트웨어 다운로드 링크&lt;/h1&gt;&lt;figure id=&quot;9ae2f7b7-283c-43b1-a0d4-fce51d438004&quot;&gt;&lt;a class=&quot;bookmark source&quot; href=&quot;https://www.logitech.com/ko-kr/software/logi-options-plus.html&quot;&gt;&lt;div class=&quot;bookmark-info&quot;&gt;&lt;div class=&quot;bookmark-text&quot;&gt;&lt;div class=&quot;bookmark-title&quot;&gt;Logi Options+ | 로지텍 제품용 소프트웨어 앱&lt;/div&gt;&lt;div class=&quot;bookmark-description&quot;&gt;제품 관리 및 커스텀을 위한 차세대 앱. 특징: 사전 정의 설정, 커스텀 버튼 구성, 신규 인터페이스, 장치 상태 정보 등&lt;/div&gt;&lt;/div&gt;&lt;div class=&quot;bookmark-href&quot;&gt;&lt;img class=&quot;icon bookmark-icon&quot; src=&quot;https://www.logitech.com/etc.clientlibs/logitech/clientlibs/logitech-pagelibs/resources/images/favicon.ico&quot;/&gt;https://www.logitech.com/ko-kr/software/logi-options-plus.html&lt;/div&gt;&lt;/div&gt;&lt;img class=&quot;bookmark-image&quot; src=&quot;https://resource.logitech.com/w_1200,h_630,c_limit,q_auto,f_auto,dpr_1.0/d_transparent.gif/content/dam/logitech/en/software/logi-options-plus/logi-options-plus-og-image.png?v=1&quot;/&gt;&lt;/a&gt;&lt;/figure&gt;&lt;div class=&quot;image notion-img&quot; id=&quot;44e1018c-3ddd-4ec2-8381-be081c06b55c&quot;&gt;&lt;figure class=&quot;imageblock alignCenter&quot; width=&quot;1630&quot; height=&quot;972&quot; data-origin-width=&quot;1630&quot; data-origin-height=&quot;972&quot; data-ke-mobilestyle=&quot;widthOrigin&quot; filename=&quot;img.png&quot; filemime=&quot;image/png&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/cigqmp/btrR2E6dabu/ApKfQqaeSNAHHOzlbq47wK/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/cigqmp/btrR2E6dabu/ApKfQqaeSNAHHOzlbq47wK/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/cigqmp/btrR2E6dabu/ApKfQqaeSNAHHOzlbq47wK/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2Fcigqmp%2FbtrR2E6dabu%2FApKfQqaeSNAHHOzlbq47wK%2Fimg.png&quot; width=&quot;1630&quot; height=&quot;972&quot; data-origin-width=&quot;1630&quot; data-origin-height=&quot;972&quot; data-ke-mobilestyle=&quot;widthOrigin&quot; filename=&quot;img.png&quot; filemime=&quot;image/png&quot; onerror=&quot;this.onerror=null; this.src='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png'; this.srcset='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png';&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;figcaption&gt;옵션 프로그램이 훨씬 좋아진 것 같다 ..&lt;/figcaption&gt;&lt;/div&gt;&lt;p class=&quot;&quot; id=&quot;41790393-8975-4e10-82c6-8c638081f2a6&quot;&gt;
&lt;/p&gt;&lt;/div&gt;&lt;/article&gt;&lt;/body&gt;</description>
      <category>정보/TECH</category>
      <category>IT기기</category>
      <category>마우스</category>
      <author>3sammy</author>
      <guid isPermaLink="true">https://23log.tistory.com/180</guid>
      <comments>https://23log.tistory.com/180#entry180comment</comments>
      <pubDate>Fri, 19 Aug 2022 01:27:21 +0900</pubDate>
    </item>
    <item>
      <title>무접점 키보드 윤활 준비물과 방법, 간단 정리</title>
      <link>https://23log.tistory.com/179</link>
      <description>&lt;body&gt;&lt;article class=&quot;page sans Notion&quot; id=&quot;f8faa666-d0db-47be-a802-05e1d5039a20&quot;&gt;&lt;div class=&quot;page-body Tistory&quot;&gt;&lt;div class=&quot;image notion-img&quot; id=&quot;10e54bd3-0d02-4880-bbfd-5862303dd34c&quot;&gt;&lt;figure class=&quot;imageblock alignCenter&quot; width=&quot;2964&quot; height=&quot;3887&quot; data-origin-width=&quot;2964&quot; data-origin-height=&quot;3887&quot; data-ke-mobilestyle=&quot;widthOrigin&quot; filename=&quot;img.png&quot; filemime=&quot;image/png&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/cwoXD2/btrJD3yytci/Kc0MC1kk6O1C2tdd9pX7fK/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/cwoXD2/btrJD3yytci/Kc0MC1kk6O1C2tdd9pX7fK/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/cwoXD2/btrJD3yytci/Kc0MC1kk6O1C2tdd9pX7fK/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FcwoXD2%2FbtrJD3yytci%2FKc0MC1kk6O1C2tdd9pX7fK%2Fimg.png&quot; width=&quot;2964&quot; height=&quot;3887&quot; data-origin-width=&quot;2964&quot; data-origin-height=&quot;3887&quot; data-ke-mobilestyle=&quot;widthOrigin&quot; filename=&quot;img.png&quot; filemime=&quot;image/png&quot; onerror=&quot;this.onerror=null; this.src='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png'; this.srcset='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png';&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;/div&gt;&lt;figure class=&quot;callout&quot; id=&quot;98c93b20-eca7-419d-82d3-ddbf1ca5aea9&quot; style=&quot;white-space:pre-wrap;display:flex&quot;&gt;&lt;div style=&quot;font-size:1.5em&quot;&gt;&lt;span class=&quot;icon&quot;&gt; &lt;/span&gt;&lt;/div&gt;&lt;div style=&quot;width:100%&quot;&gt;저는 한무무(한성 무접점 키보드, GK888B)와 앱코 해커 K965P V2 무접점 키보드를 가지고 있습니다.
집에서 개발할 때 입문으로 한무무를 사용했는데, 무접점에 맛이 들려 회사에서도 앱코 해커를 사용중에 있습니다 :D&lt;/div&gt;&lt;/figure&gt;&lt;figure class=&quot;callout&quot; id=&quot;f21db431-4029-40af-94c0-eab690952507&quot; style=&quot;white-space:pre-wrap;display:flex&quot;&gt;&lt;div style=&quot;font-size:1.5em&quot;&gt;&lt;span class=&quot;icon&quot;&gt; &lt;/span&gt;&lt;/div&gt;&lt;div style=&quot;width:100%&quot;&gt;이전에 키보드 윤활을 하기 위해 정리한 내용들입니다. 하지만 앱코 키보드 상하판 분리가 어려워(크랙이 너무 심해서 실패..) 결국 간편 버젼으로 윤활을 진행했었습니다 &lt;/div&gt;&lt;/figure&gt;&lt;h1 class=&quot;&quot; id=&quot;2781bd10-6984-45ed-aeec-7fff913ed5d7&quot;&gt;준비물&lt;/h1&gt;&lt;ul class=&quot;bulleted-list&quot; id=&quot;d3aa810a-af4b-4611-96fe-e2ffc6ba0cc7&quot;&gt;&lt;li style=&quot;list-style-type:disc&quot;&gt;&lt;strong&gt;윤활제&lt;/strong&gt; : 키보드 타입에 따라 크라이톡스 105 or 슈퍼루브 선택&lt;p class=&quot;&quot; id=&quot;8e15402b-e5d3-4b8d-91e2-028d5f71d39a&quot;&gt;→ 앱코/한성 무접점은 &lt;code&gt;노뿌타입&lt;/code&gt; → 러버돔이 실리콘이라 &lt;code&gt;슈퍼루브&lt;/code&gt; 가능&lt;/p&gt;&lt;p class=&quot;&quot; id=&quot;de25bf7f-241a-481e-b1df-8afe3a3d9411&quot;&gt;→ 토프레는 러버돔이 고무라서 &lt;code&gt;크라이톡스&lt;/code&gt;로 해야함&lt;/p&gt;&lt;/li&gt;&lt;/ul&gt;&lt;ul class=&quot;bulleted-list&quot; id=&quot;adaa8577-643b-4ee6-9630-7a5f4c9d019e&quot;&gt;&lt;li style=&quot;list-style-type:disc&quot;&gt;&lt;strong&gt;그리스&lt;/strong&gt;&lt;/li&gt;&lt;/ul&gt;&lt;ul class=&quot;bulleted-list&quot; id=&quot;7520a5f5-b7da-4f75-a81b-faa813bc2aa9&quot;&gt;&lt;li style=&quot;list-style-type:disc&quot;&gt;&lt;strong&gt;납작붓&lt;/strong&gt;&lt;/li&gt;&lt;/ul&gt;&lt;ul class=&quot;bulleted-list&quot; id=&quot;be69b188-a456-48ee-ac23-d2e9f920aecd&quot;&gt;&lt;li style=&quot;list-style-type:disc&quot;&gt;&lt;strong&gt;납작솔&lt;/strong&gt;&lt;/li&gt;&lt;/ul&gt;&lt;ul class=&quot;bulleted-list&quot; id=&quot;0547ba36-267c-413f-aaa8-889b180b3cf4&quot;&gt;&lt;li style=&quot;list-style-type:disc&quot;&gt;&lt;strong&gt;핀셋 : 다이소에서 꺾인형태 구매 가능&lt;/strong&gt;&lt;/li&gt;&lt;/ul&gt;&lt;blockquote class=&quot;&quot; id=&quot;e1b4779e-9381-4357-8301-505343984e84&quot;&gt;잠깐! &lt;strong&gt;노뿌&lt;/strong&gt;란?&lt;p class=&quot;&quot; id=&quot;fcd493a9-64ab-4c63-bc9f-dbe0616fdfba&quot;&gt;기계식 키보드에서 체리축, 카일축 이란 말을 보신적 있으신가요?
이는 해당 축을 만든 제조사 명을 따라 이름이 붙여진 경우들입니다.&lt;/p&gt;&lt;p class=&quot;&quot; id=&quot;c1b0385e-6ff7-4121-94fb-2eb9e89a573e&quot;&gt;이처럼 무접점 키보드 또한 &lt;code&gt;노뿌(중국 noppo)&lt;/code&gt;와 &lt;code&gt;토프레(일본 Topre)&lt;/code&gt;라는 회사가 대표적으로 있는 무접점 제조사입니다.&lt;/p&gt;&lt;p class=&quot;&quot; id=&quot;4b2fc18a-8caa-424f-a6c3-f80616cef5df&quot;&gt;여담으로 무접점의 원조는 토프레입니다. 그리고 토프레가 생산한 대표적인 키보드의 상품명이 ‘리얼포스' 입니다. 노뿌는 중국에서 토프레의 키감을 연구하다가 만든 무접점으로, 제가 사용하는 두개의 키보드 모두 노뿌 라인입니다.&lt;/p&gt;&lt;p class=&quot;&quot; id=&quot;1971d6ab-5123-4924-98b1-f51c7a7218f7&quot;&gt;노뿌는 실리콘돔을 사용하여 만든 방식이고, 토프레는 러버돔이 고무와 다른 재질이 섞여있습니다. 이런 재질의 차이로 인해 서로 다른 키감을 가지며, 서로 다른 윤활제를 사용해야 합니다.&lt;/p&gt;&lt;/blockquote&gt;&lt;h2 class=&quot;&quot; id=&quot;ecfc162e-1a01-434c-bb2f-2432dccb4b1a&quot;&gt;제가 구매한 윤활제 (슈퍼루브)&lt;/h2&gt;&lt;div class=&quot;column-list&quot; id=&quot;d2446740-549f-4bc4-ba51-3e32000ce637&quot;&gt;&lt;div class=&quot;column&quot; id=&quot;1b4627a8-7394-4bf5-a735-ce1db69b8487&quot; style=&quot;width:50%&quot;&gt;&lt;h3 class=&quot;&quot; id=&quot;ae420d00-4a2a-4dae-86a4-64befe1054c2&quot;&gt;슈퍼루브 오일 펜타입&lt;/h3&gt;&lt;div class=&quot;image notion-img&quot; id=&quot;7317359c-d918-4c46-a9d2-395d080bc3a5&quot;&gt;&lt;figure class=&quot;imageblock alignCenter&quot; width=&quot;240&quot; height=&quot;320&quot; data-origin-width=&quot;240&quot; data-origin-height=&quot;320&quot; data-ke-mobilestyle=&quot;widthOrigin&quot; filename=&quot;img.png&quot; filemime=&quot;image/png&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/bJuAMB/btrJANjTtq4/gmVWm5dw9U5RQyizN0UFU1/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/bJuAMB/btrJANjTtq4/gmVWm5dw9U5RQyizN0UFU1/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/bJuAMB/btrJANjTtq4/gmVWm5dw9U5RQyizN0UFU1/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FbJuAMB%2FbtrJANjTtq4%2FgmVWm5dw9U5RQyizN0UFU1%2Fimg.png&quot; width=&quot;240&quot; height=&quot;320&quot; data-origin-width=&quot;240&quot; data-origin-height=&quot;320&quot; data-ke-mobilestyle=&quot;widthOrigin&quot; filename=&quot;img.png&quot; filemime=&quot;image/png&quot; onerror=&quot;this.onerror=null; this.src='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png'; this.srcset='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png';&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;figcaption&gt;슈퍼루브 오일 펜타입&lt;/figcaption&gt;&lt;/div&gt;&lt;ul class=&quot;bulleted-list&quot; id=&quot;9411f85e-2ca0-41e8-bcbf-97927f67827f&quot;&gt;&lt;li style=&quot;list-style-type:disc&quot;&gt;슬라이더/스프링 윤활&lt;/li&gt;&lt;/ul&gt;&lt;ul class=&quot;bulleted-list&quot; id=&quot;2d8501cc-6d54-41f6-bdb5-a1a2c4c3bc8e&quot;&gt;&lt;li style=&quot;list-style-type:disc&quot;&gt;4,300원&lt;/li&gt;&lt;/ul&gt;&lt;/div&gt;&lt;div class=&quot;column&quot; id=&quot;f6d30399-414b-48a0-b8ee-47eda1139642&quot; style=&quot;width:50%&quot;&gt;&lt;h3 class=&quot;&quot; id=&quot;a2c75174-2d79-49de-84e5-d301c512a74a&quot;&gt;슈퍼루브 그리스 튜브형&lt;/h3&gt;&lt;div class=&quot;image notion-img&quot; id=&quot;9421852f-70f8-46bb-a27d-f1483af89ef0&quot;&gt;&lt;figure class=&quot;imageblock alignCenter&quot; width=&quot;266&quot; height=&quot;322&quot; data-origin-width=&quot;266&quot; data-origin-height=&quot;322&quot; data-ke-mobilestyle=&quot;widthOrigin&quot; filename=&quot;img.png&quot; filemime=&quot;image/png&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/ApwRH/btrJBKNv4bP/vSPKcI6xFK0OEhVPG8VLkK/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/ApwRH/btrJBKNv4bP/vSPKcI6xFK0OEhVPG8VLkK/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/ApwRH/btrJBKNv4bP/vSPKcI6xFK0OEhVPG8VLkK/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FApwRH%2FbtrJBKNv4bP%2FvSPKcI6xFK0OEhVPG8VLkK%2Fimg.png&quot; width=&quot;266&quot; height=&quot;322&quot; data-origin-width=&quot;266&quot; data-origin-height=&quot;322&quot; data-ke-mobilestyle=&quot;widthOrigin&quot; filename=&quot;img.png&quot; filemime=&quot;image/png&quot; onerror=&quot;this.onerror=null; this.src='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png'; this.srcset='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png';&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;figcaption&gt;슈퍼루브 그리스 튜브형&lt;/figcaption&gt;&lt;/div&gt;&lt;ul class=&quot;bulleted-list&quot; id=&quot;e21e4dec-8e90-45aa-942f-a9b72a7bd361&quot;&gt;&lt;li style=&quot;list-style-type:disc&quot;&gt;스테빌라이저 윤활&lt;/li&gt;&lt;/ul&gt;&lt;ul class=&quot;bulleted-list&quot; id=&quot;028129b4-4954-415b-8ce1-7c5de60a92b6&quot;&gt;&lt;li style=&quot;list-style-type:disc&quot;&gt;8,800원&lt;ul class=&quot;bulleted-list&quot; id=&quot;d6b7f3fd-9e31-4ff2-abea-eb7573f3ac0d&quot;&gt;&lt;li style=&quot;list-style-type:circle&quot;&gt;85g으로 구매했는데, 12g짜리로 구매해도 충분하다..&lt;/li&gt;&lt;/ul&gt;&lt;/li&gt;&lt;/ul&gt;&lt;/div&gt;&lt;/div&gt;&lt;h1 class=&quot;&quot; id=&quot;fcc3fb1b-9067-4ada-bfa9-f4f8c667dd29&quot;&gt;윤활 방법&lt;/h1&gt;&lt;ol class=&quot;numbered-list&quot; id=&quot;0ca01098-efb0-49ce-baf1-ce1b7355f137&quot; start=&quot;1&quot; type=&quot;1&quot;&gt;&lt;li&gt;키캡을 분리한다&lt;/li&gt;&lt;/ol&gt;&lt;ol class=&quot;numbered-list&quot; id=&quot;68044fef-5403-4e61-bdaf-010f07a319af&quot; start=&quot;2&quot; type=&quot;1&quot;&gt;&lt;li&gt;하우징을 분리한다&lt;ul class=&quot;bulleted-list&quot; id=&quot;f577c2bd-fee4-4b00-be3a-52a9183f11e2&quot;&gt;&lt;li style=&quot;list-style-type:disc&quot;&gt;살짝 벌려주고 교통카드 같은걸로 눌러가며 벌려주기..&lt;/li&gt;&lt;/ul&gt;&lt;/li&gt;&lt;/ol&gt;&lt;ol class=&quot;numbered-list&quot; id=&quot;50e19356-b736-4d6d-980b-702eabe5b798&quot; start=&quot;3&quot; type=&quot;1&quot;&gt;&lt;li&gt;연결 선을 분리한다&lt;/li&gt;&lt;/ol&gt;&lt;ol class=&quot;numbered-list&quot; id=&quot;bb9589e2-57f5-4b36-b013-c1ba4995c2f1&quot; start=&quot;4&quot; type=&quot;1&quot;&gt;&lt;li&gt;기판의 나사를 제거한다&lt;/li&gt;&lt;/ol&gt;&lt;ol class=&quot;numbered-list&quot; id=&quot;c2e4eef7-0a58-486b-a57b-288486167d6c&quot; start=&quot;5&quot; type=&quot;1&quot;&gt;&lt;li&gt;스프링을 뺀다&lt;/li&gt;&lt;/ol&gt;&lt;ol class=&quot;numbered-list&quot; id=&quot;17bd966d-ccb5-482a-9279-a809414d4801&quot; start=&quot;6&quot; type=&quot;1&quot;&gt;&lt;li&gt;러버돔을 제거한다&lt;/li&gt;&lt;/ol&gt;&lt;ol class=&quot;numbered-list&quot; id=&quot;8cec28bd-51ee-43a7-a426-8c0229e039d7&quot; start=&quot;7&quot; type=&quot;1&quot;&gt;&lt;li&gt;스위치를 뽑는다&lt;/li&gt;&lt;/ol&gt;&lt;ol class=&quot;numbered-list&quot; id=&quot;dd9c6a0d-dfa5-469d-9ae3-2701170f40d7&quot; start=&quot;8&quot; type=&quot;1&quot;&gt;&lt;li&gt;윤활 작업!&lt;/li&gt;&lt;/ol&gt;&lt;ol class=&quot;numbered-list&quot; id=&quot;79f7c323-d2c3-4648-b321-92e3e23eae5e&quot; start=&quot;9&quot; type=&quot;1&quot;&gt;&lt;li&gt;역순 조립!&lt;/li&gt;&lt;/ol&gt;&lt;h1 class=&quot;&quot; id=&quot;59d07819-2942-46e2-8b95-f1df59f68460&quot;&gt;윤활은 어디?&lt;/h1&gt;&lt;h2 class=&quot;&quot; id=&quot;372155a4-d07c-442f-a807-cc7902822a1c&quot;&gt;정석 방법&lt;/h2&gt;&lt;h3 class=&quot;&quot; id=&quot;acbe719a-332d-4c36-a755-ecf8df04a4b3&quot;&gt;스프링 윤활&lt;/h3&gt;&lt;ul class=&quot;bulleted-list&quot; id=&quot;638f0da7-ad46-4b1b-9cb6-1174433a0a11&quot;&gt;&lt;li style=&quot;list-style-type:disc&quot;&gt;스프링에 솔로 &lt;code&gt;크라이톡스 105&lt;/code&gt; 혹은 &lt;code&gt;슈퍼루브 오일&lt;/code&gt;을 바른다.&lt;/li&gt;&lt;/ul&gt;&lt;ul class=&quot;bulleted-list&quot; id=&quot;3ab75d59-e98e-4b2e-9877-abae1939e1cd&quot;&gt;&lt;li style=&quot;list-style-type:disc&quot;&gt;귀찮으면 그냥 지퍼백에 크라이톡스 5~6방울 넣고 흔들고 넣는다.&lt;/li&gt;&lt;/ul&gt;&lt;ul class=&quot;bulleted-list&quot; id=&quot;6e1fea0a-73db-49bb-b1d1-90371c443c6b&quot;&gt;&lt;li style=&quot;list-style-type:disc&quot;&gt;스프링 윤활보다 슬라이더 윤활의 만족도가 높음.. 귀찮으면 스킵 가능&lt;/li&gt;&lt;/ul&gt;&lt;h3 class=&quot;&quot; id=&quot;7cb2001f-d726-421e-b232-d707b430dced&quot;&gt;슬라이더 윤활&lt;/h3&gt;&lt;ul class=&quot;bulleted-list&quot; id=&quot;e81332ce-4a9b-421b-a8e5-6dced0ace1f5&quot;&gt;&lt;li style=&quot;list-style-type:disc&quot;&gt;뽑은 슬라이더들의 원형 기둥에 붓으로 윤활제 펴바르기&lt;/li&gt;&lt;/ul&gt;&lt;ul class=&quot;bulleted-list&quot; id=&quot;6ae30deb-07e7-4701-a693-63d6f21db8fd&quot;&gt;&lt;li style=&quot;list-style-type:disc&quot;&gt;귀찮으면 그냥 지퍼백 넣고 흔들기&lt;/li&gt;&lt;/ul&gt;&lt;h3 class=&quot;&quot; id=&quot;374305a5-ffd1-48c4-857f-ce1aa69cb591&quot;&gt;오링 작업&lt;/h3&gt;&lt;ul class=&quot;bulleted-list&quot; id=&quot;3ab6a893-df9f-4c96-b698-0b586e937d6a&quot;&gt;&lt;li style=&quot;list-style-type:disc&quot;&gt;오링은 슬라이더가 움직이며 하우징을 치는 소리를 미세하게 막는 역할&lt;/li&gt;&lt;/ul&gt;&lt;ul class=&quot;bulleted-list&quot; id=&quot;8d49e163-7f4e-4a18-a2bc-0f6b05d94d5a&quot;&gt;&lt;li style=&quot;list-style-type:disc&quot;&gt;빨간색 오링의 경우 파란거보다 두꺼워서, 잡소리를 더 줄여줄 수 있음&lt;/li&gt;&lt;/ul&gt;&lt;h2 class=&quot;&quot; id=&quot;2567a993-c889-4493-8772-f4762e52d24d&quot;&gt;간편 방법&lt;/h2&gt;&lt;h3 class=&quot;&quot; id=&quot;d25e6214-1ac3-4298-8d02-66f0893de186&quot;&gt;슬라이더 윤활&lt;/h3&gt;&lt;ol class=&quot;numbered-list&quot; id=&quot;caaac0d5-1ad0-415f-a1ae-9329823b4cee&quot; start=&quot;1&quot; type=&quot;1&quot;&gt;&lt;li&gt;키캡을 제거한 상판에서 납작붓에 오일을 코팅한다&lt;/li&gt;&lt;/ol&gt;&lt;ol class=&quot;numbered-list&quot; id=&quot;182df6f6-1392-4904-b5b8-5e301607ea91&quot; start=&quot;2&quot; type=&quot;1&quot;&gt;&lt;li&gt;슬라이더 옆 작은 틈새에 붓을 넣고 얇게 펴바른다.&lt;/li&gt;&lt;/ol&gt;&lt;h3 class=&quot;&quot; id=&quot;19137f8d-a19f-40e4-822c-0b386cadfe30&quot;&gt;스테빌라이저 윤활&lt;/h3&gt;&lt;ul class=&quot;bulleted-list&quot; id=&quot;5fc6088c-1db0-4d80-a796-695b022b4dd5&quot;&gt;&lt;li style=&quot;list-style-type:disc&quot;&gt;철사의 한쪽 끝에다가 구리스 등을 바르고 플라스틱 부품에 잘 묻힌다.&lt;/li&gt;&lt;/ul&gt;&lt;h1 class=&quot;&quot; id=&quot;d7821ffe-42ce-4ca2-83a8-45f864654a96&quot;&gt;참고&lt;/h1&gt;&lt;figure id=&quot;eadc1d37-0da9-403b-a2af-0f1c28be8ca4&quot;&gt;&lt;a class=&quot;bookmark source&quot; href=&quot;https://blog.naver.com/12tuna/222268003658&quot;&gt;&lt;div class=&quot;bookmark-info&quot;&gt;&lt;div class=&quot;bookmark-text&quot;&gt;&lt;div class=&quot;bookmark-title&quot;&gt;CAR Home / public : 네이버 블로그&lt;/div&gt;&lt;/div&gt;&lt;div class=&quot;bookmark-href&quot;&gt;&lt;img class=&quot;icon bookmark-icon&quot; src=&quot;https://blog.naver.com/favicon.ico?3&quot;/&gt;https://blog.naver.com/12tuna/222268003658&lt;/div&gt;&lt;/div&gt;&lt;/a&gt;&lt;/figure&gt;&lt;figure id=&quot;3074e7c9-acd1-4d48-8df0-d5bbad08f2cb&quot;&gt;&lt;a class=&quot;bookmark source&quot; href=&quot;https://m.blog.naver.com/PostView.naver?isHttpsRedirect=true&amp;amp;blogId=diswh&amp;amp;logNo=221175656754&quot;&gt;&lt;div class=&quot;bookmark-info&quot;&gt;&lt;div class=&quot;bookmark-text&quot;&gt;&lt;div class=&quot;bookmark-title&quot;&gt;ABKO K965P V2 무접점 키보드 + 풀윤활&lt;/div&gt;&lt;div class=&quot;bookmark-description&quot;&gt;이번 리뷰는 앱코사의 무접점 키보드 K965P V2 순정 및 윤활 리뷰입니다.그레이-베이지 배색의 실버하우...&lt;/div&gt;&lt;/div&gt;&lt;div class=&quot;bookmark-href&quot;&gt;&lt;img class=&quot;icon bookmark-icon&quot; src=&quot;https://m.blog.naver.com/favicon_192x192.png?1&quot;/&gt;https://m.blog.naver.com/PostView.naver?isHttpsRedirect=true&amp;amp;blogId=diswh&amp;amp;logNo=221175656754&lt;/div&gt;&lt;/div&gt;&lt;img class=&quot;bookmark-image&quot; src=&quot;https://blogthumb.pstatic.net/MjAxODAxMDFfMzQg/MDAxNTE0ODA4MzYxNDgx.t4noesoai2AjIb2Zp4S0hxMSGBRzpCCriQzEzUXolGAg.S0AyVupHfnZ96vhBIsURTOPsaecioRB4_uSJgFadQ28g.JPEG.diswh/IMG_20170413_185758.jpg?type=w2&quot;/&gt;&lt;/a&gt;&lt;/figure&gt;&lt;p class=&quot;&quot; id=&quot;3971a602-4fa6-42a5-a48f-7dbdc4887d65&quot;&gt;
&lt;/p&gt;&lt;/div&gt;&lt;/article&gt;&lt;/body&gt;</description>
      <category>정보/TECH</category>
      <category>IT기기</category>
      <category>키보드</category>
      <author>3sammy</author>
      <guid isPermaLink="true">https://23log.tistory.com/179</guid>
      <comments>https://23log.tistory.com/179#entry179comment</comments>
      <pubDate>Sat, 13 Aug 2022 18:38:02 +0900</pubDate>
    </item>
    <item>
      <title>[JSP] JSP, 서블렛, EL, JSTL에 대한 개념 정리</title>
      <link>https://23log.tistory.com/178</link>
      <description>&lt;body&gt;&lt;article class=&quot;page sans Notion&quot; id=&quot;d860ff18-35d3-4325-89f0-c982e8b7b68d&quot;&gt;&lt;div class=&quot;page-body Tistory&quot;&gt;&lt;figure class=&quot;callout&quot; id=&quot;61083df9-1c12-419f-bc64-3a7ded9f9596&quot; style=&quot;white-space:pre-wrap;display:flex&quot;&gt;&lt;div style=&quot;font-size:1.5em&quot;&gt;&lt;span class=&quot;icon&quot;&gt; &lt;/span&gt;&lt;/div&gt;&lt;div style=&quot;width:100%&quot;&gt;Spring 환경에서 개발을 해야하는데 &lt;code&gt;‘아.. 이거랑 이거 차이가 뭐였지..?’&lt;/code&gt; 싶은
개념을 빠르게 적립하고 넘어가고 싶은 분들을 위해 작성하였습니다!&lt;/div&gt;&lt;/figure&gt;&lt;div class=&quot;image notion-img&quot; id=&quot;130510a7-ad07-4048-9690-419f695a0ad7&quot;&gt;&lt;figure class=&quot;imageblock alignCenter&quot; width=&quot;310&quot; height=&quot;310&quot; data-origin-width=&quot;310&quot; data-origin-height=&quot;310&quot; data-ke-mobilestyle=&quot;widthOrigin&quot; filename=&quot;img.png&quot; filemime=&quot;image/png&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/c5KErs/btrJEMwzC3l/hL9wVlF8bHIVDfOhHs1QR1/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/c5KErs/btrJEMwzC3l/hL9wVlF8bHIVDfOhHs1QR1/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/c5KErs/btrJEMwzC3l/hL9wVlF8bHIVDfOhHs1QR1/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2Fc5KErs%2FbtrJEMwzC3l%2FhL9wVlF8bHIVDfOhHs1QR1%2Fimg.png&quot; width=&quot;310&quot; height=&quot;310&quot; data-origin-width=&quot;310&quot; data-origin-height=&quot;310&quot; data-ke-mobilestyle=&quot;widthOrigin&quot; filename=&quot;img.png&quot; filemime=&quot;image/png&quot; onerror=&quot;this.onerror=null; this.src='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png'; this.srcset='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png';&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;/div&gt;&lt;h1 class=&quot;&quot; id=&quot;6e57b996-7680-4b32-8ed9-f9bdf95a8be3&quot;&gt;인트로&lt;/h1&gt;&lt;p class=&quot;&quot; id=&quot;f7e8238c-e76e-41a2-899c-fe5ecb11126b&quot;&gt;이전 싸피 교육 과정을 통해 Spring MVC에 대한 내용이나, 스프링 부트 등을 배웠지만, 그 이후 프로젝트에서는 프론트엔드 쪽으로 더욱 깊게 들어갔습니다.&lt;/p&gt;&lt;p class=&quot;&quot; id=&quot;dd351b12-bf29-4198-ad87-f7bafe1ab72f&quot;&gt;하지만 현재 저는&lt;strong&gt; Spring Framework &lt;/strong&gt;환경에서 업무를 하고 있습니다. 풀스택..이라 하면 부끄럽지만, 아무튼 프론트단 부터 백엔드, SQL까지 건드리고 있습니다.&lt;/p&gt;&lt;p class=&quot;&quot; id=&quot;6481d80c-426f-4def-b676-80e48d0479b3&quot;&gt;업무에 빠르게 적응하고 제 역할을 하기 위해선 배웠던 내용이나 업무에 활용하는 개념들을 리마인드 및 재정립 할 필요가 있다고 생각했고, 간단하게나마 내용들을 정리했었습니다.&lt;/p&gt;&lt;p class=&quot;&quot; id=&quot;165ad5de-8aa8-4b80-ac9d-6b02c3e65e68&quot;&gt;취업 초반에 정리한 내용들을 본 본문에서 공유하고자 합니다.&lt;/p&gt;&lt;h1 class=&quot;&quot; id=&quot;2f5b4a2e-5e58-45f6-a7f4-efe521921b17&quot;&gt;JSP와 Sevlet&lt;/h1&gt;&lt;ul class=&quot;bulleted-list&quot; id=&quot;22c927aa-1b47-4cbb-b04b-38fcf4b1d960&quot;&gt;&lt;li style=&quot;list-style-type:disc&quot;&gt;JSP와 서블렛은 뗄수 없이 함께 등장하는 용어입니다.&lt;/li&gt;&lt;/ul&gt;&lt;ul class=&quot;bulleted-list&quot; id=&quot;0b310b03-0e97-457d-aa64-091999cee34a&quot;&gt;&lt;li style=&quot;list-style-type:disc&quot;&gt;우선 &lt;strong&gt;서블렛(Servlet)&lt;/strong&gt;은 간단히 말하면 &lt;mark class=&quot;highlight-blue&quot;&gt;자바에서 실행하는 웹 코드&lt;/mark&gt;입니다.&lt;ul class=&quot;bulleted-list&quot; id=&quot;e4918d79-6d1a-46ba-8039-e672bc462eb6&quot;&gt;&lt;li style=&quot;list-style-type:circle&quot;&gt;&lt;code&gt;doGet&lt;/code&gt; 등의 메소드를 통해 진행되며,&lt;/li&gt;&lt;/ul&gt;&lt;ul class=&quot;bulleted-list&quot; id=&quot;0f0943c8-c6bd-443a-8f3b-23f6a925721a&quot;&gt;&lt;li style=&quot;list-style-type:circle&quot;&gt;&lt;code&gt;out.println(”&amp;lt;h1&amp;gt;새미의 블로그&amp;lt;/h1&amp;gt;”)&lt;/code&gt; 의 형태로 HTML 코드를 생성하고 있습니다.&lt;/li&gt;&lt;/ul&gt;&lt;/li&gt;&lt;/ul&gt;&lt;ul class=&quot;bulleted-list&quot; id=&quot;2d2f79bf-172d-44fc-910e-258c5a8b78e5&quot;&gt;&lt;li style=&quot;list-style-type:disc&quot;&gt;반면 &lt;strong&gt;JSP&lt;/strong&gt;는 &lt;mark class=&quot;highlight-blue&quot;&gt;HTML 코드로 작성하고, 사이사이에 자바 코드&lt;/mark&gt;를 넣는 형식입니다.&lt;ul class=&quot;bulleted-list&quot; id=&quot;b3ab126f-6b42-4f5e-8e56-62090fe0b8da&quot;&gt;&lt;li style=&quot;list-style-type:circle&quot;&gt;기본적인 작성이나 방식은 html 파일과 동일합니다.&lt;/li&gt;&lt;/ul&gt;&lt;ul class=&quot;bulleted-list&quot; id=&quot;61753926-e379-4601-b833-96c808c887cb&quot;&gt;&lt;li style=&quot;list-style-type:circle&quot;&gt;스클립틀릿(&lt;code&gt;&amp;lt;% ~ %&amp;gt;&lt;/code&gt;) 을 통해 html 파일 내부에 자바 코드를 삽입할 수 있습니다.&lt;pre class=&quot;code code-wrap HTML&quot; id=&quot;38ce724a-f34e-49bd-8e45-b6b1a2a8d476&quot;&gt;&lt;code&gt;&amp;lt;h1&amp;gt;새미의 블로그&amp;lt;/h1&amp;gt;

&amp;lt;%
	String name = &quot;새미&quot;;
%&amp;gt;&lt;/code&gt;&lt;/pre&gt;&lt;/li&gt;&lt;/ul&gt;&lt;/li&gt;&lt;/ul&gt;&lt;ul class=&quot;bulleted-list&quot; id=&quot;65a27cde-b3d8-4882-b517-4c6e608edf81&quot;&gt;&lt;li style=&quot;list-style-type:disc&quot;&gt;왜 두개로 나누어졌을까요?&lt;ul class=&quot;bulleted-list&quot; id=&quot;633d385d-f4d0-497f-a0d7-51ab799c2137&quot;&gt;&lt;li style=&quot;list-style-type:circle&quot;&gt;협업에 용이합니다.&lt;ul class=&quot;bulleted-list&quot; id=&quot;13ecbb5e-e557-4ea8-a56c-3b4ae020dd8e&quot;&gt;&lt;li style=&quot;list-style-type:square&quot;&gt;기존 서블릿의 경우 Java 코드에서 작성되므로, 디자이너나 퍼블리셔가 HTML 코드를 작성하기에 어려웠습니다.&lt;/li&gt;&lt;/ul&gt;&lt;ul class=&quot;bulleted-list&quot; id=&quot;a08b627a-890f-4b97-b28f-78162ddfdd1a&quot;&gt;&lt;li style=&quot;list-style-type:square&quot;&gt;JSP파일로 나눠질 경우, 퍼블리셔는 JSP 파일에서 코드를 작성하고 개발자는 Back단 로직에만 집중 할 수 있어 협업에 용이하게 됩니다.&lt;/li&gt;&lt;/ul&gt;&lt;/li&gt;&lt;/ul&gt;&lt;ul class=&quot;bulleted-list&quot; id=&quot;8c64b896-ec18-46b2-9cfe-20afff0a63f4&quot;&gt;&lt;li style=&quot;list-style-type:circle&quot;&gt;코드 가독성이 높아집니다.&lt;ul class=&quot;bulleted-list&quot; id=&quot;c5653194-4c02-41c9-89cb-9bc106929c0d&quot;&gt;&lt;li style=&quot;list-style-type:square&quot;&gt;Java 코드에서 HTML을 &lt;code&gt;out.println()&lt;/code&gt; 방식으로 작성하는 것과, HTML 코드 사이에 Java 코드를 넣는 것은 차이가 크겠죠?&lt;/li&gt;&lt;/ul&gt;&lt;ul class=&quot;bulleted-list&quot; id=&quot;f250695a-7dd9-427b-95d8-cdb6e6abac85&quot;&gt;&lt;li style=&quot;list-style-type:square&quot;&gt;JSP를 통해 코드 가독성이 높아집니다.&lt;/li&gt;&lt;/ul&gt;&lt;/li&gt;&lt;/ul&gt;&lt;/li&gt;&lt;/ul&gt;&lt;ul class=&quot;bulleted-list&quot; id=&quot;41023957-62fa-4432-a8ed-c0e1d1cc0454&quot;&gt;&lt;li style=&quot;list-style-type:disc&quot;&gt;이를 표로 정리하면 다음과 같습니다.&lt;table class=&quot;simple-table&quot; id=&quot;fbd13009-5784-48f1-8238-957b771a1afa&quot;&gt;&lt;tbody&gt;&lt;tr id=&quot;659ab25a-baaf-459e-a5fa-2b50fdbf5bba&quot;&gt;&lt;td class=&quot;&quot; id=&quot;FCb}&quot;&gt;&lt;/td&gt;&lt;td class=&quot;&quot; id=&quot;\xaD&quot; style=&quot;width:76px&quot;&gt;파일 형식&lt;/td&gt;&lt;td class=&quot;&quot; id=&quot;}clR&quot; style=&quot;width:159px&quot;&gt;설명&lt;/td&gt;&lt;td class=&quot;&quot; id=&quot;g:xC&quot;&gt;방법&lt;/td&gt;&lt;td class=&quot;&quot; id=&quot;gotF&quot;&gt;중시하는 것&lt;/td&gt;&lt;/tr&gt;&lt;tr id=&quot;1f774569-8933-4ef1-a289-1d411926c685&quot;&gt;&lt;td class=&quot;&quot; id=&quot;FCb}&quot;&gt;Servlet&lt;/td&gt;&lt;td class=&quot;&quot; id=&quot;\xaD&quot; style=&quot;width:76px&quot;&gt;&lt;code&gt;.java&lt;/code&gt;&lt;/td&gt;&lt;td class=&quot;&quot; id=&quot;}clR&quot; style=&quot;width:159px&quot;&gt;자바에서 작성하는 HTML 코드&lt;/td&gt;&lt;td class=&quot;&quot; id=&quot;g:xC&quot;&gt;&lt;code&gt;out.println()&lt;/code&gt;&lt;/td&gt;&lt;td class=&quot;&quot; id=&quot;gotF&quot;&gt;Login
(로직)&lt;/td&gt;&lt;/tr&gt;&lt;tr id=&quot;4be9b495-3455-440a-9a7e-b6d0093acb8a&quot;&gt;&lt;td class=&quot;&quot; id=&quot;FCb}&quot;&gt;JSP&lt;/td&gt;&lt;td class=&quot;&quot; id=&quot;\xaD&quot; style=&quot;width:76px&quot;&gt;&lt;code&gt;.jsp&lt;/code&gt;&lt;/td&gt;&lt;td class=&quot;&quot; id=&quot;}clR&quot; style=&quot;width:159px&quot;&gt;HTML에 넣는 자바 코드&lt;/td&gt;&lt;td class=&quot;&quot; id=&quot;g:xC&quot;&gt;&lt;code&gt;&amp;lt;% ~ %&amp;gt;&lt;/code&gt;&lt;/td&gt;&lt;td class=&quot;&quot; id=&quot;gotF&quot;&gt;Presentation
(디자인, 표현)&lt;/td&gt;&lt;/tr&gt;&lt;/tbody&gt;&lt;/table&gt;&lt;/li&gt;&lt;/ul&gt;&lt;h1 class=&quot;&quot; id=&quot;1932a70b-0eec-4b4d-8713-b60798938a3e&quot;&gt;그럼 어떻게 JSP가 실행될 수 있죠?&lt;/h1&gt;&lt;p class=&quot;&quot; id=&quot;a73026a6-7caf-4367-8de0-8a5bde8fdbca&quot;&gt;그 이유는 JSP Contatiner에 의해, JSP가 서블릿으로 변환되기 때문입니다.&lt;/p&gt;&lt;div class=&quot;image notion-img&quot; id=&quot;742f45fa-db66-408c-b567-8fa9b7313c75&quot;&gt;&lt;figure class=&quot;imageblock alignCenter&quot; width=&quot;1246&quot; height=&quot;699&quot; data-origin-width=&quot;1246&quot; data-origin-height=&quot;699&quot; data-ke-mobilestyle=&quot;widthOrigin&quot; filename=&quot;img.png&quot; filemime=&quot;image/png&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/b9xc79/btrJB4dUGH5/b7SrlWT2CfIvFQW6VpiKd0/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/b9xc79/btrJB4dUGH5/b7SrlWT2CfIvFQW6VpiKd0/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/b9xc79/btrJB4dUGH5/b7SrlWT2CfIvFQW6VpiKd0/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2Fb9xc79%2FbtrJB4dUGH5%2Fb7SrlWT2CfIvFQW6VpiKd0%2Fimg.png&quot; width=&quot;1246&quot; height=&quot;699&quot; data-origin-width=&quot;1246&quot; data-origin-height=&quot;699&quot; data-ke-mobilestyle=&quot;widthOrigin&quot; filename=&quot;img.png&quot; filemime=&quot;image/png&quot; onerror=&quot;this.onerror=null; this.src='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png'; this.srcset='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png';&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;figcaption&gt;그림이 다소   판이지만 ㅎㅎ&lt;/figcaption&gt;&lt;/div&gt;&lt;p class=&quot;&quot; id=&quot;502b9d29-42ea-4068-ad8c-a97e2dce1b9d&quot;&gt;위의 흐름을 보면 특정 유저가 &lt;code&gt;23log.tistory.com/index&lt;/code&gt; 으로 요청을 보냈다고 합시다. 그러면 JSP 컨테이너는 Controller가 지정한 파일(index.jsp) 파일을 찾아 읽게됩니다.&lt;/p&gt;&lt;p class=&quot;&quot; id=&quot;2ad2770a-86f0-4ac7-89d7-e733d60e6f24&quot;&gt;이때 &lt;code&gt;index.jsp&lt;/code&gt; 파일 내부에 다양한 &lt;code&gt;if 조건문&lt;/code&gt; 이나 &lt;code&gt;변수&lt;/code&gt; 들을 사용했다면? JSP 컨테이너는 이를 우선적으로 계산하거나 할당하여 다시 하나의 파일을 생성하게 되고, 이를 바탕으로 서블릿 파일을 생성합니다.&lt;/p&gt;&lt;p class=&quot;&quot; id=&quot;b69d1ccc-2a98-4e33-be70-f114e39573a6&quot;&gt;네! 바로 java코드로 작성된 java파일을요! 그럼 이제 해당 java 파일을 읽을 수 있으므로, 자바는 컴파일한 뒤 실행하게 됩니다.&lt;/p&gt;&lt;p class=&quot;&quot; id=&quot;5b40a60f-83c3-4a79-af2d-d6acbfebf086&quot;&gt;중요한 포인트는 &lt;code&gt;&lt;strong&gt;JSP로 작성된 파일은, JSP Container에 의해 서블릿(.java) 파일로 변환되어 실행된다.&lt;/strong&gt;&lt;/code&gt; 는 점입니다!&lt;/p&gt;&lt;h1 class=&quot;&quot; id=&quot;3228a1f1-8473-4b53-8604-3982dc78f31c&quot;&gt;JSP 작성을 도와주는 녀석들, EL, JSTL에 대하여&lt;/h1&gt;&lt;h2 class=&quot;&quot; id=&quot;84554385-36df-47aa-933c-2f009f006f31&quot;&gt;EL(Expression language)&lt;/h2&gt;&lt;ul class=&quot;bulleted-list&quot; id=&quot;04dbd670-e764-4d79-ad20-bb750f860ec3&quot;&gt;&lt;li style=&quot;list-style-type:disc&quot;&gt;Expression language 로 JSP 2.0부터 추가된 개념&lt;/li&gt;&lt;/ul&gt;&lt;ul class=&quot;bulleted-list&quot; id=&quot;c385c967-bdcf-4921-a8d7-6fb537fd9087&quot;&gt;&lt;li style=&quot;list-style-type:disc&quot;&gt;자바 빈의 속성 값을 보다 쉽게 꺼내 쓸 수 있는 도구&lt;/li&gt;&lt;/ul&gt;&lt;h3 class=&quot;&quot; id=&quot;7e900bfd-77ec-4255-9c9b-99faf0c1c12b&quot;&gt;종류&lt;/h3&gt;&lt;ul class=&quot;bulleted-list&quot; id=&quot;e2c54fbc-b257-4a7a-9bd0-38748127fee1&quot;&gt;&lt;li style=&quot;list-style-type:disc&quot;&gt;&lt;code&gt;&lt;strong&gt;${ }&lt;/strong&gt;&lt;/code&gt; : JSP가 실행될 때 즉시 반영된다. (Immediate evaluation)&lt;ul class=&quot;bulleted-list&quot; id=&quot;134f7aa2-1937-490e-b024-6406c871019f&quot;&gt;&lt;li style=&quot;list-style-type:circle&quot;&gt;객체 프로퍼티 값을 &lt;strong&gt;꺼낼때&lt;/strong&gt; 주로 사용&lt;/li&gt;&lt;/ul&gt;&lt;blockquote class=&quot;&quot; id=&quot;d4856bef-3bb2-4fdb-80fd-70a15487059b&quot;&gt;&lt;code&gt;#{ }&lt;/code&gt;&lt;ul class=&quot;bulleted-list&quot; id=&quot;d5eb57a4-de7c-48b1-8a32-a85156fe8dc4&quot;&gt;&lt;li style=&quot;list-style-type:disc&quot;&gt;시스템에서 필요하다고 판단될 때 그 값을 사용한다. (Deferred evaluation)
사용자 입력값을 객체의 프로퍼티에 &lt;strong&gt;담는&lt;/strong&gt; 용도로 주로 사용&lt;/li&gt;&lt;/ul&gt;&lt;/blockquote&gt;&lt;/li&gt;&lt;/ul&gt;&lt;ul class=&quot;bulleted-list&quot; id=&quot;b4696e7b-c9e2-4641-983f-3ffebb250193&quot;&gt;&lt;li style=&quot;list-style-type:disc&quot;&gt;&lt;code&gt;${변수명}&lt;/code&gt;으로 선언하여, 다양한 연산자(&lt;code&gt;산술, 비교, empty&lt;/code&gt;)를 사용 할 수 있는 도구&lt;ul class=&quot;bulleted-list&quot; id=&quot;c0201a0f-0909-4dda-a3b0-9b358f457b6d&quot;&gt;&lt;li style=&quot;list-style-type:circle&quot;&gt;&lt;code&gt;${fn:}&lt;/code&gt; 등을 통해 함수 사용 가능&lt;/li&gt;&lt;/ul&gt;&lt;ul class=&quot;bulleted-list&quot; id=&quot;19bedcc1-f1ec-450b-96ec-62ea4b02f00f&quot;&gt;&lt;li style=&quot;list-style-type:circle&quot;&gt;&lt;strong&gt;HTML&lt;/strong&gt;&lt;ul class=&quot;bulleted-list&quot; id=&quot;7d7a75d9-be71-44f4-95b4-cd4982f6b919&quot;&gt;&lt;li style=&quot;list-style-type:square&quot;&gt;&lt;code&gt;&amp;lt;span&amp;gt;${prod.brndNm}&amp;lt;/span&amp;gt;&lt;/code&gt; : 프론트단 노출 용도&lt;/li&gt;&lt;/ul&gt;&lt;/li&gt;&lt;/ul&gt;&lt;ul class=&quot;bulleted-list&quot; id=&quot;ac6c0f7f-7cb4-4197-a445-4bcfcf10cf6d&quot;&gt;&lt;li style=&quot;list-style-type:circle&quot;&gt;&lt;strong&gt;javascript&lt;/strong&gt;&lt;ul class=&quot;bulleted-list&quot; id=&quot;24d2d2d9-5e2a-4a1e-84a8-f78528b79ea5&quot;&gt;&lt;li style=&quot;list-style-type:square&quot;&gt;&lt;code&gt;&quot;${prod.brndNm}&quot;&lt;/code&gt;&lt;/li&gt;&lt;/ul&gt;&lt;ul class=&quot;bulleted-list&quot; id=&quot;19ad1f40-ea30-46b0-8252-ecdd4f1fd59f&quot;&gt;&lt;li style=&quot;list-style-type:square&quot;&gt;JS에선 &lt;code&gt;“”&lt;/code&gt; 안에 넣어서 사용한다.&lt;/li&gt;&lt;/ul&gt;&lt;/li&gt;&lt;/ul&gt;&lt;/li&gt;&lt;/ul&gt;&lt;h3 class=&quot;&quot; id=&quot;714e85b3-2589-4bb3-bcdd-3e97408e0e10&quot;&gt;사용의 이점?&lt;/h3&gt;&lt;ul class=&quot;bulleted-list&quot; id=&quot;ae9b5ed8-722c-4ffb-8b3e-69386c0360ad&quot;&gt;&lt;li style=&quot;list-style-type:disc&quot;&gt;원래의 경우 리퀘스트와 세션안에 있는 데이터를 받아오기 위해, &lt;code&gt;&amp;lt;% 스크립틀릿 %&amp;gt;&lt;/code&gt;안에서 받아오는 처리를 수행해야 한다.&lt;pre class=&quot;code code-wrap HTML&quot; id=&quot;eb5321a9-f446-4852-a47c-387d6e71d26b&quot;&gt;&lt;code&gt;// 최상단에서 값을 할당하고
&amp;lt;%
    Student loginMember = (Student) session.getAttribute(&quot;student&quot;);
    Student student = (Student) request.getAttribute(&quot;student&quot;);
%&amp;gt;

// 필요할 때 객체로서 get메소드로 호출
&amp;lt;input type='text' name='age' value='&amp;lt;%=student.getAge()%&amp;gt;' readonly&amp;gt;

// 스크립틀릿을 이용하여 작성함
&amp;lt;%
if(loginMember != null &amp;amp;&amp;amp; &quot;admin&quot;.equals(loginMember.getStudentNo())) {
%&amp;gt;
    &amp;lt;p&amp;gt;&amp;lt;%=student.getStudentNo()%&amp;gt;&amp;lt;/p&amp;gt;
&amp;lt;%
    }
%&amp;gt;&lt;/code&gt;&lt;/pre&gt;&lt;ul class=&quot;bulleted-list&quot; id=&quot;f0ec854a-d794-42cf-b3cd-e4fd1e83728b&quot;&gt;&lt;li style=&quot;list-style-type:circle&quot;&gt;즉, EL이 없으면 &lt;code&gt;&amp;lt;% 스크립틀릿 %&amp;gt;&lt;/code&gt;으로 값을 가져오고, 할당하고 하는 등의 과정이 필요함&lt;/li&gt;&lt;/ul&gt;&lt;/li&gt;&lt;/ul&gt;&lt;ul class=&quot;bulleted-list&quot; id=&quot;8590f262-1bac-4fa6-ae07-1f5d67546d61&quot;&gt;&lt;li style=&quot;list-style-type:disc&quot;&gt;EL이 도입되면?&lt;ul class=&quot;bulleted-list&quot; id=&quot;c0f4eec0-9a27-46f6-aa14-67a97dfe2d74&quot;&gt;&lt;li style=&quot;list-style-type:circle&quot;&gt;객체 할당과 같은 과정 없이, 바로 &lt;code&gt;${student.name}&lt;/code&gt; 만 작성하여 사용이 가능함&lt;/li&gt;&lt;/ul&gt;&lt;ul class=&quot;bulleted-list&quot; id=&quot;498f2e36-c5ca-4c58-9090-62cf18ec3a39&quot;&gt;&lt;li style=&quot;list-style-type:circle&quot;&gt;&lt;code&gt;&amp;lt;%%&amp;gt;&lt;/code&gt; 객체 할당 과정이나, &lt;code&gt;&amp;lt;%= 변수명 %&amp;gt;&lt;/code&gt;과 같은 과정을 하나로 압축 할 수 있다.&lt;/li&gt;&lt;/ul&gt;&lt;/li&gt;&lt;/ul&gt;&lt;h2 class=&quot;&quot; id=&quot;27216f8d-81af-4a27-8ffb-286b86e0b99e&quot;&gt;JSTL&lt;/h2&gt;&lt;ul class=&quot;bulleted-list&quot; id=&quot;0db21a1a-c7b2-4bd0-b808-5b0f0b5ce089&quot;&gt;&lt;li style=&quot;list-style-type:disc&quot;&gt;JSTL (Jsp Standard Tag Library)&lt;/li&gt;&lt;/ul&gt;&lt;ul class=&quot;bulleted-list&quot; id=&quot;744ead62-59b1-4a04-9128-52c351b47b30&quot;&gt;&lt;li style=&quot;list-style-type:disc&quot;&gt;JSTL = JSTL + EL의 조합을 의미한다.&lt;/li&gt;&lt;/ul&gt;&lt;ul class=&quot;bulleted-list&quot; id=&quot;71ed1803-c3da-4f68-8173-9b228a11f069&quot;&gt;&lt;li style=&quot;list-style-type:disc&quot;&gt;HTML내의 스크립틀릿을 편하게 변환하여 준다.&lt;p class=&quot;&quot; id=&quot;2ea7063b-57d8-4081-aa6b-a24096a5fafa&quot;&gt;&lt;code&gt;&amp;lt;%= value&amp;gt;&lt;/code&gt; → &lt;code&gt;${value}&lt;/code&gt;&lt;/p&gt;&lt;p class=&quot;&quot; id=&quot;de4176ba-ee7f-4bdf-85d2-fdc80c996933&quot;&gt;&lt;code&gt;&amp;lt;%= if&amp;gt;&lt;/code&gt; → &lt;code&gt;&amp;lt;c:if&amp;gt;&lt;/code&gt;&lt;/p&gt;&lt;p class=&quot;&quot; id=&quot;ec80c663-0a30-4cf1-9273-ad4f9f2a6017&quot;&gt;&lt;code&gt;&amp;lt;%= for&amp;gt;&lt;/code&gt; → &lt;code&gt;&amp;lt;c:forEach&amp;gt;&lt;/code&gt;&lt;/p&gt;&lt;/li&gt;&lt;/ul&gt;&lt;ul class=&quot;bulleted-list&quot; id=&quot;e7167e65-a8ad-4239-8db1-3c1706c371b9&quot;&gt;&lt;li style=&quot;list-style-type:disc&quot;&gt;JSTL은 JSP페이지 내에서 java코드를 사용하지 않고 로직을 내장하는 방법을 제공한다.&lt;/li&gt;&lt;/ul&gt;&lt;h3 class=&quot;&quot; id=&quot;4ac0ad23-8cc9-4c50-bd8d-a17742930624&quot;&gt;사용의 이점?&lt;/h3&gt;&lt;ul class=&quot;bulleted-list&quot; id=&quot;1cb5c1c7-c499-49b7-99d2-32ca8061a45a&quot;&gt;&lt;li style=&quot;list-style-type:disc&quot;&gt;스클립틀릿으로 분기 처리를 하게 되면?&lt;pre class=&quot;code code-wrap HTML&quot; id=&quot;e8594737-af05-4536-867a-8edbb29a05d8&quot;&gt;&lt;code&gt;&amp;lt;%
	if(count &amp;gt; 10){
%&amp;gt;
		&amp;lt;h1&amp;gt;횟수가 초과되었습니다.&amp;lt;/h1&amp;gt;
&amp;lt;%
	}
%&amp;gt;&lt;/code&gt;&lt;/pre&gt;&lt;/li&gt;&lt;/ul&gt;&lt;ul class=&quot;bulleted-list&quot; id=&quot;1d432166-160e-49cb-b8ae-631ed92db7ff&quot;&gt;&lt;li style=&quot;list-style-type:disc&quot;&gt;이를 JSTL로 표현하면?&lt;pre class=&quot;code code-wrap HTML&quot; id=&quot;90d100e2-440f-459d-834a-93c45d596c17&quot;&gt;&lt;code&gt;&amp;lt;c:if test=&quot;${count &amp;gt; 10}&quot;&amp;gt;
		&amp;lt;h1&amp;gt;횟수가 초과되었습니다.&amp;lt;/h1&amp;gt;
&amp;lt;/c:if&amp;gt;&lt;/code&gt;&lt;/pre&gt;&lt;/li&gt;&lt;/ul&gt;&lt;h3 class=&quot;&quot; id=&quot;d25ab914-4543-40c5-b32e-4bbd722c8c4e&quot;&gt;&lt;strong&gt;사용법&lt;/strong&gt;&lt;/h3&gt;&lt;ul class=&quot;bulleted-list&quot; id=&quot;d5bc9844-29a0-4422-838b-0b63f96f04ad&quot;&gt;&lt;li style=&quot;list-style-type:disc&quot;&gt;core를 header에 추가한다.&lt;pre class=&quot;code code-wrap HTML&quot; id=&quot;249a2bd6-6030-4168-9336-94c92831e3df&quot;&gt;&lt;code&gt;&amp;lt;% @taglib uri=&quot;http://java.sun.com/jstl/core&quot; prefix=&quot;c&quot; %&amp;gt;&lt;/code&gt;&lt;/pre&gt;&lt;/li&gt;&lt;/ul&gt;&lt;ul class=&quot;bulleted-list&quot; id=&quot;cfa3fad6-a6a6-4dd4-a273-31fa48c4a6f7&quot;&gt;&lt;li style=&quot;list-style-type:disc&quot;&gt;필요한 JSP 태그를 사용한다.&lt;pre class=&quot;code code-wrap HTML&quot; id=&quot;62736c05-69d5-4c53-b667-4b7a5e41068c&quot;&gt;&lt;code&gt;&amp;lt;c:if test=&quot;&quot;&amp;gt;&amp;lt;/c:if&amp;gt;
&amp;lt;c:forEach items=&quot;&quot;&amp;gt;&amp;lt;/c:forEach&amp;gt;&lt;/code&gt;&lt;/pre&gt;&lt;table class=&quot;simple-table&quot; id=&quot;c3560033-5bfb-41cc-a204-056af6d79dd2&quot;&gt;&lt;thead class=&quot;simple-table-header&quot;&gt;&lt;tr id=&quot;66634ce4-3cc3-43cb-8fa3-33883bd9ea28&quot;&gt;&lt;th class=&quot;simple-table-header-color simple-table-header&quot; id=&quot;dFMR&quot; style=&quot;width:135px&quot;&gt;태그명&lt;/th&gt;&lt;th class=&quot;simple-table-header-color simple-table-header&quot; id=&quot;UIiq&quot; style=&quot;width:380px&quot;&gt;설명&lt;/th&gt;&lt;/tr&gt;&lt;/thead&gt;&lt;tbody&gt;&lt;tr id=&quot;be6a7127-ba8a-4439-8de8-cffa040d07ba&quot;&gt;&lt;td class=&quot;&quot; id=&quot;dFMR&quot; style=&quot;width:135px&quot;&gt;&lt;code&gt;&amp;lt;c:set&amp;gt;&lt;/code&gt;&lt;/td&gt;&lt;td class=&quot;&quot; id=&quot;UIiq&quot; style=&quot;width:380px&quot;&gt;변수명에 값을 할당&lt;/td&gt;&lt;/tr&gt;&lt;tr id=&quot;ef3abf6b-e04e-4d0b-a5fa-518adfeae09d&quot;&gt;&lt;td class=&quot;&quot; id=&quot;dFMR&quot; style=&quot;width:135px&quot;&gt;&lt;code&gt;&amp;lt;c:out&amp;gt;&lt;/code&gt;&lt;/td&gt;&lt;td class=&quot;&quot; id=&quot;UIiq&quot; style=&quot;width:380px&quot;&gt;값을 출력&lt;/td&gt;&lt;/tr&gt;&lt;tr id=&quot;8fcd3a98-eb72-4c8c-a0d2-6819c3de6839&quot;&gt;&lt;td class=&quot;&quot; id=&quot;dFMR&quot; style=&quot;width:135px&quot;&gt;&lt;code&gt;&amp;lt;c:if&amp;gt;&lt;/code&gt;&lt;/td&gt;&lt;td class=&quot;&quot; id=&quot;UIiq&quot; style=&quot;width:380px&quot;&gt;조건식에 해당하는 블럭과 사용될 scope설정&lt;/td&gt;&lt;/tr&gt;&lt;tr id=&quot;8c612cab-bda6-43f4-ad39-24727425c351&quot;&gt;&lt;td class=&quot;&quot; id=&quot;dFMR&quot; style=&quot;width:135px&quot;&gt;&lt;code&gt;&amp;lt;c:choose&amp;gt;&lt;/code&gt;&lt;/td&gt;&lt;td class=&quot;&quot; id=&quot;UIiq&quot; style=&quot;width:380px&quot;&gt;다른 언어의 switch와 비슷&lt;/td&gt;&lt;/tr&gt;&lt;tr id=&quot;1946c858-69fb-4b2a-a644-9e8253e377af&quot;&gt;&lt;td class=&quot;&quot; id=&quot;dFMR&quot; style=&quot;width:135px&quot;&gt;&lt;code&gt;&amp;lt;c:when&amp;gt;&lt;/code&gt;&lt;/td&gt;&lt;td class=&quot;&quot; id=&quot;UIiq&quot; style=&quot;width:380px&quot;&gt;switch문의 case에 해당&lt;/td&gt;&lt;/tr&gt;&lt;tr id=&quot;d7bc8a28-5fe9-4680-85d2-af2439386354&quot;&gt;&lt;td class=&quot;&quot; id=&quot;dFMR&quot; style=&quot;width:135px&quot;&gt;&lt;code&gt;&amp;lt;c:otherwise&amp;gt;&lt;/code&gt;&lt;/td&gt;&lt;td class=&quot;&quot; id=&quot;UIiq&quot; style=&quot;width:380px&quot;&gt;switch문의 default에 해당&lt;/td&gt;&lt;/tr&gt;&lt;tr id=&quot;d8d46e7d-3ea7-4ebe-85ba-8d39aaffc910&quot;&gt;&lt;td class=&quot;&quot; id=&quot;dFMR&quot; style=&quot;width:135px&quot;&gt;&lt;code&gt;&amp;lt;c:forEach&amp;gt;&lt;/code&gt;&lt;/td&gt;&lt;td class=&quot;&quot; id=&quot;UIiq&quot; style=&quot;width:380px&quot;&gt;다른언어의 loop문 items 속성에 배열을 할당할 수 있음&lt;/td&gt;&lt;/tr&gt;&lt;/tbody&gt;&lt;/table&gt;&lt;/li&gt;&lt;/ul&gt;&lt;p class=&quot;&quot; id=&quot;4e5779fb-d74f-419a-ae6d-e545cbf20b1b&quot;&gt;&lt;a href=&quot;https://offbyone.tistory.com/366&quot;&gt;참조&lt;/a&gt;&lt;/p&gt;&lt;h1 class=&quot;&quot; id=&quot;91a492c0-999e-4f1b-a0ad-06f6b24cb783&quot;&gt;최종 정리&lt;/h1&gt;&lt;table class=&quot;simple-table&quot; id=&quot;18146197-781f-42b3-a56e-5f6310cafea7&quot;&gt;&lt;tbody&gt;&lt;tr id=&quot;ba4899fb-cd54-4e3c-a27c-ae168c59d3dd&quot;&gt;&lt;td class=&quot;&quot; id=&quot;z@EJ&quot;&gt;&lt;/td&gt;&lt;td class=&quot;&quot; id=&quot;ygRU&quot; style=&quot;width:529px&quot;&gt;설명&lt;/td&gt;&lt;/tr&gt;&lt;tr id=&quot;e56139c2-122c-4d5d-b780-05df4ab4153c&quot;&gt;&lt;td class=&quot;&quot; id=&quot;z@EJ&quot;&gt;JSP&lt;/td&gt;&lt;td class=&quot;&quot; id=&quot;ygRU&quot; style=&quot;width:529px&quot;&gt;HTML안에 &lt;code&gt;스크립틀릿&lt;/code&gt;으로 Java 코드를 넣은 파일&lt;/td&gt;&lt;/tr&gt;&lt;tr id=&quot;ff7619b6-d8e0-438b-94e5-8f87c549c5a3&quot;&gt;&lt;td class=&quot;&quot; id=&quot;z@EJ&quot;&gt;EL&lt;/td&gt;&lt;td class=&quot;&quot; id=&quot;ygRU&quot; style=&quot;width:529px&quot;&gt;JSP에서 객체의 값을 쉽게 뽑아주는 기능&lt;/td&gt;&lt;/tr&gt;&lt;tr id=&quot;212cd13a-fcf9-4679-af3c-ac20e626d3ae&quot;&gt;&lt;td class=&quot;&quot; id=&quot;z@EJ&quot;&gt;JSTL&lt;/td&gt;&lt;td class=&quot;&quot; id=&quot;ygRU&quot; style=&quot;width:529px&quot;&gt;JSP에서 자주 사용하는 스크립틀릿을 하나의 태그로 묶은 라이브러리&lt;/td&gt;&lt;/tr&gt;&lt;tr id=&quot;db008c42-8386-4208-9433-baa798b3c33a&quot;&gt;&lt;td class=&quot;&quot; id=&quot;z@EJ&quot;&gt;Servlet&lt;/td&gt;&lt;td class=&quot;&quot; id=&quot;ygRU&quot; style=&quot;width:529px&quot;&gt;자바가 실행할 수 있는 웹 코드(.java)&lt;/td&gt;&lt;/tr&gt;&lt;/tbody&gt;&lt;/table&gt;&lt;figure class=&quot;block-color-gray_background callout&quot; id=&quot;3c0699ff-34d4-4e65-8975-276e3665f3ea&quot; style=&quot;white-space:pre-wrap;display:flex&quot;&gt;&lt;div style=&quot;font-size:1.5em&quot;&gt;&lt;span class=&quot;icon&quot;&gt; &lt;/span&gt;&lt;/div&gt;&lt;div style=&quot;width:100%&quot;&gt;과거에 간략하게나마 정리했던 내용이라, 부족한 부분이나 틀린 정보가 있을 수 있습니다.
댓글로 말씀해주시면 수정하도록 하겠습니다! :D&lt;/div&gt;&lt;/figure&gt;&lt;/div&gt;&lt;/article&gt;&lt;/body&gt;</description>
      <category>develop/java&amp;amp;spring</category>
      <category>Spring</category>
      <author>3sammy</author>
      <guid isPermaLink="true">https://23log.tistory.com/178</guid>
      <comments>https://23log.tistory.com/178#entry178comment</comments>
      <pubDate>Sat, 13 Aug 2022 18:25:51 +0900</pubDate>
    </item>
    <item>
      <title>자바스크립트, 클릭 이벤트의 발생 대상(target) 가져오기</title>
      <link>https://23log.tistory.com/177</link>
      <description>&lt;body&gt;&lt;article class=&quot;page sans Notion&quot; id=&quot;da8dec62-9b44-4870-bbfb-3db5ccb61bc6&quot;&gt;&lt;div class=&quot;page-body Tistory&quot;&gt;&lt;div class=&quot;image notion-img&quot; id=&quot;284819fe-5ea9-4106-8550-089764046dfe&quot;&gt;&lt;figure class=&quot;imageblock alignCenter&quot; width=&quot;690&quot; height=&quot;343&quot; data-origin-width=&quot;690&quot; data-origin-height=&quot;343&quot; data-ke-mobilestyle=&quot;widthOrigin&quot; filename=&quot;img.png&quot; filemime=&quot;image/png&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/MM2Kl/btrJA4Me5dk/cobDWCewxJUVLlnba9pnI0/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/MM2Kl/btrJA4Me5dk/cobDWCewxJUVLlnba9pnI0/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/MM2Kl/btrJA4Me5dk/cobDWCewxJUVLlnba9pnI0/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FMM2Kl%2FbtrJA4Me5dk%2FcobDWCewxJUVLlnba9pnI0%2Fimg.png&quot; width=&quot;690&quot; height=&quot;343&quot; data-origin-width=&quot;690&quot; data-origin-height=&quot;343&quot; data-ke-mobilestyle=&quot;widthOrigin&quot; filename=&quot;img.png&quot; filemime=&quot;image/png&quot; onerror=&quot;this.onerror=null; this.src='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png'; this.srcset='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png';&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;/div&gt;&lt;h2 class=&quot;&quot; id=&quot;2e89de57-b50d-4d48-a3f2-2f395bf4d3e1&quot;&gt;하고자 하는 것&lt;/h2&gt;&lt;p class=&quot;&quot; id=&quot;08674ac4-8446-4cc9-b2de-03ca083a7480&quot;&gt;자바스크립트에서 이벤트가 어디서 발생했는지 해당 DOM을 가져오고자 합니다.&lt;/p&gt;&lt;h2 class=&quot;&quot; id=&quot;e6f63931-89cb-4c65-acc5-f4bcfc466c0c&quot;&gt;방법&lt;/h2&gt;&lt;h3 class=&quot;&quot; id=&quot;6fed2950-2877-4e2c-8320-bf2fd39dde11&quot;&gt;이벤트 부여 방식&lt;/h3&gt;&lt;p class=&quot;&quot; id=&quot;c8de5f3a-ae86-4d9f-bca1-8e583ee97828&quot;&gt;자바스크립트에서 이벤트를 부여하는 방식은 크게 아래 두가지가 있습니다.
&lt;mark class=&quot;highlight-gray&quot;&gt;*바닐라 JS 기준&lt;/mark&gt;&lt;/p&gt;&lt;pre class=&quot;code code-wrap HTML&quot; id=&quot;221b0a31-4c2c-4269-b8df-f23e58b7ccb7&quot;&gt;&lt;code&gt;&amp;lt;a href=&quot;javascript:void(0)&quot; id=&quot;addCart&quot;&amp;gt;
     &amp;lt;span class=&quot;cart-text&quot;&amp;gt;장바구니&amp;lt;/span&amp;gt;
&amp;lt;/a&amp;gt;&lt;/code&gt;&lt;/pre&gt;&lt;p class=&quot;block-color-gray&quot; id=&quot;bd372799-8852-4949-83de-56c9aa6566df&quot;&gt;위 처럼 &lt;code&gt;a태그&lt;/code&gt;가 선언되어 있고, 여기에 클릭 이벤트를 걸려고 합니다.&lt;/p&gt;&lt;p class=&quot;&quot; id=&quot;6fee3271-69b2-4c44-b8df-7eb47edf0f64&quot;&gt;
&lt;/p&gt;&lt;ol class=&quot;numbered-list&quot; id=&quot;3b887e7d-7a07-4385-9816-6f1acb6495b7&quot; start=&quot;1&quot; type=&quot;1&quot;&gt;&lt;li&gt;&lt;strong&gt;마크업 안에 &lt;/strong&gt;&lt;strong&gt;&lt;code&gt;onclick&lt;/code&gt;&lt;/strong&gt;&lt;strong&gt;으로 이벤트 걸기&lt;/strong&gt;&lt;pre class=&quot;code code-wrap HTML&quot; id=&quot;f4cf0b7d-0a6f-4746-8608-ba04c72ac5ab&quot;&gt;&lt;code&gt;&amp;lt;a href=&quot;javascript:void(0)&quot; id=&quot;addCart&quot; onclick=&quot;addCart();&quot;&amp;gt;
     &amp;lt;span class=&quot;cart-text&quot;&amp;gt;장바구니&amp;lt;/span&amp;gt;
&amp;lt;/a&amp;gt;

&amp;lt;script&amp;gt;
	function addCart() {
			alert('장바구니에 담았습니다.');
			//...
	}
&amp;lt;/script&amp;gt;&lt;/code&gt;&lt;/pre&gt;&lt;ul class=&quot;bulleted-list&quot; id=&quot;21d36c86-244f-4709-94d2-313e8db2e941&quot;&gt;&lt;li style=&quot;list-style-type:disc&quot;&gt;onclick을 통해, 해당 태그를 클릭했을 때 어떤 동작을 할지 설정하기!&lt;/li&gt;&lt;/ul&gt;&lt;/li&gt;&lt;/ol&gt;&lt;ol class=&quot;numbered-list&quot; id=&quot;942f7554-0251-4769-bec4-d8660d92db70&quot; start=&quot;2&quot; type=&quot;1&quot;&gt;&lt;li&gt;&lt;strong&gt;DOM을 가져온 뒤, &lt;/strong&gt;&lt;strong&gt;&lt;code&gt;addEventListener(”click”, ...)&lt;/code&gt;&lt;/strong&gt;&lt;strong&gt;으로 이벤트 걸기&lt;/strong&gt;&lt;pre class=&quot;code code-wrap JavaScript&quot; id=&quot;ad4f21d5-b918-467c-b81c-8e9b0cc1bab6&quot;&gt;&lt;code&gt;let elem = document.getElementById('addCart');
elem.addEventListener(&quot;click&quot;, function(){
	alert('장바구니에 담았습니다.');
});&lt;/code&gt;&lt;/pre&gt;&lt;ul class=&quot;bulleted-list&quot; id=&quot;1b2ec2b6-6718-4f40-ba3a-86ab2bbc4957&quot;&gt;&lt;li style=&quot;list-style-type:disc&quot;&gt;JS를 통해 해당 DOM을 가져와 클릭 이벤트를 걸어버리는 방식!&lt;/li&gt;&lt;/ul&gt;&lt;/li&gt;&lt;/ol&gt;&lt;h3 class=&quot;&quot; id=&quot;5cc792ea-c11d-46a6-93a2-0790c66bfb0d&quot;&gt;이벤트 발생 대상 가져오기&lt;/h3&gt;&lt;p class=&quot;&quot; id=&quot;cb0f9a8b-f5e8-400b-85fb-abe53b43107c&quot;&gt;발생 대상 역시, 위의 두가지 방법 그대로 말씀드리겠습니다.&lt;/p&gt;&lt;ol class=&quot;numbered-list&quot; id=&quot;62daaea8-46be-4a1f-9f71-365206c8b070&quot; start=&quot;1&quot; type=&quot;1&quot;&gt;&lt;li&gt;&lt;strong&gt;&lt;code&gt;onclick&lt;/code&gt;&lt;/strong&gt;&lt;strong&gt; 안의 함수에 파라미터로 &lt;/strong&gt;&lt;code&gt;&lt;strong&gt;this&lt;/strong&gt;&lt;/code&gt;&lt;strong&gt; 객체를 보내기&lt;/strong&gt;&lt;pre class=&quot;code code-wrap HTML&quot; id=&quot;482de27a-721e-4968-a188-8a56a53be42f&quot;&gt;&lt;code&gt;&amp;lt;a href=&quot;javascript:void(0)&quot; id=&quot;addCart&quot; onclick=&quot;addCart(this);&quot;&amp;gt;
     &amp;lt;span class=&quot;cart-text&quot;&amp;gt;장바구니&amp;lt;/span&amp;gt;
&amp;lt;/a&amp;gt;

&amp;lt;script&amp;gt;
	function addCart(elem) {
			console.log(elem);
	}
&amp;lt;/script&amp;gt;&lt;/code&gt;&lt;/pre&gt;&lt;ul class=&quot;bulleted-list&quot; id=&quot;11c21ef8-377e-4af1-955f-1a5a19526152&quot;&gt;&lt;li style=&quot;list-style-type:disc&quot;&gt;클릭시, a태그의 DOM 객체가 반환된다.
&lt;code&gt;&amp;lt;a href=&quot;javascript:void(0)&quot; id=&quot;addCart&quot; onclick=&quot;addCart(this);&quot;&amp;gt;&amp;lt;span class=&quot;cart-text&quot;&amp;gt;장바구니&amp;lt;/span&amp;gt;&amp;lt;/a&amp;gt;&lt;/code&gt;&lt;/li&gt;&lt;/ul&gt;&lt;ul class=&quot;bulleted-list&quot; id=&quot;c77efc37-768f-42ff-b73e-24858d17b344&quot;&gt;&lt;li style=&quot;list-style-type:disc&quot;&gt;여기서 dataset이나 내부 text 등을 활용하면 된다.&lt;/li&gt;&lt;/ul&gt;&lt;/li&gt;&lt;/ol&gt;&lt;ol class=&quot;numbered-list&quot; id=&quot;a1085984-069f-4d9f-b40b-f539d477428b&quot; start=&quot;2&quot; type=&quot;1&quot;&gt;&lt;li&gt;&lt;code&gt;&lt;strong&gt;addEventListener&lt;/strong&gt;&lt;/code&gt;&lt;strong&gt; 콜백 함수에 &lt;/strong&gt;&lt;code&gt;&lt;strong&gt;event&lt;/strong&gt;&lt;/code&gt;&lt;strong&gt; 파라미터 설정하기&lt;/strong&gt;&lt;pre class=&quot;code code-wrap JavaScript&quot; id=&quot;d49b3403-7cd3-4cf4-bac8-db7897e51576&quot;&gt;&lt;code&gt;let elem = document.getElementById('addCart');
elem.addEventListener(&quot;click&quot;, function(event){
		console.log(event);
});&lt;/code&gt;&lt;/pre&gt;&lt;ul class=&quot;bulleted-list&quot; id=&quot;6b114114-ca18-4169-8818-5cb8803dfa86&quot;&gt;&lt;li style=&quot;list-style-type:disc&quot;&gt;이 경우, 클릭이 발생한 &lt;code&gt;PointerEvent {…}&lt;/code&gt; 란 이름의 이벤트 객체가 반환된다.&lt;/li&gt;&lt;/ul&gt;&lt;ul class=&quot;bulleted-list&quot; id=&quot;b0b39ed2-083d-4464-b3f8-4010d7a40ed0&quot;&gt;&lt;li style=&quot;list-style-type:disc&quot;&gt;해당 값 중, &lt;code&gt;target&lt;/code&gt;에 불러오고자 했던, 이벤트 발생 대상 정보가 담겨있으니 &lt;code&gt;innerText&lt;/code&gt;, &lt;code&gt;dataset&lt;/code&gt; 등을 활용하면 된다.&lt;/li&gt;&lt;/ul&gt;&lt;/li&gt;&lt;/ol&gt;&lt;h2 class=&quot;&quot; id=&quot;4d950f3b-f08e-463e-adb7-2de72b630cec&quot;&gt;왜 이렇게 사용하는데?&lt;/h2&gt;&lt;figure class=&quot;callout&quot; id=&quot;fe8c025d-e0a7-4bc8-9199-84b8677b9138&quot; style=&quot;white-space:pre-wrap;display:flex&quot;&gt;&lt;div style=&quot;font-size:1.5em&quot;&gt;&lt;span class=&quot;icon&quot;&gt; &lt;/span&gt;&lt;/div&gt;&lt;div style=&quot;width:100%&quot;&gt;개인적인 견해입니다 :D
조금 더 공부 한 뒤에 새롭게 알게된 사실이 있으면 수정할게요!
다양한 의견 주시면 감사하겠습니다.&lt;/div&gt;&lt;/figure&gt;&lt;ol class=&quot;numbered-list&quot; id=&quot;50cac11d-dc42-4277-ac8d-5360c1498c7b&quot; start=&quot;1&quot; type=&quot;1&quot;&gt;&lt;li&gt;&lt;strong&gt;태그 내 정보나 data를 활용하기 위해서&lt;/strong&gt;&lt;p class=&quot;&quot; id=&quot;2be7826e-e2c8-4cf4-beeb-9153f163ae3f&quot;&gt;상품 리스트가 있는 페이지에는 하나의 상품을 &lt;code&gt;div&lt;/code&gt; 태그로 묶고 dataset을 통해 다양한 정보를 입력한 상태라고 하자. 이런 상황에서 해당 &lt;code&gt;div&lt;/code&gt; 영역을 클릭할 때 해당 상품의 가격을 가져오고 싶다면?&lt;/p&gt;&lt;p class=&quot;&quot; id=&quot;66cbafbb-97bb-4e10-87ca-80402de32e94&quot;&gt;이럴 땐, 해당 div마다 이벤트를 걸어놓고 &lt;code&gt;this&lt;/code&gt; 혹은 &lt;code&gt;event&lt;/code&gt; 객체로 가져온 div 태그의 정보를 활용하여 필요한 사항을 처리하면 된다.&lt;/p&gt;&lt;/li&gt;&lt;/ol&gt;&lt;ol class=&quot;numbered-list&quot; id=&quot;7e169e5c-8630-40e2-8801-0c0b03984335&quot; start=&quot;2&quot; type=&quot;1&quot;&gt;&lt;li&gt;&lt;strong&gt;하드 코딩을 줄이기 위해 (⇒ 코드 확장성)&lt;/strong&gt;&lt;p class=&quot;&quot; id=&quot;76f16e46-e32a-4ef0-9daa-e00a8649c9ca&quot;&gt;1번의 내용과 비슷한 맥락인데 특정 함수에서 버튼마다 분기처리를 해야하는 과정에서 위와 같이 클릭 이벤트 대상 정보를 가져오지 못하면, 보내는 함수 자체가 &lt;code&gt;onclick=”addCart(’delivery’)”&lt;/code&gt; , &lt;code&gt;onclick=”addCart(’pickup’)”&lt;/code&gt; 처럼 특정 분기 형태를 직접 하드 코딩으로 입력하게 된다.&lt;/p&gt;&lt;p class=&quot;&quot; id=&quot;b9244f48-a0d4-4c52-9838-dd7d4b06f145&quot;&gt;이렇게 되면 다른 구분값이 생기는 상황을 자동으로 커버하지 못하게 된다. 지금은 분기가 두개라 두개의 태그로 가능하지만, 만약 분기처리해야할게 늘어난다면? 입력하는 데이터도 그만큼 늘어나게 된다.&lt;/p&gt;&lt;/li&gt;&lt;/ol&gt;&lt;ol class=&quot;numbered-list&quot; id=&quot;fd1b958e-1545-4376-bcb8-b4a0cfb501e4&quot; start=&quot;3&quot; type=&quot;1&quot;&gt;&lt;li&gt;결국은 코드의 재사용성과 확장성, 가독성을 위함이다.&lt;p class=&quot;&quot; id=&quot;bf77bad0-4c73-48fd-98d4-0dbcb67c57d4&quot;&gt;Why 가독성? 함수가 하는 일을 파라미터에 따라 처리되는 것이 아닌, 자바스크립트 코드단에서 처리하기 때문에 자바스크립트 문서 하나만으로 컨트롤이 가능해짐. (HTML 파일과 JS 파일을 번갈아가며 볼 필요가 줄어듦)&lt;/p&gt;&lt;p class=&quot;&quot; id=&quot;cf392b0a-9bea-4dfa-9eee-4d7f1941619c&quot;&gt;하나의 기능을 결정짓는, 하나의 변수가, 하나의 메소드에 존재하는 모습!  &lt;/p&gt;&lt;/li&gt;&lt;/ol&gt;&lt;hr id=&quot;3c27b5d8-ee68-4484-915e-b13f1c710f43&quot;/&gt;&lt;p class=&quot;&quot; id=&quot;022c07aa-c904-4188-a858-e0141f8297be&quot;&gt;
&lt;/p&gt;&lt;/div&gt;&lt;/article&gt;&lt;/body&gt;</description>
      <category>front/javascript</category>
      <category>javascript</category>
      <category>vanillajs</category>
      <author>3sammy</author>
      <guid isPermaLink="true">https://23log.tistory.com/177</guid>
      <comments>https://23log.tistory.com/177#entry177comment</comments>
      <pubDate>Sat, 13 Aug 2022 12:45:45 +0900</pubDate>
    </item>
    <item>
      <title>스프링 배치(Spring Batch) 간단한 정리</title>
      <link>https://23log.tistory.com/176</link>
      <description>&lt;body&gt;&lt;article class=&quot;page sans Notion&quot; id=&quot;4fbb5d42-0360-4202-b3a2-216369e0de5e&quot;&gt;&lt;div class=&quot;page-body Tistory&quot;&gt;&lt;div class=&quot;image notion-img&quot; id=&quot;315cce5f-f161-4431-8b4a-9b613e7b33ea&quot;&gt;&lt;figure class=&quot;imageblock alignCenter&quot; width=&quot;597&quot; height=&quot;348&quot; data-origin-width=&quot;597&quot; data-origin-height=&quot;348&quot; data-ke-mobilestyle=&quot;widthOrigin&quot; filename=&quot;img.png&quot; filemime=&quot;image/png&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/m6qPZ/btrJvlzR9Zc/VTAVlMByTJ06Ch8lahxlek/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/m6qPZ/btrJvlzR9Zc/VTAVlMByTJ06Ch8lahxlek/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/m6qPZ/btrJvlzR9Zc/VTAVlMByTJ06Ch8lahxlek/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2Fm6qPZ%2FbtrJvlzR9Zc%2FVTAVlMByTJ06Ch8lahxlek%2Fimg.png&quot; width=&quot;597&quot; height=&quot;348&quot; data-origin-width=&quot;597&quot; data-origin-height=&quot;348&quot; data-ke-mobilestyle=&quot;widthOrigin&quot; filename=&quot;img.png&quot; filemime=&quot;image/png&quot; onerror=&quot;this.onerror=null; this.src='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png'; this.srcset='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png';&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;/div&gt;&lt;figure class=&quot;callout&quot; id=&quot;b9535119-ec1c-442c-b948-c505d39160fe&quot; style=&quot;white-space:pre-wrap;display:flex&quot;&gt;&lt;div style=&quot;font-size:1.5em&quot;&gt;&lt;span class=&quot;icon&quot;&gt; &lt;/span&gt;&lt;/div&gt;&lt;div style=&quot;width:100%&quot;&gt;업무를 진행하며 배치 프로세스에 대해 실무에서 처음으로 접하게 되었습니다.
기본적 개념이지만, 간략하게 정리한 바를 공유합니다.&lt;/div&gt;&lt;/figure&gt;&lt;h1 class=&quot;&quot; id=&quot;6611825a-87ba-48d5-83f3-41c81974b8a7&quot;&gt;&lt;strong&gt;스프링 배치&lt;/strong&gt;&lt;/h1&gt;&lt;ul class=&quot;bulleted-list&quot; id=&quot;9a6c8e00-e9c9-423e-b82d-614f76e84c01&quot;&gt;&lt;li style=&quot;list-style-type:disc&quot;&gt;배치란? 데이터를 원하는 대로 가공해서 처리하는 자동화된 프로세스&lt;/li&gt;&lt;/ul&gt;&lt;ul class=&quot;bulleted-list&quot; id=&quot;c982a427-0c13-400d-ac61-6aad512baf49&quot;&gt;&lt;li style=&quot;list-style-type:disc&quot;&gt;배치는 일반적으로 &lt;code&gt;읽기-&amp;gt;처리-&amp;gt;쓰기&lt;/code&gt;의 3단계로 이루어진다.&lt;/li&gt;&lt;/ul&gt;&lt;ul class=&quot;bulleted-list&quot; id=&quot;cc72f227-86c4-43c1-8dab-dc0c5ca97cd0&quot;&gt;&lt;li style=&quot;list-style-type:disc&quot;&gt;배치(batch) = 일괄 처리 = 큰 데이터를 한번에 처리하고 결과를 저장&lt;/li&gt;&lt;/ul&gt;&lt;ul class=&quot;bulleted-list&quot; id=&quot;ae8a0005-e99e-4a69-b6e4-b80458045030&quot;&gt;&lt;li style=&quot;list-style-type:disc&quot;&gt;배치 서비스는 다음의 특징이 존재함&lt;ul class=&quot;bulleted-list&quot; id=&quot;5d7a1e82-68b8-4a49-a196-c0d90b32969a&quot;&gt;&lt;li style=&quot;list-style-type:circle&quot;&gt;대용량 데이터 : 배치 어플리케이션은 대량의 데이터를 가져오거나, 전달하거나, 계산 등을 처리할 수 있어야 함&lt;/li&gt;&lt;/ul&gt;&lt;ul class=&quot;bulleted-list&quot; id=&quot;e72e9812-ef41-42c0-8244-9976bdb73b75&quot;&gt;&lt;li style=&quot;list-style-type:circle&quot;&gt;자동화 : 사용자의 개입 없이 실행되어야 함&lt;/li&gt;&lt;/ul&gt;&lt;ul class=&quot;bulleted-list&quot; id=&quot;e176b991-c416-4d7e-80dc-2eaa51bac4a7&quot;&gt;&lt;li style=&quot;list-style-type:circle&quot;&gt;견고성, 신뢰성, 성능 ... &lt;a href=&quot;https://joont92.github.io/spring/Spring-Batch/&quot;&gt;링크&lt;/a&gt;&lt;/li&gt;&lt;/ul&gt;&lt;/li&gt;&lt;/ul&gt;&lt;hr id=&quot;bc8896e9-27b4-48a6-9803-2f01d16b3e64&quot;/&gt;&lt;h2 class=&quot;&quot; id=&quot;9c92f25d-e625-45af-8e13-5011b224866d&quot;&gt;&lt;strong&gt;JOB&lt;/strong&gt;&lt;/h2&gt;&lt;ul class=&quot;bulleted-list&quot; id=&quot;de493413-df0c-4134-ba79-6840c82c42d7&quot;&gt;&lt;li style=&quot;list-style-type:disc&quot;&gt;job은 배치 처리 과정을 하나의 단위로 만들어 표현한 것&lt;/li&gt;&lt;/ul&gt;&lt;ul class=&quot;bulleted-list&quot; id=&quot;24f4d551-9059-4bc4-a17f-8b6ef17415e5&quot;&gt;&lt;li style=&quot;list-style-type:disc&quot;&gt;최상단 계층에 존재함&lt;/li&gt;&lt;/ul&gt;&lt;ul class=&quot;bulleted-list&quot; id=&quot;d4119eb8-86c0-4a19-9c90-2a1071d9f793&quot;&gt;&lt;li style=&quot;list-style-type:disc&quot;&gt;하나의 Job안에는 여러 Step(단계)가 있음&lt;/li&gt;&lt;/ul&gt;&lt;ul class=&quot;bulleted-list&quot; id=&quot;d73e9335-c525-4bff-b04d-fcda0e4dc9a3&quot;&gt;&lt;li style=&quot;list-style-type:disc&quot;&gt;즉, 여러 Step을 포함하는 컨테이너&lt;/li&gt;&lt;/ul&gt;&lt;ul class=&quot;bulleted-list&quot; id=&quot;cb1b363c-8c1e-43e8-9662-31c64e32de3a&quot;&gt;&lt;li style=&quot;list-style-type:disc&quot;&gt;Job 객체를 생성하는 빌더는 여러개가 있으나, 여기선 JobBuilderFactory를 사용함&lt;/li&gt;&lt;/ul&gt;&lt;pre class=&quot;code code-wrap Plain Text&quot; id=&quot;58f22747-48ab-4142-9d42-3f9d7d19c58c&quot;&gt;&lt;code&gt;@Bean(name = JOB_ID)
public Job nameJob(
        @Qualifier(JOB_ID + &quot;.step1&quot;) Step step1
){
    return jobBuilderFactory.get(JOB_ID)
            .start(step1)
            .build();
}&lt;/code&gt;&lt;/pre&gt;&lt;p class=&quot;&quot; id=&quot;7565e9ec-0ca1-48a8-b36f-a39400c2cc63&quot;&gt;JobBuilderFactory를 통해 Job 생성을 한 뒤, Step을 주입받는다.&lt;/p&gt;&lt;h2 class=&quot;&quot; id=&quot;005fb4d4-88e0-4aea-8039-acc25c70460f&quot;&gt;&lt;strong&gt;Step&lt;/strong&gt;&lt;/h2&gt;&lt;pre class=&quot;code code-wrap Plain Text&quot; id=&quot;df80cf03-0077-4355-820b-88d26e7e0d0d&quot;&gt;&lt;code&gt;@Bean(name = JOB_ID)
public Step nameStep1(){
    return stepBuilderFactory.get(JOB_ID + &quot;.step1&quot;)
        .allowStartIfComplete(true)
        .tasklet(실행하려는SQL메소드)
        .build();
}&lt;/code&gt;&lt;/pre&gt;&lt;ul class=&quot;bulleted-list&quot; id=&quot;97f35f37-945a-4cbc-b58a-98f0575a0d29&quot;&gt;&lt;li style=&quot;list-style-type:disc&quot;&gt;stepBuilderFactory를 통해 스텝을 생성함&lt;/li&gt;&lt;/ul&gt;&lt;ul class=&quot;bulleted-list&quot; id=&quot;e711e5c5-b56a-4402-a2ba-0109665afa43&quot;&gt;&lt;li style=&quot;list-style-type:disc&quot;&gt;배치에서 상태를 보여주는 단위로, 스텝은 잡을 구성하는 독립된 작업 단위임&lt;/li&gt;&lt;/ul&gt;&lt;ul class=&quot;bulleted-list&quot; id=&quot;76500f27-f9fe-4faf-8730-569ef9e86085&quot;&gt;&lt;li style=&quot;list-style-type:disc&quot;&gt;스텝에는 Tasklet, Chunk 기반으로 두가지가 존재함&lt;/li&gt;&lt;/ul&gt;&lt;h2 class=&quot;&quot; id=&quot;c91972a0-5245-421e-85fb-4324b33f4511&quot;&gt;&lt;strong&gt;Tasklet&lt;/strong&gt;&lt;/h2&gt;&lt;ul class=&quot;bulleted-list&quot; id=&quot;20d403cc-f3c5-4e2f-b7c0-f40683d96dbd&quot;&gt;&lt;li style=&quot;list-style-type:disc&quot;&gt;스텝이 중지될 때까지 execute를 계속 반복해서 수행함&lt;/li&gt;&lt;/ul&gt;&lt;ul class=&quot;bulleted-list&quot; id=&quot;88a74447-291c-4226-9003-5a9dbb59ebcf&quot;&gt;&lt;li style=&quot;list-style-type:disc&quot;&gt;초기화, 저장 프로시저 실행, 알림 전송과 같은 잡에서 일반적으로 사용됨&lt;/li&gt;&lt;/ul&gt;&lt;ul class=&quot;bulleted-list&quot; id=&quot;6d1507d7-e21c-43be-abf7-6614063fde09&quot;&gt;&lt;li style=&quot;list-style-type:disc&quot;&gt;Job은 여러개의 Step으로 구성되고, Step은 Tasklet(기능)으로 구성됨&lt;/li&gt;&lt;/ul&gt;&lt;ul class=&quot;bulleted-list&quot; id=&quot;8cb6a9da-88e9-4a30-8e54-13532f442b4f&quot;&gt;&lt;li style=&quot;list-style-type:disc&quot;&gt;배치 작업 하나 = Job&lt;/li&gt;&lt;/ul&gt;&lt;pre class=&quot;code code-wrap Plain Text&quot; id=&quot;357cc718-f7b8-41d5-9892-f80a53ce4f26&quot;&gt;&lt;code&gt;@Bean(name = JOB_ID + &quot;.NaverTotalEpEqlInfTasklet&quot;)
public Tasklet naverTotalEpEqlInfTasklet(){
    return new NaverTotalEpEqlInfTasklet();
}&lt;/code&gt;&lt;/pre&gt;&lt;h2 class=&quot;&quot; id=&quot;a98a0afe-674a-49c3-ab9b-865d32539626&quot;&gt;&lt;strong&gt;Chunk&lt;/strong&gt;&lt;/h2&gt;&lt;ul class=&quot;bulleted-list&quot; id=&quot;16083f09-f309-4dd1-b2a3-98011a8d86f0&quot;&gt;&lt;li style=&quot;list-style-type:disc&quot;&gt;아이템 기반 처리에 사용된다.&lt;/li&gt;&lt;/ul&gt;&lt;h1 class=&quot;&quot; id=&quot;a7083d88-09bd-4294-87c6-80fd31c09d43&quot;&gt;&lt;strong&gt;참고&lt;/strong&gt;&lt;/h1&gt;&lt;ul class=&quot;bulleted-list&quot; id=&quot;027bb902-bf52-4c35-83f8-b1c102e2b0f3&quot;&gt;&lt;li style=&quot;list-style-type:disc&quot;&gt;&lt;a href=&quot;https://cheese10yun.github.io/spring-batch-basic/&quot;&gt;https://cheese10yun.github.io/spring-batch-basic/&lt;/a&gt;&lt;/li&gt;&lt;/ul&gt;&lt;ul class=&quot;bulleted-list&quot; id=&quot;690ce362-92a4-4eab-a998-8309c08bf4a7&quot;&gt;&lt;li style=&quot;list-style-type:disc&quot;&gt;&lt;a href=&quot;https://juneyr.dev/2019-07-24/spring-batch-tasklet&quot;&gt;https://juneyr.dev/2019-07-24/spring-batch-tasklet&lt;/a&gt;&lt;/li&gt;&lt;/ul&gt;&lt;ul class=&quot;bulleted-list&quot; id=&quot;bbb08d31-b4f7-4bdb-9980-a22418930f20&quot;&gt;&lt;li style=&quot;list-style-type:disc&quot;&gt;&lt;a href=&quot;https://joont92.github.io/spring/Spring-Batch/&quot;&gt;https://joont92.github.io/spring/Spring-Batch/&lt;/a&gt;&lt;/li&gt;&lt;/ul&gt;&lt;h1 class=&quot;&quot; id=&quot;b9cf1257-a756-4651-b5b8-6ccae2e86dce&quot;&gt;생각 정리&lt;/h1&gt;&lt;ul class=&quot;bulleted-list&quot; id=&quot;c750f102-4e9f-471b-b0a2-8134e5c39494&quot;&gt;&lt;li style=&quot;list-style-type:disc&quot;&gt;배치란 한 마디로, &lt;code&gt;특정 주기로 자동으로 실행되는 프로그램&lt;/code&gt; 입니다!&lt;/li&gt;&lt;/ul&gt;&lt;ul class=&quot;bulleted-list&quot; id=&quot;b0faae79-81b0-4df2-bf8e-7fbdda9c339d&quot;&gt;&lt;li style=&quot;list-style-type:disc&quot;&gt;언제 사용 될까요?&lt;ul class=&quot;bulleted-list&quot; id=&quot;c3031351-380f-48bd-910c-90083c0efb0f&quot;&gt;&lt;li style=&quot;list-style-type:circle&quot;&gt;회원 탈퇴 시, 특정 데이터(주문 내역 등)를 삭제해야 한다고 가정합시다.
만약 A 회원에게 1만건의 주문이 존재한다면 이를 처리하는데 시간이 오래 걸리겠지요.
그리고 이와 같은 회원 100명이 모두 합심하여, 유저들의 접속이 활발한 저녁 7시에 탈퇴를 하게 된다면? 서버에 부하가 발생하여 서비스에 영향을 주게 되겠지요.&lt;/li&gt;&lt;/ul&gt;&lt;ul class=&quot;bulleted-list&quot; id=&quot;a999e315-9078-4630-9a6b-ea36f8bc88a8&quot;&gt;&lt;li style=&quot;list-style-type:circle&quot;&gt;이런 상황에선 탈퇴한 유저에겐 탈퇴에 대한 &lt;code&gt;상태값&lt;/code&gt; 혹은 &lt;code&gt;탈퇴 일시&lt;/code&gt;만 지정을 해주어 모든 로직에서 제외처리를 시켜버리고. 실제로 데이터를 삭제하는 것은 유저들의 접속량이 적은 새벽 시간대를 활용하여 일괄적으로 처리해버린다면, 서비스적으로 더욱 안정적으로 될 것 입니다.&lt;/li&gt;&lt;/ul&gt;&lt;ul class=&quot;bulleted-list&quot; id=&quot;1201846a-e338-4c00-82f6-b513b90293d4&quot;&gt;&lt;li style=&quot;list-style-type:circle&quot;&gt;즉, &lt;code&gt;유저의 유입이 적은 새벽 2시(특정 시간)에 탈퇴 유저의 주문내역 삭제(특정 행동)를 매일(특정 주기별로) 실행해라.&lt;/code&gt; 와 같이 지정하는 것을 배치라고 보시면 됩니다.&lt;/li&gt;&lt;/ul&gt;&lt;blockquote class=&quot;&quot; id=&quot;f98306de-9dbc-467b-8c83-bbad5e532da3&quot;&gt;실제로 유저 탈퇴시 곧바로 데이터들이 삭제됩니다  &lt;/blockquote&gt;&lt;/li&gt;&lt;/ul&gt;&lt;ul class=&quot;bulleted-list&quot; id=&quot;a0b3b70c-cbcf-42e7-a5a5-2dec6fc87bba&quot;&gt;&lt;li style=&quot;list-style-type:disc&quot;&gt;추가적으로 배치는 실무에서 많은 것들 편하게 해줍니다.&lt;ul class=&quot;bulleted-list&quot; id=&quot;a69711aa-7263-4d87-947a-4d577aa0b9a8&quot;&gt;&lt;li style=&quot;list-style-type:circle&quot;&gt;&lt;strong&gt;실시간으로 특정 데이터를 처리했을 때,
해당 처리 결과에 대한 보장이 제대로 이루어지지 않는다면?&lt;/strong&gt;
→ 배치로 실패한 결과들에 대해서 재실행을 실시하여 커버를 할 수 있습니다.&lt;/li&gt;&lt;/ul&gt;&lt;ul class=&quot;bulleted-list&quot; id=&quot;e810805e-e46b-4aab-a00f-48acf6e6ff39&quot;&gt;&lt;li style=&quot;list-style-type:circle&quot;&gt;배치는 실패 로그를 쌓을 수 있으므로, 결과에 대한 확인이 가능해집니다.&lt;/li&gt;&lt;/ul&gt;&lt;/li&gt;&lt;/ul&gt;&lt;p class=&quot;&quot; id=&quot;70a61ce1-d080-4c90-aa0d-fa77fc64f074&quot;&gt;
&lt;/p&gt;&lt;figure class=&quot;block-color-yellow_background callout&quot; id=&quot;5dbcaf05-e290-4616-a901-4f1dfe9a9c88&quot; style=&quot;white-space:pre-wrap;display:flex&quot;&gt;&lt;div style=&quot;font-size:1.5em&quot;&gt;&lt;span class=&quot;icon&quot;&gt; &lt;/span&gt;&lt;/div&gt;&lt;div style=&quot;width:100%&quot;&gt;담당 업무상 배치 프로세스를 많이 다루진 않지만, 조금 더 공수가 큰 개발을 하게 되면 배치를 직접 짜볼 기회도 있을 것 같습니다. 재밌을 것 같아요  &lt;/div&gt;&lt;/figure&gt;&lt;p class=&quot;&quot; id=&quot;e0cb30c4-c7c4-4a6f-a85a-1976e015ee55&quot;&gt;
&lt;/p&gt;&lt;/div&gt;&lt;/article&gt;&lt;/body&gt;</description>
      <category>develop/back-side</category>
      <category>Automation</category>
      <category>Spring</category>
      <author>3sammy</author>
      <guid isPermaLink="true">https://23log.tistory.com/176</guid>
      <comments>https://23log.tistory.com/176#entry176comment</comments>
      <pubDate>Fri, 12 Aug 2022 08:01:24 +0900</pubDate>
    </item>
    <item>
      <title>[에러] 마이바티스(Mybatis) : 요소 콘텐츠 오류</title>
      <link>https://23log.tistory.com/175</link>
      <description>&lt;body&gt;&lt;article class=&quot;page sans Notion&quot; id=&quot;9d59fb13-6557-4caa-99a9-2e68e6934270&quot;&gt;&lt;div class=&quot;page-body Tistory&quot;&gt;&lt;div class=&quot;image notion-img&quot; id=&quot;4123659e-53bc-473b-ad9a-4cde860e05d5&quot;&gt;&lt;figure class=&quot;imageblock alignCenter&quot; width=&quot;594&quot; height=&quot;344&quot; data-origin-width=&quot;594&quot; data-origin-height=&quot;344&quot; data-ke-mobilestyle=&quot;widthOrigin&quot; filename=&quot;img.png&quot; filemime=&quot;image/png&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/cTank2/btrJwZirhNA/7fpQrvFKD3ZJS9xtGBFJw1/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/cTank2/btrJwZirhNA/7fpQrvFKD3ZJS9xtGBFJw1/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/cTank2/btrJwZirhNA/7fpQrvFKD3ZJS9xtGBFJw1/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FcTank2%2FbtrJwZirhNA%2F7fpQrvFKD3ZJS9xtGBFJw1%2Fimg.png&quot; width=&quot;594&quot; height=&quot;344&quot; data-origin-width=&quot;594&quot; data-origin-height=&quot;344&quot; data-ke-mobilestyle=&quot;widthOrigin&quot; filename=&quot;img.png&quot; filemime=&quot;image/png&quot; onerror=&quot;this.onerror=null; this.src='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png'; this.srcset='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png';&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;/div&gt;&lt;p class=&quot;&quot; id=&quot;0334f1af-3734-4970-905c-32d03b13f378&quot;&gt;
&lt;/p&gt;&lt;pre class=&quot;code code-wrap SQL&quot; id=&quot;c6917abd-3f96-4caf-8f22-9be13991679d&quot;&gt;&lt;code&gt;Error creating document instance.  Cause: org.xml.sax.SAXParseException; lineNumber: 424; columnNumber: 95; 요소 콘텐츠는 올바른 형식의 문자 데이터 또는 마크업으로 구성되어야 합니다.&lt;/code&gt;&lt;/pre&gt;&lt;p class=&quot;&quot; id=&quot;70e95f8a-9277-4d9b-bebc-4c78005ed711&quot;&gt;
&lt;/p&gt;&lt;h3 class=&quot;&quot; id=&quot;a090d4e6-96a3-47ac-b1cc-5d0962cdc316&quot;&gt;원인&lt;/h3&gt;&lt;ul class=&quot;bulleted-list&quot; id=&quot;852cae52-10ba-4c8e-827a-b7b5fc0bd272&quot;&gt;&lt;li style=&quot;list-style-type:disc&quot;&gt;위와 같은 오류는 MyBatis에서 &lt;code&gt;&amp;lt;&lt;/code&gt;, &lt;code&gt;&amp;gt;&lt;/code&gt; 부등호 사용시 발생하는 에러&lt;pre class=&quot;code code-wrap SQL&quot; id=&quot;89e19905-c808-4477-b42c-3be8fb51618e&quot;&gt;&lt;code&gt;&amp;lt;select id=&quot;selectGod&quot; resultMap=&quot;resultGodDto&quot;&amp;gt;
	select *
	from GOD
	where GOD_PRC &amp;gt; 9900
&amp;lt;/select&amp;gt;&lt;/code&gt;&lt;/pre&gt;&lt;ul class=&quot;bulleted-list&quot; id=&quot;b3e95157-f34e-4285-b212-99eaed07c000&quot;&gt;&lt;li style=&quot;list-style-type:circle&quot;&gt;마이바티스는 위와 같이 태그&lt;code&gt;&amp;lt;select&amp;gt;&lt;/code&gt; 를 통해 쿼리를 감싸고 구성하는 마크업 형태를 취하고 있습니다.&lt;/li&gt;&lt;/ul&gt;&lt;ul class=&quot;bulleted-list&quot; id=&quot;8cf63df0-857b-48f7-ada7-cbb9fcc1da05&quot;&gt;&lt;li style=&quot;list-style-type:circle&quot;&gt;이때, &lt;code&gt;&amp;gt;&lt;/code&gt; 중괄호를 사용하게 되면 마이바티스가 이를 닫는 태그로 인식하게 되어 에러를 반환하게 됩니다.&lt;/li&gt;&lt;/ul&gt;&lt;/li&gt;&lt;/ul&gt;&lt;h3 class=&quot;&quot; id=&quot;8dd74eff-9b68-4150-988c-c30443c26418&quot;&gt;해결&lt;/h3&gt;&lt;ul class=&quot;bulleted-list&quot; id=&quot;a2d3ea44-99b4-427c-90d7-a75d87d586c9&quot;&gt;&lt;li style=&quot;list-style-type:disc&quot;&gt;&lt;code&gt;&amp;lt;![CDATA[ ]]&amp;gt;&lt;/code&gt;  를 통해 부등호를 감싸서, 괄 호자 수문문자 &lt;code&gt;문자열&lt;/code&gt;로 처리해주면 됩니다.&lt;/li&gt;&lt;/ul&gt;&lt;ul class=&quot;bulleted-list&quot; id=&quot;b715018b-d531-45cb-9959-b1499097fbb3&quot;&gt;&lt;li style=&quot;list-style-type:disc&quot;&gt;&lt;strong&gt;예시&lt;/strong&gt;&lt;ul class=&quot;bulleted-list&quot; id=&quot;f9700b9f-4ac0-414c-9f5c-e349b84918c4&quot;&gt;&lt;li style=&quot;list-style-type:circle&quot;&gt;&lt;code&gt;&amp;lt;![CDATA[&amp;lt;=]]&amp;gt;&lt;/code&gt; : 문제가 되는 부등호만 감싸거나&lt;/li&gt;&lt;/ul&gt;&lt;ul class=&quot;bulleted-list&quot; id=&quot;4c6bd7f9-62e2-4d2d-a315-ba7c06600c74&quot;&gt;&lt;li style=&quot;list-style-type:circle&quot;&gt;아래처럼 전체 쿼리를 감사는 경우도 있습니다.&lt;pre class=&quot;code code-wrap SQL&quot; id=&quot;0cc6d5ea-754c-4e75-95a9-68527cd5049a&quot;&gt;&lt;code&gt;&amp;lt;select id=&quot;selectGod&quot; resultMap=&quot;resultGodDto&quot;&amp;gt;
	&amp;lt;![CDATA[
		select *
		from GOD
		where GOD_PRC &amp;gt; 9900
	]]&amp;gt;
&amp;lt;/select&amp;gt;&lt;/code&gt;&lt;/pre&gt;&lt;ul class=&quot;bulleted-list&quot; id=&quot;4f4cbffb-f38e-4338-acd0-0c1226566941&quot;&gt;&lt;li style=&quot;list-style-type:square&quot;&gt;단, 전체 쿼리를 감싸는 경우 감싼 부분 안에 &lt;code&gt;&amp;lt;if&amp;gt;&lt;/code&gt;문 과 같이 중괄호를 사용하는 녀석이 없는지 확인하셔야 합니다!&lt;/li&gt;&lt;/ul&gt;&lt;/li&gt;&lt;/ul&gt;&lt;/li&gt;&lt;/ul&gt;&lt;p class=&quot;&quot; id=&quot;8a04d149-20a7-4824-a3be-d6fcef37f0f7&quot;&gt;
&lt;/p&gt;&lt;p class=&quot;&quot; id=&quot;359a88ad-5635-4615-a4e5-64006a54eb70&quot;&gt;
&lt;/p&gt;&lt;/div&gt;&lt;/article&gt;&lt;/body&gt;</description>
      <category>develop/back-side</category>
      <category>DB</category>
      <category>ERROR_해결</category>
      <category>Spring</category>
      <author>3sammy</author>
      <guid isPermaLink="true">https://23log.tistory.com/175</guid>
      <comments>https://23log.tistory.com/175#entry175comment</comments>
      <pubDate>Thu, 11 Aug 2022 23:50:16 +0900</pubDate>
    </item>
    <item>
      <title>[MAC] Crontab(크론탭)으로 파이썬을 특정 주기 자동 실행시키기</title>
      <link>https://23log.tistory.com/174</link>
      <description>&lt;body&gt;&lt;article class=&quot;page sans Notion&quot; id=&quot;24fc769e-2780-4592-8b9c-604d5393b632&quot;&gt;&lt;div class=&quot;page-body Tistory&quot;&gt;&lt;div class=&quot;image notion-img&quot; id=&quot;ba6342cf-0833-4794-b276-bdd278846853&quot;&gt;&lt;figure class=&quot;imageblock alignCenter&quot; width=&quot;896&quot; height=&quot;347&quot; data-origin-width=&quot;896&quot; data-origin-height=&quot;347&quot; data-ke-mobilestyle=&quot;widthOrigin&quot; filename=&quot;img.png&quot; filemime=&quot;image/png&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/b2Qx3m/btrJlWNEBzO/wbi0o6Yc5DkWRrdQkANzvk/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/b2Qx3m/btrJlWNEBzO/wbi0o6Yc5DkWRrdQkANzvk/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/b2Qx3m/btrJlWNEBzO/wbi0o6Yc5DkWRrdQkANzvk/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2Fb2Qx3m%2FbtrJlWNEBzO%2Fwbi0o6Yc5DkWRrdQkANzvk%2Fimg.png&quot; width=&quot;896&quot; height=&quot;347&quot; data-origin-width=&quot;896&quot; data-origin-height=&quot;347&quot; data-ke-mobilestyle=&quot;widthOrigin&quot; filename=&quot;img.png&quot; filemime=&quot;image/png&quot; onerror=&quot;this.onerror=null; this.src='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png'; this.srcset='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png';&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;/div&gt;&lt;h1 class=&quot;&quot; id=&quot;97903497-a04f-4618-a8ee-fa6ade712a84&quot;&gt;Cron? Crontab?&lt;/h1&gt;&lt;ul class=&quot;bulleted-list&quot; id=&quot;1bd354d6-4f73-42b1-a27a-a18f4c6417f2&quot;&gt;&lt;li style=&quot;list-style-type:disc&quot;&gt;크론(Cron) : 유닉스(Unix)와 리눅스(Linux) 환경에서 사용자가 설정한 시간에 특정 작업을 수행하도록 만든 명령 파일&lt;/li&gt;&lt;/ul&gt;&lt;ul class=&quot;bulleted-list&quot; id=&quot;fd7dbb52-ada2-4110-a24d-cb6411ec4f44&quot;&gt;&lt;li style=&quot;list-style-type:disc&quot;&gt;크론탭(Crontab) : 위의 Cron이 언제 어떤 일을 하는지 설정한 파일&lt;/li&gt;&lt;/ul&gt;&lt;ul class=&quot;bulleted-list&quot; id=&quot;92e4f307-0edb-4f2a-8ee7-416cd46a9507&quot;&gt;&lt;li style=&quot;list-style-type:disc&quot;&gt;쉽게 생각하면 윈도우의 스케줄러같은 녀석이라 생각하면 됩니다!&lt;/li&gt;&lt;/ul&gt;&lt;h1 class=&quot;&quot; id=&quot;cbf7d3fd-e5ac-4bd1-939a-9d3e07f7c4d9&quot;&gt;만들고자 하는 것&lt;/h1&gt;&lt;ul class=&quot;bulleted-list&quot; id=&quot;3ef057b9-bb85-4156-9c81-fcb841253bf7&quot;&gt;&lt;li style=&quot;list-style-type:disc&quot;&gt;나는 매일 저녁 10시에 티스토리로 내가 작성한 글을 자동으로 비공개 발행해주고,
매일 아침 8시에 발행한 글을 공개 발행하는 크론탭을 생성하고자 한다.&lt;/li&gt;&lt;/ul&gt;&lt;h1 class=&quot;&quot; id=&quot;017bada1-ba8e-41e8-b825-151326a0699c&quot;&gt;크론탭 설정 방법&lt;/h1&gt;&lt;h2 class=&quot;&quot; id=&quot;1cb19027-b93a-4c76-9b35-0601553af062&quot;&gt;크론탭 작성 방법!&lt;/h2&gt;&lt;figure class=&quot;block-color-gray_background callout&quot; id=&quot;712f0b95-86f3-44ee-89b8-e5c85f062e78&quot; style=&quot;white-space:pre-wrap;display:flex&quot;&gt;&lt;div style=&quot;font-size:1.5em&quot;&gt;&lt;span class=&quot;icon&quot;&gt; &lt;/span&gt;&lt;/div&gt;&lt;div style=&quot;width:100%&quot;&gt;본 실행은, &lt;strong&gt;MAC OS&lt;/strong&gt; 에서 이루어졌습니다
*Window 사용자는, 윈도우 스케줄러를 사용하시면 됩니다.&lt;/div&gt;&lt;/figure&gt;&lt;figure class=&quot;block-color-red_background callout&quot; id=&quot;00d4dd92-2cba-45a3-be25-41b1be6fcc7f&quot; style=&quot;white-space:pre-wrap;display:flex&quot;&gt;&lt;div style=&quot;font-size:1.5em&quot;&gt;&lt;span class=&quot;icon&quot;&gt; ️&lt;/span&gt;&lt;/div&gt;&lt;div style=&quot;width:100%&quot;&gt;본문에선 크론탭을 만들어 파이썬 코드를 실행하는 과정만 &lt;code&gt;neat&lt;/code&gt;하게 기술하였습니다!&lt;/div&gt;&lt;/figure&gt;&lt;ol class=&quot;numbered-list&quot; id=&quot;7a662295-1bc1-4c52-b8b8-e200b0142399&quot; start=&quot;1&quot; type=&quot;1&quot;&gt;&lt;li&gt;터미널을 연 뒤, 아래 과정을 실행한다.
*필자는 &lt;code&gt;zsh&lt;/code&gt; 를 사용했다.&lt;/li&gt;&lt;/ol&gt;&lt;ol class=&quot;numbered-list&quot; id=&quot;282624fe-4bb5-45b8-b550-759872efeb73&quot; start=&quot;2&quot; type=&quot;1&quot;&gt;&lt;li&gt;&lt;code&gt;crontab -e&lt;/code&gt; : 에디터를 통해 크론탭을 생성한다.&lt;ul class=&quot;bulleted-list&quot; id=&quot;7da80a29-1efc-479a-8b32-23c3a6d3d273&quot;&gt;&lt;li style=&quot;list-style-type:disc&quot;&gt;위의 명령어를 치면, vi(vim) 편집기가 실행된다.&lt;/li&gt;&lt;/ul&gt;&lt;ul class=&quot;bulleted-list&quot; id=&quot;45d68ef1-845d-4005-9ae7-0e2b585a30f8&quot;&gt;&lt;li style=&quot;list-style-type:disc&quot;&gt;만약 등록된 크론탭이 없다면 새로 파일을 만들어 주고, 있다면 편집하도록 해준다.&lt;/li&gt;&lt;/ul&gt;&lt;ul class=&quot;bulleted-list&quot; id=&quot;e054e2db-207e-4385-968b-12045b61b5e2&quot;&gt;&lt;li style=&quot;list-style-type:disc&quot;&gt;만약 등록이 안된다면, 관리자 권한으로 실행해본다. &lt;code&gt;sudo crontab -e&lt;/code&gt;&lt;/li&gt;&lt;/ul&gt;&lt;div class=&quot;image notion-img&quot; id=&quot;c9b03906-4897-464a-832c-e10a4e0a66d7&quot;&gt;&lt;figure class=&quot;imageblock alignCenter&quot; width=&quot;714&quot; height=&quot;481&quot; data-origin-width=&quot;714&quot; data-origin-height=&quot;481&quot; data-ke-mobilestyle=&quot;widthOrigin&quot; filename=&quot;img.png&quot; filemime=&quot;image/png&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/bfgCX1/btrJika9cT1/t1yrRxYQjKVzQ59jwHLsl0/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/bfgCX1/btrJika9cT1/t1yrRxYQjKVzQ59jwHLsl0/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/bfgCX1/btrJika9cT1/t1yrRxYQjKVzQ59jwHLsl0/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FbfgCX1%2FbtrJika9cT1%2Ft1yrRxYQjKVzQ59jwHLsl0%2Fimg.png&quot; width=&quot;714&quot; height=&quot;481&quot; data-origin-width=&quot;714&quot; data-origin-height=&quot;481&quot; data-ke-mobilestyle=&quot;widthOrigin&quot; filename=&quot;img.png&quot; filemime=&quot;image/png&quot; onerror=&quot;this.onerror=null; this.src='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png'; this.srcset='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png';&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;/div&gt;&lt;/li&gt;&lt;/ol&gt;&lt;ol class=&quot;numbered-list&quot; id=&quot;8967a6c7-591b-408c-b2af-8e36bea9301d&quot; start=&quot;3&quot; type=&quot;1&quot;&gt;&lt;li&gt;vi 편집기에서, &lt;code&gt;i&lt;/code&gt; 혹은 &lt;code&gt;a&lt;/code&gt;를 눌러 작성을 시작한다.&lt;ul class=&quot;bulleted-list&quot; id=&quot;d1e83e25-8620-43d4-b58f-7d291bff5df1&quot;&gt;&lt;li style=&quot;list-style-type:disc&quot;&gt;&lt;code&gt;i&lt;/code&gt; : 현재 커서 위치부터 입력 시작
&lt;mark class=&quot;highlight-gray&quot;&gt;(이걸로 하고 키보드로 커서를 움직이면 됩니다)&lt;/mark&gt;&lt;/li&gt;&lt;/ul&gt;&lt;ul class=&quot;bulleted-list&quot; id=&quot;7dae3c4a-637c-41b3-b0f5-252be26b38af&quot;&gt;&lt;li style=&quot;list-style-type:disc&quot;&gt;&lt;code&gt;a&lt;/code&gt; : 현재 커서의 위치 다음 칸부터 입력&lt;div class=&quot;image notion-img&quot; id=&quot;53f40dfa-e90e-4b4f-95ba-5762c196a11d&quot;&gt;&lt;figure class=&quot;imageblock alignCenter&quot; width=&quot;602&quot; height=&quot;109&quot; data-origin-width=&quot;602&quot; data-origin-height=&quot;109&quot; data-ke-mobilestyle=&quot;widthOrigin&quot; filename=&quot;img.png&quot; filemime=&quot;image/png&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/vszMM/btrJmvPKrWc/f3agcvLgFUbeoUIbG4d5rK/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/vszMM/btrJmvPKrWc/f3agcvLgFUbeoUIbG4d5rK/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/vszMM/btrJmvPKrWc/f3agcvLgFUbeoUIbG4d5rK/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FvszMM%2FbtrJmvPKrWc%2Ff3agcvLgFUbeoUIbG4d5rK%2Fimg.png&quot; width=&quot;602&quot; height=&quot;109&quot; data-origin-width=&quot;602&quot; data-origin-height=&quot;109&quot; data-ke-mobilestyle=&quot;widthOrigin&quot; filename=&quot;img.png&quot; filemime=&quot;image/png&quot; onerror=&quot;this.onerror=null; this.src='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png'; this.srcset='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png';&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;/div&gt;&lt;/li&gt;&lt;/ul&gt;&lt;/li&gt;&lt;/ol&gt;&lt;ol class=&quot;numbered-list&quot; id=&quot;f460ab81-218e-40ca-99d2-5eef851c17f3&quot; start=&quot;4&quot; type=&quot;1&quot;&gt;&lt;li&gt;&lt;code&gt;{시간 셋팅} {파이썬 경로} {실행할 파일 경로} {(선택)로그 경로}&lt;/code&gt; 의 형태로 작성한다.&lt;figure class=&quot;block-color-gray_background callout&quot; id=&quot;552f22ab-536b-4da3-bca2-304ce90e5f57&quot; style=&quot;white-space:pre-wrap;display:flex&quot;&gt;&lt;div style=&quot;font-size:1.5em&quot;&gt;&lt;span class=&quot;icon&quot;&gt;⚠️&lt;/span&gt;&lt;/div&gt;&lt;div style=&quot;width:100%&quot;&gt;&lt;strong&gt;크론탭&lt;/strong&gt;은 공백을 기준으로 구분되며, 한 줄엔 하나의 명령어(cron job, 행동)만 입력해야 한다.

&lt;code&gt;#&lt;/code&gt; 는 vi 편집기에서 사용하는 주석이다!&lt;/div&gt;&lt;/figure&gt;&lt;ul class=&quot;bulleted-list&quot; id=&quot;fb783505-e91f-462d-9545-482cab718540&quot;&gt;&lt;li style=&quot;list-style-type:disc&quot;&gt;{&lt;strong&gt;시간 셋팅}&lt;/strong&gt; =&lt;strong&gt; &lt;/strong&gt;&lt;code&gt;{분} {시} {일} {월} {요일}&lt;/code&gt;&lt;pre class=&quot;code Shell&quot; id=&quot;b5b56ed6-9409-448f-830c-69d2a15c040d&quot;&gt;&lt;code&gt;*/3 * * * * : 매일 3분 간격으로 실행
*/10 * * * * : 매일 10분 간격으로 실행 (00:10, 00:20, 00:30 ..)
30 10 * * * : 매일 오전 10시 30분마다 실행&lt;/code&gt;&lt;/pre&gt;&lt;ul class=&quot;bulleted-list&quot; id=&quot;3dd966fe-ef40-47a2-bc2c-c0b1eb6376a7&quot;&gt;&lt;li style=&quot;list-style-type:circle&quot;&gt;크론탭을 생성해주는 사이트를 활용하여, 크론탭 주기를 설정하면 편하다.
&lt;a href=&quot;https://crontab.guru/&quot;&gt;&lt;strong&gt;[바로가기]&lt;/strong&gt;&lt;/a&gt;&lt;figure id=&quot;db48aa09-15ee-4552-a457-d3433467d176&quot;&gt;&lt;a class=&quot;bookmark source&quot; href=&quot;https://23log.tistory.com/172&quot;&gt;&lt;div class=&quot;bookmark-info&quot;&gt;&lt;div class=&quot;bookmark-text&quot;&gt;&lt;div class=&quot;bookmark-title&quot;&gt;Crontab(크론탭), Spring 스케줄러 Cron 생성 사이트 모음&lt;/div&gt;&lt;div class=&quot;bookmark-description&quot;&gt;크론탭 구루는, 간결한 UI로 크론탭 주기를 생성해주는 사이트입니다. 크론메이커는 크론탭 → 의도으로 가는 흐름이 아닌, 의도 → 크론탭을 생성해주는 방식입니다. 해당 사이트는 MAC의 crontab이 아닌, Spring 스케쥴러에서 활용되는 형식입니다. Spring 스케줄러에서 Cron을 사용하셔야 하는 분들이 있다면, 참고하시면 좋을 것 같습니다. 각 영역 별로 구분자가 무엇을 의미하는지도 나와있어서, 익히며 만들기에도 좋습니다.&lt;/div&gt;&lt;/div&gt;&lt;div class=&quot;bookmark-href&quot;&gt;&lt;img class=&quot;icon bookmark-icon&quot; src=&quot;https://tistory4.daumcdn.net/tistory/3064062/3e945573a770462486ce76d7ee97e078&quot;/&gt;https://23log.tistory.com/172&lt;/div&gt;&lt;/div&gt;&lt;img class=&quot;bookmark-image&quot; src=&quot;https://img1.daumcdn.net/thumb/R800x0/?scode=mtistory2&amp;amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FEnwyc%2FbtrJlVueq0v%2FSO05kbk6nRYcv45VYWogc1%2Fimg.png&quot;/&gt;&lt;/a&gt;&lt;/figure&gt;&lt;/li&gt;&lt;/ul&gt;&lt;/li&gt;&lt;/ul&gt;&lt;ul class=&quot;bulleted-list&quot; id=&quot;7675ea26-b746-4b7c-81c0-eeefce70bf2e&quot;&gt;&lt;li style=&quot;list-style-type:disc&quot;&gt;{&lt;strong&gt;파이썬 경로}&lt;/strong&gt;&lt;ul class=&quot;bulleted-list&quot; id=&quot;d30e169f-2d73-4d69-8f1c-ebfbe3d8c8e2&quot;&gt;&lt;li style=&quot;list-style-type:circle&quot;&gt;절대 경로로 입력한다.&lt;/li&gt;&lt;/ul&gt;&lt;ul class=&quot;bulleted-list&quot; id=&quot;e0ff5d90-3713-4b24-9b35-2e504d46b483&quot;&gt;&lt;li style=&quot;list-style-type:circle&quot;&gt;터미널에 &lt;code&gt;which python3&lt;/code&gt; 를 입력하여, 경로를 반환받아 활용한다.&lt;div class=&quot;image notion-img&quot; id=&quot;b06a9d35-a741-4880-90d9-daa6087c1c44&quot;&gt;&lt;figure class=&quot;imageblock alignCenter&quot; width=&quot;311&quot; height=&quot;33&quot; data-origin-width=&quot;311&quot; data-origin-height=&quot;33&quot; data-ke-mobilestyle=&quot;widthOrigin&quot; filename=&quot;img.png&quot; filemime=&quot;image/png&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/Fu1j4/btrJlV2dl8s/ucvauKmKmUm3RoHX2t9Ijk/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/Fu1j4/btrJlV2dl8s/ucvauKmKmUm3RoHX2t9Ijk/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/Fu1j4/btrJlV2dl8s/ucvauKmKmUm3RoHX2t9Ijk/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FFu1j4%2FbtrJlV2dl8s%2FucvauKmKmUm3RoHX2t9Ijk%2Fimg.png&quot; width=&quot;311&quot; height=&quot;33&quot; data-origin-width=&quot;311&quot; data-origin-height=&quot;33&quot; data-ke-mobilestyle=&quot;widthOrigin&quot; filename=&quot;img.png&quot; filemime=&quot;image/png&quot; onerror=&quot;this.onerror=null; this.src='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png'; this.srcset='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png';&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;/div&gt;&lt;/li&gt;&lt;/ul&gt;&lt;/li&gt;&lt;/ul&gt;&lt;ul class=&quot;bulleted-list&quot; id=&quot;7b21ec00-4007-4b49-b072-dc368d9f13b1&quot;&gt;&lt;li style=&quot;list-style-type:disc&quot;&gt;{&lt;strong&gt;실행할 파일 경로}&lt;/strong&gt;&lt;ul class=&quot;bulleted-list&quot; id=&quot;ac6e259f-978e-42bf-9e3b-4b33e990956d&quot;&gt;&lt;li style=&quot;list-style-type:circle&quot;&gt;절대 경로로 입력한다.&lt;/li&gt;&lt;/ul&gt;&lt;/li&gt;&lt;/ul&gt;&lt;ul class=&quot;bulleted-list&quot; id=&quot;285898f7-202a-4929-900e-03f6d1cd03d7&quot;&gt;&lt;li style=&quot;list-style-type:disc&quot;&gt;&lt;strong&gt;{로그 경로 2&amp;gt;&amp;amp;1}&lt;/strong&gt;&lt;pre class=&quot;code Bash&quot; id=&quot;2fc40a98-d922-4e37-91dd-dfb9b38d6887&quot;&gt;&lt;code&gt;&amp;gt; {저장할 로그파일 경로} 2&amp;gt;&amp;amp;1

# &amp;gt; : 하나의 로그를 갱신하여 기록
# &amp;gt;&amp;gt; : 계속 파일을 생성하며 누적할 경우&lt;/code&gt;&lt;/pre&gt;&lt;ul class=&quot;bulleted-list&quot; id=&quot;afdf7688-8af9-4861-9589-e6890404cdc1&quot;&gt;&lt;li style=&quot;list-style-type:circle&quot;&gt;저는 하루에 2번 실행되는 결과를 확인하기 위해, &lt;code&gt;&amp;gt;&amp;gt;&lt;/code&gt; 계속 누적되는 형식으로 하고자 하였습니다.&lt;/li&gt;&lt;/ul&gt;&lt;ul class=&quot;bulleted-list&quot; id=&quot;e793b02e-a490-4d54-94fb-ac70198c5341&quot;&gt;&lt;li style=&quot;list-style-type:circle&quot;&gt;파일명을 &lt;code&gt;log_`date +\%Y\%m\%d`_`date +\%H\%M\%S`.log&lt;/code&gt; 으로 설정하였고, &lt;code&gt;log_20220809_231800.log&lt;/code&gt; 이런 형식의 로그 파일이 생성되었습니다.&lt;/li&gt;&lt;/ul&gt;&lt;/li&gt;&lt;/ul&gt;&lt;/li&gt;&lt;/ol&gt;&lt;ol class=&quot;numbered-list&quot; id=&quot;2eb4f912-d787-4131-a345-6d0271f0e952&quot; start=&quot;5&quot; type=&quot;1&quot;&gt;&lt;li&gt;테스트를 위해, 아래처럼 크론탭을 생성하였다.&lt;pre class=&quot;code Bash&quot; id=&quot;b876d86a-e796-4ce1-9a44-a32b69669a6c&quot;&gt;&lt;code&gt;#테스트 크론탭(10분 간격으로 실행 테스트)
10 * * * * /Users/jacob/opt/anaconda3/bin/python3 /Users/jacob/{경로}/main.py &amp;gt;&amp;gt; /Users/jacob/{경로}/logs/log_`date +\%Y\%m\%d`_`date +\%H\%M\%S`.log 2&amp;gt;&amp;amp;1
# {시간 셋팅} {파이썬 경로} {실행할 파일 경로} &amp;gt;&amp;gt; {로그 경로/로그명.log 2&amp;gt;&amp;amp;1}&lt;/code&gt;&lt;/pre&gt;&lt;/li&gt;&lt;/ol&gt;&lt;ol class=&quot;numbered-list&quot; id=&quot;ecc9f4f8-771f-4270-b44f-8ca777753fbc&quot; start=&quot;6&quot; type=&quot;1&quot;&gt;&lt;li&gt;작성을 완료한 이후, vi 편집기를 저장하여 빠져나와야 한다.&lt;ol class=&quot;numbered-list&quot; id=&quot;fc44e74e-8853-4df7-8782-522d61fbad42&quot; start=&quot;1&quot; type=&quot;a&quot;&gt;&lt;li&gt;&lt;code&gt;esc&lt;/code&gt; 키를 눌러, 편집 모드에서 나온다.&lt;/li&gt;&lt;/ol&gt;&lt;ol class=&quot;numbered-list&quot; id=&quot;9c5823b8-5681-4aa8-bda2-681dc7e6896d&quot; start=&quot;2&quot; type=&quot;a&quot;&gt;&lt;li&gt;&lt;code&gt;:wq&lt;/code&gt; 를 입력하여, 저장 후 나온다.&lt;/li&gt;&lt;/ol&gt;&lt;/li&gt;&lt;/ol&gt;&lt;ol class=&quot;numbered-list&quot; id=&quot;1e8289c1-127b-497a-b344-45a23cfb47a2&quot; start=&quot;7&quot; type=&quot;1&quot;&gt;&lt;li&gt;&lt;code&gt;crontab -l&lt;/code&gt; : 등록되어 있는 크론탭 리스트를 확인해본다.&lt;/li&gt;&lt;/ol&gt;&lt;ol class=&quot;numbered-list&quot; id=&quot;b00d8fdf-e5d4-4809-8e4a-327e62edaeaa&quot; start=&quot;8&quot; type=&quot;1&quot;&gt;&lt;li&gt;지정한 시간이 되면 동작한다. 로그까지 확인해보자.&lt;/li&gt;&lt;/ol&gt;&lt;h2 class=&quot;&quot; id=&quot;18d78b0d-fedf-4ffe-a9b2-be667f491593&quot;&gt;실전! 상황에 맞추어 작성하기&lt;/h2&gt;&lt;ul class=&quot;bulleted-list&quot; id=&quot;8f72d40e-6cad-41db-8c1f-5fb6bf973c83&quot;&gt;&lt;li style=&quot;list-style-type:disc&quot;&gt;나는 &lt;code&gt;매일 저녁 10시&lt;/code&gt;에 티스토리로 내가 작성한 글을 자동으로 비공개 &lt;code&gt;발행&lt;/code&gt;해주고,
&lt;code&gt;매일 아침 8시&lt;/code&gt;에 발행한 글을 공개 &lt;code&gt;발행&lt;/code&gt;하는 크론탭을 생성하고자 한다.&lt;ul class=&quot;bulleted-list&quot; id=&quot;e718d492-11c7-4fdb-bf4f-9faef49592bf&quot;&gt;&lt;li style=&quot;list-style-type:circle&quot;&gt;매일 22시에 &lt;code&gt;main.py&lt;/code&gt; 실행 → &lt;code&gt;0 22 * * *&lt;/code&gt;
매일 08시에 &lt;code&gt;main.py&lt;/code&gt; 실행 → &lt;code&gt;0 8 * * *&lt;/code&gt;&lt;/li&gt;&lt;/ul&gt;&lt;/li&gt;&lt;/ul&gt;&lt;pre class=&quot;code Bash&quot; id=&quot;f5499734-40d6-4ccf-9ae2-75e35c7dddf9&quot;&gt;&lt;code&gt;#매일 08시에 티스토리 비공개 발행
0 8 * * * /Users/jacob/opt/anaconda3/bin/python3 /Users/jacob/{경로}/main.py &amp;gt;&amp;gt; /Users/jacob/{경로}/logs/log_`date +\%Y\%m\%d`_`date +\%H\%M\%S`.log 2&amp;gt;&amp;amp;1

#매일 22시에 티스토리 공개 발행
0 22 * * * /Users/jacob/opt/anaconda3/bin/python3 /Users/jacob/{경로}/main.py &amp;gt;&amp;gt; /Users/jacob/{경로}/logs/log_`date +\%Y\%m\%d`_`date +\%H\%M\%S`.log 2&amp;gt;&amp;amp;1&lt;/code&gt;&lt;/pre&gt;&lt;div class=&quot;image notion-img&quot; id=&quot;6fb69441-ee50-4657-9fc0-bb634680a875&quot;&gt;&lt;figure class=&quot;imageblock alignCenter&quot; width=&quot;806&quot; height=&quot;335&quot; data-origin-width=&quot;806&quot; data-origin-height=&quot;335&quot; data-ke-mobilestyle=&quot;widthOrigin&quot; filename=&quot;img.png&quot; filemime=&quot;image/png&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/ccxFfa/btrJmxmvCQ8/hmrFDpuN6d1BcuW5VlyXbk/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/ccxFfa/btrJmxmvCQ8/hmrFDpuN6d1BcuW5VlyXbk/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/ccxFfa/btrJmxmvCQ8/hmrFDpuN6d1BcuW5VlyXbk/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FccxFfa%2FbtrJmxmvCQ8%2FhmrFDpuN6d1BcuW5VlyXbk%2Fimg.png&quot; width=&quot;806&quot; height=&quot;335&quot; data-origin-width=&quot;806&quot; data-origin-height=&quot;335&quot; data-ke-mobilestyle=&quot;widthOrigin&quot; filename=&quot;img.png&quot; filemime=&quot;image/png&quot; onerror=&quot;this.onerror=null; this.src='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png'; this.srcset='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png';&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;figcaption&gt;로그를 확인해보면 파이썬 실행 결과가 적혀있음을 확인 할 수 있다! 만세!&lt;/figcaption&gt;&lt;/div&gt;&lt;p class=&quot;&quot; id=&quot;194ddec7-75d8-4edb-9b41-3a0616ec5a58&quot;&gt;
&lt;/p&gt;&lt;h2 class=&quot;&quot; id=&quot;24493056-9fd8-48f6-a070-167afc58af79&quot;&gt;에러 정리&lt;/h2&gt;&lt;ol class=&quot;numbered-list&quot; id=&quot;657190fa-d014-438e-8706-6982bbcc99cc&quot; start=&quot;1&quot; type=&quot;1&quot;&gt;&lt;li&gt;로그에서, &lt;code&gt;Permission denied&lt;/code&gt; 가 나온 경우&lt;/li&gt;&lt;/ol&gt;&lt;ol class=&quot;numbered-list&quot; id=&quot;49cec4cc-509a-44fe-9f42-8bb4331d2a5e&quot; start=&quot;2&quot; type=&quot;1&quot;&gt;&lt;li&gt;로그에서, &lt;code&gt;Operation not permitted&lt;/code&gt; 가 나온 경우&lt;/li&gt;&lt;/ol&gt;&lt;ol class=&quot;numbered-list&quot; id=&quot;c5134732-9817-44ff-b38e-08ac1e90eabd&quot; start=&quot;3&quot; type=&quot;1&quot;&gt;&lt;li&gt;파이썬 모듈을 찾지 못하는 경우 &lt;code&gt;ModuleNotFoundError&lt;/code&gt;&lt;/li&gt;&lt;/ol&gt;&lt;figure id=&quot;b20377c4-0695-4e21-b483-ac9557b7a20e&quot;&gt;&lt;a class=&quot;bookmark source&quot; href=&quot;https://23log.tistory.com/171&quot;&gt;&lt;div class=&quot;bookmark-info&quot;&gt;&lt;div class=&quot;bookmark-text&quot;&gt;&lt;div class=&quot;bookmark-title&quot;&gt;[MAC] Crontab 오류 정리(Operation not permitted, Permission denied)&lt;/div&gt;&lt;div class=&quot;bookmark-description&quot;&gt;  case1 오류가 발생했다면, case2까지 설정해주어야 크론탭이 정상 동작합니다! :D case1) Permission denied 발생 원인 : 해당 파일의 실행 권한이 없기 때문! 사람이 아닌 컴퓨터가 파일을 실행시키는 것이기..&lt;/div&gt;&lt;/div&gt;&lt;div class=&quot;bookmark-href&quot;&gt;&lt;img class=&quot;icon bookmark-icon&quot; src=&quot;https://tistory4.daumcdn.net/tistory/3064062/3e945573a770462486ce76d7ee97e078&quot;/&gt;https://23log.tistory.com/171&lt;/div&gt;&lt;/div&gt;&lt;img class=&quot;bookmark-image&quot; src=&quot;https://img1.daumcdn.net/thumb/R800x0/?scode=mtistory2&amp;amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FdDpEu4%2FbtrJk3s3lAi%2Fokzw47QcBVI9FqovnkgXd1%2Fimg.png&quot;/&gt;&lt;/a&gt;&lt;/figure&gt;&lt;ul class=&quot;bulleted-list&quot; id=&quot;5a87b3de-b019-421e-908f-24aa19dfa199&quot;&gt;&lt;li style=&quot;list-style-type:disc&quot;&gt;모두 위 포스팅으로 정리해두었습니다! :D&lt;/li&gt;&lt;/ul&gt;&lt;h1 class=&quot;&quot; id=&quot;7b2d7760-cca5-4ee5-96e2-d350c683678a&quot;&gt;회고&lt;/h1&gt;&lt;figure class=&quot;callout&quot; id=&quot;b1b948eb-e321-4a98-9784-f4ca91c5edf7&quot; style=&quot;white-space:pre-wrap;display:flex&quot;&gt;&lt;div style=&quot;font-size:1.5em&quot;&gt;&lt;span class=&quot;icon&quot;&gt; &lt;/span&gt;&lt;/div&gt;&lt;div style=&quot;width:100%&quot;&gt;이커머스 업무를 하다보면, 다양한 프로세스 등을 보게 됩니다. 그때 스프링 배치를 처음 보게 되어, 호기심에 이것저것 살펴보다 처음으로 &lt;code&gt;Cron&lt;/code&gt; 이란 것을 알게되었습니다. 주로 프론트엔드 단을 맡고 있어서, 직접 배치를 짜거나 스켸줄러를 설정하거나 하진 않았는데.

파이썬 자동 실행 환경을 구성하다가 그때 보았던 크론을 쓰게 될 줄은 몰랐습니다.. 그런데 막상 하나씩 찾아가며 해보니 너무 재밌는 경험이네요.
역시, 사람은 경험을 해봐야 하는 것 같습니다  &lt;/div&gt;&lt;/figure&gt;&lt;figure class=&quot;callout&quot; id=&quot;68d25e82-b17e-4893-8ae7-1720bab6a642&quot; style=&quot;white-space:pre-wrap;display:flex&quot;&gt;&lt;div style=&quot;font-size:1.5em&quot;&gt;&lt;span class=&quot;icon&quot;&gt; &lt;/span&gt;&lt;/div&gt;&lt;div style=&quot;width:100%&quot;&gt;크론이 어떻게 구성되는지 기본 원리나 설정 방식을 이해하고, 빠르게 크론탭 생성 사이트를 활용해서 내가 원하는 것을 만들어내서 시간을 많이 절약할 수 있었습니다.
역시 새로운 것을 활용할 땐, &lt;code&gt;기본 개념을 이해하고, 내가 원하는 것을 찾아내어 빠르게 적용하는 방식&lt;/code&gt; 을 취하는게 효율적이라는 생각을 하며, 오늘을 마무리합니다!&lt;/div&gt;&lt;/figure&gt;&lt;h1 class=&quot;&quot; id=&quot;4c27669d-8671-4640-872e-9914547f03bb&quot;&gt;참고&lt;/h1&gt;&lt;ul class=&quot;bulleted-list&quot; id=&quot;860b5a01-39f9-44f0-b00e-ed8a0f7ac131&quot;&gt;&lt;li style=&quot;list-style-type:disc&quot;&gt;&lt;a href=&quot;https://great-developer.tistory.com/218&quot;&gt;https://great-developer.tistory.com/218&lt;/a&gt;&lt;/li&gt;&lt;/ul&gt;&lt;ul class=&quot;bulleted-list&quot; id=&quot;3740a4f6-a01f-4700-810a-10a4a39ee9da&quot;&gt;&lt;li style=&quot;list-style-type:disc&quot;&gt;&lt;a href=&quot;https://f-dever-error-log.tistory.com/29&quot;&gt;https://f-dever-error-log.tistory.com/29&lt;/a&gt;&lt;/li&gt;&lt;/ul&gt;&lt;ul class=&quot;bulleted-list&quot; id=&quot;1f8b7042-4942-4262-b55d-1bdc0f0a0e61&quot;&gt;&lt;li style=&quot;list-style-type:disc&quot;&gt;&lt;a href=&quot;https://miniweb4u.tistory.com/147&quot;&gt;https://miniweb4u.tistory.com/147&lt;/a&gt;&lt;/li&gt;&lt;/ul&gt;&lt;ul class=&quot;bulleted-list&quot; id=&quot;8f212913-9257-48cd-b73e-1591da6fe54d&quot;&gt;&lt;li style=&quot;list-style-type:disc&quot;&gt;&lt;a href=&quot;https://velog.io/@jay2u8809/Crontab%ED%81%AC%EB%A1%A0%ED%83%AD-%EC%8B%9C%EA%B0%84-%EC%84%A4%EC%A0%95&quot;&gt;https://velog.io/@jay2u8809/Crontab크론탭-시간-설정&lt;/a&gt;&lt;/li&gt;&lt;/ul&gt;&lt;ul class=&quot;bulleted-list&quot; id=&quot;3407c948-9859-494a-bf66-c1a2e886b6fd&quot;&gt;&lt;li style=&quot;list-style-type:disc&quot;&gt;&lt;a href=&quot;https://happist.com/553442/%EC%84%9C%EB%B2%84%EC%97%90%EC%84%9C-%EC%9E%90%EB%8F%99-%EC%8B%A4%ED%96%89%EC%9D%84-%EA%B0%80%EB%8A%A5%EC%BC%80-%ED%95%B4%EC%A3%BC%EB%8A%94-crontab%ED%81%AC%EB%A1%A0%ED%83%AD-%EC%84%A4%EC%A0%95&quot;&gt;https://happist.com/553442/서버에서-자동-실행을-가능케-해주는-crontab크론탭-설정&lt;/a&gt;&lt;/li&gt;&lt;/ul&gt;&lt;/div&gt;&lt;/article&gt;&lt;/body&gt;</description>
      <category>toy project/notion-to-tistory</category>
      <category>cron</category>
      <category>MAC</category>
      <category>python</category>
      <category>리눅스</category>
      <category>맥북</category>
      <author>3sammy</author>
      <guid isPermaLink="true">https://23log.tistory.com/174</guid>
      <comments>https://23log.tistory.com/174#entry174comment</comments>
      <pubDate>Wed, 10 Aug 2022 10:00:38 +0900</pubDate>
    </item>
    <item>
      <title>Crontab(크론탭), Spring 스케줄러 Cron 생성 사이트 모음</title>
      <link>https://23log.tistory.com/172</link>
      <description>&lt;body&gt;&lt;article class=&quot;page sans Notion&quot; id=&quot;efb3a230-1eba-4f82-a362-db9afff10971&quot;&gt;&lt;div class=&quot;page-body Tistory&quot;&gt;&lt;h1 class=&quot;&quot; id=&quot;e513b41d-cf5d-415e-aeef-60e00625cef9&quot;&gt;  crontab.guru&lt;/h1&gt;&lt;div class=&quot;image notion-img&quot; id=&quot;584d2e14-1fad-41d4-9679-05640d8de845&quot;&gt;&lt;figure class=&quot;imageblock alignCenter&quot; width=&quot;1254&quot; height=&quot;1069&quot; data-origin-width=&quot;1254&quot; data-origin-height=&quot;1069&quot; data-ke-mobilestyle=&quot;widthOrigin&quot; filename=&quot;img.png&quot; filemime=&quot;image/png&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/wuPNE/btrJloKtozN/ghkM6hHwcbdPMZM8C264Fk/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/wuPNE/btrJloKtozN/ghkM6hHwcbdPMZM8C264Fk/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/wuPNE/btrJloKtozN/ghkM6hHwcbdPMZM8C264Fk/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FwuPNE%2FbtrJloKtozN%2FghkM6hHwcbdPMZM8C264Fk%2Fimg.png&quot; width=&quot;1254&quot; height=&quot;1069&quot; data-origin-width=&quot;1254&quot; data-origin-height=&quot;1069&quot; data-ke-mobilestyle=&quot;widthOrigin&quot; filename=&quot;img.png&quot; filemime=&quot;image/png&quot; onerror=&quot;this.onerror=null; this.src='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png'; this.srcset='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png';&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;/div&gt;&lt;figure id=&quot;42534388-3822-4809-8de5-3dace3ae1c49&quot;&gt;&lt;a class=&quot;bookmark source&quot; href=&quot;https://crontab.guru/&quot;&gt;&lt;div class=&quot;bookmark-info&quot;&gt;&lt;div class=&quot;bookmark-text&quot;&gt;&lt;div class=&quot;bookmark-title&quot;&gt;Crontab.guru - The cron schedule expression editor&lt;/div&gt;&lt;div class=&quot;bookmark-description&quot;&gt;The quick and simple editor for cron schedule expressions by Cronitor We created Cronitor because cron itself can't alert you if your jobs fail or never start. Cronitor is easy to integrate and provides you with instant alerts when things go wrong. Learn more about cron job monitoring.&lt;/div&gt;&lt;/div&gt;&lt;div class=&quot;bookmark-href&quot;&gt;&lt;img class=&quot;icon bookmark-icon&quot; src=&quot;https://crontab.guru/favicon.ico&quot;/&gt;https://crontab.guru/&lt;/div&gt;&lt;/div&gt;&lt;/a&gt;&lt;/figure&gt;&lt;ul class=&quot;bulleted-list&quot; id=&quot;6fba96d7-18a6-4e98-8d19-65d3a3b13f37&quot;&gt;&lt;li style=&quot;list-style-type:disc&quot;&gt;크론탭 구루는, 간결한 UI로 크론탭 주기를 생성해주는 사이트입니다.&lt;/li&gt;&lt;/ul&gt;&lt;ul class=&quot;bulleted-list&quot; id=&quot;f5ea63e1-b004-4a7b-9cc3-aff3cb937b65&quot;&gt;&lt;li style=&quot;list-style-type:disc&quot;&gt;각 영역 별로 구분자가 무엇을 의미하는지도 나와있어서, 익히며 만들기에도 좋습니다.&lt;/li&gt;&lt;/ul&gt;&lt;ul class=&quot;bulleted-list&quot; id=&quot;593eaff4-7c0d-4d31-98db-23ad0d760d86&quot;&gt;&lt;li style=&quot;list-style-type:disc&quot;&gt;자신이 설정한 크론탭 주기가 언제인지 문장으로 보여주며 그 밑에 &lt;code&gt;next&lt;/code&gt; 텍스트를 누르면, 어떤 주기로 실행되는지 예시까지 보여주고 있어, 이해가 수월합니다.&lt;/li&gt;&lt;/ul&gt;&lt;ul class=&quot;bulleted-list&quot; id=&quot;18670ed1-c961-4b86-b221-e6e1b5fbb0cd&quot;&gt;&lt;li style=&quot;list-style-type:disc&quot;&gt;재밌는 점은, 크론탭에 커서를 찍으면 해당 부분이 문장에서 어디인지 보여준다는 점입니다.&lt;div class=&quot;image notion-img&quot; id=&quot;17449867-bb00-4547-987a-5e06a1829044&quot;&gt;&lt;figure class=&quot;imageblock alignCenter&quot; width=&quot;454&quot; height=&quot;242&quot; data-origin-width=&quot;454&quot; data-origin-height=&quot;242&quot; data-ke-mobilestyle=&quot;widthOrigin&quot; filename=&quot;img.png&quot; filemime=&quot;image/png&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/cMMmKL/btrJn53XYWw/Ou8niM6019OxFldljZNhx0/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/cMMmKL/btrJn53XYWw/Ou8niM6019OxFldljZNhx0/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/cMMmKL/btrJn53XYWw/Ou8niM6019OxFldljZNhx0/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FcMMmKL%2FbtrJn53XYWw%2FOu8niM6019OxFldljZNhx0%2Fimg.png&quot; width=&quot;454&quot; height=&quot;242&quot; data-origin-width=&quot;454&quot; data-origin-height=&quot;242&quot; data-ke-mobilestyle=&quot;widthOrigin&quot; filename=&quot;img.png&quot; filemime=&quot;image/png&quot; onerror=&quot;this.onerror=null; this.src='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png'; this.srcset='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png';&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;/div&gt;&lt;/li&gt;&lt;/ul&gt;&lt;p class=&quot;&quot; id=&quot;2ce48112-726a-4bcd-833a-a033af16df2a&quot;&gt;
&lt;/p&gt;&lt;h1 class=&quot;&quot; id=&quot;7490e2a1-58a1-404a-885a-eddcd33402f8&quot;&gt;CronMaker&lt;/h1&gt;&lt;div class=&quot;image notion-img&quot; id=&quot;1f85ab20-5324-479c-83d6-20cce344d9b1&quot;&gt;&lt;figure class=&quot;imageblock alignCenter&quot; width=&quot;1132&quot; height=&quot;960&quot; data-origin-width=&quot;1132&quot; data-origin-height=&quot;960&quot; data-ke-mobilestyle=&quot;widthOrigin&quot; filename=&quot;img.png&quot; filemime=&quot;image/png&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/DYyyr/btrJn6V6URp/sOL6blhMRH1TOI7zqnuwL1/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/DYyyr/btrJn6V6URp/sOL6blhMRH1TOI7zqnuwL1/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/DYyyr/btrJn6V6URp/sOL6blhMRH1TOI7zqnuwL1/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FDYyyr%2FbtrJn6V6URp%2FsOL6blhMRH1TOI7zqnuwL1%2Fimg.png&quot; width=&quot;1132&quot; height=&quot;960&quot; data-origin-width=&quot;1132&quot; data-origin-height=&quot;960&quot; data-ke-mobilestyle=&quot;widthOrigin&quot; filename=&quot;img.png&quot; filemime=&quot;image/png&quot; onerror=&quot;this.onerror=null; this.src='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png'; this.srcset='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png';&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;/div&gt;&lt;figure id=&quot;7f802b49-ed73-411d-b1ba-685fa25f7b4c&quot;&gt;&lt;a class=&quot;bookmark source&quot; href=&quot;http://www.cronmaker.com/?0&quot;&gt;&lt;div class=&quot;bookmark-info&quot;&gt;&lt;div class=&quot;bookmark-text&quot;&gt;&lt;div class=&quot;bookmark-title&quot;&gt;CronMaker&lt;/div&gt;&lt;div class=&quot;bookmark-description&quot;&gt;CronMaker is a simple application which helps you to build cron expressions. CronMaker uses Quartz open source scheduler. Generated expressions are based on Quartz cron format. For your feedback send email to cronmaker@cronitor.io&lt;/div&gt;&lt;/div&gt;&lt;div class=&quot;bookmark-href&quot;&gt;http://www.cronmaker.com/?0&lt;/div&gt;&lt;/div&gt;&lt;/a&gt;&lt;/figure&gt;&lt;ul class=&quot;bulleted-list&quot; id=&quot;7fa0a28d-7c78-4134-bf1b-0baa021615e8&quot;&gt;&lt;li style=&quot;list-style-type:disc&quot;&gt;크론메이커는 &lt;code&gt;크론탭 → 의도&lt;/code&gt;으로 가는 흐름이 아닌, &lt;code&gt;의도 → 크론탭&lt;/code&gt;을 생성해주는 방식입니다.&lt;/li&gt;&lt;/ul&gt;&lt;ul class=&quot;bulleted-list&quot; id=&quot;63b1a605-3442-46fd-8192-a0c86facd9fc&quot;&gt;&lt;li style=&quot;list-style-type:disc&quot;&gt;해당 사이트는 MAC의 crontab이 아닌, &lt;code&gt;Spring 스케쥴러&lt;/code&gt;에서 활용되는 형식입니다.&lt;figure class=&quot;block-color-gray_background callout&quot; id=&quot;d89b891d-7d6e-4140-a8e2-0c030ac145e9&quot; style=&quot;white-space:pre-wrap;display:flex&quot;&gt;&lt;div style=&quot;font-size:1.5em&quot;&gt;&lt;span class=&quot;icon&quot;&gt; &lt;/span&gt;&lt;/div&gt;&lt;div style=&quot;width:100%&quot;&gt;자세히는 모르지만 … 
- &lt;code&gt;crontab.guru&lt;/code&gt; : 5자리 크론탭 생성, 리눅스 환경(mac)에서 사용
- &lt;code&gt;CronMaker&lt;/code&gt; : 7자리 크론탭 생성, 스프링 스케쥴러에서 사용&lt;/div&gt;&lt;/figure&gt;&lt;/li&gt;&lt;/ul&gt;&lt;ul class=&quot;bulleted-list&quot; id=&quot;7d4101e2-d7b9-4cda-8fd4-76be01e1c83a&quot;&gt;&lt;li style=&quot;list-style-type:disc&quot;&gt;Spring 스케줄러에서 Cron을 사용하셔야 하는 분들이 있다면, 참고하시면 좋을 것 같습니다.&lt;/li&gt;&lt;/ul&gt;&lt;div class=&quot;image notion-img&quot; id=&quot;4e5d0386-30cb-4296-9e79-40c675076778&quot;&gt;&lt;figure class=&quot;imageblock alignCenter&quot; width=&quot;1280&quot; height=&quot;878&quot; data-origin-width=&quot;1280&quot; data-origin-height=&quot;878&quot; data-ke-mobilestyle=&quot;widthOrigin&quot; filename=&quot;img.png&quot; filemime=&quot;image/png&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/PYao9/btrJln5PRxp/jYMJjUCi14luzyevGTcUz0/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/PYao9/btrJln5PRxp/jYMJjUCi14luzyevGTcUz0/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/PYao9/btrJln5PRxp/jYMJjUCi14luzyevGTcUz0/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FPYao9%2FbtrJln5PRxp%2FjYMJjUCi14luzyevGTcUz0%2Fimg.png&quot; width=&quot;1280&quot; height=&quot;878&quot; data-origin-width=&quot;1280&quot; data-origin-height=&quot;878&quot; data-ke-mobilestyle=&quot;widthOrigin&quot; filename=&quot;img.png&quot; filemime=&quot;image/png&quot; onerror=&quot;this.onerror=null; this.src='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png'; this.srcset='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png';&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;figcaption&gt;출처 : &lt;a href=&quot;https://madplay.github.io/post/a-guide-to-cron-expression&quot;&gt;https://madplay.github.io/post/a-guide-to-cron-expression&lt;/a&gt;&lt;/figcaption&gt;&lt;/div&gt;&lt;p class=&quot;&quot; id=&quot;0430ef2a-2cab-4e17-81fd-8a8a25b56bf3&quot;&gt;
&lt;/p&gt;&lt;hr id=&quot;65ada8fa-cdcb-4062-84d9-6faf7148c480&quot;/&gt;&lt;figure class=&quot;callout&quot; id=&quot;e7313cea-7eec-4605-b879-b243639eb6a5&quot; style=&quot;white-space:pre-wrap;display:flex&quot;&gt;&lt;div style=&quot;font-size:1.5em&quot;&gt;&lt;span class=&quot;icon&quot;&gt; &lt;/span&gt;&lt;/div&gt;&lt;div style=&quot;width:100%&quot;&gt;맥에서 파이썬 코드를 자동으로 실행하는 자동화 환경을 만들다가, 크론탭 사이트 정리하는 글까지 오게 되었네요..
프론트엔드 쪽에 관심이 많아 직접적으로 크론을 활용할 일은 많지 않지만, 새로운 지식을 배우고 정리하는 일은 역시 재밌네요!  &lt;/div&gt;&lt;/figure&gt;&lt;p class=&quot;&quot; id=&quot;9d72aa1f-8e4c-4924-af19-25bbb85012c5&quot;&gt;
&lt;/p&gt;&lt;/div&gt;&lt;/article&gt;&lt;/body&gt;</description>
      <category>toy project/notion-to-tistory</category>
      <category>cron</category>
      <category>Spring</category>
      <category>리눅스</category>
      <author>3sammy</author>
      <guid isPermaLink="true">https://23log.tistory.com/172</guid>
      <comments>https://23log.tistory.com/172#entry172comment</comments>
      <pubDate>Wed, 10 Aug 2022 00:20:04 +0900</pubDate>
    </item>
    <item>
      <title>[MAC] Crontab 오류 정리(Operation not permitted, Permission denied)</title>
      <link>https://23log.tistory.com/171</link>
      <description>&lt;body&gt;&lt;article class=&quot;page sans Notion&quot; id=&quot;d7fe2feb-fe90-4535-a132-78cf9d09b776&quot;&gt;&lt;div class=&quot;page-body Tistory&quot;&gt;&lt;figure class=&quot;block-color-yellow_background callout&quot; id=&quot;10f0bb86-cb11-4a6b-b426-ac00bb1f0ccf&quot; style=&quot;white-space:pre-wrap;display:flex&quot;&gt;&lt;div style=&quot;font-size:1.5em&quot;&gt;&lt;span class=&quot;icon&quot;&gt; &lt;/span&gt;&lt;/div&gt;&lt;div style=&quot;width:100%&quot;&gt;case1 오류가 발생했나요?
그렇다면 case2까지 체크하셔서 설정해주셔야지 크론탭이 정상 동작합니다! :D&lt;/div&gt;&lt;/figure&gt;&lt;h2 class=&quot;&quot; id=&quot;b0f93ef0-0bbe-445c-b962-9a3f09995e92&quot;&gt;case1) &lt;code&gt;Permission denied&lt;/code&gt; 발생&lt;/h2&gt;&lt;div class=&quot;image notion-img&quot; id=&quot;d9f04a6f-3a5f-46b7-93fc-4b22047a3a66&quot;&gt;&lt;figure class=&quot;imageblock alignCenter&quot; width=&quot;195&quot; height=&quot;25&quot; data-origin-width=&quot;195&quot; data-origin-height=&quot;25&quot; data-ke-mobilestyle=&quot;widthOrigin&quot; filename=&quot;img.png&quot; filemime=&quot;image/png&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/cxyHgR/btrJCoRUrQW/iuqYJKbKGZuvAzB9WkX4oK/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/cxyHgR/btrJCoRUrQW/iuqYJKbKGZuvAzB9WkX4oK/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/cxyHgR/btrJCoRUrQW/iuqYJKbKGZuvAzB9WkX4oK/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FcxyHgR%2FbtrJCoRUrQW%2FiuqYJKbKGZuvAzB9WkX4oK%2Fimg.png&quot; width=&quot;195&quot; height=&quot;25&quot; data-origin-width=&quot;195&quot; data-origin-height=&quot;25&quot; data-ke-mobilestyle=&quot;widthOrigin&quot; filename=&quot;img.png&quot; filemime=&quot;image/png&quot; onerror=&quot;this.onerror=null; this.src='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png'; this.srcset='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png';&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;/div&gt;&lt;ul class=&quot;bulleted-list&quot; id=&quot;4a521255-5188-4589-bb8f-4f4c505d9c6c&quot;&gt;&lt;li style=&quot;list-style-type:disc&quot;&gt;원인 : 해당 파일의 실행 권한이 없기 때문!&lt;ul class=&quot;block-color-gray bulleted-list&quot; id=&quot;4c085fb9-475b-4e0c-b13f-b22040166c31&quot;&gt;&lt;li style=&quot;list-style-type:circle&quot;&gt;사람이 아닌 컴퓨터가 파일을 실행시키는 것이기 때문에, 해당 파일에 대한 실행 권한을 허가해주어야 합니다.&lt;/li&gt;&lt;/ul&gt;&lt;/li&gt;&lt;/ul&gt;&lt;ul class=&quot;bulleted-list&quot; id=&quot;119e8e28-1a37-43a8-8c4c-534c63a57067&quot;&gt;&lt;li style=&quot;list-style-type:disc&quot;&gt;해결 : 터미널에서 &lt;code&gt;chmod +x {경로/파일.py}&lt;/code&gt; 을 실행하기&lt;ul class=&quot;bulleted-list&quot; id=&quot;e0f675f2-737d-4d43-90e6-d0e0ceb91d5e&quot;&gt;&lt;li style=&quot;list-style-type:circle&quot;&gt;&lt;code&gt;chmod +x&lt;/code&gt; 명령어를 실행하여, 권한을 부여하기 (터미널에서 실행하면 됩니다)&lt;pre class=&quot;code Shell&quot; id=&quot;b9df2b12-6d78-472f-b1b4-e7d0071ab7ae&quot;&gt;&lt;code&gt;# 해결
chmod +x /users/main.py

# 실행시, 별도 응답은 없습니다 ^^;&lt;/code&gt;&lt;/pre&gt;&lt;/li&gt;&lt;/ul&gt;&lt;blockquote class=&quot;&quot; id=&quot;bad1b2ad-ab90-4b2d-8246-1b2821fef204&quot;&gt;&lt;code&gt;chmod +x {경로/파일}&lt;/code&gt;
컴퓨터에게 &lt;code&gt;{경로}&lt;/code&gt;에 있는 파일 접근 권한을 부여하는 명령어&lt;/blockquote&gt;&lt;/li&gt;&lt;/ul&gt;&lt;p class=&quot;&quot; id=&quot;ed951c10-bdc8-46ed-8424-6d7564ef02a6&quot;&gt;
&lt;/p&gt;&lt;h2 class=&quot;&quot; id=&quot;ef84285c-ec75-4d3b-b005-b417654919e6&quot;&gt;case2) &lt;code&gt;Operation not permitted&lt;/code&gt; 발생&lt;/h2&gt;&lt;div class=&quot;image notion-img&quot; id=&quot;e0c77129-e654-4a36-ae1b-3c75d2fc4006&quot;&gt;&lt;figure class=&quot;imageblock alignCenter&quot; width=&quot;835&quot; height=&quot;512&quot; data-origin-width=&quot;835&quot; data-origin-height=&quot;512&quot; data-ke-mobilestyle=&quot;widthOrigin&quot; filename=&quot;img.png&quot; filemime=&quot;image/png&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/bE608G/btrJKupfiZo/IM2DwpYhObQoew6oaeJXVK/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/bE608G/btrJKupfiZo/IM2DwpYhObQoew6oaeJXVK/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/bE608G/btrJKupfiZo/IM2DwpYhObQoew6oaeJXVK/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FbE608G%2FbtrJKupfiZo%2FIM2DwpYhObQoew6oaeJXVK%2Fimg.png&quot; width=&quot;835&quot; height=&quot;512&quot; data-origin-width=&quot;835&quot; data-origin-height=&quot;512&quot; data-ke-mobilestyle=&quot;widthOrigin&quot; filename=&quot;img.png&quot; filemime=&quot;image/png&quot; onerror=&quot;this.onerror=null; this.src='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png'; this.srcset='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png';&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;/div&gt;&lt;ul class=&quot;bulleted-list&quot; id=&quot;b8ad7f82-9487-43c0-8dc1-eac12b6cae51&quot;&gt;&lt;li style=&quot;list-style-type:disc&quot;&gt;원인 : cron 어플리케이션이 disc에 접근하는 권한을 부여하지 않았기 때문!&lt;/li&gt;&lt;/ul&gt;&lt;ul class=&quot;bulleted-list&quot; id=&quot;3bd1d0bd-11f4-4f0d-84e4-0237d00c592f&quot;&gt;&lt;li style=&quot;list-style-type:disc&quot;&gt;해결 : 아래의 과정을 따라간다.&lt;ol class=&quot;numbered-list&quot; id=&quot;b5df5322-21bb-44c4-9673-3365b64d379e&quot; start=&quot;1&quot; type=&quot;1&quot;&gt;&lt;li&gt;맥북의 &lt;code&gt;시스템 환경설정&lt;/code&gt; → &lt;code&gt;보안 및 개인 정보 보호&lt;/code&gt; → &lt;code&gt;개인 정보 보호&lt;/code&gt; 을 연다&lt;/li&gt;&lt;/ol&gt;&lt;ol class=&quot;numbered-list&quot; id=&quot;bb3ba699-84e9-4984-97e3-d02cf683ac35&quot; start=&quot;2&quot; type=&quot;1&quot;&gt;&lt;li&gt;좌측 리스트 중 &lt;code&gt;전체 디스크 접근 권한&lt;/code&gt; 을 선택한 뒤, 좌측 하단 자물쇠를 눌러 권한 부여를 선택한다.&lt;div class=&quot;image notion-img&quot; id=&quot;48f6430b-4cbf-48b1-b808-accf439a3bb3&quot;&gt;&lt;figure class=&quot;imageblock alignCenter&quot; width=&quot;780&quot; height=&quot;699&quot; data-origin-width=&quot;780&quot; data-origin-height=&quot;699&quot; data-ke-mobilestyle=&quot;widthOrigin&quot; filename=&quot;img.png&quot; filemime=&quot;image/png&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/cdZHrs/btrJLTI5hT2/U40WZqaBFoU4MLNHgawzKK/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/cdZHrs/btrJLTI5hT2/U40WZqaBFoU4MLNHgawzKK/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/cdZHrs/btrJLTI5hT2/U40WZqaBFoU4MLNHgawzKK/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FcdZHrs%2FbtrJLTI5hT2%2FU40WZqaBFoU4MLNHgawzKK%2Fimg.png&quot; width=&quot;780&quot; height=&quot;699&quot; data-origin-width=&quot;780&quot; data-origin-height=&quot;699&quot; data-ke-mobilestyle=&quot;widthOrigin&quot; filename=&quot;img.png&quot; filemime=&quot;image/png&quot; onerror=&quot;this.onerror=null; this.src='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png'; this.srcset='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png';&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;/div&gt;&lt;/li&gt;&lt;/ol&gt;&lt;ol class=&quot;numbered-list&quot; id=&quot;6eeee13c-648f-4f80-999a-acbd5d854cb6&quot; start=&quot;3&quot; type=&quot;1&quot;&gt;&lt;li&gt;우측 리스트 밑 &lt;code&gt;+&lt;/code&gt; 버튼을 눌러, &lt;code&gt;cron&lt;/code&gt;을 추가해주면 된다.&lt;/li&gt;&lt;/ol&gt;&lt;ol class=&quot;numbered-list&quot; id=&quot;4010100c-8a96-4c0f-a395-a82a570e0032&quot; start=&quot;4&quot; type=&quot;1&quot;&gt;&lt;li&gt;열기 창이 뜨면, &lt;code&gt;cmd + shift + G&lt;/code&gt; 를 눌러 경로를 아래로 이동해주어 크론을 열어준다.
*경로 : &lt;code&gt;/usr/sbin/cron&lt;/code&gt;&lt;div class=&quot;image notion-img&quot; id=&quot;3dfcfbf3-fc4a-4e27-bd45-0f7fc61c20ce&quot;&gt;&lt;figure class=&quot;imageblock alignCenter&quot; width=&quot;758&quot; height=&quot;663&quot; data-origin-width=&quot;758&quot; data-origin-height=&quot;663&quot; data-ke-mobilestyle=&quot;widthOrigin&quot; filename=&quot;img.png&quot; filemime=&quot;image/png&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/rHp6b/btrJC37MYln/UgqH44FW3xprSNWNWYKPiK/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/rHp6b/btrJC37MYln/UgqH44FW3xprSNWNWYKPiK/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/rHp6b/btrJC37MYln/UgqH44FW3xprSNWNWYKPiK/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FrHp6b%2FbtrJC37MYln%2FUgqH44FW3xprSNWNWYKPiK%2Fimg.png&quot; width=&quot;758&quot; height=&quot;663&quot; data-origin-width=&quot;758&quot; data-origin-height=&quot;663&quot; data-ke-mobilestyle=&quot;widthOrigin&quot; filename=&quot;img.png&quot; filemime=&quot;image/png&quot; onerror=&quot;this.onerror=null; this.src='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png'; this.srcset='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png';&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;/div&gt;&lt;/li&gt;&lt;/ol&gt;&lt;ol class=&quot;numbered-list&quot; id=&quot;fa5a72fc-10bd-4253-a5d8-888c77ac1059&quot; start=&quot;5&quot; type=&quot;1&quot;&gt;&lt;li&gt;리스트에 정상적으로 크론이 등록되었다면, 다시 자물쇠를 눌러 잠궈준다.&lt;div class=&quot;image notion-img&quot; id=&quot;c1d05a1a-72ce-4a27-8718-7d5dd34e7302&quot;&gt;&lt;figure class=&quot;imageblock alignCenter&quot; width=&quot;335&quot; height=&quot;49&quot; data-origin-width=&quot;335&quot; data-origin-height=&quot;49&quot; data-ke-mobilestyle=&quot;widthOrigin&quot; filename=&quot;img.png&quot; filemime=&quot;image/png&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/oORkh/btrJELldrSj/kFQl9EKYqzageyIF1jafbK/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/oORkh/btrJELldrSj/kFQl9EKYqzageyIF1jafbK/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/oORkh/btrJELldrSj/kFQl9EKYqzageyIF1jafbK/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FoORkh%2FbtrJELldrSj%2FkFQl9EKYqzageyIF1jafbK%2Fimg.png&quot; width=&quot;335&quot; height=&quot;49&quot; data-origin-width=&quot;335&quot; data-origin-height=&quot;49&quot; data-ke-mobilestyle=&quot;widthOrigin&quot; filename=&quot;img.png&quot; filemime=&quot;image/png&quot; onerror=&quot;this.onerror=null; this.src='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png'; this.srcset='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png';&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;/div&gt;&lt;/li&gt;&lt;/ol&gt;&lt;ol class=&quot;numbered-list&quot; id=&quot;407c026a-8df0-4d23-963e-fca707ab24ba&quot; start=&quot;6&quot; type=&quot;1&quot;&gt;&lt;li&gt;끝!&lt;/li&gt;&lt;/ol&gt;&lt;/li&gt;&lt;/ul&gt;&lt;p class=&quot;&quot; id=&quot;e675c068-356e-41f7-9a16-e87efbc2c8b3&quot;&gt;
&lt;/p&gt;&lt;h2 class=&quot;&quot; id=&quot;2d53f33e-f64b-470f-898d-6ca5d3cb636a&quot;&gt;case3) 파이썬 모듈을 찾지 못하는 경우 &lt;code&gt;ModuleNotFoundError&lt;/code&gt;&lt;/h2&gt;&lt;ul class=&quot;bulleted-list&quot; id=&quot;521efd99-6a91-4142-9b76-64afb63769b5&quot;&gt;&lt;li style=&quot;list-style-type:disc&quot;&gt;에러 상세&lt;pre class=&quot;code Shell&quot; id=&quot;a36fc445-fe9f-4ac6-a943-61599b5491da&quot;&gt;&lt;code&gt;Traceback (most recent call last):
  File &quot;/Users/.../main.py&quot;, line 2, in &amp;lt;module&amp;gt;
    from clients.SeleniumClient import SeleniumClient
  File &quot;/Users/.../main.py&quot;, line 4, in &amp;lt;module&amp;gt;
    from webdriver_manager.chrome import ChromeDriverManager
ModuleNotFoundError: No module named 'webdriver_manager'&lt;/code&gt;&lt;/pre&gt;&lt;/li&gt;&lt;/ul&gt;&lt;ul class=&quot;bulleted-list&quot; id=&quot;0e1a95f0-5bbc-4af8-9dcc-a93c543c6530&quot;&gt;&lt;li style=&quot;list-style-type:disc&quot;&gt;자세한 원인은 모르나, 파이썬 실행 환경이 차이가 있어 발생하는 오류라고 생각했다.&lt;ul class=&quot;bulleted-list&quot; id=&quot;d07a922c-7d37-422a-a08c-13c7ffa0735d&quot;&gt;&lt;li style=&quot;list-style-type:circle&quot;&gt;맥에서 파이썬 검색시, &lt;code&gt;python3&lt;/code&gt; &lt;code&gt;python3.10&lt;/code&gt; 등등 다양한 패키지가 설치되어 있었다.&lt;/li&gt;&lt;/ul&gt;&lt;ul class=&quot;bulleted-list&quot; id=&quot;6baa8b0b-bbe7-455d-85bb-e5a858d5f2fe&quot;&gt;&lt;li style=&quot;list-style-type:circle&quot;&gt;저는 다른 글을 보고 &lt;code&gt;/usr/local/bin/python3&lt;/code&gt; 을 입력했는데, 찾아보니 해당 파일은 &lt;code&gt;python3.10&lt;/code&gt; 의 바로가기 사본이었습니다.&lt;/li&gt;&lt;/ul&gt;&lt;ul class=&quot;bulleted-list&quot; id=&quot;79a77b0e-630f-4c0e-bda7-d096716735b0&quot;&gt;&lt;li style=&quot;list-style-type:circle&quot;&gt;실제 파이썬 코드를 실행했던 환경은 &lt;code&gt;python3&lt;/code&gt; 였고, 해당 위치를 터미널에서 &lt;code&gt;which&lt;/code&gt; 키워드로 조회해본 결과 다른 경로였습니다.&lt;div class=&quot;image notion-img&quot; id=&quot;e2319910-b485-42cc-8efc-50a092f1a21e&quot;&gt;&lt;figure class=&quot;imageblock alignCenter&quot; width=&quot;540&quot; height=&quot;87&quot; data-origin-width=&quot;540&quot; data-origin-height=&quot;87&quot; data-ke-mobilestyle=&quot;widthOrigin&quot; filename=&quot;img.png&quot; filemime=&quot;image/png&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/dph3pe/btrJGVnpo74/hgfGKhdLanriluK3XOpHs1/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/dph3pe/btrJGVnpo74/hgfGKhdLanriluK3XOpHs1/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/dph3pe/btrJGVnpo74/hgfGKhdLanriluK3XOpHs1/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2Fdph3pe%2FbtrJGVnpo74%2FhgfGKhdLanriluK3XOpHs1%2Fimg.png&quot; width=&quot;540&quot; height=&quot;87&quot; data-origin-width=&quot;540&quot; data-origin-height=&quot;87&quot; data-ke-mobilestyle=&quot;widthOrigin&quot; filename=&quot;img.png&quot; filemime=&quot;image/png&quot; onerror=&quot;this.onerror=null; this.src='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png'; this.srcset='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png';&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;/div&gt;&lt;/li&gt;&lt;/ul&gt;&lt;/li&gt;&lt;/ul&gt;&lt;ul class=&quot;bulleted-list&quot; id=&quot;68c0725f-3470-44bc-8bf0-d26309be4d03&quot;&gt;&lt;li style=&quot;list-style-type:disc&quot;&gt;&lt;code&gt;python3&lt;/code&gt; 환경에서 실행에 필요한 모듈들을 설치했었는데, 다른 파이썬 버젼으로 실행하다 보니 모듈을 찾지 못하는 것이라 생각합니다.&lt;/li&gt;&lt;/ul&gt;&lt;ul class=&quot;bulleted-list&quot; id=&quot;5bda3edb-b266-42e0-a36c-d2bae1af08a9&quot;&gt;&lt;li style=&quot;list-style-type:disc&quot;&gt;다시 제대로된 환경으로 경로를 바꾸니 정상 실행되었습니다!&lt;pre class=&quot;code Shell&quot; id=&quot;a24ed7da-43e6-4bb2-b097-cc44cba4c026&quot;&gt;&lt;code&gt;# 3의 배수마다(3,6,9,12 ...) 실행되는 크론탭
*/3 * * * * /Users/jacob/opt/anaconda3/bin/python3 {경로}/main.py&lt;/code&gt;&lt;/pre&gt;&lt;/li&gt;&lt;/ul&gt;&lt;p class=&quot;&quot; id=&quot;358bab23-d029-439b-b203-8c670c0cd765&quot;&gt;
&lt;/p&gt;&lt;/div&gt;&lt;/article&gt;&lt;/body&gt;</description>
      <category>toy project/notion-to-tistory</category>
      <category>cron</category>
      <category>MAC</category>
      <category>리눅스</category>
      <category>맥북</category>
      <author>3sammy</author>
      <guid isPermaLink="true">https://23log.tistory.com/171</guid>
      <comments>https://23log.tistory.com/171#entry171comment</comments>
      <pubDate>Tue, 9 Aug 2022 23:15:42 +0900</pubDate>
    </item>
    <item>
      <title>베링거(behringer) MPA40BT-PRO 전원이 안들어올때, 배터리 교체 방법</title>
      <link>https://23log.tistory.com/168</link>
      <description>&lt;body&gt;&lt;link href=&quot;https://rawcdn.githack.com/ppuep94/n2t/5ef4dc01e9d6336341e9ab95bb71672f9d3a3dc9/assets/css/style2.css&quot; rel=&quot;stylesheet&quot;/&gt;&lt;article class=&quot;page sans Notion&quot; id=&quot;65d7067f-30c0-41ae-b86e-68041fb81c2f&quot;&gt;&lt;div class=&quot;page-body Tistory&quot;&gt;&lt;h1 class=&quot;&quot; id=&quot;3d58ab77-580e-43cf-80b6-baf53f8d479d&quot;&gt;인트로&lt;/h1&gt;&lt;p class=&quot;&quot; id=&quot;40ca701e-b1ec-4877-8670-db9a96aea376&quot;&gt;아버지께서 &lt;code&gt;베링거(behringer) MPA40BT-PRO&lt;/code&gt; 모델을 사용하고 계시는데, 전원이 들어오지 않았다. A/S 센터에 문의해보니 배터리가 방전되서 그렇다고 &lt;code&gt;ESH 5-12 로케트 배터리&lt;/code&gt; 를 구매하여 변경하면 된다고 답변이 왔다.&lt;/p&gt;&lt;p class=&quot;&quot; id=&quot;09993c45-8cc7-4de4-9e26-40911f8d0aeb&quot;&gt;
&lt;/p&gt;&lt;p class=&quot;&quot; id=&quot;b534a611-0b96-47f8-ac7a-6de7d74302c1&quot;&gt;쿠팡에서 배송비 포함하여 &lt;code&gt;18,500원&lt;/code&gt; 에 가장 저렴하게 판매중이라 구매했다.&lt;/p&gt;&lt;figure id=&quot;4b980a17-78d1-432d-95e4-92cd5431f06b&quot;&gt;&lt;a class=&quot;bookmark source&quot; href=&quot;https://www.coupang.com/vp/products/35840966?vendorItemId=3280484929&amp;amp;sourceType=MyCoupang_my_orders_list_product_title&amp;amp;isAddedCart=&quot;&gt;&lt;div class=&quot;bookmark-info&quot;&gt;&lt;div class=&quot;bookmark-text&quot;&gt;&lt;div class=&quot;bookmark-title&quot;&gt;&lt;/div&gt;&lt;/div&gt;&lt;div class=&quot;bookmark-href&quot;&gt;https://www.coupang.com/vp/products/35840966?vendorItemId=3280484929&amp;amp;sourceType=MyCoupang_my_orders_list_product_title&amp;amp;isAddedCart=&lt;/div&gt;&lt;/div&gt;&lt;/a&gt;&lt;/figure&gt;&lt;h1 class=&quot;&quot; id=&quot;c39663d5-8971-4f38-8ca3-4f563d65108e&quot;&gt;배터리 교체 방법&lt;/h1&gt;&lt;div class=&quot;column-list&quot; id=&quot;4d6741b8-27d3-4e2e-a466-b7e0ee6bc0ae&quot;&gt;&lt;div class=&quot;column&quot; id=&quot;e927b065-ff97-4662-bfa3-44bbe165b211&quot; style=&quot;width:50%&quot;&gt;&lt;div class=&quot;image notion-img&quot; id=&quot;90a260a8-4160-4293-911c-23640db4772f&quot;&gt;&lt;figure class=&quot;imageblock alignCenter&quot; width=&quot;4032&quot; height=&quot;3024&quot; data-origin-width=&quot;4032&quot; data-origin-height=&quot;3024&quot; data-ke-mobilestyle=&quot;widthOrigin&quot; filename=&quot;img.jpg&quot; filemime=&quot;image/jpeg&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/2vjrx/btrI3tkNzjv/kg44ghrvcyhxAd43KprPX0/img.jpg&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/2vjrx/btrI3tkNzjv/kg44ghrvcyhxAd43KprPX0/img.jpg&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/2vjrx/btrI3tkNzjv/kg44ghrvcyhxAd43KprPX0/img.jpg&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2F2vjrx%2FbtrI3tkNzjv%2Fkg44ghrvcyhxAd43KprPX0%2Fimg.jpg&quot; width=&quot;4032&quot; height=&quot;3024&quot; data-origin-width=&quot;4032&quot; data-origin-height=&quot;3024&quot; data-ke-mobilestyle=&quot;widthOrigin&quot; filename=&quot;img.jpg&quot; filemime=&quot;image/jpeg&quot; onerror=&quot;this.onerror=null; this.src='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png'; this.srcset='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png';&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;/div&gt;&lt;/div&gt;&lt;div class=&quot;column&quot; id=&quot;b00c41e2-a539-40b1-bd4e-0e50eab660ef&quot; style=&quot;width:50%&quot;&gt;&lt;div class=&quot;image notion-img&quot; id=&quot;bfefa401-051f-4a44-ba39-1e263e3fc262&quot;&gt;&lt;figure class=&quot;imageblock alignCenter&quot; width=&quot;4032&quot; height=&quot;3024&quot; data-origin-width=&quot;4032&quot; data-origin-height=&quot;3024&quot; data-ke-mobilestyle=&quot;widthOrigin&quot; filename=&quot;img.jpg&quot; filemime=&quot;image/jpeg&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/FBz2b/btrI4UCo3uD/Fmh0hz9rkFyKnMohkaqhq1/img.jpg&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/FBz2b/btrI4UCo3uD/Fmh0hz9rkFyKnMohkaqhq1/img.jpg&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/FBz2b/btrI4UCo3uD/Fmh0hz9rkFyKnMohkaqhq1/img.jpg&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FFBz2b%2FbtrI4UCo3uD%2FFmh0hz9rkFyKnMohkaqhq1%2Fimg.jpg&quot; width=&quot;4032&quot; height=&quot;3024&quot; data-origin-width=&quot;4032&quot; data-origin-height=&quot;3024&quot; data-ke-mobilestyle=&quot;widthOrigin&quot; filename=&quot;img.jpg&quot; filemime=&quot;image/jpeg&quot; onerror=&quot;this.onerror=null; this.src='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png'; this.srcset='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png';&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;/div&gt;&lt;/div&gt;&lt;/div&gt;&lt;ol class=&quot;numbered-list&quot; id=&quot;dabdc318-96c5-442b-b8e8-5c3526b90efc&quot; start=&quot;1&quot; type=&quot;1&quot;&gt;&lt;li&gt;아래의 판 부분의 나사를 제거하고 뜯으면, 기존 배터리가 보인다.&lt;/li&gt;&lt;/ol&gt;&lt;blockquote class=&quot;&quot; id=&quot;716a0732-6963-435d-b2ee-892d5f0da6aa&quot;&gt;이미 바꾼 후에, ‘아 글써야하는데!’ 라고 생각되어 사진상에선 교체 후 배터리가 있습니다..;;&lt;/blockquote&gt;&lt;p class=&quot;&quot; id=&quot;e6f437b3-b67f-481b-9df7-21b69a782587&quot;&gt;
&lt;/p&gt;&lt;div class=&quot;column-list&quot; id=&quot;9d586d26-38f9-4a2c-aefe-0ee26504e172&quot;&gt;&lt;div class=&quot;column&quot; id=&quot;bcbac1ae-5d8f-4672-9410-4d2b1975ed97&quot; style=&quot;width:50%&quot;&gt;&lt;div class=&quot;image notion-img&quot; id=&quot;001d96ed-eefa-4e2b-a161-caff737436ae&quot;&gt;&lt;figure class=&quot;imageblock alignCenter&quot; width=&quot;4032&quot; height=&quot;3024&quot; data-origin-width=&quot;4032&quot; data-origin-height=&quot;3024&quot; data-ke-mobilestyle=&quot;widthOrigin&quot; filename=&quot;img.jpg&quot; filemime=&quot;image/jpeg&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/b7y5vC/btrI9lzfQy5/fqf4NrMI7tqje9QO0GFUa0/img.jpg&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/b7y5vC/btrI9lzfQy5/fqf4NrMI7tqje9QO0GFUa0/img.jpg&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/b7y5vC/btrI9lzfQy5/fqf4NrMI7tqje9QO0GFUa0/img.jpg&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2Fb7y5vC%2FbtrI9lzfQy5%2Ffqf4NrMI7tqje9QO0GFUa0%2Fimg.jpg&quot; width=&quot;4032&quot; height=&quot;3024&quot; data-origin-width=&quot;4032&quot; data-origin-height=&quot;3024&quot; data-ke-mobilestyle=&quot;widthOrigin&quot; filename=&quot;img.jpg&quot; filemime=&quot;image/jpeg&quot; onerror=&quot;this.onerror=null; this.src='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png'; this.srcset='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png';&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;/div&gt;&lt;/div&gt;&lt;div class=&quot;column&quot; id=&quot;84ea93e2-b80b-4935-8cf4-4de464f41c69&quot; style=&quot;width:50%&quot;&gt;&lt;div class=&quot;image notion-img&quot; id=&quot;2a26a22c-4f72-4be9-bfa7-3d84ba96a3d8&quot;&gt;&lt;figure class=&quot;imageblock alignCenter&quot; width=&quot;4032&quot; height=&quot;3024&quot; data-origin-width=&quot;4032&quot; data-origin-height=&quot;3024&quot; data-ke-mobilestyle=&quot;widthOrigin&quot; filename=&quot;img.jpg&quot; filemime=&quot;image/jpeg&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/HxN8N/btrI6qnxcb7/KO4nW7NPMb1KOgti25Sazk/img.jpg&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/HxN8N/btrI6qnxcb7/KO4nW7NPMb1KOgti25Sazk/img.jpg&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/HxN8N/btrI6qnxcb7/KO4nW7NPMb1KOgti25Sazk/img.jpg&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FHxN8N%2FbtrI6qnxcb7%2FKO4nW7NPMb1KOgti25Sazk%2Fimg.jpg&quot; width=&quot;4032&quot; height=&quot;3024&quot; data-origin-width=&quot;4032&quot; data-origin-height=&quot;3024&quot; data-ke-mobilestyle=&quot;widthOrigin&quot; filename=&quot;img.jpg&quot; filemime=&quot;image/jpeg&quot; onerror=&quot;this.onerror=null; this.src='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png'; this.srcset='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png';&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;figcaption&gt;손톱으로 하면 들릴 수 있다.. 일자드라이버 처럼 얇은 걸로 뜯어내길 추천한다.&lt;/figcaption&gt;&lt;/div&gt;&lt;/div&gt;&lt;/div&gt;&lt;ol class=&quot;numbered-list&quot; id=&quot;82f26b1c-ed2c-45c9-ba4f-01a3396f2ad5&quot; start=&quot;2&quot; type=&quot;1&quot;&gt;&lt;li&gt;배터리를 조심히 위로 들어올리면, 뒤엔 전원선이 있다.
또, 배터리는 검정색 케이스?에 쌓여있다.&lt;/li&gt;&lt;/ol&gt;&lt;ol class=&quot;numbered-list&quot; id=&quot;050c4f78-1918-413b-81ee-bb836e50d660&quot; start=&quot;3&quot; type=&quot;1&quot;&gt;&lt;li&gt;배터리 교체를 위해 저 케이스의 옆면을 들어올려 열어줘야 한다.&lt;/li&gt;&lt;/ol&gt;&lt;p class=&quot;&quot; id=&quot;10adffa3-337c-4246-aaf7-1225059317f6&quot;&gt;
&lt;/p&gt;&lt;div class=&quot;image notion-img&quot; id=&quot;c279a26e-f457-489a-a34d-9d39bf971d78&quot;&gt;&lt;figure class=&quot;imageblock alignCenter&quot; width=&quot;947&quot; height=&quot;710&quot; data-origin-width=&quot;947&quot; data-origin-height=&quot;710&quot; data-ke-mobilestyle=&quot;widthOrigin&quot; filename=&quot;img.png&quot; filemime=&quot;image/png&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/bA6JTq/btrI9myalQI/ufDkEVXKvhhOadnSFqEkq0/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/bA6JTq/btrI9myalQI/ufDkEVXKvhhOadnSFqEkq0/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/bA6JTq/btrI9myalQI/ufDkEVXKvhhOadnSFqEkq0/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FbA6JTq%2FbtrI9myalQI%2FufDkEVXKvhhOadnSFqEkq0%2Fimg.png&quot; width=&quot;947&quot; height=&quot;710&quot; data-origin-width=&quot;947&quot; data-origin-height=&quot;710&quot; data-ke-mobilestyle=&quot;widthOrigin&quot; filename=&quot;img.png&quot; filemime=&quot;image/png&quot; onerror=&quot;this.onerror=null; this.src='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png'; this.srcset='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png';&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;/div&gt;&lt;ol class=&quot;numbered-list&quot; id=&quot;cf44804b-7b19-4995-80ed-eed7ee343204&quot; start=&quot;4&quot; type=&quot;1&quot;&gt;&lt;li&gt;기존에 있던 연결선을 제거한다.&lt;/li&gt;&lt;/ol&gt;&lt;ol class=&quot;numbered-list&quot; id=&quot;e41da59f-f748-4e98-abbe-cbb6f68052d4&quot; start=&quot;5&quot; type=&quot;1&quot;&gt;&lt;li&gt;세게 물려있으므로, 일자드라이버로 사이에 틈을 만들어서 꺼냈다.&lt;/li&gt;&lt;/ol&gt;&lt;blockquote class=&quot;&quot; id=&quot;c32d55ee-fb71-4243-a1ca-cbb2bc81ae87&quot;&gt;추천하는 방법은 아닙니다. 더 좋은 방법이 있다면 댓글로 알려주세요.&lt;/blockquote&gt;&lt;p class=&quot;&quot; id=&quot;2713d6df-35d3-46a4-88ff-5e43d9e4427b&quot;&gt;
&lt;/p&gt;&lt;div class=&quot;image notion-img&quot; id=&quot;7537fbf4-f9f1-4d5f-bc1b-f1f0ae42bdd3&quot;&gt;&lt;figure class=&quot;imageblock alignCenter&quot; width=&quot;4032&quot; height=&quot;3024&quot; data-origin-width=&quot;4032&quot; data-origin-height=&quot;3024&quot; data-ke-mobilestyle=&quot;widthOrigin&quot; filename=&quot;img.jpg&quot; filemime=&quot;image/jpeg&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/xaPR2/btrI2xBb7Qe/w2T0KoOSBLDXncf1uUOqRk/img.jpg&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/xaPR2/btrI2xBb7Qe/w2T0KoOSBLDXncf1uUOqRk/img.jpg&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/xaPR2/btrI2xBb7Qe/w2T0KoOSBLDXncf1uUOqRk/img.jpg&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FxaPR2%2FbtrI2xBb7Qe%2Fw2T0KoOSBLDXncf1uUOqRk%2Fimg.jpg&quot; width=&quot;4032&quot; height=&quot;3024&quot; data-origin-width=&quot;4032&quot; data-origin-height=&quot;3024&quot; data-ke-mobilestyle=&quot;widthOrigin&quot; filename=&quot;img.jpg&quot; filemime=&quot;image/jpeg&quot; onerror=&quot;this.onerror=null; this.src='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png'; this.srcset='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png';&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;/div&gt;&lt;ol class=&quot;numbered-list&quot; id=&quot;538070c5-4b0b-41b2-b648-1924fdeff27d&quot; start=&quot;6&quot; type=&quot;1&quot;&gt;&lt;li&gt;그렇게 꺼낸 기존 배터리..&lt;/li&gt;&lt;/ol&gt;&lt;ol class=&quot;numbered-list&quot; id=&quot;b966ec8b-86a8-4cbc-adde-96b7055785fe&quot; start=&quot;7&quot; type=&quot;1&quot;&gt;&lt;li&gt;늘 그렇듯, &lt;code&gt;조립은 분해의 역순&lt;/code&gt;이다. 다시 로케트 배터리의 연결부분에 전선 색에 맞게 끼운 뒤 헐렁한 연결 부위를 롱노즈/뺀찌를 통해 눌러 다시 연결시킨다.&lt;/li&gt;&lt;/ol&gt;&lt;blockquote class=&quot;&quot; id=&quot;efbebeee-215a-4bd9-9044-e958f5abe3e3&quot;&gt;다시 배터리를 끼우게 되면, 공간이 타이트해서 왠만한 움직임에는 빠지거나 하지 않는다. 어느정도만 고정시켜도 괜찮다.&lt;/blockquote&gt;&lt;p class=&quot;&quot; id=&quot;d30b632e-fdfa-4e08-b1d3-a998d27c4b5a&quot;&gt;
&lt;/p&gt;&lt;div class=&quot;image notion-img&quot; id=&quot;7c4e4b77-7808-4cb6-90eb-669c34ca78cd&quot;&gt;&lt;figure class=&quot;imageblock alignCenter&quot; width=&quot;4032&quot; height=&quot;3024&quot; data-origin-width=&quot;4032&quot; data-origin-height=&quot;3024&quot; data-ke-mobilestyle=&quot;widthOrigin&quot; filename=&quot;img.jpg&quot; filemime=&quot;image/jpeg&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/Vz7Tb/btrI7LycxvL/oBr7lvDsmy21csYJQb3Cb1/img.jpg&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/Vz7Tb/btrI7LycxvL/oBr7lvDsmy21csYJQb3Cb1/img.jpg&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/Vz7Tb/btrI7LycxvL/oBr7lvDsmy21csYJQb3Cb1/img.jpg&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FVz7Tb%2FbtrI7LycxvL%2FoBr7lvDsmy21csYJQb3Cb1%2Fimg.jpg&quot; width=&quot;4032&quot; height=&quot;3024&quot; data-origin-width=&quot;4032&quot; data-origin-height=&quot;3024&quot; data-ke-mobilestyle=&quot;widthOrigin&quot; filename=&quot;img.jpg&quot; filemime=&quot;image/jpeg&quot; onerror=&quot;this.onerror=null; this.src='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png'; this.srcset='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png';&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;/div&gt;&lt;ol class=&quot;numbered-list&quot; id=&quot;c657d98e-1efb-40aa-a4b8-b3e6cf76a95d&quot; start=&quot;8&quot; type=&quot;1&quot;&gt;&lt;li&gt;그 후에 전원을 연결해보면 배터리 상태 부분에 정상적으로 불이 들어오는 것을 확인 할 수 있다.&lt;/li&gt;&lt;/ol&gt;&lt;p class=&quot;&quot; id=&quot;2521c6df-9923-414f-9feb-2dd82757b8b8&quot;&gt;
&lt;/p&gt;&lt;h1 class=&quot;&quot; id=&quot;051c1dcb-93e9-4cec-824f-076faad1e811&quot;&gt;고장 이유&lt;/h1&gt;&lt;p class=&quot;&quot; id=&quot;098d36f0-c01f-4f37-9a31-d146f7fde2ee&quot;&gt;위 배터리는 &lt;code&gt;연축전지&lt;/code&gt;이다. 아래의 경우에 배터리 수명이 단축될 수 있으니 유의하자.&lt;/p&gt;&lt;ul class=&quot;bulleted-list&quot; id=&quot;8be65d56-1922-4187-bda6-18ecb289ea6b&quot;&gt;&lt;li style=&quot;list-style-type:disc&quot;&gt;일정 전압 이하로 과도하게 방전 시킬 경우, 배터리 수명이 단축된다.&lt;/li&gt;&lt;/ul&gt;&lt;ul class=&quot;bulleted-list&quot; id=&quot;f5c4bb05-ee28-424c-a3de-422ec6158135&quot;&gt;&lt;li style=&quot;list-style-type:disc&quot;&gt;과충전 시, 배터리 수명이 단축된다.&lt;/li&gt;&lt;/ul&gt;&lt;ul class=&quot;bulleted-list&quot; id=&quot;b1fa5c07-4b8b-451d-8037-4fa7b1be7241&quot;&gt;&lt;li style=&quot;list-style-type:disc&quot;&gt;방전된 배터리를 오래 방치하면, 충전이 잘 안되며 성능 및 수명이 매우 저하된다.
방전된 배터리는 바로 보충전을 한 후에 보관하거나 사용해야 한다.&lt;/li&gt;&lt;/ul&gt;&lt;p class=&quot;&quot; id=&quot;e2d956d2-fd86-4530-98cc-7c51703d245f&quot;&gt;
&lt;/p&gt;&lt;figure id=&quot;9b1475e8-f9c6-41ae-bffb-76faf781fb6e&quot;&gt;&lt;a class=&quot;bookmark source&quot; href=&quot;https://m.blog.naver.com/PostView.naver?isHttpsRedirect=true&amp;amp;blogId=stable00&amp;amp;logNo=221514290019&quot;&gt;&lt;div class=&quot;bookmark-info&quot;&gt;&lt;div class=&quot;bookmark-text&quot;&gt;&lt;div class=&quot;bookmark-title&quot;&gt;납축전지의 특성&lt;/div&gt;&lt;div class=&quot;bookmark-description&quot;&gt;자동차의 제너레이터는 보통 약 13.7V∼14.2V 정도의 전기를 발전시켜 배터리에 충전을 합니다. 그러나 이 장치에서 이상이 발생하여 과도한 전기가 배터리에 공급되는 경우에는 과충전 상태가 됩니다. 과충전이 되면 전해액 내 물이 전기분해가 일어나 급격히 감소되고 배터리의 수명이 단축됩니다 .&lt;/div&gt;&lt;/div&gt;&lt;div class=&quot;bookmark-href&quot;&gt;&lt;img class=&quot;icon bookmark-icon&quot; src=&quot;https://m.blog.naver.com/favicon_192x192.png?1&quot;/&gt;https://m.blog.naver.com/PostView.naver?isHttpsRedirect=true&amp;amp;blogId=stable00&amp;amp;logNo=221514290019&lt;/div&gt;&lt;/div&gt;&lt;img class=&quot;bookmark-image&quot; src=&quot;https://blogthumb.pstatic.net/MjAxOTA0MTVfMTkg/MDAxNTU1MzE4NTg0MTU5.rt37ezqoB33dHpt1GZ1AJh9ya_BkTQQBIcNaLl9gw7og.o8aojeWIutBPXObp92ZZkhx7h4SL_WB3QAiOibVLvmog.JPEG.stable00/%C2%F7%B7%AE_%B9%E8%C5%CD%B8%AE%B0%FC%B7%C3.jpg?type=w2&quot;/&gt;&lt;/a&gt;&lt;figcaption&gt;설명은 여길 참고했다.&lt;/figcaption&gt;&lt;/figure&gt;&lt;p class=&quot;&quot; id=&quot;58e30360-1baa-4bb5-908b-dd9f617ca0e9&quot;&gt;
&lt;/p&gt;&lt;/div&gt;&lt;/article&gt;&lt;/body&gt;</description>
      <category>정보/TECH</category>
      <category>일상</category>
      <author>3sammy</author>
      <guid isPermaLink="true">https://23log.tistory.com/168</guid>
      <comments>https://23log.tistory.com/168#entry168comment</comments>
      <pubDate>Sun, 7 Aug 2022 09:25:12 +0900</pubDate>
    </item>
    <item>
      <title>티스토리 API 토큰 발급받기</title>
      <link>https://23log.tistory.com/167</link>
      <description>&lt;body&gt;&lt;article class=&quot;page sans Notion&quot; id=&quot;fca2ff6b-af6a-40e8-88ae-6838486ad324&quot;&gt;&lt;div class=&quot;page-body Tistory&quot;&gt;&lt;h1 class=&quot;&quot; id=&quot;c633ffdf-abac-4da7-9a8c-3476ce1c0653&quot;&gt;API 등록하기&lt;/h1&gt;&lt;p class=&quot;&quot; id=&quot;f3d6cb73-942b-4ac7-8cf3-b4963833f7b2&quot;&gt;아래 링크로 접속 후, 계정 정보를 입력합니다.&lt;/p&gt;&lt;figure id=&quot;2fa4dc45-9b04-42e7-816b-59097a3609ca&quot;&gt;&lt;a class=&quot;bookmark source&quot; href=&quot;https://www.tistory.com/guide/api/manage/register&quot;&gt;&lt;div class=&quot;bookmark-info&quot;&gt;&lt;div class=&quot;bookmark-text&quot;&gt;&lt;div class=&quot;bookmark-title&quot;&gt;TISTORY&lt;/div&gt;&lt;div class=&quot;bookmark-description&quot;&gt;나를 표현하는 블로그를 만들어보세요.&lt;/div&gt;&lt;/div&gt;&lt;div class=&quot;bookmark-href&quot;&gt;&lt;img class=&quot;icon bookmark-icon&quot; src=&quot;https://t1.daumcdn.net/tistory_admin/static/top/favicon.ico&quot;/&gt;https://www.tistory.com/guide/api/manage/register&lt;/div&gt;&lt;/div&gt;&lt;img class=&quot;bookmark-image&quot; src=&quot;http://t1.daumcdn.net/tistory_admin/static/images/openGraph/opengraph.png&quot;/&gt;&lt;/a&gt;&lt;/figure&gt;&lt;p class=&quot;&quot; id=&quot;41624426-0f22-4b8a-a921-d9185150786e&quot;&gt;
&lt;/p&gt;&lt;div class=&quot;image notion-img&quot; id=&quot;914c2a6c-003e-4596-9a96-e8b86e09bcfb&quot;&gt;&lt;figure class=&quot;imageblock alignCenter&quot; width=&quot;742&quot; height=&quot;482&quot; data-origin-width=&quot;742&quot; data-origin-height=&quot;482&quot; data-ke-mobilestyle=&quot;widthOrigin&quot; filename=&quot;img.png&quot; filemime=&quot;image/png&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/rB4dN/btrJcGE88Pv/S0MubEhT751qhOhU9RBla1/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/rB4dN/btrJcGE88Pv/S0MubEhT751qhOhU9RBla1/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/rB4dN/btrJcGE88Pv/S0MubEhT751qhOhU9RBla1/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FrB4dN%2FbtrJcGE88Pv%2FS0MubEhT751qhOhU9RBla1%2Fimg.png&quot; width=&quot;742&quot; height=&quot;482&quot; data-origin-width=&quot;742&quot; data-origin-height=&quot;482&quot; data-ke-mobilestyle=&quot;widthOrigin&quot; filename=&quot;img.png&quot; filemime=&quot;image/png&quot; onerror=&quot;this.onerror=null; this.src='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png'; this.srcset='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png';&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;/div&gt;&lt;ul class=&quot;bulleted-list&quot; id=&quot;e9839c8f-32d9-4f55-a612-56e7cfaa6868&quot;&gt;&lt;li style=&quot;list-style-type:disc&quot;&gt;서비스명 : 프로그램명&lt;/li&gt;&lt;/ul&gt;&lt;ul class=&quot;bulleted-list&quot; id=&quot;27a95d9b-b296-4938-b9a0-7ea60e9c1119&quot;&gt;&lt;li style=&quot;list-style-type:disc&quot;&gt;설명&lt;/li&gt;&lt;/ul&gt;&lt;ul class=&quot;bulleted-list&quot; id=&quot;8906b931-db21-4303-bc69-3e326c36a05f&quot;&gt;&lt;li style=&quot;list-style-type:disc&quot;&gt;로고등록 : 생략 가능&lt;/li&gt;&lt;/ul&gt;&lt;ul class=&quot;bulleted-list&quot; id=&quot;ff08c4ed-3fa5-4a96-bab2-ae8470ab476e&quot;&gt;&lt;li style=&quot;list-style-type:disc&quot;&gt;서비스 URL : 자신의 블로그 링크로 기입 (&lt;code&gt;https&lt;/code&gt;)&lt;/li&gt;&lt;/ul&gt;&lt;ul class=&quot;bulleted-list&quot; id=&quot;1d0e5106-095e-4632-966c-e1646b6a960a&quot;&gt;&lt;li style=&quot;list-style-type:disc&quot;&gt;CallBack : API 사용 토큰을 발급받는 용도, 서비스 URL과 같은 링크로 작성&lt;/li&gt;&lt;/ul&gt;&lt;p class=&quot;&quot; id=&quot;b88d936e-7005-4d5d-9e26-1be8d1bff02b&quot;&gt;
&lt;/p&gt;&lt;p class=&quot;&quot; id=&quot;4c866961-0c85-429e-a13d-3b8c22cea3e9&quot;&gt;그 후 등록을 누르면, &lt;code&gt;APP ID&lt;/code&gt; &lt;code&gt;Secret Key&lt;/code&gt; 가 발급되어 있는 것을 볼 수 있다.&lt;/p&gt;&lt;p class=&quot;&quot; id=&quot;cfda3d06-ffd9-4965-af12-cd66f451c3d8&quot;&gt;
&lt;/p&gt;&lt;h1 class=&quot;&quot; id=&quot;409f9921-a477-462a-882a-2bbbc987dd99&quot;&gt;Access Token 발급 받기&lt;/h1&gt;&lt;p class=&quot;&quot; id=&quot;343baefa-71c9-4935-88dd-09c6a0da271d&quot;&gt;티스토리 오픈 API에선 &lt;strong&gt;&lt;strong&gt;Authentication Code 방식&lt;/strong&gt;&lt;/strong&gt;을 통해 토큰을 발급받고록 하고 있다.&lt;/p&gt;&lt;figure id=&quot;b2c9c789-b560-4557-9aaf-9750dedc4c84&quot;&gt;&lt;a class=&quot;bookmark source&quot; href=&quot;https://tistory.github.io/document-tistory-apis/&quot;&gt;&lt;div class=&quot;bookmark-info&quot;&gt;&lt;div class=&quot;bookmark-text&quot;&gt;&lt;div class=&quot;bookmark-title&quot;&gt;소개&lt;/div&gt;&lt;/div&gt;&lt;div class=&quot;bookmark-href&quot;&gt;&lt;img class=&quot;icon bookmark-icon&quot; src=&quot;https://tistory.github.io/document-tistory-apis/gitbook/images/favicon.ico&quot;/&gt;https://tistory.github.io/document-tistory-apis/&lt;/div&gt;&lt;/div&gt;&lt;/a&gt;&lt;/figure&gt;&lt;ol class=&quot;numbered-list&quot; id=&quot;1dc2983e-8a30-4c07-8c66-a54669ceb14f&quot; start=&quot;1&quot; type=&quot;1&quot;&gt;&lt;li&gt;아래 정보를 입력하여, URL을 완성한다.&lt;pre class=&quot;code XML&quot; id=&quot;834d8911-7b83-4be6-b8d5-3bffbbb57e49&quot;&gt;&lt;code&gt;https://www.tistory.com/oauth/authorize?
  client_id={발급받은 APP ID}
  &amp;amp;redirect_uri={서비스 URL=자신의 블로그 주소}
  &amp;amp;response_type=code&lt;/code&gt;&lt;/pre&gt;&lt;ul class=&quot;bulleted-list&quot; id=&quot;f7cace0d-59a5-460c-82a9-6075da03f500&quot;&gt;&lt;li style=&quot;list-style-type:disc&quot;&gt;만약, 아래와 같이 URL이 반환되었다면 오픈 API 앱관리에 들어가 서비스 URL이 동일한지 확인해보자. 필자는 서비스 URL에 &lt;a href=&quot;https://23log.tistory.com/&quot;&gt;https://23log.tistory.com/&lt;/a&gt; 마지막이 &lt;code&gt;/&lt;/code&gt; 가 되어 있었다..  &lt;ul class=&quot;bulleted-list&quot; id=&quot;fa9b51fa-b8a3-4abf-a502-165fc1aaae98&quot;&gt;&lt;li style=&quot;list-style-type:circle&quot;&gt;&lt;code&gt;?error=invalid_request&amp;amp;error_description=Maybe_redirect_uri_was_mismatched&lt;/code&gt;&lt;/li&gt;&lt;/ul&gt;&lt;/li&gt;&lt;/ul&gt;&lt;/li&gt;&lt;/ol&gt;&lt;ol class=&quot;numbered-list&quot; id=&quot;13aa8095-7d32-40fd-bdad-a956caf43b92&quot; start=&quot;2&quot; type=&quot;1&quot;&gt;&lt;li&gt;인증 방식을 허가한다.&lt;div class=&quot;image notion-img&quot; id=&quot;7984cc10-02ea-4ff9-87e9-ff6f03071c35&quot;&gt;&lt;figure class=&quot;imageblock alignCenter&quot; width=&quot;493&quot; height=&quot;393&quot; data-origin-width=&quot;493&quot; data-origin-height=&quot;393&quot; data-ke-mobilestyle=&quot;widthOrigin&quot; filename=&quot;img.png&quot; filemime=&quot;image/png&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/W09d0/btrJge8Kl7t/sfKAvb95RYIQ9ppkJ6Ysf0/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/W09d0/btrJge8Kl7t/sfKAvb95RYIQ9ppkJ6Ysf0/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/W09d0/btrJge8Kl7t/sfKAvb95RYIQ9ppkJ6Ysf0/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FW09d0%2FbtrJge8Kl7t%2FsfKAvb95RYIQ9ppkJ6Ysf0%2Fimg.png&quot; width=&quot;493&quot; height=&quot;393&quot; data-origin-width=&quot;493&quot; data-origin-height=&quot;393&quot; data-ke-mobilestyle=&quot;widthOrigin&quot; filename=&quot;img.png&quot; filemime=&quot;image/png&quot; onerror=&quot;this.onerror=null; this.src='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png'; this.srcset='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png';&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;/div&gt;&lt;ul class=&quot;bulleted-list&quot; id=&quot;ca6ba1ca-43d6-4cdc-a343-025e300b9db1&quot;&gt;&lt;li style=&quot;list-style-type:disc&quot;&gt;정상 접속 되었다면, 다음 화면이 표시되는데 &lt;code&gt;허가하기&lt;/code&gt;를 누른다.&lt;/li&gt;&lt;/ul&gt;&lt;/li&gt;&lt;/ol&gt;&lt;ol class=&quot;numbered-list&quot; id=&quot;90a7dfd1-5772-4224-be2c-1bff03b67ced&quot; start=&quot;3&quot; type=&quot;1&quot;&gt;&lt;li&gt;그럼 자신의 서비스 URL로 이동하며, 브라우저 창에 &lt;code&gt;code&lt;/code&gt;가 나타나게 된다.&lt;p class=&quot;&quot; id=&quot;69d91986-59cd-4b4e-9e6c-da64d348607f&quot;&gt;&lt;code&gt;https://23log.tistory.com/?code=코드어쩌구저쩌구...state={state-param}&lt;/code&gt;&lt;/p&gt;&lt;p class=&quot;&quot; id=&quot;043de29e-80e2-404a-9a5d-0531930e9784&quot;&gt;해당 코드를 복사한다.&lt;/p&gt;&lt;/li&gt;&lt;/ol&gt;&lt;p class=&quot;&quot; id=&quot;29d68997-55c1-488d-8ce8-80f8c1b2c284&quot;&gt;4. 이제 Access Token을 발급받기 위해 아래 URL을 채워 보낸다.&lt;/p&gt;&lt;div class=&quot;indented&quot;&gt;&lt;pre class=&quot;code XML&quot; id=&quot;7c8246ce-06da-4c7e-9128-daab418d2351&quot;&gt;&lt;code&gt;https://www.tistory.com/oauth/access_token?
  client_id={발급 받은 APP ID}
  &amp;amp;client_secret={발급 받은 Secret Key}
  &amp;amp;redirect_uri={자신의 블로그 주소}
  &amp;amp;code={위에서 받은 code}
  &amp;amp;grant_type=authorization_code&lt;/code&gt;&lt;/pre&gt;&lt;ol class=&quot;numbered-list&quot; id=&quot;8ca876e5-b243-4e67-b4bb-28dcf446a068&quot; start=&quot;1&quot; type=&quot;1&quot;&gt;&lt;li&gt;크롬 개발자 도구를 열어, 네트워크 탭으로 이동한다.&lt;/li&gt;&lt;/ol&gt;&lt;ol class=&quot;numbered-list&quot; id=&quot;03bf75a7-eee7-4a8c-9a9c-9af44e2215b6&quot; start=&quot;2&quot; type=&quot;1&quot;&gt;&lt;li&gt;그 후 위 URL로 접속하면 응답값을 확인할 수 있다.&lt;div class=&quot;image notion-img&quot; id=&quot;e06852a6-0cd7-4707-8392-c809145637a3&quot;&gt;&lt;figure class=&quot;imageblock alignCenter&quot; width=&quot;1274&quot; height=&quot;294&quot; data-origin-width=&quot;1274&quot; data-origin-height=&quot;294&quot; data-ke-mobilestyle=&quot;widthOrigin&quot; filename=&quot;img.png&quot; filemime=&quot;image/png&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/dezm0k/btrJcGkTxGt/4H9Js5f8pYHeoClcNABjg0/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/dezm0k/btrJcGkTxGt/4H9Js5f8pYHeoClcNABjg0/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/dezm0k/btrJcGkTxGt/4H9Js5f8pYHeoClcNABjg0/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2Fdezm0k%2FbtrJcGkTxGt%2F4H9Js5f8pYHeoClcNABjg0%2Fimg.png&quot; width=&quot;1274&quot; height=&quot;294&quot; data-origin-width=&quot;1274&quot; data-origin-height=&quot;294&quot; data-ke-mobilestyle=&quot;widthOrigin&quot; filename=&quot;img.png&quot; filemime=&quot;image/png&quot; onerror=&quot;this.onerror=null; this.src='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png'; this.srcset='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png';&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;/div&gt;&lt;/li&gt;&lt;/ol&gt;&lt;ul class=&quot;bulleted-list&quot; id=&quot;ccf81d6d-3f6b-4506-be56-ddfd08179702&quot;&gt;&lt;li style=&quot;list-style-type:disc&quot;&gt;만약 &lt;code&gt;Check_the_callback_request_parameters&lt;/code&gt; 이라는 항목이 응답으로 오면,&lt;ul class=&quot;bulleted-list&quot; id=&quot;7c281ba8-3140-4024-9625-b1bfe8b4dcec&quot;&gt;&lt;li style=&quot;list-style-type:circle&quot;&gt;4번의 URL을 잘못 입력했을 경우거나&lt;/li&gt;&lt;/ul&gt;&lt;ul class=&quot;bulleted-list&quot; id=&quot;fc79033f-c219-46df-b91e-9dd87f47be40&quot;&gt;&lt;li style=&quot;list-style-type:circle&quot;&gt;혹은 코드가 달라진 경우인데, 2번을 다시 시도해서 코드를 새로 발급받아 시도한다.&lt;/li&gt;&lt;/ul&gt;&lt;/li&gt;&lt;/ul&gt;&lt;/div&gt;&lt;ol class=&quot;numbered-list&quot; id=&quot;54f2f43d-61ed-459f-892c-b4a7cf0c9c4a&quot; start=&quot;5&quot; type=&quot;1&quot;&gt;&lt;li&gt;응답값의 Access Token을 활용한다!&lt;/li&gt;&lt;/ol&gt;&lt;/div&gt;&lt;/article&gt;&lt;/body&gt;</description>
      <category>develop/back-side</category>
      <category>API</category>
      <category>Tistory</category>
      <author>3sammy</author>
      <guid isPermaLink="true">https://23log.tistory.com/167</guid>
      <comments>https://23log.tistory.com/167#entry167comment</comments>
      <pubDate>Sun, 7 Aug 2022 02:08:35 +0900</pubDate>
    </item>
    <item>
      <title>[jQuery] $(function(){}) 란?</title>
      <link>https://23log.tistory.com/120</link>
      <description>&lt;p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-filename=&quot;$(function(){})_넌_뭐니__ .png&quot; data-origin-width=&quot;700&quot; data-origin-height=&quot;350&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/bRX6fv/btrvZ372jlJ/wftYmwguIaZLGcklC5M9k1/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/bRX6fv/btrvZ372jlJ/wftYmwguIaZLGcklC5M9k1/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/bRX6fv/btrvZ372jlJ/wftYmwguIaZLGcklC5M9k1/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FbRX6fv%2FbtrvZ372jlJ%2FwftYmwguIaZLGcklC5M9k1%2Fimg.png&quot; onerror=&quot;this.onerror=null; this.src='//t1.daumcdn.net/tistory_admin/static/images/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;350&quot; data-filename=&quot;$(function(){})_넌_뭐니__ .png&quot; data-origin-width=&quot;700&quot; data-origin-height=&quot;350&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;/p&gt;
&lt;h3 data-ke-size=&quot;size23&quot;&gt;결론&lt;/h3&gt;
&lt;pre id=&quot;code_1647354077612&quot; class=&quot;javascript&quot; data-ke-language=&quot;javascript&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;$(function(){
	...
})

// 위/아래는 같은 의미이다.

$(document).ready(function(){
	...
})&lt;/code&gt;&lt;/pre&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;즉시실행 함수 앞에 제이쿼리 표시 구분자인 &lt;code&gt;$&lt;/code&gt;가 있다면, &lt;code&gt;document.ready&lt;/code&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;/h3&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;페이지에서 &lt;code&gt;document.ready&lt;/code&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;code&gt;window.onload&lt;/code&gt;의 경우 여러번 선언되어도 단 한번만 인식되지만, &lt;code&gt;document.ready&lt;/code&gt;는 여러번 선언되면 그거만큼 여러번 실행되기 때문에 위험도가 적은 편이다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;또한 JSP 특성상 공통 컴포넌트에 대해 &lt;code&gt;include&lt;/code&gt; 처리를 많이 하게 되는데, 그 과정에서 페이지의 계층 구조를 명확히 파악하지 못하면 &lt;code&gt;onload&lt;/code&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;code&gt;window.onload&lt;/code&gt; : CSS,JS,이미지리소스 등 모든 요소가 올려진 다음에 실행됨&lt;br /&gt;&lt;code&gt;document.ready&lt;/code&gt;&amp;nbsp;: 브라우저가 DOM 트리를 생성한 직후에 실행됨&lt;br /&gt;*추후 자세히 다루겠습니다.&lt;/blockquote&gt;
&lt;h3 data-ke-size=&quot;size23&quot;&gt;주의 할 것!&lt;/h3&gt;
&lt;pre id=&quot;code_1647354907922&quot; class=&quot;javascript&quot; data-ke-language=&quot;javascript&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;// 이건 그냥 즉시실행함수
(function(){
	...
});

// 이게 document.ready 축약형
$(function(){
	...
})&lt;/code&gt;&lt;/pre&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;바로 구조가 &lt;code&gt;즉시 실행 함수&lt;/code&gt;와 굉장히 유사하다는 점이다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;</description>
      <category>front/javascript</category>
      <category>javascript</category>
      <category>jquery</category>
      <author>3sammy</author>
      <guid isPermaLink="true">https://23log.tistory.com/120</guid>
      <comments>https://23log.tistory.com/120#entry120comment</comments>
      <pubDate>Tue, 15 Mar 2022 23:38:22 +0900</pubDate>
    </item>
    <item>
      <title>랜선(RJ45) 테스트기 사용 방법 (간략 정리 주의)</title>
      <link>https://23log.tistory.com/119</link>
      <description>&lt;blockquote data-ke-style=&quot;style3&quot;&gt;인트로가 좀 길어요, 위에서 바로 사용방법을 누르세요&lt;/blockquote&gt;
&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 data-ke-size=&quot;size16&quot;&gt;&lt;a href=&quot;https://23log.tistory.com/97&quot;&gt;공유기 2대로 멀티 Wifi 만들기 (공유기 허브 AP 모드)&lt;/a&gt;&lt;/p&gt;
&lt;figure id=&quot;og_1644761382117&quot; contenteditable=&quot;false&quot; data-ke-type=&quot;opengraph&quot; data-ke-align=&quot;alignCenter&quot; data-og-type=&quot;article&quot; data-og-title=&quot;공유기 2대로 멀티 Wifi 만들기 (공유기 허브 AP 모드)&quot; data-og-description=&quot;공유기&amp;nbsp;허브모드,&amp;nbsp;AP모드라고&amp;nbsp;검색하면&amp;nbsp;더욱&amp;nbsp;상세한&amp;nbsp;포스팅이&amp;nbsp;나온다. 여기선 필자가 겪은 상황에 대해서만 쓰고 추후 포스팅을 통해 상세히 다루겠다. 하려는 것과 준비물 하려는 것 : 랜&quot; data-og-host=&quot;23log.tistory.com&quot; data-og-source-url=&quot;https://23log.tistory.com/97&quot; data-og-url=&quot;https://23log.tistory.com/97&quot; data-og-image=&quot;https://scrap.kakaocdn.net/dn/bs7aCk/hyNpeoS2Sp/1ja9aufDQbzuRMFK7ZcKCK/img.png?width=800&amp;amp;height=892&amp;amp;face=0_0_800_892,https://scrap.kakaocdn.net/dn/WGp8k/hyNpeh7dNc/PcOZ9FOssJfAsFysEbcwuK/img.png?width=800&amp;amp;height=892&amp;amp;face=0_0_800_892,https://scrap.kakaocdn.net/dn/lmGn9/hyNpgG0Z5F/EwENlkOcdonoP4lC7UxYg1/img.png?width=1164&amp;amp;height=1299&amp;amp;face=0_0_1164_1299&quot;&gt;&lt;a href=&quot;https://23log.tistory.com/97&quot; target=&quot;_blank&quot; rel=&quot;noopener&quot; data-source-url=&quot;https://23log.tistory.com/97&quot;&gt;
&lt;div class=&quot;og-image&quot; style=&quot;background-image: url('https://scrap.kakaocdn.net/dn/bs7aCk/hyNpeoS2Sp/1ja9aufDQbzuRMFK7ZcKCK/img.png?width=800&amp;amp;height=892&amp;amp;face=0_0_800_892,https://scrap.kakaocdn.net/dn/WGp8k/hyNpeh7dNc/PcOZ9FOssJfAsFysEbcwuK/img.png?width=800&amp;amp;height=892&amp;amp;face=0_0_800_892,https://scrap.kakaocdn.net/dn/lmGn9/hyNpgG0Z5F/EwENlkOcdonoP4lC7UxYg1/img.png?width=1164&amp;amp;height=1299&amp;amp;face=0_0_1164_1299');&quot;&gt;&amp;nbsp;&lt;/div&gt;
&lt;div class=&quot;og-text&quot;&gt;
&lt;p class=&quot;og-title&quot; data-ke-size=&quot;size16&quot;&gt;공유기 2대로 멀티 Wifi 만들기 (공유기 허브 AP 모드)&lt;/p&gt;
&lt;p class=&quot;og-desc&quot; data-ke-size=&quot;size16&quot;&gt;공유기&amp;nbsp;허브모드,&amp;nbsp;AP모드라고&amp;nbsp;검색하면&amp;nbsp;더욱&amp;nbsp;상세한&amp;nbsp;포스팅이&amp;nbsp;나온다. 여기선 필자가 겪은 상황에 대해서만 쓰고 추후 포스팅을 통해 상세히 다루겠다. 하려는 것과 준비물 하려는 것 : 랜&lt;/p&gt;
&lt;p class=&quot;og-host&quot; data-ke-size=&quot;size16&quot;&gt;23log.tistory.com&lt;/p&gt;
&lt;/div&gt;
&lt;/a&gt;&lt;/figure&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;이 과정에서 5층에서 가져온 랜선을 연결하기 위해 창문용 랜케이블 브릿지를 사용하고 있었습니다. 하지만 최근 간헐적으로 인터넷이 끊기는 문제가 발생했습니다. 처음엔 서브 공유기 AP 허브 모드가 풀려있어서 그런가 보다 했는데, 그 이후에도 계속 장기간 사용을 하지 않으면 네트워크가 맘대로 끊기는 (IP 할당이 이상한) 현상이 발생했습니다.&lt;/p&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-origin-width=&quot;427&quot; data-origin-height=&quot;204&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/dnzSvf/btrtb0j8tRu/jDJ6D8JIk9U2tsmcF7NImK/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/dnzSvf/btrtb0j8tRu/jDJ6D8JIk9U2tsmcF7NImK/img.png&quot; data-alt=&quot;요 제품!&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/dnzSvf/btrtb0j8tRu/jDJ6D8JIk9U2tsmcF7NImK/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FdnzSvf%2Fbtrtb0j8tRu%2FjDJ6D8JIk9U2tsmcF7NImK%2Fimg.png&quot; onerror=&quot;this.onerror=null; this.src='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png'; this.srcset='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png';&quot; loading=&quot;lazy&quot; width=&quot;427&quot; height=&quot;204&quot; data-origin-width=&quot;427&quot; data-origin-height=&quot;204&quot;/&gt;&lt;/span&gt;&lt;figcaption&gt;요 제품!&lt;/figcaption&gt;
&lt;/figure&gt;
&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;아무래도 위 제품(창문형 브릿지)의 영향이 있다고 생각했습니다. 왜냐면, 한쪽 면의 입구가 밖 창문에 있었거든요. 나름대로 플라스틱 컵으로 덮어 먼지를 막아보겠다 했지만, 그렇게 쉽게 되진 않겠죠.. 음. &lt;b&gt;네트워크 대공사&lt;/b&gt;가 필요한 순간이었습니다.&lt;/p&gt;
&lt;blockquote data-ke-style=&quot;style1&quot;&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;font-family: AppleSDGothicNeo-Regular, 'Malgun Gothic', '맑은 고딕', dotum, 돋움, sans-serif;&quot;&gt;참고로 현재 &lt;code&gt;메인 공유기 &amp;lt;-&amp;gt; 랜선 &amp;lt;-&amp;gt; 창문형 브릿지 &amp;lt;-&amp;gt; 랜선 &amp;lt;-&amp;gt; 서브 공유기 &amp;lt;-&amp;gt; 맥북&lt;/code&gt; 의 형태로 연결되어 있습니다. 총 3단계를 거쳐 들어오고 있습니다.&lt;/span&gt;&lt;/p&gt;
&lt;/blockquote&gt;
&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 data-ke-size=&quot;size16&quot;&gt;쿠팡에서 로켓이 가능한 랜선 테스트기 중 가장 저렴한 녀석으로 구매했습니다. 한 4,700원 정도였던 것 같습니다.&lt;/p&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;p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-origin-width=&quot;925&quot; data-origin-height=&quot;1160&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/bpLlXo/btrtajYVQmu/uH3t7GRCp7YkgmgrbIfDSK/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/bpLlXo/btrtajYVQmu/uH3t7GRCp7YkgmgrbIfDSK/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/bpLlXo/btrtajYVQmu/uH3t7GRCp7YkgmgrbIfDSK/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FbpLlXo%2FbtrtajYVQmu%2FuH3t7GRCp7YkgmgrbIfDSK%2Fimg.png&quot; onerror=&quot;this.onerror=null; this.src='//t1.daumcdn.net/tistory_admin/static/images/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;627&quot; data-origin-width=&quot;925&quot; data-origin-height=&quot;1160&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;왼쪽(커다란) 녀석이 마스터, 오른쪽(얇은) 녀석이 리모트/슬레이브 입니다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;건전지는 마스터 부분에 9V 전지를 끼우면 됩니다.&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;884&quot; data-origin-height=&quot;1034&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/sycK4/btrs7mbwP5D/AiUcFgGpoPLOIMmSRyM8p1/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/sycK4/btrs7mbwP5D/AiUcFgGpoPLOIMmSRyM8p1/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/sycK4/btrs7mbwP5D/AiUcFgGpoPLOIMmSRyM8p1/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FsycK4%2Fbtrs7mbwP5D%2FAiUcFgGpoPLOIMmSRyM8p1%2Fimg.png&quot; onerror=&quot;this.onerror=null; this.src='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png'; this.srcset='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png';&quot; loading=&quot;lazy&quot; width=&quot;400&quot; height=&quot;468&quot; data-origin-width=&quot;884&quot; data-origin-height=&quot;1034&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;b&gt;랜 케이블을 마스터의 우측에다가, 슬레이브 위쪽에&lt;/b&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;br /&gt;슬레이브는 위쪽이 인터넷선/ 아래가 전화선 입니다.&lt;/blockquote&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-origin-width=&quot;941&quot; data-origin-height=&quot;1257&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/eoMp8X/btrtehGiLCg/cNGvyhyePXWak27j290cs0/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/eoMp8X/btrtehGiLCg/cNGvyhyePXWak27j290cs0/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/eoMp8X/btrtehGiLCg/cNGvyhyePXWak27j290cs0/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FeoMp8X%2FbtrtehGiLCg%2FcNGvyhyePXWak27j290cs0%2Fimg.png&quot; onerror=&quot;this.onerror=null; this.src='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png'; this.srcset='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png';&quot; loading=&quot;lazy&quot; width=&quot;400&quot; height=&quot;534&quot; data-origin-width=&quot;941&quot; data-origin-height=&quot;1257&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;b&gt;위 처럼 꽂고 전원 버튼을 ON&lt;/b&gt;으로 두면 1번부터 빠르게 점멸하며 테스트를 시작합니다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;blockquote data-ke-style=&quot;style1&quot;&gt;&lt;span style=&quot;font-family: AppleSDGothicNeo-Regular, 'Malgun Gothic', '맑은 고딕', dotum, 돋움, sans-serif;&quot;&gt;&lt;b&gt;버튼 설명&lt;/b&gt;&lt;br /&gt;&lt;code&gt;ON : 빠르게 점멸하며 테스트&lt;/code&gt;&lt;br /&gt;&lt;code&gt;S : 느리게 점멸하는 모드, 어느 라인이 안되는지 확실히 확인하고자 할 때&lt;/code&gt;&lt;/span&gt;&lt;/blockquote&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-origin-width=&quot;846&quot; data-origin-height=&quot;457&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/y8EUb/btrtif2g0t9/cqH5oAtENCqm5Grm7UHai1/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/y8EUb/btrtif2g0t9/cqH5oAtENCqm5Grm7UHai1/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/y8EUb/btrtif2g0t9/cqH5oAtENCqm5Grm7UHai1/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2Fy8EUb%2Fbtrtif2g0t9%2FcqH5oAtENCqm5Grm7UHai1%2Fimg.png&quot; onerror=&quot;this.onerror=null; this.src='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png'; this.srcset='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png';&quot; loading=&quot;lazy&quot; width=&quot;400&quot; height=&quot;216&quot; data-origin-width=&quot;846&quot; data-origin-height=&quot;457&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;랜케이블을 다이렉트로 구성하였다면, &lt;b&gt;1 ➡️ 2 ➡️ 3 ➡️ 4 ➡️ 5 ➡️ 6 ➡️ 7 ➡️ 8 순서대로 점멸&lt;/b&gt;하며 내려옵니다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;이 과정에서 잘못된 라인, 혹은 제대로 랜 커넥터가 연결되지 않다면 특정 라인의 불이 들어오지 않을 것입니다. 이렇게 하면 손쉽게 현재 랜선이 정상인지를 확인 할 수 있습니다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;blockquote data-ke-size=&quot;size16&quot; data-ke-style=&quot;style1&quot;&gt;만약 크로스 케이블로 구성하였다면, 3 ➡️ 6 ➡️ 1 ➡️ 4 ➡️ 5 ➡️ 2 ➡️ 7 ➡️ 8 번이 순서대로 점멸할 것입니다&lt;br /&gt;(크로스로 구성하지 못해 확인은 못했습니다  ..)&lt;br /&gt;(추후 확인하여 수정할게요!)&lt;/blockquote&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;

            &lt;figure class=&quot;unsupported component-kakaotv&quot; contenteditable=&quot;false&quot; style=&quot;background:#000;margin:16px 0;min-height:72px;padding:10px 16px;display:flex;align-items:center;justify-content:center;text-align:center;box-sizing:border-box;width:100%;max-width:100%;&quot;&gt;
                &lt;p contenteditable=&quot;false&quot; style=&quot;margin:0;color:#8a8a8a;font-size:13px;line-height:1.6;user-select:none;pointer-events:none;&quot;&gt;동영상 서비스가 종료되어 해당 콘텐츠를 재생할 수 없습니다.&lt;/p&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;실제로 정상적인 랜선 두개와 창문형 브릿지를 연결해서 테스트를 해보니 5번 라인에서 불이 들어오지 않는 것을 확인했습니다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;브릿지가 문제일 것이라고 추측만 했는데, 실제로 문제가 있는 걸 확인하니 묘한 쾌감을 느꼈네요..  &lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;h3 data-ke-size=&quot;size23&quot;&gt;이용 후기&lt;/h3&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;b&gt;1. 진즉 살 껄!&lt;/b&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;맨 처음 이런 네트워크를 구축한게 2년전이었습니다.. 그땐 맥북을 들고 왔다갔다 하며 실제 공유기에서 내 맥북까지 제대로 쏴주는지만 확인했습니다.. 이번에도 그 과정을 또 하려니 정신이 아득해져서 알아본건데, 금액이 이렇게 저렴할 줄은 몰랐습니다..&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;아무튼 5층과 6층을 왔다갔다 하는건 똑같지만, 적어도 터미널에서 ping을 계속 날릴 필요는 없어졌다는게 큰 장점이었습니다. 직관적이었고 너무 편했습니다. 그리고 가벼웠어요..&lt;/p&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;2. 또 만났네?&lt;/b&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;통신 소대장으로 복무하며 저 랜 테스터기를 많이 보았습니다. 하지만 네트워크반이 아니라서 직접 해당 장비를 조작할 기회는 없었습니다. 그러다가 전역한 후에 저 장비를 보게 될 줄은 몰랐네요.. 감회가 새롭다 해야할까요..&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;지금 생각하면 통신 소대장으로 복무한 경험은 참 좋은 것 같습니다. 통신 장비가 안될 때, 조작부/케이블/장비 까지 순차적으로 테스트하며 원인을 찾아가는 방식을 몸소 체득할 수 있었으니까요. 확실하게 가능한 변수들을 찾아놓고, 완벽하게 통제 가능한 환경에서 테스트 하는 일들을 계속 하다보니 지금도 자연스럽게 습관화 된 것 같습니다. 그리고 이런 습관들은 직장에서 개발 업무를 할 때 큰 도움이 되고 있는 걸 보면, 참 삶은 모르는 것 같아요. 앞으로도 다양하게 부딪혀 보아야겠어요.&lt;/p&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;blockquote data-ke-style=&quot;style3&quot;&gt;방 리모델링 끝나고, 현재 개발 업무건 끝나면 다양한 포스팅으로 올게요!&lt;/blockquote&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;</description>
      <category>정보/TECH</category>
      <author>3sammy</author>
      <guid isPermaLink="true">https://23log.tistory.com/119</guid>
      <comments>https://23log.tistory.com/119#entry119comment</comments>
      <pubDate>Sun, 13 Feb 2022 23:34:12 +0900</pubDate>
    </item>
    <item>
      <title>...args / 스프레드 변수 / 확산 매개변수 / 나머지 매개변수에 대하여</title>
      <link>https://23log.tistory.com/118</link>
      <description>&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;700&quot; data-origin-height=&quot;350&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/0UaXp/btrsktUM7zD/IKeRaKdvUYqJ9UYgPhAgoK/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/0UaXp/btrsktUM7zD/IKeRaKdvUYqJ9UYgPhAgoK/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/0UaXp/btrsktUM7zD/IKeRaKdvUYqJ9UYgPhAgoK/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2F0UaXp%2FbtrsktUM7zD%2FIKeRaKdvUYqJ9UYgPhAgoK%2Fimg.png&quot; onerror=&quot;this.onerror=null; this.src='//t1.daumcdn.net/tistory_admin/static/images/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;350&quot; data-filename=&quot;확산_매개변수,_나머지_매개변수에_대하여_ .png&quot; data-origin-width=&quot;700&quot; data-origin-height=&quot;350&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;다른 사람의 Javascript 코드를 보다보면 매개변수로 들어오는 &lt;code&gt;...args&lt;/code&gt;를 자주 볼 것이다.&lt;br /&gt;과연, &lt;code&gt;...&lt;/code&gt; 이 무엇일까?&lt;/p&gt;
&lt;h2 data-ke-size=&quot;size26&quot;&gt;용어의 다른 이름은?&lt;/h2&gt;
&lt;pre class=&quot;actionscript&quot;&gt;&lt;code&gt;function sum(...args){
    ...
}&lt;/code&gt;&lt;/pre&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;먼저 위 코드처럼 매개변수의 위치에 존재하고 있다. 따라서, 아래처럼 여러가지 이름으로 불리고 있다.&lt;br /&gt;우선 여기선 &lt;code&gt;확산 매개변수&lt;/code&gt; 라고 부르겠다.&lt;/p&gt;
&lt;ul style=&quot;list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li&gt;확산 매개변수&lt;/li&gt;
&lt;li&gt;나머지 매개변수&lt;/li&gt;
&lt;li&gt;스프레드 변수&lt;/li&gt;
&lt;li&gt;(외국) &lt;code&gt;...&lt;/code&gt;&lt;/li&gt;
&lt;li&gt;(외국) three dots&lt;/li&gt;
&lt;/ul&gt;
&lt;h2 data-ke-size=&quot;size26&quot;&gt;정의&lt;/h2&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;확산 매개변수는 자바스크립트의 함수 선언의 매개변수에서 활용되는 개념이다. ES6에서 추가된 문법으로 &lt;code&gt;...&lt;/code&gt; 을 사용하여 매개변수로 들어오는 변수의 나머지 값들을 받아오게 하는 기능이다.&lt;/p&gt;
&lt;blockquote data-ke-style=&quot;style1&quot;&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;font-family: AppleSDGothicNeo-Regular, 'Malgun Gothic', '맑은 고딕', dotum, 돋움, sans-serif;&quot;&gt;... 은 확산 연산자 / 스프레드 연산자 이다.&lt;/span&gt;&lt;br /&gt;&lt;span style=&quot;font-family: AppleSDGothicNeo-Regular, 'Malgun Gothic', '맑은 고딕', dotum, 돋움, sans-serif;&quot;&gt;이는 배열의 나머지 값들을 손쉽게 받아오는 기능으로 ES6에서 추가되었다.&lt;/span&gt;&lt;br /&gt;&lt;span style=&quot;font-family: AppleSDGothicNeo-Regular, 'Malgun Gothic', '맑은 고딕', dotum, 돋움, sans-serif;&quot;&gt;이를 함수의 매개변수 부분에 선언하면 손쉽게 함수를 확장 할 수 있는 확산 매개변수의 기능을 할 수 있게 된다.&lt;/span&gt;&lt;/p&gt;
&lt;/blockquote&gt;
&lt;h2 data-ke-size=&quot;size26&quot;&gt;사용법&lt;/h2&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;함수의 매개변수 부분에서 &lt;code&gt;...&lt;/code&gt; 을 선언하여 나머지로 인입되는 매개변수를 받으면 된다.&lt;/p&gt;
&lt;pre class=&quot;actionscript&quot;&gt;&lt;code&gt;function getGrade(a,b,c ...args){
    ...
}

getGrade(10,20,30,40,50);
// 위 처럼 실행할 경우, 10, 20, 30은 정상적으로 a,b,c라는 변수명으로 맵핑된다.
// 나머지 추가적으로 들어오는 40, 50은 나머지로 취급되어 args 객체 안으로 들어간다.&lt;/code&gt;&lt;/pre&gt;
&lt;ul style=&quot;list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li&gt;&lt;code&gt;args&lt;/code&gt; 는 배열처럼 사용 가능한 &lt;code&gt;객체&lt;/code&gt; 이다.&lt;/li&gt;
&lt;li&gt;&lt;code&gt;...args&lt;/code&gt; 는 매개변수의 맨 마지막에 쓴다.&lt;/li&gt;
&lt;li&gt;매개변수에서 &lt;code&gt;...args&lt;/code&gt; 는 하나만 존재해야 한다.
&lt;ul style=&quot;list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li&gt;
&lt;pre id=&quot;code_1643737394181&quot; data-ke-language=&quot;javascript&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;function getGrade(a, b, c, d, e, ...agrs){}; // [O]
function getGrade(...args1, ...args2, ...args3){}; // [X]&lt;/code&gt;&lt;/pre&gt;
&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;/ul&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;p data-ke-size=&quot;size16&quot;&gt;그리고 자바스크립트에서 함수를 여러가지 방면으로 활용하는 방식을 고민했다. 자바에서는 &lt;code&gt;메소드 오버로딩&lt;/code&gt; 을 통해 하나의 함수명을 다방면으로 쓸 수 있는데, 자바스크립트에선 이를 지원하지 않는다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;a href=&quot;https://23log.tistory.com/110&quot;&gt;자바스크립트 함수는 매개변수에 따라 다르게 활용될까?&lt;/a&gt;&lt;/p&gt;
&lt;figure id=&quot;og_1643737399513&quot; contenteditable=&quot;false&quot; data-ke-type=&quot;opengraph&quot; data-ke-align=&quot;alignCenter&quot; data-og-type=&quot;article&quot; data-og-title=&quot;자바스크립트 함수는 매개변수에 따라 다르게 활용될까?&quot; data-og-description=&quot;인트로 자바 Java의 OOP 개념 중에 메소드 오버로딩 Method Overloading 이 있다. 이는 메소드가 동일 이름을 가지고 있어도, 들어가는 매개변수가 다르면 다르게 인식된다는 의미이다. pulbic int getGrade(){&quot; data-og-host=&quot;23log.tistory.com&quot; data-og-source-url=&quot;https://23log.tistory.com/110&quot; data-og-url=&quot;https://23log.tistory.com/110&quot; data-og-image=&quot;https://scrap.kakaocdn.net/dn/sxp9Z/hyNhL7vSLz/jYGNzxQLIHLnu2K74k9U11/img.png?width=700&amp;amp;height=350&amp;amp;face=0_0_700_350,https://scrap.kakaocdn.net/dn/K9kZC/hyNhWOJF4E/aCwRDlttHLytCAAbP4CMMK/img.png?width=700&amp;amp;height=350&amp;amp;face=0_0_700_350,https://scrap.kakaocdn.net/dn/bcjioS/hyNglP69jI/FPsJ2m282EFEQS3LT72CE1/img.png?width=700&amp;amp;height=350&amp;amp;face=0_0_700_350&quot;&gt;&lt;a href=&quot;https://23log.tistory.com/110&quot; target=&quot;_blank&quot; rel=&quot;noopener&quot; data-source-url=&quot;https://23log.tistory.com/110&quot;&gt;
&lt;div class=&quot;og-image&quot; style=&quot;background-image: url('https://scrap.kakaocdn.net/dn/sxp9Z/hyNhL7vSLz/jYGNzxQLIHLnu2K74k9U11/img.png?width=700&amp;amp;height=350&amp;amp;face=0_0_700_350,https://scrap.kakaocdn.net/dn/K9kZC/hyNhWOJF4E/aCwRDlttHLytCAAbP4CMMK/img.png?width=700&amp;amp;height=350&amp;amp;face=0_0_700_350,https://scrap.kakaocdn.net/dn/bcjioS/hyNglP69jI/FPsJ2m282EFEQS3LT72CE1/img.png?width=700&amp;amp;height=350&amp;amp;face=0_0_700_350');&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;인트로 자바 Java의 OOP 개념 중에 메소드 오버로딩 Method Overloading 이 있다. 이는 메소드가 동일 이름을 가지고 있어도, 들어가는 매개변수가 다르면 다르게 인식된다는 의미이다. pulbic int getGrade(){&lt;/p&gt;
&lt;p class=&quot;og-host&quot; data-ke-size=&quot;size16&quot;&gt;23log.tistory.com&lt;/p&gt;
&lt;/div&gt;
&lt;/a&gt;&lt;/figure&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;위 글 처럼, &lt;code&gt;자바스크립트는 매개변수에 따라 다르게 활용되지 않는다&lt;/code&gt; 그렇담 함수를 다양하게 사용하려면 어떻게 해야할까?&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;br /&gt;바로 이 궁금증에서 시작해서 확산 매개변수를 찾아보게 되었고, 관련된 함수를 작성하게 되었다.&lt;/p&gt;
&lt;h2 data-ke-size=&quot;size26&quot;&gt;확산 매개변수의 사용법&lt;/h2&gt;
&lt;pre class=&quot;actionscript&quot;&gt;&lt;code&gt;function printAll(arr){
  for(let i = 0; i &amp;lt; arr.length; i++){
      console.log(arr[i]);
  }
}

function getText(a,b, ...args){
    console.log('첫번째 매개변수 : ' + a);
    console.log('두번째 매개변수 : ' + b);
      printAll(...args);
}

getText(10, 20, [1,2,3,4,5]);

// 첫번째 매개변수 : 10
// 두번째 매개변수 : 20
// 1
// 2
// 3
// 4
// 5&lt;/code&gt;&lt;/pre&gt;
&lt;ul style=&quot;list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li&gt;만약 args로 들어왔다고 해서 &lt;code&gt;args&lt;/code&gt; 만 쓴다면 이는 객체로 인식한다.
&lt;ul style=&quot;list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li&gt;따라서, 위 상황에서 &lt;code&gt;printAll(args)&lt;/code&gt;를 했다면, 그냥 객체 1개, 매개변수 1개를 입력한 상황이 된다.&lt;/li&gt;
&lt;li&gt;&lt;code&gt;typeOf(args) = Object&lt;/code&gt; 이다.&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt;따라서, 나머지 매개변수(배열)로 입력된 값을 고~대로 배열로 보내주기 위해선 &lt;code&gt;printAll(...args)&lt;/code&gt; 를 입력하여 그대로 보내주면 된다.&lt;/li&gt;
&lt;/ul&gt;
&lt;h2 data-ke-size=&quot;size26&quot;&gt;확산 매개변수의 존재 유무 파악하기&lt;/h2&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;code&gt;args&lt;/code&gt; 는 배열처럼 사용 가능한 객체이기 때문에, &lt;code&gt;args.length&lt;/code&gt;로 판단이 가능하다.&lt;/p&gt;
&lt;ul style=&quot;list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li&gt;&lt;code&gt;args.length == 0&lt;/code&gt; : 넘어온 매개변수 없음&lt;/li&gt;
&lt;li&gt;&lt;code&gt;args.length &amp;gt; 0&lt;/code&gt; : 넘어온 매개변수 있음&lt;/li&gt;
&lt;/ul&gt;</description>
      <category>front/javascript</category>
      <category>javascript</category>
      <author>3sammy</author>
      <guid isPermaLink="true">https://23log.tistory.com/118</guid>
      <comments>https://23log.tistory.com/118#entry118comment</comments>
      <pubDate>Wed, 2 Feb 2022 02:43:45 +0900</pubDate>
    </item>
    <item>
      <title>애플케어플러스(Apple Care+) 만료일 당일에도 리퍼를 받을 수 있을까?</title>
      <link>https://23log.tistory.com/116</link>
      <description>&lt;p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-origin-width=&quot;1200&quot; data-origin-height=&quot;630&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/WCCcK/btrr9znlcku/guZSFYOhupTWf7IgZIYKe0/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/WCCcK/btrr9znlcku/guZSFYOhupTWf7IgZIYKe0/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/WCCcK/btrr9znlcku/guZSFYOhupTWf7IgZIYKe0/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FWCCcK%2Fbtrr9znlcku%2FguZSFYOhupTWf7IgZIYKe0%2Fimg.png&quot; onerror=&quot;this.onerror=null; this.src='//t1.daumcdn.net/tistory_admin/static/images/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;315&quot; data-origin-width=&quot;1200&quot; data-origin-height=&quot;630&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;h3 data-ke-size=&quot;size23&quot;&gt;선 결론&lt;/h3&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;애플 케어 플러스(이하 '애케플')이 적용 받는 시점은, &lt;b&gt;센터에서 진단 후의 접수일&lt;/b&gt;을 기준으로 처리되는 것 같습니다!&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;h3 data-ke-size=&quot;size23&quot;&gt;후 과정&lt;/h3&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-origin-width=&quot;208&quot; data-origin-height=&quot;155&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/bBw6KJ/btrr9gVQWL1/pq2Njma38iwzLHYeRosIX0/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/bBw6KJ/btrr9gVQWL1/pq2Njma38iwzLHYeRosIX0/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/bBw6KJ/btrr9gVQWL1/pq2Njma38iwzLHYeRosIX0/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FbBw6KJ%2Fbtrr9gVQWL1%2Fpq2Njma38iwzLHYeRosIX0%2Fimg.png&quot; onerror=&quot;this.onerror=null; this.src='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png'; this.srcset='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png';&quot; loading=&quot;lazy&quot; width=&quot;208&quot; height=&quot;155&quot; data-origin-width=&quot;208&quot; data-origin-height=&quot;155&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;지난 2020년 1월 28일 에어팟 프로와 함께 애플케어플러스를 구매했다. 그리고 정말 열심히도 들었다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;그러다 작년 &lt;b&gt;급성 저음성 난청&lt;/b&gt;에 걸리며, 에어팟 프로를 리퍼 받았다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;a href=&quot;https://23log.tistory.com/114&quot; target=&quot;_blank&quot; rel=&quot;noopener&quot;&gt;급성 저음성 난청에 걸렸다. 그 때의 짧은 기록&lt;/a&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;그리고 5개월 정도를 사용했는데, 에어팟 프로 전체를 떨어뜨리며 물에 빠지게 되었다..  &lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;충격과 함께 떨어졌는데, 한 쪽 유닛이 상태가 이상했고 전체적으로 물에 들어간 터라 찝찝했다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;애플 케어 플러스가 생각나서 조회해보니 1/29일 까지로 되어 있었다. 오늘이 28일인데, 바로 내일이 만료네? 이거 되는거야?&lt;/p&gt;
&lt;blockquote data-ke-size=&quot;size16&quot; data-ke-style=&quot;style1&quot;&gt;[설정-블루투스-에어팟 프로 옆 i 버튼]을 누르면 애플케어플러스의 보증 기한이 나타난다.&lt;br /&gt;이 기한이 &lt;b&gt;2022/01/29&lt;/b&gt; 로 되어 있다는 의미이다.&lt;/blockquote&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;a href=&quot;https://getsupport.apple.com/&quot;&gt;https://getsupport.apple.com/&lt;/a&gt;&lt;/p&gt;
&lt;figure id=&quot;og_1643547348390&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;Get Support&quot; data-og-description=&quot;&quot; data-og-host=&quot;getsupport.apple.com&quot; data-og-source-url=&quot;https://getsupport.apple.com/&quot; data-og-url=&quot;https://getsupport.apple.com/&quot; data-og-image=&quot;&quot;&gt;&lt;a href=&quot;https://getsupport.apple.com/&quot; target=&quot;_blank&quot; rel=&quot;noopener&quot; data-source-url=&quot;https://getsupport.apple.com/&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;Get Support&lt;/p&gt;
&lt;p class=&quot;og-desc&quot; data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p class=&quot;og-host&quot; data-ke-size=&quot;size16&quot;&gt;getsupport.apple.com&lt;/p&gt;
&lt;/div&gt;
&lt;/a&gt;&lt;/figure&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;우선 애플 지원 센터로 접속하여, 에어팟을 선택하고. 물리적 손상 또는 액체에 의한 손상을 선택했다.&lt;/p&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-origin-width=&quot;247&quot; data-origin-height=&quot;211&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/nIdFx/btrr6AtjojF/ZsKsGZYB3ZJ6wB6UAbjujk/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/nIdFx/btrr6AtjojF/ZsKsGZYB3ZJ6wB6UAbjujk/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/nIdFx/btrr6AtjojF/ZsKsGZYB3ZJ6wB6UAbjujk/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FnIdFx%2Fbtrr6AtjojF%2FZsKsGZYB3ZJ6wB6UAbjujk%2Fimg.png&quot; onerror=&quot;this.onerror=null; this.src='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png'; this.srcset='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png';&quot; loading=&quot;lazy&quot; width=&quot;247&quot; height=&quot;211&quot; data-origin-width=&quot;247&quot; data-origin-height=&quot;211&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;그리고 손상된 에어팟 교체를 선택하였고, 빠른 접수를 위해 제품 가져가기를 눌렀다. 로그인 과정 이후 일련변호를 입력하면 예약 할 수 있는 화면이 나타난다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;blockquote data-ke-style=&quot;style1&quot;&gt;&lt;span style=&quot;font-family: 'Noto Serif KR';&quot;&gt;&lt;span style=&quot;font-family: AppleSDGothicNeo-Regular, 'Malgun Gothic', '맑은 고딕', dotum, 돋움, sans-serif;&quot;&gt;에어팟의 &lt;b&gt;일련번호&lt;/b&gt;는 [설정-블루투스-에어팟 프로 옆에 i 버튼]을 누르면 나타난다.&lt;/span&gt;&lt;br /&gt;&lt;/span&gt;&lt;/blockquote&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-origin-width=&quot;1092&quot; data-origin-height=&quot;900&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/T4od4/btrr2YoCZbe/KRVeiTB9tXWd9A5uPXMLHK/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/T4od4/btrr2YoCZbe/KRVeiTB9tXWd9A5uPXMLHK/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/T4od4/btrr2YoCZbe/KRVeiTB9tXWd9A5uPXMLHK/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FT4od4%2Fbtrr2YoCZbe%2FKRVeiTB9tXWd9A5uPXMLHK%2Fimg.png&quot; onerror=&quot;this.onerror=null; this.src='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png'; this.srcset='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png';&quot; loading=&quot;lazy&quot; width=&quot;1092&quot; height=&quot;900&quot; data-origin-width=&quot;1092&quot; data-origin-height=&quot;900&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;그러면 위 처럼 예약 지도가 나오는데, 이중에서 &lt;b&gt;예약 가능 시간&lt;/b&gt;을 선택하면 가장 빨리 예약할 수 있는 센터가 순서별로 나온다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;아주 다행히 29일(만료일)에 가능한 센터가 있어 곧바로 예약했다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;그리고 만료일 당일에 방문해서 진단을 받았다. 왼쪽 유닛에 손상이 있고, 물에 빠졌으므로 케이스/왼쪽 유닛/오른쪽 유닛 전체의 리퍼가 결정되었다. 그리고 애플케어플러스가 29일까지 만료였으므로 이를 적용하여 전체 리퍼(4만원)으로 진행했다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;자세히는 모르겠지만 아래의 과정으로 진행되는 것으로 보였다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;1. 문제가 되는 제품의 문제를 &lt;b&gt;진단&lt;/b&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;2. 진단이 끝난 후, 해당 문제의 &lt;b&gt;해결 방법을 결정&lt;/b&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;3. 그 방법이 리퍼라면, 애플 센터에 &lt;b&gt;'리퍼' 로 접수&lt;/b&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;위 과정에서 3번의 &lt;b&gt;접수일&lt;/b&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: AppleSDGothicNeo-Regular, 'Malgun Gothic', '맑은 고딕', dotum, 돋움, sans-serif;&quot;&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;&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;h4 data-ke-size=&quot;size20&quot;&gt;덧.&lt;/h4&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;많은 사람들이 애플의 A/S 정책에 불만을 가진다. 특히, 애케플 리퍼의 경우 '곧 만료 인데 리퍼나 받아야 겠다' 라고 생각하여 찾아가는 경우가 많다. 하지만 애플에선 리퍼 사유가 없으면, 진행하지 않아준다. 애케플도 비싼 돈 주고 가입했고, 리퍼도 공짜가 아닌 일정 금액을 지불하는데 왜 안되냐고 불만을 가진다. (나도 그렇다)&lt;/p&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;</description>
      <category>정보/TECH</category>
      <author>3sammy</author>
      <guid isPermaLink="true">https://23log.tistory.com/116</guid>
      <comments>https://23log.tistory.com/116#entry116comment</comments>
      <pubDate>Tue, 1 Feb 2022 17:13:00 +0900</pubDate>
    </item>
    <item>
      <title>3차 예방접종 부스트샷 예약 취소..  </title>
      <link>https://23log.tistory.com/115</link>
      <description>&lt;h3 data-ke-size=&quot;size23&quot;&gt;취소 이유&lt;/h3&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;3차 부스트샷을 취소했다. 이유는 이번에 진행하는 개발건이 부스트샷 접종 즈음 테스트를 진행한다고 했기 때문이다. 그래서 개발도 마무리하고, 미비된 부분도 얼른 개발하기 위해선 이틀간의 백신 휴가가 불가하다고 생각이 들었다. 구정 연휴동안 쉬면 그 만큼 개발 시간도 없고 해서 취소를 결정했다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;추가적으로 백신 접종은 180일이란 기한에 맞게 하는 것이 좋다는 얘기를 들어서, 이 기한을 맞춰야지 싶었다. 3차 백신 맞아도 오미크론 돌파 감염 된다는 기사도 많이 보긴 했고. 뭐. 암튼 취소, 취소!&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;p data-ke-size=&quot;size16&quot;&gt;예방 접종을 예약한 병원에서 해도 되지만, 구정 연휴라 전화가 어려울 것 같아 홈페이지에서 진행하려고 한다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;우선 아래의 예방 접종 사이트로 접속한다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;a href=&quot;https://ncvr2.kdca.go.kr/&quot;&gt;https://ncvr2.kdca.go.kr/&lt;/a&gt;&lt;/p&gt;
&lt;figure id=&quot;og_1643546129728&quot; contenteditable=&quot;false&quot; data-ke-type=&quot;opengraph&quot; data-ke-align=&quot;alignCenter&quot; data-og-type=&quot;website&quot; data-og-title=&quot;예방접종 사전예약 시스템&quot; data-og-description=&quot;예방접종 사전예약 시스템&quot; data-og-host=&quot;ncvr2.kdca.go.kr&quot; data-og-source-url=&quot;https://ncvr2.kdca.go.kr/&quot; data-og-url=&quot;https://ncvr2.kdca.go.kr&quot; data-og-image=&quot;&quot;&gt;&lt;a href=&quot;https://ncvr2.kdca.go.kr/&quot; target=&quot;_blank&quot; rel=&quot;noopener&quot; data-source-url=&quot;https://ncvr2.kdca.go.kr/&quot;&gt;
&lt;div class=&quot;og-image&quot; style=&quot;background-image: url();&quot;&gt;&amp;nbsp;&lt;/div&gt;
&lt;div class=&quot;og-text&quot;&gt;
&lt;p class=&quot;og-title&quot; data-ke-size=&quot;size16&quot;&gt;예방접종 사전예약 시스템&lt;/p&gt;
&lt;p class=&quot;og-desc&quot; data-ke-size=&quot;size16&quot;&gt;예방접종 사전예약 시스템&lt;/p&gt;
&lt;p class=&quot;og-host&quot; data-ke-size=&quot;size16&quot;&gt;ncvr2.kdca.go.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;그리고 전체 메뉴 중에 &lt;b&gt;예약 조회/변경/취소&lt;/b&gt; 메뉴로 접속한다. 정보를 입력한 뒤, &lt;b&gt;예약 조회&lt;/b&gt;를 클릭한다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;blockquote data-ke-style=&quot;style1&quot;&gt;&lt;span style=&quot;font-family: AppleSDGothicNeo-Regular, 'Malgun Gothic', '맑은 고딕', dotum, 돋움, sans-serif;&quot;&gt;&lt;span&gt;&amp;nbsp;3차 부스트샷 예방 접종 변경이니, &lt;b&gt;3차 예약변경&lt;/b&gt; 같아 보이지만 저기에 없다..&lt;br /&gt;한참 찾았는데, &lt;b&gt;예약 조회&lt;/b&gt;에 있다..&lt;/span&gt;&lt;/span&gt;&lt;/blockquote&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-origin-width=&quot;364&quot; data-origin-height=&quot;445&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/Tgfgu/btrr9ghfPER/bSQU0m7WHVZSVl14kwVCIk/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/Tgfgu/btrr9ghfPER/bSQU0m7WHVZSVl14kwVCIk/img.png&quot; data-alt=&quot;예약조회 로 접속해야 한다.&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/Tgfgu/btrr9ghfPER/bSQU0m7WHVZSVl14kwVCIk/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FTgfgu%2Fbtrr9ghfPER%2FbSQU0m7WHVZSVl14kwVCIk%2Fimg.png&quot; onerror=&quot;this.onerror=null; this.src='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png'; this.srcset='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png';&quot; loading=&quot;lazy&quot; width=&quot;364&quot; height=&quot;445&quot; data-origin-width=&quot;364&quot; data-origin-height=&quot;445&quot;/&gt;&lt;/span&gt;&lt;figcaption&gt;예약조회 로 접속해야 한다.&lt;/figcaption&gt;
&lt;/figure&gt;
&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-filename=&quot;스크린샷 2022-01-30 오후 9.44.27.png&quot; data-origin-width=&quot;373&quot; data-origin-height=&quot;808&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/c1DfKh/btrr2XiVS40/pT61uy1W02epBBjIbd0a90/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/c1DfKh/btrr2XiVS40/pT61uy1W02epBBjIbd0a90/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/c1DfKh/btrr2XiVS40/pT61uy1W02epBBjIbd0a90/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2Fc1DfKh%2Fbtrr2XiVS40%2FpT61uy1W02epBBjIbd0a90%2Fimg.png&quot; onerror=&quot;this.onerror=null; this.src='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png'; this.srcset='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png';&quot; loading=&quot;lazy&quot; width=&quot;373&quot; height=&quot;808&quot; data-filename=&quot;스크린샷 2022-01-30 오후 9.44.27.png&quot; data-origin-width=&quot;373&quot; data-origin-height=&quot;808&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;여기서 취소하면 된다! 끝!&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;blockquote data-ke-style=&quot;style1&quot;&gt;&lt;span style=&quot;font-family: AppleSDGothicNeo-Regular, 'Malgun Gothic', '맑은 고딕', dotum, 돋움, sans-serif;&quot;&gt;이 글은 예방 접종(백신)에 대하여 반대하거나 취소를 독려하는 글이 아니라,&lt;br /&gt;저 처럼 취소가 어딨는지 헤맬지 모르는 분들을 위한 안내글 입니다.&lt;/span&gt;&lt;/blockquote&gt;</description>
      <category>정보/일상</category>
      <author>3sammy</author>
      <guid isPermaLink="true">https://23log.tistory.com/115</guid>
      <comments>https://23log.tistory.com/115#entry115comment</comments>
      <pubDate>Mon, 31 Jan 2022 13:11:16 +0900</pubDate>
    </item>
    <item>
      <title>[firebase] 배포 에러, your account has permission to access it.</title>
      <link>https://23log.tistory.com/117</link>
      <description>&lt;p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-filename=&quot;Firebase_계정_권한_배포_에러_ .png&quot; data-origin-width=&quot;700&quot; data-origin-height=&quot;350&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/C79b0/btrr2WxEoS2/kM1roDZhE3oIJZtUn0VsUk/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/C79b0/btrr2WxEoS2/kM1roDZhE3oIJZtUn0VsUk/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/C79b0/btrr2WxEoS2/kM1roDZhE3oIJZtUn0VsUk/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FC79b0%2Fbtrr2WxEoS2%2FkM1roDZhE3oIJZtUn0VsUk%2Fimg.png&quot; onerror=&quot;this.onerror=null; this.src='//t1.daumcdn.net/tistory_admin/static/images/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;350&quot; data-filename=&quot;Firebase_계정_권한_배포_에러_ .png&quot; data-origin-width=&quot;700&quot; data-origin-height=&quot;350&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&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-filename=&quot;스크린샷 2022-01-31 오전 2.22.12.png&quot; data-origin-width=&quot;1102&quot; data-origin-height=&quot;65&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/bMl0sF/btrr1hWzq5V/tzIantP4LQ9NmBaqykC1Ek/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/bMl0sF/btrr1hWzq5V/tzIantP4LQ9NmBaqykC1Ek/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/bMl0sF/btrr1hWzq5V/tzIantP4LQ9NmBaqykC1Ek/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FbMl0sF%2Fbtrr1hWzq5V%2FtzIantP4LQ9NmBaqykC1Ek%2Fimg.png&quot; onerror=&quot;this.onerror=null; this.src='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png'; this.srcset='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png';&quot; loading=&quot;lazy&quot; width=&quot;1102&quot; height=&quot;65&quot; data-filename=&quot;스크린샷 2022-01-31 오전 2.22.12.png&quot; data-origin-width=&quot;1102&quot; data-origin-height=&quot;65&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;/p&gt;
&lt;pre class=&quot;subunit&quot;&gt;&lt;code&gt;Error: Failed to get Firebase project [프로젝트명]. Please make sure the project exists and your account has permission to access it.&lt;/code&gt;&lt;/pre&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;만약 파이어베이스 배포 명령어인 &lt;code&gt;firebase deploy&lt;/code&gt; 를 했을 때, 위와 같은 에러를 만났다면?&lt;br /&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;ol style=&quot;list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li&gt;&lt;code&gt;firebase login&lt;/code&gt; 을 하여, 현재 로그인한 계정 정보를 확인한다.&lt;br /&gt;&lt;code&gt;Already logged in as 계정명@gmail.com&lt;/code&gt; 의 형태로 확인된다.&lt;/li&gt;
&lt;li&gt;&lt;code&gt;firebase logout&lt;/code&gt; 을 하여, 현재 계정에서 로그아웃한다.&lt;/li&gt;
&lt;li&gt;다시 재로그인하여, 배포를 진행한다.&lt;/li&gt;
&lt;/ol&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;필자의 경우, 현재 두개의 계정에서 2개의 파이어베이스 프로젝트를 배포하고 있다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;br /&gt;이전 프로젝트 배포를 위해 다른 계정으로 로그인을 했었는데, 그 로그인이 계속 유지되고 있어 위 문제가 발생했다.&lt;br /&gt;&lt;code&gt;firebase-tool&lt;/code&gt;은 프로젝트(폴더) 단위로 로그인되는게 아니라 글로벌(PC)하게 로그인 되는 구나..&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;아주 간단한 문제에, 간단한 해결이었는데 처음 보는 에러에 벙벙해졌었다.. ㅎ_ㅎ..&lt;/p&gt;</description>
      <category>develop/back-side</category>
      <category>firebase</category>
      <author>3sammy</author>
      <guid isPermaLink="true">https://23log.tistory.com/117</guid>
      <comments>https://23log.tistory.com/117#entry117comment</comments>
      <pubDate>Mon, 31 Jan 2022 02:33:49 +0900</pubDate>
    </item>
    <item>
      <title>급성 저음성 난청에 걸렸다. 그 때의 짧은 기록</title>
      <link>https://23log.tistory.com/114</link>
      <description>&lt;p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-origin-width=&quot;409&quot; data-origin-height=&quot;295&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/OHKAQ/btrr9gIh8Gc/SicWgECZ4ineUFHwvwB2v0/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/OHKAQ/btrr9gIh8Gc/SicWgECZ4ineUFHwvwB2v0/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/OHKAQ/btrr9gIh8Gc/SicWgECZ4ineUFHwvwB2v0/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FOHKAQ%2Fbtrr9gIh8Gc%2FSicWgECZ4ineUFHwvwB2v0%2Fimg.png&quot; onerror=&quot;this.onerror=null; this.src='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png'; this.srcset='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png';&quot; loading=&quot;lazy&quot; width=&quot;409&quot; height=&quot;295&quot; data-origin-width=&quot;409&quot; data-origin-height=&quot;295&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;나는 에어팟 프로로 노래를 자주 듣는 편이다. 특히 러닝을 하거나 출근길에 자주 듣는데, 어느날부터 에어팟의 상태가 좀 이상했다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;왼쪽 유닛에서 '끼기긱'하는 기계음이 자꾸 섞이는 것. 소리가 엄청 커서 표정이 일그러지거나 하는 정도까진 아니지만, 그냥 좀 거슬리는 정도였다. 그런 상태가 좀 있었지만, 그냥 참고 들었다. 왜냐면 귀찮았거든, 그냥 일시적인줄만 알았거든. 특히 갑자기 받은 러닝 삘을 이어가려면 신나는 노래는 필수였기에, 이상하더라도 그냥 들으며 뛰었었다.&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;code&gt;삐----&lt;/code&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;code&gt;노래가 나오는 이어폰 끝 부분 -&amp;gt; 진동음 -&amp;gt; 내 귀(듣는 다는 느낌)&lt;/code&gt; 의 순서로 전해졌다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;이는 점차 심해져 &lt;b&gt;항상 진동음&lt;/b&gt;이 들리게 되었다. 그래서 이 진동음 보다 낮은 소리로 하는 말은 잘 알아듣기가 어려웠다. 이 진동음 보다 큰 소리, 높은 톤의 경우엔 알아 들을 수 있었다. 사람 말소리가 아예 안들리는 게 아니라, &lt;b&gt;진동음 때문에 덮혀서 안들렸다.&lt;/b&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;br /&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;p data-ke-size=&quot;size16&quot;&gt;그리고 진료 결과를 받았다. 왼쪽 귀의 청력이 심각하게 손상되었단 얘기와 함께, &lt;b&gt;'급성 저음성 난청'&lt;/b&gt;이란 병명이 나왔다. 심장이 쿵 내려앉았다. 난청이라니, 불치병에 걸린 것 같은 기분이었다.&lt;/p&gt;
&lt;blockquote data-ke-style=&quot;style1&quot;&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;font-family: AppleSDGothicNeo-Regular, 'Malgun Gothic', '맑은 고딕', dotum, 돋움, sans-serif;&quot;&gt;집에가서 저음성 난청에 대해 많이 조사해보았다. &lt;b&gt;저음성 난청&lt;/b&gt;은, 급성 여부에 따라 심각도가 다르다고 한다.&lt;/span&gt;&lt;br /&gt;&lt;span style=&quot;font-family: AppleSDGothicNeo-Regular, 'Malgun Gothic', '맑은 고딕', dotum, 돋움, sans-serif;&quot;&gt;급성의 경우, 치료를 통해 회복이 가능하고 청력도 돌아올 수 있다고 하지만 급성이 아니라면, 만성으로 되어 청력을 회복이 어렵다고 한다..&lt;/span&gt;&lt;br /&gt;&lt;span style=&quot;font-family: AppleSDGothicNeo-Regular, 'Malgun Gothic', '맑은 고딕', dotum, 돋움, sans-serif;&quot;&gt;나의 경우 급성에 가까웠기에, 약간의 희망은 가졌지만 마음은 놓이지 않았다.&lt;/span&gt;&lt;br /&gt;&lt;span style=&quot;font-family: AppleSDGothicNeo-Regular, 'Malgun Gothic', '맑은 고딕', dotum, 돋움, sans-serif;&quot;&gt;(의사 쌤이 '급성'이란 말씀을 하지 않으셨거든..)&lt;/span&gt;&lt;/p&gt;
&lt;/blockquote&gt;
&lt;h2 data-ke-size=&quot;size26&quot;&gt;원인&lt;/h2&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;나의 경우, 예상되는 원인은 &lt;b&gt;상태가 안좋은 소리를 지속적으로 들어, 청력이 손상된 것&lt;/b&gt;이라 생각했다. 그래서 곧바로 에어팟 프로를 리퍼 받기로 결정했다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p 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;h2 data-ke-size=&quot;size26&quot;&gt;경과&lt;/h2&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;에어팟 프로 수리를 맡긴 후, 병원에서 약을 조제 받았다. 우선 &lt;code&gt;급성 저음성 난청&lt;/code&gt;은 달팽이관의 내림프액의 압력이 올라가면서, 달팽이관이 함께 팽창하여 발생하는 것이 원인이라 했다. 그래서 이 내림프액의 압력을 낮춰주는 것이 필요하다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;이를 위해 스테로이드성분이 있는 알약 등을 복용했다. 그리고 이 내림프액은 카페인에 굉장히 안좋다고 한다. 그래서 이렇게 약을 복용받는 기간동안 매일 3샷씩 떄려 넣었던 아이스 아메리카노도 멈추었다.. 다만 디카페인으로 돌렸다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;그리고 2주간 약을 복용하니 점차 귀를 가득 채운 진동음이 줄어 들기 시작했다. 청력검사를 하니 많이 돌아왔다고 한다. 안도했다. 마음이 놓였다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;br /&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;p data-ke-size=&quot;size16&quot;&gt;이 뒤로 깨달은 것이 있는데, &lt;code&gt;눈, 귀, 코, 입(이)&lt;/code&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;a href=&quot;https://www.youtube.com/watch?v=_d-iXzkWwj8&quot;&gt;https://www.youtube.com/watch?v=_d-iXzkWwj8&lt;/a&gt;&amp;nbsp;&lt;/p&gt;
&lt;figure data-ke-type=&quot;video&quot; data-ke-style=&quot;alignCenter&quot; data-video-host=&quot;youtube&quot; data-video-url=&quot;https://www.youtube.com/watch?v=_d-iXzkWwj8&quot; data-video-thumbnail=&quot;https://scrap.kakaocdn.net/dn/gRm7K/hyNgcj17XS/PZyHImKGMDcI0HLIqCrsQ0/img.jpg?width=1280&amp;amp;height=720&amp;amp;face=844_180_1024_376&quot; data-video-width=&quot;400&quot; data-video-height=&quot;225&quot; data-video-origin-width=&quot;860&quot; data-video-origin-height=&quot;484&quot; data-ke-mobilestyle=&quot;widthContent&quot;&gt;&lt;iframe src=&quot;https://www.youtube.com/embed/_d-iXzkWwj8&quot; width=&quot;400&quot; height=&quot;225&quot; frameborder=&quot;&quot; allowfullscreen=&quot;true&quot;&gt;&lt;/iframe&gt;
&lt;figcaption&gt;&lt;/figcaption&gt;
&lt;/figure&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;</description>
      <category>블로그</category>
      <category>일상</category>
      <author>3sammy</author>
      <guid isPermaLink="true">https://23log.tistory.com/114</guid>
      <comments>https://23log.tistory.com/114#entry114comment</comments>
      <pubDate>Sun, 30 Jan 2022 21:33:44 +0900</pubDate>
    </item>
    <item>
      <title>벽지에 묻은 캔들 촛농, 손 쉽게 제거하는 방법</title>
      <link>https://23log.tistory.com/113</link>
      <description>&lt;h2 data-ke-size=&quot;size26&quot;&gt;비극의 시작&lt;/h2&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;작년이었나, 친구들을 불러 놀다가 촛농을 쏟았다. 좀 더 자세히 말하면,&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;br /&gt;캔들워머를 사용해서 캔들을 켜놓은 상태에서 팔꿈치로 워머를 툭 쳤다.&lt;br /&gt;결말은 &lt;b&gt;대참사&lt;/b&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;벽지는 물론이거와 애플워치 스탠드, 방 바닥, 섬유소재 장식품, 러그 등등 사방에 캔들 촛농이 튀었다.&lt;br /&gt;닦으면 되겠지 했다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;br /&gt;하지만 나는 몰랐지, 캔들 촛농이 그렇게 빨리 굳는줄...&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-filename=&quot;blob&quot; data-origin-width=&quot;1500&quot; data-origin-height=&quot;1856&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/bqYbEp/btrrLNMWVRZ/YcCS5GySgD1V41CRUseL80/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/bqYbEp/btrrLNMWVRZ/YcCS5GySgD1V41CRUseL80/img.png&quot; data-alt=&quot;처참하지 않은가&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/bqYbEp/btrrLNMWVRZ/YcCS5GySgD1V41CRUseL80/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FbqYbEp%2FbtrrLNMWVRZ%2FYcCS5GySgD1V41CRUseL80%2Fimg.png&quot; onerror=&quot;this.onerror=null; this.src='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png'; this.srcset='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png';&quot; loading=&quot;lazy&quot; width=&quot;400&quot; height=&quot;495&quot; data-filename=&quot;blob&quot; data-origin-width=&quot;1500&quot; data-origin-height=&quot;1856&quot;/&gt;&lt;/span&gt;&lt;figcaption&gt;처참하지 않은가&lt;/figcaption&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;br /&gt;납작하고 날카로운 것들(30cm 자)을 가지고 열심히 긁어댔다. 하지만 역부족이었다.&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;IMG_6802.png&quot; data-origin-width=&quot;4032&quot; data-origin-height=&quot;3024&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/byZerC/btrrDxS7NJl/ncC5COux9pZ6jAzGkwER70/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/byZerC/btrrDxS7NJl/ncC5COux9pZ6jAzGkwER70/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/byZerC/btrrDxS7NJl/ncC5COux9pZ6jAzGkwER70/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FbyZerC%2FbtrrDxS7NJl%2FncC5COux9pZ6jAzGkwER70%2Fimg.png&quot; onerror=&quot;this.onerror=null; this.src='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png'; this.srcset='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png';&quot; loading=&quot;lazy&quot; width=&quot;400&quot; height=&quot;300&quot; data-filename=&quot;IMG_6802.png&quot; data-origin-width=&quot;4032&quot; data-origin-height=&quot;3024&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;br /&gt;분명 가성비 좋게 얼큰하게 취했었는데, 술이 확 깼다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;이제 그 근처만 가면 캔들의 향기가 가득했다. 애플워치 스트랩에도, 콘센트를 꼽기 위해 간 벽에서도&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;늘 향기가 가득했다. 비극은 향기와 함께였다. 다른 곳은 열심히 치워서 괜찮지만 벽지는 처리할 수 없었다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;어찌나 비극이 잘 보이던지, 어루만질 때마다 기분 나쁘게 미끌거렸다. 포기하고 흐린눈으로 살았다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;br /&gt;그런데 이젠 해당 문제를 청산해야만 했다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;왜냐고? 곧 새로운 가구(수납 침대)가 들어 올 텐데, 비극을 덮을 순 없었다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;더 치우기 싫어지기 전에, 해결해야만 했다.&lt;/p&gt;
&lt;h2 data-ke-size=&quot;size26&quot;&gt;  손 쉽게 제거하는 방법&lt;/h2&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;결론부터 말하면, &lt;code&gt;드라이기&lt;/code&gt;와 &lt;code&gt;키친타올(두꺼운 휴지)&lt;/code&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;blob&quot; data-origin-width=&quot;1500&quot; data-origin-height=&quot;2000&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/ECtEJ/btrrIgJBb0Z/aKQd8KpfahEQwbEIhwPq11/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/ECtEJ/btrrIgJBb0Z/aKQd8KpfahEQwbEIhwPq11/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/ECtEJ/btrrIgJBb0Z/aKQd8KpfahEQwbEIhwPq11/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FECtEJ%2FbtrrIgJBb0Z%2FaKQd8KpfahEQwbEIhwPq11%2Fimg.png&quot; onerror=&quot;this.onerror=null; this.src='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png'; this.srcset='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png';&quot; loading=&quot;lazy&quot; width=&quot;400&quot; height=&quot;533&quot; data-filename=&quot;blob&quot; data-origin-width=&quot;1500&quot; data-origin-height=&quot;2000&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;b&gt;문제가 되는 부위에 드라이기를 갖다대고 아주 뜨겁게 가동한다.&lt;/b&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-filename=&quot;blob&quot; data-origin-width=&quot;1500&quot; data-origin-height=&quot;2000&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/bNx3wb/btrrKHMZuZT/c79KRYbhIszrdD3VPNPkgK/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/bNx3wb/btrrKHMZuZT/c79KRYbhIszrdD3VPNPkgK/img.png&quot; data-alt=&quot;잘 안느껴지곘지만, 촛농이 위로 밀려가는 모습이다..&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/bNx3wb/btrrKHMZuZT/c79KRYbhIszrdD3VPNPkgK/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FbNx3wb%2FbtrrKHMZuZT%2Fc79KRYbhIszrdD3VPNPkgK%2Fimg.png&quot; onerror=&quot;this.onerror=null; this.src='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png'; this.srcset='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png';&quot; loading=&quot;lazy&quot; width=&quot;400&quot; height=&quot;300&quot; data-filename=&quot;blob&quot; data-origin-width=&quot;1500&quot; data-origin-height=&quot;2000&quot;/&gt;&lt;/span&gt;&lt;figcaption&gt;잘 안느껴지곘지만, 촛농이 위로 밀려가는 모습이다..&lt;/figcaption&gt;
&lt;/figure&gt;
&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;b&gt;그리고 잠시 기다리면 촛농이 녹아 바람을 피해 도망가기 시작한다.&lt;/b&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-filename=&quot;blob&quot; data-origin-width=&quot;1262&quot; data-origin-height=&quot;1703&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/oG2oj/btrrF7sBToQ/F49b13cV2OV1OEH7UFPDAk/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/oG2oj/btrrF7sBToQ/F49b13cV2OV1OEH7UFPDAk/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/oG2oj/btrrF7sBToQ/F49b13cV2OV1OEH7UFPDAk/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FoG2oj%2FbtrrF7sBToQ%2FF49b13cV2OV1OEH7UFPDAk%2Fimg.png&quot; onerror=&quot;this.onerror=null; this.src='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png'; this.srcset='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png';&quot; loading=&quot;lazy&quot; width=&quot;400&quot; height=&quot;540&quot; data-filename=&quot;blob&quot; data-origin-width=&quot;1262&quot; data-origin-height=&quot;1703&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;b&gt;이 때 재빨리 두꺼운 휴지로 닦아내면 된다.&lt;/b&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;나의 경우, 드라이기를 아래에서 위 방향으로 향하게 했다.&lt;br /&gt;그러면 좀더 올라가는 모습을 확인하기 좋았고, 위에 있으니 닦기도 편했다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;그렇게 조금 여러번 반복하다 보면, 벽지는 원래의 모습을 되찾게 된다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-filename=&quot;blob&quot; data-origin-width=&quot;1500&quot; data-origin-height=&quot;2000&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/b9oJOz/btrrJabkg2H/Twg5KufIievgZyHOi3yn91/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/b9oJOz/btrrJabkg2H/Twg5KufIievgZyHOi3yn91/img.png&quot; data-alt=&quot;맨 첫 사진과 상반되지 않는가..&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/b9oJOz/btrrJabkg2H/Twg5KufIievgZyHOi3yn91/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2Fb9oJOz%2FbtrrJabkg2H%2FTwg5KufIievgZyHOi3yn91%2Fimg.png&quot; onerror=&quot;this.onerror=null; this.src='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png'; this.srcset='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png';&quot; loading=&quot;lazy&quot; width=&quot;400&quot; height=&quot;533&quot; data-filename=&quot;blob&quot; data-origin-width=&quot;1500&quot; data-origin-height=&quot;2000&quot;/&gt;&lt;/span&gt;&lt;figcaption&gt;맨 첫 사진과 상반되지 않는가..&lt;/figcaption&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;</description>
      <category>정보/일상</category>
      <author>3sammy</author>
      <guid isPermaLink="true">https://23log.tistory.com/113</guid>
      <comments>https://23log.tistory.com/113#entry113comment</comments>
      <pubDate>Tue, 25 Jan 2022 23:46:53 +0900</pubDate>
    </item>
    <item>
      <title>티스토리는 정말 Velog를 대체 할 수 있을까?</title>
      <link>https://23log.tistory.com/112</link>
      <description>&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;700&quot; data-origin-height=&quot;350&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/dp5T7u/btrrB52osNi/0A1mdOW5Kltt0xNdWN1D41/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/dp5T7u/btrrB52osNi/0A1mdOW5Kltt0xNdWN1D41/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/dp5T7u/btrrB52osNi/0A1mdOW5Kltt0xNdWN1D41/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2Fdp5T7u%2FbtrrB52osNi%2F0A1mdOW5Kltt0xNdWN1D41%2Fimg.png&quot; onerror=&quot;this.onerror=null; this.src='//t1.daumcdn.net/tistory_admin/static/images/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;350&quot; data-filename=&quot; .png&quot; data-origin-width=&quot;700&quot; data-origin-height=&quot;350&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;b&gt;푸념글&lt;/b&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;/h3&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;정말 티스토리의 글쓰기 환경은 그렇게 좋지 못하단걸 깨닫는다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;아니, 티스토리에 익숙한 사람이라면 괜찮을 것 이다. (사실 좋고 말고는 없지)&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;하지만 나는 마크다운 기반의 글쓰기 환경에 정말 익숙해져 있는 사람이고, 마크다운으로 글을 기록하고 공유하고 싶어하는 사람이다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;그래서 다시 블로그를 시작한 초기에는 &quot;티스토리에서 마크다운 글쓰기 환경을 구축해볼게요!&quot; 라는 포부도 비췄었다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;그 포부가 꺾이는 짧은 과정을 쓰자면,&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;h4 data-ke-size=&quot;size20&quot;&gt;&lt;b&gt;마크다운 글 작성 ⏩&amp;nbsp; 티스토리 마크다운 에디터 모드&lt;/b&gt;&lt;/h4&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;블로그를 다시 시작한 초기에 이렇게 많이 작성했다. 하지만 그 때 너무 불편한 나머지, 학을 뗐다..&lt;/p&gt;
&lt;ul style=&quot;list-style-type: circle;&quot; data-ke-list-type=&quot;circle&quot;&gt;
&lt;li&gt;마크다운으로 작성을 끝낸 뒤에, 글을 발행하면 무.조.건 글이 깨진다.&lt;br /&gt;
&lt;ul style=&quot;list-style-type: circle;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li&gt;특히, 개발 후기 등을 남기기 위해서 코드 블럭이나 인라인 코드 블럭을 자주 사용하는데&lt;br /&gt;코드 안의 들여쓰기가 깨지거나, 원하지 않는 곳 까지 코드가 겹치게 된다..&lt;/li&gt;
&lt;li&gt;지금 처럼 개괄식을 많이 쓰는데, 씹힌다..&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt;글을 발행하고 수정하면, 기본 모드로 접속한다.
&lt;ul style=&quot;list-style-type: circle;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li&gt;마크다운 모드에서 작성하다 기본모드로 변경하면, 마크다운의 글이 랜더링 되어서 기본모드로 들어간다.&lt;br /&gt;근데 이 과정에서 문단이나 글의 양식들이 미묘하게 변하게 된다..&lt;/li&gt;
&lt;li&gt;하지만 발행 후 수정을 하게 되면 무조건 기본 모드로 들어가게 된다..&lt;/li&gt;
&lt;li&gt;그래서 이를 피하고자 수정을 최대한 적게 하려 하는데.. 그게 쉽냐고    &lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;/ul&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;h4 data-ke-size=&quot;size20&quot;&gt;&amp;nbsp;&lt;/h4&gt;
&lt;h4 data-ke-size=&quot;size20&quot;&gt;&lt;b&gt;그&lt;/b&gt;&lt;b&gt;럼 기본 모드로 작성하지 그래?  &lt;/b&gt;&lt;/h4&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;이건 힘들 것 같다.. 내가 줄글을 적고, 글에다가 색을 막 이쁘게 넣는 타입의 글을 쓴다면 모르겠지만.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;나는 이쁘게 쓰는 것 보다, 체계적으로 작성하는 것이 좋다.&lt;/p&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;또한 TOC (목차 바로가기) 가 지원되는 스킨을 구매했는데, 기본모드로 글을 작성하면 꼭 어느 부분에서 &lt;b&gt;제목2&lt;/b&gt; 로 설정된 띄어쓰기(개행)가 발견된다. 그러면 빈 목차가 만들어진다. 이거 진짜 킹받는다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;그리고 결정적으로, &lt;code&gt;인라인 코드 블럭&lt;/code&gt;을 지원하지 않는다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;내가 이걸 얼마나 많이 쓰는데..        &lt;/p&gt;
&lt;blockquote data-ke-size=&quot;size16&quot; data-ke-style=&quot;style1&quot;&gt;&lt;span style=&quot;font-family: AppleSDGothicNeo-Regular, 'Malgun Gothic', '맑은 고딕', dotum, 돋움, sans-serif;&quot;&gt;이걸 쓰려면 HTML 모드로 들어가서 &amp;lt;code&amp;gt;&amp;lt;/code&amp;gt; 를 적어야 한다..&lt;br /&gt;&lt;/span&gt;&lt;/blockquote&gt;
&lt;h4 data-ke-size=&quot;size20&quot;&gt;&amp;nbsp;&lt;/h4&gt;
&lt;h4 data-ke-size=&quot;size20&quot;&gt;&amp;nbsp;&lt;/h4&gt;
&lt;h4 data-ke-size=&quot;size20&quot;&gt;&lt;b&gt;그럼 어쩔건데? Velog로 갈꺼야?  &lt;/b&gt;&lt;/h4&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;그건 아니다. 그냥 이렇게 몇번 찡찡거리다가 방법을 찾겠지 싶다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;이전에도 썼지만 그럼에도 티스토리에 남아있는 이유는,&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;color: #006dd7;&quot;&gt;&lt;b&gt;내 맘대로 스킨 편집이 가능하다는 점!&lt;/b&gt;&lt;/span&gt;&lt;/p&gt;
&lt;blockquote data-ke-style=&quot;style1&quot;&gt;&lt;span style=&quot;font-family: AppleSDGothicNeo-Regular, 'Malgun Gothic', '맑은 고딕', dotum, 돋움, sans-serif;&quot;&gt;이건 진짜 좋다. 물론 더 연구해야하고 귀찮기도 하지만, &lt;b&gt;디자인을 너무너무 좋아하는 프엔 개발자&lt;/b&gt;로서&lt;br /&gt;스킨 편집의 자유도는 필수적이다.&lt;br /&gt;지금 보고있는 Velog 스타일의 Blockquote도 CSS 따와서 직접 수정한거다.&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;&lt;span style=&quot;color: #006dd7;&quot;&gt;&lt;b&gt;그리고 티스토리는 (일반적인) 블로그다!&lt;/b&gt;&lt;/span&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;Velog는 개발 블로그라는 성격이 강하다. 그러다 보니 일상적인 글이나 정보 공유 글을 올리기 다소 꺼려지게 될 것 같다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;실제로 나는, 개발뿐만 아니라 MAC을 쓰며 알게 된 사실들이나, 내가 찾은 정보를 다시 조합하거나, 내가 영감을 받은 이미지들이나, 쇼핑하다 알게된 사실 등등 &lt;b&gt;내가 관심있는 것들&lt;/b&gt;을 블로그에 올리고 있다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;그래서 나는 개발에 대한 전문성도 좋지만, 무엇보다 내가 관심있는 것들을 공개할 수 있는 블로그가 필요하다.&lt;/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;&amp;nbsp;&lt;/h4&gt;
&lt;h3 data-ke-size=&quot;size23&quot;&gt;포부2 시작!&lt;/h3&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;앞으로의 블로그 계획을 적자면,&lt;/p&gt;
&lt;ol style=&quot;list-style-type: decimal;&quot; data-ke-list-type=&quot;decimal&quot;&gt;
&lt;li&gt;&lt;b&gt;글쓰기 환경은 마크다운!&lt;/b&gt;&lt;br /&gt;노션으로 할지, Typora로 할지는 고민..&lt;/li&gt;
&lt;li&gt;&lt;b&gt;글 업로드 환경을 하나로 통일한다!&lt;/b&gt;&lt;br /&gt;기본모드/ HTML/마크다운 이 세가지 에디터 모드를 혼용하면 CSS가 제대로 적용 안될 수 있다.&lt;br /&gt;따라서 하나의 업로드 환경을 정해서 올려야 한다.&lt;/li&gt;
&lt;li&gt;&lt;b&gt;게시글의 CSS를 좀 더 보기 좋게 수정하자!&lt;/b&gt;&lt;br /&gt;지금 코드 블럭도 맘에 안들고, 문단별 자간도 맘에 안들고 그렇다..&lt;br /&gt;빨리 CSS에다가 !important 달아야겠다..&lt;/li&gt;
&lt;li&gt;&lt;b&gt;코드블럭에 복붙 등의 기능 넣기..&lt;/b&gt;&lt;/li&gt;
&lt;li&gt;&lt;b&gt;노션 API를 활용해서, 노션에서 티스토리 글을 업로드 하는 서비스를 개발해보기!&lt;/b&gt;&lt;br /&gt;한 고등학생이 Notion2Tistory 데스크탑 프로그램을 만들었다. 무려 API 개발 전에 만든 서비스이다.&lt;br /&gt;이제 노션 API도 공개되었는데, API를 활용해서 웹에서 처리하는 사이트를 만들 수 있지 않을까? (포부2)&lt;/li&gt;
&lt;/ol&gt;</description>
      <category>블로그/생각정리</category>
      <author>3sammy</author>
      <guid isPermaLink="true">https://23log.tistory.com/112</guid>
      <comments>https://23log.tistory.com/112#entry112comment</comments>
      <pubDate>Mon, 24 Jan 2022 23:22:23 +0900</pubDate>
    </item>
    <item>
      <title>[JSP] JSTL에서 조건식, 삼항연산자 사용하기</title>
      <link>https://23log.tistory.com/111</link>
      <description>&lt;p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-filename=&quot;JSTL_안에다가_조건식_사용하기_ .png&quot; data-origin-width=&quot;700&quot; data-origin-height=&quot;350&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/br3L2z/btrrB4Jboxf/CmT2NG2KGrQKlLPAS6YdL1/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/br3L2z/btrrB4Jboxf/CmT2NG2KGrQKlLPAS6YdL1/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/br3L2z/btrrB4Jboxf/CmT2NG2KGrQKlLPAS6YdL1/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2Fbr3L2z%2FbtrrB4Jboxf%2FCmT2NG2KGrQKlLPAS6YdL1%2Fimg.png&quot; onerror=&quot;this.onerror=null; this.src='//t1.daumcdn.net/tistory_admin/static/images/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;350&quot; data-filename=&quot;JSTL_안에다가_조건식_사용하기_ .png&quot; data-origin-width=&quot;700&quot; data-origin-height=&quot;350&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;/p&gt;
&lt;h3 data-ke-size=&quot;size23&quot;&gt;방법&lt;/h3&gt;
&lt;pre id=&quot;code_1643030755003&quot; class=&quot;html xml&quot; data-ke-language=&quot;html&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;&amp;lt;c:set var=&quot;val1&quot; value=&quot;${tmp1 eq '' || empty tmp1 ? 'N' : 'Y'}&quot;&amp;gt;&lt;/code&gt;&lt;/pre&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;b&gt;JSTL 표기 안&lt;/b&gt;에다가 필요한 식을 기입하면 된다!&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;code&gt;${ 조건 ? 참일 경우 : 거짓 일 경우}&lt;/code&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;/h3&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;나는 &lt;b&gt;컨트롤러에서 받은 변수의 검증 여부&lt;/b&gt;를 &lt;span style=&quot;color: #ee2323;&quot;&gt;&lt;b&gt;삼항연산자&lt;/b&gt;&lt;/span&gt;를 통해서 처리한다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;예를 들어 컨트롤러에서 &lt;code&gt;reviewYn&lt;/code&gt; 이란 변수를 받아오고 사용 유무에 따라 HTML 코드의 랜더링 여부가 결정되는 코드가 있다고 하자.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;pre id=&quot;code_1643031221971&quot; class=&quot;html xml&quot; data-ke-language=&quot;html&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;&amp;lt;c:if test=&quot;'${reviewYn}' == 'Y'&quot;&amp;gt;
	&amp;lt;!-- 리뷰 레이어 사용 --&amp;gt;
	&amp;lt;div class=&quot;review-wrapper&quot;&amp;gt;
    	...
    &amp;lt;/div&amp;gt;
&amp;lt;/c:if&amp;gt;
&amp;lt;c:if test=&quot;'${reviewYn}' == 'N'&quot;&amp;gt;
	&amp;lt;!-- 리뷰 레이어 미사용 --&amp;gt;
	&amp;lt;div class=&quot;no-review-wrapper&quot;&amp;gt;
    	...
    &amp;lt;/div&amp;gt;
&amp;lt;/c:if&amp;gt;&lt;/code&gt;&lt;/pre&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;이 때, 컨트롤러에서 &lt;code&gt;null&lt;/code&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;code&gt;c:if test=&quot;조건식&quot;&lt;/code&gt; 안에다가 &lt;code&gt;empty reviewYn&lt;/code&gt; 을 추가하기 보단 삼항연산자를 활용해 값이 없을 경우, N 으로 설정하도록 하는 것이 에러를 핸들링하고 코드를 직관적으로 짜기 효율적이다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;pre id=&quot;code_1643031408833&quot; class=&quot;html xml&quot; data-ke-language=&quot;html&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;&amp;lt;c:set var=&quot;reviewYn&quot; value=&quot;${reviewYn eq '' || empty reviewYn ? 'N' : 'Y'}&quot;&amp;gt;&lt;/code&gt;&lt;/pre&gt;
&lt;blockquote data-ke-style=&quot;style1&quot;&gt;&lt;span style=&quot;font-family: AppleSDGothicNeo-Regular, 'Malgun Gothic', '맑은 고딕', dotum, 돋움, sans-serif;&quot;&gt;컨트롤러에서 &lt;code&gt;reviewYn&lt;/code&gt; 이라고 받았다고 해서, &lt;code&gt;c:set&lt;/code&gt; 할 때 다른 변수명을 기입할 필요는 없다.&lt;br /&gt;그냥 받아온 변수명 그대로 &lt;code&gt;var=&quot;reviewYn&quot;&lt;/code&gt; 해도 된다.&lt;/span&gt;&lt;/blockquote&gt;</description>
      <category>develop/java&amp;amp;spring</category>
      <author>3sammy</author>
      <guid isPermaLink="true">https://23log.tistory.com/111</guid>
      <comments>https://23log.tistory.com/111#entry111comment</comments>
      <pubDate>Mon, 24 Jan 2022 22:39:27 +0900</pubDate>
    </item>
    <item>
      <title>자바스크립트 함수는 매개변수에 따라 다르게 활용될까?</title>
      <link>https://23log.tistory.com/110</link>
      <description>&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;700&quot; data-origin-height=&quot;350&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/nH3wm/btrrDwkJ5rA/phuCcZMbfPkqpNJKya9Lz0/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/nH3wm/btrrDwkJ5rA/phuCcZMbfPkqpNJKya9Lz0/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/nH3wm/btrrDwkJ5rA/phuCcZMbfPkqpNJKya9Lz0/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FnH3wm%2FbtrrDwkJ5rA%2FphuCcZMbfPkqpNJKya9Lz0%2Fimg.png&quot; onerror=&quot;this.onerror=null; this.src='//t1.daumcdn.net/tistory_admin/static/images/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;350&quot; data-filename=&quot;자바스크립트_함수는_오버로딩이_될까__ .png&quot; data-origin-width=&quot;700&quot; data-origin-height=&quot;350&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;자바 Java의 OOP 개념 중에 메소드 오버로딩 &lt;code&gt;Method Overloading&lt;/code&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;pre class=&quot;java&quot; data-ke-language=&quot;java&quot;&gt;&lt;code&gt;pulbic int getGrade(){...}
pulbic int getGrade(int a){...}
pulbic int getGrade(int a, int b){...}&lt;/code&gt;&lt;/pre&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;위 &lt;code&gt;getGrade()&lt;/code&gt; 함수는 모두 &amp;ldquo;getGrade&amp;rdquo; 라는 함수명을 가지고 있지만 모두 다른 함수로 사용 될 수 있다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;그래서 개발자는 메소드 오버로딩을 활용해 함수의 재사용성을 높일 수 있다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;b&gt;그렇담, 자바스크립트 Javascript 에선 어떨까?&lt;/b&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;/h3&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;결론부터 말하면 자바스크립트는 매개변수가 없든, 100개를 입력 받든 모두 &lt;b&gt;하나로&lt;/b&gt; 인식한다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;pre class=&quot;java&quot; data-ke-language=&quot;java&quot;&gt;&lt;code&gt;function getGrade() {
  console.log(&quot;empty arguments&quot;);
}

// SyntaxError: Identifier 'getGrade' has already been declared
function getGrade(var1) {
  console.log(&quot;only one arguments&quot;);
}&lt;/code&gt;&lt;/pre&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;위 처럼 &lt;code&gt;getGrade&lt;/code&gt; 라는 함수명을 사용해, empty arguments 와 1개의 매개변수를 받는 함수를 작성했다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;하지만 이렇게 하면 &lt;code&gt;getGrade&lt;/code&gt;가 이미 선언되었다며 에러를 터트린다!&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;background-color: #000000; color: #eb5757;&quot; data-token-index=&quot;0&quot; data-reactroot=&quot;&quot;&gt;SyntaxError: /src/callback.js: Identifier 'getGrade' has already been declared (55:9)&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;/h3&gt;
&lt;h4 data-ke-size=&quot;size20&quot;&gt;1️⃣ 매개변수를 비워서(empty) 보낸다면?&amp;nbsp;&lt;span&gt;&amp;nbsp;&lt;/span&gt;&lt;/h4&gt;
&lt;pre class=&quot;javascript&quot; data-ke-language=&quot;javascript&quot;&gt;&lt;code&gt;function getGrade() {
  console.log(&quot;empty arguments&quot;);
}

getGrade();		//empty arguments
getGrade(123);		//empty arguments&lt;/code&gt;&lt;/pre&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;이처럼 &lt;code&gt;getGrade&lt;/code&gt; 함수는 &lt;code&gt;no-argument&lt;/code&gt;로 선언하였는데, 갑자기 123이란 파라미터를 보내면 어떻게 될까?&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;자바스크립트는 받는 매개변수가 없이 되어 있기 때문에, 별다른 에러를 내지 않고 콘솔에 &lt;code&gt;empty arguments&lt;/code&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️⃣ 매개변수를 선언한 것 보다&lt;span&gt;&amp;nbsp;&lt;/span&gt;&lt;span style=&quot;color: #ee2323;&quot;&gt;&lt;b&gt;더 많이&lt;/b&gt;&lt;/span&gt;&lt;span&gt;&amp;nbsp;&lt;/span&gt;보낸다면?&lt;/h4&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;자바스크립트에선 정해진 매개변수의 값을 제공받지 않는다면, 암시적으로 &lt;code&gt;undefined&lt;/code&gt;를 반환하고 있다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;pre id=&quot;code_1643022987121&quot; class=&quot;javascript&quot; data-ke-language=&quot;javascript&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;function getText(a,b,c,d,e) {
	console.log(a, b, c, d, e);
}

getText();				// undefined undefined undefined undefined undefined
getText(1,2,3,4,5,6,7,8,9);		// 1 2 3 4 5
getText(1,2,3);				// 1 2 3 undefined undefined
getText('','',1,2,3);			// undefined undefined 1 2 3&lt;/code&gt;&lt;/pre&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;해당 매개변수가 없는 경우엔 &lt;code&gt;undefined&lt;/code&gt; 를 반환하고 있다.&lt;/p&gt;
&lt;blockquote data-ke-style=&quot;style1&quot;&gt;&lt;span style=&quot;font-family: AppleSDGothicNeo-Regular, 'Malgun Gothic', '맑은 고딕', dotum, 돋움, sans-serif;&quot;&gt;쉽게 이해하려면,&lt;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;h3 data-ke-size=&quot;size23&quot;&gt;결론, 그리고 JS에서 함수를 대하는 자세&lt;/h3&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;우리는 자바스크립트의 함수를 좀더 유연하게, 자유롭게 대해도 괜찮다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;위의 예시에서 보았듯, 자바스크립트에서 함수는 &lt;code&gt;그 함수명으로 오직 한 개만 선언&lt;/code&gt; 할 수 있다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;그리고 매개변수 개수와 관계 없이 변수를 마음대로 전달해도 괜찮다! 왜냐고? 어차피 JS가 알아서 실행시키니 말이다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;재선언이나 재사용을 고려할 필요 없이, 어떤 함수명으로 지을지만 고민하면 된다 :D&lt;/p&gt;
&lt;blockquote data-ke-style=&quot;style1&quot;&gt;&lt;span style=&quot;font-family: AppleSDGothicNeo-Regular, 'Malgun Gothic', '맑은 고딕', dotum, 돋움, sans-serif;&quot;&gt;자바스크립트에서 저렇게 다양하게 들어오는 매개변수를 다루는 방법이 있는데,&lt;/span&gt;&lt;br /&gt;&lt;span style=&quot;font-family: AppleSDGothicNeo-Regular, 'Malgun Gothic', '맑은 고딕', dotum, 돋움, sans-serif;&quot;&gt;그건 다음 포스팅에서 다루겠다.&lt;/span&gt;&lt;/blockquote&gt;</description>
      <category>front/javascript</category>
      <category>Front-end</category>
      <category>javascript</category>
      <author>3sammy</author>
      <guid isPermaLink="true">https://23log.tistory.com/110</guid>
      <comments>https://23log.tistory.com/110#entry110comment</comments>
      <pubDate>Mon, 24 Jan 2022 20:26:07 +0900</pubDate>
    </item>
    <item>
      <title>[SQL] 신입에게 추천하는 SQL 작성 팁 (콤마 위치, WHERE 1=1)</title>
      <link>https://23log.tistory.com/109</link>
      <description>&lt;p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-filename=&quot;신입에게_추천하는,_SQL_작성_팁_ .png&quot; data-origin-width=&quot;700&quot; data-origin-height=&quot;350&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/cyEAzN/btrroWZco4Z/yO6asahADyUBe2cfr5CFAK/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/cyEAzN/btrroWZco4Z/yO6asahADyUBe2cfr5CFAK/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/cyEAzN/btrroWZco4Z/yO6asahADyUBe2cfr5CFAK/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FcyEAzN%2FbtrroWZco4Z%2FyO6asahADyUBe2cfr5CFAK%2Fimg.png&quot; onerror=&quot;this.onerror=null; this.src='//t1.daumcdn.net/tistory_admin/static/images/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;350&quot; data-filename=&quot;신입에게_추천하는,_SQL_작성_팁_ .png&quot; data-origin-width=&quot;700&quot; data-origin-height=&quot;350&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;SM 회사의 개발자에겐 프론트, 백엔드 구분이 크게 존재하지 않는다. 내가 맡은 서비스에서 주어진 파트를 풀로 담당할 뿐이다. 그래서 나 또한 입사 이전에는 프론트 엔지니어를 꿈꾸었지만 지금은, 백엔드까지 함께 개발하고 있다. (그래도 프론트 단 개발이 많은 전시/프로모션 파트로 배정되어서, 프론트 개발의 갈증을 약간씩 해소하고 있다)&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;백엔드 또한 개발하다보니 DB도 함께 건들이게 되었다. 이전에 프로젝트로 MySQL 까진 다뤄봤는데, 여긴 오라클 DB를 사용중이었다. 그리고 실무로 쓰이는 쿼리문을 보며, 참으로 복잡하단 생각을 했다. (입사 초기엔 쿼리문 분석하느라 하루를 다 보냈다.. 지금도 .. &amp;zwj; )&lt;/p&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;SQL이 서툰 신입분들이 보고 도움이 되었으면 좋겠다.&lt;/p&gt;
&lt;h2 data-ke-size=&quot;size26&quot;&gt;콤마는 앞에 찍자!&lt;/h2&gt;
&lt;pre class=&quot;sql&quot;&gt;&lt;code&gt;SELECT A
       B,
       C,
       D,
FROM table
;&lt;/code&gt;&lt;/pre&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;보통 다중 값을 조회하는 &lt;code&gt;SELECT&lt;/code&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;code&gt;복붙&lt;/code&gt;을 자주 사용하게 되는데, 습관적으로 뒤에 찍은 콤마로 인해 &lt;code&gt;D,&lt;/code&gt;의 형태로 셀렉문이 종료되어 에러가 날 수 있다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;따라서, &lt;b&gt;복붙과 실수를 방지하기 위해 콤마를 앞에 찍자&lt;/b&gt;!&lt;/p&gt;
&lt;pre class=&quot;sql&quot;&gt;&lt;code&gt;SELECT A
      ,B
      ,C
      ,D
FROM table
;&lt;/code&gt;&lt;/pre&gt;
&lt;h2 data-ke-size=&quot;size26&quot;&gt;조건을 붙일 땐, WHERE 1=1을 활용하자!&lt;/h2&gt;
&lt;pre class=&quot;sql&quot;&gt;&lt;code&gt;SELECT A
      ,B
FROM table
WHERE 1=1
  AND age &amp;gt;= 10
  AND grade in ('A', 'B', 'C')
;&lt;/code&gt;&lt;/pre&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;조건절을 보면 &lt;code&gt;WHERE 1=1&lt;/code&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;code&gt;1=1&lt;/code&gt; 은 참이다. 따라서 조건절의 시작을 &lt;code&gt;true&lt;/code&gt;로 실행하는 모습이다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;그렇담 왜 이렇게 하는가?&lt;/p&gt;
&lt;h3 data-ke-size=&quot;size23&quot;&gt;1) 주석 처리를 쉽게 하기 위해서&lt;/h3&gt;
&lt;pre class=&quot;angelscript&quot;&gt;&lt;code&gt;WHERE 1=1
  AND age &amp;gt;= 10
  -- AND grade in ('A', 'B', 'C')
  -- AND 조건3
  AND 조건4&lt;/code&gt;&lt;/pre&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;SELECT문을 작성하여 데이터를 체크하기 위해선 다양한 조건절을 활용하게 된다.&lt;br /&gt;이 과정에서 조건절을 주석 처리하며 조회할 때 &lt;code&gt;WHERE 1=1&lt;/code&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;p data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;font-family: AppleSDGothicNeo-Regular, 'Malgun Gothic', '맑은 고딕', dotum, 돋움, sans-serif;&quot;&gt;만약 WHERE age &amp;gt;= 10 으로 작성했는데, age 조건을 주석처리 하고 싶다면?&lt;/span&gt;&lt;br /&gt;&lt;span style=&quot;font-family: AppleSDGothicNeo-Regular, 'Malgun Gothic', '맑은 고딕', dotum, 돋움, sans-serif;&quot;&gt;다시 WHERE를 써야하는 수고로움이 발생될 것이다..&lt;/span&gt;&lt;/p&gt;
&lt;/blockquote&gt;
&lt;h3 data-ke-size=&quot;size23&quot;&gt;2) 다이나믹 쿼리를 작성하기 위해서&lt;/h3&gt;
&lt;blockquote data-ke-style=&quot;style1&quot;&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;font-family: AppleSDGothicNeo-Regular, 'Malgun Gothic', '맑은 고딕', dotum, 돋움, sans-serif;&quot;&gt;&lt;b&gt;다이나믹 쿼리 Dynamic Query&lt;/b&gt; 란?&lt;/span&gt;&lt;br /&gt;&lt;span style=&quot;font-family: AppleSDGothicNeo-Regular, 'Malgun Gothic', '맑은 고딕', dotum, 돋움, sans-serif;&quot;&gt;파라메터 Parameter로 들어오는 값에 의해, 쿼리를 동적으로 바꿔주는 기능이다.&lt;/span&gt;&lt;br /&gt;&lt;span style=&quot;font-family: AppleSDGothicNeo-Regular, 'Malgun Gothic', '맑은 고딕', dotum, 돋움, sans-serif;&quot;&gt;if문 등을 통해 조회하는 쿼리문을 수정할 수 있다.&lt;/span&gt;&lt;br /&gt;&lt;span style=&quot;font-family: AppleSDGothicNeo-Regular, 'Malgun Gothic', '맑은 고딕', dotum, 돋움, sans-serif;&quot;&gt;Spring 프레임워크의 마이바티스 MyBatis가 사용 예시이다.&lt;/span&gt;&lt;/p&gt;
&lt;/blockquote&gt;
&lt;pre class=&quot;pgsql&quot;&gt;&lt;code&gt;&amp;lt;SELECT id=&quot;select&quot;&amp;gt;
  SELECT A
        ,B
  FROM table
  WHERE 1=1
      &amp;lt;if test=&quot;name != null&quot;&amp;gt;
        AND name = #{name}
    &amp;lt;/if&amp;gt;
    AND grade in ('A', 'B', 'C')
  ;
&amp;lt;/SELECT&amp;gt;&lt;/code&gt;&lt;/pre&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;만약 파라메터로 이름을 받았을 때, 이름을 조건절에 추가한다고 한다면 위와 같이 작성 할 수 있다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;이 과정에서 &lt;code&gt;WHERE 1=1&lt;/code&gt;을 작성하지 않는다면, 다음과 같이 작성될 것이다.&lt;/p&gt;
&lt;pre class=&quot;r&quot;&gt;&lt;code&gt;...
      &amp;lt;if test=&quot;name != null&quot;&amp;gt;
        WHERE name = #{name}
    &amp;lt;/if&amp;gt;
    AND grade in ('A', 'B', 'C')
...&lt;/code&gt;&lt;/pre&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;그런데 name이 존재하지 않는다면, &lt;code&gt;WHERE&lt;/code&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;code&gt;if문&lt;/code&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;code&gt;WHERE 1=1&lt;/code&gt;을 작성할 때 주의할 점은, 단순 조회가 아닌 데이터의 변경이 일어나는 &lt;code&gt;UPDATE&lt;/code&gt;나 &lt;code&gt;DELETE&lt;/code&gt; 에선 그 작성을 유의해야 한다.&lt;/p&gt;
&lt;pre class=&quot;pgsql&quot;&gt;&lt;code&gt;&amp;lt;delete id=&quot;delete&quot;&amp;gt;
  DELETE 
  FROM table
  WHERE 1=1
      &amp;lt;if test=&quot;name != null&quot;&amp;gt;
        AND name = #{name}
    &amp;lt;/if&amp;gt;
  ;
&amp;lt;/SELECT&amp;gt;&lt;/code&gt;&lt;/pre&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;만약 이처럼 파라메터로 들어오는 이름에 대해서 삭제하는 SQL문을 작성했다. 하지만 만약 &lt;code&gt;name&lt;/code&gt; 파라메터가 없다면?&lt;/p&gt;
&lt;pre class=&quot;sql&quot;&gt;&lt;code&gt;DELETE 
FROM table
WHERE 1=1
;&lt;/code&gt;&lt;/pre&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;다음의 모습처럼 조건이 참인 상태로 되어, &lt;b&gt;table의 모든 값이 삭제되는 중대한 문제&lt;/b&gt;가 발생될 것이다.&lt;br /&gt;&lt;code&gt;UPDATE&lt;/code&gt;나 &lt;code&gt;DELETE&lt;/code&gt; 에선 문제를 예방하기 위해 &lt;code&gt;WHERE 1=1&lt;/code&gt; 사용을 지양하는 것이 좋다.&lt;/p&gt;
&lt;blockquote data-ke-style=&quot;style1&quot;&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;font-family: AppleSDGothicNeo-Regular, 'Malgun Gothic', '맑은 고딕', dotum, 돋움, sans-serif;&quot;&gt;WHERE 1=1 은 조회문에서만 사용하자 ^--^&lt;/span&gt;&lt;br /&gt;&lt;span style=&quot;font-family: AppleSDGothicNeo-Regular, 'Malgun Gothic', '맑은 고딕', dotum, 돋움, sans-serif;&quot;&gt;왜냐면 주석처리가 쉬우니까...&lt;/span&gt;&lt;/p&gt;
&lt;/blockquote&gt;
&lt;hr data-ke-style=&quot;style1&quot; /&gt;</description>
      <category>develop/back-side</category>
      <category>Oracle</category>
      <category>sql</category>
      <author>3sammy</author>
      <guid isPermaLink="true">https://23log.tistory.com/109</guid>
      <comments>https://23log.tistory.com/109#entry109comment</comments>
      <pubDate>Sat, 22 Jan 2022 19:40:03 +0900</pubDate>
    </item>
    <item>
      <title>이클립스 디버깅 모드에서 Timeout 에러 해결하기</title>
      <link>https://23log.tistory.com/108</link>
      <description>&lt;p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-filename=&quot;이클립스_디버깅_timeout_에러_해결_⏰.png&quot; data-origin-width=&quot;700&quot; data-origin-height=&quot;350&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/CpYtw/btrrhFwhxC5/EKqIheWHKdGvhovun2WWb1/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/CpYtw/btrrhFwhxC5/EKqIheWHKdGvhovun2WWb1/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/CpYtw/btrrhFwhxC5/EKqIheWHKdGvhovun2WWb1/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FCpYtw%2FbtrrhFwhxC5%2FEKqIheWHKdGvhovun2WWb1%2Fimg.png&quot; onerror=&quot;this.onerror=null; this.src='//t1.daumcdn.net/tistory_admin/static/images/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;350&quot; data-filename=&quot;이클립스_디버깅_timeout_에러_해결_⏰.png&quot; data-origin-width=&quot;700&quot; data-origin-height=&quot;350&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;/p&gt;
&lt;h3 data-ke-size=&quot;size23&quot;&gt;Error&lt;/h3&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;- Eclipse, STS 등에서 디버깅 모드로 구동 시, 타임아웃 오류와 함께 구동이 안되는 문제가 발생&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;- 서버 구동 시간도 450초 설정했는데, 외않돼?..&lt;/p&gt;
&lt;blockquote data-ke-style=&quot;style1&quot;&gt;&lt;span style=&quot;font-family: AppleSDGothicNeo-Regular, 'Malgun Gothic', '맑은 고딕', dotum, 돋움, sans-serif;&quot;&gt;&lt;span style=&quot;font-family: AppleSDGothicNeo-Regular, 'Malgun Gothic', '맑은 고딕', dotum, 돋움, sans-serif;&quot;&gt;해당 글은 &lt;span style=&quot;color: #666666; font-size: 16px; letter-spacing: 0px; font-family: -apple-system, BlinkMacSystemFont, AppleSDGothicNeo-Regular, 'Malgun Gothic', '맑은 고딕', dotum, 돋움, sans-serif;&quot;&gt;&lt;/span&gt;&lt;a style=&quot;font-size: 16px; letter-spacing: 0px; font-family: -apple-system, BlinkMacSystemFont, AppleSDGothicNeo-Regular, 'Malgun Gothic', '맑은 고딕', dotum, 돋움, sans-serif;&quot; href=&quot;https://23log.tistory.com/107&quot; target=&quot;_blank&quot; rel=&quot;noopener&quot;&gt;이클립스 Tomcat 서버 시작시, timeout 오류 해결하기 &lt;/a&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style=&quot;font-family: AppleSDGothicNeo-Regular, 'Malgun Gothic', '맑은 고딕', dotum, 돋움, sans-serif;&quot;&gt;여기 있다.&lt;/span&gt;&lt;/blockquote&gt;
&lt;h3 data-ke-size=&quot;size23&quot;&gt;원인&lt;/h3&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;- 디버깅 모드에서 너무 많은 브레이크 포인트(Break point)를 설정했기 때문&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;p data-ke-size=&quot;size16&quot;&gt;- 디버깅 모드에서 &lt;b&gt;Remove All Breakpoints&lt;/b&gt; 를 눌러 모든 브레이크 포인트를 삭제한다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-filename=&quot;blob&quot; data-origin-width=&quot;667&quot; data-origin-height=&quot;172&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/EMnqI/btrrh4JkBVQ/K5DuIXvQofEHsrgvcVKqWk/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/EMnqI/btrrh4JkBVQ/K5DuIXvQofEHsrgvcVKqWk/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/EMnqI/btrrh4JkBVQ/K5DuIXvQofEHsrgvcVKqWk/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FEMnqI%2Fbtrrh4JkBVQ%2FK5DuIXvQofEHsrgvcVKqWk%2Fimg.png&quot; onerror=&quot;this.onerror=null; this.src='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png'; this.srcset='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png';&quot; loading=&quot;lazy&quot; width=&quot;667&quot; height=&quot;172&quot; data-filename=&quot;blob&quot; data-origin-width=&quot;667&quot; data-origin-height=&quot;172&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;/p&gt;
&lt;blockquote data-ke-style=&quot;style1&quot;&gt;&lt;span&gt;원활한 실행을 위해서, &lt;b&gt;Project Clean&lt;/b&gt; 을 실행하고 구동하는게 좋다.&lt;/span&gt;&lt;/blockquote&gt;
&lt;h3 data-ke-size=&quot;size23&quot;&gt;생각&lt;/h3&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;이미 만들어진 결과물을 SM하는 과정에서, 디버깅 모드는 정말 중요하단걸 느끼고 있다..&lt;/p&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>develop/java&amp;amp;spring</category>
      <category>IDE</category>
      <category>이클립스</category>
      <author>3sammy</author>
      <guid isPermaLink="true">https://23log.tistory.com/108</guid>
      <comments>https://23log.tistory.com/108#entry108comment</comments>
      <pubDate>Thu, 20 Jan 2022 22:14:55 +0900</pubDate>
    </item>
    <item>
      <title>이클립스 Tomcat 서버 시작시, timeout 오류 해결하기</title>
      <link>https://23log.tistory.com/107</link>
      <description>&lt;p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-filename=&quot;이클립스_서버_timeout_에러_해결_⏰.png&quot; data-origin-width=&quot;700&quot; data-origin-height=&quot;350&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/kT1zy/btrrhFXiuyv/srHeeDAuAoPziuuZv8R5hk/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/kT1zy/btrrhFXiuyv/srHeeDAuAoPziuuZv8R5hk/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/kT1zy/btrrhFXiuyv/srHeeDAuAoPziuuZv8R5hk/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FkT1zy%2FbtrrhFXiuyv%2FsrHeeDAuAoPziuuZv8R5hk%2Fimg.png&quot; onerror=&quot;this.onerror=null; this.src='//t1.daumcdn.net/tistory_admin/static/images/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;350&quot; data-filename=&quot;이클립스_서버_timeout_에러_해결_⏰.png&quot; data-origin-width=&quot;700&quot; data-origin-height=&quot;350&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;Error&lt;/h3&gt;
&lt;pre id=&quot;code_1642683386805&quot; class=&quot;javascript&quot; data-ke-language=&quot;javascript&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;오류 메시지: Server Tomcat v8.5 Server at localhost was unable to start within 45 seconds. If the server requires more time, try increasing the timeout in the server editor.&lt;/code&gt;&lt;/pre&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;Eclipse, STS 등에서 서버 구동 시, 타임아웃 오류와 함께 구동이 안되는 문제가 발생&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;p data-ke-size=&quot;size16&quot;&gt;- 이클립스의 서버 실행(Server Start) 시간 제한이 45초로 걸려있으면, 오류가 발생할 수 있음&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;- 이는 이클립스가 자체적으로 45초 이내에 서버 실행이 안되면 문제가 있다고 판단하는 것&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;- 라이브러리 등을 추가하다보면 서버 구동 시간이 45초를 넘기는 경우가 발생할 수 있음&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;p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-filename=&quot;스크린샷 2022-01-20 오후 9.53.43.png&quot; data-origin-width=&quot;1272&quot; data-origin-height=&quot;694&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/JYBBH/btrrfmKs7S9/sYDqQCPVIWEwalRERUMDuk/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/JYBBH/btrrfmKs7S9/sYDqQCPVIWEwalRERUMDuk/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/JYBBH/btrrfmKs7S9/sYDqQCPVIWEwalRERUMDuk/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FJYBBH%2FbtrrfmKs7S9%2FsYDqQCPVIWEwalRERUMDuk%2Fimg.png&quot; onerror=&quot;this.onerror=null; this.src='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png'; this.srcset='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png';&quot; loading=&quot;lazy&quot; width=&quot;1272&quot; height=&quot;694&quot; data-filename=&quot;스크린샷 2022-01-20 오후 9.53.43.png&quot; data-origin-width=&quot;1272&quot; data-origin-height=&quot;694&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;1. 서버 탭에서 현재 문제가 되는 톰캣 서버를 더블 클릭하여 셋팅 화면을 연다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;2. 우측 Timeouts 탭에서 Start 시간을 충분히 늘려준다.&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: AppleSDGothicNeo-Regular, 'Malgun Gothic', '맑은 고딕', dotum, 돋움, sans-serif;&quot;&gt;편의상 Start, Stop을 각각 450초, 30초로 설정했다.&lt;br /&gt;&lt;/span&gt;Stop은 셋팅할 필요 없다고 하는데..  &lt;/blockquote&gt;
&lt;h3 data-ke-size=&quot;size23&quot;&gt;생각&lt;/h3&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;VSCode에 익숙해져있다가 이클립스 환경에서 개발하려니 간단한거도 모르는거 투성이다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;제 2의 sammy가 이 글을 보고 있다면, 빠르게 오류를 해결하고 태연하게 업무에 복귀할 수 있길 바란다.&lt;/p&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>develop/java&amp;amp;spring</category>
      <category>IDE</category>
      <category>이클립스</category>
      <author>3sammy</author>
      <guid isPermaLink="true">https://23log.tistory.com/107</guid>
      <comments>https://23log.tistory.com/107#entry107comment</comments>
      <pubDate>Thu, 20 Jan 2022 22:05:55 +0900</pubDate>
    </item>
    <item>
      <title>라디오 버튼 값 jQuery와 JS로 가져오는 방법 정리</title>
      <link>https://23log.tistory.com/106</link>
      <description>&lt;p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-origin-width=&quot;700&quot; data-origin-height=&quot;350&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/vObRB/btrq4rr52i2/Ry5Tk0dozUxu6RlTYKDO51/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/vObRB/btrq4rr52i2/Ry5Tk0dozUxu6RlTYKDO51/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/vObRB/btrq4rr52i2/Ry5Tk0dozUxu6RlTYKDO51/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FvObRB%2Fbtrq4rr52i2%2FRy5Tk0dozUxu6RlTYKDO51%2Fimg.png&quot; onerror=&quot;this.onerror=null; this.src='//t1.daumcdn.net/tistory_admin/static/images/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;350&quot; data-origin-width=&quot;700&quot; data-origin-height=&quot;350&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;HTML의 라디오 버튼을 접근 할 수 있는 방법은 무엇일까?&lt;br /&gt;여러개의 선택지 중에 선택된 것을 고를 수 있을까?&lt;br /&gt;라디오 버튼의 id는 label에 연결되는데, 여러개의 라디오 버튼을 어떻게 가져올까?&lt;br /&gt;...&lt;br /&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;Example&lt;/h2&gt;
&lt;pre class=&quot;routeros&quot;&gt;&lt;code&gt;&amp;lt;input type=&quot;radio&quot; name=&quot;review.score&quot; id=&quot;score1&quot; value=&quot;1&quot;&amp;gt;
&amp;lt;label for=&quot;score1&quot;&amp;gt;1점&amp;lt;/label&amp;gt;
&amp;lt;input type=&quot;radio&quot; name=&quot;review.score&quot; id=&quot;score2&quot; value=&quot;2&quot;&amp;gt;
&amp;lt;label for=&quot;score1&quot;&amp;gt;2점&amp;lt;/label&amp;gt;
...&lt;/code&gt;&lt;/pre&gt;
&lt;ul style=&quot;list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li&gt;&lt;code&gt;input type&lt;/code&gt;은 radio로 id 값은, &lt;code&gt;label&lt;/code&gt;의 연결로 활용되었다.&lt;/li&gt;
&lt;/ul&gt;
&lt;blockquote data-ke-style=&quot;style1&quot;&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;font-family: 'Noto Serif KR';&quot;&gt;label은&lt;/span&gt; for = id값 으로 연결해서 사용한다.&lt;br /&gt;이렇게 연결하면 label을 클릭할 경우, 해당 id값의 input이 클릭 처리된다.&lt;/p&gt;
&lt;/blockquote&gt;
&lt;h2 data-ke-size=&quot;size26&quot;&gt;jQuery 로 처리하기&lt;/h2&gt;
&lt;pre class=&quot;arcade&quot;&gt;&lt;code&gt;$(&quot;input[name='review.score']:checked&quot;).val()
// score의 라디오 중 체크된 것의 값만 가져옴
// 아무것도 선택안되어있으면, undefined

$(&quot;input[name='review.score']&quot;).is(':checked')
// 전체 radio 중에서 하나라도 체크되어 있는지 확인
// 아무것도 선택안되어있으면, false&lt;/code&gt;&lt;/pre&gt;
&lt;ul style=&quot;list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li&gt;input에서 지정한 name 속성값을 활용하여 가져온다.&lt;/li&gt;
&lt;li&gt;제이쿼리의 경우 간단하게 체크된 값만 가져오거나, 체크된 값이 존재하는 지 등 필요한 상황별로 기능들을 제공하고 있어 간편하다.&lt;/li&gt;
&lt;/ul&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;h2 data-ke-size=&quot;size26&quot;&gt;바닐라 JS(javascript) 에서 처리하기&lt;/h2&gt;
&lt;pre class=&quot;javascript&quot;&gt;&lt;code&gt;var radios = document.getElementsByName('review.score');

radios.forEach(elem =&amp;gt; {
    if(elem.checked){
        console.log(elem.value);
    }
});&lt;/code&gt;&lt;/pre&gt;
&lt;ul style=&quot;list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li&gt;radio 버튼과 체크 박스는 배열요소이다&lt;/li&gt;
&lt;li&gt;&lt;code&gt;radios.value&lt;/code&gt; 를 하면, &lt;code&gt;배열.value&lt;/code&gt; 과 같은 의미이기 때문에, &lt;code&gt;undefiend&lt;/code&gt;로 나올 수 밖에 없음&lt;/li&gt;
&lt;li&gt;따라서 배열을 순회하며 checked 여부를 가져오고 그 값을 처리/반환 하는 방향으로 가야한다.&lt;/li&gt;
&lt;/ul&gt;
&lt;blockquote data-ke-style=&quot;style1&quot;&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;font-family: AppleSDGothicNeo-Regular, 'Malgun Gothic', '맑은 고딕', dotum, 돋움, sans-serif;&quot;&gt;배열.forEach는 배열에서 사용하는 반복문으로, 리턴값이 없다는 특징이 있다.&lt;/span&gt;&lt;/p&gt;
&lt;/blockquote&gt;</description>
      <category>front/javascript</category>
      <category>html</category>
      <category>javascript</category>
      <category>jQuery #</category>
      <author>3sammy</author>
      <guid isPermaLink="true">https://23log.tistory.com/106</guid>
      <comments>https://23log.tistory.com/106#entry106comment</comments>
      <pubDate>Tue, 18 Jan 2022 23:42:00 +0900</pubDate>
    </item>
    <item>
      <title>무접점 키보드 키캡 및 상판 (분해 없이) 간이 청소하기</title>
      <link>https://23log.tistory.com/105</link>
      <description>&lt;h3 data-ke-size=&quot;size23&quot;&gt;&lt;span style=&quot;font-family: AppleSDGothicNeo-Regular, 'Malgun Gothic', '맑은 고딕', dotum, 돋움, sans-serif;&quot;&gt;&lt;b&gt;인트로&lt;/b&gt;&lt;/span&gt;&lt;/h3&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;font-family: AppleSDGothicNeo-Regular, 'Malgun Gothic', '맑은 고딕', dotum, 돋움, sans-serif;&quot;&gt;이전부터 사용해온 한무무와 새로 들이게 된 앱코 무접점 키보드, 이렇게 두 키보드를 청소하고자 한다. 한 번에 키캡 청소부터 윤활 작업까지 하면 좋겠지만, 시간적 여유가 없으므로 오늘은 키캡 청소만 진행하려고 한다.&lt;/span&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;font-family: AppleSDGothicNeo-Regular, 'Malgun Gothic', '맑은 고딕', dotum, 돋움, sans-serif;&quot;&gt;(사실 아직 슈퍼루브 윤활제가 도착하지 않았다..)&lt;/span&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;font-family: AppleSDGothicNeo-Regular, 'Malgun Gothic', '맑은 고딕', dotum, 돋움, sans-serif;&quot;&gt;사실 맘 같아선 하우징 분리해서 풀 윤활 및 청소를 하고 싶었는데, 당근으로 구매한 앱코 키보드의 하우징에 크랙이 너무 심해서 깨질 것 같았다. 한번 도전은 해봤지만, 하단 부분 결착이 너무 견고해서 분해에 활용한 카드가 계속 부셔졌다.. 그래서 시간 아낄 겸, 분해 없이 키캡 및 상판 청소만 진행하고자 한다. 다음 기회에 하우징 분리 및 풀윤활에 도전하도록 하고,&amp;nbsp;오늘은 &lt;b&gt;한성 무접점 무선 키보드 GK888B&lt;/b&gt; 와 &lt;b&gt;앱코 해커 K965P V2&lt;/b&gt; 의 키캡 및 상판 청소를 간단하게 시작해보겠다.&lt;/span&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;font-family: AppleSDGothicNeo-Regular, 'Malgun Gothic', '맑은 고딕', dotum, 돋움, sans-serif;&quot;&gt;- 소요시간 : 40분 씩&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;font-family: AppleSDGothicNeo-Regular, 'Malgun Gothic', '맑은 고딕', dotum, 돋움, sans-serif;&quot;&gt;&lt;b&gt;준비물&lt;/b&gt;&lt;/span&gt;&lt;/h3&gt;
&lt;ul style=&quot;list-style-type: circle;&quot; data-ke-list-type=&quot;circle&quot;&gt;
&lt;li&gt;&lt;span style=&quot;font-family: AppleSDGothicNeo-Regular, 'Malgun Gothic', '맑은 고딕', dotum, 돋움, sans-serif;&quot;&gt;중성 세제&lt;/span&gt;&lt;/li&gt;
&lt;li&gt;&lt;span style=&quot;font-family: AppleSDGothicNeo-Regular, 'Malgun Gothic', '맑은 고딕', dotum, 돋움, sans-serif;&quot;&gt;1.5L 페트병&lt;/span&gt;&lt;/li&gt;
&lt;li&gt;&lt;span style=&quot;font-family: AppleSDGothicNeo-Regular, 'Malgun Gothic', '맑은 고딕', dotum, 돋움, sans-serif;&quot;&gt;타올&lt;/span&gt;&lt;/li&gt;
&lt;li&gt;&lt;span style=&quot;font-family: AppleSDGothicNeo-Regular, 'Malgun Gothic', '맑은 고딕', dotum, 돋움, sans-serif;&quot;&gt;면봉 (뾰족 + 보통)&lt;/span&gt;&lt;/li&gt;
&lt;li&gt;&lt;span style=&quot;font-family: AppleSDGothicNeo-Regular, 'Malgun Gothic', '맑은 고딕', dotum, 돋움, sans-serif;&quot;&gt;물티슈&lt;/span&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;font-family: AppleSDGothicNeo-Regular, 'Malgun Gothic', '맑은 고딕', dotum, 돋움, sans-serif;&quot;&gt;위 준비물들은 간단하게 청소하는 용도이다.&lt;/span&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;h3 data-ke-size=&quot;size23&quot;&gt;&lt;span style=&quot;font-family: AppleSDGothicNeo-Regular, 'Malgun Gothic', '맑은 고딕', dotum, 돋움, sans-serif;&quot;&gt;&lt;b&gt;청소하자!&lt;/b&gt;&lt;/span&gt;&lt;/h3&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;font-family: AppleSDGothicNeo-Regular, 'Malgun Gothic', '맑은 고딕', dotum, 돋움, sans-serif;&quot;&gt;당연한 소리지만, 아래의 순서를 따른다.&lt;/span&gt;&lt;/p&gt;
&lt;ol style=&quot;list-style-type: decimal;&quot; data-ke-list-type=&quot;decimal&quot;&gt;
&lt;li&gt;&lt;b&gt;&lt;span style=&quot;font-family: AppleSDGothicNeo-Regular, 'Malgun Gothic', '맑은 고딕', dotum, 돋움, sans-serif;&quot;&gt;키캡 리무버로 모든 키캡을 제거한다.&lt;/span&gt;&lt;/b&gt;&lt;/li&gt;
&lt;li&gt;&lt;b&gt;&lt;span style=&quot;font-family: AppleSDGothicNeo-Regular, 'Malgun Gothic', '맑은 고딕', dotum, 돋움, sans-serif;&quot;&gt;중성 세제에 키캡을 넣고 세척한다.&lt;/span&gt;&lt;/b&gt;&lt;/li&gt;
&lt;li&gt;&lt;b&gt;&lt;span style=&quot;font-family: AppleSDGothicNeo-Regular, 'Malgun Gothic', '맑은 고딕', dotum, 돋움, sans-serif;&quot;&gt;상판을 면봉, 물티슈, 휴지를 이용해 청소한다.&lt;/span&gt;&lt;/b&gt;&lt;/li&gt;
&lt;/ol&gt;
&lt;h4 data-ke-size=&quot;size20&quot;&gt;&lt;span style=&quot;font-family: AppleSDGothicNeo-Regular, 'Malgun Gothic', '맑은 고딕', dotum, 돋움, sans-serif;&quot;&gt;&lt;b&gt;2번 상세) 중성 세제로 키캡 세척하기&lt;/b&gt;&lt;/span&gt;&lt;/h4&gt;
&lt;blockquote data-ke-style=&quot;style1&quot;&gt;&lt;span style=&quot;font-family: 'Noto Serif KR';&quot;&gt;두가지 방법이 있다. 1번은 물 그릇에 중성 세제를 푼 물을 담아 놓고 키캡을 넣어 휘적휘적 하는 방법, 2번 방법은 1.5L 페트병에 키캡을 넣어서 흔드는 방법. 1번의 경우 뒤적뒤적 손으로 휘젓는게 귀찮다. 반면 2번은 세척 과정은 편하지만 키캡을 뺄 때 좀 귀찮다. 난 2번 방법으로 했다. 왜냐면 한번도 안해본 거여서 한번 경험삼아.&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;&lt;span style=&quot;font-family: AppleSDGothicNeo-Regular, 'Malgun Gothic', '맑은 고딕', dotum, 돋움, sans-serif;&quot;&gt;&lt;b&gt;1. 페트병에 4/5 정도 물을 채우고, 세제를 5~6방울 떨어뜨린다.&lt;/b&gt;&lt;/span&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;font-family: AppleSDGothicNeo-Regular, 'Malgun Gothic', '맑은 고딕', dotum, 돋움, sans-serif;&quot;&gt;&lt;b&gt;2. 먼저 흔들어서 거품을 만들어준다.&lt;/b&gt;&lt;/span&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;font-family: AppleSDGothicNeo-Regular, 'Malgun Gothic', '맑은 고딕', dotum, 돋움, sans-serif;&quot;&gt;&lt;b&gt;3. 모든 키캡을 넣는다.&lt;/b&gt;&lt;b&gt;&lt;/b&gt;&lt;/span&gt;&lt;/p&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-filename=&quot;blob&quot; data-origin-width=&quot;1500&quot; data-origin-height=&quot;1515&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/xAeol/btro8xMOksN/qsBvnokxeg1eKi90nHF0v0/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/xAeol/btro8xMOksN/qsBvnokxeg1eKi90nHF0v0/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/xAeol/btro8xMOksN/qsBvnokxeg1eKi90nHF0v0/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FxAeol%2Fbtro8xMOksN%2FqsBvnokxeg1eKi90nHF0v0%2Fimg.png&quot; onerror=&quot;this.onerror=null; this.src='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png'; this.srcset='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png';&quot; loading=&quot;lazy&quot; width=&quot;400&quot; height=&quot;404&quot; data-filename=&quot;blob&quot; data-origin-width=&quot;1500&quot; data-origin-height=&quot;1515&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;b&gt;4. 천천히 위 아래로 돌리며 키캡들이 씻기는 소리를 감상한다.&lt;/b&gt;&lt;/p&gt;
&lt;blockquote data-ke-style=&quot;style1&quot;&gt;&lt;span style=&quot;font-family: 'Noto Serif KR';&quot;&gt;스스로 세탁기가 되었다는 생각을 하면 더욱 즐거워진다.&lt;/span&gt;&lt;/blockquote&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;font-family: AppleSDGothicNeo-Regular, 'Malgun Gothic', '맑은 고딕', dotum, 돋움, sans-serif;&quot;&gt;&lt;b&gt;5. 10분 정도 담궈둔다.&lt;/b&gt;&lt;/span&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;font-family: AppleSDGothicNeo-Regular, 'Malgun Gothic', '맑은 고딕', dotum, 돋움, sans-serif;&quot;&gt;&lt;b&gt;6. 물을 빼준다.&lt;/b&gt;&lt;/span&gt;&lt;/p&gt;
&lt;blockquote data-ke-style=&quot;style1&quot;&gt;&lt;span style=&quot;font-family: 'Noto Serif KR';&quot;&gt;이 때, 손가락 하나를 넣어주면 키캡은 빠지지 않고 물만 뺼 수 있다.&lt;/span&gt;&lt;/blockquote&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-filename=&quot;IMG_6052.png&quot; data-origin-width=&quot;4032&quot; data-origin-height=&quot;3024&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/bt6HMS/btroWnebdzQ/DaykkYidyLwwVZ4uYF67VK/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/bt6HMS/btroWnebdzQ/DaykkYidyLwwVZ4uYF67VK/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/bt6HMS/btroWnebdzQ/DaykkYidyLwwVZ4uYF67VK/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2Fbt6HMS%2FbtroWnebdzQ%2FDaykkYidyLwwVZ4uYF67VK%2Fimg.png&quot; onerror=&quot;this.onerror=null; this.src='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png'; this.srcset='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png';&quot; loading=&quot;lazy&quot; width=&quot;400&quot; height=&quot;300&quot; data-filename=&quot;IMG_6052.png&quot; data-origin-width=&quot;4032&quot; data-origin-height=&quot;3024&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;font-family: AppleSDGothicNeo-Regular, 'Malgun Gothic', '맑은 고딕', dotum, 돋움, sans-serif;&quot;&gt;&lt;b&gt;7. 키캡을 페트병에서 빼준다.&lt;/b&gt;&lt;/span&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;font-family: AppleSDGothicNeo-Regular, 'Malgun Gothic', '맑은 고딕', dotum, 돋움, sans-serif;&quot;&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp;7-1. 잘 안빠진다면, 다시 물을 넣어서 자연스럽게 빠지도록 한다.&lt;/span&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;font-family: AppleSDGothicNeo-Regular, 'Malgun Gothic', '맑은 고딕', dotum, 돋움, sans-serif;&quot;&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp;7-2. 혹은 손가락으로 계속 건들이며 빼준다.&lt;/span&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;font-family: AppleSDGothicNeo-Regular, 'Malgun Gothic', '맑은 고딕', dotum, 돋움, sans-serif;&quot;&gt;&lt;b&gt;8. 키캡의 물기를 잘 턴 뒤, 타올 위에서 말린다.&lt;/b&gt;&lt;/span&gt;&lt;/p&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-filename=&quot;IMG_6054.png&quot; data-origin-width=&quot;4032&quot; data-origin-height=&quot;3024&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/bLFbqU/btro7hpVJj0/UOCtXY2pGDozmyBg90xFgK/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/bLFbqU/btro7hpVJj0/UOCtXY2pGDozmyBg90xFgK/img.png&quot; data-alt=&quot;내부가 밖에 나오도록 말려야 한다. 안그럼 잘 안마른다.&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/bLFbqU/btro7hpVJj0/UOCtXY2pGDozmyBg90xFgK/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FbLFbqU%2Fbtro7hpVJj0%2FUOCtXY2pGDozmyBg90xFgK%2Fimg.png&quot; onerror=&quot;this.onerror=null; this.src='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png'; this.srcset='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png';&quot; loading=&quot;lazy&quot; width=&quot;400&quot; height=&quot;300&quot; data-filename=&quot;IMG_6054.png&quot; data-origin-width=&quot;4032&quot; data-origin-height=&quot;3024&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;span style=&quot;font-family: AppleSDGothicNeo-Regular, 'Malgun Gothic', '맑은 고딕', dotum, 돋움, sans-serif;&quot;&gt;&lt;b&gt;3번 상세) 상판 청소하기&lt;/b&gt;&lt;/span&gt;&lt;/h4&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;font-family: AppleSDGothicNeo-Regular, 'Malgun Gothic', '맑은 고딕', dotum, 돋움, sans-serif;&quot;&gt;&lt;b&gt;0. 에어건/헤어드라이기 등을 이용해 먼지 들을 사전에 날려준다.&lt;/b&gt;&lt;/span&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;font-family: AppleSDGothicNeo-Regular, 'Malgun Gothic', '맑은 고딕', dotum, 돋움, sans-serif;&quot;&gt;&lt;b&gt;1. 손으로 잡을 수 있는 이물질을 제거한다.&lt;/b&gt;&lt;/span&gt;&lt;/p&gt;
&lt;blockquote data-ke-style=&quot;style1&quot;&gt;&lt;span style=&quot;font-family: 'Noto Serif KR';&quot;&gt;보통 머리카락, 종이 등이다.&lt;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;&lt;span style=&quot;font-family: AppleSDGothicNeo-Regular, 'Malgun Gothic', '맑은 고딕', dotum, 돋움, sans-serif;&quot;&gt;&lt;b&gt;2. 면봉의 뾰족한 부분을 활용해서 스테빌라이저의 구리스를 제거해준다. (윤활 작업 미실시 시 skip)&lt;/b&gt;&lt;/span&gt;&lt;/p&gt;
&lt;blockquote data-ke-style=&quot;style1&quot;&gt;&lt;span style=&quot;font-family: 'Noto Serif KR';&quot;&gt;&lt;span style=&quot;font-family: 'Noto Serif KR';&quot;&gt;&lt;b&gt;&lt;/b&gt;&lt;/span&gt;&lt;/span&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;font-family: AppleSDGothicNeo-Regular, 'Malgun Gothic', '맑은 고딕', dotum, 돋움, sans-serif;&quot;&gt;구리스에도 많은 먼지가 끼어있다. 필자는 윤활 작업간 새로 구리스를 칠할 예정이니, &lt;/span&gt;&lt;span style=&quot;font-family: AppleSDGothicNeo-Regular, 'Malgun Gothic', '맑은 고딕', dotum, 돋움, sans-serif;&quot;&gt;zero-base로 하기 위해 다 지웠다.&lt;br /&gt;&lt;/span&gt;&lt;span style=&quot;font-family: AppleSDGothicNeo-Regular, 'Malgun Gothic', '맑은 고딕', dotum, 돋움, sans-serif;&quot;&gt;면봉으로 제거가 힘들다면, 휴지와 뾰족한 도구(샤프, 핀셋 등)로 닦아주자.&lt;/span&gt;&lt;/p&gt;
&lt;/blockquote&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-filename=&quot;IMG_6048.png&quot; data-origin-width=&quot;4032&quot; data-origin-height=&quot;3024&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/vHM3N/btro9H9zwvS/c0x0VL2hceyzYKrkKf3u1k/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/vHM3N/btro9H9zwvS/c0x0VL2hceyzYKrkKf3u1k/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/vHM3N/btro9H9zwvS/c0x0VL2hceyzYKrkKf3u1k/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FvHM3N%2Fbtro9H9zwvS%2Fc0x0VL2hceyzYKrkKf3u1k%2Fimg.png&quot; onerror=&quot;this.onerror=null; this.src='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png'; this.srcset='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png';&quot; loading=&quot;lazy&quot; width=&quot;400&quot; height=&quot;300&quot; data-filename=&quot;IMG_6048.png&quot; data-origin-width=&quot;4032&quot; data-origin-height=&quot;3024&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;font-family: AppleSDGothicNeo-Regular, 'Malgun Gothic', '맑은 고딕', dotum, 돋움, sans-serif;&quot;&gt;&lt;b&gt;3. 물티슈와 면봉을 활용해 상판 사이사이를 구석구석 청소한다.&lt;/b&gt;&lt;/span&gt;&lt;/p&gt;
&lt;blockquote data-ke-style=&quot;style1&quot;&gt;&lt;span style=&quot;font-family: 'Noto Serif KR';&quot;&gt;하우징을 분해했다면, 상판 부분만 따로 떼어낼 수 있어서 청소가 간편하지만 오늘은 분해 없는 청소다.&lt;br /&gt;물티슈를 상판 위에 얹고 면봉을 활용해 키보드 사이사이를 구석구석 닦는다. 뾰족한 면봉을 활용하면 좁은 틈도 닦을 수 있다.&lt;/span&gt;&lt;/blockquote&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-filename=&quot;IMG_6049.png&quot; data-origin-width=&quot;4032&quot; data-origin-height=&quot;3024&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/ZjDoe/btro37VuK1D/hBq15UkObSeBYFj8KKPBvk/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/ZjDoe/btro37VuK1D/hBq15UkObSeBYFj8KKPBvk/img.png&quot; data-alt=&quot;휴지와 면봉이면 뭐든 할 수 있다.&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/ZjDoe/btro37VuK1D/hBq15UkObSeBYFj8KKPBvk/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FZjDoe%2Fbtro37VuK1D%2FhBq15UkObSeBYFj8KKPBvk%2Fimg.png&quot; onerror=&quot;this.onerror=null; this.src='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png'; this.srcset='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png';&quot; loading=&quot;lazy&quot; width=&quot;400&quot; height=&quot;300&quot; data-filename=&quot;IMG_6049.png&quot; data-origin-width=&quot;4032&quot; data-origin-height=&quot;3024&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;span style=&quot;font-family: AppleSDGothicNeo-Regular, 'Malgun Gothic', '맑은 고딕', dotum, 돋움, sans-serif;&quot;&gt;&lt;b&gt;4. 눈에 보이는 먼지들을 면봉을 이용해 제거한다.&lt;/b&gt;&lt;/span&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;font-family: AppleSDGothicNeo-Regular, 'Malgun Gothic', '맑은 고딕', dotum, 돋움, sans-serif;&quot;&gt;&lt;b&gt;5. 만족할 때까지 반복한다.&lt;/b&gt;&lt;/span&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;h3 data-ke-size=&quot;size23&quot;&gt;&lt;span style=&quot;font-family: AppleSDGothicNeo-Regular, 'Malgun Gothic', '맑은 고딕', dotum, 돋움, sans-serif;&quot;&gt;&lt;b&gt;느낀점&lt;/b&gt;&lt;/span&gt;&lt;/h3&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;font-family: AppleSDGothicNeo-Regular, 'Malgun Gothic', '맑은 고딕', dotum, 돋움, sans-serif;&quot;&gt;#1.&lt;/span&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;font-family: AppleSDGothicNeo-Regular, 'Malgun Gothic', '맑은 고딕', dotum, 돋움, sans-serif;&quot;&gt;사실 위 과정은 굉장히 초보적인 과정이다. &quot;키캡을 물로 씻고, 상판은 닦는다&quot; 이게 전부다. 하지만 모든 블로그에서 하우징을 분해한 풀윤활과 세부적인 청소를 말하고 있을 때, 한 명 쯤은 간단하게 간이로 알려주는 것도 필요하다고 생각했다. 삶에서 풀윤활이 반드시 정답은 아니니 말이다. 때론 누군가도 나처럼 '케이스에 크랙이 나있어서', '하우징 분해가 어려워서' 간이 청소를 찾을 수 있다고 생각했다.&lt;/span&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;#2.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;노래를 들으며 키보드 상판을 한참을 청소했다. 면봉으로 열심히 청소해도 계속해서 먼지나 이물질이 나왔다. 대체 어디서 나오는거야 싶다가도, 참 여기저기 징하게 들러 붙어있다고 생각했다. 눈썹털, 머리카락, 먼지등을 열심히 면봉으로 찾아 없애는 작업을 반복했다. 분명 더럽고 귀찮고 어쩌면 시간이 아까운 작업이었지만, 도리어 아무 생각이 없이 편안했다. 숨어있는 이물질을 찾아내어 제거하는 과정을 반복하다보면 성취감도 느낄 수 있었다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;#3.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;어쩌면 너드틱하고, 마이너한 취미 혹은 행동일 수 있다. 혹자는 '그 노력으로 차라리 연인을 만나라' 라고 할 정도니 말이다. 하지만, 아무런 생각 없이 상판 청소를 반복하다보면 참 마음이 편안했다. 그와 동시에 가지가지한 고민 없이 한가지에 집중한 적이 요근래 언제였나 스스로 물어보게 되었다. '오늘은 나만의 시간이야' 라며 카페에 가고, 좋아하는 노래를 들으며 드로잉을 하다가도 새롭게 개발해야 할 것들이 떠오르게 되면 펜을 멈추게 된다. 한 가지에 오롯이 집중하지 못하고 '지금 내가 드로잉 하는게 맞는가? 텔레그램 자동화 해야지!' 싶은 생각이 나를 방해했다. 그런 의미에서 키보드 상판 청소는 생각많은 너드들을 위한 테라피 일 수 있다고 생각한다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;hr contenteditable=&quot;false&quot; data-ke-type=&quot;horizontalRule&quot; data-ke-style=&quot;style4&quot; /&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-filename=&quot;IMG_6050.png&quot; data-origin-width=&quot;4032&quot; data-origin-height=&quot;3024&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/lSUJR/btro7hpWq6A/9dbY8o6ag8iUHqCJxkuP0K/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/lSUJR/btro7hpWq6A/9dbY8o6ag8iUHqCJxkuP0K/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/lSUJR/btro7hpWq6A/9dbY8o6ag8iUHqCJxkuP0K/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FlSUJR%2Fbtro7hpWq6A%2F9dbY8o6ag8iUHqCJxkuP0K%2Fimg.png&quot; onerror=&quot;this.onerror=null; this.src='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png'; this.srcset='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png';&quot; loading=&quot;lazy&quot; width=&quot;800&quot; height=&quot;600&quot; data-filename=&quot;IMG_6050.png&quot; data-origin-width=&quot;4032&quot; data-origin-height=&quot;3024&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;키보드 타건을 시작하면, 분명 다시 더러워 질 것이다. 머리카락이 끼고, 먼지와 눈썹 들이 떨어져 뒹굴 것이다. 나는 키캡 사이에 보이는 먼지를 보며 그 더러움을 가늠할 것이다. 하지만, 어쩔 수 없다. 쌓이는 먼지는 막을 수 없고, 나는 키보드를 쳐야만 하고, 언젠가는 청소를 해야만 한다. 어쩔 수 없는 반복이니 조금은 다른 생각과 접근으로, 이 불필요한 행동에 즐거움을 부여하면 좋을 것 같다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;</description>
      <category>정보/TECH</category>
      <category>무접점</category>
      <category>앱코무접점</category>
      <category>키보드</category>
      <category>한무무</category>
      <author>3sammy</author>
      <guid isPermaLink="true">https://23log.tistory.com/105</guid>
      <comments>https://23log.tistory.com/105#entry105comment</comments>
      <pubDate>Tue, 28 Dec 2021 00:02:50 +0900</pubDate>
    </item>
    <item>
      <title>Node.js + express으로 telegram Bot 만들기</title>
      <link>https://23log.tistory.com/104</link>
      <description>&lt;h2 data-ke-size=&quot;size26&quot;&gt;인트로&lt;/h2&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;현재 파이어베이스 기반의 서버리스 환경에서 프론트를 구성 및 배포하였는데, &lt;code&gt;telegram Bot&lt;/code&gt;을 사용하려면 백엔드를 구성해야 한다. 백엔드는 Spring 밖에 할 줄 모르지만 (업무로 활용하는게 Spring..) 한번 node.js를 간단하게 활용하여 봇을 테스트 해보려 한다.&lt;br /&gt;&lt;br /&gt;&lt;/p&gt;
&lt;blockquote data-ke-style=&quot;style1&quot;&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;정말 네트워크, 서버, ... 백엔드의 영역은 너~어무 어렵다..&lt;/p&gt;
&lt;/blockquote&gt;
&lt;h2 data-ke-size=&quot;size26&quot;&gt;간단한 개념 정리&lt;/h2&gt;
&lt;blockquote data-ke-style=&quot;style1&quot;&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;간단하게 알아본 내용을 정리했다. 잘못된 내용은 지적해주시면 빠르게 고치겠다.&lt;/p&gt;
&lt;/blockquote&gt;
&lt;ul style=&quot;list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li&gt;&lt;b&gt;NodeJS&lt;/b&gt;
&lt;ul style=&quot;list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li&gt;&lt;code&gt;node.JS&lt;/code&gt; 는 &lt;code&gt;javascript&lt;/code&gt; 를 활용한 &quot;서버&quot;이다.&lt;/li&gt;
&lt;li&gt;&lt;code&gt;javascript&lt;/code&gt;는 브라우저에서만 사용(런타임) 할 수 있는 언어였다.&lt;/li&gt;
&lt;li&gt;하지만 &lt;code&gt;node.js&lt;/code&gt; 는 그 한계를 극복하여, 브라우저 외의 런타임(구동 환경)을 가능하게 한다.&lt;/li&gt;
&lt;li&gt;정확한 사실은 따로 찾아보길 권장합니다..  &lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt;&lt;b&gt;Express&lt;/b&gt;
&lt;ul style=&quot;list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li&gt;&lt;code&gt;nodejs&lt;/code&gt;를 위한 웹 프레임워크 중 하나&lt;/li&gt;
&lt;li&gt;&lt;code&gt;nodejs&lt;/code&gt;로 웹 서버를 구성하게 되면, &lt;code&gt;라우팅&lt;/code&gt;이며 &lt;code&gt;세션 관리&lt;/code&gt;며 이래저래 많은 것들을 다 짜야한다.&lt;br /&gt;하지만, &lt;code&gt;express&lt;/code&gt;를 사용하면 간단하게 웹 서버를 구축하도록 도와준다.
&lt;ul style=&quot;list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li&gt;예를 들면, 프론트에서 라우팅을 만들려면 &lt;code&gt;js&lt;/code&gt;를 통해 신나게 만들어야 하지만&lt;br /&gt;&lt;code&gt;vue&lt;/code&gt;를 사용하면 &lt;code&gt;vue-route&lt;/code&gt;를 사용하여 손쉽게 &lt;code&gt;SPA&lt;/code&gt;를 만들도록 도와준다.&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt;&lt;b&gt;express-generator&lt;/b&gt;란?
&lt;ul style=&quot;list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li&gt;&lt;code&gt;vue create [project]&lt;/code&gt; 혹은 &lt;code&gt;create-react-app&lt;/code&gt; 처럼 기본 셋팅을 만들어주는 도구&lt;/li&gt;
&lt;li&gt;잘 만들어진 셋팅 환경을 사용하는 것&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;/ul&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;
&lt;blockquote data-ke-style=&quot;style1&quot;&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;  IDE : VSCode&lt;br /&gt;  F/W : node.js + express&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;npm, yarn 등의 기초 셋팅은 완료된 상태입니다.&lt;/p&gt;
&lt;/blockquote&gt;
&lt;ol style=&quot;list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li&gt;&lt;code&gt;express-generator&lt;/code&gt; 글로벌 설치
&lt;ul style=&quot;list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li&gt;&lt;code&gt;npm install -g express-generator&lt;/code&gt;&lt;/li&gt;
&lt;li&gt;&lt;code&gt;express --version&lt;/code&gt;을 통해 설치 확인&lt;/li&gt;
&lt;/ul&gt;
&lt;div&gt;&amp;nbsp;&lt;/div&gt;
&lt;/li&gt;
&lt;li&gt;&lt;code&gt;express --view=pug [폴더명]&lt;/code&gt; 으로 폴더 생성
&lt;ol style=&quot;list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-origin-width=&quot;889&quot; data-origin-height=&quot;493&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/bvCMOR/btroxBiP01L/bmkJGmNqwokQAx9x8lFVz1/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/bvCMOR/btroxBiP01L/bmkJGmNqwokQAx9x8lFVz1/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/bvCMOR/btroxBiP01L/bmkJGmNqwokQAx9x8lFVz1/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FbvCMOR%2FbtroxBiP01L%2FbmkJGmNqwokQAx9x8lFVz1%2Fimg.png&quot; onerror=&quot;this.onerror=null; this.src='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png'; this.srcset='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png';&quot; loading=&quot;lazy&quot; width=&quot;889&quot; height=&quot;493&quot; data-origin-width=&quot;889&quot; data-origin-height=&quot;493&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-origin-width=&quot;182&quot; data-origin-height=&quot;479&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/8c4RA/btroxpCBME5/Gu5UWGRhl3CBKngPHbz2X1/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/8c4RA/btroxpCBME5/Gu5UWGRhl3CBKngPHbz2X1/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/8c4RA/btroxpCBME5/Gu5UWGRhl3CBKngPHbz2X1/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2F8c4RA%2FbtroxpCBME5%2FGu5UWGRhl3CBKngPHbz2X1%2Fimg.png&quot; onerror=&quot;this.onerror=null; this.src='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png'; this.srcset='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png';&quot; loading=&quot;lazy&quot; width=&quot;182&quot; height=&quot;479&quot; data-origin-width=&quot;182&quot; data-origin-height=&quot;479&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;br /&gt;
&lt;div&gt;&amp;nbsp;&lt;/div&gt;
&lt;/li&gt;
&lt;/ol&gt;
&lt;/li&gt;
&lt;li&gt;&lt;code&gt;cd [폴더명]&lt;/code&gt; -&amp;gt; &lt;code&gt;npm install&lt;/code&gt; 으로 패키지 설치 진행&lt;/li&gt;
&lt;li&gt;아래 두 방법 중 하나로 실행
&lt;ul style=&quot;list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li&gt;&lt;code&gt;DEBUG=botserver:* npm start&lt;/code&gt;&lt;/li&gt;
&lt;li&gt;&lt;code&gt;npm start&lt;/code&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;http://localhost:3000&quot;&gt;http://localhost:3000&lt;/a&gt; 로 접속해보기
&lt;ul style=&quot;list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li&gt;&lt;figure class=&quot;imageblock alignLeft&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-filename=&quot;스크린샷 2021-12-20 오후 10.13.39.png&quot; data-origin-width=&quot;462&quot; data-origin-height=&quot;314&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/rrmfv/btrokqXdGIb/Y2kCPtj7BJLWiH5vSK6X71/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/rrmfv/btrokqXdGIb/Y2kCPtj7BJLWiH5vSK6X71/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/rrmfv/btrokqXdGIb/Y2kCPtj7BJLWiH5vSK6X71/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2Frrmfv%2FbtrokqXdGIb%2FY2kCPtj7BJLWiH5vSK6X71%2Fimg.png&quot; onerror=&quot;this.onerror=null; this.src='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png'; this.srcset='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png';&quot; loading=&quot;lazy&quot; width=&quot;462&quot; height=&quot;314&quot; data-filename=&quot;스크린샷 2021-12-20 오후 10.13.39.png&quot; data-origin-width=&quot;462&quot; data-origin-height=&quot;314&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;/ol&gt;
&lt;h3 data-ke-size=&quot;size23&quot;&gt;텔레그램 봇 생성&lt;/h3&gt;
&lt;ol style=&quot;list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li&gt;telegram 앱에서 &lt;code&gt;BotFather&lt;/code&gt; 찾기&lt;/li&gt;
&lt;li&gt;&lt;code&gt;/newBot&lt;/code&gt; 으로 새로운 봇 생성하기&lt;/li&gt;
&lt;li&gt;bot의 &lt;code&gt;name&lt;/code&gt; 지정하기 &lt;code&gt; &amp;zwj;♂️ 채팅방에서 보이는 이름&lt;/code&gt;&lt;/li&gt;
&lt;li&gt;bot의 &lt;code&gt;username&lt;/code&gt; 지정하기 &lt;code&gt; &amp;zwj;♂️ @username 형태의 아이디&lt;/code&gt;
&lt;ul style=&quot;list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li&gt;사용된 적이 없는, 고유한 &lt;code&gt;username&lt;/code&gt; 을 지정한다.&lt;/li&gt;
&lt;li&gt;username의 끝은 항상 &lt;code&gt;bot&lt;/code&gt;, &lt;code&gt;Bot&lt;/code&gt;으로 끝나야 한다.&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt;생성 완료되었고, &lt;code&gt;token&lt;/code&gt; 이 발급되었다.&lt;br /&gt;*해당 토큰이 곧 API_KEY 이다.&lt;/li&gt;
&lt;/ol&gt;
&lt;h3 data-ke-size=&quot;size23&quot;&gt;chat_id 확인하기 (1:1 대화)&lt;/h3&gt;
&lt;ol style=&quot;list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li&gt;위의 채팅방에서 &lt;code&gt;t.me/nodeJS_w_bot&lt;/code&gt; 부분을 클릭하여 대화를 시작한다.&lt;/li&gt;
&lt;li&gt;그 후 아무 메시지를 작성해서, 대화하려는 &lt;code&gt;chat id&lt;/code&gt;을 알아낸다. (그룹방도 동일)&lt;/li&gt;
&lt;li&gt;&lt;code&gt;https://api.telegram.org/bot{TOKEN}/getUpdates&lt;/code&gt;을 URL에 치기&lt;/li&gt;
&lt;li&gt;대화하는 유저의 채팅 ID가 표기된다.&lt;/li&gt;
&lt;li&gt;해당 &lt;code&gt;chat.id&lt;/code&gt; 를 활용하여 해당 id의 유저와 대화를 할 수 있다.&lt;/li&gt;
&lt;/ol&gt;
&lt;h3 data-ke-size=&quot;size23&quot;&gt;node.js와 텔레그램 봇 연동하기&lt;/h3&gt;
&lt;ol style=&quot;list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li&gt;&lt;code&gt;npm i node-telegram-bot-api --save&lt;/code&gt; 모듈 설치하기&lt;/li&gt;
&lt;li&gt;telegram&lt;code&gt;token&lt;/code&gt;과 &lt;code&gt;chatId&lt;/code&gt; 를 &lt;code&gt;telegram.json&lt;/code&gt;혹은 &lt;code&gt;.env&lt;/code&gt; 환경변수로 저장하기&lt;/li&gt;
&lt;li&gt;&lt;code&gt;.config/telegram.json&lt;/code&gt;으로 생성&lt;/li&gt;
&lt;li&gt;&lt;code&gt;.gitignore&lt;/code&gt;에 위 파일을 추가하여 git 업로드 방지하기&lt;/li&gt;
&lt;li&gt;telegram 봇을 설정할 &lt;code&gt;./bots/telegram/index.js&lt;/code&gt; 파일 생성하기&lt;/li&gt;
&lt;li&gt;
&lt;pre class=&quot;typescript&quot;&gt;&lt;code&gt;// API KEY 값 import
const { token, chatId } = require('../../config/telegram.json');
// telegram Bot 선언
const TelegramBot = require('node-telegram-bot-api');

// 텔레그램 봇을 생성하고, polling 방식으로 메세지를 가져옴
const bot = new TelegramBot(token, { polling: true });

function start() {
   // '/echo' 라는 명령어가 오면, 로직 수행 후 =&amp;gt; 따라 말한다.
   bot.onText(/\/echo (.+)/, (msg, match) =&amp;gt; {
      // 'msg' : 텔레그램으로 부터 수신한 메세지
      // 'match' : 정규식을 실행한 결과

      const chatId = msg.chat.id;
      const resp = '따라하기 : ' + match[1];

      bot.sendMessage(chatId, resp);
   });

   // .on('message')을 통해 bot이 어떤 메세지든 수신하도록 해줌
   bot.on('message', (msg) =&amp;gt; {
      const chatId = msg.chat.id;
      console.log(chatId);
      // send a message to the chat acknowledging receipt of their message
      bot.sendMessage(chatId, '메세지 수신 완료!');
   });
}

module.exports = {
   start: start,
};
&lt;/code&gt;&lt;/pre&gt;
&lt;ul style=&quot;list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li&gt;&lt;code&gt;const { token, chatId } = require('../../config/telegram.json');&lt;/code&gt; 으로 따로 저장한 변수 설정 파일 불러오기&lt;/li&gt;
&lt;li&gt;&lt;code&gt;const TelegramBot = require('node-telegram-bot-api');&lt;/code&gt; 모듈 import&lt;/li&gt;
&lt;li&gt;&lt;code&gt;function start() {...}&lt;/code&gt;의 형태로 메소드를 모듈화 하여 선언&lt;/li&gt;
&lt;li&gt;레퍼런스 참고&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt;&lt;code&gt;./bin/www&lt;/code&gt; 파일에서 &lt;code&gt;index.js&lt;/code&gt;에 선언한 텔레그램 봇 &lt;code&gt;start&lt;/code&gt; 모듈 실행하기
&lt;pre class=&quot;lasso&quot;&gt;&lt;code&gt;/**
 * Module dependencies.
 */

var app = require('../app');
var debug = require('debug')('botserver:server');
var http = require('http');
var telegramBot = require('../bots/telegram');

/**
 * telegramBot start
 */
telegramBot.start();

...&lt;/code&gt;&lt;/pre&gt;
&lt;/li&gt;
&lt;li&gt;서버가 실행될 때, 자동으로 봇이 실행되도록 설정하는 부분&lt;/li&gt;
&lt;/ol&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-filename=&quot;IMG_5978.PNG&quot; data-origin-width=&quot;1170&quot; data-origin-height=&quot;2532&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/dzITEW/btronKAUKbo/zhpkVhYeK0mKfmgAvDRNCK/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/dzITEW/btronKAUKbo/zhpkVhYeK0mKfmgAvDRNCK/img.png&quot; data-alt=&quot;완성된 결과물&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/dzITEW/btronKAUKbo/zhpkVhYeK0mKfmgAvDRNCK/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FdzITEW%2FbtronKAUKbo%2FzhpkVhYeK0mKfmgAvDRNCK%2Fimg.png&quot; onerror=&quot;this.onerror=null; this.src='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png'; this.srcset='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png';&quot; loading=&quot;lazy&quot; width=&quot;300&quot; height=&quot;649&quot; data-filename=&quot;IMG_5978.PNG&quot; data-origin-width=&quot;1170&quot; data-origin-height=&quot;2532&quot;/&gt;&lt;/span&gt;&lt;figcaption&gt;완성된 결과물&lt;/figcaption&gt;
&lt;/figure&gt;
&lt;/p&gt;
&lt;h2 data-ke-size=&quot;size26&quot;&gt;여러가지 생각들&lt;/h2&gt;
&lt;ul style=&quot;list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li&gt;텔레그램 봇의 메소드는 크게 세가지 (물론 더 있겠지..)
&lt;ul style=&quot;list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li&gt;&lt;code&gt;bot.on('msg', [함수])&lt;/code&gt; : 어떤 형태든 메세지를 듣는, 수신하는 함수&lt;/li&gt;
&lt;li&gt;&lt;code&gt;bot.onText('match', [함수(param)])&lt;/code&gt; : &lt;code&gt;'match'&lt;/code&gt; 의 메세지를 수신하여 비교 및 실행하는 함수&lt;/li&gt;
&lt;li&gt;&lt;code&gt;bot.sendMessage(chatId, 'msg')&lt;/code&gt; chatId의 유저에게 msg를 발송하는 함수&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt;&lt;code&gt;./bin/www&lt;/code&gt; 의 역할은 무엇인가?
&lt;ul style=&quot;list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li&gt;&lt;code&gt;app.js&lt;/code&gt;와 &lt;code&gt;./bin/www&lt;/code&gt; 중에서 최초로 실행되는, 즉 자바로 치면 &lt;code&gt;main method&lt;/code&gt;는 무엇인가?&lt;/li&gt;
&lt;li&gt;&lt;code&gt;app.js&lt;/code&gt; 라면, 왜 &lt;code&gt;start()&lt;/code&gt; 함수를 &lt;code&gt;www&lt;/code&gt;에서 선언했는가?&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt;&lt;code&gt;start()&lt;/code&gt; / &lt;code&gt;module.exports = {...}&lt;/code&gt; 처럼 모듈화를 하면, 재사용성 및 직관성이 좋아진다.&lt;/li&gt;
&lt;li&gt;&lt;code&gt;setInterval()&lt;/code&gt;함수를 이용하여 서버 시작 시 30초마다 메세지가 발송되는 함수를 작성했는데, 정상 동작한다!&lt;br /&gt;최초에 기획한 자동화 챗봇을 구현할 수 있겠다.&lt;/li&gt;
&lt;li&gt;firebase의 cloud funtion 없이도 시간별로 특정 기능을 수행하는 기능을 구현할 수 있겠다!&lt;br /&gt;(비용 절감)&lt;/li&gt;
&lt;/ul&gt;
&lt;h2 data-ke-size=&quot;size26&quot;&gt;남은 일들&lt;/h2&gt;
&lt;ul style=&quot;list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li&gt;&lt;input disabled=&quot;disabled&quot; type=&quot;checkbox&quot; /&gt; 그룹 채팅으로 테스트하기&lt;/li&gt;
&lt;li&gt;&lt;input disabled=&quot;disabled&quot; type=&quot;checkbox&quot; /&gt; 챗봇 firebase에 업로드하여 상시 구동 여부 체크하기&lt;/li&gt;
&lt;li&gt;&lt;input disabled=&quot;disabled&quot; type=&quot;checkbox&quot; /&gt; 하나의 firebase 프로젝트 안에 다른 앱으로 프론트/백엔드를 구성할 수 있는지?&lt;/li&gt;
&lt;li&gt;&lt;input disabled=&quot;disabled&quot; type=&quot;checkbox&quot; /&gt; firebase의 fire store 연동 테스트하기&lt;/li&gt;
&lt;li&gt;&lt;input disabled=&quot;disabled&quot; type=&quot;checkbox&quot; /&gt; 데이터 구조화 등등 수행하기!&lt;/li&gt;
&lt;/ul&gt;
&lt;h2 data-ke-size=&quot;size26&quot;&gt;References&lt;/h2&gt;
&lt;figure id=&quot;og_1640018766626&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;[node.js] telegram 연동하여 bot(1:1) 만들기&quot; data-og-description=&quot;안녕하세요. 멍개입니다~~ 오늘은 node.js에서 telegram을 연동하여 봇을 만들기 위해 telegram을 연동하는...&quot; data-og-host=&quot;blog.naver.com&quot; data-og-source-url=&quot;https://m.blog.naver.com/PostView.naver?isHttpsRedirect=true&amp;amp;blogId=pjt3591oo&amp;amp;logNo=221261787575&quot; data-og-url=&quot;https://blog.naver.com/pjt3591oo/221261787575&quot; data-og-image=&quot;https://scrap.kakaocdn.net/dn/m9jEY/hyMKEwbkAP/Nc5YweiSr791RELvjHFWR1/img.png?width=743&amp;amp;height=498&amp;amp;face=0_0_743_498,https://scrap.kakaocdn.net/dn/kstyu/hyMMWva6mU/LpMbh80E8IrWaC7h0dFVo0/img.png?width=80&amp;amp;height=54&amp;amp;face=0_0_80_54,https://scrap.kakaocdn.net/dn/ifB9k/hyMMW20LPQ/eurkwKAlpAd3qYSMIxnM1K/img.png?width=80&amp;amp;height=121&amp;amp;face=0_0_80_121&quot;&gt;&lt;a href=&quot;https://m.blog.naver.com/PostView.naver?isHttpsRedirect=true&amp;amp;blogId=pjt3591oo&amp;amp;logNo=221261787575&quot; target=&quot;_blank&quot; rel=&quot;noopener&quot; data-source-url=&quot;https://m.blog.naver.com/PostView.naver?isHttpsRedirect=true&amp;amp;blogId=pjt3591oo&amp;amp;logNo=221261787575&quot;&gt;
&lt;div class=&quot;og-image&quot; style=&quot;background-image: url('https://scrap.kakaocdn.net/dn/m9jEY/hyMKEwbkAP/Nc5YweiSr791RELvjHFWR1/img.png?width=743&amp;amp;height=498&amp;amp;face=0_0_743_498,https://scrap.kakaocdn.net/dn/kstyu/hyMMWva6mU/LpMbh80E8IrWaC7h0dFVo0/img.png?width=80&amp;amp;height=54&amp;amp;face=0_0_80_54,https://scrap.kakaocdn.net/dn/ifB9k/hyMMW20LPQ/eurkwKAlpAd3qYSMIxnM1K/img.png?width=80&amp;amp;height=121&amp;amp;face=0_0_80_121');&quot;&gt;&amp;nbsp;&lt;/div&gt;
&lt;div class=&quot;og-text&quot;&gt;
&lt;p class=&quot;og-title&quot; data-ke-size=&quot;size16&quot;&gt;[node.js] telegram 연동하여 bot(1:1) 만들기&lt;/p&gt;
&lt;p class=&quot;og-desc&quot; data-ke-size=&quot;size16&quot;&gt;안녕하세요. 멍개입니다~~ 오늘은 node.js에서 telegram을 연동하여 봇을 만들기 위해 telegram을 연동하는...&lt;/p&gt;
&lt;p class=&quot;og-host&quot; data-ke-size=&quot;size16&quot;&gt;blog.naver.com&lt;/p&gt;
&lt;/div&gt;
&lt;/a&gt;&lt;/figure&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;</description>
      <category>toy project</category>
      <category>Express</category>
      <category>node.js</category>
      <category>telegram</category>
      <author>3sammy</author>
      <guid isPermaLink="true">https://23log.tistory.com/104</guid>
      <comments>https://23log.tistory.com/104#entry104comment</comments>
      <pubDate>Tue, 21 Dec 2021 01:26:46 +0900</pubDate>
    </item>
    <item>
      <title>넷플 지옥 고지/시연 개발자 짤, &amp;quot;내일 너는 회사에 간다&amp;quot;</title>
      <link>https://23log.tistory.com/103</link>
      <description>&lt;p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-filename=&quot;b5878ce63c33b263681d8e81eab1f618.png&quot; data-origin-width=&quot;784&quot; data-origin-height=&quot;523&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/bLXx9h/btrolTi3F5d/4aD0n6cEQerPIj8jNK0VjK/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/bLXx9h/btrolTi3F5d/4aD0n6cEQerPIj8jNK0VjK/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/bLXx9h/btrolTi3F5d/4aD0n6cEQerPIj8jNK0VjK/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FbLXx9h%2FbtrolTi3F5d%2F4aD0n6cEQerPIj8jNK0VjK%2Fimg.png&quot; onerror=&quot;this.onerror=null; this.src='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png'; this.srcset='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png';&quot; loading=&quot;lazy&quot; width=&quot;784&quot; height=&quot;523&quot; data-filename=&quot;b5878ce63c33b263681d8e81eab1f618.png&quot; data-origin-width=&quot;784&quot; data-origin-height=&quot;523&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-filename=&quot;Untitled-1.png&quot; data-origin-width=&quot;600&quot; data-origin-height=&quot;400&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/bAfxch/btrodl2FGWl/evsuc062ZArqW125ynHKkk/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/bAfxch/btrodl2FGWl/evsuc062ZArqW125ynHKkk/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/bAfxch/btrodl2FGWl/evsuc062ZArqW125ynHKkk/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FbAfxch%2Fbtrodl2FGWl%2Fevsuc062ZArqW125ynHKkk%2Fimg.png&quot; onerror=&quot;this.onerror=null; this.src='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png'; this.srcset='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png';&quot; loading=&quot;lazy&quot; width=&quot;784&quot; height=&quot;523&quot; data-filename=&quot;Untitled-1.png&quot; data-origin-width=&quot;600&quot; data-origin-height=&quot;400&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;/p&gt;
&lt;hr contenteditable=&quot;false&quot; data-ke-type=&quot;horizontalRule&quot; data-ke-style=&quot;style3&quot; /&gt;
&lt;p data-ke-size=&quot;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;span style=&quot;color: #ffffff;&quot;&gt;이거 문의는 누구한테 하면 되나요...&lt;/span&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;color: #ffffff;&quot;&gt;운영 반영 안됐는데요&lt;/span&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;color: #ffffff;&quot;&gt;지라 이슈 체크하세요&lt;/span&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;</description>
      <category>블로그/우뇌 공간</category>
      <author>3sammy</author>
      <guid isPermaLink="true">https://23log.tistory.com/103</guid>
      <comments>https://23log.tistory.com/103#entry103comment</comments>
      <pubDate>Mon, 20 Dec 2021 01:20:56 +0900</pubDate>
    </item>
    <item>
      <title>[Vue.js] 스크롤 내리면 나오는 '맨 위로' 버튼 만들기</title>
      <link>https://23log.tistory.com/102</link>
      <description>&lt;h2 data-ke-size=&quot;size26&quot;&gt;인트로&lt;/h2&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;렌탈스튜디오 예약시 간단하게 &lt;code&gt;웰컴가이드&lt;/code&gt; 를 제공하고 있다. 기존에는 &lt;code&gt;MVP(minimum value production)&lt;/code&gt; 를 위해 구글 독스를 이용해 PPT 형식으로 만들었다. 하지만&lt;/p&gt;
&lt;ul style=&quot;list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li&gt;가독성이 너무 좋지 않았고&lt;/li&gt;
&lt;li&gt;브라우저별 조작(제대로 드래그가 안되는 등)이 원활하지 못했다.&lt;/li&gt;
&lt;/ul&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;홈페이지 개발의 갈증을 해소하고 싶은 만큼, 내가 직접 웰컴 가이드를 수정하고 싶다고 생각했다. 기존처럼 좌우로 스와이프 하는 형태의 웰컴가이드를 제작할까도 고민했지만, 많은 글을 전달해야 하는 &lt;code&gt;정보 전달&lt;/code&gt; 특성 상 우리에게 익숙한 세로 스크롤 형태를 채택하게 되었다.&lt;/p&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-filename=&quot;IMG_5957.PNG&quot; data-origin-width=&quot;1170&quot; data-origin-height=&quot;2532&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/s0tiX/btrohTYioIz/6jwfl4nSOv8O1Kya694930/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/s0tiX/btrohTYioIz/6jwfl4nSOv8O1Kya694930/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/s0tiX/btrohTYioIz/6jwfl4nSOv8O1Kya694930/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2Fs0tiX%2FbtrohTYioIz%2F6jwfl4nSOv8O1Kya694930%2Fimg.png&quot; onerror=&quot;this.onerror=null; this.src='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png'; this.srcset='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png';&quot; loading=&quot;lazy&quot; width=&quot;300&quot; height=&quot;649&quot; data-filename=&quot;IMG_5957.PNG&quot; data-origin-width=&quot;1170&quot; data-origin-height=&quot;2532&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;세로로 길게 되어있는 줄글의 형식 상 원하는 글로 바로 가는 것이 어려웠고, A부터 Z까지 다 훑어봐야 한다는 불편함이 있었다. 이를 해소하기 위해선&lt;/p&gt;
&lt;ol style=&quot;list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li&gt;바로가기를 &lt;code&gt;header&lt;/code&gt;에 넣어두고, 헤더를 fixed로 상단 고정 하자&lt;/li&gt;
&lt;li&gt;&lt;code&gt;TOC(Table of Content)&lt;/code&gt;를 제공하여 전체 목차를 제공하자&lt;/li&gt;
&lt;/ol&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;두가지 방안을 생각하게 되었고, 빠른 개발을 위해 2번을 채택하게 되었다.&lt;/p&gt;
&lt;blockquote data-ke-style=&quot;style1&quot;&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;1번의 경우 기존에 구성한 CSS를 다시 편성해야 했다. 현재 MVP식의 개발을 위해 385px로 width를 고정한 상태여서 다시 div를 구성하고&lt;/p&gt;
&lt;del&gt;..어쩌구 저쩌구.. 주절주절 ..&lt;/del&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;br /&gt;암튼 그래서 현재 구성에 기능을 더하고자 2번을 채택했다.&lt;/p&gt;
&lt;/blockquote&gt;
&lt;h3 data-ke-size=&quot;size23&quot;&gt;하지만2&lt;/h3&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;2번 방식을 선택하게 되면, 맨 위로 올라가는 버튼을 위치시켜야 한다.&lt;br /&gt;그리고 요즈음의 사용자 경험에 맞도록 하기 위해, 이 버튼은 스크롤을 내렸을 때만 등장하도록 개발해야 했다.&lt;/p&gt;
&lt;blockquote data-ke-style=&quot;style1&quot;&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;Why UX?&lt;/p&gt;
&lt;ul style=&quot;list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li&gt;이미 많은 글이 존재하고 있기 때문에 시선의 분산이 발생&lt;/li&gt;
&lt;li&gt;385px의 제한된 크기에서 &lt;code&gt;맨 위로&lt;/code&gt; 버튼의 심미성을 증가시키기엔 많은 노력이 필요&lt;br /&gt;&lt;i&gt;나는 최소한의 노력으로 개발해야 하는 1인 개발자다..&lt;/i&gt;&lt;/li&gt;
&lt;li&gt;위 두 가지 이유로 인해, 유저는 &lt;code&gt;맨 위로&lt;/code&gt; 버튼의 존재조차 모를 것&lt;/li&gt;
&lt;/ul&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;b&gt;하지만 스크롤을 내렸을 때 등장한다면,&lt;/b&gt;&lt;/p&gt;
&lt;ul style=&quot;list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li&gt;새로운 버튼의 등장(with Animation)으로 인해, 버튼에 대한 시각적 인지&lt;/li&gt;
&lt;li&gt;디자인적 요소에 대한 고민을 덜 수 있음(이미 시각적 인지가 가능하므로)&lt;/li&gt;
&lt;/ul&gt;
&lt;/blockquote&gt;
&lt;h2 data-ke-size=&quot;size26&quot;&gt;적용기&lt;/h2&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;Vue에서 적용하는 방법은&lt;/p&gt;
&lt;ol style=&quot;list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li&gt;&lt;code&gt;document.addEventListener('scroll', method);&lt;/code&gt; 를 통해, 스크롤 이벤트를 걸기!
&lt;ul style=&quot;list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li&gt;  최신 프레임워크에서 구식 기능을 쓰는 식..&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt;&lt;code&gt;v-container&lt;/code&gt; 와 &lt;code&gt;v-scroll&lt;/code&gt; 을 활용하여, &lt;code&gt;v-container&lt;/code&gt;에 스크롤 액션을 리스닝하기!
&lt;ul style=&quot;list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li&gt;  Vue 프레임워크에 맞는 방식!&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;/ol&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;이 중에 나는 1번을 선택했다.. 새로운 기능을 써보기도 싶었지만, 바닐라 JS에 좀 더 익숙해지고 싶었고, 이전에 사용해봤던 방식이라 빠르게 적용이 가능했다 (잊지말자! MVP!)&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;특히, &lt;/p&gt;
&lt;p&gt;&lt;del&gt;내년엔 꼭! &lt;/del&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;리액트를 연습해볼 생각이기 때문에, Vue의 편한 기능에 물들어지면 안되었다..&lt;br /&gt;(라며 뗀석기 사용하기..)&lt;/p&gt;
&lt;h3 data-ke-size=&quot;size23&quot;&gt;Vue3에서 스크롤 이벤트 걸기&lt;/h3&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;기본적인 스텝은 다음과 같다.&lt;/p&gt;
&lt;ol style=&quot;list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li&gt;&lt;b&gt;가상 DOM이 마운트 될 때, 이벤트 리스너 등록하기 + 이벤트 연결&lt;/b&gt;
&lt;ul style=&quot;list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li&gt;
&lt;pre class=&quot;kotlin&quot;&gt;&lt;code&gt;mounted() {
  this.target = document.querySelector('#target');
  this.target.addEventListener('scroll', this.handleScroll);
},&lt;/code&gt;&lt;/pre&gt;
&lt;/li&gt;
&lt;li&gt;DOM 생성 후에 이벤트를 달아야 하기 때문에, &lt;code&gt;created()&lt;/code&gt; 가 아닌 &lt;code&gt;mounted()&lt;/code&gt; 를 해야한다.&lt;br /&gt;&lt;i&gt;*lifeCycle에서 훑으며 읽은 내용이라 제대로 공부한 뒤에 수정하겠습니다&lt;/i&gt;&lt;/li&gt;
&lt;li&gt;필자의 경우 전체 홈페이지가 아닌, 일부 div에서만 발생하므로 해당 DOM에 이벤트를 등록했다.&lt;br /&gt;또한 이벤트 리스너 삭제를 하기 위해, 해당 객체를 &lt;code&gt;data&lt;/code&gt;로 따로 저장하였다.&lt;/li&gt;
&lt;li&gt;전체 홈페이지에 거는 경우엔, &lt;code&gt;document.addEventListener('scroll', ... );&lt;/code&gt; 하면 된다.&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt;&lt;b&gt;1번에서 연결된 이벤트에 원하는 액션 달기&lt;/b&gt;
&lt;ul style=&quot;list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li&gt;
&lt;pre class=&quot;kotlin&quot;&gt;&lt;code&gt;handleScroll: function (e) {
  this.scrollTop = e.target.scrollTop;
  if (this.scrollTop &amp;gt; 400) {
    this.isScrollDown = true;
  } else {
    this.isScrollDown = false;
  }
}&lt;/code&gt;&lt;/pre&gt;
&lt;/li&gt;
&lt;li&gt;이벤트 발생하는 곳의 &lt;code&gt;scrollTop&lt;/code&gt; 값을 가져오고, 해당 값이 특정 값을 넘어가면 버튼이 표시되도록 하기 위해 위처럼 작성했다.&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt;&lt;b&gt;페이지 이동(마운트 해제 전) 되기 전에, 이벤트 리스너 삭제하기&lt;/b&gt;
&lt;ul style=&quot;list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li&gt;
&lt;pre class=&quot;kotlin&quot;&gt;&lt;code&gt;beforeUnmount() {
  this.target.removeEventListener('scroll', this.handleScroll);
},&lt;/code&gt;&lt;/pre&gt;
&lt;/li&gt;
&lt;li&gt;스크롤을 달았던 객체를 다시 불러와서 삭제 전에 이벤트 리스너를 삭제한다.&lt;/li&gt;
&lt;li&gt;vue2에서는 &lt;code&gt;beforeDestroy()&lt;/code&gt;를 사용했었는데, vue3에서는 라이프사이클에서 사라지게 되었다.&lt;br /&gt;따라서 &lt;code&gt;beforeUnmount()&lt;/code&gt; 를 사용했다.&lt;/li&gt;
&lt;li&gt;이벤트를 삭제하지 않으면, 해당 이벤트가 계속 등록되어 있어 사이드 이펙트가 발생 할 수 있다.&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;/ol&gt;
&lt;h3 data-ke-size=&quot;size23&quot;&gt;적용 된 전체 코드&lt;/h3&gt;
&lt;pre class=&quot;kotlin&quot;&gt;&lt;code&gt;&amp;lt;script&amp;gt;
export default {
   data() {
      return {
         isScrollDown: false,    // v-show를 통해 맨위로 버튼을 등장시키는 변수
         scrollTop: 0,                     // 스크롤 값 저장용
         target: null,           // 이벤트가 등록되는 변수
      };
   },

   // 1번 가상 돔 마운트 시, 이벤트 등록
   mounted() {
      this.target = document.querySelector('#target');
      this.target.addEventListener('scroll', this.handleScroll);
   },

   // 3번 마운트 해제 전, 이벤트 삭제하기
   beforeUnmount() {
      this.target.removeEventListener('scroll', this.handleScroll);
   },
   methods: {
     // 2번 이벤트 액션
      handleScroll: function (e) {
        this.scrollTop = e.target.scrollTop;
        if (this.scrollTop &amp;gt; 400) {
          this.isScrollDown = true;
        } else {
          this.isScrollDown = false;
        }
      }
   },
};
&amp;lt;/script&amp;gt;&lt;/code&gt;&lt;/pre&gt;
&lt;h2 data-ke-size=&quot;size26&quot;&gt;  이슈 사항&lt;/h2&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-filename=&quot;스크린샷 2021-12-19 오후 10.06.54.png&quot; data-origin-width=&quot;858&quot; data-origin-height=&quot;246&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/6rQoC/btronJ8cr0C/fgsXz2POvlg9uJdqAWpKNK/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/6rQoC/btronJ8cr0C/fgsXz2POvlg9uJdqAWpKNK/img.png&quot; data-alt=&quot;중복호출.. 몬지..알지?..&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/6rQoC/btronJ8cr0C/fgsXz2POvlg9uJdqAWpKNK/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2F6rQoC%2FbtronJ8cr0C%2FfgsXz2POvlg9uJdqAWpKNK%2Fimg.png&quot; onerror=&quot;this.onerror=null; this.src='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png'; this.srcset='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png';&quot; loading=&quot;lazy&quot; width=&quot;858&quot; height=&quot;246&quot; data-filename=&quot;스크린샷 2021-12-19 오후 10.06.54.png&quot; data-origin-width=&quot;858&quot; data-origin-height=&quot;246&quot;/&gt;&lt;/span&gt;&lt;figcaption&gt;중복호출.. 몬지..알지?..&lt;/figcaption&gt;
&lt;/figure&gt;
&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;하지만 이렇게 작성하게 되면, 스크롤이 발생할 때마다 메소드가 반복 호출되게 된다.&lt;br /&gt;지금은 스크롤이 많지 않아 큰 문제는 되지 않지만, 이런 사소한 문제도 핸들링해보는 경험이 필요하다..&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;반복 호출을 줄이기 위해선, 이벤트를 제어하는&lt;/p&gt;
&lt;ul style=&quot;list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li&gt;디바운싱(Debouncing)&lt;/li&gt;
&lt;li&gt;쓰로틀링(Throttling)&lt;/li&gt;
&lt;/ul&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;을 사용해야 한다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;이중에 &lt;code&gt;쓰로틀링(Throttling)&lt;/code&gt; 은 &lt;code&gt;함수 호출 이후 특정 시간 안에 중복 호출 시 무시되도록 하는&lt;/code&gt; 기능인데, 쓰로틀링이 스크롤 액션간 많이 활용된다. 필자 또한 이를 활용하여 문제를 해결하고자 한다!&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;그 해결기는 다음 포스트에 작성하겠다!&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-filename=&quot;IMG_5958.PNG&quot; data-origin-width=&quot;1170&quot; data-origin-height=&quot;2532&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/nMo21/btrodTEJ6mH/aCB9RgRsTSblbl3zuiJB11/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/nMo21/btrodTEJ6mH/aCB9RgRsTSblbl3zuiJB11/img.png&quot; data-alt=&quot;완-성!&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/nMo21/btrodTEJ6mH/aCB9RgRsTSblbl3zuiJB11/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FnMo21%2FbtrodTEJ6mH%2FaCB9RgRsTSblbl3zuiJB11%2Fimg.png&quot; onerror=&quot;this.onerror=null; this.src='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png'; this.srcset='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png';&quot; loading=&quot;lazy&quot; width=&quot;300&quot; height=&quot;649&quot; data-filename=&quot;IMG_5958.PNG&quot; data-origin-width=&quot;1170&quot; data-origin-height=&quot;2532&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>front/vue.js</category>
      <category>vanilla js</category>
      <category>Vue.js</category>
      <category>Vue3</category>
      <author>3sammy</author>
      <guid isPermaLink="true">https://23log.tistory.com/102</guid>
      <comments>https://23log.tistory.com/102#entry102comment</comments>
      <pubDate>Sun, 19 Dec 2021 22:38:40 +0900</pubDate>
    </item>
    <item>
      <title>[Vue.js] 환경 변수(.env) 설정하여 API KEY 숨기기</title>
      <link>https://23log.tistory.com/100</link>
      <description>&lt;h2&gt;인트로&lt;/h2&gt;
&lt;p&gt;여러 공간에서 사용되는 API KEY가 존재하는데, 이를 한번에 변수처럼 관리하고 &lt;code&gt;git&lt;/code&gt;에 업로드를 방지해야 한다.&lt;/p&gt;
&lt;p&gt;npm 라이브러리인, &lt;code&gt;dotenv&lt;/code&gt;를 이용했다.&lt;/p&gt;
&lt;h2&gt;설정&lt;/h2&gt;
&lt;ol&gt;
&lt;li&gt;&lt;p&gt;&lt;strong&gt;&lt;code&gt;npm install dotenv&lt;/code&gt; 를 하여 vue3에 해당 라이브러리를 추가한다.&lt;/strong&gt;&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;&lt;p&gt;&lt;strong&gt;최상위 폴더에 &lt;code&gt;.env&lt;/code&gt; 파일을 추가한다.&lt;/strong&gt;&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;파일 안에 필요한 API KEY를 작성한다.   단, 앞에 &lt;code&gt;VUE_APP_&lt;/code&gt;을 추가해야지 전역에서 정상적으로 인식한다. 추가로 전역 변수/상수의 경우 대문자로 작성하는 것이 일반적 규칙이다.&lt;/li&gt;
&lt;li&gt;&lt;pre&gt;&lt;code&gt;작성예)
VUE_APP_API_KEY=abc!@#$&lt;/code&gt;&lt;/pre&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt;&lt;p&gt;&lt;strong&gt;git에 업로드를 방지하기 위해, &lt;code&gt;.gitignore&lt;/code&gt;에 위 파일을 추가한다.&lt;/strong&gt;&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;&lt;pre&gt;&lt;code&gt;# local env files
.env
.env.local
.env.*.local=&lt;/code&gt;&lt;/pre&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt;&lt;p&gt;&lt;strong&gt;&lt;code&gt;main.ts&lt;/code&gt;에 해당 파일을 import 및 적용한다.&lt;/strong&gt;&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;&lt;pre&gt;&lt;code&gt;import dotenv from &amp;#39;dotenv&amp;#39;;

dotenv.config();&lt;/code&gt;&lt;/pre&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt;&lt;p&gt;&lt;strong&gt;테스트&lt;/strong&gt;&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;&lt;pre&gt;&lt;code&gt;created() : {
    console.log(process.env);
}&lt;/code&gt;&lt;/pre&gt;&lt;p&gt;테스트 결과 로그에 정상적으로 출력을 확인했다.&lt;figure class=&quot;imageblock alignLeft&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-filename=&quot;스크린샷 2021-12-09 오후 8.01.44.png&quot; data-origin-width=&quot;480&quot; data-origin-height=&quot;96&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/6zE02/btrnuWV22xi/K8lxlSe0ThkHPzPjJ8NkS0/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/6zE02/btrnuWV22xi/K8lxlSe0ThkHPzPjJ8NkS0/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/6zE02/btrnuWV22xi/K8lxlSe0ThkHPzPjJ8NkS0/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2F6zE02%2FbtrnuWV22xi%2FK8lxlSe0ThkHPzPjJ8NkS0%2Fimg.png&quot; onerror=&quot;this.onerror=null; this.src='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png'; this.srcset='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png';&quot; loading=&quot;lazy&quot; width=&quot;480&quot; height=&quot;96&quot; data-filename=&quot;스크린샷 2021-12-09 오후 8.01.44.png&quot; data-origin-width=&quot;480&quot; data-origin-height=&quot;96&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;/p&gt;
&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt;&lt;p&gt;&lt;strong&gt;실 사용한다.&lt;/strong&gt;&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;&lt;pre&gt;&lt;code&gt;...
ApiKey: process.env.VUE_APP_API_KEY,
...&lt;/code&gt;&lt;/pre&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;배포 후에도 정상 적용 되었다.&lt;/p&gt;
&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;/ol&gt;
&lt;h2&gt;한계 및 앞으로&lt;/h2&gt;
&lt;p&gt;API KEY를 숨기기 위해 환경변수를 적용했는데, 실제 운영 배포한 파일의 소스를 뜯어보면 다시 그래도 API KEY가 들어가있는 것을 확인할 수 있다. Vue를 사용해서 스크립트로 변환되었기에 망정이지 ... 그냥 &lt;code&gt;.js&lt;/code&gt;로 작성했으면 더욱 쉽게 &lt;del&gt;발각&lt;/del&gt;되었을 것이다..&lt;/p&gt;
&lt;p&gt;일단 위 NPM은 git에 업로드 되는 것을 방지하기 위한 녀석이라고 생각하고, 운영 배포된 서버에서는 어떻게 숨겨야 하는지 다시 찾아보고 적용해봐야겠다.&lt;/p&gt;
&lt;hr&gt;</description>
      <category>front/vue.js</category>
      <category>Vue.js</category>
      <category>Vue3</category>
      <author>3sammy</author>
      <guid isPermaLink="true">https://23log.tistory.com/100</guid>
      <comments>https://23log.tistory.com/100#entry100comment</comments>
      <pubDate>Thu, 9 Dec 2021 20:30:09 +0900</pubDate>
    </item>
    <item>
      <title>[Vue.js] Vue3 + TS 환경에 구글 애널리틱스(GA)를 적용하기</title>
      <link>https://23log.tistory.com/99</link>
      <description>&lt;blockquote data-ke-style=&quot;style3&quot;&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;개발 환경&lt;br /&gt;- Vue3 (v4.5.13)&lt;br /&gt;- typescript (v4.1.5)&lt;br /&gt;- vue-gtag-next (v1.14.0)&lt;/p&gt;
&lt;/blockquote&gt;
&lt;h2 data-ke-size=&quot;size26&quot;&gt;인트로&lt;/h2&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;이번에 &lt;b&gt;스튜디오 홈페이지&lt;/b&gt;를 개발하여 오픈했다. 프론트는 Vue3를 사용하였고, 백엔드는 따로 구성하지 않고 파이어베이스를 통해 진행하였고 호스팅까지 진행했다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;배포한 이후 몇명의 사용자가 오는지 측정하고자 하였는데, 그럴려면 DB에 사이트 조회수를 카운팅해야 했다. 물론 이것도 필요하긴 하지만, 그 추이를 파악하기 위해선 어드민 페이지도 필요했다. 당장의 MVP를 만들기엔 불필요한 부분이었다.&lt;/p&gt;
&lt;p&gt;&lt;del&gt;그리고&lt;/del&gt;&lt;del&gt;아직 리얼타임 DB 적용해본적이 없다ㅎ&lt;/del&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;그래서 &lt;b&gt;GA&lt;/b&gt;를 달기로 결정했다. 기본적으로 방문자 수 카운팅과 추이를 확인할 수 있었고, 많은 마케터들의 성과 측정 도구인 만큼 한번 사용해보고 싶었다.&lt;/p&gt;
&lt;p&gt;&lt;del&gt;그리고 달면 왠지 멋있어 보이잖아&lt;/del&gt;&lt;/p&gt;
&lt;h2 data-ke-size=&quot;size26&quot;&gt;Vue에 GA를 적용하는 방법 세 가지&lt;/h2&gt;
&lt;h3 data-ke-size=&quot;size23&quot;&gt;NPM : vue-analytics (불가  &amp;zwj;♂️)&lt;/h3&gt;
&lt;ul style=&quot;list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li&gt;&lt;code&gt;vue-analytics&lt;/code&gt;을 설치하는 건데 이는 현재 &lt;b&gt;불가능&lt;/b&gt;하다.
&lt;ul style=&quot;list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li&gt;&lt;code&gt;npm install vue-analytics&lt;/code&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt;구글측에서 Google Analytics를 단순 분석/트래킹용 (analytics.js) 에서 글로벌 사이트 태깅 (gtag.js) 으로 확장을 진행하고 있다.
&lt;ul style=&quot;list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li&gt;그 흐름에 맞춰 이 라이브러리도 deprecated(더이상 지원하지 않는) 되었다.&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;/ul&gt;
&lt;h3 data-ke-size=&quot;size23&quot;&gt;NPM : vue-gtag&lt;/h3&gt;
&lt;ul style=&quot;list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li&gt;위에서 언급한 &lt;code&gt;글로벌 사이트 태깅&lt;/code&gt;을 지원하기 위해 확장한 라이브러리
&lt;ul style=&quot;list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li&gt;&lt;code&gt;글로벌 사이트 태그 (gtag.js)&lt;/code&gt;는 자바스크립트 태깅 프레임워크이자 API 이다.&lt;br /&gt;구글 아날리틱스, 구글애즈, 구글 마케팅 플랫폼에 이벤트 데이터를 전송할 수 있도록 도와준다.&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt;&lt;b&gt;적용 방법&lt;/b&gt;
&lt;ol style=&quot;list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li&gt;&lt;code&gt;npm install vue-gtag&lt;/code&gt;&lt;br /&gt;&lt;a href=&quot;https://www.npmjs.com/package/vue-gtag&quot;&gt;NPM LINK&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;code&gt;main.js&lt;/code&gt; 에서 라이브러리를 적용 및 렌더시킨다.&lt;/li&gt;
&lt;li&gt;
&lt;pre class=&quot;javascript&quot;&gt;&lt;code&gt;import Vue from &quot;vue&quot;;
import App from &quot;./App.vue&quot;;
import VueGtag from &quot;vue-gtag&quot;;

Vue.use(VueGtag, {
config: { id: &quot;UA-1234567-1&quot; }
});

new Vue({
render: h =&amp;gt; h(App)
}).$mount(&quot;#app&quot;);&lt;/code&gt;&lt;/pre&gt;
&lt;/li&gt;
&lt;/ol&gt;
&lt;/li&gt;
&lt;li&gt;&lt;b&gt;  에러&lt;/b&gt;
&lt;ul style=&quot;list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li&gt;&lt;code&gt;main.ts&lt;/code&gt;에서 &lt;code&gt;app.use(VueGtag, {...})&lt;/code&gt;를 하면, 계속 VueGtag가 없다는 에러가 발생함&lt;/li&gt;
&lt;li&gt;
&lt;pre class=&quot;routeros&quot;&gt;&lt;code&gt;Issues checking in progress...
ERROR in src/main.ts:11:9
TS2345: Argument of type 'typeof VueGtagPlugin' is not assignable to parameter of type 'Plugin_2'.

...

   9 | const app = createApp(App);
  10 |
&amp;gt; 11 | app.use(VueGtag, {
     |         ^^^^^^^
  12 |    config: { id: '111' },
  13 | });
  14 |&lt;/code&gt;&lt;/pre&gt;
&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt;라이브러리의 주소를 계속 참조를 못하길래, 트라이 하다가 포기
&lt;ul style=&quot;list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li&gt;Vue3 + TS환경, 특히 타입스크립트를 사용하고 있기 때문에 안된다고 판단&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;/ul&gt;
&lt;h3 data-ke-size=&quot;size23&quot;&gt;NPM : vue-gtag-next (성공  )&lt;/h3&gt;
&lt;ul style=&quot;list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li&gt;vue-gtag와 동일하지만, &lt;code&gt;Vue 3&lt;/code&gt;를 지원하기 위해 개발된 라이브러리&lt;/li&gt;
&lt;li&gt;
&lt;pre class=&quot;javascript&quot;&gt;&lt;code&gt;import { createApp } from 'vue';
import App from './App.vue';
import router from './router';
import store from './store';

// GA
import VueGtag from 'vue-gtag-next';

const app = createApp(App);

app.use(VueGtag, {
   property: { id: 'G-1234567' },
});

app.use(store).use(router).mount('#app');&lt;/code&gt;&lt;/pre&gt;
&lt;/li&gt;
&lt;/ul&gt;
&lt;h2 data-ke-size=&quot;size26&quot;&gt;적용 끝~!&lt;/h2&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-filename=&quot;스크린샷 2021-12-05 오후 10.11.25.png&quot; data-origin-width=&quot;883&quot; data-origin-height=&quot;425&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/pAsYK/btrmYddPAFU/VT5Ahi4LOW4tmbPjxlllQ1/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/pAsYK/btrmYddPAFU/VT5Ahi4LOW4tmbPjxlllQ1/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/pAsYK/btrmYddPAFU/VT5Ahi4LOW4tmbPjxlllQ1/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FpAsYK%2FbtrmYddPAFU%2FVT5Ahi4LOW4tmbPjxlllQ1%2Fimg.png&quot; onerror=&quot;this.onerror=null; this.src='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png'; this.srcset='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png';&quot; loading=&quot;lazy&quot; width=&quot;883&quot; height=&quot;425&quot; data-filename=&quot;스크린샷 2021-12-05 오후 10.11.25.png&quot; data-origin-width=&quot;883&quot; data-origin-height=&quot;425&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;라이브러리 하나로 설정이 되다니, 너무 편리하다. 렌탈스튜디오 홈페이지인 만큼 꾸준히 유저가 유입되는 구조라 GA를 테스트해보고 사용하기 적합하다고 생각한다. 유저들이 어떤 디바이스로 접근하고 어떤 페이지에 머물르는지 확인 할 수 있는게 참.. 신기할 따름이다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;이제 GA 에서 어떤 기능들이 있고, 유의미한 인사이트를 뽑기 위해선 어떤 걸 보아야 하는지 공부해봐야겠다!&lt;br /&gt;물론 그 전에 SPA에서 GA를 어떻게 최적화 할 수 있을지.. 내가 시도한 미립자 팁도 같이 공유해야겠다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;끝!&lt;/p&gt;</description>
      <category>front/vue.js</category>
      <category>GA</category>
      <category>Vue.js</category>
      <category>Vue3</category>
      <author>3sammy</author>
      <guid isPermaLink="true">https://23log.tistory.com/99</guid>
      <comments>https://23log.tistory.com/99#entry99comment</comments>
      <pubDate>Sun, 5 Dec 2021 22:15:25 +0900</pubDate>
    </item>
    <item>
      <title>Velog가 아닌 티스토리를 택한 (사소한) 이유들</title>
      <link>https://23log.tistory.com/98</link>
      <description>&lt;h2 data-ke-size=&quot;size26&quot;&gt;인트로&lt;/h2&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;블로그를 (다시) 시작해야겠다고 마음을 먹었다.&lt;/p&gt;
&lt;ol style=&quot;list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li&gt;어차피 노션으로 이슈를 정리하는데, 잘 정리해서 공개하면 좋을 것 같아서&lt;/li&gt;
&lt;li&gt;개발자에게 있어, 개발 블로그는 좋은 포트폴리오여서&lt;/li&gt;
&lt;li&gt;글을 쓰는 과정에서 지식이 재정립되기 때문&lt;/li&gt;
&lt;/ol&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;h2 data-ke-size=&quot;size26&quot;&gt;어떤 플랫폼을 선택할 것인가.&lt;/h2&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;블로그는 여러가지가 있지만, 나는 &lt;b&gt;Velog&lt;/b&gt;, &lt;b&gt;티스토리&lt;/b&gt;, &lt;b&gt;브런치&lt;/b&gt; 위 세 가지를 놓고 고민했다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;사실 브런치는 &lt;code&gt;개발&lt;/code&gt;이란 주제에는 적합하진 않지만, 개인적으로 좋아하는 플랫폼이라 넣었다. 그래, 사실 이 글은 &lt;b&gt;Velog&lt;/b&gt;, &lt;b&gt;티스토리&lt;/b&gt;에 대한 글이 주요 흐름이다.&lt;/p&gt;
&lt;h3 data-ke-size=&quot;size23&quot;&gt;Velog&lt;/h3&gt;
&lt;ul style=&quot;list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li&gt;&lt;b&gt;마크다운 기반의 글쓰기 환경&lt;/b&gt;
&lt;ul style=&quot;list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li&gt;노션을 메인 DB로 활용하며 마크다운이 익숙해졌다.&lt;/li&gt;
&lt;li&gt;개발 업무를 진행하며 내부망이지만 Typora로 작업 내용을 기록한다.&lt;/li&gt;
&lt;li&gt;그러다 보니 마크다운의 편리함과 간결함에 반했다.&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt;&lt;b&gt;개발자를 위한, 개발자에 의한!&lt;/b&gt;
&lt;ul style=&quot;list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li&gt;개발과 관련된 내용 기록이 벨로그에 많이 모여있을 만큼, 커뮤니티 형성이 잘 되어 있다.&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt;&lt;b&gt;이런 기능도 좋더라&lt;/b&gt;
&lt;ul style=&quot;list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li&gt;TOC(Table of Content) : 목차가 우측에 따라오며 바로가기를 지원해준다.&lt;/li&gt;
&lt;li&gt;시리즈, 글, 태그 별로 간결하게 표시해준다.&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt; &amp;zwj;♂️ &lt;b&gt;처음부터 다시 시작이라니..&lt;/b&gt;
&lt;ul style=&quot;list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li&gt;아무래도 플랫폼을 옮기면 처음부터 다시 시작해야했다.&lt;br /&gt;지금 블로그도 그렇게 열심을 다하진 않아도 나름 메이저 글이 있어 방문자가 나오는 편인데, 새로 시작하면.. (나죽어~)&lt;/li&gt;
&lt;li&gt;내가 그렇게 열심을 다해 활동할까..&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt; &amp;zwj;♂️ &lt;b&gt;스킨에 대한 자율성이 없어&lt;/b&gt;
&lt;ul style=&quot;list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li&gt;&lt;code&gt;튜닝의 끝은 순정이다&lt;/code&gt; 라고 하지만, 이것도 튜닝을 해본 사람이 하는 말이다.&lt;br /&gt;특히 나처럼 학생 때부터 열심히 안드로이드 폰을 루팅하길 좋아했던 나는, 튜닝에 미쳐있다고 봐야한다.&lt;/li&gt;
&lt;li&gt;그런 의미에서 스킨에 대한 자유도가 없는 것은 좀 많이 아쉽다..&lt;/li&gt;
&lt;li&gt;그리고 나는 &lt;code&gt;디자인 + 개발자&lt;/code&gt;의 포지션을 갖고 싶다. CSS 수정하고 싶다..&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;/ul&gt;
&lt;h3 data-ke-size=&quot;size23&quot;&gt;티스토리&lt;/h3&gt;
&lt;ul style=&quot;list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li&gt;사실 Velog의 내용들을 반대로하면 티스토리에 대한 내용이다.&lt;/li&gt;
&lt;li&gt;&lt;b&gt;(개발)이 주 내용이지만? 다른 내용도?&lt;/b&gt;
&lt;ul style=&quot;list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li&gt;개발적 이슈, TIL(Today I learned) 뿐만 아니라 IT 제품이나 살면서 알게된 내용들도 소개하고 싶다.&lt;/li&gt;
&lt;li&gt;그런데 뭔가 벨로그로 가면, &lt;code&gt;개발&lt;/code&gt;에 대한 이야기만 적어야 할 것 같단말이지 &lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt;&lt;b&gt;굉장한 자유도가 있다.&lt;/b&gt;
&lt;ul style=&quot;list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li&gt;스킨 편집이나 기능, 외부 스크립트를 마음대로 붙일 수 있다.&lt;/li&gt;
&lt;li&gt;곧 GA를 달려고 한다.&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt; &amp;zwj;♂️ &lt;b&gt;마크다운 글쓰기는 아쉬워&lt;/b&gt;
&lt;ul style=&quot;list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li&gt;물론 티스토리도 에디터 모드 중 마크다운을 지원하고 있다.&lt;/li&gt;
&lt;li&gt;그래서 일단 현재 Typora로 글을 작성하고 옮기고 있다.&lt;/li&gt;
&lt;li&gt;여러분이 보는 이 글이 &lt;code&gt;마크다운&lt;/code&gt; 에디터로 작성한 글이다.&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;/ul&gt;
&lt;hr data-ke-style=&quot;style1&quot; /&gt;

&lt;h2 data-ke-size=&quot;size26&quot;&gt;결론&lt;/h2&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;결론적으로 Velog가 아닌 티스토리를 택했다. 단, 다음의 내용들을 보완할 예정이다.&lt;/p&gt;
&lt;ul style=&quot;list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li&gt;&lt;b&gt;마크다운 기반의 글쓰기 환경이 되도록 셋팅한다.&lt;/b&gt;
&lt;ul style=&quot;list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li&gt;현재 &lt;code&gt;하이라이트 코드 블록&lt;/code&gt; / &lt;code&gt;인라인 코드 블럭&lt;/code&gt; 을 수정했다.&lt;/li&gt;
&lt;li&gt;계속 &lt;code&gt;Typora 작성 -&amp;gt; 마크다운으로 옮기기&lt;/code&gt; 를 테스트 할 예정이다.&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt;&lt;b&gt;추가 기능을 넣어보자!&lt;/b&gt;
&lt;ul style=&quot;list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li&gt;개발한 스튜디오 홈페이지에 GA를 삽입했는데, 방문자수를 보며 신기했다.&lt;br /&gt;티스토리도 한번 적용해봐야겠다.&lt;/li&gt;
&lt;li&gt;TOC가 스크롤에 따라 따라오도록 기능을 추가해보자!&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt;&lt;b&gt;깔끔하고 잘 만들어진 스킨을 적용한다.&lt;/b&gt; (완료)
&lt;ul style=&quot;list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li&gt;그 일환으로 &lt;code&gt;JB SKIN 167 v3.2.0&lt;/code&gt; 을 구매해서 적용했다.&lt;/li&gt;
&lt;li&gt;블로그 스킨치고 &lt;code&gt;5만원&lt;/code&gt; 이란 거금이지만, 아무것도 없는 상태에서 빌드업하기엔 시간이 너무 많이 소요된다.&lt;/li&gt;
&lt;li&gt;따라서 잘 만들어진 스킨을 바탕으로 내가 원하는 디자인과 기능을 붙이는게!&lt;br /&gt;완성도나 시간/비용 절약 측면에서 유리하다.&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt;&lt;b&gt;글을 많이 쓴다!&lt;/b&gt;
&lt;ul style=&quot;list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li&gt;이전에 수익 신청했다가 거절된 적이 있는데, 그 후로도 꾸준히 블로그 방문을 기록했다. 차라리 그때 열심히 더 해서 신청해볼걸, 싶었다.&lt;/li&gt;
&lt;li&gt;3개월 내에 20개 이상의 글(개발 관련)을 작성해서 수익 신청 성공할거다!
&lt;ul style=&quot;list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li&gt;혹시 모르지, 취미가 될 수도  &lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-filename=&quot;blob&quot; data-origin-width=&quot;320&quot; data-origin-height=&quot;326&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/bAGncd/btrmQ31LrZa/dJtI058W56A1UZX89mTEXK/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/bAGncd/btrmQ31LrZa/dJtI058W56A1UZX89mTEXK/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/bAGncd/btrmQ31LrZa/dJtI058W56A1UZX89mTEXK/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FbAGncd%2FbtrmQ31LrZa%2FdJtI058W56A1UZX89mTEXK%2Fimg.png&quot; onerror=&quot;this.onerror=null; this.src='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png'; this.srcset='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png';&quot; loading=&quot;lazy&quot; width=&quot;320&quot; height=&quot;326&quot; data-filename=&quot;blob&quot; data-origin-width=&quot;320&quot; data-origin-height=&quot;326&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;/p&gt;</description>
      <category>블로그/생각정리</category>
      <category>생각정리</category>
      <author>3sammy</author>
      <guid isPermaLink="true">https://23log.tistory.com/98</guid>
      <comments>https://23log.tistory.com/98#entry98comment</comments>
      <pubDate>Thu, 2 Dec 2021 14:25:47 +0900</pubDate>
    </item>
    <item>
      <title>공유기 2대로 멀티 Wifi 만들기 (공유기 허브 AP 모드)</title>
      <link>https://23log.tistory.com/97</link>
      <description>&lt;blockquote data-ke-style=&quot;style3&quot;&gt;공유기&amp;nbsp;허브모드,&amp;nbsp;AP모드라고&amp;nbsp;검색하면&amp;nbsp;더욱&amp;nbsp;상세한&amp;nbsp;포스팅이&amp;nbsp;나온다.&lt;br /&gt;여기선 필자가 겪은 상황에 대해서만 쓰고 추후 포스팅을 통해 상세히 다루겠다.&lt;/blockquote&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;
&lt;h2 data-ke-size=&quot;size26&quot;&gt;하려는 것과 준비물&lt;/h2&gt;
&lt;p&gt;&lt;b&gt;하려는 것 : 랜선으로 연결된 서로 다른 공간 (5층, 6층)에 wifi 만들기&lt;/b&gt;&lt;/p&gt;
&lt;p&gt;&lt;b&gt;준비물 : 공유기 2대&lt;/b&gt;&lt;/p&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;
&lt;h2 data-ke-size=&quot;size26&quot;&gt;상황 설명&lt;/h2&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-filename=&quot;제목_없는_아트워크-7.png&quot; data-origin-width=&quot;1164&quot; data-origin-height=&quot;1299&quot; width=&quot;400&quot; data-ke-mobilestyle=&quot;widthContent&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/zAT8e/btq2Tb59UxO/k7gBQS8SJhCze4KKe9mZe1/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/zAT8e/btq2Tb59UxO/k7gBQS8SJhCze4KKe9mZe1/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/zAT8e/btq2Tb59UxO/k7gBQS8SJhCze4KKe9mZe1/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FzAT8e%2Fbtq2Tb59UxO%2Fk7gBQS8SJhCze4KKe9mZe1%2Fimg.png&quot; data-filename=&quot;제목_없는_아트워크-7.png&quot; data-origin-width=&quot;1164&quot; data-origin-height=&quot;1299&quot; width=&quot;400&quot; data-ke-mobilestyle=&quot;widthContent&quot; onerror=&quot;this.onerror=null; this.src='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png'; this.srcset='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png';&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;/p&gt;
&lt;p&gt;먼저 필자는 위와 같은 상황이다.&lt;/p&gt;
&lt;p&gt;5층에 200MB 정도 되는 인터넷이 가입되어 있고, 이 인터넷을 통해 데스트톱 1대와 유선 연결 / 와이파이 1개가 구성되어 있다.&lt;/p&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;6층에서도 5층의 와아파이를 쓰고 싶지만, 아무래도 층과 위치가 달라서 1MB도 나오지 못한다.&lt;/p&gt;
&lt;p&gt;따라서 5층 메인 공유기에서 랜선을 길게 연결해서 6층으로 올려, 직접 유선랜 환경을 구성했다.&lt;/p&gt;
&lt;p&gt;특히 창문을 지나서 나가야 하는 만큼, 창문과 같은 구조에서도 꺾여서 가능한 RJ45 랜 케이블 연결선으로 가설했다.&lt;/p&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;자세한 그림은 아래와 같은데,&lt;/p&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-filename=&quot;제목_없는_아트워크-4.png&quot; data-origin-width=&quot;1164&quot; data-origin-height=&quot;1299&quot; width=&quot;400&quot; data-ke-mobilestyle=&quot;widthContent&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/tiNS6/btq2NqwDGg1/aXM3VfGj7LVjkM4D0BBZzK/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/tiNS6/btq2NqwDGg1/aXM3VfGj7LVjkM4D0BBZzK/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/tiNS6/btq2NqwDGg1/aXM3VfGj7LVjkM4D0BBZzK/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FtiNS6%2Fbtq2NqwDGg1%2FaXM3VfGj7LVjkM4D0BBZzK%2Fimg.png&quot; data-filename=&quot;제목_없는_아트워크-4.png&quot; data-origin-width=&quot;1164&quot; data-origin-height=&quot;1299&quot; width=&quot;400&quot; data-ke-mobilestyle=&quot;widthContent&quot; onerror=&quot;this.onerror=null; this.src='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png'; this.srcset='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png';&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;/p&gt;
&lt;p&gt;이렇게 구성해서 사용중이었으며 맥북에선 70MB/s 정도의 원만한 속도로 사용중이다.&lt;/p&gt;
&lt;p&gt;그런데 여전히 와이파이가 되질 않아서, 아이패드 등에 와아파이가 필요하면 늘 맥북에서 인터넷 공유를 켜서 사용중이다..&lt;/p&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-origin-width=&quot;0&quot; data-origin-height=&quot;0&quot; width=&quot;400&quot; data-ke-mobilestyle=&quot;widthContent&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/dcXWF8/btq2OqwcULC/xqh0AdqU0YpqFsqjp3mNkk/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/dcXWF8/btq2OqwcULC/xqh0AdqU0YpqFsqjp3mNkk/img.png&quot; data-alt=&quot;유용한 기능이긴 하나, 매번 켰다 끄는게 지친다..&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/dcXWF8/btq2OqwcULC/xqh0AdqU0YpqFsqjp3mNkk/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FdcXWF8%2Fbtq2OqwcULC%2Fxqh0AdqU0YpqFsqjp3mNkk%2Fimg.png&quot; data-origin-width=&quot;0&quot; data-origin-height=&quot;0&quot; width=&quot;400&quot; data-ke-mobilestyle=&quot;widthContent&quot; onerror=&quot;this.onerror=null; this.src='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png'; this.srcset='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png';&quot;/&gt;&lt;/span&gt;&lt;figcaption&gt;유용한 기능이긴 하나, 매번 켰다 끄는게 지친다..&lt;/figcaption&gt;
&lt;/figure&gt;
&lt;/p&gt;
&lt;p&gt;따라서 필자는&amp;nbsp;&lt;/p&gt;
&lt;p&gt;&lt;span style=&quot;color: #006dd7;&quot;&gt;&lt;b&gt;- 추가적인 인터넷 설치 필요 없이 (6층 개통 X)&lt;/b&gt;&lt;/span&gt;&lt;/p&gt;
&lt;p&gt;&lt;span style=&quot;color: #006dd7;&quot;&gt;&lt;b&gt;- 기존처럼 유선랜 환경을 유지하며&lt;/b&gt;&lt;/span&gt;&lt;/p&gt;
&lt;p&gt;&lt;span style=&quot;color: #006dd7;&quot;&gt;&lt;b&gt;- 6층에 wifi를 빵빵 터트리고 싶다.&lt;/b&gt;&lt;/span&gt;&lt;/p&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;
&lt;h2 data-ke-size=&quot;size26&quot;&gt;&lt;span style=&quot;color: #333333;&quot;&gt;허브 모드 하는 방법&lt;/span&gt;&lt;/h2&gt;
&lt;p&gt;&lt;span style=&quot;color: #333333;&quot;&gt;내가 원하는 상황을 하기 위한 최적의 방법은, &lt;b&gt;남는 공유기 1대로 허브 모드&lt;/b&gt;를 만드는 것이다.&lt;/span&gt;&lt;/p&gt;
&lt;p&gt;&lt;span style=&quot;color: #009a87;&quot;&gt;허브 모드란, 새로운 IP를 생성해서 부여하지 않고 기존 꺼를 분배만 하는 역할을 수행하는 녀석이다.&lt;/span&gt;&lt;/p&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;&lt;span style=&quot;color: #333333;&quot;&gt;**메인 공유기는 건들지 않는다. 멀쩡하게 잘 되는 녀석은 건들지 말자&lt;/span&gt;&lt;span style=&quot;color: #333333;&quot;&gt;&lt;/span&gt;&lt;/p&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;
&lt;h4 data-ke-size=&quot;size20&quot;&gt;&lt;b&gt;&lt;span style=&quot;color: #333333;&quot;&gt;&amp;nbsp;1️⃣ 서브 공유기 전원 켜서 초기화하기&lt;/span&gt;&lt;/b&gt;&lt;/h4&gt;
&lt;p&gt;&lt;span style=&quot;color: #333333;&quot;&gt;말 그대로 서브 공유기 전원을 연결해서 켠 뒤, 아무런 랜선을 꼽지 않은 상태로 하드웨어 초기화를 진행한다.&lt;/span&gt;&lt;/p&gt;
&lt;p&gt;&lt;span style=&quot;color: #333333;&quot;&gt;필자는 &lt;a href=&quot;http://itempage3.auction.co.kr/DetailView.aspx?ItemNo=A840326563&amp;amp;frm3=V2&quot; target=&quot;_blank&quot; rel=&quot;noopener&quot;&gt;아이피타임 N604S 모델&lt;/a&gt;을 서브 공유기로 설정했다. 왜냐면 남았거든.&lt;/span&gt;&lt;/p&gt;
&lt;p&gt;&lt;span style=&quot;color: #333333;&quot;&gt;공유기 밖에 잘 보면 RST이라 되어있는 녀석이 있다. 이걸 5~10초 꾹 눌러주면, 하드웨어 초기화가 된다.&lt;/span&gt;&lt;/p&gt;
&lt;p&gt;&lt;span style=&quot;color: #333333;&quot;&gt;(전체 불이 점등되었다든가, CPU 램프만 빠르게 뛴다거나, 특정 불이 꺼진다거나 하면 초기화 된거다. 볼펜 떼주자)&lt;/span&gt;&lt;/p&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-origin-width=&quot;0&quot; data-origin-height=&quot;0&quot; data-ke-mobilestyle=&quot;widthContent&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/0AD7S/btq2Rj4qVgM/KITV7zzfR4VKrTjQ0wdc11/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/0AD7S/btq2Rj4qVgM/KITV7zzfR4VKrTjQ0wdc11/img.png&quot; data-alt=&quot;출처 :&amp;amp;amp;nbsp;https://emflant.tistory.com/204&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/0AD7S/btq2Rj4qVgM/KITV7zzfR4VKrTjQ0wdc11/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2F0AD7S%2Fbtq2Rj4qVgM%2FKITV7zzfR4VKrTjQ0wdc11%2Fimg.png&quot; data-origin-width=&quot;0&quot; data-origin-height=&quot;0&quot; data-ke-mobilestyle=&quot;widthContent&quot; onerror=&quot;this.onerror=null; this.src='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png'; this.srcset='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png';&quot;/&gt;&lt;/span&gt;&lt;figcaption&gt;출처 :&amp;nbsp;https://emflant.tistory.com/204&lt;/figcaption&gt;
&lt;/figure&gt;
&lt;/p&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;
&lt;h4 data-ke-size=&quot;size20&quot;&gt;&lt;b&gt;&lt;span style=&quot;color: #333333;&quot;&gt;&amp;nbsp;2️⃣ 서브 공유기와 유선으로 PC와 연결하기&lt;/span&gt;&lt;/b&gt;&lt;/h4&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;color: #333333;&quot;&gt;해당 공유기의 초기 셋팅을 바꾸기 위함이다. &lt;/span&gt;&lt;span style=&quot;color: #333333;&quot;&gt;서브 공유기 4번 포트 &amp;harr;️ 맥북 를 유선랜으로 연결한다.&lt;/span&gt;&lt;/p&gt;
&lt;p&gt;&lt;span style=&quot;color: #333333;&quot;&gt;그리고 맥북은 wifi를 꺼서 &lt;u&gt;&lt;span style=&quot;color: #ee2323;&quot;&gt;그 어떤 인터넷도 연결되지 않게&lt;/span&gt;&lt;/u&gt; 한다.&lt;/span&gt;&lt;/p&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;
&lt;h4 data-ke-size=&quot;size20&quot;&gt;&lt;b&gt;&lt;span style=&quot;color: #333333;&quot;&gt;&lt;span style=&quot;color: #333333;&quot;&gt;&amp;nbsp;3️⃣ 서브 공유기 SW 초기 셋팅하기&lt;/span&gt;&lt;/span&gt;&lt;/b&gt;&lt;/h4&gt;
&lt;p&gt;&lt;span style=&quot;color: #333333;&quot;&gt;&lt;span style=&quot;color: #333333;&quot;&gt;192.168.0.1 로 접속해서 공유기 셋팅 화면으로 접속한다.&lt;/span&gt;&lt;/span&gt;&lt;/p&gt;
&lt;p&gt;&lt;span style=&quot;color: #333333;&quot;&gt;&lt;span style=&quot;color: #333333;&quot;&gt;접속 시 위에 어떤 공유기의 셋팅 화면으로 접속했는지 모델명이 표시되어 있는데 이게 맞는지 확인해야 한다.&lt;/span&gt;&lt;/span&gt;&lt;/p&gt;
&lt;p&gt;&lt;span style=&quot;color: #333333;&quot;&gt;&lt;span style=&quot;color: #333333;&quot;&gt;만약 메인 공유기의 미약한 와이파이에 접속했다면, 메인 공유기의 SW를 건드리게 되므로 주의한다.&lt;/span&gt;&lt;/span&gt;&lt;/p&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-origin-width=&quot;0&quot; data-origin-height=&quot;0&quot; data-ke-mobilestyle=&quot;widthContent&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/PFv4T/btq2Ndj34Mb/S96F2Q3H6m5e8rKuuKsPm1/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/PFv4T/btq2Ndj34Mb/S96F2Q3H6m5e8rKuuKsPm1/img.png&quot; data-alt=&quot;필자는 와이파이 연결되었는지도 모르고 메인 공유기 설정 바꿨다 고생좀 했다..&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/PFv4T/btq2Ndj34Mb/S96F2Q3H6m5e8rKuuKsPm1/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FPFv4T%2Fbtq2Ndj34Mb%2FS96F2Q3H6m5e8rKuuKsPm1%2Fimg.png&quot; data-origin-width=&quot;0&quot; data-origin-height=&quot;0&quot; data-ke-mobilestyle=&quot;widthContent&quot; onerror=&quot;this.onerror=null; this.src='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png'; this.srcset='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png';&quot;/&gt;&lt;/span&gt;&lt;figcaption&gt;필자는 와이파이 연결되었는지도 모르고 메인 공유기 설정 바꿨다 고생좀 했다..&lt;/figcaption&gt;
&lt;/figure&gt;
&lt;/p&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;아래 상황은 빠르게 기술하고, 추후 사진을 넣겠다.&lt;/p&gt;
&lt;pre id=&quot;code_1618779631977&quot; class=&quot;java&quot; data-ke-language=&quot;java&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;1. DHCP 서버 설정 - DHCP 서버 동작 - [중지] - 적용
2. 내부 네트워크 설정 - 기본 네트워크 주소 - 192.168.0.200 으로 설정 - 재시작
 // 자신이 원래 사용하는 네트워크의 주소가 중요하다.
 // 만약 xxx.xxx.100.xxx 가 원래 사용하는 주소라면
 // 변경 할 때, x.x.100.200으로 바꾸어야 한다.
 // 중요한 것 = 사용하는 네트워크 주소 중 마지막만 200으로 바꾸기!&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;&lt;span style=&quot;color: #333333;&quot;&gt;저렇게만 설정해주면, 허브 모드 설정이 끝난다.&lt;/span&gt;&lt;/p&gt;
&lt;p&gt;그럼 이제 서브 공유기는 SW 설정이 끝나고, 네트워크 연결 없이는 다시 셋팅 화면 접속이 불가해진다.&lt;/p&gt;
&lt;p&gt;(설정을 잘못했다면 그냥 하드웨어 초기화해라)&lt;/p&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;
&lt;h4 data-ke-size=&quot;size20&quot;&gt;&lt;b&gt;&lt;span style=&quot;color: #333333;&quot;&gt;&amp;nbsp;4️⃣ 서브 공유기 &lt;span style=&quot;color: #333333;&quot;&gt;&amp;harr;️ 메인 공유기 연결하기&lt;/span&gt;&lt;/span&gt;&lt;/b&gt;&lt;/h4&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-origin-width=&quot;0&quot; data-origin-height=&quot;0&quot; data-ke-mobilestyle=&quot;widthContent&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/ctg8UC/btq2NUK5eg8/dCfKveZtiaAB91hpJregck/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/ctg8UC/btq2NUK5eg8/dCfKveZtiaAB91hpJregck/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/ctg8UC/btq2NUK5eg8/dCfKveZtiaAB91hpJregck/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2Fctg8UC%2Fbtq2NUK5eg8%2FdCfKveZtiaAB91hpJregck%2Fimg.png&quot; data-origin-width=&quot;0&quot; data-origin-height=&quot;0&quot; data-ke-mobilestyle=&quot;widthContent&quot; onerror=&quot;this.onerror=null; this.src='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png'; this.srcset='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png';&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;/p&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;&lt;span style=&quot;color: #333333;&quot;&gt;이제 메인 공유기(좌측)에서 나온 랜선을 서브 공유기(우측) 1번 포트에 연결한다.&lt;/span&gt;&lt;/p&gt;
&lt;p&gt;&lt;span style=&quot;color: #333333;&quot;&gt;그럼 각 공유기의 연결 상황은 다음과 같다.&lt;/span&gt;&lt;span style=&quot;color: #333333;&quot;&gt;&lt;/span&gt;&lt;/p&gt;
&lt;pre id=&quot;code_1618780026319&quot; class=&quot;java&quot; data-ke-language=&quot;java&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;[메인 공유기]
ㄴ WAN    : 가입한 SK 인터넷 회선
ㄴ 1번 포트 : 5층 데스크톱 유선 연결
ㄴ 2번 포트 : 6층으로 가는 랜선
ㄴ 3번 포트 : -
ㄴ 4번 포트 : -

[서브 공유기]
ㄴ WAN    : -
ㄴ 1번 포트 : 5층에서 오는 랜선
ㄴ 2번 포트 : -
ㄴ 3번 포트 : -
ㄴ 4번 포트 : 6층 맥북과 연결하는 랜선&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;&lt;span style=&quot;color: #333333;&quot;&gt;이제 저렇게 연결하면 기본적으로 &lt;span style=&quot;color: #006dd7;&quot;&gt;&lt;b&gt;6층의 맥북은 유선으로 연결&lt;/b&gt;&lt;/span&gt;이 되었다.&lt;/span&gt;&lt;/p&gt;
&lt;p&gt;&lt;span style=&quot;color: #333333;&quot;&gt;자, 이제 휴대폰으로 6층 와이파이를 보자. 그러면 &lt;span style=&quot;color: #006dd7;&quot;&gt;&lt;b&gt;비번이 없는 iptime&lt;/b&gt;&lt;/span&gt;이 있다고 뜰 것이다.&lt;/span&gt;&lt;span style=&quot;color: #333333;&quot;&gt;&lt;/span&gt;&lt;/p&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;이것을 이제 설정하기 위해 앞서 설정한 &lt;b&gt;192.168.0.200&lt;/b&gt; 을 주소창에 쳐서 들어간다.&lt;/p&gt;
&lt;p&gt;그리고 서브 공유기 무선 네트워크 설정으로 들어가서 와이파이에 비번을 설정해주면 된다!&lt;/p&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;따라서 이제 6층에서도 4칸 짜리 와이파이가 구성되었다.&lt;/p&gt;
&lt;p&gt;속도 측정을 하니 50Mb/s 정도 측정된다. 성공이다.&lt;/p&gt;</description>
      <category>정보/TECH</category>
      <category>공유기</category>
      <category>네트워크</category>
      <category>인터넷</category>
      <author>3sammy</author>
      <guid isPermaLink="true">https://23log.tistory.com/97</guid>
      <comments>https://23log.tistory.com/97#entry97comment</comments>
      <pubDate>Mon, 19 Apr 2021 06:10:32 +0900</pubDate>
    </item>
    <item>
      <title>[JAVA][백준 17142] 연구소 3</title>
      <link>https://23log.tistory.com/96</link>
      <description>&lt;table style=&quot;border-collapse: collapse; width: 100%; height: 94px;&quot; border=&quot;1&quot;&gt;
&lt;tbody&gt;
&lt;tr style=&quot;height: 19px;&quot;&gt;
&lt;td style=&quot;width: 17.2093%; text-align: center; height: 19px;&quot;&gt;&lt;b&gt;사이트명&lt;/b&gt;&lt;/td&gt;
&lt;td style=&quot;width: 82.7907%; height: 19px;&quot;&gt;백준&lt;/td&gt;
&lt;/tr&gt;
&lt;tr style=&quot;height: 19px;&quot;&gt;
&lt;td style=&quot;width: 17.2093%; text-align: center; height: 19px;&quot;&gt;&lt;b&gt;문제 링크&lt;/b&gt;&lt;/td&gt;
&lt;td style=&quot;width: 82.7907%; height: 19px;&quot;&gt;&lt;a href=&quot;https://www.acmicpc.net/problem/17142&quot; target=&quot;_blank&quot; rel=&quot;noopener&quot;&gt;www.acmicpc.net/problem/17142&lt;/a&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;tr style=&quot;height: 19px;&quot;&gt;
&lt;td style=&quot;width: 17.2093%; text-align: center; height: 19px;&quot;&gt;&lt;b&gt;주요 알고리즘&lt;/b&gt;&lt;/td&gt;
&lt;td style=&quot;width: 82.7907%; height: 19px;&quot;&gt;조합, BFS&lt;/td&gt;
&lt;/tr&gt;
&lt;tr style=&quot;height: 19px;&quot;&gt;
&lt;td style=&quot;width: 17.2093%; text-align: center; height: 19px;&quot;&gt;&lt;b&gt;사용 언어&lt;/b&gt;&lt;/td&gt;
&lt;td style=&quot;width: 82.7907%; height: 19px;&quot;&gt;&lt;span style=&quot;color: #ee2323;&quot;&gt;&lt;b&gt;Java 자바&lt;br /&gt;&lt;/b&gt;&lt;/span&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;tr style=&quot;height: 19px;&quot;&gt;
&lt;td style=&quot;width: 17.2093%; text-align: center; height: 18px;&quot; colspan=&quot;2&quot;&gt;&lt;span style=&quot;color: #ee2323;&quot;&gt;&lt;span style=&quot;color: #9d9d9d;&quot;&gt;알고리즘이 낯선 사람들을 위해 생각 노트를 같이 두었습니다.&lt;/span&gt;&lt;/span&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;
&lt;h2 data-ke-size=&quot;size26&quot;&gt;&lt;span style=&quot;color: #1a5490;&quot;&gt;&lt;b&gt;1. 문제&lt;/b&gt;&lt;/span&gt;&lt;/h2&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-origin-width=&quot;0&quot; data-origin-height=&quot;0&quot; data-ke-mobilestyle=&quot;widthContent&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/ck3wZr/btq1z4PCk6F/hhktpfIcj9z3O3oaYuiAJ0/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/ck3wZr/btq1z4PCk6F/hhktpfIcj9z3O3oaYuiAJ0/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/ck3wZr/btq1z4PCk6F/hhktpfIcj9z3O3oaYuiAJ0/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2Fck3wZr%2Fbtq1z4PCk6F%2FhhktpfIcj9z3O3oaYuiAJ0%2Fimg.png&quot; data-origin-width=&quot;0&quot; data-origin-height=&quot;0&quot; data-ke-mobilestyle=&quot;widthContent&quot; onerror=&quot;this.onerror=null; this.src='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png'; this.srcset='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png';&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;/p&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;
&lt;h2 data-ke-size=&quot;size26&quot;&gt;&lt;span style=&quot;color: #1a5490;&quot;&gt;&lt;b&gt;2. 입력 / 출력&lt;/b&gt;&lt;/span&gt;&lt;/h2&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-origin-width=&quot;0&quot; data-origin-height=&quot;0&quot; data-ke-mobilestyle=&quot;widthContent&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/bwfnHu/btq1GdX5Gtm/3mB4hK95kKWt4pXEQOFBGk/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/bwfnHu/btq1GdX5Gtm/3mB4hK95kKWt4pXEQOFBGk/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/bwfnHu/btq1GdX5Gtm/3mB4hK95kKWt4pXEQOFBGk/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FbwfnHu%2Fbtq1GdX5Gtm%2F3mB4hK95kKWt4pXEQOFBGk%2Fimg.png&quot; data-origin-width=&quot;0&quot; data-origin-height=&quot;0&quot; data-ke-mobilestyle=&quot;widthContent&quot; onerror=&quot;this.onerror=null; this.src='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png'; this.srcset='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png';&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;/p&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size18&quot;&gt;  &lt;b&gt;Check Point&lt;/b&gt;&lt;/p&gt;
&lt;p&gt;&amp;nbsp;&lt;b&gt;- 풀이 알고리즘의 결정&lt;/b&gt;&lt;/p&gt;
&lt;p&gt;1. 바이러스 개수는 최대 10개 = 10C5 조합 결과 250개&lt;/p&gt;
&lt;p&gt;2. 최대 칸 수 50칸 = 50^2 그래프 탐색시 최대 걸리는 시간 2500&lt;/p&gt;
&lt;p&gt;&amp;nbsp; ===&amp;gt; 완전 탐색으로 가능&lt;/p&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;&lt;b&gt;&amp;nbsp;- 출력 값&lt;/b&gt;&lt;/p&gt;
&lt;p&gt;출력이 결국 &lt;b&gt;&lt;span style=&quot;color: #ee2323;&quot;&gt;모든 칸&lt;/span&gt;에 바이러스가 있게 되는 &lt;span style=&quot;color: #ee2323;&quot;&gt;최소 시간&lt;/span&gt;&lt;/b&gt;. 따라서 &lt;span style=&quot;color: #ee2323;&quot;&gt;&lt;b&gt;칸&lt;/b&gt;&lt;/span&gt;과 &lt;span style=&quot;color: #ee2323;&quot;&gt;&lt;b&gt;시간&lt;/b&gt;&lt;/span&gt;을 중점으로 체크해야 한다.&lt;/p&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;
&lt;hr contenteditable=&quot;false&quot; data-ke-type=&quot;horizontalRule&quot; data-ke-style=&quot;style2&quot; /&gt;
&lt;h2 data-ke-size=&quot;size26&quot;&gt;&lt;span style=&quot;color: #1a5490;&quot;&gt;&lt;b&gt;3. 풀이&lt;/b&gt;&lt;/span&gt;&lt;/h2&gt;
&lt;h4 data-ke-size=&quot;size20&quot;&gt;&lt;b&gt;3-1. 생각 노트&lt;/b&gt;&lt;/h4&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-filename=&quot;algorithms book-82.jpg&quot; data-origin-width=&quot;2386&quot; data-origin-height=&quot;1491&quot; data-ke-mobilestyle=&quot;widthContent&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/qVUnn/btq1ByJrpsZ/VkleuLbsIUVfq0jHvLMpJ1/img.jpg&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/qVUnn/btq1ByJrpsZ/VkleuLbsIUVfq0jHvLMpJ1/img.jpg&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/qVUnn/btq1ByJrpsZ/VkleuLbsIUVfq0jHvLMpJ1/img.jpg&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FqVUnn%2Fbtq1ByJrpsZ%2FVkleuLbsIUVfq0jHvLMpJ1%2Fimg.jpg&quot; data-filename=&quot;algorithms book-82.jpg&quot; data-origin-width=&quot;2386&quot; data-origin-height=&quot;1491&quot; data-ke-mobilestyle=&quot;widthContent&quot; onerror=&quot;this.onerror=null; this.src='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png'; this.srcset='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png';&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;/p&gt;
&lt;p&gt;1. 바이러스(2)인 수를 전부 virusList에 넣기&lt;br /&gt;2. nCm 의 형식으로 모든 경우에 대한 조합 생성&lt;br /&gt;3. 조합을 기준으로 &lt;span style=&quot;color: #333333;&quot;&gt;virusList에서 get(i)로 해당 값을 Queue에 넣고 실행&lt;/span&gt;&lt;/p&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;&lt;span style=&quot;color: #333333;&quot;&gt;이 때, 중요한 포인트는&lt;/span&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size18&quot;&gt;&lt;b&gt;&lt;span style=&quot;color: #333333;&quot;&gt;1. 시간이 증가되는 것처럼 &lt;span style=&quot;color: #ef5369;&quot;&gt;동시에 진행&lt;/span&gt;된다? &lt;span style=&quot;color: #ee2323;&quot;&gt;BFS&lt;/span&gt;&lt;/span&gt;&lt;/b&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size14&quot;&gt;&lt;span style=&quot;color: #333333;&quot;&gt;&amp;nbsp;- 경로 찾기, 다양한 경우가 중요하면 DFS&lt;/span&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size18&quot;&gt;&lt;b&gt;&lt;span style=&quot;color: #333333;&quot;&gt;2. BFS에서 &lt;span style=&quot;color: #ef5369;&quot;&gt;Queue에 삽입&lt;/span&gt;한다? &lt;span style=&quot;color: #ee2323;&quot;&gt;거기도 방문 체크&lt;/span&gt;를 하자!&lt;/span&gt;&lt;/b&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size14&quot;&gt;&lt;span style=&quot;color: #333333;&quot;&gt;&amp;nbsp;- 이거 까먹기 쉽다..&lt;/span&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size14&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;h4 data-ke-size=&quot;size20&quot;&gt;&lt;b&gt;3-2. 변수명&lt;/b&gt;&lt;/h4&gt;
&lt;table style=&quot;border-collapse: collapse; width: 100%; height: 58px;&quot; border=&quot;1&quot; data-ke-style=&quot;style13&quot;&gt;
&lt;tbody&gt;
&lt;tr style=&quot;height: 19px;&quot;&gt;
&lt;td style=&quot;width: 28.6047%; text-align: center; height: 19px;&quot;&gt;&lt;b&gt;변수명&lt;/b&gt;&lt;/td&gt;
&lt;td style=&quot;width: 62.907%; text-align: center; height: 19px;&quot;&gt;&lt;b&gt;설명&lt;/b&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;tr style=&quot;height: 20px;&quot;&gt;
&lt;td style=&quot;width: 28.6047%; text-align: center; height: 20px;&quot;&gt;
&lt;p&gt;&lt;span&gt;&lt;b&gt;static&lt;/b&gt;&lt;/span&gt; ArrayList&amp;lt;Virus&amp;gt; &lt;span&gt;&lt;i&gt;virusList&lt;/i&gt;&lt;/span&gt;&lt;/p&gt;
&lt;/td&gt;
&lt;td style=&quot;height: 20px; width: 62.907%;&quot;&gt;바이러스들의 위치와 시간값을 기록하기 위한 리스트.&lt;br /&gt;이 리스트는 맨 처음 입력받은 대로 고정이고 조합 결과에 따라 인덱스로 접근할 수 있게 해줌.&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td style=&quot;width: 28.6047%; text-align: center;&quot; colspan=&quot;2&quot;&gt;
&lt;p&gt;&lt;span&gt;&lt;b&gt;다른 변수들은 코드에 적어두었습니다.&lt;/b&gt;&lt;/span&gt;&lt;/p&gt;
&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;
&lt;h4 data-ke-size=&quot;size20&quot;&gt;&lt;b&gt;3-3. 코드 보기&lt;/b&gt;&lt;/h4&gt;
&lt;pre id=&quot;code_1608395675645&quot; class=&quot;java&quot; data-ke-language=&quot;java&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;import java.io.BufferedReader;
import java.io.InputStreamReader;
import java.util.ArrayList;
import java.util.Arrays;
import java.util.LinkedList;
import java.util.Queue;

/* 풀이 생각
 * 1. 바이러스(2)인 수를 전부 virusList에 넣기
 * 2. nCm 의 형식으로 모든 경우에 대한 시간 계산
 * 3. m번 반복하며 BFS로 바이러스 확산 처리
 */

// 바이러스의 시간과 위치를 기록하기 위한 객체
class Virus {
	int x;
	int y;
	int time;
	
	public Virus(int x, int y, int level) {
		this.x = x;
		this.y = y;
		this.time = level;
	}
}

public class Main {
	
	static int N, M;
	static int[] picked; // 뽑은 조합을 기록

	static ArrayList&amp;lt;Virus&amp;gt; virusList = new ArrayList&amp;lt;&amp;gt;();
	
	static int[][] map;
	static boolean[][] isVisit;
	static int blank;		// 빈칸 기록
	
	static int[] dx = {-1,1,0,0};
	static int[] dy = {0,0,-1,1};
	
	static int min = Integer.MAX_VALUE;
	
	public static void main(String[] args) throws Exception {
		
		
		BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
		
		String[] input = br.readLine().split(&quot; &quot;);
		N = Integer.parseInt(input[0]); // 연구소 크기
		M = Integer.parseInt(input[1]); // 바이러스 개수
		
		map = new int[N][N];
		
		// ==============
		//  * 데이터 입력
		// ==============
		for (int i = 0; i &amp;lt; N; i++) {
			input = br.readLine().split(&quot; &quot;);
			for (int j = 0; j &amp;lt; N; j++) {
				int num = Integer.parseInt(input[j]);
				
				map[i][j] = num;
				
				if(num == 2) {
					virusList.add(new Virus(i,j,1));
				}else if(num == 0) {
					blank++;			// 비어있는 칸(바이러스가 퍼져야 할)의 갯수 
				}
			}
		}
		
		// 빈칸 없는 경우 바로 끝
		if(blank == 0) {
			System.out.println(0);
			return;
		}
		
		// 뽑은 조합을 저장하기 위한 배열
		picked = new int[M];
		
		// 조합 + 탐색 시작
		combination(0, 0);
		
		// 다 못채우면 그냥 끝냄 -&amp;gt;
		if(min == Integer.MAX_VALUE) {
			System.out.println(-1);
			return;
		}
		
		System.out.println(min);
		
	}

	// cnt(현재까지 뽑은 수), cur(현재 가르키는 번호)
	private static void combination(int cnt, int cur) {
		if(cnt == M) {
			BFS();		//조합이 완성되면 탐색 시작
			return;
		}
		
		for (int i = cur; i &amp;lt; virusList.size(); i++) {
			picked[cnt] = i;
			combination(cnt+1, i+1);
		}
	}

	private static void BFS() {
		Queue&amp;lt;Virus&amp;gt; q = new LinkedList&amp;lt;&amp;gt;();
		isVisit = new boolean[N][N];
		
		// 뽑힌 수대로 바이러스 리스트에 접근해서 Q에 삽입
		for (int i = 0; i &amp;lt; M; i++) {
			q.add(virusList.get(picked[i]));
			isVisit[virusList.get(picked[i]).x][virusList.get(picked[i]).y] = true;
		}
		
		int time = 0;		// 걸린 시간 기록
		int count = 0;		// 빈칸 확산 카운팅
		
		while(!q.isEmpty()) {
			Virus v = q.poll();
			
			for (int k = 0; k &amp;lt; 4; k++) {
				int nx = v.x + dx[k];
				int ny = v.y + dy[k];
				
				
				// 이전에 있던 바이러스의 시간값을 받아오므로 계속 증가할 수 밖에 없음
				time = v.time;
				
				// 범위 밖 OR 이미 방문 = 아웃
				if(!(0 &amp;lt;= nx &amp;amp;&amp;amp; nx &amp;lt; N &amp;amp;&amp;amp; 0 &amp;lt;= ny &amp;amp;&amp;amp; ny &amp;lt; N) || isVisit[nx][ny]) continue;
				
				// 빈칸이어서 확산한 경우)
				if(map[nx][ny] == 0) {
					isVisit[nx][ny] = true;
					count++;
					q.add(new Virus(nx,ny,v.time+1));
				}
				
				// 확산은 못하지만 지나갈 수 있는 경우)
				if(map[nx][ny] == 2) {
					isVisit[nx][ny] = true;
					q.add(new Virus(nx,ny,v.time+1));
				}
				
			}
			
			// 만약 이미 빈칸이 채워졌다면 사전에 종료시킴으로써 시간값의 계속 증가를 방지
			if(count == blank) {
				time++;	// 이경우, 새로 뽑은 시간값 할당이 안되므로, 임의로 1 증가
				break;
			}
		};
	
		if(count != blank) return;	// 다 못채우면 그냥 끝내기
		
		// time-1의 이유 : 마지막에 +1한 상태를 q에 날리기 때문
		min = Math.min(min, time-1);
	}

}
&lt;/code&gt;&lt;/pre&gt;
&lt;h4 data-ke-size=&quot;size20&quot;&gt;&lt;b&gt;3-4. 마무리&lt;/b&gt;&lt;/h4&gt;
&lt;p&gt;&lt;b&gt;틀린 이유&lt;/b&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size18&quot;&gt;&lt;b&gt;1. 각 바이러스마다 시간 값을 기록하고 이를 지도에 반영했다.&lt;/b&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size14&quot;&gt;&amp;nbsp;- 머릿속으로 '각 바이러스마다 Queue로 접근하며 확산할텐데, 그럼 그 때의 시간을 어떻게 기록하지?' 에 대한 고민의 결과였다..&lt;/p&gt;
&lt;p data-ke-size=&quot;size14&quot;&gt;&amp;nbsp;- 저것을 기록하기 위해 copyMap을 만들고, deep copy를 해서 직접 배열 내의 값을 time으로 할당하는 작업을 가졌다. (활용도 안하면서)&lt;/p&gt;
&lt;p data-ke-size=&quot;size14&quot;&gt;&amp;nbsp;- 왜 계속 실제 map을 바꿔야 한다고 생각했을까? 방문 배열만 활용해서 방문한 것 처럼 처리가 되는데&lt;/p&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size18&quot;&gt;&lt;b&gt;2. 비활성 바이러스더라도 지나갈 순 있다.&lt;/b&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size14&quot;&gt;&amp;nbsp;- 비활성 바이러스에 대한 처리를 아예 하지 않았다. 생각을 못한거다..&lt;/p&gt;
&lt;p data-ke-size=&quot;size14&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;hr contenteditable=&quot;false&quot; data-ke-type=&quot;horizontalRule&quot; data-ke-style=&quot;style1&quot; /&gt;
&lt;p&gt;이건 조합을 활용한 BFS 문제다. 따라서 조합에 대한 코드를 빠삭히 알고 있어야 한다.&lt;/p&gt;
&lt;p&gt;또 실제 지도를 업데이트 해야 한다는 생각때문에 코드를 복잡하게 구성했다. 예시에 나온 것 처럼 실제 맵을 업데이트 할 필요 없이, 방문 배열만 확인하면 된다. 그래서 비어있는 칸을 blank로 입력 받아서 이를 확인하는 작업을 수행하면 된다.&lt;/p&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;사실 더 쉽게 짤 수 있을 것 같은데, 일단 내가 틀렸던 부분 위주로 수정해서 업로드했다.&lt;/p&gt;
&lt;p&gt;다양한 반례에 대해 생각하자.&lt;/p&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;</description>
      <category>알고리즘</category>
      <category>백준</category>
      <category>알고리즘풀이</category>
      <author>3sammy</author>
      <guid isPermaLink="true">https://23log.tistory.com/96</guid>
      <comments>https://23log.tistory.com/96#entry96comment</comments>
      <pubDate>Fri, 2 Apr 2021 08:17:45 +0900</pubDate>
    </item>
    <item>
      <title>[JAVA][백준 16236] 아기상어</title>
      <link>https://23log.tistory.com/95</link>
      <description>&lt;table style=&quot;border-collapse: collapse; width: 100%; height: 95px;&quot; border=&quot;1&quot;&gt;
&lt;tbody&gt;
&lt;tr style=&quot;height: 19px;&quot;&gt;
&lt;td style=&quot;width: 17.2093%; text-align: center; height: 19px;&quot;&gt;&lt;b&gt;사이트명&lt;/b&gt;&lt;/td&gt;
&lt;td style=&quot;width: 82.7907%; height: 19px;&quot;&gt;백준&lt;/td&gt;
&lt;/tr&gt;
&lt;tr style=&quot;height: 19px;&quot;&gt;
&lt;td style=&quot;width: 17.2093%; text-align: center; height: 19px;&quot;&gt;&lt;b&gt;문제 링크&lt;/b&gt;&lt;/td&gt;
&lt;td style=&quot;width: 82.7907%; height: 19px;&quot;&gt;&lt;a href=&quot;https://www.acmicpc.net/problem/16236&quot; target=&quot;_blank&quot; rel=&quot;noopener&quot;&gt;www.acmicpc.net/problem/16236&lt;/a&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;tr style=&quot;height: 19px;&quot;&gt;
&lt;td style=&quot;width: 17.2093%; text-align: center; height: 19px;&quot;&gt;&lt;b&gt;주요 알고리즘&lt;/b&gt;&lt;/td&gt;
&lt;td style=&quot;width: 82.7907%; height: 19px;&quot;&gt;시뮬레이션, BFS,&lt;/td&gt;
&lt;/tr&gt;
&lt;tr style=&quot;height: 19px;&quot;&gt;
&lt;td style=&quot;width: 17.2093%; text-align: center; height: 19px;&quot;&gt;&lt;b&gt;사용 언어&lt;/b&gt;&lt;/td&gt;
&lt;td style=&quot;width: 82.7907%; height: 19px;&quot;&gt;&lt;span style=&quot;color: #ee2323;&quot;&gt;&lt;b&gt;Java 자바&lt;br /&gt;&lt;/b&gt;&lt;/span&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;tr style=&quot;height: 19px;&quot;&gt;
&lt;td style=&quot;width: 17.2093%; text-align: center; height: 19px;&quot; colspan=&quot;2&quot;&gt;&lt;span style=&quot;color: #9d9d9d;&quot;&gt;알고리즘이 낯선 사람들을 위해 생각 노트를 같이 두었습니다.&lt;/span&gt;&lt;span style=&quot;color: #ee2323;&quot;&gt;&lt;b&gt;&lt;br /&gt;&lt;/b&gt;&lt;/span&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;
&lt;h2 data-ke-size=&quot;size26&quot;&gt;&lt;span style=&quot;color: #1a5490;&quot;&gt;&lt;b&gt;1. 문제&lt;/b&gt;&lt;/span&gt;&lt;/h2&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-origin-width=&quot;0&quot; data-origin-height=&quot;0&quot; data-ke-mobilestyle=&quot;widthContent&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/cFIPpo/btq1g9wsn3c/OSg9karV4aoEr9UtfYXLg1/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/cFIPpo/btq1g9wsn3c/OSg9karV4aoEr9UtfYXLg1/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/cFIPpo/btq1g9wsn3c/OSg9karV4aoEr9UtfYXLg1/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FcFIPpo%2Fbtq1g9wsn3c%2FOSg9karV4aoEr9UtfYXLg1%2Fimg.png&quot; data-origin-width=&quot;0&quot; data-origin-height=&quot;0&quot; data-ke-mobilestyle=&quot;widthContent&quot; onerror=&quot;this.onerror=null; this.src='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png'; this.srcset='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png';&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;/p&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;
&lt;h2 data-ke-size=&quot;size26&quot;&gt;&lt;span style=&quot;color: #1a5490;&quot;&gt;&lt;b&gt;2. 입력 / 출력&lt;/b&gt;&lt;/span&gt;&lt;/h2&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-origin-width=&quot;0&quot; data-origin-height=&quot;0&quot; data-ke-mobilestyle=&quot;widthContent&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/bSVeGC/btq1haB4xJA/VmCPqG7ls61f5gbHjPqZR1/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/bSVeGC/btq1haB4xJA/VmCPqG7ls61f5gbHjPqZR1/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/bSVeGC/btq1haB4xJA/VmCPqG7ls61f5gbHjPqZR1/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FbSVeGC%2Fbtq1haB4xJA%2FVmCPqG7ls61f5gbHjPqZR1%2Fimg.png&quot; data-origin-width=&quot;0&quot; data-origin-height=&quot;0&quot; data-ke-mobilestyle=&quot;widthContent&quot; onerror=&quot;this.onerror=null; this.src='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png'; this.srcset='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png';&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;/p&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;
&lt;hr contenteditable=&quot;false&quot; data-ke-type=&quot;horizontalRule&quot; data-ke-style=&quot;style2&quot; /&gt;
&lt;h2 data-ke-size=&quot;size26&quot;&gt;&lt;span style=&quot;color: #1a5490;&quot;&gt;&lt;b&gt;3. 풀이&lt;/b&gt;&lt;/span&gt;&lt;/h2&gt;
&lt;h4 data-ke-size=&quot;size20&quot;&gt;&lt;b&gt;3-1. 생각 노트&lt;/b&gt;&lt;/h4&gt;
&lt;p&gt;골드4의 아기상어 문제.&lt;/p&gt;
&lt;p&gt;일단 삼성의 주요 기출 형태(구현) 중 하나이다. 조합같은 개념이 적용되진 않아서 어려운 편은 아니다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size18&quot;&gt;그저 &lt;b&gt;&lt;span style=&quot;color: #ee2323;&quot;&gt;&lt;i&gt;문제를 잘 읽고, 그대로 잘 구현 &lt;/i&gt;&lt;/span&gt;&lt;/b&gt;하면 된다.&lt;/p&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-filename=&quot;algorithms book-84.jpg&quot; data-origin-width=&quot;2386&quot; data-origin-height=&quot;1491&quot; data-ke-mobilestyle=&quot;widthContent&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/1xz2n/btq1lbN0Uik/tDLVvOZLHcvljgLwfn1220/img.jpg&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/1xz2n/btq1lbN0Uik/tDLVvOZLHcvljgLwfn1220/img.jpg&quot; data-alt=&quot;상어는 물고리르 탐색하고 -&amp;amp;amp;gt; 식사 가능한걸 먹는다!&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/1xz2n/btq1lbN0Uik/tDLVvOZLHcvljgLwfn1220/img.jpg&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2F1xz2n%2Fbtq1lbN0Uik%2FtDLVvOZLHcvljgLwfn1220%2Fimg.jpg&quot; data-filename=&quot;algorithms book-84.jpg&quot; data-origin-width=&quot;2386&quot; data-origin-height=&quot;1491&quot; data-ke-mobilestyle=&quot;widthContent&quot; onerror=&quot;this.onerror=null; this.src='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png'; this.srcset='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png';&quot;/&gt;&lt;/span&gt;&lt;figcaption&gt;상어는 물고리르 탐색하고 -&amp;gt; 식사 가능한걸 먹는다!&lt;/figcaption&gt;
&lt;/figure&gt;
&lt;/p&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;
&lt;h4 data-ke-size=&quot;size20&quot;&gt;&lt;b&gt;3-2. 변수명&lt;/b&gt;&lt;/h4&gt;
&lt;table style=&quot;border-collapse: collapse; width: 100%; height: 58px;&quot; border=&quot;1&quot; data-ke-style=&quot;style13&quot;&gt;
&lt;tbody&gt;
&lt;tr style=&quot;height: 19px;&quot;&gt;
&lt;td style=&quot;width: 20.6977%; text-align: center; height: 19px;&quot;&gt;&lt;b&gt;변수명&lt;/b&gt;&lt;/td&gt;
&lt;td style=&quot;width: 70.814%; text-align: center; height: 19px;&quot;&gt;&lt;b&gt;설명&lt;/b&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;tr style=&quot;height: 20px;&quot;&gt;
&lt;td style=&quot;width: 20.6977%; text-align: center; height: 20px;&quot;&gt;Class Fish&lt;/td&gt;
&lt;td style=&quot;height: 20px; width: 70.814%;&quot;&gt;물고기들의 시간값(거리)를 기록하기 위한 객체&lt;/td&gt;
&lt;/tr&gt;
&lt;tr style=&quot;height: 19px;&quot;&gt;
&lt;td style=&quot;width: 20.6977%; text-align: center; height: 19px;&quot;&gt;
&lt;p&gt;ArrayList&amp;lt;Fish&amp;gt; &lt;span&gt;&lt;i&gt;feedList&lt;/i&gt;&lt;/span&gt;&lt;/p&gt;
&lt;/td&gt;
&lt;td style=&quot;height: 19px; width: 70.814%;&quot;&gt;식사 가능한 경우 들어가는 후보 먹이 리스트! 추후 정렬을 통해 어느것을 먹을지 결정한다.&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td style=&quot;width: 20.6977%; text-align: center;&quot;&gt;
&lt;p&gt;Queue&amp;lt;Fish&amp;gt; &lt;span&gt;q&lt;/span&gt;&lt;/p&gt;
&lt;/td&gt;
&lt;td style=&quot;width: 70.814%;&quot;&gt;이동 가능한 경우에 들어가는 이동 대기열!&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;
&lt;h4 data-ke-size=&quot;size20&quot;&gt;&lt;b&gt;3-3. 코드 보기&lt;/b&gt;&lt;/h4&gt;
&lt;pre id=&quot;code_1608395675645&quot; class=&quot;java&quot; data-ke-language=&quot;java&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;import java.io.BufferedReader;
import java.io.InputStreamReader;
import java.util.ArrayList;
import java.util.Collections;
import java.util.Comparator;
import java.util.LinkedList;
import java.util.Queue;

public class BOJ16236_아기상어 {

	// 먹이가 될 물고기
	private static class Fish {
		int x, y, time;

		public Fish(int x, int y, int time) {
			super();
			this.x = x;
			this.y = y;
			this.time = time;
		}
	}
	
	static int N;
	static int[][] map;
	static boolean[][] isVisit;
	
	static Fish shark;		// 상어도 물고기! 상어의 위치를 기록
	static int size = 2;
	static int eaten = 0;
	
	static ArrayList&amp;lt;Fish&amp;gt; feedList = new ArrayList&amp;lt;&amp;gt;();
	static int answer;
	
	static int[] dx = {-1, 1, 0, 0};
	static int[] dy = {0, 0, -1, 1};

	public static void main(String[] args) throws Exception {
		BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
		
		String[] input = br.readLine().split(&quot; &quot;);
		N = Integer.parseInt(input[0]);
		
		map = new int[N][N];
		isVisit = new boolean[N][N];
		
		for (int i = 0; i &amp;lt; N; i++) {
			input = br.readLine().split(&quot; &quot;);
			
			for (int j = 0; j &amp;lt; N; j++) {	
				map[i][j] = Integer.parseInt(input[j]);
				
				if(map[i][j] == 9) {
					shark = new Fish(i, j, 0);
					map[i][j] = 0;
				}
			}
		}
		
		simulation();
		System.out.println(answer);
	}

	private static void simulation() {
		
		Queue&amp;lt;Fish&amp;gt; q = new LinkedList&amp;lt;&amp;gt;();
		q.add(shark);
		isVisit[shark.x][shark.y] = true;
		
		while(true) {
			while(!q.isEmpty()) {
				Fish now = q.poll();
				int time = now.time;

				
				for (int k = 0; k &amp;lt; 4; k++) {
					int nx = now.x + dx[k];
					int ny = now.y + dy[k];
					
					// 범위 밖 -&amp;gt; 아웃
					if(!(0 &amp;lt;= nx &amp;amp;&amp;amp; nx &amp;lt; N &amp;amp;&amp;amp; 0 &amp;lt;= ny &amp;amp;&amp;amp; ny &amp;lt; N) || isVisit[nx][ny]) continue;
					
					// [식사 가능] 먹이 리스트에 추가
					if(map[nx][ny] &amp;lt; size &amp;amp;&amp;amp; map[nx][ny] != 0) {
						q.add(new Fish(nx, ny, time+1));
						isVisit[nx][ny] = true;
						feedList.add(new Fish(nx, ny, time+1));
					}
					
					// [이동만 가능] 사이즈랑 동일 OR 비어있음(0)
					if(map[nx][ny] == size || map[nx][ny] == 0) {
						q.add(new Fish(nx, ny, time+1));
						isVisit[nx][ny] = true;
					}
				}
			}
			
			if(!feedList.isEmpty()) {
				eat();
				// 식사가 끝났으면, 방문 배열 초기화
				
				q.clear();
				isVisit = new boolean[N][N];

				// 다시 이동하는 큐(q)에다가 현재 상어 추가
				q.add(shark);
				isVisit[shark.x][shark.y] = true;
			}else {
				return;
			}
		}
		
	}

	// 먹이 리스트가 값이 존재하면, 식사 시작
	private static void eat() {
		
		// 정렬을 통해 우선순위별로 먹이 리스트 재정렬
		Collections.sort(feedList, new Comparator&amp;lt;Fish&amp;gt;() {
			@Override
			public int compare(Fish o1, Fish o2) {
				if(o1.time == o2.time) {
					if(o1.x == o2.x) {
						if(o1.y &amp;gt; o2.y) {
							return 1;
						}else {
							return -1;
						}
					}else {
						if(o1.x &amp;gt; o2.x) {
							return 1;
						}else {
							return -1;
						}				
					}
				}else if(o1.time &amp;gt; o2.time){
					return 1;
				}else {
					return -1;
				}
			};
		});

		Fish now = feedList.get(0);
		
		// 상어 위치 이동, 상어가 먹은 횟수 증가, 상어 걸린 시간 증가
		shark.x = now.x;
		shark.y = now.y;
		
		if(++eaten == size) {
			size++;
			eaten = 0;
		}
		
		answer += now.time;
		
		// 지도 위에 해당 위치 0 처리
		map[now.x][now.y] = 0;
		
		// 먹이 리스트 초기화
		feedList.clear();
	}

}
&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;
&lt;h4 data-ke-size=&quot;size20&quot;&gt;&lt;b&gt;3-4. 마무리&lt;/b&gt;&lt;/h4&gt;
&lt;p&gt;&lt;span style=&quot;color: #333333;&quot;&gt;이전에 한번 푼 문제였는데, 다시 푸니 틀렸다...&lt;/span&gt;&lt;/p&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;&lt;b&gt;&lt;span style=&quot;color: #333333;&quot;&gt;틀린 이유 분석&lt;/span&gt;&lt;/b&gt;&lt;/p&gt;
&lt;p&gt;&lt;span&gt;&lt;/span&gt;&amp;nbsp;- BFS를 수행할 때, time+1로 시간값이 증가하므로 4방 탐색을 하는 단계마다 먹이 리스트에 넣으면 거리(시간)계산을 안해도 되겠다는 생각으로 접근&lt;/p&gt;
&lt;p&gt;&amp;nbsp;- 하지만, 몇몇 값에선, time값이 늦게 반영되어 동일한 시간값이지만 체킹을 못하고 넘어가는 경우가 발생..&lt;/p&gt;
&lt;p&gt;&amp;nbsp;- 아, 식사 가능한 경우에도 먹이 리스트에 넣고 + 이동 Q에도 넣어야 한다. 이부분 살짝 애매하면 꼬인다.&lt;/p&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;&lt;b&gt;따라서,&lt;/b&gt; 로직 자체를 while로 무한루프를 만들고 [BFS 탐색 -&amp;gt; 식사] 를 반복하는 형태로 변경&lt;/p&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;&lt;b&gt;&lt;span style=&quot;color: #006dd7;&quot;&gt;BFS는 BFS로만 두고, 로직을 끼우지 말자. 딱 탐색이라는 기능만 구현해두는게 맞다.&lt;/span&gt;&lt;/b&gt;&lt;/p&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;&lt;span style=&quot;color: #333333;&quot;&gt;아.&amp;nbsp;&lt;/span&gt;&lt;/p&gt;
&lt;p&gt;&lt;span style=&quot;color: #333333;&quot;&gt;이전 코드를 다시 보는데, 내가 썼던 변수명이나 스타일이 똑같았다..&lt;/span&gt;&lt;/p&gt;
&lt;p&gt;&lt;span style=&quot;color: #333333;&quot;&gt;역시 사람 안변한다는 걸 느낀다.. 아니, 변하진 않고 더 발전하겠지..&lt;/span&gt;&lt;/p&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;</description>
      <category>알고리즘</category>
      <category>백준</category>
      <category>알고리즘풀이</category>
      <author>3sammy</author>
      <guid isPermaLink="true">https://23log.tistory.com/95</guid>
      <comments>https://23log.tistory.com/95#entry95comment</comments>
      <pubDate>Tue, 30 Mar 2021 07:50:53 +0900</pubDate>
    </item>
  </channel>
</rss>