<?xml version="1.0" encoding="UTF-8"?>
<rss version="2.0">
  <channel>
    <title>산책하는 댕발자</title>
    <link>https://built.tistory.com/</link>
    <description></description>
    <language>ko</language>
    <pubDate>Wed, 10 Jun 2026 10:24:10 +0900</pubDate>
    <generator>TISTORY</generator>
    <ttl>100</ttl>
    <managingEditor>github.com/zlrloy</managingEditor>
    <image>
      <title>산책하는 댕발자</title>
      <url>https://tistory1.daumcdn.net/tistory/6410021/attach/f00051b024dd4aa38af04968e9c7e114</url>
      <link>https://built.tistory.com</link>
    </image>
    <item>
      <title>Connection lost: The server closed the connection 에러 해결</title>
      <link>https://built.tistory.com/153</link>
      <description>&lt;h4 data-ke-size=&quot;size20&quot;&gt;&lt;b&gt;에러&lt;/b&gt;&lt;/h4&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;API 호출시 500 에러가 났고 서버 로그는 The server closed the connection 메시지가 반복적으로 나타나고 있었다.&lt;/p&gt;
&lt;pre class=&quot;routeros&quot;&gt;&lt;code&gt;SequelizeConnectionError: Connection lost: The server closed the connection.
&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;/p&gt;
&lt;p style=&quot;color: #333333; text-align: start;&quot; data-ke-size=&quot;size16&quot;&gt;필자는 무료 체험판 크레딧이 모두 소진되면서&lt;span&gt;&lt;b&gt; GCP&lt;/b&gt; &lt;/span&gt;&lt;b&gt;Cloud SQL 인스턴스가 자동으로 정지&lt;/b&gt;되면서 DB 연결에 오류가 발생한 것이다.&lt;/p&gt;
&lt;pre class=&quot;bash&quot; data-ke-language=&quot;bash&quot;&gt;&lt;code&gt;failed to connect to instance:
fetch ephemeral cert failed:
googleapi: Error 409:
The instance or operation is not in an appropriate state to handle the request.
invalidState&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&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-filename=&quot;blob&quot; data-origin-width=&quot;1636&quot; data-origin-height=&quot;171&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/vEtKK/dJMcahq80jR/48eignCSrXzqrrNVAFEr00/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/vEtKK/dJMcahq80jR/48eignCSrXzqrrNVAFEr00/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/vEtKK/dJMcahq80jR/48eignCSrXzqrrNVAFEr00/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FvEtKK%2FdJMcahq80jR%2F48eignCSrXzqrrNVAFEr00%2Fimg.png&quot; onerror=&quot;this.onerror=null; this.src='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png'; this.srcset='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png';&quot; loading=&quot;lazy&quot; width=&quot;1636&quot; height=&quot;171&quot; data-filename=&quot;blob&quot; data-origin-width=&quot;1636&quot; data-origin-height=&quot;171&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;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;h4 data-ke-size=&quot;size20&quot;&gt;&lt;b&gt;해결&lt;/b&gt;&lt;/h4&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;팀원에게 상황을 공유한 후 GCP 결제 계정을 업그레이드하고 Cloud SQL 인스턴스를 다시 활성화했다.&lt;/p&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignLeft&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-filename=&quot;blob&quot; data-origin-width=&quot;555&quot; data-origin-height=&quot;773&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/lMh2n/dJMcadvoz0f/aSPHjAKVKLIRHy4ouEyOyk/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/lMh2n/dJMcadvoz0f/aSPHjAKVKLIRHy4ouEyOyk/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/lMh2n/dJMcadvoz0f/aSPHjAKVKLIRHy4ouEyOyk/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FlMh2n%2FdJMcadvoz0f%2FaSPHjAKVKLIRHy4ouEyOyk%2Fimg.png&quot; onerror=&quot;this.onerror=null; this.src='//t1.daumcdn.net/tistory_admin/static/images/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;557&quot; data-filename=&quot;blob&quot; data-origin-width=&quot;555&quot; data-origin-height=&quot;773&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;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;업그레이드 완료 후 Cloud SQL 인스턴스가 정상 상태로 복구되었고 모든 기능이 정상 동작했다.&lt;/p&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignLeft&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-filename=&quot;blob&quot; data-origin-width=&quot;428&quot; data-origin-height=&quot;69&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/wIbU5/dJMcac4nSbn/L3xkEHabWBAA1dmgAIiDlK/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/wIbU5/dJMcac4nSbn/L3xkEHabWBAA1dmgAIiDlK/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/wIbU5/dJMcac4nSbn/L3xkEHabWBAA1dmgAIiDlK/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FwIbU5%2FdJMcac4nSbn%2FL3xkEHabWBAA1dmgAIiDlK%2Fimg.png&quot; onerror=&quot;this.onerror=null; this.src='//t1.daumcdn.net/tistory_admin/static/images/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;64&quot; data-filename=&quot;blob&quot; data-origin-width=&quot;428&quot; data-origin-height=&quot;69&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;</description>
      <category>그외 기록/트러블 슈팅</category>
      <category>DB</category>
      <category>GCP</category>
      <category>SQL</category>
      <category>실패</category>
      <category>에러</category>
      <category>연결</category>
      <category>인스턴스</category>
      <author>github.com/zlrloy</author>
      <guid isPermaLink="true">https://built.tistory.com/153</guid>
      <comments>https://built.tistory.com/153#entry153comment</comments>
      <pubDate>Wed, 3 Jun 2026 22:06:13 +0900</pubDate>
    </item>
    <item>
      <title>[PM2] ENOSPC: no space left on device, write 에러 해결 (log 용량 비우기)</title>
      <link>https://built.tistory.com/152</link>
      <description>&lt;p data-end=&quot;176&quot; data-start=&quot;160&quot; data-ke-size=&quot;size16&quot;&gt;갑자기 서버에 CORS 에러가 났다.&lt;/p&gt;
&lt;p data-end=&quot;176&quot; data-start=&quot;160&quot; data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-end=&quot;176&quot; data-start=&quot;160&quot; data-ke-size=&quot;size16&quot;&gt;PM2 로그($pm2 logs)를 확인해보니&lt;/p&gt;
&lt;p data-end=&quot;176&quot; data-start=&quot;160&quot; data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;color: #ee2323;&quot;&gt;&lt;b&gt;Error: ENOSPC: no spase left on device, write&lt;/b&gt;&lt;/span&gt;&lt;/p&gt;
&lt;div&gt;
&lt;div&gt;
&lt;div&gt;
&lt;div&gt;
&lt;div&gt;
&lt;div&gt;
&lt;div&gt;
&lt;div&gt;
&lt;div&gt;
&lt;div&gt;
&lt;div id=&quot;code-block-viewer&quot;&gt;
&lt;div&gt;
&lt;pre class=&quot;bash&quot; data-ke-language=&quot;bash&quot;&gt;&lt;code&gt;/home/ubuntu/.pm2/logs/api-error.log last 15 lines:
0|api      |       throw er; // Unhandled 'error' event
0|api      |       ^
0|api      |
0|api      | Error: ENOSPC: no space left on device, write
0|api      | Emitted 'error' event at:
0|api      |     at WriteStream.&amp;lt;anonymous&amp;gt; (/home/ubuntu/calvak-api/node_modules/file-stream-rotator/FileStreamRotator.js:697:15)
0|api      |     at WriteStream.emit (node:events:390:28)
0|api      |     at WriteStream.emit (node:domain:475:12)
0|api      |     at emitErrorNT (node:internal/streams/destroy:157:8)
0|api      |     at emitErrorCloseNT (node:internal/streams/destroy:122:3)
0|api      |     at processTicksAndRejections (node:internal/process/task_queues:83:21) {
0|api      |   errno: -28,
0|api      |   code: 'ENOSPC',
0|api      |   syscall: 'write'
0|api      | }&lt;/code&gt;&lt;/pre&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;div&gt;&amp;nbsp;&lt;/div&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;div&gt;
&lt;div&gt;
&lt;div&gt;
&lt;div&gt;
&lt;div&gt;
&lt;div&gt;
&lt;div&gt;
&lt;div&gt;
&lt;div&gt;&lt;b&gt;원인은 디스크 용량 부족.&lt;/b&gt;&lt;/div&gt;
&lt;div&gt;&amp;nbsp;&lt;/div&gt;
&lt;div&gt;&lt;b&gt;write가 있는거 보니 무언가를 파일에 쓰려고 했으나 실패했나보다.&lt;/b&gt;&lt;/div&gt;
&lt;/div&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;div&gt;
&lt;div&gt;
&lt;div&gt;
&lt;div id=&quot;code-block-viewer&quot;&gt;
&lt;div&gt;&amp;nbsp;&lt;/div&gt;
&lt;div&gt;&amp;nbsp;&lt;/div&gt;
&lt;div&gt;&amp;nbsp;&lt;/div&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;h3 data-end=&quot;906&quot; data-start=&quot;895&quot; data-section-id=&quot;1x7b9yv&quot; data-ke-size=&quot;size23&quot;&gt;&lt;b&gt;디스크 용량 확인&lt;/b&gt;&lt;/h3&gt;
&lt;p data-end=&quot;929&quot; data-start=&quot;908&quot; data-ke-size=&quot;size16&quot;&gt;디스크가 얼마나 꽉 차 있는지 확인해보자.&lt;/p&gt;
&lt;div&gt;
&lt;div&gt;
&lt;div&gt;
&lt;div&gt;
&lt;div&gt;
&lt;div&gt;
&lt;div&gt;
&lt;div&gt;
&lt;div&gt;
&lt;div&gt;
&lt;div id=&quot;code-block-viewer&quot;&gt;
&lt;div&gt;
&lt;pre class=&quot;ebnf&quot;&gt;&lt;code&gt;df -h&lt;/code&gt;&lt;/pre&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;div&gt;&amp;nbsp;&lt;/div&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;p data-end=&quot;964&quot; data-start=&quot;961&quot; data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;div&gt;
&lt;div&gt;
&lt;div&gt;
&lt;div&gt;
&lt;div&gt;
&lt;div&gt;
&lt;div&gt;
&lt;div&gt;
&lt;div&gt;
&lt;div&gt;
&lt;div id=&quot;code-block-viewer&quot;&gt;
&lt;div&gt;
&lt;pre class=&quot;bash&quot; data-ke-language=&quot;bash&quot;&gt;&lt;code&gt;# 결과
Filesystem      Size  Used Avail Use% Mounted on
/dev/root        15G   15G  3.5M 100% /&lt;/code&gt;&lt;/pre&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;div&gt;&amp;nbsp;&lt;/div&gt;
&lt;div&gt;디스크가 100% 꽉 차 있었다.&lt;/div&gt;
&lt;div&gt;&amp;nbsp;&lt;/div&gt;
&lt;div&gt;남은 용량은 3.5M&lt;/div&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;div&gt;
&lt;div id=&quot;code-block-viewer&quot;&gt;
&lt;div&gt;&amp;nbsp;&lt;/div&gt;
&lt;div&gt;&amp;nbsp;&lt;/div&gt;
&lt;div&gt;&amp;nbsp;&lt;/div&gt;
&lt;div&gt;서버는 요청이 올 때마다 요청로그, 에러로그, DB쿼리로그 등을 디스크 파일로 계속 기록한다.&lt;/div&gt;
&lt;div&gt;&amp;nbsp;&lt;/div&gt;
&lt;div&gt;&amp;nbsp;&lt;/div&gt;
&lt;div&gt;서버는&amp;nbsp;요청이&amp;nbsp;올&amp;nbsp;때마다&lt;br /&gt;&lt;br /&gt;요청&amp;nbsp;로그&lt;br /&gt;&lt;br /&gt;에러&amp;nbsp;로그&lt;br /&gt;&lt;br /&gt;DB&amp;nbsp;쿼리&amp;nbsp;로그&lt;br /&gt;&lt;br /&gt;이걸&amp;nbsp;디스크&amp;nbsp;파일로&amp;nbsp;계속&amp;nbsp;기록합니다.&lt;br /&gt;&lt;br /&gt;그래서 로그가 많으면 디스크가 금방 찹니다.&lt;/div&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;p data-end=&quot;1679&quot; data-start=&quot;1667&quot; data-section-id=&quot;1mbnfdz&quot; data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-end=&quot;1679&quot; data-start=&quot;1667&quot; data-section-id=&quot;1mbnfdz&quot; data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-end=&quot;1679&quot; data-start=&quot;1667&quot; data-section-id=&quot;1mbnfdz&quot; data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-end=&quot;1679&quot; data-start=&quot;1667&quot; data-section-id=&quot;1mbnfdz&quot; data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-end=&quot;1679&quot; data-start=&quot;1667&quot; data-section-id=&quot;1mbnfdz&quot; data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;h3 data-end=&quot;1679&quot; data-start=&quot;1667&quot; data-section-id=&quot;1mbnfdz&quot; data-ke-size=&quot;size23&quot;&gt;&lt;b&gt;로그 용량 확인하기&lt;/b&gt;&lt;/h3&gt;
&lt;p data-end=&quot;1701&quot; data-start=&quot;1681&quot; data-ke-size=&quot;size16&quot;&gt;어떤 로그가 문제인지 용량을 확인해보자.&lt;/p&gt;
&lt;div&gt;
&lt;div&gt;
&lt;div&gt;
&lt;div&gt;
&lt;div&gt;
&lt;div&gt;
&lt;div&gt;
&lt;div&gt;
&lt;div&gt;
&lt;div&gt;
&lt;div id=&quot;code-block-viewer&quot;&gt;
&lt;div&gt;
&lt;pre class=&quot;jboss-cli&quot;&gt;&lt;code&gt;ls -lh ~/.pm2/logs&lt;/code&gt;&lt;/pre&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;div&gt;&amp;nbsp;&lt;/div&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;p data-end=&quot;1781&quot; data-start=&quot;1761&quot; data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-end=&quot;1781&quot; data-start=&quot;1761&quot; data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-end=&quot;1781&quot; data-start=&quot;1761&quot; data-ke-size=&quot;size16&quot;&gt;여기서 로그 파일 크기를 보면 된다.&lt;/p&gt;
&lt;div&gt;
&lt;div&gt;
&lt;div&gt;
&lt;div&gt;
&lt;div&gt;
&lt;div&gt;
&lt;div&gt;
&lt;div&gt;
&lt;div&gt;
&lt;div&gt;
&lt;div id=&quot;code-block-viewer&quot;&gt;
&lt;div&gt;
&lt;pre class=&quot;angelscript&quot;&gt;&lt;code&gt;-rw-r--r-- 1 ubuntu ubuntu 8.2G api-out.log
-rw-r--r-- 1 ubuntu ubuntu 4.1G api-error.log&lt;/code&gt;&lt;/pre&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;div&gt;&amp;nbsp;&lt;/div&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;p data-end=&quot;1937&quot; data-start=&quot;1902&quot; data-ke-size=&quot;size16&quot;&gt;&lt;span&gt;몇 GB 크기의 로그 파일이 확인된다면,&lt;/span&gt;&lt;br /&gt;&lt;span&gt;디스크 용량을 상당 부분 차지하고 있는 원인으로 의심할 수 있다.&lt;/span&gt;&lt;/p&gt;
&lt;p data-end=&quot;1937&quot; data-start=&quot;1902&quot; data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-end=&quot;1937&quot; data-start=&quot;1902&quot; data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-end=&quot;1937&quot; data-start=&quot;1902&quot; data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-end=&quot;1937&quot; data-start=&quot;1902&quot; data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-end=&quot;1937&quot; data-start=&quot;1902&quot; data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;h3 data-end=&quot;1962&quot; data-start=&quot;1944&quot; data-section-id=&quot;uupo72&quot; data-ke-size=&quot;size23&quot;&gt;&lt;b&gt;로그 비우기 &lt;/b&gt;&lt;span style=&quot;color: #9d9d9d;&quot;&gt;(삭제X)&lt;/span&gt;&lt;/h3&gt;
&lt;p data-end=&quot;1985&quot; data-start=&quot;1964&quot; data-ke-size=&quot;size16&quot;&gt;로그 파일은 삭제보다 &lt;b&gt;내용만 비우는 방식&lt;/b&gt;이 안전하다.&lt;/p&gt;
&lt;p data-end=&quot;2031&quot; data-start=&quot;2028&quot; data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-end=&quot;2031&quot; data-start=&quot;2028&quot; data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-end=&quot;2127&quot; data-start=&quot;2115&quot; data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;font-family: -apple-system, BlinkMacSystemFont, 'Helvetica Neue', 'Apple SD Gothic Neo', Arial, sans-serif; letter-spacing: 0px;&quot;&gt;위에서 큰 용량을 차지하는 파일 내용을 비워준다.&lt;/span&gt;&lt;/p&gt;
&lt;div&gt;
&lt;div&gt;
&lt;div&gt;
&lt;div&gt;
&lt;div&gt;
&lt;div id=&quot;code-block-viewer&quot;&gt;
&lt;div&gt;
&lt;pre class=&quot;pgsql&quot;&gt;&lt;code&gt;truncate -s 0 ~/.pm2/logs/npm-start-out.log&lt;/code&gt;&lt;/pre&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;div&gt;&amp;nbsp;&lt;/div&gt;
&lt;div&gt;truncate -s 0: 파일 크기를 0바이트로 줄인다. (파일 유지하고 내용만 비움)&lt;/div&gt;
&lt;/div&gt;
&lt;div&gt;
&lt;div&gt;
&lt;div&gt;
&lt;div&gt;
&lt;div&gt;
&lt;div&gt;
&lt;div&gt;
&lt;div&gt;
&lt;div&gt;
&lt;div&gt;
&lt;div id=&quot;code-block-viewer&quot;&gt;
&lt;div&gt;&amp;nbsp;&lt;/div&gt;
&lt;div&gt;&amp;nbsp;&lt;/div&gt;
&lt;div&gt;&amp;nbsp;&lt;/div&gt;
&lt;div&gt;&amp;nbsp;&lt;/div&gt;
&lt;div&gt;&amp;nbsp;&lt;/div&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;h3 data-end=&quot;2315&quot; data-start=&quot;2305&quot; data-section-id=&quot;1ywoek7&quot; data-ke-size=&quot;size23&quot;&gt;&lt;b&gt;디스크 확인&lt;/b&gt;&lt;/h3&gt;
&lt;p data-end=&quot;2327&quot; data-start=&quot;2317&quot; data-ke-size=&quot;size16&quot;&gt;다시 디스크를 확인해보자.&lt;/p&gt;
&lt;div&gt;
&lt;div&gt;
&lt;div&gt;
&lt;div&gt;
&lt;div&gt;
&lt;div&gt;
&lt;div&gt;
&lt;div&gt;
&lt;div&gt;
&lt;div&gt;
&lt;div id=&quot;code-block-viewer&quot;&gt;
&lt;div&gt;
&lt;pre class=&quot;ebnf&quot;&gt;&lt;code&gt;df -h&lt;/code&gt;&lt;/pre&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;div&gt;&amp;nbsp;&lt;/div&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;p data-end=&quot;2363&quot; data-start=&quot;2360&quot; data-ke-size=&quot;size16&quot;&gt;이전:&lt;/p&gt;
&lt;div&gt;
&lt;div&gt;
&lt;div&gt;
&lt;div&gt;
&lt;div&gt;
&lt;div&gt;
&lt;div&gt;
&lt;div&gt;
&lt;div&gt;&amp;nbsp;&lt;/div&gt;
&lt;/div&gt;
&lt;div&gt;
&lt;div&gt;
&lt;div&gt;
&lt;div id=&quot;code-block-viewer&quot;&gt;
&lt;div&gt;
&lt;pre class=&quot;bash&quot; data-ke-language=&quot;bash&quot;&gt;&lt;code&gt;# 이전
Filesystem  Size  Used Avail Use% Mounted on
/dev/root 15G 15G 3.5M 100%

