<?xml version="1.0" encoding="UTF-8"?>
<rss version="2.0">
  <channel>
    <title>장송송</title>
    <link>https://jsongsong.tistory.com/</link>
    <description></description>
    <language>ko</language>
    <pubDate>Tue, 14 Jul 2026 07:00:24 +0900</pubDate>
    <generator>TISTORY</generator>
    <ttl>100</ttl>
    <managingEditor>장송송</managingEditor>
    <item>
      <title>Electron을 이용한 데스크탑 앱 시작시 각종 설정</title>
      <link>https://jsongsong.tistory.com/51</link>
      <description>&lt;p style=&quot;text-align: center; clear: none; float: none;&quot;&gt;&lt;span class=&quot;imageblock&quot; style=&quot;display: inline-block; width: 860px;  height: auto; max-width: 100%;&quot;&gt;&lt;img src=&quot;https://t1.daumcdn.net/cfile/tistory/993EB1485C5D3CF42C&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Ft1.daumcdn.net%2Fcfile%2Ftistory%2F993EB1485C5D3CF42C&quot; width=&quot;860&quot; height=&quot;519&quot; filename=&quot;11111111111111111111.png&quot; filemime=&quot;image/png&quot;/&gt;&lt;/span&gt;&lt;/p&gt;&lt;p&gt;&lt;span style=&quot;font-family: &amp;quot;맑은 고딕&amp;quot;, sans-serif; font-size: 10pt;&quot;&gt;&lt;b&gt;&lt;span style=&quot;font-family: &amp;quot;맑은 고딕&amp;quot;, sans-serif;&quot;&gt;&lt;br /&gt;&lt;/span&gt;&lt;/b&gt;&lt;/span&gt;&lt;/p&gt;&lt;p&gt;&lt;span style=&quot;font-family: &amp;quot;맑은 고딕&amp;quot;, sans-serif; font-size: 10pt;&quot;&gt;&lt;b&gt;&lt;span style=&quot;font-family: &amp;quot;맑은 고딕&amp;quot;, sans-serif;&quot;&gt;&lt;br /&gt;&lt;/span&gt;&lt;/b&gt;&lt;/span&gt;&lt;/p&gt;&lt;p&gt;&lt;span style=&quot;font-family: &amp;quot;맑은 고딕&amp;quot;, sans-serif; font-size: 10pt;&quot;&gt;&lt;b&gt;&lt;span style=&quot;font-family: &amp;quot;맑은 고딕&amp;quot;, sans-serif;&quot;&gt;0. 시작하기&lt;/span&gt;&lt;/b&gt;&lt;/span&gt;&lt;/p&gt;&lt;p style=&quot;margin-left: 2em;&quot;&gt;&lt;span style=&quot;font-family: &amp;quot;맑은 고딕&amp;quot;, sans-serif; font-size: 10pt;&quot;&gt;- electron starter로 시작하면 되긴하나 나는 개발 라이브러리를 &lt;/span&gt;&lt;span style=&quot;font-family: &amp;quot;맑은 고딕&amp;quot;, sans-serif; font-size: 10pt;&quot;&gt;vue를 쓰기위해 electron-vue로 시작을 했다&lt;/span&gt;&lt;/p&gt;&lt;p style=&quot;margin-left: 4em;&quot;&gt;&lt;span style=&quot;font-family: &amp;quot;맑은 고딕&amp;quot;, sans-serif; font-size: 10pt;&quot;&gt;- electron starter :&amp;nbsp;&lt;/span&gt;&lt;span style=&quot;background-color: transparent; color: inherit; font-family: Consolas, &amp;quot;Liberation Mono&amp;quot;, Menlo, Courier, monospace; font-size: 13.6px;&quot;&gt;&lt;a href=&quot;https://github.com/electron/electron-quick-start&quot; target=&quot;_blank&quot; class=&quot;tx-link&quot;&gt;&lt;span style=&quot;font-family: &amp;quot;맑은 고딕&amp;quot;, sans-serif; font-size: 10pt;&quot;&gt;https://github.com/electron/electron-quick-start&lt;/span&gt;&lt;/a&gt;&lt;/span&gt;&lt;/p&gt;&lt;p style=&quot;margin-left: 4em;&quot;&gt;&lt;font face=&quot;Consolas, Liberation Mono, Menlo, Courier, monospace&quot;&gt;&lt;span style=&quot;font-size: 13.6px;&quot;&gt;&lt;span style=&quot;font-family: &amp;quot;맑은 고딕&amp;quot;, sans-serif; font-size: 10pt;&quot;&gt;- electron vue :&amp;nbsp;&lt;/span&gt;&lt;span style=&quot;font-family: &amp;quot;맑은 고딕&amp;quot;, sans-serif; font-size: 10pt;&quot;&gt;&lt;a href=&quot;https://github.com/SimulatedGREG/electron-vue&quot; target=&quot;_blank&quot; class=&quot;tx-link&quot;&gt;&lt;span style=&quot;font-family: &amp;quot;맑은 고딕&amp;quot;, sans-serif;&quot;&gt;https://github.com/SimulatedGREG/electron-vue&lt;/span&gt;&lt;/a&gt;&lt;/span&gt;&lt;/span&gt;&lt;/font&gt;&lt;/p&gt;&lt;p style=&quot;margin-left: 2em;&quot;&gt;&lt;br /&gt;&lt;/p&gt;&lt;p&gt;&lt;font face=&quot;Consolas, Liberation Mono, Menlo, Courier, monospace&quot;&gt;&lt;span style=&quot;font-size: 13.6px;&quot;&gt;&lt;span style=&quot;font-family: &amp;quot;맑은 고딕&amp;quot;, sans-serif; font-size: 10pt;&quot;&gt;&lt;b&gt;&lt;span style=&quot;font-family: &amp;quot;맑은 고딕&amp;quot;, sans-serif;&quot;&gt;&lt;br /&gt;&lt;/span&gt;&lt;/b&gt;&lt;/span&gt;&lt;/span&gt;&lt;/font&gt;&lt;/p&gt;&lt;p&gt;&lt;font face=&quot;Consolas, Liberation Mono, Menlo, Courier, monospace&quot;&gt;&lt;span style=&quot;font-size: 13.6px;&quot;&gt;&lt;span style=&quot;font-family: &amp;quot;맑은 고딕&amp;quot;, sans-serif; font-size: 10pt;&quot;&gt;&lt;b&gt;&lt;span style=&quot;font-family: &amp;quot;맑은 고딕&amp;quot;, sans-serif;&quot;&gt;1. electron vue 설치&lt;/span&gt;&lt;/b&gt;&lt;/span&gt;&lt;/span&gt;&lt;/font&gt;&lt;/p&gt;&lt;p style=&quot;margin-left: 2em;&quot;&gt;&lt;font face=&quot;Consolas, Liberation Mono, Menlo, Courier, monospace&quot;&gt;&lt;span style=&quot;font-size: 13.6px;&quot;&gt;&lt;span style=&quot;font-family: &amp;quot;맑은 고딕&amp;quot;, sans-serif; font-size: 10pt;&quot;&gt;&lt;span style=&quot;font-family: &amp;quot;맑은 고딕&amp;quot;, sans-serif;&quot;&gt;- 자세한건 &lt;/span&gt;&lt;a href=&quot;https://github.com/SimulatedGREG/electron-vue&quot; target=&quot;_blank&quot; class=&quot;tx-link&quot;&gt;&lt;span style=&quot;font-family: &amp;quot;맑은 고딕&amp;quot;, sans-serif;&quot;&gt;공식문서&lt;/span&gt;&lt;/a&gt;&lt;span style=&quot;font-family: &amp;quot;맑은 고딕&amp;quot;, sans-serif;&quot;&gt;를 참고&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/font&gt;&lt;/p&gt;&lt;div class=&quot;txc-textbox&quot; style=&quot;border-style: solid; border-width: 1px; border-color: rgb(238, 238, 238); background-color: rgb(238, 238, 238); padding: 10px;&quot;&gt;&lt;p style=&quot;margin-left: 2em;&quot;&gt;&lt;span style=&quot;font-size: 10pt; font-family: &amp;quot;맑은 고딕&amp;quot;, sans-serif;&quot;&gt;npm install -g vue-cli&lt;/span&gt;&lt;/p&gt;&lt;p style=&quot;margin-left: 2em;&quot;&gt;&lt;span style=&quot;font-size: 10pt; font-family: &amp;quot;맑은 고딕&amp;quot;, sans-serif;&quot;&gt;vue init simulatedgreg/electron-vue my-project&lt;/span&gt;&lt;/p&gt;&lt;p style=&quot;margin-left: 2em;&quot;&gt;&lt;span style=&quot;font-size: 10pt;&quot;&gt;&lt;br /&gt;&lt;/span&gt;&lt;/p&gt;&lt;p style=&quot;margin-left: 2em;&quot;&gt;&lt;span style=&quot;font-size: 10pt; font-family: &amp;quot;맑은 고딕&amp;quot;, sans-serif;&quot;&gt;cd my-project&lt;/span&gt;&lt;/p&gt;&lt;p style=&quot;margin-left: 2em;&quot;&gt;&lt;span style=&quot;font-size: 10pt; font-family: &amp;quot;맑은 고딕&amp;quot;, sans-serif;&quot;&gt;yarn # or npm install&lt;/span&gt;&lt;/p&gt;&lt;p style=&quot;margin-left: 2em;&quot;&gt;&lt;/p&gt;&lt;p style=&quot;margin-left: 2em;&quot;&gt;&lt;span style=&quot;font-size: 10pt; font-family: &amp;quot;맑은 고딕&amp;quot;, sans-serif;&quot;&gt;yarn run dev # or npm run dev&lt;/span&gt;&lt;/p&gt;&lt;/div&gt;&lt;p&gt;&lt;br /&gt;&lt;/p&gt;&lt;p&gt;&lt;br /&gt;&lt;/p&gt;&lt;p&gt;&lt;span style=&quot;font-family: &amp;quot;맑은 고딕&amp;quot;, sans-serif;&quot;&gt;&lt;b&gt;2. 싱글인스턴스 설정&lt;/b&gt;&lt;/span&gt;&lt;/p&gt;&lt;p style=&quot;margin-left: 2em;&quot;&gt;&lt;span style=&quot;font-family: &amp;quot;맑은 고딕&amp;quot;, sans-serif;&quot;&gt;- 기본적으로 1개의 앱만 실행하기 위해 설정&lt;/span&gt;&lt;/p&gt;&lt;p style=&quot;margin-left: 2em;&quot;&gt;- File : &lt;b&gt;src/main/index.js&lt;/b&gt;&lt;/p&gt;&lt;div class=&quot;colorscripter-code&quot; style=&quot;color:#f0f0f0; font-family:Consolas, 'Liberation Mono', Menlo, Courier, monospace !important; position:relative !important; overflow:auto&quot;&gt;&lt;table class=&quot;colorscripter-code-table&quot; style=&quot;margin:0; padding:0; border:none; background-color:#272727; border-radius:4px;&quot; cellspacing=&quot;0&quot; cellpadding=&quot;0&quot;&gt;&lt;tbody&gt;&lt;tr&gt;&lt;td style=&quot;padding:6px; border-right:2px solid #4f4f4f&quot;&gt;&lt;div style=&quot;margin:0; padding:0; word-break:normal; text-align:right; color:#aaa; font-family:Consolas, 'Liberation Mono', Menlo, Courier, monospace !important; line-height:130%&quot;&gt;&lt;div style=&quot;line-height:130%&quot;&gt;1&lt;/div&gt;&lt;div style=&quot;line-height:130%&quot;&gt;2&lt;/div&gt;&lt;div style=&quot;line-height:130%&quot;&gt;3&lt;/div&gt;&lt;div style=&quot;line-height:130%&quot;&gt;4&lt;/div&gt;&lt;div style=&quot;line-height:130%&quot;&gt;5&lt;/div&gt;&lt;div style=&quot;line-height:130%&quot;&gt;6&lt;/div&gt;&lt;div style=&quot;line-height:130%&quot;&gt;7&lt;/div&gt;&lt;div style=&quot;line-height:130%&quot;&gt;8&lt;/div&gt;&lt;div style=&quot;line-height:130%&quot;&gt;9&lt;/div&gt;&lt;div style=&quot;line-height:130%&quot;&gt;10&lt;/div&gt;&lt;div style=&quot;line-height:130%&quot;&gt;11&lt;/div&gt;&lt;div style=&quot;line-height:130%&quot;&gt;12&lt;/div&gt;&lt;div style=&quot;line-height:130%&quot;&gt;13&lt;/div&gt;&lt;div style=&quot;line-height:130%&quot;&gt;14&lt;/div&gt;&lt;div style=&quot;line-height:130%&quot;&gt;15&lt;/div&gt;&lt;div style=&quot;line-height:130%&quot;&gt;16&lt;/div&gt;&lt;div style=&quot;line-height:130%&quot;&gt;17&lt;/div&gt;&lt;div style=&quot;line-height:130%&quot;&gt;18&lt;/div&gt;&lt;div style=&quot;line-height:130%&quot;&gt;19&lt;/div&gt;&lt;div style=&quot;line-height:130%&quot;&gt;20&lt;/div&gt;&lt;div style=&quot;line-height:130%&quot;&gt;21&lt;/div&gt;&lt;div style=&quot;line-height:130%&quot;&gt;22&lt;/div&gt;&lt;div style=&quot;line-height:130%&quot;&gt;23&lt;/div&gt;&lt;div style=&quot;line-height:130%&quot;&gt;24&lt;/div&gt;&lt;div style=&quot;line-height:130%&quot;&gt;25&lt;/div&gt;&lt;div style=&quot;line-height:130%&quot;&gt;26&lt;/div&gt;&lt;div style=&quot;line-height:130%&quot;&gt;27&lt;/div&gt;&lt;div style=&quot;line-height:130%&quot;&gt;28&lt;/div&gt;&lt;div style=&quot;line-height:130%&quot;&gt;29&lt;/div&gt;&lt;div style=&quot;line-height:130%&quot;&gt;30&lt;/div&gt;&lt;div style=&quot;line-height:130%&quot;&gt;31&lt;/div&gt;&lt;div style=&quot;line-height:130%&quot;&gt;32&lt;/div&gt;&lt;div style=&quot;line-height:130%&quot;&gt;33&lt;/div&gt;&lt;div style=&quot;line-height:130%&quot;&gt;34&lt;/div&gt;&lt;div style=&quot;line-height:130%&quot;&gt;35&lt;/div&gt;&lt;div style=&quot;line-height:130%&quot;&gt;36&lt;/div&gt;&lt;div style=&quot;line-height:130%&quot;&gt;37&lt;/div&gt;&lt;/div&gt;&lt;/td&gt;&lt;td style=&quot;padding:6px 0&quot;&gt;&lt;div style=&quot;margin:0; padding:0; color:#f0f0f0; font-family:Consolas, 'Liberation Mono', Menlo, Courier, monospace !important; line-height:130%&quot;&gt;&lt;div style=&quot;padding: 0px 6px; white-space: pre; line-height: 130%; text-align: left;&quot;&gt;&lt;span style=&quot;color:#999999&quot;&gt;//File&amp;nbsp;:&amp;nbsp;src/main/index.js&lt;/span&gt;&lt;/div&gt;&lt;div style=&quot;padding: 0px 6px; white-space: pre; line-height: 130%; text-align: left;&quot;&gt;&lt;span style=&quot;color:#ff3399&quot;&gt;import&lt;/span&gt;&amp;nbsp;{&lt;/div&gt;&lt;div style=&quot;padding: 0px 6px; white-space: pre; line-height: 130%; text-align: left;&quot;&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;app&lt;/div&gt;&lt;div style=&quot;padding: 0px 6px; white-space: pre; line-height: 130%; text-align: left;&quot;&gt;}&amp;nbsp;from&amp;nbsp;&lt;span style=&quot;color:#ffd500&quot;&gt;'electron'&lt;/span&gt;;&lt;/div&gt;&lt;div style=&quot;padding: 0px 6px; white-space: pre; line-height: 130%; text-align: left;&quot;&gt;&amp;nbsp;&lt;/div&gt;&lt;div style=&quot;padding: 0px 6px; white-space: pre; line-height: 130%; text-align: left;&quot;&gt;&amp;nbsp;&lt;/div&gt;&lt;div style=&quot;padding: 0px 6px; white-space: pre; line-height: 130%; text-align: left;&quot;&gt;&lt;span style=&quot;color:#4be6fa&quot;&gt;let&lt;/span&gt;&amp;nbsp;mainWindow;&lt;/div&gt;&lt;div style=&quot;padding: 0px 6px; white-space: pre; line-height: 130%; text-align: left;&quot;&gt;&lt;span style=&quot;color:#4be6fa&quot;&gt;const&lt;/span&gt;&amp;nbsp;gotTheLock&amp;nbsp;&lt;span style=&quot;color:#ff3399&quot;&gt;=&lt;/span&gt;&amp;nbsp;app.requestSingleInstanceLock()&lt;/div&gt;&lt;div style=&quot;padding: 0px 6px; white-space: pre; line-height: 130%; text-align: left;&quot;&gt;&amp;nbsp;&lt;/div&gt;&lt;div style=&quot;padding: 0px 6px; white-space: pre; line-height: 130%; text-align: left;&quot;&gt;&lt;span style=&quot;color:#ff3399&quot;&gt;if&lt;/span&gt;&amp;nbsp;(&lt;span style=&quot;color:#ff3399&quot;&gt;!&lt;/span&gt;gotTheLock)&amp;nbsp;{&lt;/div&gt;&lt;div style=&quot;padding: 0px 6px; white-space: pre; line-height: 130%; text-align: left;&quot;&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;app.quit();&lt;/div&gt;&lt;div style=&quot;padding: 0px 6px; white-space: pre; line-height: 130%; text-align: left;&quot;&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;app.exit();&lt;/div&gt;&lt;div style=&quot;padding: 0px 6px; white-space: pre; line-height: 130%; text-align: left;&quot;&gt;}&amp;nbsp;&lt;span style=&quot;color:#ff3399&quot;&gt;else&lt;/span&gt;&amp;nbsp;{&lt;/div&gt;&lt;div style=&quot;padding: 0px 6px; white-space: pre; line-height: 130%; text-align: left;&quot;&gt;&amp;nbsp;&lt;/div&gt;&lt;div style=&quot;padding: 0px 6px; white-space: pre; line-height: 130%; text-align: left;&quot;&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;span style=&quot;color:#999999&quot;&gt;//두번째&amp;nbsp;앱실행시&amp;nbsp;이벤트&amp;nbsp;발생&lt;/span&gt;&lt;/div&gt;&lt;div style=&quot;padding: 0px 6px; white-space: pre; line-height: 130%; text-align: left;&quot;&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;app.on(&lt;span style=&quot;color:#ffd500&quot;&gt;'second-instance'&lt;/span&gt;,&amp;nbsp;(event,&amp;nbsp;commandLine,&amp;nbsp;workingDirectory)&amp;nbsp;&lt;span style=&quot;color:#ff3399&quot;&gt;=&lt;/span&gt;&lt;span style=&quot;color:#ff3399&quot;&gt;&amp;gt;&lt;/span&gt;&amp;nbsp;{&lt;/div&gt;&lt;div style=&quot;padding: 0px 6px; white-space: pre; line-height: 130%; text-align: left;&quot;&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;span style=&quot;color:#ff3399&quot;&gt;if&lt;/span&gt;&amp;nbsp;(mainWindow)&amp;nbsp;{&lt;/div&gt;&lt;div style=&quot;padding: 0px 6px; white-space: pre; line-height: 130%; text-align: left;&quot;&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;span style=&quot;color:#ff3399&quot;&gt;if&lt;/span&gt;&amp;nbsp;(mainWindow.isMinimized())&amp;nbsp;{&lt;/div&gt;&lt;div style=&quot;padding: 0px 6px; white-space: pre; line-height: 130%; text-align: left;&quot;&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;mainWindow.restore();&lt;/div&gt;&lt;div style=&quot;padding: 0px 6px; white-space: pre; line-height: 130%; text-align: left;&quot;&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;}&amp;nbsp;&lt;span style=&quot;color:#ff3399&quot;&gt;else&lt;/span&gt;&amp;nbsp;&lt;span style=&quot;color:#ff3399&quot;&gt;if&lt;/span&gt;&amp;nbsp;(&lt;span style=&quot;color:#ff3399&quot;&gt;!&lt;/span&gt;win.isVisible())&amp;nbsp;{&lt;/div&gt;&lt;div style=&quot;padding: 0px 6px; white-space: pre; line-height: 130%; text-align: left;&quot;&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;mainWindow.show();&lt;/div&gt;&lt;div style=&quot;padding: 0px 6px; white-space: pre; line-height: 130%; text-align: left;&quot;&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;}&lt;/div&gt;&lt;div style=&quot;padding: 0px 6px; white-space: pre; line-height: 130%; text-align: left;&quot;&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;mainWindow.focus();&lt;/div&gt;&lt;div style=&quot;padding: 0px 6px; white-space: pre; line-height: 130%; text-align: left;&quot;&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;}&lt;/div&gt;&lt;div style=&quot;padding: 0px 6px; white-space: pre; line-height: 130%; text-align: left;&quot;&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;});&lt;/div&gt;&lt;div style=&quot;padding: 0px 6px; white-space: pre; line-height: 130%; text-align: left;&quot;&gt;&amp;nbsp;&lt;/div&gt;&lt;div style=&quot;padding: 0px 6px; white-space: pre; line-height: 130%; text-align: left;&quot;&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;span style=&quot;color:#999999&quot;&gt;//처음&amp;nbsp;실행시&lt;/span&gt;&lt;/div&gt;&lt;div style=&quot;padding: 0px 6px; white-space: pre; line-height: 130%; text-align: left;&quot;&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;app.on(&lt;span style=&quot;color:#ffd500&quot;&gt;'ready'&lt;/span&gt;,&amp;nbsp;&lt;span style=&quot;color:#4be6fa&quot;&gt;function&lt;/span&gt;()&amp;nbsp;{&lt;/div&gt;&lt;div style=&quot;padding: 0px 6px; white-space: pre; line-height: 130%; text-align: left;&quot;&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;mainWindow&amp;nbsp;&lt;span style=&quot;color:#ff3399&quot;&gt;=&lt;/span&gt;&amp;nbsp;&lt;span style=&quot;color:#ff3399&quot;&gt;new&lt;/span&gt;&amp;nbsp;BrowserWindow({&lt;/div&gt;&lt;div style=&quot;padding: 0px 6px; white-space: pre; line-height: 130%; text-align: left;&quot;&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;height:&amp;nbsp;&lt;span style=&quot;color:#c10aff&quot;&gt;563&lt;/span&gt;,&lt;/div&gt;&lt;div style=&quot;padding: 0px 6px; white-space: pre; line-height: 130%; text-align: left;&quot;&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;useContentSize:&amp;nbsp;&lt;span style=&quot;color:#c10aff&quot;&gt;true&lt;/span&gt;,&lt;/div&gt;&lt;div style=&quot;padding: 0px 6px; white-space: pre; line-height: 130%; text-align: left;&quot;&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;width:&amp;nbsp;&lt;span style=&quot;color:#c10aff&quot;&gt;1000&lt;/span&gt;&lt;/div&gt;&lt;div style=&quot;padding: 0px 6px; white-space: pre; line-height: 130%; text-align: left;&quot;&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;});&lt;/div&gt;&lt;div style=&quot;padding: 0px 6px; white-space: pre; line-height: 130%; text-align: left;&quot;&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;});&lt;/div&gt;&lt;div style=&quot;padding: 0px 6px; white-space: pre; line-height: 130%; text-align: left;&quot;&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;/div&gt;&lt;div style=&quot;padding: 0px 6px; white-space: pre; line-height: 130%; text-align: left;&quot;&gt;}&lt;/div&gt;&lt;div style=&quot;padding:0 6px; white-space:pre; line-height:130%&quot;&gt;&amp;nbsp;&lt;/div&gt;&lt;/div&gt;&lt;div style=&quot;text-align:right; margin-top:-13px; margin-right:5px; font-size:9px; font-style:italic&quot;&gt;&lt;a href=&quot;http://colorscripter.com/info#e&quot; target=&quot;_blank&quot; style=&quot;color: rgb(79, 79, 79);&quot;&gt;Colored by Color Scripter&lt;/a&gt;&lt;/div&gt;&lt;/td&gt;&lt;td style=&quot;vertical-align:bottom; padding:0 2px 4px 0&quot;&gt;&lt;a href=&quot;http://colorscripter.com/info#e&quot; target=&quot;_blank&quot; style=&quot;color: white;&quot;&gt;&lt;span style=&quot;font-size: 9px; word-break: normal; background-color: rgb(79, 79, 79); border-radius: 10px; padding: 1px;&quot;&gt;cs&lt;/span&gt;&lt;/a&gt;&lt;/td&gt;&lt;/tr&gt;&lt;/tbody&gt;&lt;/table&gt;&lt;/div&gt;&lt;div class=&quot;colorscripter-code&quot; style=&quot;color:#f0f0f0; font-family:Consolas, 'Liberation Mono', Menlo, Courier, monospace !important; position:relative !important; overflow:auto&quot;&gt;&lt;p&gt;&lt;/p&gt;&lt;p&gt;&lt;/p&gt;&lt;p&gt;&lt;br /&gt;&lt;/p&gt;&lt;p&gt;&lt;/p&gt;&lt;p&gt;&lt;/p&gt;&lt;/div&gt;&lt;div class=&quot;colorscripter-code&quot; style=&quot;color:#f0f0f0; font-family:Consolas, 'Liberation Mono', Menlo, Courier, monospace !important; position:relative !important; overflow:auto&quot;&gt;&lt;p&gt;&lt;/p&gt;&lt;p&gt;&lt;br /&gt;&lt;/p&gt;&lt;/div&gt;&lt;p&gt;&lt;b&gt;3.&amp;nbsp;BrowserWindow와 Main과의 통신&lt;/b&gt;&lt;/p&gt;&lt;p style=&quot;margin-left: 2em;&quot;&gt;-&amp;nbsp;ipcMain,&amp;nbsp;ipcRenderer를 이용&lt;/p&gt;&lt;p style=&quot;margin-left: 2em;&quot;&gt;- File :&amp;nbsp;&lt;b&gt;src/main/index.js&lt;/b&gt;&lt;/p&gt;&lt;div class=&quot;colorscripter-code&quot; style=&quot;color:#f0f0f0; font-family:Consolas, 'Liberation Mono', Menlo, Courier, monospace !important; position:relative !important; overflow:auto&quot;&gt;&lt;table class=&quot;colorscripter-code-table&quot; style=&quot;margin:0; padding:0; border:none; background-color:#272727; border-radius:4px;&quot; cellspacing=&quot;0&quot; cellpadding=&quot;0&quot;&gt;&lt;tbody&gt;&lt;tr&gt;&lt;td style=&quot;padding:6px; border-right:2px solid #4f4f4f&quot;&gt;&lt;div style=&quot;margin:0; padding:0; word-break:normal; text-align:right; color:#aaa; font-family:Consolas, 'Liberation Mono', Menlo, Courier, monospace !important; line-height:130%&quot;&gt;&lt;div style=&quot;line-height:130%&quot;&gt;1&lt;/div&gt;&lt;div style=&quot;line-height:130%&quot;&gt;2&lt;/div&gt;&lt;div style=&quot;line-height:130%&quot;&gt;3&lt;/div&gt;&lt;div style=&quot;line-height:130%&quot;&gt;4&lt;/div&gt;&lt;div style=&quot;line-height:130%&quot;&gt;5&lt;/div&gt;&lt;div style=&quot;line-height:130%&quot;&gt;6&lt;/div&gt;&lt;div style=&quot;line-height:130%&quot;&gt;7&lt;/div&gt;&lt;div style=&quot;line-height:130%&quot;&gt;8&lt;/div&gt;&lt;div style=&quot;line-height:130%&quot;&gt;9&lt;/div&gt;&lt;div style=&quot;line-height:130%&quot;&gt;10&lt;/div&gt;&lt;div style=&quot;line-height:130%&quot;&gt;11&lt;/div&gt;&lt;div style=&quot;line-height:130%&quot;&gt;12&lt;/div&gt;&lt;div style=&quot;line-height:130%&quot;&gt;13&lt;/div&gt;&lt;div style=&quot;line-height:130%&quot;&gt;14&lt;/div&gt;&lt;div style=&quot;line-height:130%&quot;&gt;15&lt;/div&gt;&lt;div style=&quot;line-height:130%&quot;&gt;16&lt;/div&gt;&lt;div style=&quot;line-height:130%&quot;&gt;17&lt;/div&gt;&lt;div style=&quot;line-height:130%&quot;&gt;18&lt;/div&gt;&lt;div style=&quot;line-height:130%&quot;&gt;19&lt;/div&gt;&lt;div style=&quot;line-height:130%&quot;&gt;20&lt;/div&gt;&lt;div style=&quot;line-height:130%&quot;&gt;21&lt;/div&gt;&lt;div style=&quot;line-height:130%&quot;&gt;22&lt;/div&gt;&lt;div style=&quot;line-height:130%&quot;&gt;23&lt;/div&gt;&lt;div style=&quot;line-height:130%&quot;&gt;24&lt;/div&gt;&lt;div style=&quot;line-height:130%&quot;&gt;25&lt;/div&gt;&lt;div style=&quot;line-height:130%&quot;&gt;26&lt;/div&gt;&lt;div style=&quot;line-height:130%&quot;&gt;27&lt;/div&gt;&lt;div style=&quot;line-height:130%&quot;&gt;28&lt;/div&gt;&lt;div style=&quot;line-height:130%&quot;&gt;29&lt;/div&gt;&lt;/div&gt;&lt;/td&gt;&lt;td style=&quot;padding:6px 0&quot;&gt;&lt;div style=&quot;margin:0; padding:0; color:#f0f0f0; font-family:Consolas, 'Liberation Mono', Menlo, Courier, monospace !important; line-height:130%&quot;&gt;&lt;div style=&quot;padding: 0px 6px; white-space: pre; line-height: 130%; text-align: left;&quot;&gt;&lt;span style=&quot;color:#999999&quot;&gt;//File&amp;nbsp;:&amp;nbsp;src/main/index.js&lt;/span&gt;&lt;/div&gt;&lt;div style=&quot;padding: 0px 6px; white-space: pre; line-height: 130%; text-align: left;&quot;&gt;&lt;span style=&quot;color:#ff3399&quot;&gt;import&lt;/span&gt;&amp;nbsp;{&lt;/div&gt;&lt;div style=&quot;padding: 0px 6px; white-space: pre; line-height: 130%; text-align: left;&quot;&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;app,&lt;/div&gt;&lt;div style=&quot;padding: 0px 6px; white-space: pre; line-height: 130%; text-align: left;&quot;&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;ipcMain&lt;/div&gt;&lt;div style=&quot;padding: 0px 6px; white-space: pre; line-height: 130%; text-align: left;&quot;&gt;}&amp;nbsp;from&amp;nbsp;&lt;span style=&quot;color:#ffd500&quot;&gt;'electron'&lt;/span&gt;;&lt;/div&gt;&lt;div style=&quot;padding: 0px 6px; white-space: pre; line-height: 130%; text-align: left;&quot;&gt;&amp;nbsp;&lt;/div&gt;&lt;div style=&quot;padding: 0px 6px; white-space: pre; line-height: 130%; text-align: left;&quot;&gt;&amp;nbsp;&lt;/div&gt;&lt;div style=&quot;padding: 0px 6px; white-space: pre; line-height: 130%; text-align: left;&quot;&gt;&lt;span style=&quot;color:#4be6fa&quot;&gt;let&lt;/span&gt;&amp;nbsp;mainWindow;&lt;/div&gt;&lt;div style=&quot;padding: 0px 6px; white-space: pre; line-height: 130%; text-align: left;&quot;&gt;&lt;span style=&quot;color:#4be6fa&quot;&gt;let&lt;/span&gt;&amp;nbsp;contents;&lt;/div&gt;&lt;div style=&quot;padding: 0px 6px; white-space: pre; line-height: 130%; text-align: left;&quot;&gt;&amp;nbsp;&lt;/div&gt;&lt;div style=&quot;padding: 0px 6px; white-space: pre; line-height: 130%; text-align: left;&quot;&gt;&lt;span style=&quot;color:#999999&quot;&gt;//처음&amp;nbsp;실행시&lt;/span&gt;&lt;/div&gt;&lt;div style=&quot;padding: 0px 6px; white-space: pre; line-height: 130%; text-align: left;&quot;&gt;app.on(&lt;span style=&quot;color:#ffd500&quot;&gt;'ready'&lt;/span&gt;,&amp;nbsp;&lt;span style=&quot;color:#4be6fa&quot;&gt;function&lt;/span&gt;()&amp;nbsp;{&lt;/div&gt;&lt;div style=&quot;padding: 0px 6px; white-space: pre; line-height: 130%; text-align: left;&quot;&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;mainWindow&amp;nbsp;&lt;span style=&quot;color:#ff3399&quot;&gt;=&lt;/span&gt;&amp;nbsp;&lt;span style=&quot;color:#ff3399&quot;&gt;new&lt;/span&gt;&amp;nbsp;BrowserWindow({&lt;/div&gt;&lt;div style=&quot;padding: 0px 6px; white-space: pre; line-height: 130%; text-align: left;&quot;&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;height:&amp;nbsp;&lt;span style=&quot;color:#c10aff&quot;&gt;563&lt;/span&gt;,&lt;/div&gt;&lt;div style=&quot;padding: 0px 6px; white-space: pre; line-height: 130%; text-align: left;&quot;&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;useContentSize:&amp;nbsp;&lt;span style=&quot;color:#c10aff&quot;&gt;true&lt;/span&gt;,&lt;/div&gt;&lt;div style=&quot;padding: 0px 6px; white-space: pre; line-height: 130%; text-align: left;&quot;&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;width:&amp;nbsp;&lt;span style=&quot;color:#c10aff&quot;&gt;1000&lt;/span&gt;&lt;/div&gt;&lt;div style=&quot;padding: 0px 6px; white-space: pre; line-height: 130%; text-align: left;&quot;&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;});&lt;/div&gt;&lt;div style=&quot;padding: 0px 6px; white-space: pre; line-height: 130%; text-align: left;&quot;&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;contents&amp;nbsp;&lt;span style=&quot;color:#ff3399&quot;&gt;=&lt;/span&gt;&amp;nbsp;mainWindow.webContents;&lt;/div&gt;&lt;div style=&quot;padding: 0px 6px; white-space: pre; line-height: 130%; text-align: left;&quot;&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;contents.openDevTools()&lt;/div&gt;&lt;div style=&quot;padding: 0px 6px; white-space: pre; line-height: 130%; text-align: left;&quot;&gt;});&lt;/div&gt;&lt;div style=&quot;padding: 0px 6px; white-space: pre; line-height: 130%; text-align: left;&quot;&gt;&amp;nbsp;&lt;/div&gt;&lt;div style=&quot;padding: 0px 6px; white-space: pre; line-height: 130%; text-align: left;&quot;&gt;&lt;span style=&quot;color:#999999&quot;&gt;//BrowserWindow으로부터&amp;nbsp;받는&amp;nbsp;부분&lt;/span&gt;&lt;/div&gt;&lt;div style=&quot;padding: 0px 6px; white-space: pre; line-height: 130%; text-align: left;&quot;&gt;ipcMain.on(&lt;span style=&quot;color:#ffd500&quot;&gt;&quot;update-check&quot;&lt;/span&gt;,&amp;nbsp;(event,&amp;nbsp;arg)&amp;nbsp;&lt;span style=&quot;color:#ff3399&quot;&gt;=&lt;/span&gt;&lt;span style=&quot;color:#ff3399&quot;&gt;&amp;gt;&lt;/span&gt;&amp;nbsp;{&lt;/div&gt;&lt;div style=&quot;padding: 0px 6px; white-space: pre; line-height: 130%; text-align: left;&quot;&gt;&amp;nbsp;&lt;/div&gt;&lt;div style=&quot;padding: 0px 6px; white-space: pre; line-height: 130%; text-align: left;&quot;&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;span style=&quot;color:#999999&quot;&gt;//BrowserWindow에게&amp;nbsp;보내기&lt;/span&gt;&lt;/div&gt;&lt;div style=&quot;padding: 0px 6px; white-space: pre; line-height: 130%; text-align: left;&quot;&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;contents.send(&lt;span style=&quot;color:#ffd500&quot;&gt;'updater-message'&lt;/span&gt;,&amp;nbsp;{&lt;/div&gt;&lt;div style=&quot;padding: 0px 6px; white-space: pre; line-height: 130%; text-align: left;&quot;&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;msg:&amp;nbsp;&lt;span style=&quot;color:#ffd500&quot;&gt;&quot;ok&quot;&lt;/span&gt;&lt;/div&gt;&lt;div style=&quot;padding: 0px 6px; white-space: pre; line-height: 130%; text-align: left;&quot;&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;});&lt;/div&gt;&lt;div style=&quot;padding: 0px 6px; white-space: pre; line-height: 130%; text-align: left;&quot;&gt;});&lt;/div&gt;&lt;/div&gt;&lt;div style=&quot;text-align: left; margin-top: -13px; margin-right: 5px; font-size: 9px; font-style: italic;&quot;&gt;&lt;a href=&quot;http://colorscripter.com/info#e&quot; target=&quot;_blank&quot; style=&quot;color: rgb(79, 79, 79);&quot;&gt;Colored by Color Scripter&lt;/a&gt;&lt;/div&gt;&lt;/td&gt;&lt;td style=&quot;vertical-align:bottom; padding:0 2px 4px 0&quot;&gt;&lt;a href=&quot;http://colorscripter.com/info#e&quot; target=&quot;_blank&quot; style=&quot;color: white;&quot;&gt;&lt;span style=&quot;font-size: 9px; word-break: normal; background-color: rgb(79, 79, 79); border-radius: 10px; padding: 1px;&quot;&gt;cs&lt;/span&gt;&lt;/a&gt;&lt;/td&gt;&lt;/tr&gt;&lt;/tbody&gt;&lt;/table&gt;&lt;/div&gt;&lt;p style=&quot;margin-left: 2em;&quot;&gt;&lt;br /&gt;&lt;/p&gt;&lt;p style=&quot;margin-left: 2em;&quot;&gt;- File :&amp;nbsp;&lt;b&gt;src/renderer/components/LandingPage.vue&amp;nbsp;&lt;/b&gt;&lt;/p&gt;&lt;div class=&quot;colorscripter-code&quot; style=&quot;color:#f0f0f0; font-family:Consolas, 'Liberation Mono', Menlo, Courier, monospace !important; position:relative !important; overflow:auto&quot;&gt;&lt;p&gt;&lt;table class=&quot;colorscripter-code-table&quot; style=&quot;margin:0; padding:0; border:none; background-color:#272727; border-radius:4px;&quot; cellspacing=&quot;0&quot; cellpadding=&quot;0&quot;&gt;&lt;tbody&gt;&lt;tr&gt;&lt;td style=&quot;padding:6px; border-right:2px solid #4f4f4f&quot;&gt;&lt;div style=&quot;margin:0; padding:0; word-break:normal; text-align:right; color:#aaa; font-family:Consolas, 'Liberation Mono', Menlo, Courier, monospace !important; line-height:130%&quot;&gt;&lt;div style=&quot;line-height:130%&quot;&gt;1&lt;/div&gt;&lt;div style=&quot;line-height:130%&quot;&gt;2&lt;/div&gt;&lt;div style=&quot;line-height:130%&quot;&gt;3&lt;/div&gt;&lt;div style=&quot;line-height:130%&quot;&gt;4&lt;/div&gt;&lt;div style=&quot;line-height:130%&quot;&gt;5&lt;/div&gt;&lt;div style=&quot;line-height:130%&quot;&gt;6&lt;/div&gt;&lt;div style=&quot;line-height:130%&quot;&gt;7&lt;/div&gt;&lt;div style=&quot;line-height:130%&quot;&gt;8&lt;/div&gt;&lt;/div&gt;&lt;/td&gt;&lt;td style=&quot;padding:6px 0&quot;&gt;&lt;div style=&quot;margin:0; padding:0; color:#f0f0f0; font-family:Consolas, 'Liberation Mono', Menlo, Courier, monospace !important; line-height:130%&quot;&gt;&lt;div style=&quot;padding: 0px 6px; white-space: pre; line-height: 130%; text-align: left;&quot;&gt;&lt;span style=&quot;color:#999999&quot;&gt;//vue&amp;nbsp;script중&amp;nbsp;받는&amp;nbsp;부분만&amp;nbsp;표시했음&lt;/span&gt;&lt;/div&gt;&lt;div style=&quot;padding: 0px 6px; white-space: pre; line-height: 130%; text-align: left;&quot;&gt;&amp;nbsp;&lt;/div&gt;&lt;div style=&quot;padding: 0px 6px; white-space: pre; line-height: 130%; text-align: left;&quot;&gt;&lt;span style=&quot;color:#4be6fa&quot;&gt;const&lt;/span&gt;&amp;nbsp;ipcRenderer&amp;nbsp;&lt;span style=&quot;color:#ff3399&quot;&gt;=&lt;/span&gt;&amp;nbsp;require(&lt;span style=&quot;color:#ffd500&quot;&gt;'electron'&lt;/span&gt;).ipcRenderer;&lt;/div&gt;&lt;div style=&quot;padding: 0px 6px; white-space: pre; line-height: 130%; text-align: left;&quot;&gt;ipcRenderer.on(&lt;span style=&quot;color:#ffd500&quot;&gt;'updater-message'&lt;/span&gt;,&amp;nbsp;&lt;span style=&quot;color:#4be6fa&quot;&gt;function&lt;/span&gt;(event,&amp;nbsp;text)&amp;nbsp;{&lt;/div&gt;&lt;div style=&quot;padding: 0px 6px; white-space: pre; line-height: 130%; text-align: left;&quot;&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;console.log(&lt;span style=&quot;color:#ffd500&quot;&gt;'updater-message'&lt;/span&gt;,&amp;nbsp;event,&amp;nbsp;text);&lt;/div&gt;&lt;div style=&quot;padding: 0px 6px; white-space: pre; line-height: 130%; text-align: left;&quot;&gt;});&lt;/div&gt;&lt;div style=&quot;padding: 0px 6px; white-space: pre; line-height: 130%; text-align: left;&quot;&gt;ipcRenderer.send(&lt;span style=&quot;color:#ffd500&quot;&gt;'update-check'&lt;/span&gt;);&lt;/div&gt;&lt;div style=&quot;padding: 0px 6px; white-space: pre; line-height: 130%; text-align: left;&quot;&gt;&amp;nbsp;&lt;/div&gt;&lt;/div&gt;&lt;div style=&quot;text-align: left; margin-top: -13px; margin-right: 5px; font-size: 9px; font-style: italic;&quot;&gt;&lt;a href=&quot;http://colorscripter.com/info#e&quot; target=&quot;_blank&quot; style=&quot;color: rgb(79, 79, 79);&quot;&gt;Colored by Color Scripter&lt;/a&gt;&lt;/div&gt;&lt;/td&gt;&lt;td style=&quot;vertical-align:bottom; padding:0 2px 4px 0&quot;&gt;&lt;a href=&quot;http://colorscripter.com/info#e&quot; target=&quot;_blank&quot; style=&quot;color: white;&quot;&gt;&lt;span style=&quot;font-size: 9px; word-break: normal; background-color: rgb(79, 79, 79); border-radius: 10px; padding: 1px;&quot;&gt;cs&lt;/span&gt;&lt;/a&gt;&lt;/td&gt;&lt;/tr&gt;&lt;/tbody&gt;&lt;/table&gt;&lt;/p&gt;&lt;/div&gt;&lt;div class=&quot;colorscripter-code&quot; style=&quot;color:#f0f0f0; font-family:Consolas, 'Liberation Mono', Menlo, Courier, monospace !important; position:relative !important; overflow:auto&quot;&gt;ㅌㅌㅌㅌㅌㅌㅌ&lt;/div&gt;&lt;p&gt;&lt;br /&gt;&lt;/p&gt;&lt;p&gt;&lt;b&gt;4. Tray 표시&lt;/b&gt;&lt;/p&gt;&lt;p style=&quot;margin-left: 2em;&quot;&gt;- 윈도우기준 우측 하단 아이콘&lt;/p&gt;&lt;p style=&quot;margin-left: 2em;&quot;&gt;- File :&amp;nbsp;&lt;b&gt;src/main/index.js&lt;/b&gt;&lt;/p&gt;&lt;div class=&quot;colorscripter-code&quot; style=&quot;color:#f0f0f0; font-family:Consolas, 'Liberation Mono', Menlo, Courier, monospace !important; position:relative !important; overflow:auto&quot;&gt;&lt;table class=&quot;colorscripter-code-table&quot; style=&quot;margin:0; padding:0; border:none; background-color:#272727; border-radius:4px;&quot; cellspacing=&quot;0&quot; cellpadding=&quot;0&quot;&gt;&lt;tbody&gt;&lt;tr&gt;&lt;td style=&quot;padding:6px; border-right:2px solid #4f4f4f&quot;&gt;&lt;div style=&quot;margin:0; padding:0; word-break:normal; text-align:right; color:#aaa; font-family:Consolas, 'Liberation Mono', Menlo, Courier, monospace !important; line-height:130%&quot;&gt;&lt;div style=&quot;line-height:130%&quot;&gt;1&lt;/div&gt;&lt;div style=&quot;line-height:130%&quot;&gt;2&lt;/div&gt;&lt;div style=&quot;line-height:130%&quot;&gt;3&lt;/div&gt;&lt;div style=&quot;line-height:130%&quot;&gt;4&lt;/div&gt;&lt;div style=&quot;line-height:130%&quot;&gt;5&lt;/div&gt;&lt;div style=&quot;line-height:130%&quot;&gt;6&lt;/div&gt;&lt;div style=&quot;line-height:130%&quot;&gt;7&lt;/div&gt;&lt;div style=&quot;line-height:130%&quot;&gt;8&lt;/div&gt;&lt;div style=&quot;line-height:130%&quot;&gt;9&lt;/div&gt;&lt;div style=&quot;line-height:130%&quot;&gt;10&lt;/div&gt;&lt;div style=&quot;line-height:130%&quot;&gt;11&lt;/div&gt;&lt;div style=&quot;line-height:130%&quot;&gt;12&lt;/div&gt;&lt;div style=&quot;line-height:130%&quot;&gt;13&lt;/div&gt;&lt;div style=&quot;line-height:130%&quot;&gt;14&lt;/div&gt;&lt;div style=&quot;line-height:130%&quot;&gt;15&lt;/div&gt;&lt;div style=&quot;line-height:130%&quot;&gt;16&lt;/div&gt;&lt;div style=&quot;line-height:130%&quot;&gt;17&lt;/div&gt;&lt;div style=&quot;line-height:130%&quot;&gt;18&lt;/div&gt;&lt;div style=&quot;line-height:130%&quot;&gt;19&lt;/div&gt;&lt;div style=&quot;line-height:130%&quot;&gt;20&lt;/div&gt;&lt;div style=&quot;line-height:130%&quot;&gt;21&lt;/div&gt;&lt;div style=&quot;line-height:130%&quot;&gt;22&lt;/div&gt;&lt;div style=&quot;line-height:130%&quot;&gt;23&lt;/div&gt;&lt;div style=&quot;line-height:130%&quot;&gt;24&lt;/div&gt;&lt;div style=&quot;line-height:130%&quot;&gt;25&lt;/div&gt;&lt;div style=&quot;line-height:130%&quot;&gt;26&lt;/div&gt;&lt;div style=&quot;line-height:130%&quot;&gt;27&lt;/div&gt;&lt;div style=&quot;line-height:130%&quot;&gt;28&lt;/div&gt;&lt;div style=&quot;line-height:130%&quot;&gt;29&lt;/div&gt;&lt;div style=&quot;line-height:130%&quot;&gt;30&lt;/div&gt;&lt;div style=&quot;line-height:130%&quot;&gt;31&lt;/div&gt;&lt;div style=&quot;line-height:130%&quot;&gt;32&lt;/div&gt;&lt;/div&gt;&lt;/td&gt;&lt;td style=&quot;padding:6px 0&quot;&gt;&lt;div style=&quot;margin:0; padding:0; color:#f0f0f0; font-family:Consolas, 'Liberation Mono', Menlo, Courier, monospace !important; line-height:130%&quot;&gt;&lt;div style=&quot;padding: 0px 6px; white-space: pre; line-height: 130%; text-align: left;&quot;&gt;&lt;span style=&quot;color:#ff3399&quot;&gt;import&lt;/span&gt;&amp;nbsp;{&lt;/div&gt;&lt;div style=&quot;padding: 0px 6px; white-space: pre; line-height: 130%; text-align: left;&quot;&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;Tray,&lt;/div&gt;&lt;div style=&quot;padding: 0px 6px; white-space: pre; line-height: 130%; text-align: left;&quot;&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;Menu&lt;/div&gt;&lt;div style=&quot;padding: 0px 6px; white-space: pre; line-height: 130%; text-align: left;&quot;&gt;}&amp;nbsp;from&amp;nbsp;&lt;span style=&quot;color:#ffd500&quot;&gt;'electron'&lt;/span&gt;;&lt;/div&gt;&lt;div style=&quot;padding: 0px 6px; white-space: pre; line-height: 130%; text-align: left;&quot;&gt;&amp;nbsp;&lt;/div&gt;&lt;div style=&quot;padding: 0px 6px; white-space: pre; line-height: 130%; text-align: left;&quot;&gt;&lt;span style=&quot;color:#4be6fa&quot;&gt;function&lt;/span&gt;&amp;nbsp;createTray()&amp;nbsp;{&lt;/div&gt;&lt;div style=&quot;padding: 0px 6px; white-space: pre; line-height: 130%; text-align: left;&quot;&gt;&amp;nbsp;&lt;/div&gt;&lt;div style=&quot;padding: 0px 6px; white-space: pre; line-height: 130%; text-align: left;&quot;&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;span style=&quot;color:#999999&quot;&gt;//메인&amp;nbsp;BrowserWindow에서&amp;nbsp;닫기를&amp;nbsp;누를시&amp;nbsp;히든처리가&amp;nbsp;선행되어야함.&lt;/span&gt;&lt;/div&gt;&lt;div style=&quot;padding: 0px 6px; white-space: pre; line-height: 130%; text-align: left;&quot;&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;mainWindow.on(&lt;span style=&quot;color:#ffd500&quot;&gt;'close'&lt;/span&gt;,&amp;nbsp;(event)&amp;nbsp;&lt;span style=&quot;color:#ff3399&quot;&gt;=&lt;/span&gt;&lt;span style=&quot;color:#ff3399&quot;&gt;&amp;gt;&lt;/span&gt;&amp;nbsp;{&lt;/div&gt;&lt;div style=&quot;padding: 0px 6px; white-space: pre; line-height: 130%; text-align: left;&quot;&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;event.preventDefault();&lt;/div&gt;&lt;div style=&quot;padding: 0px 6px; white-space: pre; line-height: 130%; text-align: left;&quot;&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;mainWindow.hide();&lt;/div&gt;&lt;div style=&quot;padding: 0px 6px; white-space: pre; line-height: 130%; text-align: left;&quot;&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;});&lt;/div&gt;&lt;div style=&quot;padding: 0px 6px; white-space: pre; line-height: 130%; text-align: left;&quot;&gt;&amp;nbsp;&lt;/div&gt;&lt;div style=&quot;padding: 0px 6px; white-space: pre; line-height: 130%; text-align: left;&quot;&gt;&amp;nbsp;&lt;/div&gt;&lt;div style=&quot;padding: 0px 6px; white-space: pre; line-height: 130%; text-align: left;&quot;&gt;&amp;nbsp;&lt;/div&gt;&lt;div style=&quot;padding: 0px 6px; white-space: pre; line-height: 130%; text-align: left;&quot;&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;span style=&quot;color:#4be6fa&quot;&gt;const&lt;/span&gt;&amp;nbsp;tray&amp;nbsp;&lt;span style=&quot;color:#ff3399&quot;&gt;=&lt;/span&gt;&amp;nbsp;&lt;span style=&quot;color:#ff3399&quot;&gt;new&lt;/span&gt;&amp;nbsp;Tray(path.join(__static,&amp;nbsp;&lt;span style=&quot;color:#ffd500&quot;&gt;&quot;favicon08.ico&quot;&lt;/span&gt;));&lt;/div&gt;&lt;div style=&quot;padding: 0px 6px; white-space: pre; line-height: 130%; text-align: left;&quot;&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;tray.on(&lt;span style=&quot;color:#ffd500&quot;&gt;'click'&lt;/span&gt;,&amp;nbsp;()&amp;nbsp;&lt;span style=&quot;color:#ff3399&quot;&gt;=&lt;/span&gt;&lt;span style=&quot;color:#ff3399&quot;&gt;&amp;gt;&lt;/span&gt;&amp;nbsp;{&lt;/div&gt;&lt;div style=&quot;padding: 0px 6px; white-space: pre; line-height: 130%; text-align: left;&quot;&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;span style=&quot;color:#999999&quot;&gt;//mainWindow.isVisible()&amp;nbsp;?&amp;nbsp;mainWindow.hide()&amp;nbsp;:&amp;nbsp;mainWindow.show()&lt;/span&gt;&lt;/div&gt;&lt;div style=&quot;padding: 0px 6px; white-space: pre; line-height: 130%; text-align: left;&quot;&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;mainWindow.show();&lt;/div&gt;&lt;div style=&quot;padding: 0px 6px; white-space: pre; line-height: 130%; text-align: left;&quot;&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;})&lt;/div&gt;&lt;div style=&quot;padding: 0px 6px; white-space: pre; line-height: 130%; text-align: left;&quot;&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;span style=&quot;color:#4be6fa&quot;&gt;var&lt;/span&gt;&amp;nbsp;contextMenu&amp;nbsp;&lt;span style=&quot;color:#ff3399&quot;&gt;=&lt;/span&gt;&amp;nbsp;Menu.buildFromTemplate([{&lt;/div&gt;&lt;div style=&quot;padding: 0px 6px; white-space: pre; line-height: 130%; text-align: left;&quot;&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;label:&amp;nbsp;`v${app.getVersion()}`&lt;/div&gt;&lt;div style=&quot;padding: 0px 6px; white-space: pre; line-height: 130%; text-align: left;&quot;&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;},&amp;nbsp;{&lt;/div&gt;&lt;div style=&quot;padding: 0px 6px; white-space: pre; line-height: 130%; text-align: left;&quot;&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;label:&amp;nbsp;&lt;span style=&quot;color:#ffd500&quot;&gt;'Close'&lt;/span&gt;,&lt;/div&gt;&lt;div style=&quot;padding: 0px 6px; white-space: pre; line-height: 130%; text-align: left;&quot;&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;click:&amp;nbsp;&lt;span style=&quot;color:#4be6fa&quot;&gt;function&lt;/span&gt;()&amp;nbsp;{&lt;/div&gt;&lt;div style=&quot;padding: 0px 6px; white-space: pre; line-height: 130%; text-align: left;&quot;&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;mainWindow.close();&lt;/div&gt;&lt;div style=&quot;padding: 0px 6px; white-space: pre; line-height: 130%; text-align: left;&quot;&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;app.quit();&lt;/div&gt;&lt;div style=&quot;padding: 0px 6px; white-space: pre; line-height: 130%; text-align: left;&quot;&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;app.exit();&lt;/div&gt;&lt;div style=&quot;padding: 0px 6px; white-space: pre; line-height: 130%; text-align: left;&quot;&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;}&lt;/div&gt;&lt;div style=&quot;padding: 0px 6px; white-space: pre; line-height: 130%; text-align: left;&quot;&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;}])&lt;/div&gt;&lt;div style=&quot;padding: 0px 6px; white-space: pre; line-height: 130%; text-align: left;&quot;&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;tray.setContextMenu(contextMenu)&lt;/div&gt;&lt;div style=&quot;padding: 0px 6px; white-space: pre; line-height: 130%; text-align: left;&quot;&gt;}&lt;/div&gt;&lt;/div&gt;&lt;div style=&quot;text-align: left; margin-top: -13px; margin-right: 5px; font-size: 9px; font-style: italic;&quot;&gt;&lt;a href=&quot;http://colorscripter.com/info#e&quot; target=&quot;_blank&quot; style=&quot;color: rgb(79, 79, 79);&quot;&gt;Colored by Color Scripter&lt;/a&gt;&lt;/div&gt;&lt;/td&gt;&lt;td style=&quot;vertical-align:bottom; padding:0 2px 4px 0&quot;&gt;&lt;a href=&quot;http://colorscripter.com/info#e&quot; target=&quot;_blank&quot; style=&quot;color: white;&quot;&gt;&lt;span style=&quot;font-size: 9px; word-break: normal; background-color: rgb(79, 79, 79); border-radius: 10px; padding: 1px;&quot;&gt;cs&lt;/span&gt;&lt;/a&gt;&lt;/td&gt;&lt;/tr&gt;&lt;/tbody&gt;&lt;/table&gt;&lt;/div&gt;&lt;p&gt;&lt;br /&gt;&lt;/p&gt;&lt;p&gt;&lt;br /&gt;&lt;/p&gt;&lt;p&gt;&lt;b&gt;5. 자동업데이트&lt;/b&gt;&lt;/p&gt;&lt;p style=&quot;margin-left: 2em;&quot;&gt;-&amp;nbsp;&lt;a href=&quot;https://www.electron.build/auto-update&quot; target=&quot;_blank&quot; class=&quot;tx-link&quot;&gt;electron-updater&lt;/a&gt;를 이용&lt;/p&gt;&lt;p style=&quot;margin-left: 2em;&quot;&gt;- File : &lt;b&gt;package.json :&amp;nbsp;&lt;/b&gt;&lt;/p&gt;&lt;p style=&quot;margin-left: 4em;&quot;&gt;&lt;b&gt;- sciprts트리 밑에 publish 추가하여 npm run publish 일때 s3업로드 수행&lt;/b&gt;&lt;/p&gt;&lt;p style=&quot;margin-left: 4em;&quot;&gt;&lt;b&gt;- build트리 밑에 publish 추가하여 작성, s3 or github or homepage url, 자세한건 문서참고&lt;/b&gt;&lt;/p&gt;&lt;p style=&quot;margin-left: 4em;&quot;&gt;&lt;b&gt;- s3이용시 환경변수에 aws key를 등록 필수&lt;/b&gt;&lt;/p&gt;&lt;p style=&quot;margin-left: 4em;&quot;&gt;&lt;b&gt;- win 64, 32 bit 지원시 아래 추가 win에 target 추가 해주어야 함&lt;/b&gt;&lt;/p&gt;&lt;div class=&quot;colorscripter-code&quot; style=&quot;color:#f0f0f0; font-family:Consolas, 'Liberation Mono', Menlo, Courier, monospace !important; position:relative !important; overflow:auto&quot;&gt;&lt;table class=&quot;colorscripter-code-table&quot; style=&quot;margin:0; padding:0; border:none; background-color:#272727; border-radius:4px;&quot; cellspacing=&quot;0&quot; cellpadding=&quot;0&quot;&gt;&lt;tbody&gt;&lt;tr&gt;&lt;td style=&quot;padding:6px; border-right:2px solid #4f4f4f&quot;&gt;&lt;div style=&quot;margin:0; padding:0; word-break:normal; text-align:right; color:#aaa; font-family:Consolas, 'Liberation Mono', Menlo, Courier, monospace !important; line-height:130%&quot;&gt;&lt;div style=&quot;line-height:130%&quot;&gt;1&lt;/div&gt;&lt;div style=&quot;line-height:130%&quot;&gt;2&lt;/div&gt;&lt;div style=&quot;line-height:130%&quot;&gt;3&lt;/div&gt;&lt;div style=&quot;line-height:130%&quot;&gt;4&lt;/div&gt;&lt;div style=&quot;line-height:130%&quot;&gt;5&lt;/div&gt;&lt;div style=&quot;line-height:130%&quot;&gt;6&lt;/div&gt;&lt;div style=&quot;line-height:130%&quot;&gt;7&lt;/div&gt;&lt;div style=&quot;line-height:130%&quot;&gt;8&lt;/div&gt;&lt;div style=&quot;line-height:130%&quot;&gt;9&lt;/div&gt;&lt;div style=&quot;line-height:130%&quot;&gt;10&lt;/div&gt;&lt;div style=&quot;line-height:130%&quot;&gt;11&lt;/div&gt;&lt;div style=&quot;line-height:130%&quot;&gt;12&lt;/div&gt;&lt;div style=&quot;line-height:130%&quot;&gt;13&lt;/div&gt;&lt;div style=&quot;line-height:130%&quot;&gt;14&lt;/div&gt;&lt;div style=&quot;line-height:130%&quot;&gt;15&lt;/div&gt;&lt;div style=&quot;line-height:130%&quot;&gt;16&lt;/div&gt;&lt;div style=&quot;line-height:130%&quot;&gt;17&lt;/div&gt;&lt;div style=&quot;line-height:130%&quot;&gt;18&lt;/div&gt;&lt;div style=&quot;line-height:130%&quot;&gt;19&lt;/div&gt;&lt;div style=&quot;line-height:130%&quot;&gt;20&lt;/div&gt;&lt;div style=&quot;line-height:130%&quot;&gt;21&lt;/div&gt;&lt;div style=&quot;line-height:130%&quot;&gt;22&lt;/div&gt;&lt;div style=&quot;line-height:130%&quot;&gt;23&lt;/div&gt;&lt;div style=&quot;line-height:130%&quot;&gt;24&lt;/div&gt;&lt;div style=&quot;line-height:130%&quot;&gt;25&lt;/div&gt;&lt;div style=&quot;line-height:130%&quot;&gt;26&lt;/div&gt;&lt;div style=&quot;line-height:130%&quot;&gt;27&lt;/div&gt;&lt;div style=&quot;line-height:130%&quot;&gt;28&lt;/div&gt;&lt;div style=&quot;line-height:130%&quot;&gt;29&lt;/div&gt;&lt;/div&gt;&lt;/td&gt;&lt;td style=&quot;padding:6px 0&quot;&gt;&lt;div style=&quot;margin:0; padding:0; color:#f0f0f0; font-family:Consolas, 'Liberation Mono', Menlo, Courier, monospace !important; line-height:130%&quot;&gt;&lt;div style=&quot;padding: 0px 6px; white-space: pre; line-height: 130%; text-align: left;&quot;&gt;{&lt;/div&gt;&lt;div style=&quot;padding: 0px 6px; white-space: pre; line-height: 130%; text-align: left;&quot;&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;.....,&lt;/div&gt;&lt;div style=&quot;padding: 0px 6px; white-space: pre; line-height: 130%; text-align: left;&quot;&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&quot;scripts&quot;:&lt;/div&gt;&lt;div style=&quot;padding: 0px 6px; white-space: pre; line-height: 130%; text-align: left;&quot;&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;{&lt;/div&gt;&lt;div style=&quot;padding: 0px 6px; white-space: pre; line-height: 130%; text-align: left;&quot;&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&quot;publish&quot;:&amp;nbsp;&quot;node&amp;nbsp;.electron-vue/build.js&amp;nbsp;&amp;amp;&amp;amp;&amp;nbsp;electron-builder&amp;nbsp;--publish&amp;nbsp;always&quot;&lt;/div&gt;&lt;div style=&quot;padding: 0px 6px; white-space: pre; line-height: 130%; text-align: left;&quot;&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;},&lt;/div&gt;&lt;div style=&quot;padding: 0px 6px; white-space: pre; line-height: 130%; text-align: left;&quot;&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&quot;build&quot;:&lt;/div&gt;&lt;div style=&quot;padding: 0px 6px; white-space: pre; line-height: 130%; text-align: left;&quot;&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;{&lt;/div&gt;&lt;div style=&quot;padding: 0px 6px; white-space: pre; line-height: 130%; text-align: left;&quot;&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&quot;publish&quot;:&lt;/div&gt;&lt;div style=&quot;padding: 0px 6px; white-space: pre; line-height: 130%; text-align: left;&quot;&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;{&lt;/div&gt;&lt;div style=&quot;padding: 0px 6px; white-space: pre; line-height: 130%; text-align: left;&quot;&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&quot;provider&quot;:&amp;nbsp;&quot;s3&quot;,&lt;/div&gt;&lt;div style=&quot;padding: 0px 6px; white-space: pre; line-height: 130%; text-align: left;&quot;&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&quot;bucket&quot;:&amp;nbsp;&quot;bucketName&quot;,&lt;/div&gt;&lt;div style=&quot;padding: 0px 6px; white-space: pre; line-height: 130%; text-align: left;&quot;&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&quot;acl&quot;:&amp;nbsp;&quot;public-read&quot;&lt;/div&gt;&lt;div style=&quot;padding: 0px 6px; white-space: pre; line-height: 130%; text-align: left;&quot;&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;},&lt;/div&gt;&lt;div style=&quot;padding: 0px 6px; white-space: pre; line-height: 130%; text-align: left;&quot;&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&quot;win&quot;:&lt;/div&gt;&lt;div style=&quot;padding: 0px 6px; white-space: pre; line-height: 130%; text-align: left;&quot;&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;{&lt;/div&gt;&lt;div style=&quot;padding: 0px 6px; white-space: pre; line-height: 130%; text-align: left;&quot;&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&quot;target&quot;:&amp;nbsp;[&lt;/div&gt;&lt;div style=&quot;padding: 0px 6px; white-space: pre; line-height: 130%; text-align: left;&quot;&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;{&lt;/div&gt;&lt;div style=&quot;padding: 0px 6px; white-space: pre; line-height: 130%; text-align: left;&quot;&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&quot;target&quot;:&amp;nbsp;&quot;nsis&quot;,&lt;/div&gt;&lt;div style=&quot;padding: 0px 6px; white-space: pre; line-height: 130%; text-align: left;&quot;&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&quot;arch&quot;:&amp;nbsp;[&lt;/div&gt;&lt;div style=&quot;padding: 0px 6px; white-space: pre; line-height: 130%; text-align: left;&quot;&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&quot;x64&quot;,&lt;/div&gt;&lt;div style=&quot;padding: 0px 6px; white-space: pre; line-height: 130%; text-align: left;&quot;&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&quot;ia32&quot;&lt;/div&gt;&lt;div style=&quot;padding: 0px 6px; white-space: pre; line-height: 130%; text-align: left;&quot;&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;]&lt;/div&gt;&lt;div style=&quot;padding: 0px 6px; white-space: pre; line-height: 130%; text-align: left;&quot;&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;}],&lt;/div&gt;&lt;div style=&quot;padding: 0px 6px; white-space: pre; line-height: 130%; text-align: left;&quot;&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&quot;icon&quot;:&amp;nbsp;&quot;build/icons/icon.ico&quot;&lt;/div&gt;&lt;div style=&quot;padding: 0px 6px; white-space: pre; line-height: 130%; text-align: left;&quot;&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;},&lt;/div&gt;&lt;div style=&quot;padding: 0px 6px; white-space: pre; line-height: 130%; text-align: left;&quot;&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;......&lt;/div&gt;&lt;div style=&quot;padding: 0px 6px; white-space: pre; line-height: 130%; text-align: left;&quot;&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;}&lt;/div&gt;&lt;div style=&quot;padding: 0px 6px; white-space: pre; line-height: 130%; text-align: left;&quot;&gt;}&lt;/div&gt;&lt;/div&gt;&lt;div style=&quot;text-align: left; margin-top: -13px; margin-right: 5px; font-size: 9px; font-style: italic;&quot;&gt;&lt;a href=&quot;http://colorscripter.com/info#e&quot; target=&quot;_blank&quot; style=&quot;color: rgb(79, 79, 79);&quot;&gt;Colored by Color Scripter&lt;/a&gt;&lt;/div&gt;&lt;/td&gt;&lt;td style=&quot;vertical-align:bottom; padding:0 2px 4px 0&quot;&gt;&lt;a href=&quot;http://colorscripter.com/info#e&quot; target=&quot;_blank&quot; style=&quot;color: white;&quot;&gt;&lt;span style=&quot;font-size: 9px; word-break: normal; background-color: rgb(79, 79, 79); border-radius: 10px; padding: 1px;&quot;&gt;cs&lt;/span&gt;&lt;/a&gt;&lt;/td&gt;&lt;/tr&gt;&lt;/tbody&gt;&lt;/table&gt;&lt;/div&gt;&lt;div class=&quot;colorscripter-code&quot; style=&quot;color:#f0f0f0; font-family:Consolas, 'Liberation Mono', Menlo, Courier, monospace !important; position:relative !important; overflow:auto&quot;&gt;&lt;p&gt;&lt;br /&gt;&lt;/p&gt;&lt;/div&gt;&lt;div class=&quot;colorscripter-code&quot; style=&quot;color:#f0f0f0; font-family:Consolas, 'Liberation Mono', Menlo, Courier, monospace !important; position:relative !important; overflow:auto&quot;&gt;&lt;p&gt;&lt;/p&gt;&lt;p&gt;&lt;/p&gt;&lt;/div&gt;&lt;p style=&quot;margin-left: 2em;&quot;&gt;- File :&amp;nbsp;&lt;b&gt;src/main/index.js&lt;/b&gt;&lt;/p&gt;&lt;div class=&quot;colorscripter-code&quot; style=&quot;color:#f0f0f0; font-family:Consolas, 'Liberation Mono', Menlo, Courier, monospace !important; position:relative !important; overflow:auto&quot;&gt;&lt;table class=&quot;colorscripter-code-table&quot; style=&quot;margin:0; padding:0; border:none; background-color:#272727; border-radius:4px;&quot; cellspacing=&quot;0&quot; cellpadding=&quot;0&quot;&gt;&lt;tbody&gt;&lt;tr&gt;&lt;td style=&quot;padding:6px; border-right:2px solid #4f4f4f&quot;&gt;&lt;div style=&quot;margin:0; padding:0; word-break:normal; text-align:right; color:#aaa; font-family:Consolas, 'Liberation Mono', Menlo, Courier, monospace !important; line-height:130%&quot;&gt;&lt;div style=&quot;line-height:130%&quot;&gt;1&lt;/div&gt;&lt;div style=&quot;line-height:130%&quot;&gt;2&lt;/div&gt;&lt;div style=&quot;line-height:130%&quot;&gt;3&lt;/div&gt;&lt;div style=&quot;line-height:130%&quot;&gt;4&lt;/div&gt;&lt;div style=&quot;line-height:130%&quot;&gt;5&lt;/div&gt;&lt;div style=&quot;line-height:130%&quot;&gt;6&lt;/div&gt;&lt;div style=&quot;line-height:130%&quot;&gt;7&lt;/div&gt;&lt;div style=&quot;line-height:130%&quot;&gt;8&lt;/div&gt;&lt;div style=&quot;line-height:130%&quot;&gt;9&lt;/div&gt;&lt;div style=&quot;line-height:130%&quot;&gt;10&lt;/div&gt;&lt;div style=&quot;line-height:130%&quot;&gt;11&lt;/div&gt;&lt;div style=&quot;line-height:130%&quot;&gt;12&lt;/div&gt;&lt;div style=&quot;line-height:130%&quot;&gt;13&lt;/div&gt;&lt;div style=&quot;line-height:130%&quot;&gt;14&lt;/div&gt;&lt;div style=&quot;line-height:130%&quot;&gt;15&lt;/div&gt;&lt;div style=&quot;line-height:130%&quot;&gt;16&lt;/div&gt;&lt;div style=&quot;line-height:130%&quot;&gt;17&lt;/div&gt;&lt;div style=&quot;line-height:130%&quot;&gt;18&lt;/div&gt;&lt;div style=&quot;line-height:130%&quot;&gt;19&lt;/div&gt;&lt;div style=&quot;line-height:130%&quot;&gt;20&lt;/div&gt;&lt;div style=&quot;line-height:130%&quot;&gt;21&lt;/div&gt;&lt;div style=&quot;line-height:130%&quot;&gt;22&lt;/div&gt;&lt;div style=&quot;line-height:130%&quot;&gt;23&lt;/div&gt;&lt;div style=&quot;line-height:130%&quot;&gt;24&lt;/div&gt;&lt;div style=&quot;line-height:130%&quot;&gt;25&lt;/div&gt;&lt;div style=&quot;line-height:130%&quot;&gt;26&lt;/div&gt;&lt;div style=&quot;line-height:130%&quot;&gt;27&lt;/div&gt;&lt;div style=&quot;line-height:130%&quot;&gt;28&lt;/div&gt;&lt;div style=&quot;line-height:130%&quot;&gt;29&lt;/div&gt;&lt;div style=&quot;line-height:130%&quot;&gt;30&lt;/div&gt;&lt;div style=&quot;line-height:130%&quot;&gt;31&lt;/div&gt;&lt;div style=&quot;line-height:130%&quot;&gt;32&lt;/div&gt;&lt;div style=&quot;line-height:130%&quot;&gt;33&lt;/div&gt;&lt;div style=&quot;line-height:130%&quot;&gt;34&lt;/div&gt;&lt;div style=&quot;line-height:130%&quot;&gt;35&lt;/div&gt;&lt;div style=&quot;line-height:130%&quot;&gt;36&lt;/div&gt;&lt;div style=&quot;line-height:130%&quot;&gt;37&lt;/div&gt;&lt;div style=&quot;line-height:130%&quot;&gt;38&lt;/div&gt;&lt;div style=&quot;line-height:130%&quot;&gt;39&lt;/div&gt;&lt;div style=&quot;line-height:130%&quot;&gt;40&lt;/div&gt;&lt;div style=&quot;line-height:130%&quot;&gt;41&lt;/div&gt;&lt;div style=&quot;line-height:130%&quot;&gt;42&lt;/div&gt;&lt;div style=&quot;line-height:130%&quot;&gt;43&lt;/div&gt;&lt;div style=&quot;line-height:130%&quot;&gt;44&lt;/div&gt;&lt;div style=&quot;line-height:130%&quot;&gt;45&lt;/div&gt;&lt;div style=&quot;line-height:130%&quot;&gt;46&lt;/div&gt;&lt;div style=&quot;line-height:130%&quot;&gt;47&lt;/div&gt;&lt;div style=&quot;line-height:130%&quot;&gt;48&lt;/div&gt;&lt;div style=&quot;line-height:130%&quot;&gt;49&lt;/div&gt;&lt;div style=&quot;line-height:130%&quot;&gt;50&lt;/div&gt;&lt;div style=&quot;line-height:130%&quot;&gt;51&lt;/div&gt;&lt;div style=&quot;line-height:130%&quot;&gt;52&lt;/div&gt;&lt;div style=&quot;line-height:130%&quot;&gt;53&lt;/div&gt;&lt;div style=&quot;line-height:130%&quot;&gt;54&lt;/div&gt;&lt;div style=&quot;line-height:130%&quot;&gt;55&lt;/div&gt;&lt;div style=&quot;line-height:130%&quot;&gt;56&lt;/div&gt;&lt;div style=&quot;line-height:130%&quot;&gt;57&lt;/div&gt;&lt;div style=&quot;line-height:130%&quot;&gt;58&lt;/div&gt;&lt;/div&gt;&lt;/td&gt;&lt;td style=&quot;padding:6px 0&quot;&gt;&lt;div style=&quot;margin:0; padding:0; color:#f0f0f0; font-family:Consolas, 'Liberation Mono', Menlo, Courier, monospace !important; line-height:130%&quot;&gt;&lt;div style=&quot;padding: 0px 6px; white-space: pre; line-height: 130%; text-align: left;&quot;&gt;&lt;span style=&quot;color:#ff3399&quot;&gt;import&lt;/span&gt;&amp;nbsp;{&lt;/div&gt;&lt;div style=&quot;padding: 0px 6px; white-space: pre; line-height: 130%; text-align: left;&quot;&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;app,&lt;/div&gt;&lt;div style=&quot;padding: 0px 6px; white-space: pre; line-height: 130%; text-align: left;&quot;&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;dialog,&lt;/div&gt;&lt;div style=&quot;padding: 0px 6px; white-space: pre; line-height: 130%; text-align: left;&quot;&gt;}&amp;nbsp;from&amp;nbsp;&lt;span style=&quot;color:#ffd500&quot;&gt;'electron'&lt;/span&gt;;&lt;/div&gt;&lt;div style=&quot;padding: 0px 6px; white-space: pre; line-height: 130%; text-align: left;&quot;&gt;&amp;nbsp;&lt;/div&gt;&lt;div style=&quot;padding: 0px 6px; white-space: pre; line-height: 130%; text-align: left;&quot;&gt;&lt;span style=&quot;color:#ff3399&quot;&gt;import&lt;/span&gt;&amp;nbsp;{&lt;/div&gt;&lt;div style=&quot;padding: 0px 6px; white-space: pre; line-height: 130%; text-align: left;&quot;&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;autoUpdater&lt;/div&gt;&lt;div style=&quot;padding: 0px 6px; white-space: pre; line-height: 130%; text-align: left;&quot;&gt;}&amp;nbsp;from&amp;nbsp;&lt;span style=&quot;color:#ffd500&quot;&gt;'electron-updater'&lt;/span&gt;;&lt;/div&gt;&lt;div style=&quot;padding: 0px 6px; white-space: pre; line-height: 130%; text-align: left;&quot;&gt;&amp;nbsp;&lt;/div&gt;&lt;div style=&quot;padding: 0px 6px; white-space: pre; line-height: 130%; text-align: left;&quot;&gt;&lt;span style=&quot;color:#ff3399&quot;&gt;if&lt;/span&gt;&amp;nbsp;(process.env.NODE_ENV&amp;nbsp;&lt;span style=&quot;color:#ff3399&quot;&gt;!&lt;/span&gt;&lt;span style=&quot;color:#ff3399&quot;&gt;=&lt;/span&gt;&lt;span style=&quot;color:#ff3399&quot;&gt;=&lt;/span&gt;&amp;nbsp;&lt;span style=&quot;color:#ffd500&quot;&gt;'production'&lt;/span&gt;)&amp;nbsp;{&lt;/div&gt;&lt;div style=&quot;padding: 0px 6px; white-space: pre; line-height: 130%; text-align: left;&quot;&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;span style=&quot;color:#999999&quot;&gt;//개발환경일경우&amp;nbsp;설정파일이&amp;nbsp;없어서&amp;nbsp;오류&amp;nbsp;index.js와&amp;nbsp;같은&amp;nbsp;폴더에&amp;nbsp;앱업데이트&amp;nbsp;설정을&amp;nbsp;넣어둬&amp;nbsp;해결&lt;/span&gt;&lt;/div&gt;&lt;div style=&quot;padding: 0px 6px; white-space: pre; line-height: 130%; text-align: left;&quot;&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;autoUpdater.updateConfigPath&amp;nbsp;&lt;span style=&quot;color:#ff3399&quot;&gt;=&lt;/span&gt;&amp;nbsp;path.join(__dirname,&amp;nbsp;&lt;span style=&quot;color:#ffd500&quot;&gt;'dev-app-update.yml'&lt;/span&gt;);&lt;/div&gt;&lt;div style=&quot;padding: 0px 6px; white-space: pre; line-height: 130%; text-align: left;&quot;&gt;}&amp;nbsp;&lt;/div&gt;&lt;div style=&quot;padding: 0px 6px; white-space: pre; line-height: 130%; text-align: left;&quot;&gt;&amp;nbsp;&lt;/div&gt;&lt;div style=&quot;padding: 0px 6px; white-space: pre; line-height: 130%; text-align: left;&quot;&gt;app.on(&lt;span style=&quot;color:#ffd500&quot;&gt;'ready'&lt;/span&gt;,&amp;nbsp;&lt;span style=&quot;color:#4be6fa&quot;&gt;function&lt;/span&gt;()&amp;nbsp;{&lt;/div&gt;&lt;div style=&quot;padding: 0px 6px; white-space: pre; line-height: 130%; text-align: left;&quot;&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;span style=&quot;color:#999999&quot;&gt;//운영환경일때만&amp;nbsp;업데이트&amp;nbsp;하도록&amp;nbsp;해도&amp;nbsp;무방&lt;/span&gt;&lt;/div&gt;&lt;div style=&quot;padding: 0px 6px; white-space: pre; line-height: 130%; text-align: left;&quot;&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;span style=&quot;color:#999999&quot;&gt;//if&amp;nbsp;(process.env.NODE_ENV&amp;nbsp;!==&amp;nbsp;'production')&amp;nbsp;&lt;/span&gt;&lt;/div&gt;&lt;div style=&quot;padding: 0px 6px; white-space: pre; line-height: 130%; text-align: left;&quot;&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;autoUpdater.checkForUpdates();&lt;/div&gt;&lt;div style=&quot;padding: 0px 6px; white-space: pre; line-height: 130%; text-align: left;&quot;&gt;});&lt;/div&gt;&lt;div style=&quot;padding: 0px 6px; white-space: pre; line-height: 130%; text-align: left;&quot;&gt;&amp;nbsp;&lt;/div&gt;&lt;div style=&quot;padding: 0px 6px; white-space: pre; line-height: 130%; text-align: left;&quot;&gt;&amp;nbsp;&lt;/div&gt;&lt;div style=&quot;padding: 0px 6px; white-space: pre; line-height: 130%; text-align: left;&quot;&gt;autoUpdater.on(&lt;span style=&quot;color:#ffd500&quot;&gt;'checking-for-update'&lt;/span&gt;,&amp;nbsp;&lt;span style=&quot;color:#4be6fa&quot;&gt;function&lt;/span&gt;()&amp;nbsp;{&lt;/div&gt;&lt;div style=&quot;padding: 0px 6px; white-space: pre; line-height: 130%; text-align: left;&quot;&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;console.log(&lt;span style=&quot;color:#ffd500&quot;&gt;'Checking-for-update'&lt;/span&gt;);&lt;/div&gt;&lt;div style=&quot;padding: 0px 6px; white-space: pre; line-height: 130%; text-align: left;&quot;&gt;});&lt;/div&gt;&lt;div style=&quot;padding: 0px 6px; white-space: pre; line-height: 130%; text-align: left;&quot;&gt;autoUpdater.on(&lt;span style=&quot;color:#ffd500&quot;&gt;'error'&lt;/span&gt;,&amp;nbsp;&lt;span style=&quot;color:#4be6fa&quot;&gt;function&lt;/span&gt;(error)&amp;nbsp;{&lt;/div&gt;&lt;div style=&quot;padding: 0px 6px; white-space: pre; line-height: 130%; text-align: left;&quot;&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;console.error(&lt;span style=&quot;color:#ffd500&quot;&gt;'error'&lt;/span&gt;,&amp;nbsp;error);&lt;/div&gt;&lt;div style=&quot;padding: 0px 6px; white-space: pre; line-height: 130%; text-align: left;&quot;&gt;});&lt;/div&gt;&lt;div style=&quot;padding: 0px 6px; white-space: pre; line-height: 130%; text-align: left;&quot;&gt;autoUpdater.on(&lt;span style=&quot;color:#ffd500&quot;&gt;'download-progress'&lt;/span&gt;,&amp;nbsp;&lt;span style=&quot;color:#4be6fa&quot;&gt;function&lt;/span&gt;(bytesPerSecond,&amp;nbsp;percent,&amp;nbsp;total,&amp;nbsp;transferred)&amp;nbsp;{&lt;/div&gt;&lt;div style=&quot;padding: 0px 6px; white-space: pre; line-height: 130%; text-align: left;&quot;&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;console.log(`&lt;span style=&quot;color:#ff3399&quot;&gt;$&lt;/span&gt;{bytesPerSecond},&amp;nbsp;&lt;span style=&quot;color:#ff3399&quot;&gt;$&lt;/span&gt;{percent},&amp;nbsp;&lt;span style=&quot;color:#ff3399&quot;&gt;$&lt;/span&gt;{total},&amp;nbsp;&lt;span style=&quot;color:#ff3399&quot;&gt;$&lt;/span&gt;{transferred}`);&lt;/div&gt;&lt;div style=&quot;padding: 0px 6px; white-space: pre; line-height: 130%; text-align: left;&quot;&gt;});&lt;/div&gt;&lt;div style=&quot;padding: 0px 6px; white-space: pre; line-height: 130%; text-align: left;&quot;&gt;&lt;span style=&quot;color:#999999&quot;&gt;//다운로드&amp;nbsp;완료되면&amp;nbsp;업데이트&lt;/span&gt;&lt;/div&gt;&lt;div style=&quot;padding: 0px 6px; white-space: pre; line-height: 130%; text-align: left;&quot;&gt;autoUpdater.on(&lt;span style=&quot;color:#ffd500&quot;&gt;'update-downloaded'&lt;/span&gt;,&amp;nbsp;&lt;span style=&quot;color:#4be6fa&quot;&gt;function&lt;/span&gt;(event,&amp;nbsp;releaseNotes,&amp;nbsp;releaseName)&amp;nbsp;{&lt;/div&gt;&lt;div style=&quot;padding: 0px 6px; white-space: pre; line-height: 130%; text-align: left;&quot;&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;console.log(&lt;span style=&quot;color:#ffd500&quot;&gt;'update-downloaded'&lt;/span&gt;);&lt;/div&gt;&lt;div style=&quot;padding: 0px 6px; white-space: pre; line-height: 130%; text-align: left;&quot;&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;span style=&quot;color:#4be6fa&quot;&gt;const&lt;/span&gt;&amp;nbsp;dialogOpts&amp;nbsp;&lt;span style=&quot;color:#ff3399&quot;&gt;=&lt;/span&gt;&amp;nbsp;{&lt;/div&gt;&lt;div style=&quot;padding: 0px 6px; white-space: pre; line-height: 130%; text-align: left;&quot;&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;type:&amp;nbsp;&lt;span style=&quot;color:#ffd500&quot;&gt;'info'&lt;/span&gt;,&lt;/div&gt;&lt;div style=&quot;padding: 0px 6px; white-space: pre; line-height: 130%; text-align: left;&quot;&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;buttons:&amp;nbsp;[&lt;span style=&quot;color:#ffd500&quot;&gt;'재시작'&lt;/span&gt;,&amp;nbsp;&lt;span style=&quot;color:#ffd500&quot;&gt;'종료'&lt;/span&gt;],&lt;/div&gt;&lt;div style=&quot;padding: 0px 6px; white-space: pre; line-height: 130%; text-align: left;&quot;&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;title:&amp;nbsp;&lt;span style=&quot;color:#ffd500&quot;&gt;'Application&amp;nbsp;Update'&lt;/span&gt;,&lt;/div&gt;&lt;div style=&quot;padding: 0px 6px; white-space: pre; line-height: 130%; text-align: left;&quot;&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;message:&amp;nbsp;process.platform&amp;nbsp;&lt;span style=&quot;color:#ff3399&quot;&gt;=&lt;/span&gt;&lt;span style=&quot;color:#ff3399&quot;&gt;=&lt;/span&gt;&lt;span style=&quot;color:#ff3399&quot;&gt;=&lt;/span&gt;&amp;nbsp;&lt;span style=&quot;color:#ffd500&quot;&gt;'win32'&lt;/span&gt;&amp;nbsp;&lt;span style=&quot;color:#ff3399&quot;&gt;?&lt;/span&gt;&amp;nbsp;releaseNotes&amp;nbsp;&lt;span style=&quot;color:#ff3399&quot;&gt;:&lt;/span&gt;&amp;nbsp;releaseName,&lt;/div&gt;&lt;div style=&quot;padding: 0px 6px; white-space: pre; line-height: 130%; text-align: left;&quot;&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;detail:&amp;nbsp;&lt;span style=&quot;color:#ffd500&quot;&gt;'새로운&amp;nbsp;버전이&amp;nbsp;다운로드&amp;nbsp;되었습니다.&amp;nbsp;애플리케이션을&amp;nbsp;재시작하여&amp;nbsp;업데이트를&amp;nbsp;적용해&amp;nbsp;주세요.'&lt;/span&gt;&lt;/div&gt;&lt;div style=&quot;padding: 0px 6px; white-space: pre; line-height: 130%; text-align: left;&quot;&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;};&lt;/div&gt;&lt;div style=&quot;padding: 0px 6px; white-space: pre; line-height: 130%; text-align: left;&quot;&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;dialog.showMessageBox(dialogOpts,&amp;nbsp;(response)&amp;nbsp;&lt;span style=&quot;color:#ff3399&quot;&gt;=&lt;/span&gt;&lt;span style=&quot;color:#ff3399&quot;&gt;&amp;gt;&lt;/span&gt;&amp;nbsp;{&lt;/div&gt;&lt;div style=&quot;padding: 0px 6px; white-space: pre; line-height: 130%; text-align: left;&quot;&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;span style=&quot;color:#ff3399&quot;&gt;if&lt;/span&gt;&amp;nbsp;(response&amp;nbsp;&lt;span style=&quot;color:#ff3399&quot;&gt;=&lt;/span&gt;&lt;span style=&quot;color:#ff3399&quot;&gt;=&lt;/span&gt;&lt;span style=&quot;color:#ff3399&quot;&gt;=&lt;/span&gt;&amp;nbsp;&lt;span style=&quot;color:#c10aff&quot;&gt;0&lt;/span&gt;)&amp;nbsp;{&lt;/div&gt;&lt;div style=&quot;padding: 0px 6px; white-space: pre; line-height: 130%; text-align: left;&quot;&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;autoUpdater.quitAndInstall();&lt;/div&gt;&lt;div style=&quot;padding: 0px 6px; white-space: pre; line-height: 130%; text-align: left;&quot;&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;}&amp;nbsp;&lt;span style=&quot;color:#ff3399&quot;&gt;else&lt;/span&gt;&amp;nbsp;{&lt;/div&gt;&lt;div style=&quot;padding: 0px 6px; white-space: pre; line-height: 130%; text-align: left;&quot;&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;app.quit();&lt;/div&gt;&lt;div style=&quot;padding: 0px 6px; white-space: pre; line-height: 130%; text-align: left;&quot;&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;app.exit();&lt;/div&gt;&lt;div style=&quot;padding: 0px 6px; white-space: pre; line-height: 130%; text-align: left;&quot;&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;}&lt;/div&gt;&lt;div style=&quot;padding: 0px 6px; white-space: pre; line-height: 130%; text-align: left;&quot;&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;});&lt;/div&gt;&lt;div style=&quot;padding: 0px 6px; white-space: pre; line-height: 130%; text-align: left;&quot;&gt;});&lt;/div&gt;&lt;div style=&quot;padding: 0px 6px; white-space: pre; line-height: 130%; text-align: left;&quot;&gt;&lt;span style=&quot;color:#999999&quot;&gt;//신규&amp;nbsp;업로드가&amp;nbsp;있을경우&amp;nbsp;===&amp;nbsp;구버전&lt;/span&gt;&lt;/div&gt;&lt;div style=&quot;padding: 0px 6px; white-space: pre; line-height: 130%; text-align: left;&quot;&gt;autoUpdater.on(&lt;span style=&quot;color:#ffd500&quot;&gt;'update-available'&lt;/span&gt;,&amp;nbsp;&lt;span style=&quot;color:#4be6fa&quot;&gt;function&lt;/span&gt;()&amp;nbsp;{&lt;/div&gt;&lt;div style=&quot;padding: 0px 6px; white-space: pre; line-height: 130%; text-align: left;&quot;&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;console.log(&lt;span style=&quot;color:#ffd500&quot;&gt;'A&amp;nbsp;new&amp;nbsp;update&amp;nbsp;is&amp;nbsp;available'&lt;/span&gt;);&lt;/div&gt;&lt;div style=&quot;padding: 0px 6px; white-space: pre; line-height: 130%; text-align: left;&quot;&gt;});&lt;/div&gt;&lt;div style=&quot;padding: 0px 6px; white-space: pre; line-height: 130%; text-align: left;&quot;&gt;&amp;nbsp;&lt;/div&gt;&lt;div style=&quot;padding: 0px 6px; white-space: pre; line-height: 130%; text-align: left;&quot;&gt;&lt;span style=&quot;color:#999999&quot;&gt;//신규&amp;nbsp;업로드가&amp;nbsp;없을경우&amp;nbsp;===&amp;nbsp;최신버전&lt;/span&gt;&lt;/div&gt;&lt;div style=&quot;padding: 0px 6px; white-space: pre; line-height: 130%; text-align: left;&quot;&gt;autoUpdater.on(&lt;span style=&quot;color:#ffd500&quot;&gt;'update-not-available'&lt;/span&gt;,&amp;nbsp;&lt;span style=&quot;color:#4be6fa&quot;&gt;function&lt;/span&gt;()&amp;nbsp;{&lt;/div&gt;&lt;div style=&quot;padding: 0px 6px; white-space: pre; line-height: 130%; text-align: left;&quot;&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;console.log(&lt;span style=&quot;color:#ffd500&quot;&gt;'update-not-available'&lt;/span&gt;);&lt;/div&gt;&lt;div style=&quot;padding: 0px 6px; white-space: pre; line-height: 130%; text-align: left;&quot;&gt;});&lt;/div&gt;&lt;/div&gt;&lt;div style=&quot;text-align: left; margin-top: -13px; margin-right: 5px; font-size: 9px; font-style: italic;&quot;&gt;&lt;a href=&quot;http://colorscripter.com/info#e&quot; target=&quot;_blank&quot; style=&quot;color: rgb(79, 79, 79);&quot;&gt;Colored by Color Scripter&lt;/a&gt;&lt;/div&gt;&lt;/td&gt;&lt;td style=&quot;vertical-align:bottom; padding:0 2px 4px 0&quot;&gt;&lt;a href=&quot;http://colorscripter.com/info#e&quot; target=&quot;_blank&quot; style=&quot;color: white;&quot;&gt;&lt;span style=&quot;font-size: 9px; word-break: normal; background-color: rgb(79, 79, 79); border-radius: 10px; padding: 1px;&quot;&gt;cs&lt;/span&gt;&lt;/a&gt;&lt;/td&gt;&lt;/tr&gt;&lt;/tbody&gt;&lt;/table&gt;&lt;/div&gt;&lt;p&gt;&lt;br /&gt;&lt;/p&gt;&lt;p&gt;&lt;br /&gt;&lt;/p&gt;&lt;p&gt;&lt;b&gt;6. 설정 끝 화면개발 시작&lt;/b&gt;&lt;/p&gt;&lt;p style=&quot;margin-left: 2em;&quot;&gt;&lt;b&gt;- .........&lt;/b&gt;&lt;/p&gt;&lt;p style=&quot;margin-left: 2em;&quot;&gt;&lt;b&gt;&lt;br /&gt;&lt;/b&gt;&lt;/p&gt;</description>
      <category>auto update</category>
      <category>electron</category>
      <category>electron-updater</category>
      <category>자동업데이트</category>
      <author>장송송</author>
      <guid isPermaLink="true">https://jsongsong.tistory.com/51</guid>
      <comments>https://jsongsong.tistory.com/51#entry51comment</comments>
      <pubDate>Fri, 8 Feb 2019 17:22:47 +0900</pubDate>
    </item>
    <item>
      <title>브라우저봇 만들기 - Puppeteer</title>
      <link>https://jsongsong.tistory.com/44</link>
      <description>&lt;p&gt;&lt;b&gt;0. Puppeteer란?&lt;/b&gt;&lt;/p&gt;&lt;p style=&quot;margin-left: 2em;&quot;&gt;- Google Chrome에서 공개한 Chrome브라우저를 제어하는 Nodejs 라이브러리이다.&lt;/p&gt;&lt;p style=&quot;margin-left: 2em;&quot;&gt;- 브라우저를 제어할수 있기에 브라우저에서 할수있는 모든걸 제어할수 있다.&lt;/p&gt;&lt;p style=&quot;margin-left: 2em;&quot;&gt;-&amp;nbsp;https://github.com/GoogleChrome/puppeteer&lt;/p&gt;&lt;p style=&quot;margin-left: 2em;&quot;&gt;&lt;br /&gt;&lt;/p&gt;&lt;p style=&quot;margin-left: 2em;&quot;&gt;&lt;br /&gt;&lt;/p&gt;&lt;p&gt;&lt;b&gt;1. 사용해보기&lt;/b&gt;&lt;/p&gt;&lt;p style=&quot;margin-left: 2em;&quot;&gt;&lt;b&gt;- 예제 만들기&lt;/b&gt;&lt;/p&gt;&lt;p style=&quot;margin-left: 2em;&quot;&gt;1) 연합인포맥스 사이트를 접속&lt;/p&gt;&lt;p style=&quot;margin-left: 2em;&quot;&gt;2) '주요 국제금융뉴스'를 조회&lt;/p&gt;&lt;p style=&quot;margin-left: 2em;&quot;&gt;3) 제목과 링크를 가져오기&lt;/p&gt;&lt;div class=&quot;colorscripter-code&quot; style=&quot;color:#f0f0f0; font-family:Consolas, 'Liberation Mono', Menlo, Courier, monospace !important; position:relative !important; overflow:auto&quot;&gt;&lt;p style=&quot;margin-left: 2em;&quot;&gt;&lt;table class=&quot;colorscripter-code-table&quot; style=&quot;margin:0; padding:0; border:none; background-color:#272727; border-radius:4px;&quot; cellspacing=&quot;0&quot; cellpadding=&quot;0&quot;&gt;&lt;tbody&gt;&lt;tr&gt;&lt;td style=&quot;padding:6px; border-right:2px solid #4f4f4f&quot;&gt;&lt;div style=&quot;margin:0; padding:0; word-break:normal; text-align:right; color:#aaa; font-family:Consolas, 'Liberation Mono', Menlo, Courier, monospace !important; line-height:130%&quot;&gt;&lt;div style=&quot;line-height:130%&quot;&gt;1&lt;/div&gt;&lt;div style=&quot;line-height:130%&quot;&gt;2&lt;/div&gt;&lt;div style=&quot;line-height:130%&quot;&gt;3&lt;/div&gt;&lt;div style=&quot;line-height:130%&quot;&gt;4&lt;/div&gt;&lt;div style=&quot;line-height:130%&quot;&gt;5&lt;/div&gt;&lt;div style=&quot;line-height:130%&quot;&gt;6&lt;/div&gt;&lt;div style=&quot;line-height:130%&quot;&gt;7&lt;/div&gt;&lt;div style=&quot;line-height:130%&quot;&gt;8&lt;/div&gt;&lt;div style=&quot;line-height:130%&quot;&gt;9&lt;/div&gt;&lt;div style=&quot;line-height:130%&quot;&gt;10&lt;/div&gt;&lt;div style=&quot;line-height:130%&quot;&gt;11&lt;/div&gt;&lt;div style=&quot;line-height:130%&quot;&gt;12&lt;/div&gt;&lt;div style=&quot;line-height:130%&quot;&gt;13&lt;/div&gt;&lt;div style=&quot;line-height:130%&quot;&gt;14&lt;/div&gt;&lt;div style=&quot;line-height:130%&quot;&gt;15&lt;/div&gt;&lt;div style=&quot;line-height:130%&quot;&gt;16&lt;/div&gt;&lt;div style=&quot;line-height:130%&quot;&gt;17&lt;/div&gt;&lt;div style=&quot;line-height:130%&quot;&gt;18&lt;/div&gt;&lt;div style=&quot;line-height:130%&quot;&gt;19&lt;/div&gt;&lt;div style=&quot;line-height:130%&quot;&gt;20&lt;/div&gt;&lt;div style=&quot;line-height:130%&quot;&gt;21&lt;/div&gt;&lt;div style=&quot;line-height:130%&quot;&gt;22&lt;/div&gt;&lt;div style=&quot;line-height:130%&quot;&gt;23&lt;/div&gt;&lt;/div&gt;&lt;/td&gt;&lt;td style=&quot;padding:6px 0&quot;&gt;&lt;div style=&quot;margin:0; padding:0; color:#f0f0f0; font-family:Consolas, 'Liberation Mono', Menlo, Courier, monospace !important; line-height:130%&quot;&gt;&lt;div style=&quot;padding:0 6px; white-space:pre; line-height:130%&quot;&gt;&lt;span style=&quot;color:#ffd500&quot;&gt;&quot;use&amp;nbsp;strict&quot;&lt;/span&gt;;&lt;/div&gt;&lt;div style=&quot;padding:0 6px; white-space:pre; line-height:130%&quot;&gt;const&amp;nbsp;puppeteer&amp;nbsp;&lt;span style=&quot;color:#0086b3&quot;&gt;&lt;/span&gt;&lt;span style=&quot;color:#ff3399&quot;&gt;=&lt;/span&gt;&amp;nbsp;require(&lt;span style=&quot;color:#ffd500&quot;&gt;'puppeteer'&lt;/span&gt;);&lt;/div&gt;&lt;div style=&quot;padding:0 6px; white-space:pre; line-height:130%&quot;&gt;&amp;nbsp;&lt;/div&gt;&lt;div style=&quot;padding:0 6px; white-space:pre; line-height:130%&quot;&gt;(async&amp;nbsp;()&amp;nbsp;&lt;span style=&quot;color:#0086b3&quot;&gt;&lt;/span&gt;&lt;span style=&quot;color:#ff3399&quot;&gt;=&lt;/span&gt;&lt;span style=&quot;color:#0086b3&quot;&gt;&lt;/span&gt;&lt;span style=&quot;color:#ff3399&quot;&gt;&amp;gt;&lt;/span&gt;&amp;nbsp;{&lt;/div&gt;&lt;div style=&quot;padding:0 6px; white-space:pre; line-height:130%&quot;&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;const&amp;nbsp;browser&amp;nbsp;&lt;span style=&quot;color:#0086b3&quot;&gt;&lt;/span&gt;&lt;span style=&quot;color:#ff3399&quot;&gt;=&lt;/span&gt;&amp;nbsp;await&amp;nbsp;puppeteer.launch({&lt;/div&gt;&lt;div style=&quot;padding:0 6px; white-space:pre; line-height:130%&quot;&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;headless:&amp;nbsp;&lt;span style=&quot;color:#c10aff&quot;&gt;false&lt;/span&gt;&amp;nbsp;&lt;span style=&quot;color:#999999&quot;&gt;//디버깅목적..&lt;/span&gt;&lt;/div&gt;&lt;div style=&quot;padding:0 6px; white-space:pre; line-height:130%&quot;&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;});&lt;/div&gt;&lt;div style=&quot;padding:0 6px; white-space:pre; line-height:130%&quot;&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;const&amp;nbsp;page&amp;nbsp;&lt;span style=&quot;color:#0086b3&quot;&gt;&lt;/span&gt;&lt;span style=&quot;color:#ff3399&quot;&gt;=&lt;/span&gt;&amp;nbsp;await&amp;nbsp;browser.newPage();&lt;/div&gt;&lt;div style=&quot;padding:0 6px; white-space:pre; line-height:130%&quot;&gt;&amp;nbsp;&lt;/div&gt;&lt;div style=&quot;padding:0 6px; white-space:pre; line-height:130%&quot;&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;await&amp;nbsp;page.goto(&lt;span style=&quot;color:#ffd500&quot;&gt;'http://news.einfomax.co.kr/'&lt;/span&gt;,&amp;nbsp;{});&lt;/div&gt;&lt;div style=&quot;padding:0 6px; white-space:pre; line-height:130%&quot;&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;await&amp;nbsp;page.type(&lt;span style=&quot;color:#ffd500&quot;&gt;'#search'&lt;/span&gt;,&amp;nbsp;&lt;span style=&quot;color:#ffd500&quot;&gt;'주요&amp;nbsp;국제금융뉴스'&lt;/span&gt;);&lt;/div&gt;&lt;div style=&quot;padding:0 6px; white-space:pre; line-height:130%&quot;&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;await&amp;nbsp;page.click(&lt;span style=&quot;color:#ffd500&quot;&gt;'[name=head-search]&amp;nbsp;button'&lt;/span&gt;);&lt;/div&gt;&lt;div style=&quot;padding:0 6px; white-space:pre; line-height:130%&quot;&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;await&amp;nbsp;page.waitFor(&lt;span style=&quot;color:#ffd500&quot;&gt;'.article-list-content'&lt;/span&gt;);&lt;/div&gt;&lt;div style=&quot;padding:0 6px; white-space:pre; line-height:130%&quot;&gt;&amp;nbsp;&lt;/div&gt;&lt;div style=&quot;padding:0 6px; white-space:pre; line-height:130%&quot;&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;const&amp;nbsp;result&amp;nbsp;&lt;span style=&quot;color:#0086b3&quot;&gt;&lt;/span&gt;&lt;span style=&quot;color:#ff3399&quot;&gt;=&lt;/span&gt;&amp;nbsp;await&amp;nbsp;page.$$(&lt;span style=&quot;color:#ffd500&quot;&gt;'.article-list-content&amp;nbsp;.list-titles'&lt;/span&gt;);&lt;/div&gt;&lt;div style=&quot;padding:0 6px; white-space:pre; line-height:130%&quot;&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;span style=&quot;color:#ff3399&quot;&gt;for&lt;/span&gt;&amp;nbsp;(let&amp;nbsp;item&amp;nbsp;of&amp;nbsp;result)&amp;nbsp;{&lt;/div&gt;&lt;div style=&quot;padding:0 6px; white-space:pre; line-height:130%&quot;&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;let&amp;nbsp;title&amp;nbsp;&lt;span style=&quot;color:#0086b3&quot;&gt;&lt;/span&gt;&lt;span style=&quot;color:#ff3399&quot;&gt;=&lt;/span&gt;&amp;nbsp;await&amp;nbsp;item.$eval(&lt;span style=&quot;color:#ffd500&quot;&gt;'a'&lt;/span&gt;,&amp;nbsp;node&amp;nbsp;&lt;span style=&quot;color:#0086b3&quot;&gt;&lt;/span&gt;&lt;span style=&quot;color:#ff3399&quot;&gt;=&lt;/span&gt;&lt;span style=&quot;color:#0086b3&quot;&gt;&lt;/span&gt;&lt;span style=&quot;color:#ff3399&quot;&gt;&amp;gt;&lt;/span&gt;&amp;nbsp;node.innerText)&lt;/div&gt;&lt;div style=&quot;padding:0 6px; white-space:pre; line-height:130%&quot;&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;let&amp;nbsp;href&amp;nbsp;&lt;span style=&quot;color:#0086b3&quot;&gt;&lt;/span&gt;&lt;span style=&quot;color:#ff3399&quot;&gt;=&lt;/span&gt;&amp;nbsp;await&amp;nbsp;item.$eval(&lt;span style=&quot;color:#ffd500&quot;&gt;'a'&lt;/span&gt;,&amp;nbsp;node&amp;nbsp;&lt;span style=&quot;color:#0086b3&quot;&gt;&lt;/span&gt;&lt;span style=&quot;color:#ff3399&quot;&gt;=&lt;/span&gt;&lt;span style=&quot;color:#0086b3&quot;&gt;&lt;/span&gt;&lt;span style=&quot;color:#ff3399&quot;&gt;&amp;gt;&lt;/span&gt;&amp;nbsp;node.href)&lt;/div&gt;&lt;div style=&quot;padding:0 6px; white-space:pre; line-height:130%&quot;&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;span style=&quot;color:#4be6fa&quot;&gt;console&lt;/span&gt;.log(title,&amp;nbsp;href);&lt;/div&gt;&lt;div style=&quot;padding:0 6px; white-space:pre; line-height:130%&quot;&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;}&lt;/div&gt;&lt;div style=&quot;padding:0 6px; white-space:pre; line-height:130%&quot;&gt;&amp;nbsp;&lt;/div&gt;&lt;div style=&quot;padding:0 6px; white-space:pre; line-height:130%&quot;&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;await&amp;nbsp;browser.&lt;span style=&quot;color:#4be6fa&quot;&gt;close&lt;/span&gt;();&lt;/div&gt;&lt;div style=&quot;padding:0 6px; white-space:pre; line-height:130%&quot;&gt;})();&lt;/div&gt;&lt;/div&gt;&lt;div style=&quot;text-align:right; margin-top:-13px; margin-right:5px; font-size:9px; font-style:italic&quot;&gt;&lt;a href=&quot;http://colorscripter.com/info#e&quot; target=&quot;_blank&quot; style=&quot;color: rgb(79, 79, 79);&quot;&gt;Colored by Color Scripter&lt;/a&gt;&lt;/div&gt;&lt;/td&gt;&lt;td style=&quot;vertical-align:bottom; padding:0 2px 4px 0&quot;&gt;&lt;a href=&quot;http://colorscripter.com/info#e&quot; target=&quot;_blank&quot; style=&quot;color: white;&quot;&gt;&lt;span style=&quot;font-size: 9px; word-break: normal; background-color: rgb(79, 79, 79); border-radius: 10px; padding: 1px;&quot;&gt;cs&lt;/span&gt;&lt;/a&gt;&lt;/td&gt;&lt;/tr&gt;&lt;/tbody&gt;&lt;/table&gt;&lt;br /&gt;&lt;/p&gt;&lt;/div&gt;&lt;p style=&quot;margin-left: 2em;&quot;&gt;&lt;b&gt;- headless 옵션을 true로 주면 브라우저가 실행되지 않고 실행됩니다.&amp;nbsp;&lt;/b&gt;&lt;/p&gt;&lt;p&gt;&lt;br /&gt;&lt;/p&gt;&lt;p&gt;&lt;br /&gt;&lt;/p&gt;&lt;p&gt;&lt;b&gt;2. 확인해보기&lt;/b&gt;&lt;/p&gt;&lt;p style=&quot;margin-left: 2em;&quot;&gt;&lt;iframe src=&quot;https://www.youtube.com/embed/9hvwhWEjanI&quot; width=&quot;560&quot; height=&quot;315&quot; allow=&quot;accelerometer; autoplay; encrypted-media; gyroscope; picture-in-picture&quot; frameborder=&quot;&quot; allowfullscreen=&quot;true&quot;&gt;&lt;/iframe&gt;&lt;/p&gt;&lt;p&gt;&lt;b&gt;3. 응용하기&lt;/b&gt;&lt;/p&gt;&lt;p style=&quot;margin-left: 2em;&quot;&gt;&lt;b&gt;- 운영서버 반영전 자동 테스트하기&lt;/b&gt;&lt;/p&gt;&lt;p style=&quot;margin-left: 4em;&quot;&gt;- 따로 테스터가 없는경우는 반영전 테스트코드를 작성해서 테스트가 통과후 빌드되게 하면 최소한의 장애는 막을수 있겠다.&lt;/p&gt;&lt;p style=&quot;margin-left: 6em;&quot;&gt;-&amp;nbsp;&lt;b&gt;mocha&lt;/b&gt;, &lt;b&gt;puppeteer&lt;/b&gt;를 이용했다.&lt;/p&gt;&lt;p style=&quot;margin-left: 2em; text-align: center; clear: none; float: none;&quot;&gt;&lt;span class=&quot;imageblock&quot; style=&quot;display: inline-block; width: 788px;  height: auto; max-width: 100%;&quot;&gt;&lt;img src=&quot;https://t1.daumcdn.net/cfile/tistory/99A555405BFF32FF2B&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Ft1.daumcdn.net%2Fcfile%2Ftistory%2F99A555405BFF32FF2B&quot; width=&quot;788&quot; height=&quot;630&quot; filename=&quot;5555555.png&quot; filemime=&quot;image/png&quot; style=&quot;&quot;/&gt;&lt;/span&gt;&lt;/p&gt;&lt;p style=&quot;margin-left: 2em;&quot;&gt;&lt;b&gt;&lt;br /&gt;&lt;/b&gt;&lt;/p&gt;&lt;p style=&quot;margin-left: 2em;&quot;&gt;&lt;b&gt;&lt;br /&gt;&lt;/b&gt;&lt;/p&gt;&lt;p style=&quot;margin-left: 2em;&quot;&gt;&lt;b&gt;&lt;br /&gt;&lt;/b&gt;&lt;/p&gt;&lt;p&gt;&lt;b&gt;4. 마지막으로&lt;br /&gt;&lt;/b&gt;&lt;/p&gt;&lt;p style=&quot;margin-left: 2em;&quot;&gt;&lt;b&gt;- 브라우저로 할수있는것은 다 가능하다.&lt;/b&gt;&lt;/p&gt;&lt;p style=&quot;margin-left: 2em;&quot;&gt;&lt;b&gt;- 프로그램으로 하다보니 처음에 작성이 오래걸리긴하겠지만.. 손으로 하는것보다 빠르다.&lt;/b&gt;&lt;/p&gt;&lt;p style=&quot;margin-left: 2em;&quot;&gt;&lt;b&gt;- 요즘 선착순딜이나 타임딜, 콘서트 예매, 야구 예매 등등..&amp;nbsp; 빠르게하는 사람은 아마 이런방법을 쓰지 않을까 싶다.&lt;/b&gt;&lt;/p&gt;&lt;p style=&quot;margin-left: 2em;&quot;&gt;&lt;b&gt;- 클라이언트는 얼마든지 조작가능하다.&amp;nbsp; 개발자들은 귀찮더라도 중요한내용들은 서버쪽에서 처리했음 좋겠다.&lt;/b&gt;&lt;/p&gt;</description>
      <category>기타</category>
      <category>puppeteer</category>
      <category>브라우저 제어</category>
      <category>브라우저봇</category>
      <author>장송송</author>
      <guid isPermaLink="true">https://jsongsong.tistory.com/44</guid>
      <comments>https://jsongsong.tistory.com/44#entry44comment</comments>
      <pubDate>Thu, 29 Nov 2018 09:33:21 +0900</pubDate>
    </item>
    <item>
      <title>각종 알람 쉽게 받기 - Slack</title>
      <link>https://jsongsong.tistory.com/43</link>
      <description>&lt;p&gt;&lt;b&gt;Slack 이란&lt;/b&gt;&lt;/p&gt;&lt;p&gt;- Slack은 협업하며 생산성을 늘려주는 최고의 메신저.&lt;/p&gt;&lt;p&gt;- 봇기능을 통한 각종 알림 수신 및 발신&lt;/p&gt;&lt;p&gt;- 플젝에 있어 좋다 쓰자.&lt;/p&gt;&lt;p&gt;&lt;br /&gt;&lt;/p&gt;&lt;p&gt;&lt;br /&gt;&lt;/p&gt;&lt;p&gt;&lt;b&gt;1. Slack App 설정하기&lt;/b&gt;&lt;/p&gt;&lt;p style=&quot;margin-left: 2em;&quot;&gt;-&amp;nbsp;https://slack.com/apps&lt;/p&gt;&lt;p style=&quot;margin-left: 2em;&quot;&gt;- App을 새로 등록한다.&lt;/p&gt;&lt;p style=&quot;margin-left: 2em;&quot;&gt;&lt;br /&gt;&lt;/p&gt;&lt;p&gt;&lt;b&gt;2. Bot 설정하기&lt;/b&gt;&lt;/p&gt;&lt;p style=&quot;margin-left: 2em;&quot;&gt;- Bot 생성&lt;/p&gt;&lt;p style=&quot;margin-left: 2em; text-align: center; clear: none; float: none;&quot;&gt;&lt;span class=&quot;imageblock&quot; style=&quot;display: inline-block; width: 860px;  height: auto; max-width: 100%;&quot;&gt;&lt;img src=&quot;https://t1.daumcdn.net/cfile/tistory/998DA53D5BFCABB51A&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Ft1.daumcdn.net%2Fcfile%2Ftistory%2F998DA53D5BFCABB51A&quot; width=&quot;860&quot; height=&quot;224&quot; filename=&quot;0.png&quot; filemime=&quot;image/png&quot;/&gt;&lt;/span&gt;&lt;/p&gt;&lt;p style=&quot;margin-left: 2em; text-align: left; clear: none; float: none;&quot;&gt;&lt;br /&gt;&lt;/p&gt;&lt;p style=&quot;margin-left: 2em; text-align: left; clear: none; float: none;&quot;&gt;- Bot 이름 지정&lt;br /&gt;&lt;/p&gt;&lt;p style=&quot;margin-left: 2em; text-align: center; clear: none; float: none;&quot;&gt;&lt;span class=&quot;imageblock&quot; style=&quot;display: inline-block; width: 860px;  height: auto; max-width: 100%;&quot;&gt;&lt;img src=&quot;https://t1.daumcdn.net/cfile/tistory/994840395BFCABB524&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Ft1.daumcdn.net%2Fcfile%2Ftistory%2F994840395BFCABB524&quot; width=&quot;860&quot; height=&quot;368&quot; filename=&quot;1.png&quot; filemime=&quot;image/png&quot;/&gt;&lt;/span&gt;&lt;/p&gt;&lt;p style=&quot;margin-left: 2em;&quot;&gt;&lt;br /&gt;&lt;/p&gt;&lt;p style=&quot;margin-left: 2em;&quot;&gt;- Token 발급 : API 생성시 사용할 키&lt;/p&gt;&lt;p style=&quot;margin-left: 2em; text-align: center; clear: none; float: none;&quot;&gt;&lt;span class=&quot;imageblock&quot; style=&quot;display: inline-block; width: 860px;  height: auto; max-width: 100%;&quot;&gt;&lt;img src=&quot;https://t1.daumcdn.net/cfile/tistory/99BB664F5BFCABB52B&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Ft1.daumcdn.net%2Fcfile%2Ftistory%2F99BB664F5BFCABB52B&quot; width=&quot;860&quot; height=&quot;493&quot; filename=&quot;2.png&quot; filemime=&quot;image/png&quot;/&gt;&lt;/span&gt;&lt;/p&gt;&lt;p style=&quot;margin-left: 2em;&quot;&gt;&lt;br /&gt;&lt;/p&gt;&lt;p&gt;&lt;b&gt;3. 알람 발생시키기&lt;/b&gt;&lt;/p&gt;&lt;p style=&quot;margin-left: 2em;&quot;&gt;- sample.js&lt;/p&gt;&lt;p style=&quot;margin-left: 4em;&quot;&gt;-&amp;nbsp;&lt;span style=&quot;background-color: rgb(238, 238, 238);&quot;&gt;SLACK_TOKEN&lt;/span&gt;&lt;span style=&quot;background-color: rgb(238, 238, 238);&quot;&gt;&amp;nbsp;변경한다.&lt;/span&gt;&lt;/p&gt;&lt;p style=&quot;margin-left: 4em;&quot;&gt;- npm init&amp;nbsp;&lt;/p&gt;&lt;p style=&quot;margin-left: 4em;&quot;&gt;- &lt;span style=&quot;background-color: rgb(255, 255, 255); color: rgb(0, 0, 0);&quot;&gt;npm i&amp;nbsp;&lt;/span&gt;&lt;span style=&quot;background-color: rgb(255, 255, 255); color: rgb(0, 0, 0);&quot;&gt;@slack/client&lt;/span&gt;&lt;/p&gt;&lt;p style=&quot;margin-left: 4em;&quot;&gt;&lt;span style=&quot;background-color: rgb(255, 255, 255); color: rgb(0, 0, 0);&quot;&gt;- node sample.js&lt;/span&gt;&lt;/p&gt;&lt;div class=&quot;colorscripter-code&quot; style=&quot;color:#f0f0f0; font-family:Consolas, 'Liberation Mono', Menlo, Courier, monospace !important; position:relative !important; overflow:auto&quot;&gt;&lt;p style=&quot;margin-left: 2em;&quot;&gt;&lt;p style=&quot;margin-left: 2em;&quot;&gt;&lt;table class=&quot;colorscripter-code-table&quot; style=&quot;margin:0; padding:0; border:none; background-color:#272727; border-radius:4px;&quot; cellspacing=&quot;0&quot; cellpadding=&quot;0&quot;&gt;&lt;tbody&gt;&lt;tr&gt;&lt;td style=&quot;padding:6px; border-right:2px solid #4f4f4f&quot;&gt;&lt;div style=&quot;margin:0; padding:0; word-break:normal; text-align:right; color:#aaa; font-family:Consolas, 'Liberation Mono', Menlo, Courier, monospace !important; line-height:130%&quot;&gt;&lt;div style=&quot;line-height:130%&quot;&gt;1&lt;/div&gt;&lt;div style=&quot;line-height:130%&quot;&gt;2&lt;/div&gt;&lt;div style=&quot;line-height:130%&quot;&gt;3&lt;/div&gt;&lt;div style=&quot;line-height:130%&quot;&gt;4&lt;/div&gt;&lt;div style=&quot;line-height:130%&quot;&gt;5&lt;/div&gt;&lt;div style=&quot;line-height:130%&quot;&gt;6&lt;/div&gt;&lt;div style=&quot;line-height:130%&quot;&gt;7&lt;/div&gt;&lt;div style=&quot;line-height:130%&quot;&gt;8&lt;/div&gt;&lt;div style=&quot;line-height:130%&quot;&gt;9&lt;/div&gt;&lt;div style=&quot;line-height:130%&quot;&gt;10&lt;/div&gt;&lt;div style=&quot;line-height:130%&quot;&gt;11&lt;/div&gt;&lt;div style=&quot;line-height:130%&quot;&gt;12&lt;/div&gt;&lt;div style=&quot;line-height:130%&quot;&gt;13&lt;/div&gt;&lt;div style=&quot;line-height:130%&quot;&gt;14&lt;/div&gt;&lt;div style=&quot;line-height:130%&quot;&gt;15&lt;/div&gt;&lt;div style=&quot;line-height:130%&quot;&gt;16&lt;/div&gt;&lt;div style=&quot;line-height:130%&quot;&gt;17&lt;/div&gt;&lt;div style=&quot;line-height:130%&quot;&gt;18&lt;/div&gt;&lt;div style=&quot;line-height:130%&quot;&gt;19&lt;/div&gt;&lt;div style=&quot;line-height:130%&quot;&gt;20&lt;/div&gt;&lt;div style=&quot;line-height:130%&quot;&gt;21&lt;/div&gt;&lt;div style=&quot;line-height:130%&quot;&gt;22&lt;/div&gt;&lt;div style=&quot;line-height:130%&quot;&gt;23&lt;/div&gt;&lt;div style=&quot;line-height:130%&quot;&gt;24&lt;/div&gt;&lt;div style=&quot;line-height:130%&quot;&gt;25&lt;/div&gt;&lt;div style=&quot;line-height:130%&quot;&gt;26&lt;/div&gt;&lt;div style=&quot;line-height:130%&quot;&gt;27&lt;/div&gt;&lt;div style=&quot;line-height:130%&quot;&gt;28&lt;/div&gt;&lt;div style=&quot;line-height:130%&quot;&gt;29&lt;/div&gt;&lt;div style=&quot;line-height:130%&quot;&gt;30&lt;/div&gt;&lt;div style=&quot;line-height:130%&quot;&gt;31&lt;/div&gt;&lt;div style=&quot;line-height:130%&quot;&gt;32&lt;/div&gt;&lt;div style=&quot;line-height:130%&quot;&gt;33&lt;/div&gt;&lt;div style=&quot;line-height:130%&quot;&gt;34&lt;/div&gt;&lt;div style=&quot;line-height:130%&quot;&gt;35&lt;/div&gt;&lt;div style=&quot;line-height:130%&quot;&gt;36&lt;/div&gt;&lt;div style=&quot;line-height:130%&quot;&gt;37&lt;/div&gt;&lt;div style=&quot;line-height:130%&quot;&gt;38&lt;/div&gt;&lt;div style=&quot;line-height:130%&quot;&gt;39&lt;/div&gt;&lt;div style=&quot;line-height:130%&quot;&gt;40&lt;/div&gt;&lt;div style=&quot;line-height:130%&quot;&gt;41&lt;/div&gt;&lt;div style=&quot;line-height:130%&quot;&gt;42&lt;/div&gt;&lt;div style=&quot;line-height:130%&quot;&gt;43&lt;/div&gt;&lt;div style=&quot;line-height:130%&quot;&gt;44&lt;/div&gt;&lt;div style=&quot;line-height:130%&quot;&gt;45&lt;/div&gt;&lt;div style=&quot;line-height:130%&quot;&gt;46&lt;/div&gt;&lt;div style=&quot;line-height:130%&quot;&gt;47&lt;/div&gt;&lt;div style=&quot;line-height:130%&quot;&gt;48&lt;/div&gt;&lt;div style=&quot;line-height:130%&quot;&gt;49&lt;/div&gt;&lt;div style=&quot;line-height:130%&quot;&gt;50&lt;/div&gt;&lt;div style=&quot;line-height:130%&quot;&gt;51&lt;/div&gt;&lt;div style=&quot;line-height:130%&quot;&gt;52&lt;/div&gt;&lt;div style=&quot;line-height:130%&quot;&gt;53&lt;/div&gt;&lt;div style=&quot;line-height:130%&quot;&gt;54&lt;/div&gt;&lt;div style=&quot;line-height:130%&quot;&gt;55&lt;/div&gt;&lt;div style=&quot;line-height:130%&quot;&gt;56&lt;/div&gt;&lt;div style=&quot;line-height:130%&quot;&gt;57&lt;/div&gt;&lt;div style=&quot;line-height:130%&quot;&gt;58&lt;/div&gt;&lt;div style=&quot;line-height:130%&quot;&gt;59&lt;/div&gt;&lt;div style=&quot;line-height:130%&quot;&gt;60&lt;/div&gt;&lt;div style=&quot;line-height:130%&quot;&gt;61&lt;/div&gt;&lt;div style=&quot;line-height:130%&quot;&gt;62&lt;/div&gt;&lt;div style=&quot;line-height:130%&quot;&gt;63&lt;/div&gt;&lt;div style=&quot;line-height:130%&quot;&gt;64&lt;/div&gt;&lt;div style=&quot;line-height:130%&quot;&gt;65&lt;/div&gt;&lt;div style=&quot;line-height:130%&quot;&gt;66&lt;/div&gt;&lt;div style=&quot;line-height:130%&quot;&gt;67&lt;/div&gt;&lt;div style=&quot;line-height:130%&quot;&gt;68&lt;/div&gt;&lt;div style=&quot;line-height:130%&quot;&gt;69&lt;/div&gt;&lt;div style=&quot;line-height:130%&quot;&gt;70&lt;/div&gt;&lt;div style=&quot;line-height:130%&quot;&gt;71&lt;/div&gt;&lt;div style=&quot;line-height:130%&quot;&gt;72&lt;/div&gt;&lt;div style=&quot;line-height:130%&quot;&gt;73&lt;/div&gt;&lt;div style=&quot;line-height:130%&quot;&gt;74&lt;/div&gt;&lt;div style=&quot;line-height:130%&quot;&gt;75&lt;/div&gt;&lt;div style=&quot;line-height:130%&quot;&gt;76&lt;/div&gt;&lt;div style=&quot;line-height:130%&quot;&gt;77&lt;/div&gt;&lt;div style=&quot;line-height:130%&quot;&gt;78&lt;/div&gt;&lt;div style=&quot;line-height:130%&quot;&gt;79&lt;/div&gt;&lt;div style=&quot;line-height:130%&quot;&gt;80&lt;/div&gt;&lt;div style=&quot;line-height:130%&quot;&gt;81&lt;/div&gt;&lt;div style=&quot;line-height:130%&quot;&gt;82&lt;/div&gt;&lt;div style=&quot;line-height:130%&quot;&gt;83&lt;/div&gt;&lt;div style=&quot;line-height:130%&quot;&gt;84&lt;/div&gt;&lt;div style=&quot;line-height:130%&quot;&gt;85&lt;/div&gt;&lt;div style=&quot;line-height:130%&quot;&gt;86&lt;/div&gt;&lt;div style=&quot;line-height:130%&quot;&gt;87&lt;/div&gt;&lt;div style=&quot;line-height:130%&quot;&gt;88&lt;/div&gt;&lt;div style=&quot;line-height:130%&quot;&gt;89&lt;/div&gt;&lt;div style=&quot;line-height:130%&quot;&gt;90&lt;/div&gt;&lt;div style=&quot;line-height:130%&quot;&gt;91&lt;/div&gt;&lt;div style=&quot;line-height:130%&quot;&gt;92&lt;/div&gt;&lt;div style=&quot;line-height:130%&quot;&gt;93&lt;/div&gt;&lt;div style=&quot;line-height:130%&quot;&gt;94&lt;/div&gt;&lt;div style=&quot;line-height:130%&quot;&gt;95&lt;/div&gt;&lt;div style=&quot;line-height:130%&quot;&gt;96&lt;/div&gt;&lt;div style=&quot;line-height:130%&quot;&gt;97&lt;/div&gt;&lt;div style=&quot;line-height:130%&quot;&gt;98&lt;/div&gt;&lt;div style=&quot;line-height:130%&quot;&gt;99&lt;/div&gt;&lt;div style=&quot;line-height:130%&quot;&gt;100&lt;/div&gt;&lt;div style=&quot;line-height:130%&quot;&gt;101&lt;/div&gt;&lt;div style=&quot;line-height:130%&quot;&gt;102&lt;/div&gt;&lt;div style=&quot;line-height:130%&quot;&gt;103&lt;/div&gt;&lt;div style=&quot;line-height:130%&quot;&gt;104&lt;/div&gt;&lt;div style=&quot;line-height:130%&quot;&gt;105&lt;/div&gt;&lt;div style=&quot;line-height:130%&quot;&gt;106&lt;/div&gt;&lt;div style=&quot;line-height:130%&quot;&gt;107&lt;/div&gt;&lt;div style=&quot;line-height:130%&quot;&gt;108&lt;/div&gt;&lt;div style=&quot;line-height:130%&quot;&gt;109&lt;/div&gt;&lt;div style=&quot;line-height:130%&quot;&gt;110&lt;/div&gt;&lt;div style=&quot;line-height:130%&quot;&gt;111&lt;/div&gt;&lt;div style=&quot;line-height:130%&quot;&gt;112&lt;/div&gt;&lt;div style=&quot;line-height:130%&quot;&gt;113&lt;/div&gt;&lt;div style=&quot;line-height:130%&quot;&gt;114&lt;/div&gt;&lt;div style=&quot;line-height:130%&quot;&gt;115&lt;/div&gt;&lt;div style=&quot;line-height:130%&quot;&gt;116&lt;/div&gt;&lt;div style=&quot;line-height:130%&quot;&gt;117&lt;/div&gt;&lt;div style=&quot;line-height:130%&quot;&gt;118&lt;/div&gt;&lt;div style=&quot;line-height:130%&quot;&gt;119&lt;/div&gt;&lt;/div&gt;&lt;/td&gt;&lt;td style=&quot;padding:6px 0&quot;&gt;&lt;div style=&quot;margin:0; padding:0; color:#f0f0f0; font-family:Consolas, 'Liberation Mono', Menlo, Courier, monospace !important; line-height:130%&quot;&gt;&lt;div style=&quot;padding:0 6px; white-space:pre; line-height:130%&quot;&gt;&lt;span style=&quot;color:#ffd500&quot;&gt;&quot;use&amp;nbsp;strict&quot;&lt;/span&gt;;&lt;/div&gt;&lt;div style=&quot;padding:0 6px; white-space:pre; line-height:130%&quot;&gt;&amp;nbsp;&lt;/div&gt;&lt;div style=&quot;padding:0 6px; white-space:pre; line-height:130%&quot;&gt;const&amp;nbsp;SLACK_TOKEN&amp;nbsp;&lt;span style=&quot;color:#0086b3&quot;&gt;&lt;/span&gt;&lt;span style=&quot;color:#ff3399&quot;&gt;=&lt;/span&gt;&amp;nbsp;&lt;span style=&quot;color:#ffd500&quot;&gt;&quot;xoxb-xxxxxxxx-xxxxxxxx-xxxxxxxxxxxxxxxxxxxxxxxxxxxxx&quot;&lt;/span&gt;;&lt;/div&gt;&lt;div style=&quot;padding:0 6px; white-space:pre; line-height:130%&quot;&gt;&amp;nbsp;&lt;/div&gt;&lt;div style=&quot;padding:0 6px; white-space:pre; line-height:130%&quot;&gt;&amp;nbsp;&lt;/div&gt;&lt;div style=&quot;padding:0 6px; white-space:pre; line-height:130%&quot;&gt;&amp;nbsp;&lt;/div&gt;&lt;div style=&quot;padding:0 6px; white-space:pre; line-height:130%&quot;&gt;const&amp;nbsp;{&lt;/div&gt;&lt;div style=&quot;padding:0 6px; white-space:pre; line-height:130%&quot;&gt;&amp;nbsp;&lt;/div&gt;&lt;div style=&quot;padding:0 6px; white-space:pre; line-height:130%&quot;&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;WebClient,&lt;/div&gt;&lt;div style=&quot;padding:0 6px; white-space:pre; line-height:130%&quot;&gt;&amp;nbsp;&lt;/div&gt;&lt;div style=&quot;padding:0 6px; white-space:pre; line-height:130%&quot;&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;RTMClient&lt;/div&gt;&lt;div style=&quot;padding:0 6px; white-space:pre; line-height:130%&quot;&gt;&amp;nbsp;&lt;/div&gt;&lt;div style=&quot;padding:0 6px; white-space:pre; line-height:130%&quot;&gt;}&amp;nbsp;&lt;span style=&quot;color:#0086b3&quot;&gt;&lt;/span&gt;&lt;span style=&quot;color:#ff3399&quot;&gt;=&lt;/span&gt;&amp;nbsp;require(&lt;span style=&quot;color:#ffd500&quot;&gt;'@slack/client'&lt;/span&gt;);&lt;/div&gt;&lt;div style=&quot;padding:0 6px; white-space:pre; line-height:130%&quot;&gt;&amp;nbsp;&lt;/div&gt;&lt;div style=&quot;padding:0 6px; white-space:pre; line-height:130%&quot;&gt;&amp;nbsp;&lt;/div&gt;&lt;div style=&quot;padding:0 6px; white-space:pre; line-height:130%&quot;&gt;&amp;nbsp;&lt;/div&gt;&lt;div style=&quot;padding:0 6px; white-space:pre; line-height:130%&quot;&gt;const&amp;nbsp;web&amp;nbsp;&lt;span style=&quot;color:#0086b3&quot;&gt;&lt;/span&gt;&lt;span style=&quot;color:#ff3399&quot;&gt;=&lt;/span&gt;&amp;nbsp;&lt;span style=&quot;color:#ff3399&quot;&gt;new&lt;/span&gt;&amp;nbsp;WebClient(SLACK_TOKEN);&lt;/div&gt;&lt;div style=&quot;padding:0 6px; white-space:pre; line-height:130%&quot;&gt;&amp;nbsp;&lt;/div&gt;&lt;div style=&quot;padding:0 6px; white-space:pre; line-height:130%&quot;&gt;&amp;nbsp;&lt;/div&gt;&lt;div style=&quot;padding:0 6px; white-space:pre; line-height:130%&quot;&gt;&amp;nbsp;&lt;/div&gt;&lt;div style=&quot;padding:0 6px; white-space:pre; line-height:130%&quot;&gt;&lt;span style=&quot;color:#ff3399&quot;&gt;return&lt;/span&gt;&amp;nbsp;init();&lt;/div&gt;&lt;div style=&quot;padding:0 6px; white-space:pre; line-height:130%&quot;&gt;&amp;nbsp;&lt;/div&gt;&lt;div style=&quot;padding:0 6px; white-space:pre; line-height:130%&quot;&gt;&amp;nbsp;&lt;/div&gt;&lt;div style=&quot;padding:0 6px; white-space:pre; line-height:130%&quot;&gt;&amp;nbsp;&lt;/div&gt;&lt;div style=&quot;padding:0 6px; white-space:pre; line-height:130%&quot;&gt;async&amp;nbsp;&lt;span style=&quot;color:#ff3399&quot;&gt;function&lt;/span&gt;&amp;nbsp;init()&amp;nbsp;{&lt;/div&gt;&lt;div style=&quot;padding:0 6px; white-space:pre; line-height:130%&quot;&gt;&amp;nbsp;&lt;/div&gt;&lt;div style=&quot;padding:0 6px; white-space:pre; line-height:130%&quot;&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;let&amp;nbsp;CHANNEL&amp;nbsp;&lt;span style=&quot;color:#0086b3&quot;&gt;&lt;/span&gt;&lt;span style=&quot;color:#ff3399&quot;&gt;=&lt;/span&gt;&amp;nbsp;await&amp;nbsp;loadChannel();&lt;/div&gt;&lt;div style=&quot;padding:0 6px; white-space:pre; line-height:130%&quot;&gt;&amp;nbsp;&lt;/div&gt;&lt;div style=&quot;padding:0 6px; white-space:pre; line-height:130%&quot;&gt;&amp;nbsp;&lt;/div&gt;&lt;div style=&quot;padding:0 6px; white-space:pre; line-height:130%&quot;&gt;&amp;nbsp;&lt;/div&gt;&lt;div style=&quot;padding:0 6px; white-space:pre; line-height:130%&quot;&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;web.chat.postMessage({&lt;/div&gt;&lt;div style=&quot;padding:0 6px; white-space:pre; line-height:130%&quot;&gt;&amp;nbsp;&lt;/div&gt;&lt;div style=&quot;padding:0 6px; white-space:pre; line-height:130%&quot;&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;channel:&amp;nbsp;CHANNEL.test,&lt;/div&gt;&lt;div style=&quot;padding:0 6px; white-space:pre; line-height:130%&quot;&gt;&amp;nbsp;&lt;/div&gt;&lt;div style=&quot;padding:0 6px; white-space:pre; line-height:130%&quot;&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;span style=&quot;color:#ffd500&quot;&gt;&quot;attachments&quot;&lt;/span&gt;:&amp;nbsp;[{&lt;/div&gt;&lt;div style=&quot;padding:0 6px; white-space:pre; line-height:130%&quot;&gt;&amp;nbsp;&lt;/div&gt;&lt;div style=&quot;padding:0 6px; white-space:pre; line-height:130%&quot;&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;span style=&quot;color:#ffd500&quot;&gt;&quot;fields&quot;&lt;/span&gt;:&amp;nbsp;[{&lt;/div&gt;&lt;div style=&quot;padding:0 6px; white-space:pre; line-height:130%&quot;&gt;&amp;nbsp;&lt;/div&gt;&lt;div style=&quot;padding:0 6px; white-space:pre; line-height:130%&quot;&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;span style=&quot;color:#ffd500&quot;&gt;&quot;title&quot;&lt;/span&gt;:&amp;nbsp;&lt;span style=&quot;color:#ffd500&quot;&gt;&quot;게시글번호&quot;&lt;/span&gt;,&lt;/div&gt;&lt;div style=&quot;padding:0 6px; white-space:pre; line-height:130%&quot;&gt;&amp;nbsp;&lt;/div&gt;&lt;div style=&quot;padding:0 6px; white-space:pre; line-height:130%&quot;&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;span style=&quot;color:#ffd500&quot;&gt;&quot;value&quot;&lt;/span&gt;:&amp;nbsp;&lt;span style=&quot;color:#ffd500&quot;&gt;&quot;5bd26c32607c8814909d6e37&quot;&lt;/span&gt;,&lt;/div&gt;&lt;div style=&quot;padding:0 6px; white-space:pre; line-height:130%&quot;&gt;&amp;nbsp;&lt;/div&gt;&lt;div style=&quot;padding:0 6px; white-space:pre; line-height:130%&quot;&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;span style=&quot;color:#ffd500&quot;&gt;&quot;short&quot;&lt;/span&gt;:&amp;nbsp;&lt;span style=&quot;color:#c10aff&quot;&gt;true&lt;/span&gt;&lt;/div&gt;&lt;div style=&quot;padding:0 6px; white-space:pre; line-height:130%&quot;&gt;&amp;nbsp;&lt;/div&gt;&lt;div style=&quot;padding:0 6px; white-space:pre; line-height:130%&quot;&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;},&amp;nbsp;{&lt;/div&gt;&lt;div style=&quot;padding:0 6px; white-space:pre; line-height:130%&quot;&gt;&amp;nbsp;&lt;/div&gt;&lt;div style=&quot;padding:0 6px; white-space:pre; line-height:130%&quot;&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;span style=&quot;color:#ffd500&quot;&gt;&quot;title&quot;&lt;/span&gt;:&amp;nbsp;&lt;span style=&quot;color:#ffd500&quot;&gt;&quot;게시판키&quot;&lt;/span&gt;,&lt;/div&gt;&lt;div style=&quot;padding:0 6px; white-space:pre; line-height:130%&quot;&gt;&amp;nbsp;&lt;/div&gt;&lt;div style=&quot;padding:0 6px; white-space:pre; line-height:130%&quot;&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;span style=&quot;color:#ffd500&quot;&gt;&quot;value&quot;&lt;/span&gt;:&amp;nbsp;&lt;span style=&quot;color:#ffd500&quot;&gt;&quot;test1&quot;&lt;/span&gt;,&lt;/div&gt;&lt;div style=&quot;padding:0 6px; white-space:pre; line-height:130%&quot;&gt;&amp;nbsp;&lt;/div&gt;&lt;div style=&quot;padding:0 6px; white-space:pre; line-height:130%&quot;&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;span style=&quot;color:#ffd500&quot;&gt;&quot;short&quot;&lt;/span&gt;:&amp;nbsp;&lt;span style=&quot;color:#c10aff&quot;&gt;true&lt;/span&gt;&lt;/div&gt;&lt;div style=&quot;padding:0 6px; white-space:pre; line-height:130%&quot;&gt;&amp;nbsp;&lt;/div&gt;&lt;div style=&quot;padding:0 6px; white-space:pre; line-height:130%&quot;&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;},&amp;nbsp;{&lt;/div&gt;&lt;div style=&quot;padding:0 6px; white-space:pre; line-height:130%&quot;&gt;&amp;nbsp;&lt;/div&gt;&lt;div style=&quot;padding:0 6px; white-space:pre; line-height:130%&quot;&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;span style=&quot;color:#ffd500&quot;&gt;&quot;title&quot;&lt;/span&gt;:&amp;nbsp;&lt;span style=&quot;color:#ffd500&quot;&gt;&quot;아이디&quot;&lt;/span&gt;,&lt;/div&gt;&lt;div style=&quot;padding:0 6px; white-space:pre; line-height:130%&quot;&gt;&amp;nbsp;&lt;/div&gt;&lt;div style=&quot;padding:0 6px; white-space:pre; line-height:130%&quot;&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;span style=&quot;color:#ffd500&quot;&gt;&quot;value&quot;&lt;/span&gt;:&amp;nbsp;&lt;span style=&quot;color:#ffd500&quot;&gt;&quot;Awesome&amp;nbsp;Project&quot;&lt;/span&gt;,&lt;/div&gt;&lt;div style=&quot;padding:0 6px; white-space:pre; line-height:130%&quot;&gt;&amp;nbsp;&lt;/div&gt;&lt;div style=&quot;padding:0 6px; white-space:pre; line-height:130%&quot;&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;span style=&quot;color:#ffd500&quot;&gt;&quot;short&quot;&lt;/span&gt;:&amp;nbsp;&lt;span style=&quot;color:#c10aff&quot;&gt;false&lt;/span&gt;&lt;/div&gt;&lt;div style=&quot;padding:0 6px; white-space:pre; line-height:130%&quot;&gt;&amp;nbsp;&lt;/div&gt;&lt;div style=&quot;padding:0 6px; white-space:pre; line-height:130%&quot;&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;},&amp;nbsp;{&lt;/div&gt;&lt;div style=&quot;padding:0 6px; white-space:pre; line-height:130%&quot;&gt;&amp;nbsp;&lt;/div&gt;&lt;div style=&quot;padding:0 6px; white-space:pre; line-height:130%&quot;&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;span style=&quot;color:#ffd500&quot;&gt;&quot;title&quot;&lt;/span&gt;:&amp;nbsp;&lt;span style=&quot;color:#ffd500&quot;&gt;&quot;제목&quot;&lt;/span&gt;,&lt;/div&gt;&lt;div style=&quot;padding:0 6px; white-space:pre; line-height:130%&quot;&gt;&amp;nbsp;&lt;/div&gt;&lt;div style=&quot;padding:0 6px; white-space:pre; line-height:130%&quot;&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;span style=&quot;color:#ffd500&quot;&gt;&quot;value&quot;&lt;/span&gt;:&amp;nbsp;&lt;span style=&quot;color:#ffd500&quot;&gt;&quot;테스트글입니다&quot;&lt;/span&gt;,&lt;/div&gt;&lt;div style=&quot;padding:0 6px; white-space:pre; line-height:130%&quot;&gt;&amp;nbsp;&lt;/div&gt;&lt;div style=&quot;padding:0 6px; white-space:pre; line-height:130%&quot;&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;},&amp;nbsp;{&lt;/div&gt;&lt;div style=&quot;padding:0 6px; white-space:pre; line-height:130%&quot;&gt;&amp;nbsp;&lt;/div&gt;&lt;div style=&quot;padding:0 6px; white-space:pre; line-height:130%&quot;&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;span style=&quot;color:#ffd500&quot;&gt;&quot;title&quot;&lt;/span&gt;:&amp;nbsp;&lt;span style=&quot;color:#ffd500&quot;&gt;&quot;내용&quot;&lt;/span&gt;,&lt;/div&gt;&lt;div style=&quot;padding:0 6px; white-space:pre; line-height:130%&quot;&gt;&amp;nbsp;&lt;/div&gt;&lt;div style=&quot;padding:0 6px; white-space:pre; line-height:130%&quot;&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;span style=&quot;color:#ffd500&quot;&gt;&quot;value&quot;&lt;/span&gt;:&amp;nbsp;&lt;span style=&quot;color:#ffd500&quot;&gt;&quot;곤드레만드레\n나는&amp;nbsp;지쳐버렸어&quot;&lt;/span&gt;,&lt;/div&gt;&lt;div style=&quot;padding:0 6px; white-space:pre; line-height:130%&quot;&gt;&amp;nbsp;&lt;/div&gt;&lt;div style=&quot;padding:0 6px; white-space:pre; line-height:130%&quot;&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;}],&lt;/div&gt;&lt;div style=&quot;padding:0 6px; white-space:pre; line-height:130%&quot;&gt;&amp;nbsp;&lt;/div&gt;&lt;div style=&quot;padding:0 6px; white-space:pre; line-height:130%&quot;&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;span style=&quot;color:#ffd500&quot;&gt;&quot;color&quot;&lt;/span&gt;:&amp;nbsp;&lt;span style=&quot;color:#ffd500&quot;&gt;&quot;#F35A00&quot;&lt;/span&gt;&lt;/div&gt;&lt;div style=&quot;padding:0 6px; white-space:pre; line-height:130%&quot;&gt;&amp;nbsp;&lt;/div&gt;&lt;div style=&quot;padding:0 6px; white-space:pre; line-height:130%&quot;&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;}]&lt;/div&gt;&lt;div style=&quot;padding:0 6px; white-space:pre; line-height:130%&quot;&gt;&amp;nbsp;&lt;/div&gt;&lt;div style=&quot;padding:0 6px; white-space:pre; line-height:130%&quot;&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;},&amp;nbsp;&lt;span style=&quot;color:#ff3399&quot;&gt;function&lt;/span&gt;(err,&amp;nbsp;result)&amp;nbsp;{&lt;/div&gt;&lt;div style=&quot;padding:0 6px; white-space:pre; line-height:130%&quot;&gt;&amp;nbsp;&lt;/div&gt;&lt;div style=&quot;padding:0 6px; white-space:pre; line-height:130%&quot;&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;span style=&quot;color:#4be6fa&quot;&gt;console&lt;/span&gt;.log(err,&amp;nbsp;result);&lt;/div&gt;&lt;div style=&quot;padding:0 6px; white-space:pre; line-height:130%&quot;&gt;&amp;nbsp;&lt;/div&gt;&lt;div style=&quot;padding:0 6px; white-space:pre; line-height:130%&quot;&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;});&lt;/div&gt;&lt;div style=&quot;padding:0 6px; white-space:pre; line-height:130%&quot;&gt;&amp;nbsp;&lt;/div&gt;&lt;div style=&quot;padding:0 6px; white-space:pre; line-height:130%&quot;&gt;}&lt;/div&gt;&lt;div style=&quot;padding:0 6px; white-space:pre; line-height:130%&quot;&gt;&amp;nbsp;&lt;/div&gt;&lt;div style=&quot;padding:0 6px; white-space:pre; line-height:130%&quot;&gt;&amp;nbsp;&lt;/div&gt;&lt;div style=&quot;padding:0 6px; white-space:pre; line-height:130%&quot;&gt;&amp;nbsp;&lt;/div&gt;&lt;div style=&quot;padding:0 6px; white-space:pre; line-height:130%&quot;&gt;async&amp;nbsp;&lt;span style=&quot;color:#ff3399&quot;&gt;function&lt;/span&gt;&amp;nbsp;loadChannel()&amp;nbsp;{&lt;/div&gt;&lt;div style=&quot;padding:0 6px; white-space:pre; line-height:130%&quot;&gt;&amp;nbsp;&lt;/div&gt;&lt;div style=&quot;padding:0 6px; white-space:pre; line-height:130%&quot;&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;span style=&quot;color:#ff3399&quot;&gt;var&lt;/span&gt;&amp;nbsp;channels&amp;nbsp;&lt;span style=&quot;color:#0086b3&quot;&gt;&lt;/span&gt;&lt;span style=&quot;color:#ff3399&quot;&gt;=&lt;/span&gt;&amp;nbsp;{};&lt;/div&gt;&lt;div style=&quot;padding:0 6px; white-space:pre; line-height:130%&quot;&gt;&amp;nbsp;&lt;/div&gt;&lt;div style=&quot;padding:0 6px; white-space:pre; line-height:130%&quot;&gt;&amp;nbsp;&lt;/div&gt;&lt;div style=&quot;padding:0 6px; white-space:pre; line-height:130%&quot;&gt;&amp;nbsp;&lt;/div&gt;&lt;div style=&quot;padding:0 6px; white-space:pre; line-height:130%&quot;&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;let&amp;nbsp;info&amp;nbsp;&lt;span style=&quot;color:#0086b3&quot;&gt;&lt;/span&gt;&lt;span style=&quot;color:#ff3399&quot;&gt;=&lt;/span&gt;&amp;nbsp;await&amp;nbsp;web.groups.list();&lt;/div&gt;&lt;div style=&quot;padding:0 6px; white-space:pre; line-height:130%&quot;&gt;&amp;nbsp;&lt;/div&gt;&lt;div style=&quot;padding:0 6px; white-space:pre; line-height:130%&quot;&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;span style=&quot;color:#ff3399&quot;&gt;for&lt;/span&gt;&amp;nbsp;(&lt;span style=&quot;color:#ff3399&quot;&gt;var&lt;/span&gt;&amp;nbsp;i&amp;nbsp;&lt;span style=&quot;color:#ff3399&quot;&gt;in&lt;/span&gt;&amp;nbsp;info.groups)&amp;nbsp;{&lt;/div&gt;&lt;div style=&quot;padding:0 6px; white-space:pre; line-height:130%&quot;&gt;&amp;nbsp;&lt;/div&gt;&lt;div style=&quot;padding:0 6px; white-space:pre; line-height:130%&quot;&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;channels[info.groups[i].&lt;span style=&quot;color:#4be6fa&quot;&gt;name&lt;/span&gt;]&amp;nbsp;&lt;span style=&quot;color:#0086b3&quot;&gt;&lt;/span&gt;&lt;span style=&quot;color:#ff3399&quot;&gt;=&lt;/span&gt;&amp;nbsp;info.groups[i].id;&lt;/div&gt;&lt;div style=&quot;padding:0 6px; white-space:pre; line-height:130%&quot;&gt;&amp;nbsp;&lt;/div&gt;&lt;div style=&quot;padding:0 6px; white-space:pre; line-height:130%&quot;&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;}&lt;/div&gt;&lt;div style=&quot;padding:0 6px; white-space:pre; line-height:130%&quot;&gt;&amp;nbsp;&lt;/div&gt;&lt;div style=&quot;padding:0 6px; white-space:pre; line-height:130%&quot;&gt;&amp;nbsp;&lt;/div&gt;&lt;div style=&quot;padding:0 6px; white-space:pre; line-height:130%&quot;&gt;&amp;nbsp;&lt;/div&gt;&lt;div style=&quot;padding:0 6px; white-space:pre; line-height:130%&quot;&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;info&amp;nbsp;&lt;span style=&quot;color:#0086b3&quot;&gt;&lt;/span&gt;&lt;span style=&quot;color:#ff3399&quot;&gt;=&lt;/span&gt;&amp;nbsp;await&amp;nbsp;web.channels.list();&lt;/div&gt;&lt;div style=&quot;padding:0 6px; white-space:pre; line-height:130%&quot;&gt;&amp;nbsp;&lt;/div&gt;&lt;div style=&quot;padding:0 6px; white-space:pre; line-height:130%&quot;&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;span style=&quot;color:#ff3399&quot;&gt;for&lt;/span&gt;&amp;nbsp;(&lt;span style=&quot;color:#ff3399&quot;&gt;var&lt;/span&gt;&amp;nbsp;i&amp;nbsp;&lt;span style=&quot;color:#ff3399&quot;&gt;in&lt;/span&gt;&amp;nbsp;info.groups)&amp;nbsp;{&lt;/div&gt;&lt;div style=&quot;padding:0 6px; white-space:pre; line-height:130%&quot;&gt;&amp;nbsp;&lt;/div&gt;&lt;div style=&quot;padding:0 6px; white-space:pre; line-height:130%&quot;&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;channels[info.groups[i].&lt;span style=&quot;color:#4be6fa&quot;&gt;name&lt;/span&gt;]&amp;nbsp;&lt;span style=&quot;color:#0086b3&quot;&gt;&lt;/span&gt;&lt;span style=&quot;color:#ff3399&quot;&gt;=&lt;/span&gt;&amp;nbsp;info.groups[i].id;&lt;/div&gt;&lt;div style=&quot;padding:0 6px; white-space:pre; line-height:130%&quot;&gt;&amp;nbsp;&lt;/div&gt;&lt;div style=&quot;padding:0 6px; white-space:pre; line-height:130%&quot;&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;}&lt;/div&gt;&lt;div style=&quot;padding:0 6px; white-space:pre; line-height:130%&quot;&gt;&amp;nbsp;&lt;/div&gt;&lt;div style=&quot;padding:0 6px; white-space:pre; line-height:130%&quot;&gt;&amp;nbsp;&lt;/div&gt;&lt;div style=&quot;padding:0 6px; white-space:pre; line-height:130%&quot;&gt;&amp;nbsp;&lt;/div&gt;&lt;div style=&quot;padding:0 6px; white-space:pre; line-height:130%&quot;&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;span style=&quot;color:#ff3399&quot;&gt;return&lt;/span&gt;&amp;nbsp;channels;&lt;/div&gt;&lt;div style=&quot;padding:0 6px; white-space:pre; line-height:130%&quot;&gt;&amp;nbsp;&lt;/div&gt;&lt;div style=&quot;padding:0 6px; white-space:pre; line-height:130%&quot;&gt;}&lt;/div&gt;&lt;div style=&quot;padding:0 6px; white-space:pre; line-height:130%&quot;&gt;&amp;nbsp;&lt;/div&gt;&lt;div style=&quot;padding:0 6px; white-space:pre; line-height:130%&quot;&gt;&amp;nbsp;&lt;/div&gt;&lt;/div&gt;&lt;div style=&quot;text-align:right; margin-top:-13px; margin-right:5px; font-size:9px; font-style:italic&quot;&gt;&lt;a href=&quot;http://colorscripter.com/info#e&quot; target=&quot;_blank&quot; style=&quot;color: rgb(79, 79, 79);&quot;&gt;Colored by Color Scripter&lt;/a&gt;&lt;/div&gt;&lt;/td&gt;&lt;td style=&quot;vertical-align:bottom; padding:0 2px 4px 0&quot;&gt;&lt;a href=&quot;http://colorscripter.com/info#e&quot; target=&quot;_blank&quot; style=&quot;color: white;&quot;&gt;&lt;span style=&quot;font-size: 9px; word-break: normal; background-color: rgb(79, 79, 79); border-radius: 10px; padding: 1px;&quot;&gt;cs&lt;/span&gt;&lt;/a&gt;&lt;/td&gt;&lt;/tr&gt;&lt;/tbody&gt;&lt;/table&gt;&lt;/p&gt;&lt;/p&gt;&lt;/div&gt;&lt;p&gt;&lt;b&gt;&lt;br /&gt;&lt;/b&gt;&lt;/p&gt;&lt;p&gt;&lt;b&gt;4. 알람 확인하기&lt;/b&gt;&lt;/p&gt;&lt;p style=&quot;text-align: center; clear: none; float: none;&quot;&gt;&lt;span class=&quot;imageblock&quot; style=&quot;display: inline-block; width: 860px;  height: auto; max-width: 100%;&quot;&gt;&lt;img src=&quot;https://t1.daumcdn.net/cfile/tistory/994A4F355BFCABB529&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Ft1.daumcdn.net%2Fcfile%2Ftistory%2F994A4F355BFCABB529&quot; width=&quot;860&quot; height=&quot;630&quot; filename=&quot;20181127_111344_882.jpg&quot; filemime=&quot;image/jpeg&quot;/&gt;&lt;/span&gt;&lt;/p&gt;&lt;p&gt;&lt;b&gt;&lt;br /&gt;&lt;/b&gt;&lt;/p&gt;&lt;p&gt;&lt;b&gt;5. 응용&lt;/b&gt;&lt;/p&gt;&lt;p style=&quot;margin-left: 2em;&quot;&gt;&lt;b&gt;- Q&amp;amp;A 게시판 문의시 Slack 알람,&amp;nbsp;&lt;/b&gt;&lt;b&gt;Slack에서 Reply시 게시판 답글 자동 작성&lt;/b&gt;&lt;/p&gt;&lt;p style=&quot;text-align: center; clear: none; float: none;&quot;&gt;&lt;span class=&quot;imageblock&quot; style=&quot;display: inline-block; width: 860px;  height: auto; max-width: 100%;&quot;&gt;&lt;img src=&quot;https://t1.daumcdn.net/cfile/tistory/99090D3B5BFCAFDD22&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Ft1.daumcdn.net%2Fcfile%2Ftistory%2F99090D3B5BFCAFDD22&quot; width=&quot;860&quot; height=&quot;630&quot; filename=&quot;20181127_114526_358.jpg&quot; filemime=&quot;image/jpeg&quot;/&gt;&lt;/span&gt;&lt;/p&gt;&lt;p style=&quot;margin-left: 2em;&quot;&gt;&lt;b&gt;&lt;br /&gt;&lt;/b&gt;&lt;/p&gt;&lt;p style=&quot;margin-left: 2em;&quot;&gt;- 서버관리, pm2연동하여 프로세스 리스트 출력, 로그출력, 리셋등..&lt;/p&gt;&lt;p style=&quot;margin-left: 2em; text-align: left; clear: none; float: none;&quot;&gt;&lt;span class=&quot;imageblock&quot; style=&quot;display: inline-block; width: 406px;  height: auto; max-width: 100%;&quot;&gt;&lt;img src=&quot;https://t1.daumcdn.net/cfile/tistory/99D77D435BFCB0A727&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Ft1.daumcdn.net%2Fcfile%2Ftistory%2F99D77D435BFCB0A727&quot; width=&quot;406&quot; height=&quot;269&quot; filename=&quot;3.png&quot; filemime=&quot;image/png&quot;/&gt;&lt;/span&gt;&lt;/p&gt;&lt;p style=&quot;text-align: center; clear: none; float: none;&quot;&gt;&lt;br /&gt;&lt;/p&gt;&lt;p style=&quot;text-align: left; clear: none; float: none;&quot;&gt;&lt;b&gt;6. 마지막으로&lt;/b&gt;&lt;br /&gt;&lt;/p&gt;&lt;p style=&quot;text-align: left; clear: none; float: none; margin-left: 2em;&quot;&gt;- Slack을 써봅시다.&lt;/p&gt;&lt;p style=&quot;margin-left: 2em;&quot;&gt;&lt;br /&gt;&lt;/p&gt;&lt;p&gt;&lt;b&gt;&lt;br /&gt;&lt;/b&gt;&lt;/p&gt;</description>
      <category>기타</category>
      <author>장송송</author>
      <guid isPermaLink="true">https://jsongsong.tistory.com/43</guid>
      <comments>https://jsongsong.tistory.com/43#entry43comment</comments>
      <pubDate>Tue, 27 Nov 2018 11:50:08 +0900</pubDate>
    </item>
    <item>
      <title>각종 알람 쉽게 받기 - NATEON</title>
      <link>https://jsongsong.tistory.com/42</link>
      <description>&lt;p&gt;&lt;b&gt;네이트온을 이용한 알람 쉽게 받기&lt;/b&gt;&lt;/p&gt;&lt;p&gt;- 네이트온은 기업에 특화 되어있어 각종기능들이 많다.&lt;/p&gt;&lt;p&gt;- 팀룸의 기능중 오픈 API 기능을 이용해 각종 알림을 설정해보자&lt;/p&gt;&lt;p&gt;&lt;br /&gt;&lt;/p&gt;&lt;p&gt;&lt;br /&gt;&lt;/p&gt;&lt;p&gt;&lt;b&gt;1. 팀룸생성&lt;/b&gt;&lt;/p&gt;&lt;p style=&quot;margin-left: 2em;&quot;&gt;- 네이트온 목록중 &quot;&lt;b&gt;팀룸 만들기&lt;/b&gt;&quot;를 클릭하여 생성&lt;/p&gt;&lt;p style=&quot;margin-left: 2em; text-align: center; clear: none; float: none;&quot;&gt;&lt;span class=&quot;imageblock&quot; style=&quot;display: inline-block; width: 350px;  height: auto; max-width: 100%;&quot;&gt;&lt;img src=&quot;https://t1.daumcdn.net/cfile/tistory/99BAE13B5BFB8C9B17&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Ft1.daumcdn.net%2Fcfile%2Ftistory%2F99BAE13B5BFB8C9B17&quot; width=&quot;350&quot; height=&quot;484&quot; filename=&quot;1.png&quot; filemime=&quot;image/png&quot; style=&quot;&quot;/&gt;&lt;/span&gt;&lt;/p&gt;&lt;p style=&quot;margin-left: 2em; text-align: center; clear: none; float: none;&quot;&gt;&lt;br /&gt;&lt;/p&gt;&lt;p style=&quot;margin-left: 2em; text-align: left; clear: none; float: none;&quot;&gt;&lt;b&gt;2. 팀룸 오픈 API 생성&lt;/b&gt;&lt;br /&gt;&lt;/p&gt;&lt;p style=&quot;margin-left: 4em; text-align: left; clear: none; float: none;&quot;&gt;&lt;b&gt;- &lt;/b&gt;팀룸에서 알람을 받을 모임 생성 및 사용자 초대하기&lt;/p&gt;&lt;p style=&quot;margin-left: 4em; text-align: left; clear: none; float: none;&quot;&gt;- 상단부분 설정에서 오픈 API 연동하기 클릭&lt;/p&gt;&lt;p style=&quot;margin-left: 4em; text-align: center; clear: none; float: none;&quot;&gt;&lt;span class=&quot;imageblock&quot; style=&quot;display: inline-block; width: 860px;  height: auto; max-width: 100%;&quot;&gt;&lt;img src=&quot;https://t1.daumcdn.net/cfile/tistory/99C1C93A5BFB8C9B11&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Ft1.daumcdn.net%2Fcfile%2Ftistory%2F99C1C93A5BFB8C9B11&quot; width=&quot;860&quot; height=&quot;591&quot; filename=&quot;2.png&quot; filemime=&quot;image/png&quot; style=&quot;&quot;/&gt;&lt;/span&gt;&lt;/p&gt;&lt;p style=&quot;margin-left: 4em; text-align: left; clear: none; float: none;&quot;&gt;&lt;br /&gt;&lt;/p&gt;&lt;p style=&quot;margin-left: 2em; text-align: left; clear: none; float: none;&quot;&gt;&lt;b&gt;3. 연동 설정하기&lt;/b&gt;&lt;/p&gt;&lt;p style=&quot;margin-left: 4em; text-align: left; clear: none; float: none;&quot;&gt;- 상단부분 새로 연결하기 클릭&lt;/p&gt;&lt;p style=&quot;margin-left: 4em; text-align: center; clear: none; float: none;&quot;&gt;&lt;span class=&quot;imageblock&quot; style=&quot;display: inline-block; width: 851px;  height: auto; max-width: 100%;&quot;&gt;&lt;img src=&quot;https://t1.daumcdn.net/cfile/tistory/993FA83F5BFB8C9B05&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Ft1.daumcdn.net%2Fcfile%2Ftistory%2F993FA83F5BFB8C9B05&quot; width=&quot;851&quot; height=&quot;105&quot; filename=&quot;4.png&quot; filemime=&quot;image/png&quot; style=&quot;&quot;/&gt;&lt;/span&gt;&lt;/p&gt;&lt;p style=&quot;margin-left: 4em; text-align: left; clear: none; float: none;&quot;&gt;&lt;br /&gt;&lt;/p&gt;&lt;p style=&quot;margin-left: 4em; text-align: left; clear: none; float: none;&quot;&gt;- 이름, 모임 을 선택후 생성 (Webhook URL 복사 해두기)&lt;/p&gt;&lt;p style=&quot;margin-left: 4em; text-align: center; clear: none; float: none;&quot;&gt;&lt;span class=&quot;imageblock&quot; style=&quot;display: inline-block; width: 860px;  height: auto; max-width: 100%;&quot;&gt;&lt;img src=&quot;https://t1.daumcdn.net/cfile/tistory/9961A3385BFB8C9B09&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Ft1.daumcdn.net%2Fcfile%2Ftistory%2F9961A3385BFB8C9B09&quot; width=&quot;860&quot; height=&quot;670&quot; filename=&quot;3.png&quot; filemime=&quot;image/png&quot; style=&quot;&quot;/&gt;&lt;/span&gt;&lt;/p&gt;&lt;p style=&quot;margin-left: 4em; text-align: left; clear: none; float: none;&quot;&gt;&lt;br /&gt;&lt;/p&gt;&lt;p&gt;&lt;br /&gt;&lt;/p&gt;&lt;p&gt;&lt;b&gt;4. 알람 발생시키기&lt;/b&gt;&lt;/p&gt;&lt;p style=&quot;margin-left: 2em;&quot;&gt;&lt;b&gt;- linux curl 기준&lt;/b&gt;&lt;/p&gt;&lt;p style=&quot;margin-left: 4em;&quot;&gt;&lt;b&gt;-curl -X POST -H &quot;Content-Type: application/x-www-form-urlencoded&quot; --data-urlencode 'content=테스트메시지' &quot;https://teamroom.nate.com/api/webhook/XXXXXXXXX/XXXXXXXXXXXXXXXXXXX&quot;&amp;nbsp;&lt;/b&gt;&lt;/p&gt;&lt;p style=&quot;text-align: center; clear: none; float: none;&quot;&gt;&lt;span class=&quot;imageblock&quot; style=&quot;display: inline-block; width: 860px;  height: auto; max-width: 100%;&quot;&gt;&lt;img src=&quot;https://t1.daumcdn.net/cfile/tistory/993611365BFB8C9B0E&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Ft1.daumcdn.net%2Fcfile%2Ftistory%2F993611365BFB8C9B0E&quot; width=&quot;860&quot; height=&quot;592&quot; filename=&quot;5.png&quot; filemime=&quot;image/png&quot; style=&quot;&quot;/&gt;&lt;/span&gt;&lt;/p&gt;&lt;p&gt;&lt;br /&gt;&lt;/p&gt;&lt;p&gt;&lt;br /&gt;&lt;/p&gt;&lt;p&gt;&lt;b&gt;5. 잘 이용하기&lt;/b&gt;&lt;/p&gt;&lt;p style=&quot;margin-left: 2em;&quot;&gt;&lt;b&gt;- 각종 알람등을 아주 쉽게 발생시킬수 있습니다.&amp;nbsp;&lt;/b&gt;&lt;/p&gt;&lt;p style=&quot;margin-left: 2em;&quot;&gt;&lt;b&gt;- 네이트온은 PC, Mobile 전부 지원합니다.&lt;/b&gt;&lt;/p&gt;&lt;p style=&quot;margin-left: 2em;&quot;&gt;- 팀장님 대신 열일하는 일지봇, 일지를 잘냅시다??&lt;/p&gt;&lt;p style=&quot;margin-left: 2em; text-align: center; clear: none; float: none;&quot;&gt;&lt;span class=&quot;imageblock&quot; style=&quot;display: inline-block; width: 860px;  height: auto; max-width: 100%;&quot;&gt;&lt;img src=&quot;https://t1.daumcdn.net/cfile/tistory/99B3C53E5BFB8E4910&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Ft1.daumcdn.net%2Fcfile%2Ftistory%2F99B3C53E5BFB8E4910&quot; width=&quot;860&quot; height=&quot;647&quot; filename=&quot;6.png&quot; filemime=&quot;image/png&quot; style=&quot;&quot;/&gt;&lt;/span&gt;&lt;/p&gt;&lt;p style=&quot;margin-left: 2em;&quot;&gt;&lt;b&gt;&lt;br /&gt;&lt;/b&gt;&lt;/p&gt;</description>
      <category>기타</category>
      <category>네이트온</category>
      <category>봇</category>
      <category>오픈API</category>
      <category>팀룸</category>
      <author>장송송</author>
      <guid isPermaLink="true">https://jsongsong.tistory.com/42</guid>
      <comments>https://jsongsong.tistory.com/42#entry42comment</comments>
      <pubDate>Mon, 26 Nov 2018 15:11:31 +0900</pubDate>
    </item>
    <item>
      <title>Bitbucket 2FA 인증 추가하기</title>
      <link>https://jsongsong.tistory.com/40</link>
      <description>&lt;p&gt;&lt;b&gt;1. Bitbucket 2FA 설정하기&lt;/b&gt;&lt;/p&gt;&lt;p style=&quot;margin-left: 2em;&quot;&gt;&lt;b&gt;- Bitbucket Settings -&amp;gt; Two-step verification&lt;/b&gt;&lt;/p&gt;&lt;p style=&quot;margin-left: 2em; text-align: center; clear: none; float: none;&quot;&gt;&lt;span class=&quot;imageblock&quot; style=&quot;display: inline-block; width: 820px;  height: auto; max-width: 100%;&quot;&gt;&lt;img src=&quot;https://t1.daumcdn.net/cfile/tistory/9913503B5B83822411&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Ft1.daumcdn.net%2Fcfile%2Ftistory%2F9913503B5B83822411&quot; width=&quot;820&quot; height=&quot;592&quot; filename=&quot;1.png&quot; filemime=&quot;image/png&quot; style=&quot;&quot;/&gt;&lt;/span&gt;&lt;/p&gt;&lt;p style=&quot;margin-left: 2em; text-align: center; clear: none; float: none;&quot;&gt;&lt;br /&gt;&lt;/p&gt;&lt;p style=&quot;margin-left: 2em; text-align: left; clear: none; float: none;&quot;&gt;&lt;b&gt;&lt;br /&gt;&lt;/b&gt;&lt;/p&gt;&lt;p style=&quot;margin-left: 2em; text-align: left; clear: none; float: none;&quot;&gt;&lt;b&gt;- SSH KEY 추가하기&lt;/b&gt;&lt;br /&gt;&lt;/p&gt;&lt;div class=&quot;txc-textbox&quot; style=&quot;border-style: solid; border-width: 1px; border-color: rgb(238, 238, 238); background-color: rgb(238, 238, 238); padding: 10px;&quot;&gt;&lt;p style=&quot;text-align: left; clear: none; float: none;&quot;&gt;# WIndow CMD에서 ssh key 확인 및 생성&lt;/p&gt;&lt;p style=&quot;text-align: left; clear: none; float: none;&quot;&gt;확인 &amp;gt; c:\Users\&amp;lt;user name&amp;gt;\.ssh\id_rsa.pub&lt;/p&gt;&lt;p style=&quot;text-align: left; clear: none; float: none;&quot;&gt;파일 없으면 생성&amp;gt; ssh-keygen&lt;/p&gt;&lt;/div&gt;&lt;p style=&quot;margin-left: 4em; text-align: left; clear: none; float: none;&quot;&gt;-id_rsa.pub 파일 내용을 Key에 붙여넣음.&lt;/p&gt;&lt;p style=&quot;margin-left: 2em; text-align: center; clear: none; float: none;&quot;&gt;&lt;span class=&quot;imageblock&quot; style=&quot;display: inline-block; width: 820px;  height: auto; max-width: 100%;&quot;&gt;&lt;img src=&quot;https://t1.daumcdn.net/cfile/tistory/996561395B8386441B&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Ft1.daumcdn.net%2Fcfile%2Ftistory%2F996561395B8386441B&quot; width=&quot;820&quot; height=&quot;464&quot; filename=&quot;2.png&quot; filemime=&quot;image/png&quot; style=&quot;&quot;/&gt;&lt;/span&gt;&lt;/p&gt;&lt;p style=&quot;margin-left: 2em;&quot;&gt;&lt;br /&gt;&lt;/p&gt;&lt;p style=&quot;margin-left: 2em;&quot;&gt;&lt;b&gt;- QR 코드가 생성 되었는지 확인 후 authy에 등록&amp;nbsp;&lt;/b&gt;&lt;/p&gt;&lt;p&gt;&lt;br /&gt;&lt;/p&gt;&lt;p&gt;&lt;b&gt;2. authy APP 설치&lt;/b&gt;&lt;/p&gt;&lt;p style=&quot;margin-left: 2em;&quot;&gt;&lt;b&gt;-&amp;nbsp;&lt;a href=&quot;https://play.google.com/store/apps/details?id=com.authy.authy&quot; target=&quot;_blank&quot; class=&quot;tx-link&quot;&gt;https://play.google.com/store/apps/details?id=com.authy.authy&lt;/a&gt;&lt;/b&gt;&lt;/p&gt;&lt;p style=&quot;margin-left: 2em;&quot;&gt;&lt;b&gt;&lt;br /&gt;&lt;/b&gt;&lt;/p&gt;&lt;p&gt;&lt;b&gt;3. Chrome plugin 설치&lt;/b&gt;&lt;/p&gt;&lt;p style=&quot;margin-left: 2em;&quot;&gt;&lt;b&gt;-&amp;nbsp;&lt;a href=&quot;https://chrome.google.com/webstore/detail/authy-chrome-extension/fhgenkpocbhhddlgkjnfghpjanffonno&quot; target=&quot;_blank&quot; class=&quot;tx-link&quot;&gt;https://chrome.google.com/webstore/detail/authy-chrome-extension/fhgenkpocbhhddlgkjnfghpjanffonno&lt;/a&gt;&lt;/b&gt;&lt;/p&gt;&lt;p&gt;&lt;br /&gt;&lt;/p&gt;&lt;p&gt;&lt;b&gt;4. 정리하며..&lt;/b&gt;&lt;/p&gt;&lt;p style=&quot;margin-left: 2em;&quot;&gt;- Git remote에 HTTPS로 연결하면 비밀번호 + Authy 키가 필요함.&lt;/p&gt;&lt;p style=&quot;margin-left: 2em;&quot;&gt;- SSH-KEY를 등록후 SSH로 연결 하면 비밀번호 없이 사용가능.&lt;/p&gt;</description>
      <category>2FA</category>
      <category>2factor</category>
      <category>bitbucket</category>
      <author>장송송</author>
      <guid isPermaLink="true">https://jsongsong.tistory.com/40</guid>
      <comments>https://jsongsong.tistory.com/40#entry40comment</comments>
      <pubDate>Mon, 27 Aug 2018 14:11:47 +0900</pubDate>
    </item>
    <item>
      <title>Amazon MQ 도입기</title>
      <link>https://jsongsong.tistory.com/39</link>
      <description>&lt;p&gt;&lt;b&gt;1. 브로커 생성하기&lt;/b&gt;&lt;/p&gt;&lt;p&gt;&lt;b&gt;&lt;br /&gt;&lt;/b&gt;&lt;/p&gt;&lt;p&gt;&lt;b&gt;2. 사용자 생성하기&lt;/b&gt;&lt;/p&gt;&lt;p style=&quot;margin-left: 2em;&quot;&gt;- Amazon MQ 브로커 설정 가장 아래에 사용자 만들기 이용.&lt;/p&gt;&lt;p style=&quot;margin-left: 2em; text-align: left; clear: none; float: none;&quot;&gt;&lt;span class=&quot;imageblock&quot; style=&quot;display: inline-block; width: 820px;  height: auto; max-width: 100%;&quot;&gt;&lt;img src=&quot;https://t1.daumcdn.net/cfile/tistory/99B9A1425B7CAB6220&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Ft1.daumcdn.net%2Fcfile%2Ftistory%2F99B9A1425B7CAB6220&quot; width=&quot;820&quot; height=&quot;269&quot; filename=&quot;제목 없음.png&quot; filemime=&quot;image/png&quot;/&gt;&lt;/span&gt;&lt;/p&gt;&lt;p style=&quot;margin-left: 2em;&quot;&gt;&lt;br /&gt;&lt;/p&gt;&lt;p&gt;&lt;b&gt;3. 엔트포인트 이용하기&lt;/b&gt;&lt;/p&gt;&lt;p style=&quot;margin-left: 2em;&quot;&gt;-&amp;nbsp;&lt;span style=&quot;background-color: rgb(238, 238, 238);&quot;&gt;Ver&amp;nbsp;&lt;/span&gt;&lt;span style=&quot;background-color: rgb(238, 238, 238);&quot;&gt;MQTT&lt;/span&gt;&lt;/p&gt;&lt;div class=&quot;txc-textbox&quot; style=&quot;border-style: solid; border-width: 1px; border-color: rgb(238, 238, 238); background-color: rgb(238, 238, 238); padding: 10px;&quot;&gt;&lt;p&gt;//Server&lt;/p&gt;&lt;p&gt;const mqtt = require('mqtt');&lt;/p&gt;&lt;p&gt;&lt;br /&gt;&lt;/p&gt;&lt;p&gt;const _SERVER = &quot;&quot;;&lt;/p&gt;&lt;p&gt;const _USER = &quot;&quot;;&lt;/p&gt;&lt;p&gt;const _PASSWORD = &quot;&quot;;&lt;/p&gt;&lt;p&gt;const topic = &quot;/REAL/topic&quot;;&lt;/p&gt;&lt;p&gt;&lt;br /&gt;&lt;/p&gt;&lt;p&gt;const client = mqtt.connect(_SERVER, {&lt;/p&gt;&lt;p&gt;&amp;nbsp; &amp;nbsp; username: _USER,&lt;/p&gt;&lt;p&gt;&amp;nbsp; &amp;nbsp; password: _PASSWORD&lt;/p&gt;&lt;p&gt;})&lt;/p&gt;&lt;p&gt;&lt;br /&gt;&lt;/p&gt;&lt;p&gt;client.on('connect', function() {&lt;/p&gt;&lt;p&gt;&amp;nbsp; &amp;nbsp; client.subscribe(topic)&lt;/p&gt;&lt;p&gt;&amp;nbsp; &amp;nbsp; client.publish(topic, 'Hello mqtt')&lt;/p&gt;&lt;p&gt;})&lt;/p&gt;&lt;p&gt;&lt;br /&gt;&lt;/p&gt;&lt;p&gt;client.on('message', function(topic, message) {&lt;/p&gt;&lt;p&gt;&amp;nbsp; &amp;nbsp; // message is Buffer&lt;/p&gt;&lt;p&gt;&amp;nbsp; &amp;nbsp; console.log(message.toString())&lt;/p&gt;&lt;p&gt;&amp;nbsp; &amp;nbsp; client.end()&lt;/p&gt;&lt;p&gt;});&lt;/p&gt;&lt;/div&gt;&lt;p&gt;&lt;br /&gt;&lt;/p&gt;&lt;p&gt;&lt;br /&gt;&lt;/p&gt;&lt;div class=&quot;txc-textbox&quot; style=&quot;border-style: solid; border-width: 1px; border-color: rgb(238, 238, 238); background-color: rgb(238, 238, 238); padding: 10px;&quot;&gt;&lt;p&gt;//Html&lt;/p&gt;&lt;p&gt;&amp;lt;!doctype html&amp;gt;&lt;/p&gt;&lt;p&gt;&amp;lt;html&amp;gt;&lt;/p&gt;&lt;p&gt;&amp;lt;head&amp;gt;&lt;/p&gt;&lt;p&gt;&amp;nbsp; &amp;nbsp; &amp;lt;title&amp;gt;test Ws mqtt.js&amp;lt;/title&amp;gt;&lt;/p&gt;&lt;p&gt;&amp;lt;/head&amp;gt;&lt;/p&gt;&lt;p&gt;&amp;lt;body&amp;gt;&lt;/p&gt;&lt;p&gt;&amp;nbsp; &amp;nbsp; &amp;lt;script src=&quot;./browserMqtt.js&quot;&amp;gt;&amp;lt;/script&amp;gt;&lt;/p&gt;&lt;p&gt;&amp;nbsp; &amp;nbsp; &amp;lt;script&amp;gt;&lt;/p&gt;&lt;p&gt;&amp;nbsp; &amp;nbsp; var _SERVER = &quot;wss://&quot;;&lt;/p&gt;&lt;p&gt;&amp;nbsp; &amp;nbsp; var _USER = &quot;&quot;;&lt;/p&gt;&lt;p&gt;&amp;nbsp; &amp;nbsp; var _PASSWORD = &quot;&quot;;&lt;/p&gt;&lt;p&gt;&amp;nbsp; &amp;nbsp; var topic = &quot;/REAL/topic&quot;;&lt;/p&gt;&lt;p&gt;&lt;br /&gt;&lt;/p&gt;&lt;p&gt;&amp;nbsp; &amp;nbsp; var client = mqtt.connect(_SERVER, {&lt;/p&gt;&lt;p&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; username: _USER,&lt;/p&gt;&lt;p&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; password: _PASSWORD&lt;/p&gt;&lt;p&gt;&amp;nbsp; &amp;nbsp; }); // you add a ws:// url here&lt;/p&gt;&lt;p&gt;&lt;br /&gt;&lt;/p&gt;&lt;p&gt;&amp;nbsp; &amp;nbsp; client.subscribe(topic)&lt;/p&gt;&lt;p&gt;&lt;br /&gt;&lt;/p&gt;&lt;p&gt;&amp;nbsp; &amp;nbsp; client.on(&quot;message&quot;, function(topic, payload) {&lt;/p&gt;&lt;p&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; console.log(topic, payload.toString());&lt;/p&gt;&lt;p&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; client.end()&lt;/p&gt;&lt;p&gt;&amp;nbsp; &amp;nbsp; })&lt;/p&gt;&lt;p&gt;&lt;br /&gt;&lt;/p&gt;&lt;p&gt;&amp;nbsp; &amp;nbsp; client.publish(topic, &quot;hello world!&quot;)&lt;/p&gt;&lt;p&gt;&amp;nbsp; &amp;nbsp; &amp;lt;/script&amp;gt;&lt;/p&gt;&lt;p&gt;&amp;lt;/body&amp;gt;&lt;/p&gt;&lt;p&gt;&amp;lt;/html&amp;gt;&lt;/p&gt;&lt;/div&gt;&lt;p&gt;&lt;br /&gt;&lt;/p&gt;&lt;p&gt;&lt;b&gt;4. 사용자별 권한주기&lt;/b&gt;&lt;/p&gt;&lt;p style=&quot;margin-left: 2em;&quot;&gt;&lt;b&gt;- 사용자 추가시 그룹을 설정한다&lt;/b&gt;&lt;/p&gt;&lt;p style=&quot;margin-left: 2em;&quot;&gt;&lt;b&gt;- Amazon MQ 구성페이지에서 환경 설정을 한다.&lt;/b&gt;&lt;/p&gt;&lt;p style=&quot;margin-left: 2em;&quot;&gt;&lt;b&gt;&amp;nbsp; &amp;nbsp; -&amp;nbsp;&lt;/b&gt;&lt;span style=&quot;background-color: rgb(238, 238, 238);&quot;&gt;authorizationPlugin 을 추가한다. 아래 예제소스 참고&lt;/span&gt;&lt;/p&gt;&lt;div class=&quot;txc-textbox&quot; style=&quot;border-style: solid; border-width: 1px; border-color: rgb(238, 238, 238); background-color: rgb(238, 238, 238); padding: 10px;&quot;&gt;&lt;p style=&quot;margin-left: 2em;&quot;&gt;&amp;lt;?xml version=&quot;1.0&quot; encoding=&quot;UTF-8&quot; standalone=&quot;yes&quot;?&amp;gt;&lt;/p&gt;&lt;p style=&quot;margin-left: 2em;&quot;&gt;&amp;lt;broker xmlns=&quot;http://activemq.apache.org/schema/core&quot;&amp;gt;&lt;/p&gt;&lt;p style=&quot;margin-left: 2em;&quot;&gt;&amp;nbsp; &amp;nbsp; ....&lt;/p&gt;&lt;p style=&quot;margin-left: 4em;&quot;&gt;&amp;nbsp;&amp;lt;authorizationPlugin&amp;gt;&lt;/p&gt;&lt;p style=&quot;margin-left: 4em;&quot;&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;lt;map&amp;gt;&lt;/p&gt;&lt;p style=&quot;margin-left: 4em;&quot;&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;lt;authorizationMap&amp;gt;&lt;/p&gt;&lt;p style=&quot;margin-left: 4em;&quot;&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;lt;authorizationEntries&amp;gt;&lt;/p&gt;&lt;p style=&quot;margin-left: 4em;&quot;&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;lt;authorizationEntry admin=&quot;users&quot; read=&quot;users&quot; topic=&quot;.REAL.&amp;amp;gt;&quot; write=&quot;users&quot;/&amp;gt;&lt;/p&gt;&lt;p style=&quot;margin-left: 4em;&quot;&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;lt;authorizationEntry admin=&quot;users&quot; read=&quot;users&quot; topic=&quot;REAL.&amp;amp;gt;&quot; write=&quot;users&quot;/&amp;gt;&lt;/p&gt;&lt;p style=&quot;margin-left: 4em;&quot;&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;lt;authorizationEntry admin=&quot;guests&quot; read=&quot;guests&quot; topic=&quot;DEV.&amp;amp;gt;&quot; write=&quot;guests&quot;/&amp;gt;&lt;/p&gt;&lt;p style=&quot;margin-left: 4em;&quot;&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;lt;authorizationEntry admin=&quot;users_auth&quot; read=&quot;users_auth&quot; topic=&quot;USER.&amp;amp;gt;&quot; write=&quot;users_auth&quot;/&amp;gt;&lt;/p&gt;&lt;p style=&quot;margin-left: 4em;&quot;&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;lt;authorizationEntry admin=&quot;guests,users,users_auth&quot; read=&quot;guests,users,users_auth&quot; topic=&quot;ActiveMQ.Advisory.&amp;amp;gt;&quot; write=&quot;guests,users,users_auth&quot;/&amp;gt;&lt;/p&gt;&lt;p style=&quot;margin-left: 4em;&quot;&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;lt;authorizationEntry admin=&quot;admins,users,guests,activemq-webconsole&quot; queue=&quot;&amp;amp;gt;&quot; read=&quot;admins,users,guests,activemq-webconsole&quot; write=&quot;admins,users,guests,activemq-webconsole&quot;/&amp;gt;&lt;/p&gt;&lt;p style=&quot;margin-left: 4em;&quot;&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;lt;authorizationEntry admin=&quot;admins,activemq-webconsole&quot; read=&quot;admins,activemq-webconsole&quot; topic=&quot;&amp;amp;gt;&quot; write=&quot;admins,activemq-webconsole&quot;/&amp;gt;&lt;/p&gt;&lt;p style=&quot;margin-left: 4em;&quot;&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;lt;authorizationEntry admin=&quot;admins,activemq-webconsole&quot; queue=&quot;&amp;amp;gt;&quot; read=&quot;admins,activemq-webconsole&quot; write=&quot;admins,activemq-webconsole&quot;/&amp;gt;&lt;/p&gt;&lt;p style=&quot;margin-left: 4em;&quot;&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;lt;/authorizationEntries&amp;gt;&lt;/p&gt;&lt;p style=&quot;margin-left: 4em;&quot;&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;lt;/authorizationMap&amp;gt;&lt;/p&gt;&lt;p style=&quot;margin-left: 4em;&quot;&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;lt;/map&amp;gt;&lt;/p&gt;&lt;p style=&quot;margin-left: 4em;&quot;&gt;&amp;nbsp; &amp;nbsp; &amp;lt;/authorizationPlugin&amp;gt;&lt;/p&gt;&lt;p style=&quot;margin-left: 2em;&quot;&gt;&amp;nbsp; &amp;nbsp; ....&lt;/p&gt;&lt;p style=&quot;margin-left: 2em;&quot;&gt;&amp;lt;/broker&amp;gt;&lt;/p&gt;&lt;/div&gt;&lt;p&gt;&lt;br /&gt;&lt;/p&gt;</description>
      <category>AWS</category>
      <category>activemq</category>
      <category>AmazonMQ</category>
      <category>AWS</category>
      <author>장송송</author>
      <guid isPermaLink="true">https://jsongsong.tistory.com/39</guid>
      <comments>https://jsongsong.tistory.com/39#entry39comment</comments>
      <pubDate>Wed, 22 Aug 2018 09:24:33 +0900</pubDate>
    </item>
    <item>
      <title>Elasticsearch S3 백업 및 복구</title>
      <link>https://jsongsong.tistory.com/37</link>
      <description>&lt;p&gt;&lt;b&gt;0. 나의 설정&lt;/b&gt;&lt;/p&gt;&lt;p style=&quot;margin-left: 2em;&quot;&gt;- Elasticsearch 6.1.1 사용&amp;nbsp;&lt;/p&gt;&lt;p style=&quot;margin-left: 2em;&quot;&gt;- path :&amp;nbsp;/data1/elasticsearch-6.1.1&amp;nbsp; : 이부분은 변경해서 설정하세요.&lt;/p&gt;&lt;p style=&quot;margin-left: 2em;&quot;&gt;&lt;br /&gt;&lt;/p&gt;&lt;p&gt;&lt;b&gt;1. Elasticsearch 환결설정&lt;/b&gt;&lt;/p&gt;&lt;div class=&quot;txc-textbox&quot; style=&quot;border-style: solid; border-width: 1px; border-color: rgb(238, 238, 238); background-color: rgb(238, 238, 238); padding: 10px;&quot;&gt;&lt;p style=&quot;margin-left: 2em;&quot;&gt;&lt;span style=&quot;background-color: rgb(0, 0, 0); color: rgb(255, 255, 255);&quot;&gt;&lt;span style=&quot;background-color: rgb(234, 234, 234); color: rgb(0, 0, 0);&quot;&gt;- vim config/jvm.options&amp;nbsp;&lt;/span&gt;&lt;/span&gt;&lt;/p&gt;&lt;p style=&quot;margin-left: 2em;&quot;&gt;&lt;span style=&quot;background-color: rgb(0, 0, 0); color: rgb(255, 255, 255);&quot;&gt;&lt;span style=&quot;background-color: rgb(234, 234, 234); color: rgb(0, 0, 0);&quot;&gt;&amp;nbsp; &amp;nbsp; -Des.allow_insecure_settings=true&amp;nbsp; #추가&lt;/span&gt;&lt;/span&gt;&lt;/p&gt;&lt;/div&gt;&lt;p style=&quot;margin-left: 2em;&quot;&gt;&lt;span style=&quot;background-color: rgb(0, 0, 0); color: rgb(255, 255, 255);&quot;&gt;&lt;br /&gt;&lt;/span&gt;&lt;/p&gt;&lt;div class=&quot;txc-textbox&quot; style=&quot;border-style: solid; border-width: 1px; border-color: rgb(238, 238, 238); background-color: rgb(238, 238, 238); padding: 10px;&quot;&gt;&lt;p style=&quot;margin-left: 2em;&quot;&gt;&lt;span style=&quot;background-color: rgb(0, 0, 0); color: rgb(255, 255, 255);&quot;&gt;&lt;span style=&quot;background-color: rgb(234, 234, 234); color: rgb(0, 0, 0);&quot;&gt;- vim config/elasticsearch.yml&lt;/span&gt;&lt;/span&gt;&lt;/p&gt;&lt;p style=&quot;margin-left: 2em;&quot;&gt;&lt;span style=&quot;background-color: rgb(234, 234, 234); color: rgb(0, 0, 0);&quot;&gt;&amp;nbsp; &amp;nbsp; -&amp;nbsp;network.host: [&quot;나의IP&lt;/span&gt;&lt;span style=&quot;background-color: rgb(0, 0, 0); color: rgb(255, 255, 255);&quot;&gt;&lt;span style=&quot;background-color: rgb(234, 234, 234); color: rgb(0, 0, 0);&quot;&gt;&quot;, &quot;localhost&quot;]&lt;/span&gt;&lt;/span&gt;&lt;/p&gt;&lt;/div&gt;&lt;p style=&quot;margin-left: 2em;&quot;&gt;&lt;span style=&quot;background-color: rgb(0, 0, 0); color: rgb(255, 255, 255);&quot;&gt;&lt;br /&gt;&lt;/span&gt;&lt;/p&gt;&lt;p&gt;&lt;b&gt;2. S3 플러그인 설치&lt;/b&gt;&lt;/p&gt;&lt;div class=&quot;txc-textbox&quot; style=&quot;border-style: solid; border-width: 1px; border-color: rgb(238, 238, 238); background-color: rgb(238, 238, 238); padding: 10px;&quot;&gt;&lt;p style=&quot;margin-left: 2em;&quot;&gt;&lt;span style=&quot;background-color: rgb(255, 255, 255); color: rgb(0, 0, 0);&quot;&gt;&lt;span style=&quot;background-color: rgb(234, 234, 234); color: rgb(0, 0, 0);&quot;&gt;/data1/elasticsearch-6.1.1/bin/elasticsearch&lt;/span&gt;&lt;/span&gt;&lt;span style=&quot;background-color: rgb(255, 255, 255); color: rgb(0, 0, 0);&quot;&gt;&lt;span style=&quot;background-color: rgb(234, 234, 234); color: rgb(0, 0, 0);&quot;&gt;-plugin install repository-s3&lt;/span&gt;&lt;/span&gt;&lt;/p&gt;&lt;/div&gt;&lt;p&gt;&lt;br /&gt;&lt;/p&gt;&lt;p&gt;&lt;br /&gt;&lt;/p&gt;&lt;p&gt;&lt;b&gt;3. S3 백업 폴더 지정하기&lt;/b&gt;&lt;/p&gt;&lt;div class=&quot;txc-textbox&quot; style=&quot;border-style: solid; border-width: 1px; border-color: rgb(238, 238, 238); background-color: rgb(238, 238, 238); padding: 10px;&quot;&gt;&lt;p&gt;curl --user ID:PW --header &quot;content-type: application/JSON&quot;&amp;nbsp; -XPUT 'localhost:9200/_snapshot/s3_snapshot?pretty' -d '{&lt;/p&gt;&lt;p&gt;&lt;span style=&quot;white-space: pre;&quot;&gt;	&lt;/span&gt;&quot;type&quot;: &quot;s3&quot;,&lt;/p&gt;&lt;p&gt;&lt;span style=&quot;white-space: pre;&quot;&gt;	&lt;/span&gt;&quot;settings&quot;: {&lt;/p&gt;&lt;p&gt;&amp;nbsp; &amp;nbsp;&amp;nbsp;&lt;span style=&quot;white-space: pre;&quot;&gt;	&lt;/span&gt;&quot;bucket&quot;: &quot;elasticsearch6-backup&quot;,&lt;/p&gt;&lt;p&gt;&amp;nbsp; &amp;nbsp;&amp;nbsp;&lt;span style=&quot;white-space: pre;&quot;&gt;	&lt;/span&gt;&quot;region&quot;: &quot;ap-northeast-2&quot;,&lt;/p&gt;&lt;p&gt;&amp;nbsp; &amp;nbsp;&amp;nbsp;&lt;span style=&quot;white-space: pre;&quot;&gt;	&lt;/span&gt;&quot;access_key&quot;: &quot;XXXXXXXXXXXXXXXXXXX&quot;,&lt;/p&gt;&lt;p&gt;&amp;nbsp; &amp;nbsp;&amp;nbsp;&lt;span style=&quot;white-space: pre;&quot;&gt;	&lt;/span&gt;&quot;secret_key&quot;: &quot;XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX&quot;,&lt;/p&gt;&lt;p&gt;&amp;nbsp; &amp;nbsp;&amp;nbsp;&lt;span style=&quot;white-space: pre;&quot;&gt;	&lt;/span&gt;&quot;compress&quot;: true&lt;/p&gt;&lt;p&gt;&lt;span style=&quot;white-space: pre;&quot;&gt;	&lt;/span&gt;}&lt;/p&gt;&lt;p&gt;}'&lt;/p&gt;&lt;/div&gt;&lt;p style=&quot;margin-left: 2em;&quot;&gt;&lt;span style=&quot;background-color: rgb(255, 255, 255); color: rgb(0, 0, 0);&quot;&gt;-&amp;nbsp;&lt;/span&gt;&lt;span style=&quot;background-color: rgb(255, 255, 255); color: rgb(0, 0, 0);&quot;&gt;localhost:9200/_snapshot/${name} : name은&amp;nbsp;스냅샵 이름 위 예제는&amp;nbsp;&lt;/span&gt;&lt;span style=&quot;background-color: rgb(255, 255, 255); color: rgb(0, 0, 0);&quot;&gt;s3_snapshot로 사용&lt;/span&gt;&lt;/p&gt;&lt;p style=&quot;margin-left: 2em;&quot;&gt;- bucket : S3 버킷이름&lt;/p&gt;&lt;p style=&quot;margin-left: 2em;&quot;&gt;- region : 리전이름&lt;/p&gt;&lt;p style=&quot;margin-left: 2em;&quot;&gt;- access_key : AWS 접속 가능한 키&lt;/p&gt;&lt;p style=&quot;margin-left: 2em;&quot;&gt;&lt;span style=&quot;background-color: rgb(255, 255, 255); color: rgb(0, 0, 0);&quot;&gt;-&amp;nbsp;&lt;/span&gt;&lt;span style=&quot;background-color: rgb(238, 238, 238);&quot;&gt;&lt;span style=&quot;background-color: rgb(255, 255, 255); color: rgb(0, 0, 0);&quot;&gt;secret_key &lt;/span&gt;&lt;span style=&quot;background-color: rgb(255, 255, 255); color: rgb(0, 0, 0);&quot;&gt;:&amp;nbsp;&lt;/span&gt;&lt;/span&gt;&lt;span style=&quot;background-color: rgb(255, 255, 255); color: rgb(0, 0, 0);&quot;&gt;&amp;nbsp;&lt;/span&gt;&lt;span style=&quot;background-color: rgb(255, 255, 255); color: rgb(0, 0, 0);&quot;&gt;AWS 접속 가능한 키&lt;/span&gt;&lt;/p&gt;&lt;p&gt;&lt;br /&gt;&lt;/p&gt;&lt;p&gt;&lt;br /&gt;&lt;/p&gt;&lt;p&gt;&lt;b&gt;4. S3 백업하기&lt;/b&gt;&lt;/p&gt;&lt;div class=&quot;txc-textbox&quot; style=&quot;border-style: solid; border-width: 1px; border-color: rgb(238, 238, 238); background-color: rgb(238, 238, 238); padding: 10px;&quot;&gt;&lt;p&gt;&lt;b&gt;&lt;/b&gt;curl --user ID:PW&amp;nbsp;--header &quot;content-type: application/JSON&quot;&amp;nbsp; -XPUT 'localhost:9200/_snapshot/s3_snapshot/bizrpt_20180424?pretty=true&amp;amp;wait_for_completion=true' -d '{&lt;/p&gt;&lt;p&gt;&amp;nbsp;&lt;span style=&quot;white-space: pre;&quot;&gt;	&lt;/span&gt;&quot;indices&quot;: &quot;bizrpt_auth,bizrpt_category,bizrpt_market,bizrpt_report&quot;,&lt;/p&gt;&lt;p&gt;&amp;nbsp;&lt;span style=&quot;white-space: pre;&quot;&gt;	&lt;/span&gt;&quot;ignore_unavailable&quot;: true,&lt;/p&gt;&lt;p&gt;&amp;nbsp;&lt;span style=&quot;white-space: pre;&quot;&gt;	&lt;/span&gt;&quot;include_global_state&quot;: false&lt;/p&gt;&lt;p&gt;}'&lt;/p&gt;&lt;/div&gt;&lt;p style=&quot;margin-left: 2em;&quot;&gt;&lt;span style=&quot;background-color: rgb(255, 255, 255); color: rgb(0, 0, 0);&quot;&gt;-&amp;nbsp;&lt;/span&gt;&lt;span style=&quot;background-color: rgb(255, 255, 255); color: rgb(0, 0, 0);&quot;&gt;localhost:9200/_snapshot/${name}/${backup_key} : name은 스냅샷 이름,&amp;nbsp;&lt;/span&gt;&lt;span style=&quot;background-color: rgb(255, 255, 255); color: rgb(0, 0, 0);&quot;&gt;backup_key는 복구할때 키기반으로 복구.&lt;/span&gt;&lt;/p&gt;&lt;p style=&quot;margin-left: 2em;&quot;&gt;&lt;span style=&quot;background-color: rgb(255, 255, 255); color: rgb(0, 0, 0);&quot;&gt;-&amp;nbsp;&lt;/span&gt;&lt;span style=&quot;background-color: rgb(255, 255, 255); color: rgb(0, 0, 0);&quot;&gt;indices : 백업 index 지정&lt;/span&gt;&lt;/p&gt;&lt;p&gt;&lt;br /&gt;&lt;/p&gt;&lt;p&gt;&lt;br /&gt;&lt;/p&gt;&lt;p&gt;&lt;b&gt;5. 백업 확인하기&lt;/b&gt;&lt;/p&gt;&lt;div class=&quot;txc-textbox&quot; style=&quot;border-style: solid; border-width: 1px; border-color: rgb(238, 238, 238); background-color: rgb(238, 238, 238); padding: 10px;&quot;&gt;&lt;p&gt;&lt;span style=&quot;background-color: rgb(234, 234, 234); color: rgb(0, 0, 0);&quot;&gt;# 백업 이름 리스트 확인&lt;/span&gt;&lt;br /&gt;&lt;/p&gt;&lt;p&gt;&lt;span style=&quot;background-color: rgb(234, 234, 234); color: rgb(0, 0, 0);&quot;&gt;curl --user&amp;nbsp;&lt;/span&gt;ID:PW&lt;span style=&quot;background-color: rgb(234, 234, 234);&quot;&gt;&amp;nbsp;&lt;/span&gt;&lt;span style=&quot;background-color: rgb(234, 234, 234);&quot;&gt;-XGET&lt;/span&gt;&lt;span style=&quot;background-color: rgb(234, 234, 234);&quot;&gt;&amp;nbsp;'http://localhost:9200/_snapshot?pretty'&lt;/span&gt;&lt;/p&gt;&lt;p&gt;&lt;span style=&quot;background-color: rgb(255, 255, 255);&quot;&gt;&lt;br /&gt;&lt;/span&gt;&lt;/p&gt;&lt;p&gt;&lt;span style=&quot;background-color: rgb(234, 234, 234); color: rgb(0, 0, 0);&quot;&gt;# 백업 키 리스트 확인&lt;/span&gt;&lt;/p&gt;&lt;p&gt;&lt;span style=&quot;background-color: rgb(234, 234, 234); color: rgb(0, 0, 0);&quot;&gt;curl --user&amp;nbsp;&lt;/span&gt;ID:PW&lt;span style=&quot;background-color: rgb(234, 234, 234);&quot;&gt;&amp;nbsp;-XGET 'http://localhost:9200/_snapshot/s3_snapshot/_all?pretty'&lt;/span&gt;&lt;/p&gt;&lt;/div&gt;&lt;p&gt;&lt;br /&gt;&lt;/p&gt;&lt;p&gt;&lt;br /&gt;&lt;/p&gt;&lt;p&gt;&lt;b&gt;6. 백업 삭제하기&lt;/b&gt;&lt;/p&gt;&lt;div class=&quot;txc-textbox&quot; style=&quot;border-style: solid; border-width: 1px; border-color: rgb(238, 238, 238); background-color: rgb(238, 238, 238); padding: 10px;&quot;&gt;&lt;p&gt;#백업 이름 삭제&lt;/p&gt;&lt;p&gt;curl --user ID:PW&amp;nbsp;-XDELETE 'http://localhost:9200/_snapshot/s3_snapshot'&lt;/p&gt;&lt;p&gt;&lt;br /&gt;&lt;/p&gt;&lt;p&gt;#백업 이름에대한 키 삭제&lt;/p&gt;&lt;p&gt;curl --user ID:PW&amp;nbsp;-XDELETE 'http://localhost:9200/_snapshot/s3_snapshot/bizrpt'&lt;/p&gt;&lt;/div&gt;&lt;p&gt;&lt;br /&gt;&lt;/p&gt;&lt;p&gt;&lt;br /&gt;&lt;/p&gt;&lt;p&gt;&lt;b&gt;7. 복구하기&lt;/b&gt;&lt;/p&gt;&lt;div class=&quot;txc-textbox&quot; style=&quot;border-style: solid; border-width: 1px; border-color: rgb(238, 238, 238); background-color: rgb(238, 238, 238); padding: 10px;&quot;&gt;&lt;p&gt;#전체 복구하기&lt;/p&gt;&lt;p&gt;&lt;b&gt;&lt;/b&gt;curl --user ID:PW&amp;nbsp;--header &quot;content-type: application/JSON&quot; -XPOST 'localhost:9200/_snapshot/s3_snapshot/bizrpt_20180424/_restore?wait_for_completion=true'&amp;nbsp;&lt;/p&gt;&lt;p&gt;&lt;br /&gt;&lt;/p&gt;&lt;p&gt;&lt;br /&gt;&lt;/p&gt;&lt;p&gt;#인덱스 지정 복구하기&lt;/p&gt;&lt;p&gt;&lt;b&gt;&lt;/b&gt;curl --user ID:PW&amp;nbsp;--header &quot;content-type: application/JSON&quot; -XPOST 'localhost:9200/_snapshot/s3_snapshot/bizrpt_20180424/_restore?wait_for_completion=true' -d '{&lt;/p&gt;&lt;p&gt;&amp;nbsp; &quot;indices&quot;: &quot;bizrpt_market,bizrpt_category,bizrpt_auth,bizrpt_report_v1&quot;,&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;&amp;nbsp;&lt;/p&gt;&lt;p&gt;&amp;nbsp; &quot;ignore_unavailable&quot; : &quot;true&quot;,&lt;/p&gt;&lt;p&gt;&amp;nbsp; &quot;include_global_state&quot; : false,&lt;/p&gt;&lt;p&gt;&amp;nbsp; &quot;rename_pattern&quot;: &quot;bizrpt_(.+)&quot;,&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;&lt;/p&gt;&lt;p&gt;&amp;nbsp; &quot;rename_replacement&quot;: &quot;restored_bizrpt_$1&quot;&amp;nbsp;&amp;nbsp;&lt;/p&gt;&lt;p&gt;}'&lt;/p&gt;&lt;p&gt;&lt;br /&gt;&lt;/p&gt;&lt;/div&gt;&lt;p style=&quot;margin-left: 2em;&quot;&gt;&lt;span style=&quot;background-color: rgb(255, 255, 255); color: rgb(0, 0, 0);&quot;&gt;-&amp;nbsp;&lt;/span&gt;&lt;span style=&quot;background-color: rgb(255, 255, 255); color: rgb(0, 0, 0);&quot;&gt;rename_pattern : 패턴을 지정하여&lt;/span&gt;&lt;/p&gt;&lt;p style=&quot;margin-left: 2em;&quot;&gt;&lt;span style=&quot;background-color: rgb(255, 255, 255); color: rgb(0, 0, 0);&quot;&gt;-&amp;nbsp;&lt;/span&gt;&lt;span style=&quot;background-color: rgb(255, 255, 255); color: rgb(0, 0, 0);&quot;&gt;rename_replacement : 이름을 바꿔서 복원할수 있다.&lt;/span&gt;&lt;/p&gt;&lt;p&gt;&lt;br /&gt;&lt;/p&gt;&lt;p&gt;&lt;br /&gt;&lt;/p&gt;&lt;p&gt;&lt;b&gt;8. 참고사항&lt;/b&gt;&lt;/p&gt;&lt;p style=&quot;margin-left: 2em;&quot;&gt;&lt;b&gt;- 엘라스틱서치의 백업은 증분 백업. ( 직접&amp;nbsp;서버 구축하여 이용시 s3에 백업하자&amp;nbsp;)&lt;/b&gt;&lt;/p&gt;&lt;p style=&quot;margin-left: 2em;&quot;&gt;&lt;b&gt;&lt;br /&gt;&lt;/b&gt;&lt;/p&gt;&lt;p&gt;&lt;br /&gt;&lt;/p&gt;&lt;p&gt;&lt;b&gt;9. 기타 추가자료&lt;/b&gt;&lt;/p&gt;&lt;p style=&quot;margin-left: 2em;&quot;&gt;&lt;b&gt;- 백업 shell 만들기 : 키는 겹치면 안됨으로 날짜+시간값을 얻어와서 키로 지정.&lt;/b&gt;&lt;/p&gt;&lt;div class=&quot;txc-textbox&quot; style=&quot;border-style: solid; border-width: 1px; border-color: rgb(238, 238, 238); background-color: rgb(238, 238, 238); padding: 10px;&quot;&gt;&lt;p style=&quot;margin-left: 2em;&quot;&gt;dd=`date '+%Y%m%d%H%M'`&lt;/p&gt;&lt;p style=&quot;margin-left: 2em;&quot;&gt;&lt;br /&gt;&lt;/p&gt;&lt;p style=&quot;margin-left: 2em;&quot;&gt;str=&quot;curl --user ID:PW&amp;nbsp;--header \&quot;content-type: application/JSON\&quot;&amp;nbsp; -XPUT 'localhost:9200/_snapshot/s3_snapshot/bizrpt_${dd}?pretty=true&amp;amp;wait_for_completion=true' -d '{&lt;/p&gt;&lt;p style=&quot;margin-left: 2em;&quot;&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; \&quot;indices\&quot;: \&quot;bizrpt_auth,bizrpt_category,bizrpt_market,bizrpt_report\&quot;,&lt;/p&gt;&lt;p style=&quot;margin-left: 2em;&quot;&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; \&quot;ignore_unavailable\&quot;: true,&lt;/p&gt;&lt;p style=&quot;margin-left: 2em;&quot;&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; \&quot;include_global_state\&quot;: false&lt;/p&gt;&lt;p style=&quot;margin-left: 2em;&quot;&gt;}'&quot;&lt;/p&gt;&lt;p style=&quot;margin-left: 2em;&quot;&gt;&lt;br /&gt;&lt;/p&gt;&lt;p style=&quot;margin-left: 2em;&quot;&gt;echo $str&lt;/p&gt;&lt;p style=&quot;margin-left: 2em;&quot;&gt;echo $str | sh&lt;/p&gt;&lt;/div&gt;&lt;p&gt;&lt;br /&gt;&lt;/p&gt;&lt;p style=&quot;margin-left: 2em;&quot;&gt;- 오래된 백업 키들 제거 shell :&amp;nbsp;&lt;span style=&quot;background-color: rgb(238, 238, 238);&quot;&gt;2 week ago 으로 지정&lt;/span&gt;&lt;/p&gt;&lt;div class=&quot;txc-textbox&quot; style=&quot;border-style: solid; border-width: 1px; border-color: rgb(238, 238, 238); background-color: rgb(238, 238, 238); padding: 10px;&quot;&gt;&lt;p&gt;dbs=`curl --user ID:PW&amp;nbsp;-XGET 'http://localhost:9200/_snapshot/s3_snapshot/_all?pretty' --stderr - |grep \&quot;snapshot\&quot; |sed -e 's/snapshot//g' | tr -d '&quot;, :'`&lt;/p&gt;&lt;p&gt;dd=`date '+%Y%m%d0000' -d '2 week ago'`&lt;/p&gt;&lt;p&gt;echo $dd&lt;/p&gt;&lt;p&gt;for db in $dbs; do&lt;/p&gt;&lt;p&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; echo run ${db}&lt;/p&gt;&lt;p&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; if [ $db \&amp;lt; $dd ]&lt;/p&gt;&lt;p&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; then&lt;/p&gt;&lt;p&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; str=&quot;curl --user ID:PW&amp;nbsp;-XDELETE 'http://localhost:9200/_snapshot/s3_snapshot/${db}'&quot;&lt;/p&gt;&lt;p&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; echo $str&lt;/p&gt;&lt;p&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; echo $str |sh&lt;/p&gt;&lt;p&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; fi&lt;/p&gt;&lt;p&gt;done&lt;/p&gt;&lt;/div&gt;&lt;p&gt;&lt;br /&gt;&lt;/p&gt;&lt;p&gt;&lt;br /&gt;&lt;/p&gt;&lt;p&gt;&lt;b&gt;10. 마치며..&lt;/b&gt;&lt;/p&gt;&lt;p style=&quot;margin-left: 2em;&quot;&gt;&lt;b&gt;- 저도 완벽히 알고한게 아니며 헤딩하면서 하고있습니다.&lt;/b&gt;&lt;/p&gt;&lt;p style=&quot;margin-left: 2em;&quot;&gt;&lt;b&gt;- 잘못된점이나 개선사항은 알려주시면 감사하겠습니다.&lt;/b&gt;&lt;/p&gt;</description>
      <category>backup</category>
      <category>ElasticSearch</category>
      <category>Restore</category>
      <category>엘라스틱서치 백업</category>
      <category>엘라스틱서치 복구</category>
      <author>장송송</author>
      <guid isPermaLink="true">https://jsongsong.tistory.com/37</guid>
      <comments>https://jsongsong.tistory.com/37#entry37comment</comments>
      <pubDate>Tue, 24 Apr 2018 14:40:33 +0900</pubDate>
    </item>
    <item>
      <title>elasticsearch mapping 변경</title>
      <link>https://jsongsong.tistory.com/34</link>
      <description>&lt;p style=&quot;line-height: 1.8;&quot;&gt;Elasticsearch mapping&amp;nbsp;변경하기&lt;/p&gt;&lt;p style=&quot;line-height: 1.8;&quot;&gt;&lt;br /&gt;&lt;/p&gt;&lt;p style=&quot;line-height: 1.8;&quot;&gt;0. 변경&lt;/p&gt;&lt;p style=&quot;margin-left: 2em; line-height: 1.8;&quot;&gt;- elasticsearch의 mapping은&amp;nbsp; 새로 추가하는 경우는 가능하지만 이미 사용하는걸 바꾸기는 어렵다!&lt;/p&gt;&lt;p style=&quot;margin-left: 4em; line-height: 1.8;&quot;&gt;- 어플리케이션단 중단없이 이용을 위해 _aliases 로 변경예정&lt;/p&gt;&lt;p style=&quot;margin-left: 2em; line-height: 1.8;&quot;&gt;&lt;br /&gt;&lt;/p&gt;&lt;p style=&quot;line-height: 1.8;&quot;&gt;&lt;b&gt;1) 단순 mapping 변경.. 항목추가정도&lt;/b&gt;&lt;/p&gt;&lt;p style=&quot;line-height: 1.8;&quot;&gt;&lt;/p&gt;&lt;table class=&quot;txc-table&quot; width=&quot;784&quot; cellspacing=&quot;0&quot; cellpadding=&quot;0&quot; border=&quot;0&quot; style=&quot;border:none;border-collapse:collapse;;font-family:&quot; 맑은=&quot;&quot; 고딕&quot;,=&quot;&quot; sans-serif;font-size:13px&quot;=&quot;&quot;&gt;&lt;tbody&gt;&lt;tr&gt;&lt;td style=&quot;width: 784px; height: 273px; border-width: 1px; border-style: solid; border-color: rgb(204, 204, 204);&quot;&gt;&lt;p style=&quot;line-height: 1.8;&quot;&gt;PUT bizrpt_report_v4/_mapping/doc&lt;/p&gt;&lt;p style=&quot;line-height: 1.8;&quot;&gt;{&lt;/p&gt;&lt;p style=&quot;line-height: 1.8;&quot;&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &quot;properties&quot;: {&lt;/p&gt;&lt;p style=&quot;line-height: 1.8;&quot;&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &quot;rpt_time&quot;: {&lt;/p&gt;&lt;p style=&quot;line-height: 1.8;&quot;&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &quot;type&quot;: &quot;text&quot;,&lt;/p&gt;&lt;p style=&quot;line-height: 1.8;&quot;&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &quot;fielddata&quot;: true,&lt;/p&gt;&lt;p style=&quot;line-height: 1.8;&quot;&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &quot;fields&quot;: {&lt;/p&gt;&lt;p style=&quot;line-height: 1.8;&quot;&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &quot;keyword&quot;: {&lt;/p&gt;&lt;p style=&quot;line-height: 1.8;&quot;&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &quot;type&quot;: &quot;keyword&quot;,&lt;/p&gt;&lt;p style=&quot;line-height: 1.8;&quot;&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &quot;ignore_above&quot;: 256&lt;/p&gt;&lt;p style=&quot;line-height: 1.8;&quot;&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; }&lt;/p&gt;&lt;p style=&quot;line-height: 1.8;&quot;&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; }&lt;/p&gt;&lt;p style=&quot;line-height: 1.8;&quot;&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; }&lt;/p&gt;&lt;p style=&quot;line-height: 1.8;&quot;&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; }&lt;/p&gt;&lt;p style=&quot;line-height: 1.8;&quot;&gt;}&amp;nbsp;&lt;/p&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;&lt;/table&gt;&lt;p&gt;&lt;br /&gt;&lt;/p&gt;&lt;p&gt;&lt;br /&gt;&lt;/p&gt;&lt;p&gt;&lt;b&gt;2) 변경이 클때&lt;/b&gt;&lt;/p&gt;&lt;p&gt;1. 변경전 상황&lt;/p&gt;&lt;p&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp;- elasticsearch 6.1 버전 이용중!&lt;/p&gt;&lt;p style=&quot;margin-left: 2em;&quot;&gt;- aliase INDEX : &lt;b&gt;bizrpt_report&lt;/b&gt;,&amp;nbsp; &amp;nbsp;실제 INDEX : &lt;b&gt;bizrpt_report_v4&lt;/b&gt;&lt;/p&gt;&lt;p style=&quot;margin-left: 4em;&quot;&gt;&lt;b&gt;- 어플리케이션단은 bizrpt_report를 index로 이용하여 조회&amp;nbsp;&lt;/b&gt;하지만 실제는 bizrpt_report_v4임.&lt;/p&gt;&lt;p style=&quot;margin-left: 4em;&quot;&gt;&lt;br /&gt;&lt;/p&gt;&lt;p style=&quot;margin-left: 2em;&quot;&gt;-&amp;nbsp;&lt;b&gt;bizrpt_report_v5를 새로만들어 매핑변경 예정.&lt;/b&gt;&lt;/p&gt;&lt;p&gt;&lt;br /&gt;&lt;/p&gt;&lt;p&gt;&lt;br /&gt;&lt;/p&gt;&lt;p&gt;2. 기존 매핑 가져오기&lt;/p&gt;&lt;table class=&quot;txc-table&quot; width=&quot;784&quot; cellspacing=&quot;0&quot; cellpadding=&quot;0&quot; border=&quot;0&quot; style=&quot;border:none;border-collapse:collapse;;font-family:&quot; 맑은=&quot;&quot; 고딕&quot;,=&quot;&quot; sans-serif;font-size:13px&quot;=&quot;&quot;&gt;&lt;tbody&gt;&lt;tr&gt;&lt;td style=&quot;width:784;height:24;border-bottom:1px solid #ccc;border-right:1px solid #ccc;border-top:1px solid #ccc;border-left:1px solid #ccc;;&quot;&gt;&lt;p style=&quot;line-height: 1.8;&quot;&gt;GET&amp;nbsp;bizrpt_report_v4/_mapping&lt;/p&gt;&lt;p style=&quot;line-height: 1.8;&quot;&gt;&lt;br /&gt;&lt;/p&gt;&lt;p style=&quot;line-height: 1.8;&quot;&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;RESULT =&amp;gt;&amp;nbsp;&lt;/p&gt;&lt;p style=&quot;line-height: 1.8;&quot;&gt;{&lt;/p&gt;&lt;p style=&quot;line-height: 1.8;&quot;&gt;&amp;nbsp; &amp;nbsp; &quot;bizrpt_report_v4&quot;:{&amp;nbsp; &amp;nbsp;//bizrpt_report_v4는 INDEX 이름&lt;/p&gt;&lt;p style=&quot;line-height: 1.8;&quot;&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;&quot;mapping&quot;:{&lt;/p&gt;&lt;p style=&quot;line-height: 1.8;&quot;&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &quot;doc&quot;:{&amp;nbsp; // doc은 타입 이름&lt;/p&gt;&lt;p style=&quot;line-height: 1.8;&quot;&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;&quot;properties&quot; : { .... }&lt;/p&gt;&lt;p style=&quot;line-height: 1.8;&quot;&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; }&lt;/p&gt;&lt;p style=&quot;line-height: 1.8;&quot;&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; }&lt;/p&gt;&lt;p style=&quot;line-height: 1.8;&quot;&gt;&amp;nbsp; &amp;nbsp; }&lt;/p&gt;&lt;p style=&quot;line-height: 1.8;&quot;&gt;}&lt;/p&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;&lt;/table&gt;&lt;p style=&quot;margin-left: 6em;&quot;&gt;&lt;br /&gt;&lt;/p&gt;&lt;p&gt;2. 위에 RESULT를 변경하여 새로운 매핑정보로&amp;nbsp;인덱스를 등록&lt;/p&gt;&lt;table class=&quot;txc-table&quot; width=&quot;784&quot; cellspacing=&quot;0&quot; cellpadding=&quot;0&quot; border=&quot;0&quot; style=&quot;border:none;border-collapse:collapse;;font-family:&quot; 맑은=&quot;&quot; 고딕&quot;,=&quot;&quot; sans-serif;font-size:13px&quot;=&quot;&quot;&gt;&lt;tbody&gt;&lt;/tbody&gt;&lt;/table&gt;&lt;table class=&quot;txc-table&quot; width=&quot;784&quot; cellspacing=&quot;0&quot; cellpadding=&quot;0&quot; border=&quot;0&quot; style=&quot;border:none;border-collapse:collapse;;font-family:&quot; 맑은=&quot;&quot; 고딕&quot;,=&quot;&quot; sans-serif;font-size:13px&quot;=&quot;&quot;&gt;&lt;tbody&gt;&lt;tr&gt;&lt;td style=&quot;width:784;height:24;border-bottom:1px solid #ccc;border-right:1px solid #ccc;border-top:1px solid #ccc;border-left:1px solid #ccc;;&quot;&gt;&lt;p style=&quot;line-height: 1.8;&quot;&gt;PUT bizrpt_report_v5&amp;nbsp;&lt;/p&gt;&lt;p style=&quot;line-height: 1.8;&quot;&gt;파라미터 =&amp;gt; {&lt;/p&gt;&lt;p style=&quot;line-height: 1.8;&quot;&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;&quot;mapping&quot;:{&lt;/p&gt;&lt;p style=&quot;line-height: 1.8;&quot;&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &quot;doc&quot;:{&amp;nbsp; // doc은 타입 이름&lt;/p&gt;&lt;p style=&quot;line-height: 1.8;&quot;&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;&quot;properties&quot; : { 새로운 매핑정보&amp;nbsp;}&lt;/p&gt;&lt;p style=&quot;line-height: 1.8;&quot;&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; }&lt;/p&gt;&lt;p style=&quot;line-height: 1.8;&quot;&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; }&lt;/p&gt;&lt;p style=&quot;line-height: 1.8;&quot;&gt;}&lt;/p&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;&lt;/table&gt;&lt;p&gt;&lt;br /&gt;&lt;/p&gt;&lt;p&gt;3. 데이터 넣어주기&lt;/p&gt;&lt;p style=&quot;margin-left: 2em;&quot;&gt;- 현재 bizrpt_report_v4 Index에 90만개 데이터가 있었는데 이용에 불편없이 복사됐으며 걸린시간은 5분 미만.&lt;/p&gt;&lt;table class=&quot;txc-table&quot; width=&quot;784&quot; cellspacing=&quot;0&quot; cellpadding=&quot;0&quot; border=&quot;0&quot; style=&quot;border:none;border-collapse:collapse;;font-family:&quot; 맑은=&quot;&quot; 고딕&quot;,=&quot;&quot; sans-serif;font-size:13px&quot;=&quot;&quot;&gt;&lt;tbody&gt;&lt;tr&gt;&lt;td style=&quot;width:784;height:24;border-bottom:1px solid #ccc;border-right:1px solid #ccc;border-top:1px solid #ccc;border-left:1px solid #ccc;;&quot;&gt;&lt;p style=&quot;line-height: 1.8;&quot;&gt;POST _reindex&lt;/p&gt;&lt;p style=&quot;line-height: 1.8;&quot;&gt;파라미터 =&amp;gt; {&lt;/p&gt;&lt;p style=&quot;line-height: 1.8;&quot;&gt;&amp;nbsp; &quot;size&quot;: 1000000, //갯수&lt;/p&gt;&lt;p style=&quot;line-height: 1.8;&quot;&gt;&amp;nbsp; &quot;source&quot;: { //기존&lt;/p&gt;&lt;p style=&quot;line-height: 1.8;&quot;&gt;&amp;nbsp; &amp;nbsp; &quot;index&quot;: &quot;bizrpt_report_v4&quot;,&lt;/p&gt;&lt;p style=&quot;line-height: 1.8;&quot;&gt;&amp;nbsp; },&lt;/p&gt;&lt;p style=&quot;line-height: 1.8;&quot;&gt;&amp;nbsp; &quot;dest&quot;: {&amp;nbsp; //새로만든곳&lt;/p&gt;&lt;p style=&quot;line-height: 1.8;&quot;&gt;&amp;nbsp; &amp;nbsp; &quot;index&quot;: &quot;bizrpt_report_v5&quot;&lt;/p&gt;&lt;p style=&quot;line-height: 1.8;&quot;&gt;&amp;nbsp; }&lt;/p&gt;&lt;p style=&quot;line-height: 1.8;&quot;&gt;}&lt;/p&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;&lt;/table&gt;&lt;p&gt;&lt;br /&gt;&lt;/p&gt;&lt;p&gt;4. alias 변경하기&lt;/p&gt;&lt;table class=&quot;txc-table&quot; width=&quot;784&quot; cellspacing=&quot;0&quot; cellpadding=&quot;0&quot; border=&quot;0&quot; style=&quot;border:none;border-collapse:collapse;;font-family:&quot; 맑은=&quot;&quot; 고딕&quot;,=&quot;&quot; sans-serif;font-size:13px&quot;=&quot;&quot;&gt;&lt;tbody&gt;&lt;tr&gt;&lt;td style=&quot;width: 784px; height: 235px; border-width: 1px; border-style: solid; border-color: rgb(204, 204, 204);&quot;&gt;&lt;p style=&quot;line-height: 1.8;&quot;&gt; POST /_aliases&lt;/p&gt;&lt;p style=&quot;line-height: 1.8;&quot;&gt;{&lt;/p&gt;&lt;p style=&quot;line-height: 1.8;&quot;&gt;&amp;nbsp; &amp;nbsp; &quot;actions&quot;: [&lt;/p&gt;&lt;p style=&quot;line-height: 1.8;&quot;&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; { &quot;remove&quot;: {&lt;/p&gt;&lt;p style=&quot;line-height: 1.8;&quot;&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &quot;alias&quot;: &quot;bizrpt_report&quot;,&lt;/p&gt;&lt;p style=&quot;line-height: 1.8;&quot;&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &quot;index&quot;: &quot;bizrpt_report_v4&quot;&lt;/p&gt;&lt;p style=&quot;line-height: 1.8;&quot;&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; }},&lt;/p&gt;&lt;p style=&quot;line-height: 1.8;&quot;&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; { &quot;add&quot;: {&lt;/p&gt;&lt;p style=&quot;line-height: 1.8;&quot;&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &quot;alias&quot;: &quot;bizrpt_report&quot;,&lt;/p&gt;&lt;p style=&quot;line-height: 1.8;&quot;&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &quot;index&quot;: &quot;bizrpt_report_v5&quot;&lt;/p&gt;&lt;p style=&quot;line-height: 1.8;&quot;&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; }}&lt;/p&gt;&lt;p style=&quot;line-height: 1.8;&quot;&gt;&amp;nbsp; &amp;nbsp; ]&lt;/p&gt;&lt;p style=&quot;line-height: 1.8;&quot;&gt;}&lt;/p&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;&lt;/table&gt;&lt;p&gt;&lt;br /&gt;&lt;/p&gt;&lt;p&gt;5. 확인하기&lt;/p&gt;&lt;p&gt;&lt;br /&gt;&lt;/p&gt;&lt;p&gt;&lt;br /&gt;&lt;/p&gt;&lt;p&gt;&lt;br /&gt;&lt;/p&gt;&lt;p&gt;&lt;br /&gt;&lt;/p&gt;&lt;p&gt;&lt;br /&gt;&lt;/p&gt;</description>
      <category>ElasticSearch</category>
      <category>ElasticSearch</category>
      <category>elasticsearch mapping</category>
      <category>elasticsearch mapping change</category>
      <author>장송송</author>
      <guid isPermaLink="true">https://jsongsong.tistory.com/34</guid>
      <comments>https://jsongsong.tistory.com/34#entry34comment</comments>
      <pubDate>Fri, 13 Apr 2018 10:10:21 +0900</pubDate>
    </item>
    <item>
      <title>git vs svn 선택의 문제</title>
      <link>https://jsongsong.tistory.com/31</link>
      <description>&lt;p&gt;&lt;b&gt;0. 이글은 개인적인 견해임으로 보실때 참고 바랍니다.&lt;/b&gt;&lt;/p&gt;&lt;p&gt;&lt;b&gt;&lt;br /&gt;&lt;/b&gt;&lt;/p&gt;&lt;p&gt;&lt;b&gt;1. SVN vs Git&lt;/b&gt;&lt;/p&gt;&lt;p style=&quot;margin-left: 2em;&quot;&gt;&lt;b&gt;- 엄마가 좋아 아빠가 좋아?&lt;/b&gt;&lt;/p&gt;&lt;p style=&quot;margin-left: 4em;&quot;&gt;- 엄마는 보수적이며 중앙집중식이야 - SVN&lt;/p&gt;&lt;p style=&quot;margin-left: 4em;&quot;&gt;- 아빠는 개방적이며 분산처리식이야 - Git&lt;/p&gt;&lt;p style=&quot;margin-left: 2em;&quot;&gt;&lt;br /&gt;&lt;/p&gt;&lt;p style=&quot;margin-left: 2em;&quot;&gt;&lt;b&gt;- 그럼 왜 Git ?&lt;/b&gt;&lt;/p&gt;&lt;p style=&quot;margin-left: 4em;&quot;&gt;- 버전관리는 기본&lt;/p&gt;&lt;p style=&quot;margin-left: 4em;&quot;&gt;-&amp;nbsp;&lt;b&gt;버전관리 시스템 유랑기&lt;/b&gt;&lt;/p&gt;&lt;p style=&quot;margin-left: 6em;&quot;&gt;-&amp;nbsp;&lt;b&gt;&lt;a href=&quot;https://gist.github.com/benelog/2922437&quot; target=&quot;_blank&quot; class=&quot;tx-link&quot;&gt;https://gist.github.com/benelog/2922437&lt;/a&gt;&lt;/b&gt;&lt;/p&gt;&lt;p style=&quot;margin-left: 4em;&quot;&gt;&lt;b&gt;- 코드리뷰할 도구들과 연동 (GIthub, Bitbucket)&lt;/b&gt;&lt;/p&gt;&lt;p style=&quot;margin-left: 4em;&quot;&gt;&lt;b&gt;- 브런치 : 운영서버와 상관없이 개발할수 있는 환경이 돼야함&amp;nbsp;&lt;/b&gt;&lt;/p&gt;&lt;p style=&quot;margin-left: 6em;&quot;&gt;&lt;b&gt;- &lt;/b&gt;(SVN도 기능이 있지만 약함)&lt;/p&gt;&lt;p style=&quot;margin-left: 6em;&quot;&gt;- 운영서버용 master 브런치&lt;/p&gt;&lt;p style=&quot;margin-left: 6em;&quot;&gt;- 개발서버용 develop 브런치&amp;nbsp;&lt;/p&gt;&lt;p style=&quot;margin-left: 6em;&quot;&gt;- 기타 기능 개발용&amp;nbsp;XXX 브런치&lt;/p&gt;&lt;p&gt;&lt;b&gt;&lt;br /&gt;&lt;/b&gt;&lt;/p&gt;&lt;p&gt;&lt;b&gt;&lt;br /&gt;&lt;/b&gt;&lt;/p&gt;&lt;p&gt;&lt;b&gt;2. Git 이란 무엇인가?&lt;/b&gt;&lt;/p&gt;&lt;p style=&quot;margin-left: 2em;&quot;&gt;&lt;b&gt;- 아래 블로그로 대체&lt;/b&gt;&lt;/p&gt;&lt;p style=&quot;margin-left: 2em;&quot;&gt;&lt;b&gt;-&amp;nbsp;&lt;a href=&quot;https://tuwlab.com/ece/22202&quot; target=&quot;_blank&quot; class=&quot;tx-link&quot;&gt;https://tuwlab.com/ece/22202&lt;/a&gt;&lt;/b&gt;&lt;/p&gt;&lt;p style=&quot;margin-left: 2em;&quot;&gt;&lt;b&gt;-&amp;nbsp;&lt;a href=&quot;https://www.slideshare.net/einsub/svn-git-17386752&quot; target=&quot;_blank&quot; class=&quot;tx-link&quot;&gt;https://www.slideshare.net/einsub/svn-git-17386752&lt;/a&gt;&lt;/b&gt;&lt;/p&gt;&lt;p style=&quot;margin-left: 2em;&quot;&gt;&lt;br /&gt;&lt;/p&gt;&lt;p style=&quot;margin-left: 2em;&quot;&gt;&lt;br /&gt;&lt;/p&gt;&lt;p style=&quot;margin-left: 2em;&quot;&gt;&lt;br /&gt;&lt;/p&gt;&lt;p style=&quot;margin-left: 2em;&quot;&gt;&lt;br /&gt;&lt;/p&gt;&lt;p&gt;&lt;b&gt;3. 코드리뷰 도구의 사용&lt;/b&gt;&lt;/p&gt;&lt;p style=&quot;margin-left: 2em;&quot;&gt;&lt;b&gt;- Bitbucket&lt;/b&gt;&lt;/p&gt;&lt;p style=&quot;margin-left: 2em; text-align: center; clear: none; float: none;&quot;&gt;&lt;span class=&quot;imageblock&quot; style=&quot;display: inline-block; width: 820px;  height: auto; max-width: 100%;&quot;&gt;&lt;img src=&quot;https://t1.daumcdn.net/cfile/tistory/99E5084B5A41E4242A&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Ft1.daumcdn.net%2Fcfile%2Ftistory%2F99E5084B5A41E4242A&quot; width=&quot;820&quot; height=&quot;454&quot; filename=&quot;제목 없음.png&quot; filemime=&quot;image/png&quot; style=&quot;&quot;/&gt;&lt;/span&gt;&lt;/p&gt;&lt;p style=&quot;margin-left: 2em;&quot;&gt;- Reviewers : 리뷰줄 사용자를 지정&lt;br /&gt;&lt;/p&gt;&lt;p style=&quot;margin-left: 2em;&quot;&gt;- File changed : 변경된 파일리스트를 확인&lt;/p&gt;&lt;p style=&quot;margin-left: 2em;&quot;&gt;- 파일들의 변경된 부분을 확인&lt;/p&gt;&lt;p style=&quot;margin-left: 2em;&quot;&gt;&lt;br /&gt;&lt;/p&gt;&lt;p style=&quot;margin-left: 2em;&quot;&gt;&lt;br /&gt;&lt;/p&gt;&lt;p style=&quot;margin-left: 2em;&quot;&gt;&lt;br /&gt;&lt;/p&gt;&lt;p style=&quot;margin-left: 2em;&quot;&gt;&lt;br /&gt;&lt;/p&gt;&lt;p&gt;&lt;b&gt;4. Webhook을 통한 기타기능의 연동&lt;/b&gt;&lt;/p&gt;&lt;p style=&quot;margin-left: 2em;&quot;&gt;&lt;b&gt;- Bitbucket -&amp;gt; WebHook 이용&lt;/b&gt;&lt;/p&gt;&lt;p style=&quot;margin-left: 2em;&quot;&gt;&lt;b&gt;- SVN -&amp;gt; Hook -&amp;gt; post, pre commit 이용&lt;/b&gt;&lt;/p&gt;&lt;p style=&quot;margin-left: 2em;&quot;&gt;&lt;br /&gt;&lt;/p&gt;&lt;p style=&quot;margin-left: 2em;&quot;&gt;&lt;b&gt;- hook event를 발생하여 Slack 및 Jira 등의 프로그램 연동하여 이용&lt;/b&gt;&lt;/p&gt;&lt;p style=&quot;margin-left: 2em; text-align: center; clear: none; float: none;&quot;&gt;&lt;span class=&quot;imageblock&quot; style=&quot;display: inline-block; width: 820px;  height: auto; max-width: 100%;&quot;&gt;&lt;img src=&quot;https://t1.daumcdn.net/cfile/tistory/99FAD74C5A41E7991E&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Ft1.daumcdn.net%2Fcfile%2Ftistory%2F99FAD74C5A41E7991E&quot; width=&quot;820&quot; height=&quot;732&quot; filename=&quot;제목 없음1.png&quot; filemime=&quot;image/png&quot; style=&quot;&quot;/&gt;&lt;/span&gt;&lt;/p&gt;&lt;p style=&quot;margin-left: 2em;&quot;&gt;&lt;b&gt;- Brunch에 따라 Color 구분 : 운영서버 개발서버 구분&lt;/b&gt;&lt;br /&gt;&lt;/p&gt;&lt;p style=&quot;margin-left: 2em;&quot;&gt;&lt;br /&gt;&lt;/p&gt;&lt;p style=&quot;margin-left: 2em;&quot;&gt;&lt;b&gt;- JIRA issue 자동업데이트&lt;/b&gt;&lt;/p&gt;&lt;p style=&quot;margin-left: 2em; text-align: center; clear: none; float: none;&quot;&gt;&lt;span class=&quot;imageblock&quot; style=&quot;display: inline-block; width: 820px;  height: auto; max-width: 100%;&quot;&gt;&lt;img src=&quot;https://t1.daumcdn.net/cfile/tistory/99956D375A41E90719&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Ft1.daumcdn.net%2Fcfile%2Ftistory%2F99956D375A41E90719&quot; width=&quot;820&quot; height=&quot;585&quot; filename=&quot;제목 없음3.png&quot; filemime=&quot;image/png&quot; style=&quot;&quot;/&gt;&lt;/span&gt;&lt;/p&gt;&lt;p style=&quot;margin-left: 2em;&quot;&gt;&lt;br /&gt;&lt;/p&gt;&lt;p style=&quot;margin-left: 2em;&quot;&gt;&lt;br /&gt;&lt;/p&gt;&lt;p&gt;&lt;b&gt;5. 느낀점&lt;/b&gt;&lt;/p&gt;&lt;p style=&quot;margin-left: 2em;&quot;&gt;&lt;b&gt;&lt;span style=&quot;color: rgb(0, 0, 0);&quot;&gt;-&amp;nbsp;&lt;/span&gt;&lt;span style=&quot;color: rgb(0, 0, 0); font-family: 돋움, Dotum, AppleGothic, sans-serif; font-size: 12px; background-color: rgb(254, 254, 254);&quot;&gt;장기는&amp;nbsp;&lt;/span&gt;&lt;span class=&quot;re_green&quot; style=&quot;color: rgb(0, 0, 0); font-family: 돋움, Dotum, AppleGothic, sans-serif; font-size: 12px; background-color: rgb(254, 254, 254);&quot;&gt;직접 둘 때보다&lt;/span&gt;&lt;span style=&quot;color: rgb(0, 0, 0); font-family: 돋움, Dotum, AppleGothic, sans-serif; font-size: 12px; background-color: rgb(254, 254, 254);&quot;&gt;&amp;nbsp;훈수&amp;nbsp;&lt;/span&gt;&lt;span class=&quot;re_green&quot; style=&quot;color: rgb(0, 0, 0); font-family: 돋움, Dotum, AppleGothic, sans-serif; font-size: 12px; background-color: rgb(254, 254, 254);&quot;&gt;둘 때가&lt;/span&gt;&lt;span style=&quot;color: rgb(68, 68, 68); font-family: 돋움, Dotum, AppleGothic, sans-serif; font-size: 12px; background-color: rgb(254, 254, 254);&quot;&gt;&lt;/span&gt;&lt;span class=&quot;re_green&quot; style=&quot;color: rgb(0, 0, 0); font-family: 돋움, Dotum, AppleGothic, sans-serif; font-size: 12px; background-color: rgb(254, 254, 254);&quot;&gt;잘 된다.&lt;/span&gt;&lt;/b&gt;&lt;/p&gt;&lt;p style=&quot;margin-left: 4em;&quot;&gt;&lt;span class=&quot;re_green&quot; style=&quot;color: rgb(0, 0, 0); font-family: 돋움, Dotum, AppleGothic, sans-serif; font-size: 12px; background-color: rgb(254, 254, 254);&quot;&gt;&lt;b&gt;- 자신이 잘하겠지만 코드리뷰를 하다보면 더 발전된 자신을 보게될것이다.&lt;/b&gt;&lt;/span&gt;&lt;/p&gt;&lt;p style=&quot;margin-left: 4em;&quot;&gt;&lt;br /&gt;&lt;/p&gt;&lt;p style=&quot;margin-left: 2em;&quot;&gt;&lt;span class=&quot;re_green&quot; style=&quot;color: rgb(0, 0, 0); font-family: 돋움, Dotum, AppleGothic, sans-serif; font-size: 12px; background-color: rgb(254, 254, 254);&quot;&gt;&lt;br /&gt;&lt;/span&gt;&lt;/p&gt;</description>
      <author>장송송</author>
      <guid isPermaLink="true">https://jsongsong.tistory.com/31</guid>
      <comments>https://jsongsong.tistory.com/31#entry31comment</comments>
      <pubDate>Tue, 26 Dec 2017 15:39:03 +0900</pubDate>
    </item>
    <item>
      <title>[NODEJS] EUC-KR URL 인코딩 만들기</title>
      <link>https://jsongsong.tistory.com/30</link>
      <description>&lt;p&gt;request 사이트의 인코딩이 euc-kr일경우 nodejs의 &amp;nbsp;utf8에서 만들경우 사용.&lt;/p&gt;&lt;p&gt;&lt;br /&gt;&lt;/p&gt;&lt;p&gt;&lt;br /&gt;&lt;/p&gt;&lt;p&gt;var iconv = require('iconv-lite');&lt;/p&gt;&lt;p&gt;var strUtf8Query = decodeURIComponent(req.path);&lt;/p&gt;&lt;p&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; var buf = iconv.encode(strUtf8Query, &quot;euc-kr&quot;);&lt;/p&gt;&lt;p&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; var encodeStr = '';&lt;/p&gt;&lt;p&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; for (var i = 0; i &amp;lt; buf.length; i++) {&lt;/p&gt;&lt;p&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; encodeStr += '%' + buf[i].toString('16');&lt;/p&gt;&lt;p&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; }&lt;/p&gt;&lt;p&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; encodeStr = encodeStr.toUpperCase();&lt;/p&gt;</description>
      <author>장송송</author>
      <guid isPermaLink="true">https://jsongsong.tistory.com/30</guid>
      <comments>https://jsongsong.tistory.com/30#entry30comment</comments>
      <pubDate>Tue, 19 Dec 2017 14:58:50 +0900</pubDate>
    </item>
  </channel>
</rss>