# 로그 정리 후
/dev/root 15G 8G 7G 53%&lt;/code&gt;&lt;/pre&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;div&gt;&amp;nbsp;&lt;/div&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;p data-end=&quot;2426&quot; data-start=&quot;2418&quot; data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;div&gt;
&lt;div&gt;
&lt;div&gt;
&lt;div&gt;
&lt;div&gt;
&lt;div&gt;
&lt;div&gt;
&lt;div&gt;
&lt;div&gt;&amp;nbsp;&lt;/div&gt;
&lt;/div&gt;
&lt;div&gt;
&lt;div&gt;
&lt;div&gt;
&lt;div id=&quot;code-block-viewer&quot;&gt;
&lt;div&gt;&amp;nbsp;&lt;/div&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;p data-end=&quot;3216&quot; data-start=&quot;3184&quot; 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-end=&quot;3216&quot; data-start=&quot;3184&quot; data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-end=&quot;3216&quot; data-start=&quot;3184&quot; data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-end=&quot;3216&quot; data-start=&quot;3184&quot; data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-end=&quot;3216&quot; data-start=&quot;3184&quot; data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;h4 data-end=&quot;3241&quot; data-start=&quot;3223&quot; data-section-id=&quot;iysbgi&quot; data-ke-size=&quot;size20&quot;&gt;&lt;b&gt;  명령어 정리&lt;/b&gt;&lt;/h4&gt;
&lt;p data-end=&quot;3279&quot; data-start=&quot;3269&quot; data-section-id=&quot;47cevb&quot; data-ke-size=&quot;size16&quot;&gt;- 디스크 상태 확인&lt;/p&gt;
&lt;div&gt;
&lt;div&gt;
&lt;div&gt;
&lt;div&gt;
&lt;div&gt;
&lt;div&gt;
&lt;div&gt;
&lt;div&gt;
&lt;div&gt;
&lt;div&gt;
&lt;div id=&quot;code-block-viewer&quot;&gt;
&lt;div&gt;
&lt;pre class=&quot;ebnf&quot;&gt;&lt;code&gt;df -h&lt;/code&gt;&lt;/pre&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;div&gt;&amp;nbsp;&lt;/div&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;p data-end=&quot;3329&quot; data-start=&quot;3312&quot; data-section-id=&quot;1co33ln&quot; data-ke-size=&quot;size18&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-end=&quot;3329&quot; data-start=&quot;3312&quot; data-section-id=&quot;1co33ln&quot; data-ke-size=&quot;size16&quot;&gt;- 어떤 폴더가 용량 먹는지 확인&lt;/p&gt;
&lt;div&gt;
&lt;div&gt;
&lt;div&gt;
&lt;div&gt;
&lt;div&gt;
&lt;div&gt;
&lt;div&gt;
&lt;div&gt;
&lt;div&gt;
&lt;div&gt;
&lt;div id=&quot;code-block-viewer&quot;&gt;
&lt;div&gt;
&lt;pre class=&quot;mipsasm&quot;&gt;&lt;code&gt;du -sh /*&lt;/code&gt;&lt;/pre&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;div&gt;&amp;nbsp;&lt;/div&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;p data-end=&quot;3379&quot; data-start=&quot;3366&quot; data-section-id=&quot;1idjz34&quot; data-ke-size=&quot;size18&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-end=&quot;3379&quot; data-start=&quot;3366&quot; data-section-id=&quot;1idjz34&quot; data-ke-size=&quot;size16&quot;&gt;- PM2 로그 확인&lt;/p&gt;
&lt;div&gt;
&lt;div&gt;
&lt;div&gt;
&lt;div&gt;
&lt;div&gt;
&lt;div&gt;
&lt;div&gt;
&lt;div&gt;
&lt;div&gt;
&lt;div&gt;
&lt;div id=&quot;code-block-viewer&quot;&gt;
&lt;div&gt;
&lt;pre class=&quot;jboss-cli&quot;&gt;&lt;code&gt;ls -lh ~/.pm2/logs&lt;/code&gt;&lt;/pre&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;div&gt;&amp;nbsp;&lt;/div&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;p data-end=&quot;3435&quot; data-start=&quot;3425&quot; data-section-id=&quot;126x7nq&quot; data-ke-size=&quot;size18&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-end=&quot;3435&quot; data-start=&quot;3425&quot; data-section-id=&quot;126x7nq&quot; data-ke-size=&quot;size16&quot;&gt;- 로그 비우기&lt;/p&gt;
&lt;div&gt;
&lt;div&gt;
&lt;div&gt;
&lt;div&gt;
&lt;div&gt;
&lt;div&gt;
&lt;div&gt;
&lt;div&gt;
&lt;div&gt;
&lt;div&gt;
&lt;div id=&quot;code-block-viewer&quot;&gt;
&lt;div&gt;
&lt;pre class=&quot;maxima&quot;&gt;&lt;code&gt;truncate -s 0 ~/.pm2/logs/api-error.log&lt;/code&gt;&lt;/pre&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;div&gt;&amp;nbsp;&lt;/div&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;</description>
      <category>그외 기록/트러블 슈팅</category>
      <category>cors</category>
      <category>기록</category>
      <category>디스크</category>
      <category>로그</category>
      <category>에러</category>
      <category>오류</category>
      <category>용량</category>
      <category>터짐</category>
      <author>github.com/zlrloy</author>
      <guid isPermaLink="true">https://built.tistory.com/152</guid>
      <comments>https://built.tistory.com/152#entry152comment</comments>
      <pubDate>Tue, 12 May 2026 08:02:51 +0900</pubDate>
    </item>
    <item>
      <title>[Watch Face Studio] 갤럭시워치7 워치페이스 다운로드 및 설정</title>
      <link>https://built.tistory.com/151</link>
      <description>&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;기분전환하듯 워치 배경을 바꾸는 편인데 워치페이스가 조금 심심하게 느껴져 마음에 드는 스타일을 다운받아 설정해보았다.&lt;/p&gt;
&lt;p data-is-only-node=&quot;&quot; data-is-last-node=&quot;&quot; data-end=&quot;560&quot; data-start=&quot;493&quot; data-ke-size=&quot;size16&quot;&gt;다운로드한 워치페이스를 직접 적용하고 원하는 스타일로 워치를 꾸며보자 &lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;h4 data-ke-size=&quot;size20&quot;&gt;&lt;b&gt;1. 휴대폰 설정&lt;/b&gt;&lt;/h4&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;b&gt;1-1. 설정 &amp;gt; 워치 정보&lt;/b&gt;&lt;/p&gt;
&lt;p&gt;&lt;figure class=&quot;imagegridblock&quot;&gt;
  &lt;div class=&quot;image-container&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/cxoi5T/dJMcagS6D4W/Kw5kcY2eEPHF919oLr2Pak/img.jpg&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/cxoi5T/dJMcagS6D4W/Kw5kcY2eEPHF919oLr2Pak/img.jpg&quot; data-is-animation=&quot;false&quot; data-origin-width=&quot;3000&quot; data-origin-height=&quot;3000&quot; data-filename=&quot;KakaoTalk_Photo_2026-05-18-21-33-50 001.jpeg&quot; style=&quot;width: 49.4186%; margin-right: 10px;&quot; data-widthpercent=&quot;50&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/cxoi5T/dJMcagS6D4W/Kw5kcY2eEPHF919oLr2Pak/img.jpg&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2Fcxoi5T%2FdJMcagS6D4W%2FKw5kcY2eEPHF919oLr2Pak%2Fimg.jpg&quot; onerror=&quot;this.onerror=null; this.src='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png'; this.srcset='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png';&quot; loading=&quot;lazy&quot; width=&quot;3000&quot; height=&quot;3000&quot;/&gt;&lt;/span&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/bpo1eX/dJMcageuTez/ZkPagVmQo3p1k0VjPXsqLk/img.jpg&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/bpo1eX/dJMcageuTez/ZkPagVmQo3p1k0VjPXsqLk/img.jpg&quot; data-is-animation=&quot;false&quot; data-origin-width=&quot;3000&quot; data-origin-height=&quot;3000&quot; data-filename=&quot;KakaoTalk_Photo_2026-05-18-21-33-51 002.jpeg&quot; style=&quot;width: 49.4186%;&quot; data-widthpercent=&quot;50&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/bpo1eX/dJMcageuTez/ZkPagVmQo3p1k0VjPXsqLk/img.jpg&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2Fbpo1eX%2FdJMcageuTez%2FZkPagVmQo3p1k0VjPXsqLk%2Fimg.jpg&quot; onerror=&quot;this.onerror=null; this.src='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png'; this.srcset='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png';&quot; loading=&quot;lazy&quot; width=&quot;3000&quot; height=&quot;3000&quot;/&gt;&lt;/span&gt;&lt;/div&gt;
&lt;/figure&gt;
&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;b&gt;1-2. 개발자모드 활성화&lt;/b&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;소프트웨어 정보 &amp;gt; 소프트웨어 버전을 5번 연속 클릭&lt;/p&gt;
&lt;p&gt;&lt;figure class=&quot;imagegridblock&quot;&gt;
  &lt;div class=&quot;image-container&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/cJt3Nr/dJMcaaeia8x/yTKbgRr4DVGS6ZreoZKO6K/img.jpg&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/cJt3Nr/dJMcaaeia8x/yTKbgRr4DVGS6ZreoZKO6K/img.jpg&quot; data-is-animation=&quot;false&quot; data-origin-width=&quot;3000&quot; data-origin-height=&quot;3000&quot; data-filename=&quot;KakaoTalk_Photo_2026-05-18-21-33-51 003.jpeg&quot; style=&quot;width: 32.5581%; margin-right: 10px;&quot; data-widthpercent=&quot;33.33&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/cJt3Nr/dJMcaaeia8x/yTKbgRr4DVGS6ZreoZKO6K/img.jpg&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FcJt3Nr%2FdJMcaaeia8x%2FyTKbgRr4DVGS6ZreoZKO6K%2Fimg.jpg&quot; onerror=&quot;this.onerror=null; this.src='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png'; this.srcset='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png';&quot; loading=&quot;lazy&quot; width=&quot;3000&quot; height=&quot;3000&quot;/&gt;&lt;/span&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/qRjsb/dJMcabjZpLt/CPPHF0Sm9cLw0tuxIFkDVk/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/qRjsb/dJMcabjZpLt/CPPHF0Sm9cLw0tuxIFkDVk/img.png&quot; data-is-animation=&quot;false&quot; data-origin-width=&quot;3000&quot; data-origin-height=&quot;3000&quot; data-filename=&quot;blob&quot; data-widthpercent=&quot;33.33&quot; style=&quot;width: 32.5581%; margin-right: 10px;&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/qRjsb/dJMcabjZpLt/CPPHF0Sm9cLw0tuxIFkDVk/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FqRjsb%2FdJMcabjZpLt%2FCPPHF0Sm9cLw0tuxIFkDVk%2Fimg.png&quot; onerror=&quot;this.onerror=null; this.src='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png'; this.srcset='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png';&quot; loading=&quot;lazy&quot; width=&quot;3000&quot; height=&quot;3000&quot;/&gt;&lt;/span&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/lci1U/dJMcab5jDP2/cCYgXWLZ3Pqbuqk1n68NK0/img.jpg&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/lci1U/dJMcab5jDP2/cCYgXWLZ3Pqbuqk1n68NK0/img.jpg&quot; data-is-animation=&quot;false&quot; data-origin-width=&quot;3000&quot; data-origin-height=&quot;3000&quot; data-filename=&quot;KakaoTalk_Photo_2026-05-18-21-33-51 005.jpeg&quot; style=&quot;width: 32.5581%;&quot; data-widthpercent=&quot;33.34&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/lci1U/dJMcab5jDP2/cCYgXWLZ3Pqbuqk1n68NK0/img.jpg&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2Flci1U%2FdJMcab5jDP2%2FcCYgXWLZ3Pqbuqk1n68NK0%2Fimg.jpg&quot; onerror=&quot;this.onerror=null; this.src='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png'; this.srcset='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png';&quot; loading=&quot;lazy&quot; width=&quot;3000&quot; height=&quot;3000&quot;/&gt;&lt;/span&gt;&lt;/div&gt;
&lt;/figure&gt;
&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;b&gt;1-3. 블루투스 OFF&lt;/b&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;워치를 Wi-Fi로 연결해 다운로드한 워치페이스를 적용하기 위해서 블루투스를 잠시 비활성화한다.&lt;/p&gt;
&lt;p&gt;&lt;figure class=&quot;imagegridblock&quot;&gt;
  &lt;div class=&quot;image-container&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/bDpnjX/dJMcahqXr7R/mXKld67hqjktoKM5SKAoi1/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/bDpnjX/dJMcahqXr7R/mXKld67hqjktoKM5SKAoi1/img.png&quot; data-is-animation=&quot;false&quot; data-origin-width=&quot;3000&quot; data-origin-height=&quot;3000&quot; data-filename=&quot;blob&quot; data-widthpercent=&quot;50&quot; style=&quot;width: 49.4186%; margin-right: 10px;&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/bDpnjX/dJMcahqXr7R/mXKld67hqjktoKM5SKAoi1/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FbDpnjX%2FdJMcahqXr7R%2FmXKld67hqjktoKM5SKAoi1%2Fimg.png&quot; onerror=&quot;this.onerror=null; this.src='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png'; this.srcset='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png';&quot; loading=&quot;lazy&quot; width=&quot;3000&quot; height=&quot;3000&quot;/&gt;&lt;/span&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/Anxqd/dJMcadIJ05W/AQJ0MJC1mm3B469XjOJ1A0/img.jpg&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/Anxqd/dJMcadIJ05W/AQJ0MJC1mm3B469XjOJ1A0/img.jpg&quot; data-origin-width=&quot;3000&quot; data-origin-height=&quot;3000&quot; data-is-animation=&quot;false&quot; data-filename=&quot;KakaoTalk_Photo_2026-05-18-21-33-51 007.jpeg&quot; style=&quot;width: 49.4186%;&quot; data-widthpercent=&quot;50&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/Anxqd/dJMcadIJ05W/AQJ0MJC1mm3B469XjOJ1A0/img.jpg&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FAnxqd%2FdJMcadIJ05W%2FAQJ0MJC1mm3B469XjOJ1A0%2Fimg.jpg&quot; onerror=&quot;this.onerror=null; this.src='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png'; this.srcset='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png';&quot; loading=&quot;lazy&quot; width=&quot;3000&quot; height=&quot;3000&quot;/&gt;&lt;/span&gt;&lt;/div&gt;
&lt;/figure&gt;
&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&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;&lt;b&gt;1-4. 노트북과 같은 와이파이인지 확인&lt;/b&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt; 를 꾸욱 눌러 현재 연결된 와이파이와 노트북 와이파이 일치 확인&lt;/p&gt;
&lt;p&gt;&lt;figure class=&quot;imagegridblock&quot;&gt;
  &lt;div class=&quot;image-container&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/07H4Q/dJMcafUcI0I/Ax03QNJZ0B4caPAXcGPHkk/img.jpg&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/07H4Q/dJMcafUcI0I/Ax03QNJZ0B4caPAXcGPHkk/img.jpg&quot; data-origin-width=&quot;3000&quot; data-origin-height=&quot;3000&quot; data-is-animation=&quot;false&quot; data-filename=&quot;KakaoTalk_Photo_2026-05-18-21-33-51 009.jpeg&quot; style=&quot;width: 26.2622%; margin-right: 10px;&quot; data-widthpercent=&quot;26.89&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/07H4Q/dJMcafUcI0I/Ax03QNJZ0B4caPAXcGPHkk/img.jpg&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2F07H4Q%2FdJMcafUcI0I%2FAx03QNJZ0B4caPAXcGPHkk%2Fimg.jpg&quot; onerror=&quot;this.onerror=null; this.src='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png'; this.srcset='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png';&quot; loading=&quot;lazy&quot; width=&quot;3000&quot; height=&quot;3000&quot;/&gt;&lt;/span&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/bV1wXA/dJMcai4nD40/KQMrZuZgLXZ7wPvgS6uuNK/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/bV1wXA/dJMcai4nD40/KQMrZuZgLXZ7wPvgS6uuNK/img.png&quot; data-origin-width=&quot;3000&quot; data-origin-height=&quot;3000&quot; data-is-animation=&quot;false&quot; data-filename=&quot;blob&quot; data-widthpercent=&quot;26.89&quot; style=&quot;width: 26.2622%; margin-right: 10px;&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/bV1wXA/dJMcai4nD40/KQMrZuZgLXZ7wPvgS6uuNK/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FbV1wXA%2FdJMcai4nD40%2FKQMrZuZgLXZ7wPvgS6uuNK%2Fimg.png&quot; onerror=&quot;this.onerror=null; this.src='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png'; this.srcset='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png';&quot; loading=&quot;lazy&quot; width=&quot;3000&quot; height=&quot;3000&quot;/&gt;&lt;/span&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/OA1SD/dJMcac4cLfV/0O2QWaNiVLCalkKmmmfga0/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/OA1SD/dJMcac4cLfV/0O2QWaNiVLCalkKmmmfga0/img.png&quot; data-origin-width=&quot;600&quot; data-origin-height=&quot;349&quot; data-is-animation=&quot;false&quot; data-filename=&quot;blob&quot; data-widthpercent=&quot;46.22&quot; style=&quot;width: 45.15%;&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/OA1SD/dJMcac4cLfV/0O2QWaNiVLCalkKmmmfga0/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FOA1SD%2FdJMcac4cLfV%2F0O2QWaNiVLCalkKmmmfga0%2Fimg.png&quot; onerror=&quot;this.onerror=null; this.src='//t1.daumcdn.net/tistory_admin/static/images/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;349&quot;/&gt;&lt;/span&gt;&lt;/div&gt;
&lt;/figure&gt;
&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;h4 style=&quot;color: #000000;&quot; data-ke-size=&quot;size20&quot;&gt;&lt;b&gt;2. 워치 페이스 스튜디오 다운로드&lt;/b&gt;&lt;/h4&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;b&gt;2-1. 다운로드&lt;/b&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;아래 링크에서 각 OS에 맞게 다운로드한다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;figure id=&quot;og_1779113319317&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;워치 페이스 스튜디오 다운로드 | Samsung Developer&quot; data-og-description=&quot;The world runs on you.&quot; data-og-host=&quot;developer.samsung.com&quot; data-og-source-url=&quot;https://developer.samsung.com/watch-face-studio/ko/download.html&quot; data-og-url=&quot;https://developer.samsung.com/watch-face-studio/ko/download.html&quot; data-og-image=&quot;https://scrap.kakaocdn.net/dn/qpodF/dJMb8Yp0RVD/oTwf3oVMqtKAdDZPKLx5ZK/img.png?width=1280&amp;amp;height=630&amp;amp;face=0_0_1280_630,https://scrap.kakaocdn.net/dn/kBZKW/dJMb8VNA0FO/4WKHAgdM5CtQby2RU29gKk/img.png?width=1280&amp;amp;height=630&amp;amp;face=0_0_1280_630&quot;&gt;&lt;a href=&quot;https://developer.samsung.com/watch-face-studio/ko/download.html&quot; target=&quot;_blank&quot; rel=&quot;noopener&quot; data-source-url=&quot;https://developer.samsung.com/watch-face-studio/ko/download.html&quot;&gt;
&lt;div class=&quot;og-image&quot; style=&quot;background-image: url('https://scrap.kakaocdn.net/dn/qpodF/dJMb8Yp0RVD/oTwf3oVMqtKAdDZPKLx5ZK/img.png?width=1280&amp;amp;height=630&amp;amp;face=0_0_1280_630,https://scrap.kakaocdn.net/dn/kBZKW/dJMb8VNA0FO/4WKHAgdM5CtQby2RU29gKk/img.png?width=1280&amp;amp;height=630&amp;amp;face=0_0_1280_630');&quot;&gt;&amp;nbsp;&lt;/div&gt;
&lt;div class=&quot;og-text&quot;&gt;
&lt;p class=&quot;og-title&quot; data-ke-size=&quot;size16&quot;&gt;워치 페이스 스튜디오 다운로드 | Samsung Developer&lt;/p&gt;
&lt;p class=&quot;og-desc&quot; data-ke-size=&quot;size16&quot;&gt;The world runs on you.&lt;/p&gt;
&lt;p class=&quot;og-host&quot; data-ke-size=&quot;size16&quot;&gt;developer.samsung.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&gt;&lt;figure class=&quot;imageblock alignLeft&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-origin-width=&quot;1496&quot; data-origin-height=&quot;428&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/bpvrXa/dJMb99M4a76/fUQvh5WI1KgNrcJQF0bjHK/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/bpvrXa/dJMb99M4a76/fUQvh5WI1KgNrcJQF0bjHK/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/bpvrXa/dJMb99M4a76/fUQvh5WI1KgNrcJQF0bjHK/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FbpvrXa%2FdJMb99M4a76%2FfUQvh5WI1KgNrcJQF0bjHK%2Fimg.png&quot; onerror=&quot;this.onerror=null; this.src='//t1.daumcdn.net/tistory_admin/static/images/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;428&quot; data-origin-width=&quot;1496&quot; data-origin-height=&quot;428&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;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;background-color: #ffffff; color: #000000; text-align: start;&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;&lt;b&gt;시스템 설정&lt;/b&gt;&lt;span style=&quot;background-color: #ffffff; color: #000000; text-align: start;&quot;&gt;&lt;span&gt;&amp;nbsp;&lt;/span&gt;&amp;gt;&lt;span&gt;&amp;nbsp;&lt;/span&gt;&lt;/span&gt;&lt;b&gt;보안 및 개인 정보 보호&lt;/b&gt;&lt;span style=&quot;background-color: #ffffff; color: #000000; text-align: start;&quot;&gt;&lt;span&gt;&amp;nbsp;&lt;/span&gt;&amp;gt;&lt;span&gt;&amp;nbsp;&lt;/span&gt;&lt;/span&gt;&lt;b&gt;일반&lt;/b&gt;&lt;span style=&quot;background-color: #ffffff; color: #000000; text-align: start;&quot;&gt;에서 &quot;확인된 개발자가 등록한 응용 프로그램이 아니기 때문에 &amp;lsquo;&lt;span style=&quot;color: #052832; text-align: left;&quot;&gt;WatchFaceStudio.pkg&lt;/span&gt;&amp;rsquo;를 사용할 수 없도록 차단했습니다.&quot; 옆에 있는&lt;span&gt;&amp;nbsp;&lt;/span&gt;&lt;/span&gt;&lt;b&gt;확인 없이 열기&lt;/b&gt;&lt;span style=&quot;background-color: #ffffff; color: #000000; text-align: start;&quot;&gt;을 클릭한다.&lt;br /&gt;&lt;/span&gt;&quot;macOS가 WatchFaceStudio.pkg의 개발자를 확인할 수 없습니다. 그래도 여시겠습니까?&quot;라는 메시지 창이 나타나면 &quot;열기&quot;를 클릭해 워치 페이스 스튜디오를 설치한다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;다운로드 받고 실행하면 아래와 같은 화면이 뜬다.&lt;/p&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-origin-width=&quot;2400&quot; data-origin-height=&quot;1622&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/de6g1O/dJMcacb5pB0/UtCjfKh8LYjgYvr7r8MEqk/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/de6g1O/dJMcacb5pB0/UtCjfKh8LYjgYvr7r8MEqk/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/de6g1O/dJMcacb5pB0/UtCjfKh8LYjgYvr7r8MEqk/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2Fde6g1O%2FdJMcacb5pB0%2FUtCjfKh8LYjgYvr7r8MEqk%2Fimg.png&quot; onerror=&quot;this.onerror=null; this.src='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png'; this.srcset='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png';&quot; loading=&quot;lazy&quot; width=&quot;2400&quot; height=&quot;1622&quot; data-origin-width=&quot;2400&quot; data-origin-height=&quot;1622&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;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;b&gt;2-2. 프로젝트 열기&lt;/b&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;다운받은 wfs를 선택한다.&lt;/p&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignLeft&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-origin-width=&quot;710&quot; data-origin-height=&quot;600&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/JrZw8/dJMb990FDu1/nZCPbmCuLngilqRocH9Fvk/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/JrZw8/dJMb990FDu1/nZCPbmCuLngilqRocH9Fvk/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/JrZw8/dJMb990FDu1/nZCPbmCuLngilqRocH9Fvk/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FJrZw8%2FdJMb990FDu1%2FnZCPbmCuLngilqRocH9Fvk%2Fimg.png&quot; onerror=&quot;this.onerror=null; this.src='//t1.daumcdn.net/tistory_admin/static/images/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;423&quot; data-origin-width=&quot;710&quot; data-origin-height=&quot;600&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;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;b&gt;2-3. 내 위치에 적용하기&lt;/b&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;오른쪽 상단에 'Run on Device' 클릭&lt;/p&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignLeft&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-origin-width=&quot;176&quot; data-origin-height=&quot;132&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/s4UXK/dJMcafzNCyU/9GxjXHISomgeyFyFPXLokK/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/s4UXK/dJMcafzNCyU/9GxjXHISomgeyFyFPXLokK/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/s4UXK/dJMcafzNCyU/9GxjXHISomgeyFyFPXLokK/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2Fs4UXK%2FdJMcafzNCyU%2F9GxjXHISomgeyFyFPXLokK%2Fimg.png&quot; onerror=&quot;this.onerror=null; this.src='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png'; this.srcset='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png';&quot; loading=&quot;lazy&quot; width=&quot;100&quot; height=&quot;132&quot; data-origin-width=&quot;176&quot; data-origin-height=&quot;132&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;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 floatLeft&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-origin-width=&quot;616&quot; data-origin-height=&quot;856&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/3TUpK/dJMcaarIYx2/4iB55DzfvzdJa94VDA1gn0/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/3TUpK/dJMcaarIYx2/4iB55DzfvzdJa94VDA1gn0/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/3TUpK/dJMcaarIYx2/4iB55DzfvzdJa94VDA1gn0/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2F3TUpK%2FdJMcaarIYx2%2F4iB55DzfvzdJa94VDA1gn0%2Fimg.png&quot; onerror=&quot;this.onerror=null; this.src='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png'; this.srcset='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png';&quot; loading=&quot;lazy&quot; width=&quot;350&quot; height=&quot;486&quot; data-origin-width=&quot;616&quot; data-origin-height=&quot;856&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;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;span style=&quot;background-color: #f6e199;&quot;&gt;IP: IP 주소 (000.00.0.00)&lt;/span&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;- 무선디버깅에서 확인&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&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;background-color: #99cefa;&quot;&gt;IP port: 포트 (00000)&lt;/span&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;- 무선디버깅에서 확인&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;background-color: #9feec3;&quot;&gt;Pairing code: Wi-Fi 페어링 코드&lt;/span&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp;- 새 기기 등록 &amp;gt; 기기페어링 확인&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;background-color: #ffc1c8;&quot;&gt;Pairing port: 포트 (00000)&lt;/span&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; - 새 기기 등록 &amp;gt; 기기페어링 확인&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&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;입력정보는 워치에서 확인 가능하다, ADB 디버깅과 무선 디버깅을 켜준다.&lt;/p&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;&lt;b&gt;무선 디버깅 활성화&lt;/b&gt; &amp;rarr; &lt;span style=&quot;background-color: #f6e199;&quot;&gt;IP 주소&lt;/span&gt; 및 &lt;span style=&quot;background-color: #99cefa;&quot;&gt;포트&lt;/span&gt; 확인 &amp;rarr; &lt;span style=&quot;background-color: #f6e199;&quot;&gt;000.00.0.00&lt;/span&gt;:&lt;span style=&quot;background-color: #99cefa;&quot;&gt;00000&lt;/span&gt;&lt;span style=&quot;color: #333333; text-align: start;&quot;&gt;&lt;span&gt;&amp;nbsp;&lt;/span&gt;&amp;rarr;&lt;span&gt;&amp;nbsp;&lt;/span&gt;&lt;/span&gt;&lt;span style=&quot;background-color: #f6e199;&quot;&gt;IP&lt;/span&gt;, &lt;span style=&quot;background-color: #99cefa;&quot;&gt;IP port&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;size18&quot;&gt;&lt;b&gt;새 기기 등록 클릭&lt;/b&gt; &amp;rarr; &lt;span style=&quot;background-color: #9feec3;&quot;&gt;Wi-Fi 페어링 코드&lt;/span&gt;와 &lt;span style=&quot;background-color: #ffc1c8;&quot;&gt;포트&lt;/span&gt; 확인 &amp;rarr; &lt;span style=&quot;background-color: #9feec3;&quot;&gt;Pairing code&lt;/span&gt;, &lt;span style=&quot;background-color: #ffc1c8;&quot;&gt;Pairing port&lt;/span&gt; 입력&lt;/p&gt;
&lt;p&gt;&lt;figure class=&quot;imagegridblock&quot;&gt;
  &lt;div class=&quot;image-container&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/kGlME/dJMcafzTMXm/KxMKfZLTm37bsRlPfjYlR1/img.jpg&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/kGlME/dJMcafzTMXm/KxMKfZLTm37bsRlPfjYlR1/img.jpg&quot; data-origin-width=&quot;3000&quot; data-origin-height=&quot;3000&quot; data-is-animation=&quot;false&quot; data-filename=&quot;KakaoTalk_Photo_2026-05-18-21-33-52 014.jpeg&quot; data-widthpercent=&quot;50&quot; style=&quot;width: 49.4186%; margin-right: 10px;&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/kGlME/dJMcafzTMXm/KxMKfZLTm37bsRlPfjYlR1/img.jpg&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FkGlME%2FdJMcafzTMXm%2FKxMKfZLTm37bsRlPfjYlR1%2Fimg.jpg&quot; onerror=&quot;this.onerror=null; this.src='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png'; this.srcset='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png';&quot; loading=&quot;lazy&quot; width=&quot;3000&quot; height=&quot;3000&quot;/&gt;&lt;/span&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/brac9C/dJMcageuUhP/Zi7NPu8LpSdj2CizQSWcS0/img.jpg&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/brac9C/dJMcageuUhP/Zi7NPu8LpSdj2CizQSWcS0/img.jpg&quot; data-origin-width=&quot;3000&quot; data-origin-height=&quot;3000&quot; data-is-animation=&quot;false&quot; data-filename=&quot;KakaoTalk_Photo_2026-05-18-21-33-52 010.jpeg&quot; data-widthpercent=&quot;50&quot; style=&quot;width: 49.4186%;&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/brac9C/dJMcageuUhP/Zi7NPu8LpSdj2CizQSWcS0/img.jpg&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2Fbrac9C%2FdJMcageuUhP%2FZi7NPu8LpSdj2CizQSWcS0%2Fimg.jpg&quot; onerror=&quot;this.onerror=null; this.src='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png'; this.srcset='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png';&quot; loading=&quot;lazy&quot; width=&quot;3000&quot; height=&quot;3000&quot;/&gt;&lt;/span&gt;&lt;/div&gt;
&lt;/figure&gt;
&lt;figure class=&quot;imagegridblock&quot;&gt;
  &lt;div class=&quot;image-container&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/CKgjt/dJMcaaeicFd/WL97vThfSrFEj7usm2Am5K/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/CKgjt/dJMcaaeicFd/WL97vThfSrFEj7usm2Am5K/img.png&quot; data-is-animation=&quot;false&quot; data-origin-width=&quot;3000&quot; data-origin-height=&quot;3000&quot; data-filename=&quot;blob&quot; data-widthpercent=&quot;50&quot; style=&quot;width: 49.4186%; margin-right: 10px;&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/CKgjt/dJMcaaeicFd/WL97vThfSrFEj7usm2Am5K/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FCKgjt%2FdJMcaaeicFd%2FWL97vThfSrFEj7usm2Am5K%2Fimg.png&quot; onerror=&quot;this.onerror=null; this.src='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png'; this.srcset='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png';&quot; loading=&quot;lazy&quot; width=&quot;3000&quot; height=&quot;3000&quot;/&gt;&lt;/span&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/bfW716/dJMcagyLNXt/5IK3gmF6n14m9ECHlyKKc1/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/bfW716/dJMcagyLNXt/5IK3gmF6n14m9ECHlyKKc1/img.png&quot; data-origin-width=&quot;3000&quot; data-origin-height=&quot;3000&quot; data-is-animation=&quot;false&quot; data-filename=&quot;blob&quot; data-widthpercent=&quot;50&quot; style=&quot;width: 49.4186%;&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/bfW716/dJMcagyLNXt/5IK3gmF6n14m9ECHlyKKc1/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FbfW716%2FdJMcagyLNXt%2F5IK3gmF6n14m9ECHlyKKc1%2Fimg.png&quot; onerror=&quot;this.onerror=null; this.src='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png'; this.srcset='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png';&quot; loading=&quot;lazy&quot; width=&quot;3000&quot; height=&quot;3000&quot;/&gt;&lt;/span&gt;&lt;/div&gt;
&lt;/figure&gt;
&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&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;작성 후 OK를 누르면 워치가 등록된다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;등록된 Watch7를 누르고 20초 정도 대기하면 워치페이스 전송 완료!&lt;/p&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignLeft&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-filename=&quot;blob&quot; data-origin-width=&quot;602&quot; data-origin-height=&quot;998&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/m3fmY/dJMcag6CMRW/TLKXBup5x0dKqy1QMluvE1/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/m3fmY/dJMcag6CMRW/TLKXBup5x0dKqy1QMluvE1/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/m3fmY/dJMcag6CMRW/TLKXBup5x0dKqy1QMluvE1/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2Fm3fmY%2FdJMcag6CMRW%2FTLKXBup5x0dKqy1QMluvE1%2Fimg.png&quot; onerror=&quot;this.onerror=null; this.src='//t1.daumcdn.net/tistory_admin/static/images/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;998&quot; data-filename=&quot;blob&quot; data-origin-width=&quot;602&quot; data-origin-height=&quot;998&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;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;참고&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;a href=&quot;https://blog.naver.com/jdm333/223755595991&quot; target=&quot;_blank&quot; rel=&quot;noopener&amp;nbsp;noreferrer&quot;&gt;https://blog.naver.com/jdm333/223755595991&lt;/a&gt;&lt;/p&gt;</description>
      <category>그외 기록/운영 및 설정</category>
      <category>갤럭시</category>
      <category>다운로드</category>
      <category>등록</category>
      <category>설정</category>
      <category>스튜디오</category>
      <category>연결</category>
      <category>워치</category>
      <category>페이스</category>
      <author>github.com/zlrloy</author>
      <guid isPermaLink="true">https://built.tistory.com/151</guid>
      <comments>https://built.tistory.com/151#entry151comment</comments>
      <pubDate>Sun, 10 May 2026 22:31:43 +0900</pubDate>
    </item>
    <item>
      <title>[PM2] .env NODE_APP_INSTANCE 환경변수가 안먹힌 이유</title>
      <link>https://built.tistory.com/150</link>
      <description>&lt;p data-ke-size=&quot;size16&quot;&gt;PM2로 Node 서버를 띄우고 있었던 프로젝트에 스케줄링(cron)을 돌리는 로직을 추가하면서&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;cron을 제어하기 위해 .env에 환경변수를 설정해두었는데&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;설정을 미실행으로 해놔도 cron이 돌아가고 있었다.&lt;/p&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;h4 data-ke-size=&quot;size20&quot;&gt;cron 설정 코드&lt;/h4&gt;
&lt;pre class=&quot;less&quot; data-ke-language=&quot;bash&quot;&gt;&lt;code&gt;if (process.env.NODE_APP_INSTANCE === '0') {
    cron.schedule('0 * * * *', expiredEmailVerification, cronOption);
}&lt;/code&gt;&lt;/pre&gt;
&lt;ul style=&quot;list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot; data-start=&quot;714&quot; data-end=&quot;775&quot;&gt;
&lt;li data-section-id=&quot;12kl0oy&quot; data-start=&quot;714&quot; data-end=&quot;753&quot;&gt;NODE_APP_INSTANCE === &quot;0&quot; &amp;rarr; cron 실행&lt;/li&gt;
&lt;li data-section-id=&quot;1kn2nwz&quot; data-start=&quot;754&quot; data-end=&quot;775&quot;&gt;!= &quot;0&quot; &amp;rarr; cron 미실행&lt;/li&gt;
&lt;/ul&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;h4 data-ke-size=&quot;size20&quot;&gt;.env 설정 &lt;span style=&quot;color: #9d9d9d;&quot;&gt;(cron 미실행을 위한)&lt;/span&gt;&lt;/h4&gt;
&lt;pre class=&quot;ini&quot;&gt;&lt;code&gt;NODE_APP_INSTANCE=1&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;이렇게 하면 조건문에 걸리지 않으니까 cron이 실행되지 않을 거라고 생각했다.&lt;/p&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;hellip;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;logs를 보니 스케줄링이&lt;span&gt;&amp;nbsp;&lt;/span&gt;정상적으로 실행중이었다. 1시간마다 정확히 로그가 찍히고 있었다.&lt;/p&gt;
&lt;pre class=&quot;bash&quot; data-ke-language=&quot;bash&quot;&gt;&lt;code&gt;2026-05-10 13:00:00 [INFO] : 만료된 인증 요청이 없습니다.
2026-05-10 14:00:00 [INFO] : 학교 이메일 인증 만료 처리 완료: 1명 반려&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;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;스케줄링을 꺼놨는데 왜 돌아가지???&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;먼저 환경변수 로딩이 정상적으로 되고 있는지 콘솔을 찍어봤다.&lt;/p&gt;
&lt;pre class=&quot;bash&quot; data-ke-language=&quot;bash&quot;&gt;&lt;code&gt;const cron = require(&quot;node-cron&quot;);
const cronOption = { scheduled: true, timezone: &quot;Asia/Seoul&quot;};

console.log('INSTANCE:', process.env.NODE_APP_INSTANCE);

if (process.env.NODE_APP_INSTANCE === '0') {
    console.log('cron 등록됨');

    cron.schedule('0 * * * *', expiredEmailVerification, cronOption);
    } else {
    console.log('cron 스킵됨');
}&lt;/code&gt;&lt;/pre&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;결과&lt;/p&gt;
&lt;pre class=&quot;properties&quot;&gt;&lt;code&gt;INSTANCE: 0
cron 등록됨&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;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;color: #333333; text-align: start;&quot;&gt;.env에 1로 설정했는데 왜 0일까?&lt;/span&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;h3 data-ke-size=&quot;size23&quot;&gt;&lt;b&gt;원인&lt;/b&gt;&lt;/h3&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;NODE_APP_INSTANCE는 내가 설정한 .env의 환경변수이면서 PM2 내부 환경변수이기도 하다.&lt;/p&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;pre class=&quot;angelscript&quot;&gt;&lt;code&gt;pm2 env 0&lt;/code&gt;&lt;/pre&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;결과&lt;/p&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignLeft&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-origin-width=&quot;336&quot; data-origin-height=&quot;38&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/I71R6/dJMcahj7yK8/FYr0BPIo7MXbqKKRNF92pK/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/I71R6/dJMcahj7yK8/FYr0BPIo7MXbqKKRNF92pK/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/I71R6/dJMcahj7yK8/FYr0BPIo7MXbqKKRNF92pK/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FI71R6%2FdJMcahj7yK8%2FFYr0BPIo7MXbqKKRNF92pK%2Fimg.png&quot; onerror=&quot;this.onerror=null; this.src='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png'; this.srcset='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png';&quot; loading=&quot;lazy&quot; width=&quot;200&quot; height=&quot;23&quot; data-origin-width=&quot;336&quot; data-origin-height=&quot;38&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;size16&quot;&gt;그래서 아무리 프로젝트의 env에서 값을 1로 지정하더라도 &lt;b&gt;PM2 env 값으로 덮어쓰기 때문에&lt;/b&gt; 내가 설정한 값은 실제 실행 환경에서 무시되고 있었던 것이다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-end=&quot;2341&quot; data-start=&quot;2303&quot; data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-end=&quot;2341&quot; data-start=&quot;2303&quot; data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;h3 data-end=&quot;2732&quot; data-start=&quot;2717&quot; data-section-id=&quot;bnisbo&quot; data-ke-size=&quot;size23&quot;&gt;&lt;b&gt;왜?&lt;/b&gt;&lt;/h3&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;color: #333333; text-align: start;&quot;&gt;PM2에서 단일 인스턴스로 실행하면 PM2는 자동으로 환경변수 NODE_APP_INSTANCE를 0으로 설정한다.&lt;/span&gt;&lt;/p&gt;
&lt;p data-end=&quot;2770&quot; data-start=&quot;2734&quot; data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-end=&quot;2770&quot; data-start=&quot;2734&quot; data-ke-size=&quot;size16&quot;&gt;PM2는 클러스터 모드에서 프로세스 번호를 식별해야 해서 내부적으로&amp;nbsp;환경변수를 자동 생성한다.&lt;/p&gt;
&lt;div&gt;
&lt;div&gt;
&lt;table style=&quot;border-collapse: collapse; width: 29.1864%; height: 69px;&quot; border=&quot;1&quot; data-end=&quot;2946&quot; data-start=&quot;2866&quot; data-ke-align=&quot;alignLeft&quot; data-ke-style=&quot;style8&quot;&gt;
&lt;tbody&gt;
&lt;tr style=&quot;height: 18px;&quot;&gt;
&lt;td style=&quot;width: 30.9686%; height: 18px; text-align: center;&quot;&gt;&lt;b&gt;프로세스 값&lt;/b&gt;&lt;/td&gt;
&lt;td style=&quot;width: 35.5824%; height: 18px; text-align: center;&quot;&gt;&lt;b&gt;프로세스 번호&lt;/b&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;tr style=&quot;height: 17px;&quot; data-end=&quot;2908&quot; data-start=&quot;2890&quot;&gt;
&lt;td style=&quot;width: 30.9686%; height: 17px; text-align: center;&quot; data-col-size=&quot;sm&quot; data-end=&quot;2903&quot; data-start=&quot;2890&quot;&gt;instance 1&lt;/td&gt;
&lt;td style=&quot;width: 35.5824%; height: 17px; text-align: center;&quot; data-end=&quot;2908&quot; data-start=&quot;2903&quot; data-col-size=&quot;sm&quot;&gt;0&lt;/td&gt;
&lt;/tr&gt;
&lt;tr style=&quot;height: 17px;&quot; data-end=&quot;2927&quot; data-start=&quot;2909&quot;&gt;
&lt;td style=&quot;width: 30.9686%; height: 17px; text-align: center;&quot; data-col-size=&quot;sm&quot; data-end=&quot;2922&quot; data-start=&quot;2909&quot;&gt;instance 2&lt;/td&gt;
&lt;td style=&quot;width: 35.5824%; height: 17px; text-align: center;&quot; data-end=&quot;2927&quot; data-start=&quot;2922&quot; data-col-size=&quot;sm&quot;&gt;1&lt;/td&gt;
&lt;/tr&gt;
&lt;tr style=&quot;height: 17px;&quot; data-end=&quot;2946&quot; data-start=&quot;2928&quot;&gt;
&lt;td style=&quot;width: 30.9686%; height: 17px; text-align: center;&quot; data-col-size=&quot;sm&quot; data-end=&quot;2941&quot; data-start=&quot;2928&quot;&gt;instance 3&lt;/td&gt;
&lt;td style=&quot;width: 35.5824%; height: 17px; text-align: center;&quot; data-end=&quot;2946&quot; data-start=&quot;2941&quot; data-col-size=&quot;sm&quot;&gt;2&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;p data-end=&quot;2980&quot; data-start=&quot;2948&quot; data-ke-size=&quot;size16&quot;&gt;NODE_APP_INSTANCE는 PM2 전용 내부 변수에 가깝다. (개발자가 제어하는 변수 X)&lt;/p&gt;
&lt;p data-end=&quot;3000&quot; data-start=&quot;2982&quot; data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-end=&quot;3000&quot; data-start=&quot;2982&quot; data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-end=&quot;3000&quot; data-start=&quot;2982&quot; data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;h3 data-end=&quot;3000&quot; data-start=&quot;2982&quot; data-ke-size=&quot;size23&quot;&gt;&lt;b&gt;해결&lt;/b&gt;&lt;/h3&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;color: #333333; text-align: start;&quot;&gt;NODE_APP_INSTANCE를 직접 제어하려 하지 말고 cron 전용 환경변수를 새로 만들었다.&lt;/span&gt;&lt;/p&gt;
&lt;h3 data-end=&quot;3128&quot; data-start=&quot;3118&quot; data-section-id=&quot;11dl8l1&quot; data-ke-size=&quot;size23&quot;&gt;&amp;nbsp;&lt;/h3&gt;
&lt;p data-end=&quot;3128&quot; data-start=&quot;3118&quot; data-section-id=&quot;11dl8l1&quot; data-ke-size=&quot;size16&quot;&gt;&lt;span&gt;.env&lt;/span&gt;&lt;/p&gt;
&lt;div&gt;
&lt;div&gt;
&lt;div&gt;
&lt;div&gt;
&lt;div&gt;
&lt;div&gt;
&lt;div&gt;
&lt;div&gt;
&lt;div&gt;
&lt;div&gt;
&lt;div id=&quot;code-block-viewer&quot;&gt;
&lt;div&gt;
&lt;pre class=&quot;ini&quot;&gt;&lt;code&gt;CRON_ENABLED=true&lt;/code&gt;&lt;/pre&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;div&gt;&amp;nbsp;&lt;/div&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;h3 data-end=&quot;3169&quot; data-start=&quot;3160&quot; data-section-id=&quot;1vwy6ub&quot; data-ke-size=&quot;size23&quot;&gt;&amp;nbsp;&lt;/h3&gt;
&lt;p data-end=&quot;3169&quot; data-start=&quot;3160&quot; data-section-id=&quot;1vwy6ub&quot; data-ke-size=&quot;size16&quot;&gt;코드 수정&lt;/p&gt;
&lt;div&gt;
&lt;div&gt;
&lt;div&gt;
&lt;div&gt;
&lt;div&gt;
&lt;div&gt;
&lt;div&gt;
&lt;div&gt;
&lt;div&gt;
&lt;div&gt;
&lt;div id=&quot;code-block-viewer&quot;&gt;
&lt;div&gt;
&lt;pre class=&quot;bash&quot; data-ke-language=&quot;bash&quot;&gt;&lt;code&gt;if (process.env.CRON_ENABLED === 'true') {
    cron.schedule('0 * * * *', expiredEmailVerification, cronOption);
}&lt;/code&gt;&lt;/pre&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;div&gt;&amp;nbsp;&lt;/div&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;p data-end=&quot;3447&quot; data-start=&quot;3428&quot; data-ke-size=&quot;size16&quot;&gt;이제는 PM2와 충돌할 일이 없이 스케줄링이 정상적으로 제어가 가능해졌다!&lt;/p&gt;
&lt;p data-end=&quot;3544&quot; data-start=&quot;3531&quot; data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-end=&quot;3544&quot; data-start=&quot;3531&quot; data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-end=&quot;4082&quot; data-start=&quot;4065&quot; data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-is-only-node=&quot;&quot; data-is-last-node=&quot;&quot; data-end=&quot;4280&quot; data-start=&quot;4220&quot; data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-is-only-node=&quot;&quot; data-is-last-node=&quot;&quot; data-end=&quot;4280&quot; data-start=&quot;4220&quot; data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;</description>
      <category>그외 기록/트러블 슈팅</category>
      <category>pm2</category>
      <category>노드</category>
      <category>스케줄러</category>
      <category>스케줄링</category>
      <category>크론</category>
      <category>환경변수</category>
      <author>github.com/zlrloy</author>
      <guid isPermaLink="true">https://built.tistory.com/150</guid>
      <comments>https://built.tistory.com/150#entry150comment</comments>
      <pubDate>Sun, 10 May 2026 21:17:11 +0900</pubDate>
    </item>
    <item>
      <title>[Kakao Developers] 카카오 로그인 설정 (REST API 키 생성)</title>
      <link>https://built.tistory.com/147</link>
      <description>&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;h3 data-ke-size=&quot;size23&quot;&gt;&lt;b&gt;1. 카카오 개발자 콘솔 접속&lt;/b&gt;&lt;/h3&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;a href=&quot;https://developers.kakao.com/&quot; target=&quot;_blank&quot; rel=&quot;noopener&amp;nbsp;noreferrer&quot;&gt;https://developers.kakao.com/&lt;/a&gt;&lt;/p&gt;
&lt;figure id=&quot;og_1772442833842&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;Kakao Developers&quot; data-og-description=&quot;카카오 API를 활용하여 다양한 어플리케이션을 개발해 보세요. 카카오 로그인, 메시지 보내기, 친구 API, 인공지능 API 등을 제공합니다.&quot; data-og-host=&quot;developers.kakao.com&quot; data-og-source-url=&quot;https://developers.kakao.com/&quot; data-og-url=&quot;https://developers.kakao.com/&quot; data-og-image=&quot;https://scrap.kakaocdn.net/dn/b9u9D5/dJMb8XkcR4z/Q98LHgDbi8cfx2ER8pPrU1/img.png?width=800&amp;amp;height=400&amp;amp;face=0_0_800_400,https://scrap.kakaocdn.net/dn/ARBF6/dJMb8T9WYaG/VUNs467FHSravVYPqVNgD1/img.png?width=800&amp;amp;height=400&amp;amp;face=0_0_800_400,https://scrap.kakaocdn.net/dn/dkOtY5/dJMb8UHMFBZ/vrQz82pJEU7QxXNSTU2nb1/img.png?width=1200&amp;amp;height=800&amp;amp;face=0_0_1200_800&quot;&gt;&lt;a href=&quot;https://developers.kakao.com/&quot; target=&quot;_blank&quot; rel=&quot;noopener&quot; data-source-url=&quot;https://developers.kakao.com/&quot;&gt;
&lt;div class=&quot;og-image&quot; style=&quot;background-image: url('https://scrap.kakaocdn.net/dn/b9u9D5/dJMb8XkcR4z/Q98LHgDbi8cfx2ER8pPrU1/img.png?width=800&amp;amp;height=400&amp;amp;face=0_0_800_400,https://scrap.kakaocdn.net/dn/ARBF6/dJMb8T9WYaG/VUNs467FHSravVYPqVNgD1/img.png?width=800&amp;amp;height=400&amp;amp;face=0_0_800_400,https://scrap.kakaocdn.net/dn/dkOtY5/dJMb8UHMFBZ/vrQz82pJEU7QxXNSTU2nb1/img.png?width=1200&amp;amp;height=800&amp;amp;face=0_0_1200_800');&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;Kakao Developers&lt;/p&gt;
&lt;p class=&quot;og-desc&quot; data-ke-size=&quot;size16&quot;&gt;카카오 API를 활용하여 다양한 어플리케이션을 개발해 보세요. 카카오 로그인, 메시지 보내기, 친구 API, 인공지능 API 등을 제공합니다.&lt;/p&gt;
&lt;p class=&quot;og-host&quot; data-ke-size=&quot;size16&quot;&gt;developers.kakao.com&lt;/p&gt;
&lt;/div&gt;
&lt;/a&gt;&lt;/figure&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;해당 링크에 접속해 카카오 계정으로 로그인한다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;h3 data-ke-size=&quot;size23&quot;&gt;&lt;b&gt;2. 앱 생성&lt;/b&gt;&lt;b&gt;&lt;/b&gt;&lt;/h3&gt;
&lt;p data-ke-size=&quot;size18&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;blob&quot; data-origin-width=&quot;1180&quot; data-origin-height=&quot;182&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/bhGwCX/dJMcagYUAas/pOdkmmlkFzsnSWFw5rO8h0/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/bhGwCX/dJMcagYUAas/pOdkmmlkFzsnSWFw5rO8h0/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/bhGwCX/dJMcagYUAas/pOdkmmlkFzsnSWFw5rO8h0/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FbhGwCX%2FdJMcagYUAas%2FpOdkmmlkFzsnSWFw5rO8h0%2Fimg.png&quot; onerror=&quot;this.onerror=null; this.src='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png'; this.srcset='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png';&quot; loading=&quot;lazy&quot; width=&quot;1180&quot; height=&quot;182&quot; data-filename=&quot;blob&quot; data-origin-width=&quot;1180&quot; data-origin-height=&quot;182&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;size18&quot;&gt;② 앱 이름 / 회사명 /&amp;nbsp; 카테고리 입력 후 저장&lt;/p&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignLeft&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-origin-width=&quot;507&quot; data-origin-height=&quot;681&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/mOtKF/dJMcagYsl83/I53j9sazN75GRBstGIDjfk/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/mOtKF/dJMcagYsl83/I53j9sazN75GRBstGIDjfk/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/mOtKF/dJMcagYsl83/I53j9sazN75GRBstGIDjfk/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FmOtKF%2FdJMcagYsl83%2FI53j9sazN75GRBstGIDjfk%2Fimg.png&quot; onerror=&quot;this.onerror=null; this.src='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png'; this.srcset='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png';&quot; loading=&quot;lazy&quot; width=&quot;507&quot; height=&quot;681&quot; data-origin-width=&quot;507&quot; data-origin-height=&quot;681&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;figure class=&quot;imageblock alignLeft&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-filename=&quot;blob&quot; data-origin-width=&quot;503&quot; data-origin-height=&quot;206&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/y5C6R/dJMcabwwZtn/wW31VOxSsghBzyUa7qBzDK/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/y5C6R/dJMcabwwZtn/wW31VOxSsghBzyUa7qBzDK/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/y5C6R/dJMcabwwZtn/wW31VOxSsghBzyUa7qBzDK/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2Fy5C6R%2FdJMcabwwZtn%2FwW31VOxSsghBzyUa7qBzDK%2Fimg.png&quot; onerror=&quot;this.onerror=null; this.src='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png'; this.srcset='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png';&quot; loading=&quot;lazy&quot; width=&quot;503&quot; height=&quot;206&quot; data-filename=&quot;blob&quot; data-origin-width=&quot;503&quot; data-origin-height=&quot;206&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;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;h3 data-ke-size=&quot;size23&quot;&gt;&lt;b&gt;3. REST API 키 확인&lt;/b&gt;&lt;/h3&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;앱 - 플랫폼 키에서&lt;/p&gt;
&lt;ul style=&quot;list-style-type: disc;&quot; data-end=&quot;561&quot; data-start=&quot;509&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li data-end=&quot;523&quot; data-start=&quot;509&quot;&gt;REST API 키&lt;/li&gt;
&lt;li data-end=&quot;538&quot; data-start=&quot;524&quot;&gt;JavaScript 키&lt;/li&gt;
&lt;li data-end=&quot;561&quot; data-start=&quot;549&quot;&gt;Native 앱 키를 확인할 수 있다.&lt;/li&gt;
&lt;/ul&gt;
&lt;p data-end=&quot;612&quot; data-start=&quot;563&quot; data-ke-size=&quot;size16&quot;&gt;서버에서 카카오 로그인을 구현할 때 REST API 키를 사용한다.&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;1698&quot; data-origin-height=&quot;763&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/bhHStU/dJMcagYUAat/lny5aAXMiW29SRkI3732a0/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/bhHStU/dJMcagYUAat/lny5aAXMiW29SRkI3732a0/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/bhHStU/dJMcagYUAat/lny5aAXMiW29SRkI3732a0/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FbhHStU%2FdJMcagYUAat%2Flny5aAXMiW29SRkI3732a0%2Fimg.png&quot; onerror=&quot;this.onerror=null; this.src='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png'; this.srcset='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png';&quot; loading=&quot;lazy&quot; width=&quot;1698&quot; height=&quot;763&quot; data-filename=&quot;blob&quot; data-origin-width=&quot;1698&quot; data-origin-height=&quot;763&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;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;h3 data-ke-size=&quot;size23&quot;&gt;&lt;b&gt;4. Redirect URI 등록&lt;/b&gt;&lt;/h3&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;카카오 로그인 성공 후 돌아올 주소를 등록한다.&lt;/p&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignLeft&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-origin-width=&quot;724&quot; data-origin-height=&quot;506&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/cWB25Y/dJMcahXoAse/4uL230JQUxyKc8pHzSVBY1/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/cWB25Y/dJMcahXoAse/4uL230JQUxyKc8pHzSVBY1/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/cWB25Y/dJMcahXoAse/4uL230JQUxyKc8pHzSVBY1/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FcWB25Y%2FdJMcahXoAse%2F4uL230JQUxyKc8pHzSVBY1%2Fimg.png&quot; onerror=&quot;this.onerror=null; this.src='//t1.daumcdn.net/tistory_admin/static/images/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;419&quot; data-origin-width=&quot;724&quot; data-origin-height=&quot;506&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;figure class=&quot;imageblock alignLeft&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-filename=&quot;blob&quot; data-origin-width=&quot;634&quot; data-origin-height=&quot;468&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/b8OMnV/dJMcagYUAar/7yu6EdKmKbJXKTYPSjoKgk/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/b8OMnV/dJMcagYUAar/7yu6EdKmKbJXKTYPSjoKgk/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/b8OMnV/dJMcagYUAar/7yu6EdKmKbJXKTYPSjoKgk/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2Fb8OMnV%2FdJMcagYUAar%2F7yu6EdKmKbJXKTYPSjoKgk%2Fimg.png&quot; onerror=&quot;this.onerror=null; this.src='//t1.daumcdn.net/tistory_admin/static/images/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;443&quot; data-filename=&quot;blob&quot; data-origin-width=&quot;634&quot; data-origin-height=&quot;468&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;size16&quot;&gt;web 서버&lt;/p&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignLeft&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-filename=&quot;blob&quot; data-origin-width=&quot;636&quot; data-origin-height=&quot;166&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/b2e2QS/dJMcaflpy4a/6e15wZR5hbpl2xzJKbDSoK/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/b2e2QS/dJMcaflpy4a/6e15wZR5hbpl2xzJKbDSoK/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/b2e2QS/dJMcaflpy4a/6e15wZR5hbpl2xzJKbDSoK/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2Fb2e2QS%2FdJMcaflpy4a%2F6e15wZR5hbpl2xzJKbDSoK%2Fimg.png&quot; onerror=&quot;this.onerror=null; this.src='//t1.daumcdn.net/tistory_admin/static/images/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;166&quot; data-filename=&quot;blob&quot; data-origin-width=&quot;636&quot; data-origin-height=&quot;166&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;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;color: #333333;&quot;&gt;REST API 키 - 앱 - 앱 설정 - 앱 - 플랫폼 키 - 플랫폼 키 수정&lt;/span&gt;&lt;/p&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignLeft&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-filename=&quot;blob&quot; data-origin-width=&quot;623&quot; data-origin-height=&quot;143&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/cC7q2f/dJMcagki1Kn/J4DQgVA9BeF9Qz3iJUF1zK/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/cC7q2f/dJMcagki1Kn/J4DQgVA9BeF9Qz3iJUF1zK/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/cC7q2f/dJMcagki1Kn/J4DQgVA9BeF9Qz3iJUF1zK/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FcC7q2f%2FdJMcagki1Kn%2FJ4DQgVA9BeF9Qz3iJUF1zK%2Fimg.png&quot; onerror=&quot;this.onerror=null; this.src='//t1.daumcdn.net/tistory_admin/static/images/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;138&quot; data-filename=&quot;blob&quot; data-origin-width=&quot;623&quot; data-origin-height=&quot;143&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;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://developers.kakao.com/docs/latest/ko/kakaologin/prerequisite&quot; target=&quot;_blank&quot; rel=&quot;noopener&amp;nbsp;noreferrer&quot;&gt;https://developers.kakao.com/docs/latest/ko/kakaologin/prerequisite&lt;/a&gt;&lt;/p&gt;
&lt;figure id=&quot;og_1767321070999&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;Kakao Developers&quot; data-og-description=&quot;카카오 API를 활용하여 다양한 어플리케이션을 개발해 보세요. 카카오 로그인, 메시지 보내기, 친구 API, 인공지능 API 등을 제공합니다.&quot; data-og-host=&quot;developers.kakao.com&quot; data-og-source-url=&quot;https://developers.kakao.com/docs/latest/ko/kakaologin/prerequisite&quot; data-og-url=&quot;https://developers.kakao.com/&quot; data-og-image=&quot;https://scrap.kakaocdn.net/dn/bEhCGJ/hyZQDSfEqK/FpdkFBtfYUOSMA2pe1dhMk/img.png?width=800&amp;amp;height=400&amp;amp;face=0_0_800_400,https://scrap.kakaocdn.net/dn/byaZJ1/hyZQxqXtYN/66Hfjrdqo4117Ds837PLQ0/img.png?width=800&amp;amp;height=400&amp;amp;face=0_0_800_400,https://scrap.kakaocdn.net/dn/bX9Nnf/hyZQwFziLF/JgE2K6k1FbvNcFHwRXvQu1/img.png?width=1200&amp;amp;height=800&amp;amp;face=0_0_1200_800&quot;&gt;&lt;a href=&quot;https://developers.kakao.com/docs/latest/ko/kakaologin/prerequisite&quot; target=&quot;_blank&quot; rel=&quot;noopener&quot; data-source-url=&quot;https://developers.kakao.com/docs/latest/ko/kakaologin/prerequisite&quot;&gt;
&lt;div class=&quot;og-image&quot; style=&quot;background-image: url('https://scrap.kakaocdn.net/dn/bEhCGJ/hyZQDSfEqK/FpdkFBtfYUOSMA2pe1dhMk/img.png?width=800&amp;amp;height=400&amp;amp;face=0_0_800_400,https://scrap.kakaocdn.net/dn/byaZJ1/hyZQxqXtYN/66Hfjrdqo4117Ds837PLQ0/img.png?width=800&amp;amp;height=400&amp;amp;face=0_0_800_400,https://scrap.kakaocdn.net/dn/bX9Nnf/hyZQwFziLF/JgE2K6k1FbvNcFHwRXvQu1/img.png?width=1200&amp;amp;height=800&amp;amp;face=0_0_1200_800');&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;Kakao Developers&lt;/p&gt;
&lt;p class=&quot;og-desc&quot; data-ke-size=&quot;size16&quot;&gt;카카오 API를 활용하여 다양한 어플리케이션을 개발해 보세요. 카카오 로그인, 메시지 보내기, 친구 API, 인공지능 API 등을 제공합니다.&lt;/p&gt;
&lt;p class=&quot;og-host&quot; data-ke-size=&quot;size16&quot;&gt;developers.kakao.com&lt;/p&gt;
&lt;/div&gt;
&lt;/a&gt;&lt;/figure&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;h3 data-ke-size=&quot;size23&quot;&gt;&lt;b&gt;5. Client Secret 설정&lt;/b&gt;&lt;/h3&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;카카오 로그인 사용 ON으로 활성화한다.&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 alignLeft&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-origin-width=&quot;688&quot; data-origin-height=&quot;416&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/bqK7L2/dJMcaaxbuor/m4e4HnwfjwjYqnakIuHnjk/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/bqK7L2/dJMcaaxbuor/m4e4HnwfjwjYqnakIuHnjk/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/bqK7L2/dJMcaaxbuor/m4e4HnwfjwjYqnakIuHnjk/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FbqK7L2%2FdJMcaaxbuor%2Fm4e4HnwfjwjYqnakIuHnjk%2Fimg.png&quot; onerror=&quot;this.onerror=null; this.src='//t1.daumcdn.net/tistory_admin/static/images/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;416&quot; data-origin-width=&quot;688&quot; data-origin-height=&quot;416&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;size16&quot;&gt;참고. 활성화하지 않을 경우 &lt;b&gt;KOE004 에러&lt;/b&gt;가 발생한다.&lt;/p&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignLeft&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-origin-width=&quot;555&quot; data-origin-height=&quot;674&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/buHnub/dJMcaiaUUUo/BrzLThkrJGBIIiwlL10sKk/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/buHnub/dJMcaiaUUUo/BrzLThkrJGBIIiwlL10sKk/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/buHnub/dJMcaiaUUUo/BrzLThkrJGBIIiwlL10sKk/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FbuHnub%2FdJMcaiaUUUo%2FBrzLThkrJGBIIiwlL10sKk%2Fimg.png&quot; onerror=&quot;this.onerror=null; this.src='//t1.daumcdn.net/tistory_admin/static/images/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;486&quot; data-origin-width=&quot;555&quot; data-origin-height=&quot;674&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;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;참고&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;a href=&quot;https://ddonghyeo.tistory.com/16#1.%20%EC%B9%B4%EC%B9%B4%EC%98%A4%20%EB%A1%9C%EA%B7%B8%EC%9D%B8%20%EC%9A%94%EC%B2%AD-1&quot;&gt;https://ddonghyeo.tistory.com/16#1.%20%EC%B9%B4%EC%B9%B4%EC%98%A4%20%EB%A1%9C%EA%B7%B8%EC%9D%B8%20%EC%9A%94%EC%B2%AD-1&lt;/a&gt;&lt;/p&gt;</description>
      <category>그외 기록/운영 및 설정</category>
      <category>계정</category>
      <category>로그인</category>
      <category>카카오</category>
      <category>카카오톡</category>
      <category>콘솔</category>
      <author>github.com/zlrloy</author>
      <guid isPermaLink="true">https://built.tistory.com/147</guid>
      <comments>https://built.tistory.com/147#entry147comment</comments>
      <pubDate>Fri, 2 Jan 2026 10:20:20 +0900</pubDate>
    </item>
    <item>
      <title>2025 개발회고</title>
      <link>https://built.tistory.com/146</link>
      <description>&lt;p style=&quot;text-align: center;&quot; data-end=&quot;160&quot; data-start=&quot;147&quot; data-ke-size=&quot;size16&quot;&gt;고마웠던 2025년, 개발자로서의 첫 해&lt;/p&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-filename=&quot;90도인사.jpg&quot; data-origin-width=&quot;735&quot; data-origin-height=&quot;588&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/brI8ek/dJMcah39ihK/ugZoizAHlgbSRk1KUrXyok/img.jpg&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/brI8ek/dJMcah39ihK/ugZoizAHlgbSRk1KUrXyok/img.jpg&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/brI8ek/dJMcah39ihK/ugZoizAHlgbSRk1KUrXyok/img.jpg&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FbrI8ek%2FdJMcah39ihK%2FugZoizAHlgbSRk1KUrXyok%2Fimg.jpg&quot; onerror=&quot;this.onerror=null; this.src='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png'; this.srcset='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png';&quot; loading=&quot;lazy&quot; width=&quot;500&quot; height=&quot;400&quot; data-filename=&quot;90도인사.jpg&quot; data-origin-width=&quot;735&quot; data-origin-height=&quot;588&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;/p&gt;
&lt;p data-end=&quot;160&quot; data-start=&quot;147&quot; data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-end=&quot;160&quot; data-start=&quot;147&quot; data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-end=&quot;160&quot; data-start=&quot;147&quot; data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;h3 data-end=&quot;160&quot; data-start=&quot;147&quot; data-ke-size=&quot;size23&quot;&gt;&lt;b&gt;Keep&lt;/b&gt;&lt;/h3&gt;
&lt;p data-end=&quot;320&quot; data-start=&quot;162&quot; data-ke-size=&quot;size16&quot;&gt;1년만에 이직해 개발팀으로 입사했다. 합격 소식을 들었을 때의 기분은 아직도 생생하다. 엄청 기쁘면서도 얼떨떨했다.&lt;/p&gt;
&lt;p data-end=&quot;320&quot; data-start=&quot;162&quot; data-ke-size=&quot;size16&quot;&gt;기술 스택이 맞는 공고가 많지 않았는데 다행히 유일하게 맞았던 곳에 입사했고 어느덧 6개월 차가 되었다.&lt;/p&gt;
&lt;p data-end=&quot;505&quot; data-start=&quot;322&quot; data-ke-size=&quot;size16&quot;&gt;개발은 여전히 어렵다. 해결되지 않는 문제를 만나면 평생 안 풀릴 것처럼 막막해지고, 어느 순간 해결되면 또 마음이 잔잔해진다.&lt;/p&gt;
&lt;p data-end=&quot;505&quot; data-start=&quot;322&quot; data-ke-size=&quot;size16&quot;&gt;이 감정의 반복이 개발의 묘미인 것 같다. 역시 취준할 때도 겪어봤지만 엉덩이 붙이고 끝까지 파고들면 결국 해결하지 못할 문제는 없다는 것, 이건 앞으로도 변하지 않을 것이다.&lt;/p&gt;
&lt;p data-end=&quot;733&quot; data-start=&quot;507&quot; data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-end=&quot;733&quot; data-start=&quot;507&quot; data-ke-size=&quot;size16&quot;&gt;업무적으로는 첫 프로젝트에서 프론트엔드 개발자와 통신하면서 발생했던 에러와 예외 사항들을 모두 정리해두었다가 다음 프로젝트에 그대로 참고하면서 통신 에러가 없도록 했고 QA 수정 사항도 체감상 70% 이상 줄였다.&lt;br /&gt;한 번 겪은 문제를 기록하고 다음 프로젝트에서 반복되지 않도록 기록하는 습관은 앞으로도 계속 유지할 것이다.&lt;/p&gt;
&lt;p data-end=&quot;733&quot; data-start=&quot;507&quot; data-ke-size=&quot;size16&quot;&gt;역시 기록의 친절함은 날이 갈수록 더 크게 느끼고 있다.&lt;/p&gt;
&lt;p data-end=&quot;733&quot; data-start=&quot;507&quot; data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-end=&quot;928&quot; data-start=&quot;735&quot; data-ke-size=&quot;size16&quot;&gt;또 팀 내 문서 정리에도 적극적으로 개입했다. 기존 노션을 수정하며 API 명세서 양식, 배포 가이드 등 그동안 명확하게 정리되어 있지 않았던 문서들을 재정비했다. 새로 만드는 것보다는 팀 상황에 맞게 정리하고 다듬는 방향으로 해서 개발 흐름을 파악하는 데에도 도움이 되었다. 프론트엔드 개발자분들이 내가 작성한 API 명세서를 보고 '작업하면서 질문할 게 없다. 필요한 모든 내용이 담겨있어 API 연동 작업할 때 편하다'고 했다. 문서 하나로 협업이 수월해졌다.&lt;/p&gt;
&lt;p data-end=&quot;928&quot; data-start=&quot;735&quot; data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-end=&quot;1185&quot; data-start=&quot;930&quot; data-ke-size=&quot;size16&quot;&gt;개발 외적으로는 조직문화에도 관심을 가지고 참여했다. 이전 회사들에서의 경험을 토대로 신규 입사자의 입장에서 느낄 수 있는 불편함이나 아쉬운 점들을 정리해 경영지원팀에 전달했다. 그 결과 현재 실제로 운영되고 있는 복지도 늘고, 팀간의 서먹했던 분위기도 풀어졌다.&lt;/p&gt;
&lt;p data-end=&quot;1185&quot; data-start=&quot;930&quot; data-ke-size=&quot;size16&quot;&gt;지금은 신규 입사자들이 자연스럽게 그 복지를 누리고 있어 개인적으로 보람을 느낀다. 이게 가능했던 것은 의견에 귀 기울여 주신 팀장님의 열린 마음 덕분이기도 하다. 팀이 더 나아질 수 있는 방향을 함께 고민하는 문화는 앞으로도 계속 지켜가고 싶은 부분이다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;h3 data-end=&quot;1208&quot; data-start=&quot;1192&quot; data-ke-size=&quot;size23&quot;&gt;&lt;b&gt;Problem&lt;/b&gt;&lt;/h3&gt;
&lt;p data-end=&quot;1369&quot; data-start=&quot;1210&quot; data-ke-size=&quot;size16&quot;&gt;프로젝트를 진행하면서 가장 어려웠던 점은 회의 내용, 기획서, 피그마를 기준으로 백단에서 로직을 설계하기에 정보가 충분하지 않은 경우가 종종 있었다. 여러 문서를 종합해 개발을 진행하다 보니 구현 단계에서 방향이 모호하거나 디테일한 기획의 부재를 뒤늦게 인지하는 상황이 발생했다. 가끔 개발 도중 방향을 수정해야 했고 그러다보니 일정이 촉박해져 업무를 마감일 끝자락에 간신히 마무리하기도 했다.&lt;/p&gt;
&lt;p data-end=&quot;1369&quot; data-start=&quot;1210&quot; data-ke-size=&quot;size16&quot;&gt;기획과 개발 사이에서 발생하는 이 간극을 줄이지 못하면 개발 일정이 딜레이될 수도 있고 업무 집중에도 영향을 주기 때문에 그냥 지나치면 안된다고 생각했다.&lt;/p&gt;
&lt;p data-end=&quot;1369&quot; data-start=&quot;1210&quot; data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-end=&quot;1369&quot; data-start=&quot;1210&quot; data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-end=&quot;1369&quot; data-start=&quot;1210&quot; data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;h3 data-end=&quot;1568&quot; data-start=&quot;1556&quot; data-ke-size=&quot;size23&quot;&gt;&lt;b&gt;Try&lt;/b&gt;&lt;/h3&gt;
&lt;p data-end=&quot;1633&quot; data-start=&quot;1570&quot; data-ke-size=&quot;size16&quot;&gt;1. 앞으로는 개발을 시작하기 전에 &lt;b&gt;불확실한 것들을 꼼꼼하게 체크하고 공유&lt;/b&gt;하는 것에 더 집중하려고 한다.&lt;/p&gt;
&lt;ul style=&quot;list-style-type: disc;&quot; data-end=&quot;1734&quot; data-start=&quot;1635&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li data-end=&quot;1662&quot; data-start=&quot;1635&quot;&gt;애매한 방향은 체크리스트로 정리하기&lt;/li&gt;
&lt;li data-end=&quot;1696&quot; data-start=&quot;1663&quot;&gt;구현 전에 애매한 로직은 확실하게 질문하기&lt;/li&gt;
&lt;li data-end=&quot;1734&quot; data-start=&quot;1697&quot;&gt;앞으로의 프로젝트에서도 같은 질문이 반복되지 않도록 디테일한 기준을 잡아 공유하기&lt;/li&gt;
&lt;/ul&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;를 시도한다면 일정이 빠듯해져서 막판에 작업이 몰리는 상황을 줄이고 자체 QA도 더 신경쓸 수 있는 방향으로 이끌 수 있을 것 같다.&lt;/p&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-end=&quot;1894&quot; data-start=&quot;1750&quot; data-ke-size=&quot;size16&quot;&gt;2. 이 문제에 대해서는 단순히 환경을 아쉬워하기보다는&amp;nbsp;&lt;b&gt;내 마인드도 바꾸기&lt;/b&gt;로 결심했다.&lt;/p&gt;
&lt;p data-end=&quot;1894&quot; data-start=&quot;1750&quot; data-ke-size=&quot;size16&quot;&gt;불확실한 상황 자체를 부담으로 받아들이기보다는 문제를 해결하기 위해 어떤 순서로, 어떻게 접근할지 결정하는 능력을 기를 수 있는 기회라고 생각하려 한다. 이러한 경험들이 쌓여 개발자로서의 판단력과 문제 해결 능력을 키우고, 팀과 회사에 더 긍정적인 영향을 줄 있을 것이라 기대해본다.&lt;/p&gt;
&lt;p data-end=&quot;1894&quot; data-start=&quot;1750&quot; data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-end=&quot;1894&quot; data-start=&quot;1750&quot; data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-end=&quot;1894&quot; data-start=&quot;1750&quot; data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-end=&quot;1894&quot; data-start=&quot;1750&quot; data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-end=&quot;1894&quot; data-start=&quot;1750&quot; data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-end=&quot;1894&quot; data-start=&quot;1750&quot; data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;</description>
      <category>그외 기록/회고</category>
      <author>github.com/zlrloy</author>
      <guid isPermaLink="true">https://built.tistory.com/146</guid>
      <comments>https://built.tistory.com/146#entry146comment</comments>
      <pubDate>Wed, 31 Dec 2025 22:21:43 +0900</pubDate>
    </item>
    <item>
      <title>[AWS] 액세스 키(Access Key) 생성하기</title>
      <link>https://built.tistory.com/145</link>
      <description>&lt;p data-ke-size=&quot;size16&quot;&gt;GitHub Actions로 자동 배포 환경을 셋팅하면서 액세스 키가 필요했다.&lt;/p&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;액세스 키는 AWS &amp;harr; 외부 시스템을 연결하기 위한 인증 수단이다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;우리가 브라우저로 아이디/비밀번호를 입력해서 AWS 콘솔 로그인하여 직접 AWS를 사용하는 것처럼,&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;사람이 아닌 &lt;b&gt;프로그램이 AWS를 제어하기 위해서는&lt;/b&gt; 아이디/비밀번호 대신 &lt;b&gt;액세스 키+시크릿 키를 사용&lt;/b&gt;한다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;액세스 키를 생성하는 방법은 간단하다. AWS 액세스 키 생성 가이드대로만 따라하면 끝!&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://docs.aws.amazon.com/ko_kr/keyspaces/latest/devguide/create.keypair.html&quot; target=&quot;_blank&quot; rel=&quot;noopener&amp;nbsp;noreferrer&quot;&gt;https://docs.aws.amazon.com/ko_kr/keyspaces/latest/devguide/create.keypair.html&lt;/a&gt;&lt;br /&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;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;h4 data-ke-size=&quot;size20&quot;&gt;&lt;b&gt;1. AWS에 로그인 후 IAM&amp;nbsp;이동&lt;/b&gt;&lt;/h4&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;a href=&quot;https://console.aws.amazon.com/iam/&quot;&gt;https://console.aws.amazon.com/iam/&lt;/a&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;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;2. 사용자 선택&lt;/b&gt;&lt;/h4&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;액세스 키 사용자를 선택한다. (없다면 사용자 생성)&lt;/p&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-origin-width=&quot;2212&quot; data-origin-height=&quot;654&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/bGtyNQ/dJMcaaYlJIy/ko85OJRKO05TOR3rTucSPk/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/bGtyNQ/dJMcaaYlJIy/ko85OJRKO05TOR3rTucSPk/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/bGtyNQ/dJMcaaYlJIy/ko85OJRKO05TOR3rTucSPk/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FbGtyNQ%2FdJMcaaYlJIy%2Fko85OJRKO05TOR3rTucSPk%2Fimg.png&quot; onerror=&quot;this.onerror=null; this.src='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png'; this.srcset='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png';&quot; loading=&quot;lazy&quot; width=&quot;2212&quot; height=&quot;654&quot; data-origin-width=&quot;2212&quot; data-origin-height=&quot;654&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;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;h4 data-ke-size=&quot;size20&quot;&gt;&lt;b&gt;3. 액세스 키 만들기&lt;/b&gt;&lt;/h4&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;보안 자격 증명 탭에서 액세스 키 만들기 버튼을 누른다.&lt;/p&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignLeft&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-origin-width=&quot;988&quot; data-origin-height=&quot;110&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/bcdZUC/dJMcacPo8JM/BOKNb7ppKoN6FiFDB5bABk/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/bcdZUC/dJMcacPo8JM/BOKNb7ppKoN6FiFDB5bABk/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/bcdZUC/dJMcacPo8JM/BOKNb7ppKoN6FiFDB5bABk/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FbcdZUC%2FdJMcacPo8JM%2FBOKNb7ppKoN6FiFDB5bABk%2Fimg.png&quot; onerror=&quot;this.onerror=null; this.src='//t1.daumcdn.net/tistory_admin/static/images/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;110&quot; data-origin-width=&quot;988&quot; data-origin-height=&quot;110&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;figure class=&quot;imageblock alignLeft&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-filename=&quot;blob&quot; data-origin-width=&quot;1398&quot; data-origin-height=&quot;192&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/pTdqR/dJMcadna7Q3/m3tKJHlPJmpVnbKTX7xgNk/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/pTdqR/dJMcadna7Q3/m3tKJHlPJmpVnbKTX7xgNk/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/pTdqR/dJMcadna7Q3/m3tKJHlPJmpVnbKTX7xgNk/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FpTdqR%2FdJMcadna7Q3%2Fm3tKJHlPJmpVnbKTX7xgNk%2Fimg.png&quot; onerror=&quot;this.onerror=null; this.src='//t1.daumcdn.net/tistory_admin/static/images/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;192&quot; data-filename=&quot;blob&quot; data-origin-width=&quot;1398&quot; data-origin-height=&quot;192&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;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;h4 data-ke-size=&quot;size20&quot;&gt;&lt;b&gt;4. 액세스 키 생성&lt;/b&gt;&lt;/h4&gt;
&lt;p data-ke-size=&quot;size18&quot;&gt;&lt;b&gt;&lt;span style=&quot;text-align: start;&quot;&gt;✔️ 액세스 키 모범 사례 및 대안&lt;/span&gt;&lt;/b&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;text-align: start;&quot;&gt;용도에 맞는 사례를 선택한다.&lt;/span&gt;&lt;/p&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-origin-width=&quot;1224&quot; data-origin-height=&quot;722&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/bODLCf/dJMcadAxmQD/KxxgRb4WpJ5VoiNi1VD7AK/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/bODLCf/dJMcadAxmQD/KxxgRb4WpJ5VoiNi1VD7AK/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/bODLCf/dJMcadAxmQD/KxxgRb4WpJ5VoiNi1VD7AK/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FbODLCf%2FdJMcadAxmQD%2FKxxgRb4WpJ5VoiNi1VD7AK%2Fimg.png&quot; onerror=&quot;this.onerror=null; this.src='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png'; this.srcset='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png';&quot; loading=&quot;lazy&quot; width=&quot;1224&quot; height=&quot;722&quot; data-origin-width=&quot;1224&quot; data-origin-height=&quot;722&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;size18&quot;&gt;&lt;b&gt;&lt;b&gt;&lt;span style=&quot;text-align: start;&quot;&gt;✔️&lt;span&gt;&amp;nbsp;&lt;/span&gt;&lt;/span&gt;&lt;/b&gt;설명 태그 설정&lt;/b&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;(선택사항)액세스 키에 대한 설명을 작성한 다음 액세스 키 만들기 버튼을 누른다.&lt;/p&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-filename=&quot;blob&quot; data-origin-width=&quot;1224&quot; data-origin-height=&quot;255&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/ddPywr/dJMcahXuwZ7/Lh46R1zGfCqf46hKbG7d91/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/ddPywr/dJMcahXuwZ7/Lh46R1zGfCqf46hKbG7d91/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/ddPywr/dJMcahXuwZ7/Lh46R1zGfCqf46hKbG7d91/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FddPywr%2FdJMcahXuwZ7%2FLh46R1zGfCqf46hKbG7d91%2Fimg.png&quot; onerror=&quot;this.onerror=null; this.src='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png'; this.srcset='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png';&quot; loading=&quot;lazy&quot; width=&quot;1224&quot; height=&quot;255&quot; data-filename=&quot;blob&quot; data-origin-width=&quot;1224&quot; data-origin-height=&quot;255&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;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;액세스 키 생성 완료!&lt;/p&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-filename=&quot;blob&quot; data-origin-width=&quot;1235&quot; data-origin-height=&quot;520&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/biLlfo/dJMcaiowZPy/YCqwtUFpGp16fGmquZCgvk/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/biLlfo/dJMcaiowZPy/YCqwtUFpGp16fGmquZCgvk/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/biLlfo/dJMcaiowZPy/YCqwtUFpGp16fGmquZCgvk/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FbiLlfo%2FdJMcaiowZPy%2FYCqwtUFpGp16fGmquZCgvk%2Fimg.png&quot; onerror=&quot;this.onerror=null; this.src='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png'; this.srcset='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png';&quot; loading=&quot;lazy&quot; width=&quot;1235&quot; height=&quot;520&quot; data-filename=&quot;blob&quot; data-origin-width=&quot;1235&quot; data-origin-height=&quot;520&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;color: #9d9d9d;&quot;&gt;&lt;span style=&quot;text-align: start;&quot;&gt;* 파일로 다운로드하려면 &lt;/span&gt;&lt;b&gt;.csv 파일 다운로드&lt;/b&gt;를&lt;span style=&quot;text-align: start;&quot;&gt; 눌러 안전한 위치에 키를 저장한다.&lt;/span&gt;&lt;/span&gt;&lt;/p&gt;</description>
      <category>서비스/인프라</category>
      <category>AWS</category>
      <category>발급</category>
      <category>보안</category>
      <category>생성</category>
      <category>시크릿키</category>
      <category>액세스</category>
      <author>github.com/zlrloy</author>
      <guid isPermaLink="true">https://built.tistory.com/145</guid>
      <comments>https://built.tistory.com/145#entry145comment</comments>
      <pubDate>Mon, 22 Dec 2025 08:21:36 +0900</pubDate>
    </item>
    <item>
      <title>[Swifty pusher] 푸시 알림 테스트 방법</title>
      <link>https://built.tistory.com/143</link>
      <description>&lt;h3 data-ke-size=&quot;size23&quot;&gt;&lt;b&gt;Swifty Pusher&lt;/b&gt;&lt;/h3&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span&gt;푸시 알림 기능을 구현하다 보면 &lt;/span&gt;&lt;span&gt;서버 로직은 다 완성했는데 &lt;/span&gt;&lt;span&gt;&amp;ldquo;왜 알림이 안 오지?&amp;rdquo;하는&lt;/span&gt;&lt;span&gt; 상황이 생겼다.&lt;/span&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span&gt;근데 이 문제가 &lt;/span&gt;&lt;span&gt;서버인지, iOS 설정인지, APNs 인증 문제인지&lt;/span&gt;&lt;span&gt; 판단하기가 쉽지 않다.&lt;/span&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span&gt;이 때 사용하는 도구가 &lt;/span&gt;&lt;span&gt;Swifty Pusher&lt;/span&gt;&lt;span&gt;다.&lt;/span&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span&gt;Swifty Pusher는 &lt;/span&gt;&lt;span&gt;APNs로 직접 푸시 전송을 해볼 수 있는 macOS 전용 테스트 도구이다.&lt;/span&gt;&lt;br /&gt;&lt;span&gt;서버를 거치지 않고 iOS 기기에 푸시 알림을 보내 알림이 오지 않으면 어떤 문제인지 파악이 쉬워진다.&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&gt;푸시 기능은 구현하면서 실제로&amp;nbsp;&lt;/span&gt;&lt;b&gt;&lt;span&gt;디바이스 토큰이 정상적으로 발급된 것인지부터 &lt;/span&gt;&lt;span&gt;Swifty Pusher로 먼저 테스트&lt;/span&gt;&lt;/b&gt;&lt;span&gt;하면서 진행하니 문제 범위를 좀 더 빠르게 좁힐 수 있었다.&lt;/span&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&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;푸시 알림 이슈를 빠르게 디버깅하기 위해&amp;nbsp;Swifty Pusher를 활용해보자!&lt;/span&gt;&lt;/blockquote&gt;
&lt;p style=&quot;text-align: center;&quot; data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p style=&quot;text-align: center;&quot; data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p style=&quot;text-align: center;&quot; data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;h3 data-ke-size=&quot;size23&quot;&gt;&lt;b&gt;사용 방법&lt;/b&gt;&lt;/h3&gt;
&lt;h4 data-ke-size=&quot;size20&quot;&gt;&lt;b&gt;1️⃣ Swifty Pusher 설치&lt;/b&gt;&lt;/h4&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;font-family: 'Noto Serif KR';&quot;&gt;앱스토어에서 Swifty Pusher를 검색 후 다운로드한다.&lt;/span&gt;&lt;/p&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignLeft&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-filename=&quot;blob&quot; data-origin-width=&quot;1180&quot; data-origin-height=&quot;724&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/bza6Cc/dJMcafZEgZO/FP4mSHZiqCqhlf1HXcDK5K/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/bza6Cc/dJMcafZEgZO/FP4mSHZiqCqhlf1HXcDK5K/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/bza6Cc/dJMcafZEgZO/FP4mSHZiqCqhlf1HXcDK5K/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2Fbza6Cc%2FdJMcafZEgZO%2FFP4mSHZiqCqhlf1HXcDK5K%2Fimg.png&quot; onerror=&quot;this.onerror=null; this.src='//t1.daumcdn.net/tistory_admin/static/images/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;724&quot; data-filename=&quot;blob&quot; data-origin-width=&quot;1180&quot; data-origin-height=&quot;724&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;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;h4 data-ke-size=&quot;size20&quot;&gt;&lt;b&gt;2️⃣ APNs 설정 입력&lt;/b&gt;&lt;/h4&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;아래 정보들을 입력한다.&lt;/p&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignLeft&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-filename=&quot;blob&quot; data-origin-width=&quot;430&quot; data-origin-height=&quot;659&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/cChZwk/dJMcac9EwDq/VS6ejJ5gOMSGpmO8n3pE3K/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/cChZwk/dJMcac9EwDq/VS6ejJ5gOMSGpmO8n3pE3K/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/cChZwk/dJMcac9EwDq/VS6ejJ5gOMSGpmO8n3pE3K/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FcChZwk%2FdJMcac9EwDq%2FVS6ejJ5gOMSGpmO8n3pE3K%2Fimg.png&quot; onerror=&quot;this.onerror=null; this.src='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png'; this.srcset='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png';&quot; loading=&quot;lazy&quot; width=&quot;430&quot; height=&quot;659&quot; data-filename=&quot;blob&quot; data-origin-width=&quot;430&quot; data-origin-height=&quot;659&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;/p&gt;
&lt;ul style=&quot;list-style-type: disc;&quot; data-spread=&quot;false&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li&gt;Team ID: Apple Developer 계정의 Team ID&lt;/li&gt;
&lt;li&gt;Bundle ID: 푸시 받을 iOS 앱의 Bundle Identifier&lt;/li&gt;
&lt;li&gt;Key ID: Apple Developer Console에서 생성한 APNs Key ID&lt;/li&gt;
&lt;li&gt;&lt;span&gt;Authentication Type: Token Based (*.p8)&lt;/span&gt;&lt;span&gt;&lt;span&gt;&amp;nbsp;&lt;/span&gt;방식 선택&lt;/span&gt;&lt;/li&gt;
&lt;li&gt;Device Token: 테스트할 아이폰의 디바이스 토큰&lt;/li&gt;
&lt;/ul&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;h4 data-ke-size=&quot;size20&quot;&gt;&lt;b&gt;&lt;span&gt;3️⃣ Payload 작성 후 전송&lt;/span&gt;&lt;/b&gt;&lt;/h4&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;Payload를 입력 후&amp;nbsp;&lt;span&gt;Push&lt;/span&gt;&lt;span style=&quot;color: #333333; text-align: start;&quot;&gt;&lt;span&gt; Notification &lt;/span&gt;버튼을 누른다.&lt;/span&gt;&lt;/p&gt;
&lt;pre class=&quot;bash&quot; data-ke-language=&quot;bash&quot;&gt;&lt;code&gt;{
  &quot;aps&quot;: {
    &quot;alert&quot;: {
      &quot;title&quot;: &quot;Notification Title&quot;,
      &quot;body&quot;: &quot;This is the body of push notification&quot;
    },
    &quot;sound&quot;: &quot;default&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;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;✔️ &lt;b&gt;창 아래 Status code: 200 (no error)가 표시되고 푸시 알림이 도착한다면?&lt;/b&gt;&lt;span style=&quot;color: #333333; text-align: start;&quot;&gt;&lt;span&gt;&amp;nbsp;&lt;/span&gt;&lt;/span&gt;&lt;span&gt;APNs 인증과 iOS 설정은 정상이라는 의미 = 서버 로직쪽에 문제가 있을 가능성이 높다.&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&gt;✔️&amp;nbsp;&lt;/span&gt;&lt;b&gt;&lt;span&gt;푸시 알림이 실패한다면? &lt;/span&gt;&lt;/b&gt;&lt;span&gt;인증 키, Bundle ID, 환경(Sandbox/Production), 토큰 값 등부터&amp;nbsp;&lt;/span&gt;&lt;span&gt;다시 체크해봐야 한다.&lt;/span&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;</description>
      <category>그외 기록/운영 및 설정</category>
      <category>iphone</category>
      <category>디버깅</category>
      <category>실패</category>
      <category>아이폰</category>
      <category>알람</category>
      <category>알림</category>
      <category>에러</category>
      <category>오류</category>
      <category>원인</category>
      <category>푸시</category>
      <author>github.com/zlrloy</author>
      <guid isPermaLink="true">https://built.tistory.com/143</guid>
      <comments>https://built.tistory.com/143#entry143comment</comments>
      <pubDate>Mon, 24 Nov 2025 15:07:03 +0900</pubDate>
    </item>
    <item>
      <title>[MySQL] ERROR 1524 (HY000): Plugin 'mysql_native_password' is not loaded 에러 해결</title>
      <link>https://built.tistory.com/142</link>
      <description>&lt;p data-ke-size=&quot;size16&quot;&gt;1년만에 새 프로젝트를 시작했다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;초기 셋팅을 진행하면서 MySQL 로그인을 시도했는데 에러가 났다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;i&gt;&lt;span style=&quot;color: #333333; text-align: start;&quot;&gt;에러메시지:&lt;span&gt;&amp;nbsp;&lt;/span&gt;&lt;/span&gt;ERROR&amp;nbsp;1524&amp;nbsp;(HY000):&amp;nbsp;Plugin&amp;nbsp;'mysql_native_password'&amp;nbsp;is&amp;nbsp;not&amp;nbsp;loaded&lt;/i&gt;&lt;/p&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignLeft&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-origin-width=&quot;585&quot; data-origin-height=&quot;59&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/MhnGo/dJMb9N9Fget/jDVoVJKkKTf4oJqj2lZVcK/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/MhnGo/dJMb9N9Fget/jDVoVJKkKTf4oJqj2lZVcK/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/MhnGo/dJMb9N9Fget/jDVoVJKkKTf4oJqj2lZVcK/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FMhnGo%2FdJMb9N9Fget%2FjDVoVJKkKTf4oJqj2lZVcK%2Fimg.png&quot; onerror=&quot;this.onerror=null; this.src='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png'; this.srcset='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png';&quot; loading=&quot;lazy&quot; width=&quot;585&quot; height=&quot;59&quot; data-origin-width=&quot;585&quot; data-origin-height=&quot;59&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;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;hr contenteditable=&quot;false&quot; data-ke-type=&quot;horizontalRule&quot; data-ke-style=&quot;style6&quot; /&gt;
&lt;h4 data-ke-size=&quot;size20&quot;&gt;&lt;b&gt; &amp;zwj;  원인&lt;/b&gt;&lt;/h4&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;현재 MySQL 버전은 8.4.3&lt;/p&gt;
&lt;pre id=&quot;code_1761402130757&quot; class=&quot;bash&quot; data-ke-language=&quot;bash&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;$ mysql --version
  mysql  Ver 8.4.3 for macos14.7 on arm64 (Homebrew)&lt;/code&gt;&lt;/pre&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;MySQL은 8.4부터 mysql_native_password 플러그인이 완전히 제거되었다.&amp;nbsp;&amp;nbsp;&lt;br /&gt;my.cnf에 default_authentication_plugin=mysql_native_password가 설정되어 있었기 때문에 에러가 발생한 것이다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;hr contenteditable=&quot;false&quot; data-ke-type=&quot;horizontalRule&quot; data-ke-style=&quot;style6&quot; /&gt;
&lt;h4 data-ke-size=&quot;size20&quot;&gt;&lt;b&gt; &amp;zwj;  해결&lt;/b&gt;&lt;/h4&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;1. 파일 수정&lt;/p&gt;
&lt;pre id=&quot;code_1761402293192&quot; class=&quot;bash&quot; data-ke-language=&quot;bash&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;nano /opt/homebrew/etc/my.cnf&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;default_authentication_plugin=mysql_native_password 삭제하거나, 주석 처리를 하고 싶다면 줄 맨 앞에 #를 추가한다.&lt;br /&gt;(예: # default_authentication_plugin=mysql_native_password)&lt;/p&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;^X &amp;rarr; Y(Yes) &amp;rarr; Enter&lt;/p&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;2. MySQL 서버 종료&lt;/p&gt;
&lt;pre id=&quot;code_1761399839689&quot; class=&quot;bash&quot; data-ke-language=&quot;bash&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;mysql.server stop&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignLeft&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-origin-width=&quot;178&quot; data-origin-height=&quot;58&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/H8Fds/dJMb9NaKBny/UvPNp8Q4TqiTXw5OJAzKGk/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/H8Fds/dJMb9NaKBny/UvPNp8Q4TqiTXw5OJAzKGk/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/H8Fds/dJMb9NaKBny/UvPNp8Q4TqiTXw5OJAzKGk/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FH8Fds%2FdJMb9NaKBny%2FUvPNp8Q4TqiTXw5OJAzKGk%2Fimg.png&quot; onerror=&quot;this.onerror=null; this.src='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png'; this.srcset='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png';&quot; loading=&quot;lazy&quot; width=&quot;178&quot; height=&quot;58&quot; data-origin-width=&quot;178&quot; data-origin-height=&quot;58&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;이렇게 SUCCESS ! 메시지가 뜨면 정상적으로 종료된 것이다.&lt;/p&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;3. 안전 모드로 서버 실행&lt;/p&gt;
&lt;pre id=&quot;code_1761400167904&quot; class=&quot;bash&quot; data-ke-language=&quot;bash&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;/opt/homebrew/opt/mysql@8.4/bin/mysqld_safe --skip-grant-tables &amp;amp;&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;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;4. root로 MySQL 접속&lt;/p&gt;
&lt;pre id=&quot;code_1761402832549&quot; class=&quot;bash&quot; data-ke-language=&quot;bash&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;mysql -u root&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;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;5. 접속 후 root 인증 플러그인을 바꿔준다.&lt;/p&gt;
&lt;pre id=&quot;code_1761402921418&quot; class=&quot;bash&quot; data-ke-language=&quot;bash&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;FLUSH PRIVILEGES;
ALTER USER 'root'@'localhost' IDENTIFIED WITH caching_sha2_password BY '새 비밀번호';&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;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;6. 종료 후 재시작&lt;/p&gt;
&lt;pre id=&quot;code_1761403020099&quot; class=&quot;bash&quot; data-ke-language=&quot;bash&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;$ pkill mysqld

2025-10-25T12:55:14.936744Z 0 [System] [MY-013172] [Server] Received SHUTDOWN from user &amp;lt;via user signal&amp;gt;. Shutting down mysqld (Version: 8.4.3).
2025-10-25T12:55:15.695377Z 0 [System] [MY-010910] [Server] /opt/homebrew/opt/mysql@8.4/bin/mysqld: Shutdown complete (mysqld 8.4.3)  Homebrew.
2025-10-25T12:55:15.695398Z 0 [System] [MY-015016] [Server] MySQL Server - end.
[1]  + 55562 done       /opt/homebrew/opt/mysql@8.4/bin/mysqld --skip-grant-tables --skip-networking&lt;/code&gt;&lt;/pre&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;pre id=&quot;code_1761403185823&quot; class=&quot;bash&quot; data-ke-language=&quot;bash&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;mysql.server start&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignLeft&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-origin-width=&quot;186&quot; data-origin-height=&quot;60&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/M1vxU/dJMb9YpI84R/HIsKPMT3RXUAWzjyGcKiuK/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/M1vxU/dJMb9YpI84R/HIsKPMT3RXUAWzjyGcKiuK/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/M1vxU/dJMb9YpI84R/HIsKPMT3RXUAWzjyGcKiuK/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FM1vxU%2FdJMb9YpI84R%2FHIsKPMT3RXUAWzjyGcKiuK%2Fimg.png&quot; onerror=&quot;this.onerror=null; this.src='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png'; this.srcset='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png';&quot; loading=&quot;lazy&quot; width=&quot;186&quot; height=&quot;60&quot; data-origin-width=&quot;186&quot; data-origin-height=&quot;60&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;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;7. 재접속&lt;/p&gt;
&lt;pre id=&quot;code_1761403109480&quot; class=&quot;bash&quot; data-ke-language=&quot;bash&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;mysql -u root -p&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignLeft&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-origin-width=&quot;711&quot; data-origin-height=&quot;252&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/Y6AB8/dJMb9PfkG9i/Amv6EHOYPhKufSZk2vvAtK/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/Y6AB8/dJMb9PfkG9i/Amv6EHOYPhKufSZk2vvAtK/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/Y6AB8/dJMb9PfkG9i/Amv6EHOYPhKufSZk2vvAtK/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FY6AB8%2FdJMb9PfkG9i%2FAmv6EHOYPhKufSZk2vvAtK%2Fimg.png&quot; onerror=&quot;this.onerror=null; this.src='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png'; this.srcset='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png';&quot; loading=&quot;lazy&quot; width=&quot;711&quot; height=&quot;252&quot; data-origin-width=&quot;711&quot; data-origin-height=&quot;252&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;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;</description>
      <category>그외 기록/트러블 슈팅</category>
      <category>8버전</category>
      <category>MySQL</category>
      <category>로그인</category>
      <category>문제</category>
      <category>버전</category>
      <category>에러</category>
      <category>오류</category>
      <category>접속</category>
      <category>해결</category>
      <author>github.com/zlrloy</author>
      <guid isPermaLink="true">https://built.tistory.com/142</guid>
      <comments>https://built.tistory.com/142#entry142comment</comments>
      <pubDate>Sat, 25 Oct 2025 23:51:19 +0900</pubDate>
    </item>
    <item>
      <title>[DBeaver] 컬럼값 NULL로 되돌리기</title>
      <link>https://built.tistory.com/141</link>
      <description>&lt;p data-ke-size=&quot;size16&quot;&gt;DBeaver에서 데이터를 수정하다 보면 셀에 들어있던 값을 지웠는데 값이 아예 없어지는게 아니라 빈 문자열('') 로 바뀌는 경우가 있다.&lt;/p&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;ul style=&quot;list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot; data-start=&quot;400&quot; data-end=&quot;458&quot;&gt;
&lt;li data-start=&quot;400&quot; data-end=&quot;420&quot;&gt;NULL&lt;span&gt; &amp;rarr;&amp;nbsp;&lt;/span&gt;값이 없다&lt;/li&gt;
&lt;li data-start=&quot;421&quot; data-end=&quot;458&quot;&gt;빈 문자열('')&lt;span&gt;&amp;nbsp;&lt;/span&gt;&amp;rarr; 값은 있는데 글자 길이가 0인 값&lt;/li&gt;
&lt;/ul&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;h4 style=&quot;color: #000000; text-align: start;&quot; data-ke-size=&quot;size20&quot; data-start=&quot;512&quot; data-end=&quot;548&quot;&gt;&lt;b&gt;그래서, 빈 문자열을 NULL로 되돌리는 방법&lt;/b&gt;&lt;/h4&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; data-start=&quot;550&quot; data-end=&quot;710&quot;&gt;
&lt;li data-start=&quot;550&quot; data-end=&quot;588&quot;&gt;DBeaver에서 테이블 데이터 보기&lt;span&gt;&amp;nbsp;&lt;/span&gt;화면으로 들어간다.&lt;/li&gt;
&lt;li data-start=&quot;589&quot; data-end=&quot;626&quot;&gt;NULL로 바꾸고 싶은 셀을 마우스 우클릭한다.&lt;/li&gt;
&lt;li data-start=&quot;642&quot; data-end=&quot;672&quot;&gt;Edit -&lt;span&gt;&amp;nbsp;&lt;/span&gt;Set to NULL 선택&lt;/li&gt;
&lt;li data-start=&quot;673&quot; data-end=&quot;710&quot;&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;blob&quot; data-origin-width=&quot;613&quot; data-origin-height=&quot;551&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/cq3RFu/dJMcagRkv59/b7eEqC5GiMTuddJukTy81k/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/cq3RFu/dJMcagRkv59/b7eEqC5GiMTuddJukTy81k/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/cq3RFu/dJMcagRkv59/b7eEqC5GiMTuddJukTy81k/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2Fcq3RFu%2FdJMcagRkv59%2Fb7eEqC5GiMTuddJukTy81k%2Fimg.png&quot; onerror=&quot;this.onerror=null; this.src='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png'; this.srcset='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png';&quot; loading=&quot;lazy&quot; width=&quot;613&quot; height=&quot;551&quot; data-filename=&quot;blob&quot; data-origin-width=&quot;613&quot; data-origin-height=&quot;551&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;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;</description>
      <category>그외 기록/운영 및 설정</category>
      <category>null</category>
      <category>널</category>
      <category>디비버</category>
      <category>변경</category>
      <category>빈값</category>
      <category>설정</category>
      <category>수정</category>
      <author>github.com/zlrloy</author>
      <guid isPermaLink="true">https://built.tistory.com/141</guid>
      <comments>https://built.tistory.com/141#entry141comment</comments>
      <pubDate>Wed, 22 Oct 2025 10:59:01 +0900</pubDate>
    </item>
  </channel>
</rss>