<?xml version="1.0" encoding="UTF-8"?>
<rss version="2.0">
  <channel>
    <title>모에모에 코딩</title>
    <link>https://stories2.tistory.com/</link>
    <description></description>
    <language>ko</language>
    <pubDate>Fri, 15 May 2026 03:13:30 +0900</pubDate>
    <generator>TISTORY</generator>
    <ttl>100</ttl>
    <managingEditor>hazimenya</managingEditor>
    <image>
      <title>모에모에 코딩</title>
      <url>https://tistory1.daumcdn.net/tistory/1679360/attach/0d4cbc2d9d854eeb80222259e6ab5a9c</url>
      <link>https://stories2.tistory.com</link>
    </image>
    <item>
      <title>그림 취미 5년차</title>
      <link>https://stories2.tistory.com/entry/%EA%B7%B8%EB%A6%BC-%EC%B7%A8%EB%AF%B8-5%EB%85%84%EC%B0%A8</link>
      <description>&lt;p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-origin-width=&quot;2480&quot; data-origin-height=&quot;3508&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/dIqt3x/btrvLAv3jwX/nUqfJQDuKrzdmDOnuiTVS1/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/dIqt3x/btrvLAv3jwX/nUqfJQDuKrzdmDOnuiTVS1/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/dIqt3x/btrvLAv3jwX/nUqfJQDuKrzdmDOnuiTVS1/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FdIqt3x%2FbtrvLAv3jwX%2FnUqfJQDuKrzdmDOnuiTVS1%2Fimg.png&quot; onerror=&quot;this.onerror=null; this.src='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png'; this.srcset='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png';&quot; loading=&quot;lazy&quot; width=&quot;530&quot; height=&quot;750&quot; data-origin-width=&quot;2480&quot; data-origin-height=&quot;3508&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;최근에 그린 블루아카이브의 이오리 그림, 무려 인스타에서 18좋아요를 받아 매우 기쁜 상태 ^^&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;a href=&quot;https://www.instagram.com/reel/CaZuFRQDzh0/?utm_medium=copy_link&quot;&gt;https://www.instagram.com/reel/CaZuFRQDzh0/?utm_medium=copy_link&lt;/a&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;색칠은 잘 안하고 선화 정도로만 그리고 있지만 옛날의 그림보단 정말 많이 변했다고 스스로 볼때도 느껴진다&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;이런 변화 때문에 요즘은 아는 사람들에게 그림 그린다고 자랑스럽게 말 할수도 있게 되었고 개발자인데 그림을 그리는게 평범하진 않으니 신기하게 봐주는 분들도 종종 있었다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-filename=&quot;randomPose3-min.GIF&quot; data-origin-width=&quot;1000&quot; data-origin-height=&quot;1414&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/VY94m/btrvJTpPmnj/x33LF8RlRTUzfiBAZehHl0/img.gif&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/VY94m/btrvJTpPmnj/x33LF8RlRTUzfiBAZehHl0/img.gif&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/VY94m/btrvJTpPmnj/x33LF8RlRTUzfiBAZehHl0/img.gif&quot; srcset=&quot;https://blog.kakaocdn.net/dn/VY94m/btrvJTpPmnj/x33LF8RlRTUzfiBAZehHl0/img.gif&quot; onerror=&quot;this.onerror=null; this.src='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png'; this.srcset='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png';&quot; loading=&quot;lazy&quot; width=&quot;516&quot; height=&quot;730&quot; data-filename=&quot;randomPose3-min.GIF&quot; data-origin-width=&quot;1000&quot; data-origin-height=&quot;1414&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;때론 Live 2D 를 써가며 단순 멈춰있는 그림이 아닌 파츠별로 움직이고 눈도 깜빡이게 만들어 보기도 했고&lt;/p&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-origin-width=&quot;800&quot; data-origin-height=&quot;422&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/cM6EtO/btrvJTJ6vF8/z7ocVVnaR6k4ggnbn9Ir31/img.gif&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/cM6EtO/btrvJTJ6vF8/z7ocVVnaR6k4ggnbn9Ir31/img.gif&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/cM6EtO/btrvJTJ6vF8/z7ocVVnaR6k4ggnbn9Ir31/img.gif&quot; srcset=&quot;https://blog.kakaocdn.net/dn/cM6EtO/btrvJTJ6vF8/z7ocVVnaR6k4ggnbn9Ir31/img.gif&quot; onerror=&quot;this.onerror=null; this.src='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png'; this.srcset='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png';&quot; loading=&quot;lazy&quot; width=&quot;800&quot; height=&quot;422&quot; data-origin-width=&quot;800&quot; data-origin-height=&quot;422&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;프로그래밍을 어느정도 할 줄 알고 있었으니 나름? 버튜버도 만들어 보기도 했다.&lt;/p&gt;
&lt;figure id=&quot;og_1646990742692&quot; contenteditable=&quot;false&quot; data-ke-type=&quot;opengraph&quot; data-ke-align=&quot;alignCenter&quot; data-og-type=&quot;website&quot; data-og-title=&quot;Vtuber&quot; data-og-description=&quot;Yea! Fucking vtuber&quot; data-og-host=&quot;hazimenya.gapmoe.net&quot; data-og-source-url=&quot;https://hazimenya.gapmoe.net/Demo/&quot; data-og-url=&quot;https://hazimenya.gapmoe.net&quot; data-og-image=&quot;&quot;&gt;&lt;a href=&quot;https://hazimenya.gapmoe.net/Demo/&quot; target=&quot;_blank&quot; rel=&quot;noopener&quot; data-source-url=&quot;https://hazimenya.gapmoe.net/Demo/&quot;&gt;
&lt;div class=&quot;og-image&quot; style=&quot;background-image: url();&quot;&gt;&amp;nbsp;&lt;/div&gt;
&lt;div class=&quot;og-text&quot;&gt;
&lt;p class=&quot;og-title&quot; data-ke-size=&quot;size16&quot;&gt;Vtuber&lt;/p&gt;
&lt;p class=&quot;og-desc&quot; data-ke-size=&quot;size16&quot;&gt;Yea! Fucking vtuber&lt;/p&gt;
&lt;p class=&quot;og-host&quot; data-ke-size=&quot;size16&quot;&gt;hazimenya.gapmoe.net&lt;/p&gt;
&lt;/div&gt;
&lt;/a&gt;&lt;/figure&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;위 링크에서 직접 체험 해볼 수 있음&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;h2 data-ke-size=&quot;size26&quot;&gt;0년차&lt;/h2&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;물론 처음부터 잘 했던건 아니었다. 정말 처음엔 모두가 말렸고 못그린다는 말을 많이 들었다. 실제로 정말 못그리긴 했다&lt;/p&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-filename=&quot;hehe.png&quot; data-origin-width=&quot;1496&quot; data-origin-height=&quot;1276&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/dNOvP5/btrvKJtu38V/52CMrr2KP8mrNQaRIlBgl0/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/dNOvP5/btrvKJtu38V/52CMrr2KP8mrNQaRIlBgl0/img.png&quot; data-alt=&quot;칸코레 시마카제&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/dNOvP5/btrvKJtu38V/52CMrr2KP8mrNQaRIlBgl0/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FdNOvP5%2FbtrvKJtu38V%2F52CMrr2KP8mrNQaRIlBgl0%2Fimg.png&quot; onerror=&quot;this.onerror=null; this.src='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png'; this.srcset='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png';&quot; loading=&quot;lazy&quot; width=&quot;542&quot; height=&quot;462&quot; data-filename=&quot;hehe.png&quot; data-origin-width=&quot;1496&quot; data-origin-height=&quot;1276&quot;/&gt;&lt;/span&gt;&lt;figcaption&gt;칸코레 시마카제&lt;/figcaption&gt;
&lt;/figure&gt;
&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;지금봐도 외계인이다. 우째 얼굴 비율도 그렇고 몸 상태는 진격거 기행종 마냥 팔도 얇고 와 답이 안나오네&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;저 상태서 게임도 만들려 했었다. 무슨 자신감이었는지 ㅋㅋㅋㅋㅋ&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;그림 그리는 장비도 없었기 때문에 가장 싼 와콤 타블렛을 이용해 그렸었는데 타블렛에게 미안할 정도였다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;h2 data-ke-size=&quot;size26&quot;&gt;1년차&lt;/h2&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-filename=&quot;PNG 이미지-817980F9EAC3-1.png&quot; data-origin-width=&quot;1400&quot; data-origin-height=&quot;2000&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/nMO44/btrvGaNaKIe/N583iKLiTOmxf0Xe15S6Y0/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/nMO44/btrvGaNaKIe/N583iKLiTOmxf0Xe15S6Y0/img.png&quot; data-alt=&quot;알렉스트라자 할로윈&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/nMO44/btrvGaNaKIe/N583iKLiTOmxf0Xe15S6Y0/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FnMO44%2FbtrvGaNaKIe%2FN583iKLiTOmxf0Xe15S6Y0%2Fimg.png&quot; onerror=&quot;this.onerror=null; this.src='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png'; this.srcset='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png';&quot; loading=&quot;lazy&quot; width=&quot;412&quot; height=&quot;589&quot; data-filename=&quot;PNG 이미지-817980F9EAC3-1.png&quot; data-origin-width=&quot;1400&quot; data-origin-height=&quot;2000&quot;/&gt;&lt;/span&gt;&lt;figcaption&gt;알렉스트라자 할로윈&lt;/figcaption&gt;
&lt;/figure&gt;
&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;정말 이상하리 이상할만큼 저당시 그렸던 그림 평균 치곤 꽤 잘나왔다. 다시 그리라면 지금도 저 퀄 안나올꺼 같은데 아직까지도 이상하네 왜 준수하게 그렸지? 장비 탓인가? 타블렛에서 아이패드로 바꿨을 시점이긴 한데 너무 다르긴 하네&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;그리고 저 때 부터 머리카락 휘갈겨서 그리기 시작했다 ㅋㅋㅋㅋ 지금도 머리카락 그리면 겁나 길고 휘갈긴다 ㅋㅋㅋㅋ&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;그리고 저때 뭔가 꼴리게 궁둥이가 보이게 그렸었네 으썸하다&lt;/p&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-filename=&quot;스크린샷 2018-09-26 오후 4.47.27.png&quot; data-origin-width=&quot;2850&quot; data-origin-height=&quot;1432&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/mXR5J/btrvI3M2ruW/lVwKLQkE9Zdz33vVAOs3V1/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/mXR5J/btrvI3M2ruW/lVwKLQkE9Zdz33vVAOs3V1/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/mXR5J/btrvI3M2ruW/lVwKLQkE9Zdz33vVAOs3V1/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FmXR5J%2FbtrvI3M2ruW%2FlVwKLQkE9Zdz33vVAOs3V1%2Fimg.png&quot; onerror=&quot;this.onerror=null; this.src='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png'; this.srcset='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png';&quot; loading=&quot;lazy&quot; width=&quot;2850&quot; height=&quot;1432&quot; data-filename=&quot;스크린샷 2018-09-26 오후 4.47.27.png&quot; data-origin-width=&quot;2850&quot; data-origin-height=&quot;1432&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;너무 뽕에 찬 나머지 케이스 까지 만들어서 다녔다&lt;/p&gt;
&lt;h2 data-ke-size=&quot;size26&quot;&gt;2년차&lt;/h2&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-filename=&quot;2019.jpg&quot; data-origin-width=&quot;1252&quot; data-origin-height=&quot;1301&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/bV90np/btrvHiXKwTQ/knEPHb7v5p5rKgBFmqHrak/img.jpg&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/bV90np/btrvHiXKwTQ/knEPHb7v5p5rKgBFmqHrak/img.jpg&quot; data-alt=&quot;2019년 연말정산&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/bV90np/btrvHiXKwTQ/knEPHb7v5p5rKgBFmqHrak/img.jpg&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FbV90np%2FbtrvHiXKwTQ%2FknEPHb7v5p5rKgBFmqHrak%2Fimg.jpg&quot; onerror=&quot;this.onerror=null; this.src='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png'; this.srcset='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png';&quot; loading=&quot;lazy&quot; width=&quot;1252&quot; height=&quot;1301&quot; data-filename=&quot;2019.jpg&quot; data-origin-width=&quot;1252&quot; data-origin-height=&quot;1301&quot;/&gt;&lt;/span&gt;&lt;figcaption&gt;2019년 연말정산&lt;/figcaption&gt;
&lt;/figure&gt;
&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;저 해에 연말정산을 했었는데 퀄리티가 들쭌 날쭉 하던 시기였다. 회사를 다니던 중 이었기 때문에 그림 그릴 시간도 짬짬히 내서 그려왔고 속도도 느린탓에 한달에 1건 밖에 못그렸다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;이렇게 조금씩 바뀔 수 있었던건 주변 사람들이 좋은 지적을 많이 해주었기 때문에라 생각한다. 무슨 자신감이었는진 모르겠지만 스케치 한걸 어떠냐고 디자이너한테 물어봤었고 바로 피드백을 받을 수 있었다. 또 주변에 알고 지내는 형들한테도 피드백을 받아가니 알게 모르게 이상하게 되는 부분은 고쳐갔던거 같다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;아무튼 피드백을 받아 들이고 고쳐가는 것이 제일 중요했다.&lt;/p&gt;
&lt;h2 data-ke-size=&quot;size26&quot;&gt;3년차&lt;/h2&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-origin-width=&quot;2267&quot; data-origin-height=&quot;1885&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/clCXDT/btrvLgYWBmt/1nRraiM9DITLcChih1YkWK/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/clCXDT/btrvLgYWBmt/1nRraiM9DITLcChih1YkWK/img.png&quot; data-alt=&quot;HK416 소녀전선&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/clCXDT/btrvLgYWBmt/1nRraiM9DITLcChih1YkWK/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FclCXDT%2FbtrvLgYWBmt%2F1nRraiM9DITLcChih1YkWK%2Fimg.png&quot; onerror=&quot;this.onerror=null; this.src='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png'; this.srcset='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png';&quot; loading=&quot;lazy&quot; width=&quot;628&quot; height=&quot;522&quot; data-origin-width=&quot;2267&quot; data-origin-height=&quot;1885&quot;/&gt;&lt;/span&gt;&lt;figcaption&gt;HK416 소녀전선&lt;/figcaption&gt;
&lt;/figure&gt;
&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;색칠은 역시 또 다른 영역인가 보다 라는 시점이었던거 같다. 어렵다 지금도. 다만 무엇보다도 사람의 형체가 분명히 보이기 시작했다. 지금 그림도 역동적이진 않은데 저땐 그래도 뭔가 몸을 움직인걸 그릴려 했던거 같다. 표정도 찡그린걸 그릴려 했던거 같다.&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;저 그림으로 장패드를 만들기도 했는데 지금 그게 어디다 두었더라?&lt;/p&gt;
&lt;h2 data-ke-size=&quot;size26&quot;&gt;4년차&lt;/h2&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-filename=&quot;IMG_0852 2.JPG&quot; data-origin-width=&quot;8000&quot; data-origin-height=&quot;6000&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/bZUKL0/btrvI2HmTap/C5bE1JSg8HfIsXsakFPJyk/img.jpg&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/bZUKL0/btrvI2HmTap/C5bE1JSg8HfIsXsakFPJyk/img.jpg&quot; data-alt=&quot;홀로라이브 3기생&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/bZUKL0/btrvI2HmTap/C5bE1JSg8HfIsXsakFPJyk/img.jpg&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FbZUKL0%2FbtrvI2HmTap%2FC5bE1JSg8HfIsXsakFPJyk%2Fimg.jpg&quot; onerror=&quot;this.onerror=null; this.src='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png'; this.srcset='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png';&quot; loading=&quot;lazy&quot; width=&quot;8000&quot; height=&quot;6000&quot; data-filename=&quot;IMG_0852 2.JPG&quot; data-origin-width=&quot;8000&quot; data-origin-height=&quot;6000&quot;/&gt;&lt;/span&gt;&lt;figcaption&gt;홀로라이브 3기생&lt;/figcaption&gt;
&lt;/figure&gt;
&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;정말 그렸던것중 가장 사람을 여러명 그린 그림이 아니었나 싶다. 다시 그리라 하면 거품물듯&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;대략 한달정도 그렸던거 같은데 비록 색칠은 이때부터 하지 않게 되었지만 그만큼 시간을 인체 비율이라던지 디테일이라던지 그런 부분에 투자할 수 있었던거 같다.&lt;/p&gt;
&lt;figure id=&quot;og_1646992590903&quot; contenteditable=&quot;false&quot; data-ke-type=&quot;opengraph&quot; data-ke-align=&quot;alignCenter&quot; data-og-type=&quot;website&quot; data-og-title=&quot;Hololive 3rd gen&quot; data-og-description=&quot; &quot; data-og-host=&quot;www.youtube.com&quot; data-og-source-url=&quot;https://www.youtube.com/playlist?list=PLtxx9mLrCpnLkIZXWrORJnB_UPA9BvDNa&quot; data-og-url=&quot;http://www.youtube.com/playlist?list=PLtxx9mLrCpnLkIZXWrORJnB_UPA9BvDNa&quot; data-og-image=&quot;https://scrap.kakaocdn.net/dn/iHMYd/hyNGEmuFO5/BtThnYZtknF5tDBnKlcKhK/img.jpg?width=168&amp;amp;height=94&amp;amp;face=0_0_168_94,https://scrap.kakaocdn.net/dn/bPdZFv/hyNGALaCfO/pM8tAujRH30x4FZu1OWju1/img.jpg?width=196&amp;amp;height=110&amp;amp;face=0_0_196_110,https://scrap.kakaocdn.net/dn/beuOa6/hyNFJiDyJI/dT5luyz40D39g8pIGhMUZ1/img.jpg?width=246&amp;amp;height=138&amp;amp;face=0_0_246_138,https://scrap.kakaocdn.net/dn/lblx1/hyNGHKiigV/GCxlLHRR6DjkfEvcglHif0/img.jpg?width=336&amp;amp;height=188&amp;amp;face=0_0_336_188&quot;&gt;&lt;a href=&quot;https://www.youtube.com/playlist?list=PLtxx9mLrCpnLkIZXWrORJnB_UPA9BvDNa&quot; target=&quot;_blank&quot; rel=&quot;noopener&quot; data-source-url=&quot;https://www.youtube.com/playlist?list=PLtxx9mLrCpnLkIZXWrORJnB_UPA9BvDNa&quot;&gt;
&lt;div class=&quot;og-image&quot; style=&quot;background-image: url('https://scrap.kakaocdn.net/dn/iHMYd/hyNGEmuFO5/BtThnYZtknF5tDBnKlcKhK/img.jpg?width=168&amp;amp;height=94&amp;amp;face=0_0_168_94,https://scrap.kakaocdn.net/dn/bPdZFv/hyNGALaCfO/pM8tAujRH30x4FZu1OWju1/img.jpg?width=196&amp;amp;height=110&amp;amp;face=0_0_196_110,https://scrap.kakaocdn.net/dn/beuOa6/hyNFJiDyJI/dT5luyz40D39g8pIGhMUZ1/img.jpg?width=246&amp;amp;height=138&amp;amp;face=0_0_246_138,https://scrap.kakaocdn.net/dn/lblx1/hyNGHKiigV/GCxlLHRR6DjkfEvcglHif0/img.jpg?width=336&amp;amp;height=188&amp;amp;face=0_0_336_188');&quot;&gt;&amp;nbsp;&lt;/div&gt;
&lt;div class=&quot;og-text&quot;&gt;
&lt;p class=&quot;og-title&quot; data-ke-size=&quot;size16&quot;&gt;Hololive 3rd gen&lt;/p&gt;
&lt;p class=&quot;og-desc&quot; data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p class=&quot;og-host&quot; data-ke-size=&quot;size16&quot;&gt;www.youtube.com&lt;/p&gt;
&lt;/div&gt;
&lt;/a&gt;&lt;/figure&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;각 그림별 과정은 위 링크에서 확인 할 수 있다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;h2 data-ke-size=&quot;size26&quot;&gt;5년차&lt;/h2&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-origin-width=&quot;2732&quot; data-origin-height=&quot;2048&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/De51E/btrvKKMLE5D/RtfmmbzALmEBeJskLKGKm0/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/De51E/btrvKKMLE5D/RtfmmbzALmEBeJskLKGKm0/img.png&quot; data-alt=&quot;프린세스 커넥트 아메스 JK 버전&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/De51E/btrvKKMLE5D/RtfmmbzALmEBeJskLKGKm0/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FDe51E%2FbtrvKKMLE5D%2FRtfmmbzALmEBeJskLKGKm0%2Fimg.png&quot; onerror=&quot;this.onerror=null; this.src='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png'; this.srcset='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png';&quot; loading=&quot;lazy&quot; width=&quot;2732&quot; height=&quot;2048&quot; data-origin-width=&quot;2732&quot; data-origin-height=&quot;2048&quot;/&gt;&lt;/span&gt;&lt;figcaption&gt;프린세스 커넥트 아메스 JK 버전&lt;/figcaption&gt;
&lt;/figure&gt;
&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;요즘도 간간히 그림을 그린다. 아니지 이제까지 쌓아온 것들이 너무 아까워서 놓지 못해 그린다. 그림이란게 잠깐 쉬었다 하면 바로 손에 감이 사라졌기 때문에 계속 그렸고, 워낙 속도도 느리기 때문에 하루를 다 쓴다라는 생각으로 그린다.&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;앞으로 5년뒤엔 어떻게 변해 있을지 궁금하긴 한데 그래도 이 취미 만큼은 계속 하고 싶다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-filename=&quot;IMG_4923.jpg&quot; data-origin-width=&quot;4032&quot; data-origin-height=&quot;3024&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/0LJnC/btrEvgJIPbS/53JA4ATxa3GPkU6OFNkmHk/img.jpg&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/0LJnC/btrEvgJIPbS/53JA4ATxa3GPkU6OFNkmHk/img.jpg&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/0LJnC/btrEvgJIPbS/53JA4ATxa3GPkU6OFNkmHk/img.jpg&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2F0LJnC%2FbtrEvgJIPbS%2F53JA4ATxa3GPkU6OFNkmHk%2Fimg.jpg&quot; onerror=&quot;this.onerror=null; this.src='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png'; this.srcset='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png';&quot; loading=&quot;lazy&quot; width=&quot;4032&quot; height=&quot;3024&quot; data-filename=&quot;IMG_4923.jpg&quot; data-origin-width=&quot;4032&quot; data-origin-height=&quot;3024&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;a href=&quot;https://link.coupang.com/a/pcOYX&quot; target=&quot;_blank&quot; rel=&quot;noopener&quot;&gt;&lt;img src=&quot;https://img2c.coupangcdn.com/image/affiliate/banner/7b7f36d7754c198b95526203191a3fe5@2x.jpg&quot; alt=&quot;Apple 아이패드 프로 12.9 5세대 M1칩, 스페이스 그레이, 256GB, Wi-Fi&quot; width=&quot;120&quot; height=&quot;240&quot; /&gt;&lt;/a&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;background-color: #ffffff; color: #e56a2c;&quot;&gt;이 포스팅은 쿠팡 파트너스 활동의 일환으로, 이에 따른 일정액의 수수료를 제공받습니다.&lt;/span&gt;&lt;/p&gt;</description>
      <category>일상</category>
      <category>Live2D</category>
      <category>그림</category>
      <category>블루아카이브</category>
      <category>색칠</category>
      <category>선화</category>
      <category>애니</category>
      <category>일러스트</category>
      <category>취미</category>
      <category>캐릭터</category>
      <category>홀로라이브</category>
      <author>hazimenya</author>
      <guid isPermaLink="true">https://stories2.tistory.com/32</guid>
      <comments>https://stories2.tistory.com/entry/%EA%B7%B8%EB%A6%BC-%EC%B7%A8%EB%AF%B8-5%EB%85%84%EC%B0%A8#entry32comment</comments>
      <pubDate>Fri, 11 Mar 2022 19:02:03 +0900</pubDate>
    </item>
    <item>
      <title>운전면허 반 독학으로 따기!</title>
      <link>https://stories2.tistory.com/entry/%EC%9A%B4%EC%A0%84%EB%A9%B4%ED%97%88-%EB%B0%98-%EB%8F%85%ED%95%99%EC%9C%BC%EB%A1%9C-%EB%94%B0%EA%B8%B0</link>
      <description>&lt;p data-ke-size=&quot;size16&quot;&gt;2종 보통(오토) 면허를 한번에 붙었습니다.&lt;/p&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock floatRight&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-filename=&quot;IMG_171C7F7679CC-1.jpeg&quot; data-origin-width=&quot;750&quot; data-origin-height=&quot;1334&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/v6qAf/btrvEGjGsfo/CcGBsBkCfxFL0MCeMDwkL1/img.jpg&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/v6qAf/btrvEGjGsfo/CcGBsBkCfxFL0MCeMDwkL1/img.jpg&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/v6qAf/btrvEGjGsfo/CcGBsBkCfxFL0MCeMDwkL1/img.jpg&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2Fv6qAf%2FbtrvEGjGsfo%2FCcGBsBkCfxFL0MCeMDwkL1%2Fimg.jpg&quot; onerror=&quot;this.onerror=null; this.src='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png'; this.srcset='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png';&quot; loading=&quot;lazy&quot; width=&quot;326&quot; height=&quot;1334&quot; data-filename=&quot;IMG_171C7F7679CC-1.jpeg&quot; data-origin-width=&quot;750&quot; data-origin-height=&quot;1334&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;기간은 한달정도 소요되었습니다. 이유가 있었는데&lt;/p&gt;
&lt;ul style=&quot;list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li&gt;한창 면허를 따는 시기 (년 초)&lt;/li&gt;
&lt;li&gt;작성자의 게으름&lt;/li&gt;
&lt;/ul&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;정도 입니다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;총 들어간 비용은 기본 접수 수수료와 주행 연수 및 시험 비용으로 30만원 정도 들어갔습니다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;i&gt;기타 교통비등을 제외한 금액입니다&lt;/i&gt;&lt;/p&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-filename=&quot;스크린샷 2022-03-10 19.21.36.png&quot; data-origin-width=&quot;1124&quot; data-origin-height=&quot;476&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/bps7C9/btrvFBIWIwl/cgfzxeZ2Vb64hPkBHnye31/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/bps7C9/btrvFBIWIwl/cgfzxeZ2Vb64hPkBHnye31/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/bps7C9/btrvFBIWIwl/cgfzxeZ2Vb64hPkBHnye31/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2Fbps7C9%2FbtrvFBIWIwl%2FcgfzxeZ2Vb64hPkBHnye31%2Fimg.png&quot; onerror=&quot;this.onerror=null; this.src='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png'; this.srcset='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png';&quot; loading=&quot;lazy&quot; width=&quot;1124&quot; height=&quot;476&quot; data-filename=&quot;스크린샷 2022-03-10 19.21.36.png&quot; data-origin-width=&quot;1124&quot; data-origin-height=&quot;476&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;구글에 검색하여 나오는 학원비용에서 학과 교육과 장내 기능을 아낀 비용이라고 할 수 있습니다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;그 과정을 리뷰할겸 글을 작성합니다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;h3 data-ke-size=&quot;size23&quot;&gt;반 독학?&lt;/h3&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;운전면허의 경우&lt;/p&gt;
&lt;figure id=&quot;og_1646907980590&quot; contenteditable=&quot;false&quot; data-ke-type=&quot;opengraph&quot; data-ke-align=&quot;alignCenter&quot; data-og-type=&quot;website&quot; data-og-title=&quot;면허시험순서 | 도로교통공단 안전운전 통합민원&quot; data-og-description=&quot;&quot; data-og-host=&quot;www.safedriving.or.kr&quot; data-og-source-url=&quot;https://www.safedriving.or.kr/guide/rerGuide01View.do?menuCode=MN-PO-1111&quot; data-og-url=&quot;https://www.safedriving.or.kr/guide/rerGuide01View.do?menuCode=MN-PO-1111&quot; data-og-image=&quot;&quot;&gt;&lt;a href=&quot;https://www.safedriving.or.kr/guide/rerGuide01View.do?menuCode=MN-PO-1111&quot; target=&quot;_blank&quot; rel=&quot;noopener&quot; data-source-url=&quot;https://www.safedriving.or.kr/guide/rerGuide01View.do?menuCode=MN-PO-1111&quot;&gt;
&lt;div class=&quot;og-image&quot; style=&quot;background-image: url();&quot;&gt;&amp;nbsp;&lt;/div&gt;
&lt;div class=&quot;og-text&quot;&gt;
&lt;p class=&quot;og-title&quot; data-ke-size=&quot;size16&quot;&gt;면허시험순서 | 도로교통공단 안전운전 통합민원&lt;/p&gt;
&lt;p class=&quot;og-desc&quot; data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p class=&quot;og-host&quot; data-ke-size=&quot;size16&quot;&gt;www.safedriving.or.kr&lt;/p&gt;
&lt;/div&gt;
&lt;/a&gt;&lt;/figure&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;위 도로교통 공단 홈페이지에서 운전면허 취득 과정을 안내해줍니다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;이 중에서 필기 시험, 장내 기능 시험을 학원을 다니지 않고 독학으로 공부하고 시험을 치루었기 때문에 반 독학이라고 하겠습니다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;h4 data-ke-size=&quot;size20&quot;&gt;신체검사 &amp;amp; 운전 교육&lt;/h4&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;특정 지역의 공단을 제외하면 대부분의 공단에선 자체 신체검사실이 있습니다. 현장에서 시력검사를 받으시고, 문진표 작성하면 됩니다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;그 후, 안전 운전 교육을 1시간 가량 동영상으로 봅니다.&lt;/p&gt;
&lt;h4 data-ke-size=&quot;size20&quot;&gt;필기 시험&lt;/h4&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;저의 경우 필기 시험을 제주도로교통공단에서 시험을 보았습니다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;정말 간단합니다. 학교에서 도덕시험 치루는것과 같은 난이도의 문제가 출제 되어지며, 종종 모르는 문구가 나올 때도 있지만 일부로 낙점을 받기 위해 노력하지 않는 이상 통과합니다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;공부를 하고 싶다면&amp;nbsp;&lt;/p&gt;
&lt;figure id=&quot;og_1646908378229&quot; contenteditable=&quot;false&quot; data-ke-type=&quot;opengraph&quot; data-ke-align=&quot;alignCenter&quot; data-og-type=&quot;website&quot; data-og-title=&quot;운전면허 PLUS - 운전면허필기시험 (2022최신판) - Google Play 앱&quot; data-og-description=&quot;2022년 최신 문항 반영, 100%적중! 대한민국 굿 앱 평가 교육부문 대상 수상! 1일완성! 급할때는 많이 틀리는 문제만!&quot; data-og-host=&quot;play.google.com&quot; data-og-source-url=&quot;https://play.google.com/store/apps/details?id=com.adrock.driverlicense300&amp;amp;hl=ko&amp;amp;gl=US&quot; data-og-url=&quot;https://play.google.com/store/apps/details?id=com.adrock.driverlicense300&amp;amp;hl=ko&amp;amp;gl=US&quot; data-og-image=&quot;https://scrap.kakaocdn.net/dn/kk03w/hyNFxuNacZ/Llo65yEcgyy4vADlRtngN1/img.png?width=512&amp;amp;height=250&amp;amp;face=0_0_512_250,https://scrap.kakaocdn.net/dn/j1Byu/hyNFCbNPUY/sgP25Dva69wpKGBKqsk0X1/img.png?width=600&amp;amp;height=300&amp;amp;face=0_0_600_300,https://scrap.kakaocdn.net/dn/brVMJe/hyNFGkYRgo/7k90i5edFeKHIbK8K5L8c0/img.png?width=551&amp;amp;height=310&amp;amp;face=0_0_551_310&quot;&gt;&lt;a href=&quot;https://play.google.com/store/apps/details?id=com.adrock.driverlicense300&amp;amp;hl=ko&amp;amp;gl=US&quot; target=&quot;_blank&quot; rel=&quot;noopener&quot; data-source-url=&quot;https://play.google.com/store/apps/details?id=com.adrock.driverlicense300&amp;amp;hl=ko&amp;amp;gl=US&quot;&gt;
&lt;div class=&quot;og-image&quot; style=&quot;background-image: url('https://scrap.kakaocdn.net/dn/kk03w/hyNFxuNacZ/Llo65yEcgyy4vADlRtngN1/img.png?width=512&amp;amp;height=250&amp;amp;face=0_0_512_250,https://scrap.kakaocdn.net/dn/j1Byu/hyNFCbNPUY/sgP25Dva69wpKGBKqsk0X1/img.png?width=600&amp;amp;height=300&amp;amp;face=0_0_600_300,https://scrap.kakaocdn.net/dn/brVMJe/hyNFGkYRgo/7k90i5edFeKHIbK8K5L8c0/img.png?width=551&amp;amp;height=310&amp;amp;face=0_0_551_310');&quot;&gt;&amp;nbsp;&lt;/div&gt;
&lt;div class=&quot;og-text&quot;&gt;
&lt;p class=&quot;og-title&quot; data-ke-size=&quot;size16&quot;&gt;운전면허 PLUS - 운전면허필기시험 (2022최신판) - Google Play 앱&lt;/p&gt;
&lt;p class=&quot;og-desc&quot; data-ke-size=&quot;size16&quot;&gt;2022년 최신 문항 반영, 100%적중! 대한민국 굿 앱 평가 교육부문 대상 수상! 1일완성! 급할때는 많이 틀리는 문제만!&lt;/p&gt;
&lt;p class=&quot;og-host&quot; data-ke-size=&quot;size16&quot;&gt;play.google.com&lt;/p&gt;
&lt;/div&gt;
&lt;/a&gt;&lt;/figure&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;와 같은 어플들을 이용하면 됩니다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;h4 data-ke-size=&quot;size20&quot;&gt;장내 기능 시험&lt;/h4&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-filename=&quot;IMG_4688.jpg&quot; data-origin-width=&quot;3024&quot; data-origin-height=&quot;4032&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/bdfm1O/btrvEG45WSY/4q1K4KOGhLXN6YBPYu6e5k/img.jpg&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/bdfm1O/btrvEG45WSY/4q1K4KOGhLXN6YBPYu6e5k/img.jpg&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/bdfm1O/btrvEG45WSY/4q1K4KOGhLXN6YBPYu6e5k/img.jpg&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2Fbdfm1O%2FbtrvEG45WSY%2F4q1K4KOGhLXN6YBPYu6e5k%2Fimg.jpg&quot; onerror=&quot;this.onerror=null; this.src='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png'; this.srcset='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png';&quot; loading=&quot;lazy&quot; width=&quot;3024&quot; height=&quot;4032&quot; data-filename=&quot;IMG_4688.jpg&quot; data-origin-width=&quot;3024&quot; data-origin-height=&quot;4032&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;강서 도로교통 공단 기준 기능 시험 코스 안내 판 입니다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;대부분의 장내 코스는 위와 비슷합니다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;과정은 유튜브에 검색하여 보시는걸 추천드립니다.&lt;/p&gt;
&lt;figure data-ke-type=&quot;video&quot; data-ke-style=&quot;alignCenter&quot; data-video-host=&quot;youtube&quot; data-video-url=&quot;https://www.youtube.com/watch?v=hHTYoOsnQ2o&quot; data-video-thumbnail=&quot;https://scrap.kakaocdn.net/dn/UpdZz/hyNFM6zFdE/aCRIqLHEWqix3SMbMeA0p1/img.jpg?width=640&amp;amp;height=480&amp;amp;face=0_0_640_480&quot; data-video-width=&quot;640&quot; data-video-height=&quot;480&quot; data-video-origin-width=&quot;640&quot; data-video-origin-height=&quot;480&quot; data-ke-mobilestyle=&quot;widthContent&quot;&gt;&lt;iframe src=&quot;https://www.youtube.com/embed/hHTYoOsnQ2o&quot; width=&quot;640&quot; height=&quot;480&quot; frameborder=&quot;&quot; allowfullscreen=&quot;true&quot;&gt;&lt;/iframe&gt;
&lt;figcaption&gt;&lt;/figcaption&gt;
&lt;/figure&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;장내 기능 시험은 운이 좋았지만, 교육을 받을 수 있다면 받고 오는걸 추천 드립니다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;제 기준으로 말하면 각 구간마다 해야하는 과정들은 할만 했습니다. 워낙 운전류 게임을 즐겨왔기 때문에 차폭감이라던지 주차 감각이라던지 어느정도 휠을 돌려야 할지는 장내 코스 시험을 보면서 자연스럽게 알아갈 수 있었습니다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;브레이크는 밟을 줄 모르면 급브레이크를 자주 밟게 되는데 그럼 천장에 머리 박는건 감안하고 밟으셔야합니다. 끝나고 보면 머리 엄청 아플겁니다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;제일 문제는 돌발상황 입니다. 시험을 보고 있는 상황 특성상 긴장을 하고 있는 상태에서 돌발 소리에 놀라 엑셀을 밟았으나 다행이 몸이 반응하여 브레이크로 발을 바로 바꾸고 정차하였습니다.&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;의외로 엑셀을 세게 밟아도 생각만큼 빠르게 속도가 올라가진 않으나 연습이 되어있지 않기 때문에 발생한 위험한 상황이며 이 부분 때문에 가능하면 독학 대신 교육을 받고 오시길 추천 드립니다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;저의 경우 감점 항목으로&lt;/p&gt;
&lt;ul style=&quot;list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li&gt;T자 주차 시간 초과&lt;/li&gt;
&lt;li&gt;돌발상황 미대처&lt;/li&gt;
&lt;/ul&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;로 통과 점수인 80점에 턱걸이로 합격하였습니다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;팁으론 T자 주차에서 많은 탈선을 하시니 급하게 하실 필요 없이 천천히 하시기 바랍니다. 주차 시간 초과보다 탈선이 더 감점이 심합니다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;h4 data-ke-size=&quot;size20&quot;&gt;도로 주행&lt;/h4&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;학원의 힘과 아는 형의 힘을 빌렸습니다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;연습면허가 있기 때문에 규정을 지키고 도로 주행 연습도 가능합니다.&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;하지만 동승자의 안전을 고려해 학원에서 연습을 받는걸 추천드립니다. 학원 차량은 보조석에도 브레이크가 있고, 다른 차량들이 보행자 만큼 주의해주는게 연습 차량입니다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;대부분 6시간 도로 주행을 거친 후 시험을 치루기 때문에 짧으면 이틀만에 면허를 딸 수 있습니다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;저의 경우엔 제주도에서 도로주행을 하였습니다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;학원마다 코스가 다르지만 쉬운 곳은 쉽습니다. 또한 제주도는 길이 넓고 차량이 적은 도로가 제법 많기 때문에 초심자로는 최적의 장소입니다.&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;다만 공포체험을 미리 했던 부분이 있는데 학원 지리 특성상 주행 코스와 거리가 떨어져 있어 이동을 해야 했습니다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;선생님께서 운전대를 저에게 주고 코스까지 이동하라고 하셔서 당황했지만 직접 운전하며 가고 있었습니다. 확실히 이러면 빨리 터득한다는 장점은 있었습니다. 하지만 예상치 못한 일이 있었으니 덤프 트럭이 뒤에 붙어서 오기 시작했고, 초행길이다보니 로터리에서 빠져야 하는데 지나칠 뻔하자 급브레이크를 밟았고 뒤에 오던 덤프도 같이 멈추게 되었습니다. 이때 들은 클락션은 정말 크더군요.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;다행히 10 ~ 20km/h 속도로 로터리 회전 중 이었기 때문에 큰일이 일어나진 않았습니다. 다만 앞으로 운전할때 급브레이크를 삼가하고 지나쳤으면 지나친 데로 진행해야함을 몸으로 배운 느낌이었습니다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;그 외에는 정말 즐거웠습니다. 선생님도 심심하니 이야기 하면서 운전을 했고, 덕분에 시간도 잘 갔습니다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;시험도 연습한 코스 중 1군데를 랜덤으로 골라 주행하면 되었기 때문에 어려운건 없습니다.&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock widthContent&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-origin-width=&quot;1706&quot; data-origin-height=&quot;682&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/zECo0/btrvDiczR9q/D15IffG7SUkIJI7rpyGadk/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/zECo0/btrvDiczR9q/D15IffG7SUkIJI7rpyGadk/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/zECo0/btrvDiczR9q/D15IffG7SUkIJI7rpyGadk/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FzECo0%2FbtrvDiczR9q%2FD15IffG7SUkIJI7rpyGadk%2Fimg.png&quot; onerror=&quot;this.onerror=null; this.src='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png'; this.srcset='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png';&quot; loading=&quot;lazy&quot; width=&quot;1706&quot; height=&quot;682&quot; data-origin-width=&quot;1706&quot; data-origin-height=&quot;682&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;저는 서울에 살지만 제주도로교통 공단에서 면허 신청을 하면 제주 면허가 나오기 때문에 약간 기념품? 같이 받았고 무사히 취득할 수 있었습니다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;</description>
      <category>일상</category>
      <category>2종보통</category>
      <category>독학</category>
      <category>오토</category>
      <category>운전</category>
      <category>운전면허</category>
      <author>hazimenya</author>
      <guid isPermaLink="true">https://stories2.tistory.com/31</guid>
      <comments>https://stories2.tistory.com/entry/%EC%9A%B4%EC%A0%84%EB%A9%B4%ED%97%88-%EB%B0%98-%EB%8F%85%ED%95%99%EC%9C%BC%EB%A1%9C-%EB%94%B0%EA%B8%B0#entry31comment</comments>
      <pubDate>Thu, 10 Mar 2022 20:04:52 +0900</pubDate>
    </item>
    <item>
      <title>티스토리에 개인 도메인 주소 연결하기</title>
      <link>https://stories2.tistory.com/entry/%ED%8B%B0%EC%8A%A4%ED%86%A0%EB%A6%AC%EC%97%90-%EA%B0%9C%EC%9D%B8-%EB%8F%84%EB%A9%94%EC%9D%B8-%EC%A3%BC%EC%86%8C-%EC%97%B0%EA%B2%B0%ED%95%98%EA%B8%B0</link>
      <description>&lt;p data-ke-size=&quot;size16&quot;&gt;준비물로 개인 도메인 주소를 가지고 있어야 합니다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;AWS, GCP, 가비아, 후이즈 등에서 구매하실 수 있습니다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;또한 Cloudflare 를 기준으로 작성된 글 이므로 설정이 되어 있어야 합니다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;공식 문서는 여기 -&amp;gt; &lt;a title=&quot;링크&quot; href=&quot;https://notice.tistory.com/1784&quot; target=&quot;_blank&quot; rel=&quot;noopener&quot;&gt;https://notice.tistory.com/1784&lt;/a&gt; 에서 확인 할 수 있습니다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;먼저 Cloudflare &amp;gt; 개인 도메인 주소 &amp;gt; DNS 탭으로 이동합니다.&lt;/p&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-filename=&quot;스크린샷 2022-03-10 18.22.38.png&quot; data-origin-width=&quot;2090&quot; data-origin-height=&quot;788&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/JwBsr/btrvCmTFETb/wam0KyT1QDEknWVr31ZAp0/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/JwBsr/btrvCmTFETb/wam0KyT1QDEknWVr31ZAp0/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/JwBsr/btrvCmTFETb/wam0KyT1QDEknWVr31ZAp0/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FJwBsr%2FbtrvCmTFETb%2Fwam0KyT1QDEknWVr31ZAp0%2Fimg.png&quot; onerror=&quot;this.onerror=null; this.src='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png'; this.srcset='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png';&quot; loading=&quot;lazy&quot; width=&quot;2090&quot; height=&quot;788&quot; data-filename=&quot;스크린샷 2022-03-10 18.22.38.png&quot; data-origin-width=&quot;2090&quot; data-origin-height=&quot;788&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;위와 같이 DNS 레코드를 추가합니다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;ul style=&quot;list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li&gt;형식 : CNAME&lt;/li&gt;
&lt;li&gt;이름: 원하는 서브 도메인 주소 혹은 루트로 사용하려면 @ 입력&lt;br /&gt;ex) blog.gapmoe.net ==&amp;gt; blog 값 만 입력&lt;/li&gt;
&lt;li&gt;콘텐츠: 티스토리 서버 도메인 주소&amp;nbsp;&lt;br /&gt;blog.tistory.com or host.tistory.com&lt;/li&gt;
&lt;li&gt;프록시 상태: 끄기&lt;/li&gt;
&lt;li&gt;TTL: 자동&lt;/li&gt;
&lt;/ul&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;이후 저장을 누릅니다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;티스토리 &amp;gt; 해당 사이트 &amp;gt; 설정 &amp;gt; 관리[블로그] 로 이동합니다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-filename=&quot;스크린샷 2022-03-10 18.22.59.png&quot; data-origin-width=&quot;1834&quot; data-origin-height=&quot;660&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/DuGeo/btrvDicsluw/WLLYTIdhM4pvvWffHQZtLK/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/DuGeo/btrvDicsluw/WLLYTIdhM4pvvWffHQZtLK/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/DuGeo/btrvDicsluw/WLLYTIdhM4pvvWffHQZtLK/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FDuGeo%2FbtrvDicsluw%2FWLLYTIdhM4pvvWffHQZtLK%2Fimg.png&quot; onerror=&quot;this.onerror=null; this.src='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png'; this.srcset='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png';&quot; loading=&quot;lazy&quot; width=&quot;1834&quot; height=&quot;660&quot; data-filename=&quot;스크린샷 2022-03-10 18.22.59.png&quot; data-origin-width=&quot;1834&quot; data-origin-height=&quot;660&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;위에서 등록한 도메인 주소를 입력한 다음 [변경사항 저장] 버튼을 누릅니다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-filename=&quot;스크린샷 2022-03-10 18.23.49.png&quot; data-origin-width=&quot;648&quot; data-origin-height=&quot;482&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/8TFpx/btrvu2haanJ/3LCyLD536vPKzNL1oIZaa0/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/8TFpx/btrvu2haanJ/3LCyLD536vPKzNL1oIZaa0/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/8TFpx/btrvu2haanJ/3LCyLD536vPKzNL1oIZaa0/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2F8TFpx%2Fbtrvu2haanJ%2F3LCyLD536vPKzNL1oIZaa0%2Fimg.png&quot; onerror=&quot;this.onerror=null; this.src='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png'; this.srcset='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png';&quot; loading=&quot;lazy&quot; width=&quot;648&quot; height=&quot;482&quot; data-filename=&quot;스크린샷 2022-03-10 18.23.49.png&quot; data-origin-width=&quot;648&quot; data-origin-height=&quot;482&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;해당 주소로 접속시 사이트는 접속가능하지만 보안연결을 실패하는 현상을 확인할 수 있습니다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;이는 인증서 발급 작업이 진행 중 이기 때문입니다.&lt;/p&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-filename=&quot;스크린샷 2022-03-10 18.27.09.png&quot; data-origin-width=&quot;1836&quot; data-origin-height=&quot;678&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/H9uvj/btrvEGw6lHn/csj4OSEKm4rPRRYTAdRGRK/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/H9uvj/btrvEGw6lHn/csj4OSEKm4rPRRYTAdRGRK/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/H9uvj/btrvEGw6lHn/csj4OSEKm4rPRRYTAdRGRK/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FH9uvj%2FbtrvEGw6lHn%2Fcsj4OSEKm4rPRRYTAdRGRK%2Fimg.png&quot; onerror=&quot;this.onerror=null; this.src='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png'; this.srcset='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png';&quot; loading=&quot;lazy&quot; width=&quot;1836&quot; height=&quot;678&quot; data-filename=&quot;스크린샷 2022-03-10 18.27.09.png&quot; data-origin-width=&quot;1836&quot; data-origin-height=&quot;678&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;인증서 발급은 티스토리에서 자동으로 진행하니 기다려주시면 됩니다.&lt;/p&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-filename=&quot;스크린샷 2022-03-10 18.37.12.png&quot; data-origin-width=&quot;642&quot; data-origin-height=&quot;402&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/rBWJi/btrvDhLm4ww/LPwBL3ZMzbqUHQGhDbzK40/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/rBWJi/btrvDhLm4ww/LPwBL3ZMzbqUHQGhDbzK40/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/rBWJi/btrvDhLm4ww/LPwBL3ZMzbqUHQGhDbzK40/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FrBWJi%2FbtrvDhLm4ww%2FLPwBL3ZMzbqUHQGhDbzK40%2Fimg.png&quot; onerror=&quot;this.onerror=null; this.src='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png'; this.srcset='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png';&quot; loading=&quot;lazy&quot; width=&quot;642&quot; height=&quot;402&quot; data-filename=&quot;스크린샷 2022-03-10 18.37.12.png&quot; data-origin-width=&quot;642&quot; data-origin-height=&quot;402&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;/p&gt;</description>
      <category>개발 일기/티스토리 관리</category>
      <category>CloudFlare</category>
      <category>Custom domain</category>
      <category>DNS</category>
      <category>도메인</category>
      <category>티스토리 주소</category>
      <author>hazimenya</author>
      <guid isPermaLink="true">https://stories2.tistory.com/30</guid>
      <comments>https://stories2.tistory.com/entry/%ED%8B%B0%EC%8A%A4%ED%86%A0%EB%A6%AC%EC%97%90-%EA%B0%9C%EC%9D%B8-%EB%8F%84%EB%A9%94%EC%9D%B8-%EC%A3%BC%EC%86%8C-%EC%97%B0%EA%B2%B0%ED%95%98%EA%B8%B0#entry30comment</comments>
      <pubDate>Thu, 10 Mar 2022 18:36:46 +0900</pubDate>
    </item>
    <item>
      <title>IIS에 Flask 연결하기</title>
      <link>https://stories2.tistory.com/entry/IIS%EC%97%90-Flask-%EC%97%B0%EA%B2%B0%ED%95%98%EA%B8%B0</link>
      <description>&lt;p&gt;늘 &lt;code&gt;C#&lt;/code&gt;과 담을 쌓고 지내왔었기 때문에 당연히 &lt;code&gt;ASP.NET&lt;/code&gt; 사용 방법을 몰라왔고, 그 녀석이 존재 하는지도 몰라 왔었다. 하지만 회사 내에서 제 파트는 &lt;code&gt;ASP.NET&lt;/code&gt;을 사용했기 때문에 어거지로 공부를 시작했고, 야매스럽긴 하지만 나름 짬을 먹은 지금으로선 간단한 개발엔 문제가 없는 수준까진 올라올 수 있었다.&lt;/p&gt;
&lt;p&gt;물론 하루하루가 늘 배움의 시작이기 때문에 의외로 모르는 부분이던가 아직 못 해본거라 던가 너무나 많다.&lt;/p&gt;
&lt;p&gt;하지만 늘 신경 쓰이는게 있었으니. 정말로 &lt;code&gt;C#&lt;/code&gt;은 쓰기 싫었다. 나는 정말로 &lt;code&gt;Python&lt;/code&gt;을 쓰고 싶었단 말이다!&lt;/p&gt;
&lt;p&gt;쓰기 싫으면 트집을 잡을 건덕지를 찾아 보았다.&lt;/p&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-filename=&quot;i-want-you-giwy.jpg&quot; width=&quot;400&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/bleCbm/btqxOJyfb8A/g7Vv4GqgcKQCNcbaIDRSsK/img.jpg&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/bleCbm/btqxOJyfb8A/g7Vv4GqgcKQCNcbaIDRSsK/img.jpg&quot; data-alt=&quot;I WANT PYTHON&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/bleCbm/btqxOJyfb8A/g7Vv4GqgcKQCNcbaIDRSsK/img.jpg&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FbleCbm%2FbtqxOJyfb8A%2Fg7Vv4GqgcKQCNcbaIDRSsK%2Fimg.jpg&quot; data-filename=&quot;i-want-you-giwy.jpg&quot; width=&quot;400&quot; onerror=&quot;this.onerror=null; this.src='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png'; this.srcset='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png';&quot;/&gt;&lt;/span&gt;&lt;figcaption&gt;I WANT PYTHON&lt;/figcaption&gt;
&lt;/figure&gt;
&lt;/p&gt;
&lt;h3&gt;트집 잡기&lt;/h3&gt;
&lt;h4&gt;첫째로 리눅스 장비에 탑제하기가 어려웠다.&lt;/h4&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-filename=&quot;9.png&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/doYGZr/btqxKqtBxWA/lzS7rMKqRPvBkMpumwnOmK/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/doYGZr/btqxKqtBxWA/lzS7rMKqRPvBkMpumwnOmK/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/doYGZr/btqxKqtBxWA/lzS7rMKqRPvBkMpumwnOmK/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FdoYGZr%2FbtqxKqtBxWA%2FlzS7rMKqRPvBkMpumwnOmK%2Fimg.png&quot; data-filename=&quot;9.png&quot; onerror=&quot;this.onerror=null; this.src='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png'; this.srcset='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png';&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;/p&gt;
&lt;p&gt;MS 홈페이지에 들어가 보면 &lt;code&gt;.NET Framework&lt;/code&gt; 는 윈도우 장비만을 위한 프레임 워크라고 한다. 근데 우리는 &lt;code&gt;ASP.NET Framework&lt;/code&gt; 를 사용하고 있으니 크로스 플랫폼 지원이 여간 까다로운게 아니었다. 물론 &lt;code&gt;mono&lt;/code&gt;를 사용하면 어캐어캐 된다고는 듣긴 했다. 그래도 지원이 어려운건 사실이었으므로 당연히 서버는 윈도우 서버를 사용하기 위해 라이선스를 구매하여 사용해왔고 자연스럽게 단가는 올라갈 수 밖에 없었다.&lt;/p&gt;
&lt;h4&gt;둘째로 개발 장벽이 나름 높다.&lt;/h4&gt;
&lt;p&gt;처음 공부할 땐 웹에 관해 잘 모르는 점도 있긴 했었지만, 알아야 할 것들이 너무나 많았다. 서점에 책을 사러 갔을 때도 무슨 책을 사는 것이 아닌 무기를 샀다는 느낌이었다. 얇은 책도 있긴 했지만 차차 알아가기 까지는 꽤 시간이 걸렸던 것 같다. 6개월 정도가 소요되었던 것으로...&lt;/p&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-filename=&quot;11.png&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/dtlBY6/btqxKCtLZbo/UF4lVIyzLtwuXEKUMnmBUK/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/dtlBY6/btqxKCtLZbo/UF4lVIyzLtwuXEKUMnmBUK/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/dtlBY6/btqxKCtLZbo/UF4lVIyzLtwuXEKUMnmBUK/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FdtlBY6%2FbtqxKCtLZbo%2FUF4lVIyzLtwuXEKUMnmBUK%2Fimg.png&quot; data-filename=&quot;11.png&quot; onerror=&quot;this.onerror=null; this.src='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png'; this.srcset='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png';&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;/p&gt;
&lt;p&gt;근데 &lt;code&gt;flask&lt;/code&gt;는? 공식 사이트 들어가서 빠르게 시작하기 한 페이지만 따라 해도 기본적인 웹 서비스 구축이 가능했다.&lt;/p&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-filename=&quot;22.gif&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/5Hx1X/btqxJUazJ7n/7DO0P533QvKqyj26kLRbb1/img.gif&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/5Hx1X/btqxJUazJ7n/7DO0P533QvKqyj26kLRbb1/img.gif&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/5Hx1X/btqxJUazJ7n/7DO0P533QvKqyj26kLRbb1/img.gif&quot; srcset=&quot;https://blog.kakaocdn.net/dn/5Hx1X/btqxJUazJ7n/7DO0P533QvKqyj26kLRbb1/img.gif&quot; data-filename=&quot;22.gif&quot; onerror=&quot;this.onerror=null; this.src='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png'; this.srcset='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png';&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;/p&gt;
&lt;h4&gt;셋째로 추후 머신러닝 프로젝트를 도입할 것 같다.&lt;/h4&gt;
&lt;p&gt;사장님과 회의를 할 때가 있었는데 머신러닝, 통계 쪽을 눈 여겨 보시는 것 같았다.&lt;/p&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-filename=&quot;10.png&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/ePG4IC/btqxLW6oRKa/KnAqfc5Uf17KZfWRLDOZS1/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/ePG4IC/btqxLW6oRKa/KnAqfc5Uf17KZfWRLDOZS1/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/ePG4IC/btqxLW6oRKa/KnAqfc5Uf17KZfWRLDOZS1/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FePG4IC%2FbtqxLW6oRKa%2FKnAqfc5Uf17KZfWRLDOZS1%2Fimg.png&quot; data-filename=&quot;10.png&quot; onerror=&quot;this.onerror=null; this.src='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png'; this.srcset='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png';&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;/p&gt;
&lt;p&gt;&lt;code&gt;C#&lt;/code&gt; 으로도 당연히 머신 러닝을 할 순 있었다. 하지만 &lt;code&gt;python&lt;/code&gt; 과 &lt;code&gt;tensorflow&lt;/code&gt; 혹은 &lt;code&gt;scikit learn&lt;/code&gt;을 이용하여 개발한 문서나 문제 해결 내역이 우리에겐 더 익숙했다.&lt;/p&gt;
&lt;p&gt;서론이 너무 길었다. 본론으로 들어가자면, 아직까진 사내에선 윈도우 장비를 사용하는 것이 익숙했으므로 &lt;code&gt;IIS&lt;/code&gt;를 이용한 &lt;code&gt;Flask&lt;/code&gt; 기본 앱 연결 및 호스팅 하는 방법에 대해 기록하려 한다.&lt;/p&gt;
&lt;h3&gt;작업환경&lt;/h3&gt;
&lt;p&gt;AWS Lightsail Windows Server 2016&lt;/p&gt;
&lt;p&gt;Python &lt;code&gt;3.7.4&lt;/code&gt;&lt;/p&gt;
&lt;p&gt;Flask &lt;code&gt;1.1.1&lt;/code&gt;&lt;/p&gt;
&lt;h3&gt;소스 코드&lt;/h3&gt;
&lt;h5&gt;app.py&lt;/h5&gt;
&lt;pre class=&quot;python&quot;&gt;&lt;code&gt;from flask import Flask
app = Flask(__name__)

@app.route(&quot;/&quot;)
def hello():
    return &quot;Hello from FastCGI via IIS!&quot;

if __name__ == &quot;__main__&quot;:
    app.run()
&lt;/code&gt;&lt;/pre&gt;
&lt;h5&gt;wfastcgi.py&lt;/h5&gt;
&lt;p&gt;이건 &lt;code&gt;pip install wfastcgi&lt;/code&gt; 로 설치 후 site-packages 폴더 들어가보면 wfastcgi.py 가 같이 딸려 설치 된다 빼오면 된다.&lt;/p&gt;
&lt;h3&gt;설치 과정&lt;/h3&gt;
&lt;p&gt;우선 &lt;code&gt;IIS&lt;/code&gt;와 &lt;code&gt;CGI&lt;/code&gt;를 설치해야 한다. &lt;code&gt;CGI&lt;/code&gt;를 사용하는 이유는 웹 서비스를 하기 위해 내부 프로그램의 결과를 &lt;code&gt;HTML&lt;/code&gt; 형식으로 반환해주기 위한 일종의 인터페이스이며, 우린 &lt;code&gt;Python&lt;/code&gt;을 사용한 웹 서비스를 할 것이기 때문에 변환장치로 사용하는 것 이다. 라고 말 하는게 맞는지는 모르겠다.&lt;/p&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-filename=&quot;1.png&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/bC6Drt/btqxKp2wSpv/UEMv0MstnvBNx9qBe9LeVk/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/bC6Drt/btqxKp2wSpv/UEMv0MstnvBNx9qBe9LeVk/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/bC6Drt/btqxKp2wSpv/UEMv0MstnvBNx9qBe9LeVk/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FbC6Drt%2FbtqxKp2wSpv%2FUEMv0MstnvBNx9qBe9LeVk%2Fimg.png&quot; data-filename=&quot;1.png&quot; onerror=&quot;this.onerror=null; this.src='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png'; this.srcset='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png';&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;/p&gt;
&lt;p&gt;Server Manager &amp;gt; Add roles and features &amp;gt; IIS &amp;gt; Management Service + CGI 선택 후 설치 진행 하면 일단은 &lt;code&gt;IIS&lt;/code&gt; 와 &lt;code&gt;CGI&lt;/code&gt; 설치가 자동으로 진행된다. 이 후 웹 브라우저로 &lt;code&gt;localhost&lt;/code&gt; 접속 시도를 하여 테스트 페이지가 표시되는지 확인 하면 된다.&lt;/p&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-filename=&quot;2.png&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/byGd2K/btqxM6U0OVY/p5okKA6lRoYIbRKReh5s70/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/byGd2K/btqxM6U0OVY/p5okKA6lRoYIbRKReh5s70/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/byGd2K/btqxM6U0OVY/p5okKA6lRoYIbRKReh5s70/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FbyGd2K%2FbtqxM6U0OVY%2Fp5okKA6lRoYIbRKReh5s70%2Fimg.png&quot; data-filename=&quot;2.png&quot; onerror=&quot;this.onerror=null; this.src='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png'; this.srcset='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png';&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;/p&gt;
&lt;p&gt;C:\inetpub 하위 디렉토리를 하나 생성하여 위에 준비했던 &lt;code&gt;app.py&lt;/code&gt;, &lt;code&gt;wfastcgi.py&lt;/code&gt; 를 넣어 준다.&lt;/p&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-filename=&quot;3.png&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/brWoMS/btqxJTphc7c/OxdedWUWKAguQwdlC0ZcUk/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/brWoMS/btqxJTphc7c/OxdedWUWKAguQwdlC0ZcUk/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/brWoMS/btqxJTphc7c/OxdedWUWKAguQwdlC0ZcUk/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FbrWoMS%2FbtqxJTphc7c%2FOxdedWUWKAguQwdlC0ZcUk%2Fimg.png&quot; data-filename=&quot;3.png&quot; onerror=&quot;this.onerror=null; this.src='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png'; this.srcset='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png';&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;/p&gt;
&lt;p&gt;&lt;code&gt;IIS&lt;/code&gt; 에서는 새 웹 사이트를 생성한다.&lt;/p&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-filename=&quot;4.png&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/bGhwCR/btqxLVNft8g/VkhsuXoyc986NHoYPcdKo0/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/bGhwCR/btqxLVNft8g/VkhsuXoyc986NHoYPcdKo0/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/bGhwCR/btqxLVNft8g/VkhsuXoyc986NHoYPcdKo0/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FbGhwCR%2FbtqxLVNft8g%2FVkhsuXoyc986NHoYPcdKo0%2Fimg.png&quot; data-filename=&quot;4.png&quot; onerror=&quot;this.onerror=null; this.src='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png'; this.srcset='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png';&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;/p&gt;
&lt;p&gt;&lt;code&gt;Handler Mappings&lt;/code&gt;에서 &lt;code&gt;Add Module Mapping&lt;/code&gt; 클릭 후&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;Request path:&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;&lt;code&gt;*&lt;/code&gt;&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;Module:&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;&lt;code&gt;FastCgiModule&lt;/code&gt;&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;Executable (optional):&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;&lt;code&gt;C:\&amp;lt;INSTALLED PYTHON DIRECTORY&amp;gt;|C:\&amp;lt;INSTALLED FLASK WEB APP DIRECTORY&amp;gt;\wfastcgi.py&lt;/code&gt;&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;Name:&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;&lt;code&gt;&amp;lt;WHAT YOU WANT&amp;gt;&lt;/code&gt;&lt;/p&gt;
&lt;p&gt;작성 후&lt;/p&gt;
&lt;p&gt;Request Restrictions &amp;gt; Mapping &amp;gt; Invoke handler only if request is mapped to&lt;/p&gt;
&lt;p&gt;체크박스를 체크 해제 해준다.&lt;/p&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-filename=&quot;5.png&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/ma5oU/btqxMsKNAba/Qcee20t8oZMUPIZAK7HHy0/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/ma5oU/btqxMsKNAba/Qcee20t8oZMUPIZAK7HHy0/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/ma5oU/btqxMsKNAba/Qcee20t8oZMUPIZAK7HHy0/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2Fma5oU%2FbtqxMsKNAba%2FQcee20t8oZMUPIZAK7HHy0%2Fimg.png&quot; data-filename=&quot;5.png&quot; onerror=&quot;this.onerror=null; this.src='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png'; this.srcset='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png';&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;/p&gt;
&lt;p&gt;서버 정보(Root) 로 이동 후&lt;/p&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-filename=&quot;6.png&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/cfDS2r/btqxJUIquSL/mHAAkpX2bhGKwyvNGPvyrK/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/cfDS2r/btqxJUIquSL/mHAAkpX2bhGKwyvNGPvyrK/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/cfDS2r/btqxJUIquSL/mHAAkpX2bhGKwyvNGPvyrK/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FcfDS2r%2FbtqxJUIquSL%2FmHAAkpX2bhGKwyvNGPvyrK%2Fimg.png&quot; data-filename=&quot;6.png&quot; onerror=&quot;this.onerror=null; this.src='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png'; this.srcset='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png';&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;/p&gt;
&lt;p&gt;이미 추가 되어 있을 텐데 해당 항목을 더블 클릭 후, Environment Variables &amp;gt; Add&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;Name:&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;&lt;code&gt;PYTHONPATH&lt;/code&gt;&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;Value:&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;&lt;code&gt;&amp;lt;FLASK WEB INSTALLED PATH&amp;gt;&lt;/code&gt;&lt;/p&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-filename=&quot;7.png&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/KhZiP/btqxJTJz32X/qi11KrWXE0KsBukk4qCcq0/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/KhZiP/btqxJTJz32X/qi11KrWXE0KsBukk4qCcq0/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/KhZiP/btqxJTJz32X/qi11KrWXE0KsBukk4qCcq0/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FKhZiP%2FbtqxJTJz32X%2Fqi11KrWXE0KsBukk4qCcq0%2Fimg.png&quot; data-filename=&quot;7.png&quot; onerror=&quot;this.onerror=null; this.src='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png'; this.srcset='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png';&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;Name:&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;&lt;code&gt;WSGI_HANDLER&lt;/code&gt;&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;Value:&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;&lt;code&gt;app.app&lt;/code&gt;&lt;/p&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-filename=&quot;8.png&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/nsSGR/btqxNVFJRwF/riD4H6W43h09YMCdGsyZu0/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/nsSGR/btqxNVFJRwF/riD4H6W43h09YMCdGsyZu0/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/nsSGR/btqxNVFJRwF/riD4H6W43h09YMCdGsyZu0/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FnsSGR%2FbtqxNVFJRwF%2FriD4H6W43h09YMCdGsyZu0%2Fimg.png&quot; data-filename=&quot;8.png&quot; onerror=&quot;this.onerror=null; this.src='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png'; this.srcset='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png';&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;/p&gt;
&lt;p&gt;크롬 브라우저로 자신이 만든 사이트의 포트번호를 통해 접속을 시도하면 위와 같은 에러 메시지가 표시될 것이다.&lt;/p&gt;
&lt;p&gt;파이썬을 서버 환경에 처음 설치하였으니 &lt;code&gt;flask&lt;/code&gt; 프레임워크가 설치되지 않아 생긴 문제인데 간단하다.&lt;/p&gt;
&lt;p&gt;&lt;code&gt;pip install flask&lt;/code&gt; 하면 해결 된다.&lt;/p&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-filename=&quot;12.png&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/bAeYXV/btqxJyTb8Gf/tvflU1emC6L5LcMFKMbIG1/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/bAeYXV/btqxJyTb8Gf/tvflU1emC6L5LcMFKMbIG1/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/bAeYXV/btqxJyTb8Gf/tvflU1emC6L5LcMFKMbIG1/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FbAeYXV%2FbtqxJyTb8Gf%2FtvflU1emC6L5LcMFKMbIG1%2Fimg.png&quot; data-filename=&quot;12.png&quot; onerror=&quot;this.onerror=null; this.src='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png'; this.srcset='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png';&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;/p&gt;
&lt;p&gt;앞으로 더 많은 곶통이 시작되겠지만 어쨌든 환경 설정은 되었으니 끝!&lt;/p&gt;</description>
      <category>개발 일기/이것 저것</category>
      <category>flask</category>
      <category>framework</category>
      <category>iis</category>
      <category>PYTHON</category>
      <category>web</category>
      <category>Windows Server</category>
      <author>hazimenya</author>
      <guid isPermaLink="true">https://stories2.tistory.com/22</guid>
      <comments>https://stories2.tistory.com/entry/IIS%EC%97%90-Flask-%EC%97%B0%EA%B2%B0%ED%95%98%EA%B8%B0#entry22comment</comments>
      <pubDate>Tue, 27 Aug 2019 17:43:13 +0900</pubDate>
    </item>
    <item>
      <title>맥북 배터리 자가교체기</title>
      <link>https://stories2.tistory.com/entry/%EB%A7%A5%EB%B6%81-%EB%B0%B0%ED%84%B0%EB%A6%AC-%EC%9E%90%EA%B0%80%EA%B5%90%EC%B2%B4%EA%B8%B0</link>
      <description>&lt;p&gt;어느날 부턴가 화면을 닫으면 틈이 생기고 누가봐도 볼록 튀어나온 것 같아 보이기 시작했다. 그러하다 배터리 스웰링 현상이 일어나는 바람에 노트북 외관, 기타 부품에 영향을 주기 시작한 거시다.&lt;/p&gt;
&lt;p&gt;처음엔 수리 견적을 공인 A/S 센터에 방문했었고 26만원이라는 충격적인 가격을 들을 수 있었다. 너무 비쌌다.&amp;nbsp;&lt;/p&gt;
&lt;p&gt;그리하여 배터리 자가 교체를 하기로 결심했고, 약 8만원이라는 비용을 투자하여 필요한 최소 준비물을 모을 수 있었다.&lt;/p&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-filename=&quot;IMG_3108.JPG&quot; width=&quot;800&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/bbwkI0/btqxKCs96Hn/oFRMMUKwLdWSTKnHKwdBb1/img.jpg&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/bbwkI0/btqxKCs96Hn/oFRMMUKwLdWSTKnHKwdBb1/img.jpg&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/bbwkI0/btqxKCs96Hn/oFRMMUKwLdWSTKnHKwdBb1/img.jpg&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FbbwkI0%2FbtqxKCs96Hn%2FoFRMMUKwLdWSTKnHKwdBb1%2Fimg.jpg&quot; data-filename=&quot;IMG_3108.JPG&quot; width=&quot;800&quot; onerror=&quot;this.onerror=null; this.src='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png'; this.srcset='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png';&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;/p&gt;
&lt;p&gt;하판의 나사를 조심스레 풀으려는 순간 얼마나 부풀러 올랐던지 하판을 손을 안대고도 자동으로 벌어져 버렸다.&amp;nbsp;&lt;/p&gt;
&lt;p&gt;덕분에 하판을 뜯는데는 힘이 전혀 안들어갔었지만 배터리 상태를 보니 안터진게 정말 다행이라 할 정도로 부풀어 올라 있었다.&lt;/p&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-filename=&quot;IMG_2908.JPG&quot; width=&quot;800&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/nAdmo/btqxKCfD9B2/QZP8ayzgUJ0Mt9z2lk5cz1/img.jpg&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/nAdmo/btqxKCfD9B2/QZP8ayzgUJ0Mt9z2lk5cz1/img.jpg&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/nAdmo/btqxKCfD9B2/QZP8ayzgUJ0Mt9z2lk5cz1/img.jpg&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FnAdmo%2FbtqxKCfD9B2%2FQZP8ayzgUJ0Mt9z2lk5cz1%2Fimg.jpg&quot; data-filename=&quot;IMG_2908.JPG&quot; width=&quot;800&quot; onerror=&quot;this.onerror=null; this.src='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png'; this.srcset='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png';&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;/p&gt;
&lt;p&gt;배터리가 왜 터지는지 알 것 같았다.&lt;/p&gt;
&lt;p&gt;일단은 기존 배터리를 제거해야 했다. 배터리와 본체가 양면테이프로 대단히 세게 붙여 있으므로 유튜브를 보니 다른 사람들은 껌때기 같은 도구가 있었지만 지금 현 상태에선 구하기가 어려웠으므로 주변에 돌아댕기는 얇은 플라스틱 출입증 카드를 이용하기로 했다. 유니티 고마워요!&lt;/p&gt;
&lt;p&gt;본 작업만 40분 정도 소요되었다.&lt;/p&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-filename=&quot;IMG_5737.JPG&quot; width=&quot;800&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/YtITZ/btqxJakjr9T/2hSWsfeDqNVLWRGXCV5On0/img.jpg&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/YtITZ/btqxJakjr9T/2hSWsfeDqNVLWRGXCV5On0/img.jpg&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/YtITZ/btqxJakjr9T/2hSWsfeDqNVLWRGXCV5On0/img.jpg&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FYtITZ%2FbtqxJakjr9T%2F2hSWsfeDqNVLWRGXCV5On0%2Fimg.jpg&quot; data-filename=&quot;IMG_5737.JPG&quot; width=&quot;800&quot; onerror=&quot;this.onerror=null; this.src='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png'; this.srcset='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png';&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;/p&gt;
&lt;p&gt;잘 못 건들면 터질까봐 긴장되었지만 다행이도 무사히 제거를 할 수 있었다.&lt;/p&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-filename=&quot;IMG_9145.JPG&quot; width=&quot;800&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/cIiwej/btqxKrFrbRQ/whBOKjGBfvK13QPdwTkn21/img.jpg&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/cIiwej/btqxKrFrbRQ/whBOKjGBfvK13QPdwTkn21/img.jpg&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/cIiwej/btqxKrFrbRQ/whBOKjGBfvK13QPdwTkn21/img.jpg&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FcIiwej%2FbtqxKrFrbRQ%2FwhBOKjGBfvK13QPdwTkn21%2Fimg.jpg&quot; data-filename=&quot;IMG_9145.JPG&quot; width=&quot;800&quot; onerror=&quot;this.onerror=null; this.src='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png'; this.srcset='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png';&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;/p&gt;
&lt;p&gt;정말 많이 부풀어 있었다. 얼른 새 배터리로 갈아 끼우자&lt;/p&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-filename=&quot;IMG_1960.JPG&quot; width=&quot;800&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/mLeqM/btqxM67UdwK/XWyBfTX3Shd9bEbLkTu4yK/img.jpg&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/mLeqM/btqxM67UdwK/XWyBfTX3Shd9bEbLkTu4yK/img.jpg&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/mLeqM/btqxM67UdwK/XWyBfTX3Shd9bEbLkTu4yK/img.jpg&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FmLeqM%2FbtqxM67UdwK%2FXWyBfTX3Shd9bEbLkTu4yK%2Fimg.jpg&quot; data-filename=&quot;IMG_1960.JPG&quot; width=&quot;800&quot; onerror=&quot;this.onerror=null; this.src='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png'; this.srcset='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png';&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;/p&gt;
&lt;p&gt;편----안&lt;/p&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-filename=&quot;IMG_3708.JPG&quot; width=&quot;800&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/cswlQr/btqxJk1foN3/y9CH6cRyZgCiGKGna6kpr0/img.jpg&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/cswlQr/btqxJk1foN3/y9CH6cRyZgCiGKGna6kpr0/img.jpg&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/cswlQr/btqxJk1foN3/y9CH6cRyZgCiGKGna6kpr0/img.jpg&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FcswlQr%2FbtqxJk1foN3%2Fy9CH6cRyZgCiGKGna6kpr0%2Fimg.jpg&quot; data-filename=&quot;IMG_3708.JPG&quot; width=&quot;800&quot; onerror=&quot;this.onerror=null; this.src='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png'; this.srcset='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png';&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;/p&gt;
&lt;p&gt;이후 하드웨어 테스트를 돌린다음 모든 것이 정상임을 확인하고, 정상적인 사용이 가능했다.&lt;/p&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;정말 한 번쯤은 해볼만 하지만 두 번은 하지 않았으면 하는 경험이었지 않나 싶다.&amp;nbsp;&amp;nbsp;&lt;/p&gt;</description>
      <category>개발 일기</category>
      <category>맥북</category>
      <category>배터리 교체</category>
      <category>자가교체</category>
      <category>자가수리</category>
      <author>hazimenya</author>
      <guid isPermaLink="true">https://stories2.tistory.com/21</guid>
      <comments>https://stories2.tistory.com/entry/%EB%A7%A5%EB%B6%81-%EB%B0%B0%ED%84%B0%EB%A6%AC-%EC%9E%90%EA%B0%80%EA%B5%90%EC%B2%B4%EA%B8%B0#entry21comment</comments>
      <pubDate>Mon, 26 Aug 2019 21:55:34 +0900</pubDate>
    </item>
    <item>
      <title>강남대학교 달구지봇 개발기</title>
      <link>https://stories2.tistory.com/entry/%EA%B0%95%EB%82%A8%EB%8C%80%ED%95%99%EA%B5%90-%EB%8B%AC%EA%B5%AC%EC%A7%80%EB%B4%87-%EA%B0%9C%EB%B0%9C%EA%B8%B0</link>
      <description>&lt;p&gt;달구지봇을&amp;nbsp;개발한지 어느덧 1년이 지났다. 진짜 별에 별일 들이 다 있었지만 언제나 사용해주는 학우들이 있었기에 유지할 수 있었던 것 같다. 그런 날들을 한번 회상해보고자 글을 작성하였다.&lt;/p&gt;&lt;p&gt;&lt;br /&gt;&lt;/p&gt;&lt;h2&gt;왜 이름이 달구지봇?&lt;/h2&gt;&lt;p&gt;학교에서 제공하는 무료 셔틀버스가 있는데 그걸 학우들은 달구지라고 부른다. 이유는 잘 모르겠지만. 아무튼 달구지는 시간표에 정해진 시간대로 운행해왔고, 난 그 시간표를 카카오톡 채팅 봇으로 알려주면 좋겠다 싶어 개발하게 되었다.&amp;nbsp;&lt;/p&gt;&lt;p&gt;근데 늘 그래왔듯 네이밍 센스가 없는 것 + 국어 딸림 크리가 곂치면서 달구지봇 이라는 이름이 지어지게 되었다.&lt;/p&gt;&lt;p&gt;&lt;br /&gt;&lt;/p&gt;&lt;p&gt;&lt;i&gt;PS. 더 좋은 이름이 있다면 언제든 제보 바란다. 맘 같아선 바꾸고 싶음&lt;/i&gt;&lt;/p&gt;&lt;p&gt;&lt;i&gt;&lt;br /&gt;&lt;/i&gt;&lt;/p&gt;&lt;h2&gt;버전별 달구지봇&amp;nbsp;&lt;/h2&gt;&lt;h3&gt;VER. 1.0&lt;/h3&gt;&lt;div&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: 400px;  height: auto; max-width: 100%;&quot;&gt;&lt;img src=&quot;https://t1.daumcdn.net/cfile/tistory/994710365C661B9109&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Ft1.daumcdn.net%2Fcfile%2Ftistory%2F994710365C661B9109&quot; width=&quot;400&quot; height=&quot;684&quot; filename=&quot;IMG_0236.jpg&quot; filemime=&quot;image/jpeg&quot;/&gt;&lt;/span&gt;&lt;/p&gt;&lt;p&gt;정말 기능이라고는 3가지만 존재했던 첫 버전이다. 단순 그 자체일 뿐더러 전체 달구지 시간표 안내는 사진이 아닌 텍스트로 출력을 했었으니 일반적으로 사람이 쓰기엔 조금 무리가 있던 버전이다.&amp;nbsp;&lt;br /&gt;&lt;/p&gt;&lt;p&gt;그래도 뭔가 만들어 냈었으니 홍보를 해볼겸 실제로 걍 보이는 쌩판 안면없던 학우들에게 써보라고 어떻냐고 물어보기도 했다. 역시 반응은 처참했다. 아직도 기억에 남는 피드백들인데&amp;nbsp;&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;p&gt;- ㅄ&lt;/p&gt;&lt;p&gt;&lt;br /&gt;&lt;/p&gt;&lt;p&gt;음... 다 팩트라서 반박은 못 했다.&amp;nbsp;&lt;/p&gt;&lt;p&gt;그래도 홍보를 꾸준히 하면서 업데이트를 지속해나갔다. 걍 밀어 부치자 식으로 하다보니&lt;/p&gt;&lt;p&gt;&lt;br /&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: 640px;  height: auto; max-width: 100%;&quot;&gt;&lt;img src=&quot;https://t1.daumcdn.net/cfile/tistory/9981E2345C661DAE0B&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Ft1.daumcdn.net%2Fcfile%2Ftistory%2F9981E2345C661DAE0B&quot; width=&quot;640&quot; height=&quot;480&quot; filename=&quot;KakaoTalk_Photo_2018-05-11-19-13-56.jpg&quot; filemime=&quot;image/jpeg&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;저 발표를 할 당시엔 500+ 친구추가가 되었고 좀 더 매력적인 기능을 구현하기 위해 달구지 실시간 위치 안내를 구현 준비 중이었다. 다행이도 교수님들이 이쁘게 봐주셔서 최우수를 수상할 수 있었고, 이 덕분에 계속 업데이트를 할 수 있게되었다.&lt;/p&gt;&lt;p&gt;&lt;br /&gt;&lt;/p&gt;&lt;/div&gt;&lt;h3&gt;VER. 2.0&lt;/h3&gt;&lt;p&gt;하지만 지속적으로 문제가 되던 부분이 있었다. 뭐 여러 문제가 있었지만, 기술적으로는 퍼포먼스가 문제였다. 당시 Firebase Functions 가 BETA 서비스 였고, 지역도 미국에 있었기 때문에 뭐 조금만 무거운 작업이 들어가면 카카오톡의 응답 제한시간인 5초를 넘겼다. 유지보수도 문제였다. 처음 짜보는 챗봇인데다가 Node.js가 익숙하지 않았기 때문에 되게 지금봐도 이상하다.&lt;/p&gt;&lt;p&gt;&lt;br /&gt;&lt;/p&gt;&lt;p&gt;망할&lt;/p&gt;&lt;p&gt;&lt;br /&gt;&lt;/p&gt;&lt;p&gt;그래서 방학기간동안 구조를 갈아엎게된다.&amp;nbsp;&lt;/p&gt;&lt;p&gt;&lt;br /&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: 580px;  height: auto; max-width: 100%;&quot;&gt;&lt;img src=&quot;https://t1.daumcdn.net/cfile/tistory/99611F385C661F2C0D&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Ft1.daumcdn.net%2Fcfile%2Ftistory%2F99611F385C661F2C0D&quot; width=&quot;580&quot; height=&quot;1709&quot; filename=&quot;STD.jpg&quot; filemime=&quot;image/jpeg&quot;/&gt;&lt;/span&gt;&lt;/p&gt;&lt;p&gt;이 사진이 뭘까 싶을지도 모른다. 바로 달구지봇 2.0 개발당시 사용자 상태 변화 시나리오를 그래프로 작성해둔 것 이다.&lt;/p&gt;&lt;p&gt;이게 되게 중요한 사건이었는데, 1.0 버전은 사용자 입력에 따른 단순 응답이었다면 2.0 버전은 사용자 상태에 따른 응답이기 때문이다.&lt;/p&gt;&lt;p&gt;&lt;/p&gt;&lt;p&gt;이로써 생기는 이득이 많았는데, 일단 저 상태를 처리할 엔진을 만들면 왠만한 응답은 서버가 알아서 상태를 확인해 응답을 자동으로 해주었다. 그리고, 무엇보다도 빠르고 다양한 기능을 관리하기가 쉬워졌다. 당연하게도 사용자가 진행할 루트가 다 결정적이고 예상되었으니깐.&lt;/p&gt;&lt;p&gt;게다가 OpenAPI를 적극 활용하기도 하였다.&amp;nbsp;&lt;/p&gt;&lt;p&gt;&lt;br /&gt;&lt;/p&gt;&lt;p style=&quot;text-align: left; clear: none; float: none;&quot;&gt;&lt;span class=&quot;imageblock&quot; style=&quot;display: inline-block; width: 400px;  height: auto; max-width: 100%;&quot;&gt;&lt;img src=&quot;https://t1.daumcdn.net/cfile/tistory/99DD43335C66207912&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Ft1.daumcdn.net%2Fcfile%2Ftistory%2F99DD43335C66207912&quot; width=&quot;400&quot; height=&quot;711&quot; filename=&quot;IMG_1568.PNG&quot; filemime=&quot;image/jpeg&quot;/&gt;&lt;/span&gt;&lt;span class=&quot;imageblock&quot; style=&quot;display: inline-block; width: 400px; text-align: center;; height: auto; max-width: 100%;&quot;&gt;&lt;img src=&quot;https://t1.daumcdn.net/cfile/tistory/999560335C66207A0E&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Ft1.daumcdn.net%2Fcfile%2Ftistory%2F999560335C66207A0E&quot; width=&quot;400&quot; height=&quot;711&quot; filename=&quot;IMG_1569.PNG&quot; filemime=&quot;image/jpeg&quot; style=&quot;text-align: center;&quot;/&gt;&lt;/span&gt;&lt;/p&gt;&lt;p&gt;&lt;br /&gt;&lt;/p&gt;&lt;p&gt;그래서 만들어진 모습이 이렇게.&amp;nbsp;&lt;/p&gt;&lt;p&gt;&lt;br /&gt;&lt;/p&gt;&lt;p&gt;1.0 에서 모인 로그데이터를 활용하여 달구지가 혼잡함을 알리는 기능도 추가되어있다. 으썸하지 않나? 달구지봇 홈페이지에서는 달구지 실시간 위치 안내 기능도 제공했었다. 이렇게 가끔 기능 추가도 해주고, 유지만 하면 될줄 알았다.&lt;/p&gt;&lt;h3&gt;VER. 3.0&lt;/h3&gt;&lt;p&gt;3.0은 이미 만들어 놓은 챗봇에게 심폐소생술을 하기위한 버전이라 봐도 무방할 것 같다. 왜냐?&amp;nbsp;&lt;/p&gt;&lt;p&gt;&lt;br /&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: 640px;  height: auto; max-width: 100%;&quot;&gt;&lt;img src=&quot;https://t1.daumcdn.net/cfile/tistory/9983383B5C6621A611&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Ft1.daumcdn.net%2Fcfile%2Ftistory%2F9983383B5C6621A611&quot; width=&quot;640&quot; height=&quot;561&quot; filename=&quot;992F1E385C5D0FAA1F.jpg&quot; filemime=&quot;image/jpeg&quot;/&gt;&lt;/span&gt;&lt;/p&gt;&lt;p&gt;카카오톡에서 챗봇 정책을 변경했기 때문이다. 이해가 안된다면 간단하다, 기존 방식을 호환도 안되게 업데이트 해놓고선 2019-12 말 까지 업뎃 안하면 서비스 못하게 한다는 정책을 폈기 때문이다. 때문에 서비스를 포기하는 챗봇이 많이 나오기 시작했다.&lt;/p&gt;&lt;p&gt;&lt;br /&gt;&lt;/p&gt;&lt;p style=&quot;text-align: left; clear: none; float: none;&quot;&gt;&lt;span class=&quot;imageblock&quot; style=&quot;display: inline-block; width: 400px;  height: auto; max-width: 100%;&quot;&gt;&lt;img src=&quot;https://t1.daumcdn.net/cfile/tistory/99CCBB395C66227D0B&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Ft1.daumcdn.net%2Fcfile%2Ftistory%2F99CCBB395C66227D0B&quot; width=&quot;400&quot; height=&quot;710&quot; filename=&quot;IMG_1580.PNG&quot; filemime=&quot;image/jpeg&quot;/&gt;&lt;/span&gt;&lt;span class=&quot;imageblock&quot; style=&quot;display: inline-block; width: 400px; text-align: center;; height: auto; max-width: 100%;&quot;&gt;&lt;img src=&quot;https://t1.daumcdn.net/cfile/tistory/9948A6395C66227D0F&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Ft1.daumcdn.net%2Fcfile%2Ftistory%2F9948A6395C66227D0F&quot; width=&quot;400&quot; height=&quot;711&quot; filename=&quot;IMG_1581.PNG&quot; filemime=&quot;image/jpeg&quot; style=&quot;text-align: center;&quot;/&gt;&lt;/span&gt;&lt;/p&gt;&lt;p style=&quot;text-align: left; 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;다른학교의 챗봇들이 서비스 중단하는 예시들이다. 정말 큰 업데이트였음을 짐작할 수 있다. 나도 물론 포기하려했다. 아니 2.0에서 만든 기능만 해도 얼마나 많고, 1.0에서 2.0 으로 업데이트한지 반년밖에 안되었는데 또 갈아엎어야 하다니, 더군다나 이젠 구글 크래딧 지원도 만료되서 운영비 모두 본인이 부담해야 되는데 어떻게 유지를 하나 싶었다.&lt;/p&gt;&lt;p style=&quot;text-align: left; 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;그러다 가만 생각해보니 업데이트를 해야할 이유가 생각이 났다. 달구지봇을 졸업과제로 쓰는건 어떨까? 은근 괜찮게 통할 것 같았다. 또한 친구 추가도 당시 1000+ 되었던걸로 기억하는데 주변에서 연락이 오기 시작했다. 계속 서비스 할꺼냐고&lt;/p&gt;&lt;p style=&quot;text-align: left; 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;/p&gt;&lt;p style=&quot;text-align: left; clear: none; float: none;&quot;&gt;바로 Kakao i open builder OBT 신청 하고 다시 개발을 시작했다. 이번엔 프로젝트를 통째로 갈아 엎었다. 진짜 전부 다 밑바닥 부터&amp;nbsp;&lt;/p&gt;&lt;p style=&quot;text-align: left; 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;엔진은 2.0 버전을 기반으로 약간 수정하고, 카카오톡에서 챗봇에게 주는 이쁜 컴포넌트를 사용하는데 초점을 두고 개발했다.&lt;/p&gt;&lt;p style=&quot;text-align: left; clear: none; float: none;&quot;&gt;&lt;span class=&quot;imageblock&quot; style=&quot;display: inline-block; width: 400px;  height: auto; max-width: 100%;&quot;&gt;&lt;img src=&quot;https://t1.daumcdn.net/cfile/tistory/996392385C66263419&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Ft1.daumcdn.net%2Fcfile%2Ftistory%2F996392385C66263419&quot; width=&quot;400&quot; height=&quot;711&quot; filename=&quot;IMG_1630.PNG&quot; filemime=&quot;image/jpeg&quot;/&gt;&lt;/span&gt;&lt;span class=&quot;imageblock&quot; style=&quot;display: inline-block; width: 400px; text-align: center;; height: auto; max-width: 100%;&quot;&gt;&lt;img src=&quot;https://t1.daumcdn.net/cfile/tistory/99581C385C66263413&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Ft1.daumcdn.net%2Fcfile%2Ftistory%2F99581C385C66263413&quot; width=&quot;400&quot; height=&quot;710&quot; filename=&quot;IMG_1629.PNG&quot; filemime=&quot;image/jpeg&quot; style=&quot;text-align: center;&quot;/&gt;&lt;/span&gt;&lt;/p&gt;&lt;p style=&quot;text-align: left; 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;일단은 만들어졌다. 3.0을 배포하였으니 이젠 사용자들의 피드백이 오는걸 기다리고 있으면 된다.&amp;nbsp;&lt;/p&gt;&lt;p style=&quot;text-align: left; clear: none; float: none;&quot;&gt;2.0 버전보단 확실히 기능이 적다. 기간이 많이 소요되는 부분이 있었는데 달구지봇 관리자 페이지가 추가되었기 때문이다. 기존에는 데이터를 수정하려면 늘 DB에 직접 들어가서 값을 바꿔주었다. 이젠 관리를 혼자서 하지 않을 뿐더러 DB에 직접 접근해 수정하는건 누가봐도 이상하기 때문에 추가를 했다.&lt;/p&gt;&lt;p style=&quot;text-align: left; clear: none; float: none;&quot;&gt;이렇게 달구지봇 1주년을 맞이하게되었다. 아니 뭐 대단한 프로그램도 아닌데 판 뒤집기를 3번이나 했다. 뭐 그래도 유지 하려면 언젠간은 또 뒤집을 수도 있겠지. 그래도 지금 또 돌아보면 무슨 정신으로 했었는지 기가 막히기도 한다.&amp;nbsp;&lt;/p&gt;</description>
      <category>개발 일기/카카오톡 챗봇</category>
      <category>Kakao i open builder</category>
      <category>강남대학교</category>
      <category>강남대학교 챗봇</category>
      <category>달구지</category>
      <category>달구지봇</category>
      <category>셔틀버스</category>
      <category>챗봇</category>
      <category>카카오 아이 오픈 빌더</category>
      <category>카카오톡 챗봇</category>
      <author>hazimenya</author>
      <guid isPermaLink="true">https://stories2.tistory.com/4</guid>
      <comments>https://stories2.tistory.com/entry/%EA%B0%95%EB%82%A8%EB%8C%80%ED%95%99%EA%B5%90-%EB%8B%AC%EA%B5%AC%EC%A7%80%EB%B4%87-%EA%B0%9C%EB%B0%9C%EA%B8%B0#entry4comment</comments>
      <pubDate>Fri, 15 Feb 2019 11:39:42 +0900</pubDate>
    </item>
    <item>
      <title>HTTPS 검열 뚫어보기</title>
      <link>https://stories2.tistory.com/entry/HTTPS-%EA%B2%80%EC%97%B4-%EB%9A%AB%EC%96%B4%EB%B3%B4%EA%B8%B0</link>
      <description>&lt;p style=&quot;text-align: left; clear: none; float: none;&quot;&gt;최근 HTTPS 검열로 인해 급 이슈가 되었습니다.&amp;nbsp;&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: 781px;  height: auto; max-width: 100%;&quot;&gt;&lt;img src=&quot;https://t1.daumcdn.net/cfile/tistory/9961F9485C63D34731&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Ft1.daumcdn.net%2Fcfile%2Ftistory%2F9961F9485C63D34731&quot; width=&quot;781&quot; height=&quot;1066&quot; filename=&quot;주석 2019-02-13 171951.jpg&quot; filemime=&quot;image/jpeg&quot;/&gt;&lt;/span&gt;&lt;/p&gt;&lt;p&gt;&lt;br /&gt;&lt;/p&gt;&lt;p&gt;일부 사이트들이 접근금지되었고 처음에는 당황스러웠는데요.&amp;nbsp;&lt;/p&gt;&lt;p&gt;하지만 역시 인터넷&amp;nbsp;검열을 우회하는 여러 방법들이 바로바로 나오기 시작합니다. ESNI 를 사용하라던지, Firefox 브라우저를 이용하라던지 뭐 방법이 많이 나왔죠. 이쯤되면 이미 검열을 피했다고 봐도 무방할 정도인 마당입니다.&lt;/p&gt;&lt;p&gt;&lt;br /&gt;&lt;/p&gt;&lt;h3&gt;저희는 이런 검열피하기에 기름을 부어보려합니다. 와우!&lt;/h3&gt;&lt;p&gt;&lt;br /&gt;&lt;/p&gt;&lt;p&gt;- 다만 &lt;b&gt;아주 바보같고 멍청한 방식인 것이 아쉽지만&lt;/b&gt;, 개념은 간단합니다.&lt;/p&gt;&lt;p&gt;&lt;br /&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: 576px;  height: auto; max-width: 100%;&quot;&gt;&lt;img src=&quot;https://t1.daumcdn.net/cfile/tistory/993845355C63D63B07&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Ft1.daumcdn.net%2Fcfile%2Ftistory%2F993845355C63D63B07&quot; width=&quot;576&quot; height=&quot;731&quot; filename=&quot;Untitled Diagram-Page-3.jpg&quot; filemime=&quot;image/jpeg&quot;/&gt;&lt;/span&gt;&lt;/p&gt;&lt;p&gt;현재 국내에서 DNS 쿼리를 날리면 모두 검열을 당하니 나를 대신해서 웹사이트 데이터를 가져와 줄 서버가 존재하면 됩니다.&lt;br /&gt;&lt;/p&gt;&lt;p&gt;&lt;br /&gt;&lt;/p&gt;&lt;p&gt;예를 들어 naver.com 의 웹사이트 데이터를 검열을 피해 대신 가져오고자 할 경우&lt;/p&gt;&lt;p&gt;해외에 존재하는 API 서버에게 가져올 주소를 쿼리로 날립니다.&lt;/p&gt;&lt;p&gt;&lt;br /&gt;&lt;/p&gt;&lt;p&gt;&lt;/p&gt;&lt;pre class=&quot;lang-js&quot;&gt;&lt;code&gt;https://{해외 API 서버 ENDPOINT}?url=https://naver.com&lt;/code&gt;&lt;/pre&gt;&lt;br /&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 style=&quot;text-align: center; clear: none; float: none;&quot;&gt;&lt;span class=&quot;imageblock&quot; style=&quot;display: inline-block; width: 632px;  height: auto; max-width: 100%;&quot;&gt;&lt;img src=&quot;https://t1.daumcdn.net/cfile/tistory/9944FD435C63D96E33&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Ft1.daumcdn.net%2Fcfile%2Ftistory%2F9944FD435C63D96E33&quot; width=&quot;632&quot; height=&quot;308&quot; filename=&quot;주석 2019-02-13 174551.jpg&quot; filemime=&quot;image/jpeg&quot;/&gt;&lt;/span&gt;&lt;/p&gt;&lt;p&gt;대신 가져온 웹사이트 데이터를 압축 해제한 모습&lt;/p&gt;&lt;p&gt;&lt;br /&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: 820px;  height: auto; max-width: 100%;&quot;&gt;&lt;img src=&quot;https://t1.daumcdn.net/cfile/tistory/990F5C4A5C63D98B0A&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Ft1.daumcdn.net%2Fcfile%2Ftistory%2F990F5C4A5C63D98B0A&quot; width=&quot;820&quot; height=&quot;625&quot; filename=&quot;주석 2019-02-13 174621.jpg&quot; filemime=&quot;image/jpeg&quot;/&gt;&lt;/span&gt;&lt;/p&gt;&lt;p&gt;&lt;br /&gt;&lt;/p&gt;&lt;p&gt;가져온 웹사이트 데이터의 index.html을 열어본 모습&lt;/p&gt;&lt;p&gt;물론 모든 웹사이트가 정상적으로 불러와지진 않습니다만 급할땐 요긴하겠죠?&lt;/p&gt;</description>
      <category>개발 일기/이것 저것</category>
      <category>esni</category>
      <category>https</category>
      <category>https 검열</category>
      <category>https 차단</category>
      <category>SNI</category>
      <category>검열</category>
      <category>우회</category>
      <category>차단</category>
      <author>hazimenya</author>
      <guid isPermaLink="true">https://stories2.tistory.com/3</guid>
      <comments>https://stories2.tistory.com/entry/HTTPS-%EA%B2%80%EC%97%B4-%EB%9A%AB%EC%96%B4%EB%B3%B4%EA%B8%B0#entry3comment</comments>
      <pubDate>Wed, 13 Feb 2019 17:56:55 +0900</pubDate>
    </item>
    <item>
      <title>카카오톡 아이 오픈 빌더를 이용한 번역 봇 제작기</title>
      <link>https://stories2.tistory.com/entry/%EC%B9%B4%EC%B9%B4%EC%98%A4%ED%86%A1-%EC%95%84%EC%9D%B4-%EC%98%A4%ED%94%88-%EB%B9%8C%EB%8D%94%EB%A5%BC-%EC%9D%B4%EC%9A%A9%ED%95%B4-%EB%B2%88%EC%97%AD-%EB%B4%87-%EB%A7%8C%EB%93%A4%EA%B8%B0</link>
      <description>&lt;p&gt;본 게시물은&amp;nbsp;Kakao i open builder 를 이용하여 언어 번역 채팅 봇을 제작 하는 과정을 일기 형태로 작성하였습니다.&lt;/p&gt;
&lt;p&gt;&lt;br /&gt;&lt;/p&gt;&lt;h1&gt;시작하기 앞서 불평불만&lt;/h1&gt;&lt;p&gt;&lt;br /&gt;&lt;/p&gt;
&lt;p&gt;Kakao i open builder의 OBT 시작은 기존 스마트 API 형 채팅봇에게 시한부 선고를 내리는 말과 같았습니다. 지금 이 글을 작성하고 있는 필자도 OBT 이전부터 서비스를 이미 해왔고, 유지보수에만 신경쓰고 있었습니다.&lt;/p&gt;
&lt;p&gt;당시 운영했던 서비스 Github 링크&amp;nbsp;&lt;a href=&quot;https://github.com/stories2/KangnamShuttle&quot; target=&quot;_blank&quot; class=&quot;tx-link&quot;&gt;https://github.com/stories2/KangnamShuttle&lt;/a&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: 820px;  height: auto; max-width: 100%;&quot;&gt;&lt;img src=&quot;https://t1.daumcdn.net/cfile/tistory/992F1E385C5D0FAA1F&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Ft1.daumcdn.net%2Fcfile%2Ftistory%2F992F1E385C5D0FAA1F&quot; width=&quot;820&quot; height=&quot;720&quot; filename=&quot;주석 2019-02-08 140812.jpg&quot; filemime=&quot;image/jpeg&quot;/&gt;&lt;/span&gt;&lt;/p&gt;
&lt;p style=&quot;text-align: left; clear: none; float: none;&quot;&gt;하지만 위와 같이 카카오톡 챗봇에 중대 업데이트가 올라 왔고, 2019년 말 까지 새로운 형태의 카카오톡 챗봇 서비스를 도입하지 않으면 서비스 중단이라는 공지까지 하면서 어쩔 수 없이 추가 개발을 해야 되는 상황이 되었습니다. 그래도 기존 API 형태랑 많이 다르지 않을 것이라 기대 했던 부분은 새로운 API 스펙을 보자 물거품이 되어버렸고, 다시 처음부터 프로젝트를 새로 만들는게 더 이득이라 생각될 정도였습니다.&lt;/p&gt;
&lt;p style=&quot;text-align: left; clear: none; float: none;&quot;&gt;다행이도 지금은 어느정도 지지고 볶은 덕분에 현재는 어느정도 서비스를 복구 할 수 있었습니다.&lt;/p&gt;
&lt;p style=&quot;text-align: left; clear: none; float: none;&quot;&gt;&amp;nbsp;&lt;a href=&quot;https://github.com/stories2/KangnamShuttle-3.0&quot; target=&quot;_blank&quot; class=&quot;tx-link&quot;&gt;https://github.com/stories2/KangnamShuttle-3.0&lt;/a&gt;&lt;/p&gt;
&lt;p style=&quot;text-align: left; clear: none; float: none;&quot;&gt;&lt;br /&gt;&lt;/p&gt;&lt;h1&gt;번역 채팅 봇 제작기&lt;/h1&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;어찌되었든 우리는 다시 채팅 봇을 제작할 것입니다.&amp;nbsp;&lt;/div&gt;&lt;div&gt;주제는... 언어 번역을 해주는 봇이 괜찮겠군요.&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;h2&gt;들어가기 앞서&lt;/h2&gt;&lt;div&gt;- OBT 승인된 계정이 준비되어야 합니다.&lt;/div&gt;&lt;div&gt;- 필자가 사용하던 챗봇 소스 템플릿에서 약간의 커스텀 마이징만 할 예정입니다.&lt;/div&gt;&lt;div&gt;- 모든 소스 내용은&amp;nbsp;&lt;a href=&quot;https://github.com/stories2/Kakao-Translate&quot; target=&quot;_blank&quot; class=&quot;tx-link&quot;&gt;https://github.com/stories2/Kakao-Translate&lt;/a&gt;&amp;nbsp;여기서 확인 할 수 있습니다.&lt;/div&gt;&lt;div&gt;- Kakao i open builder 의 무수히 많은 기능들 중 일부만 이용할 것 입니다.&lt;/div&gt;&lt;div&gt;- Kakao plus 계정이 준비되어 있어야 합니다.&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;h2&gt;사용할 서비스 / 기술&lt;/h2&gt;&lt;div&gt;- Firebase functions, realtime-database&amp;nbsp;&lt;a href=&quot;https://firebase.google.com/&quot; target=&quot;_blank&quot; class=&quot;tx-link&quot;&gt;https://firebase.google.com/&lt;/a&gt;&lt;/div&gt;&lt;div&gt;- NodeJS ver6.11.5&lt;/div&gt;&lt;div&gt;- NPM ver3.10.10&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;h2&gt;완성된 모습 미리보기&lt;/h2&gt;&lt;div&gt;&lt;p style=&quot;text-align: center; clear: none; float: none;&quot;&gt;&lt;br /&gt;&lt;/p&gt;
&lt;p&gt;&lt;/p&gt;
&lt;p style=&quot;text-align: left; clear: none; float: none;&quot;&gt;&lt;/p&gt;
&lt;p style=&quot;text-align: left; clear: none; float: none;&quot;&gt;&lt;span class=&quot;imageblock&quot; style=&quot;display: inline-block; width: 400px;  height: auto; max-width: 100%;&quot;&gt;&lt;img src=&quot;https://t1.daumcdn.net/cfile/tistory/99EB013E5C5D269006&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Ft1.daumcdn.net%2Fcfile%2Ftistory%2F99EB013E5C5D269006&quot; width=&quot;400&quot; height=&quot;711&quot; filename=&quot;KakaoClientIntro.PNG&quot; filemime=&quot;image/jpeg&quot;/&gt;&lt;/span&gt;&lt;span class=&quot;imageblock&quot; style=&quot;display: inline-block; width: 400px;  height: auto; max-width: 100%;&quot;&gt;&lt;img src=&quot;https://t1.daumcdn.net/cfile/tistory/9969A63A5C5D267738&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Ft1.daumcdn.net%2Fcfile%2Ftistory%2F9969A63A5C5D267738&quot; width=&quot;400&quot; height=&quot;711&quot; filename=&quot;KakaoClientJp.PNG&quot; filemime=&quot;image/jpeg&quot;/&gt;&lt;/span&gt;&lt;/p&gt;
&lt;p style=&quot;text-align: left; 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;u&gt;번역을 부탁해~!&lt;/u&gt;&amp;nbsp;버튼을 제네릭 메뉴라고 합니다. 제네릭 메뉴를 누르면 유저에게 어떤 언어로 번역을 할 것 인지 선택할 수 있는 퀵 메뉴를 제공할 것입니다.&lt;/p&gt;
&lt;p style=&quot;text-align: left; clear: none; float: none;&quot;&gt;또한 퀵 메뉴 (한국어, 영어, 일본어) 를 눌렀을 시 해당 언어로 번역을 시작한다는 문구를 보여주며, 이 문구 이후 부터 사용자가 입력하는 내용을 번역해줍니다.&lt;/p&gt;
&lt;p style=&quot;text-align: left; clear: none; float: none;&quot;&gt;번역을 마치고 싶을 땐 2가지 방법이 주어지는데 퀵 메뉴 (홈) 을 누르거나 제네릭 메뉴 (번역을 부탁해~!) 를 누를 시 초기 메뉴인 번역 될 언어 선택 상태로 돌아오게끔 합니다.&lt;/p&gt;
&lt;p style=&quot;text-align: left; 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;/p&gt;
&lt;p style=&quot;text-align: left; 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;br /&gt;&lt;/p&gt;&lt;h2&gt;TODO&lt;/h2&gt;&lt;div&gt;어떤 내용을 만들지 목표가 정해졌으니 해야할 일을 정리하려 합니다.&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&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: 257px; height: 24px; border-width: 1px; border-style: solid; border-color: rgb(204, 204, 204);&quot;&gt;&lt;p style=&quot;text-align: center;&quot;&gt;&amp;nbsp;할일&lt;/p&gt;&lt;/td&gt;
&lt;td style=&quot;width: 414px; height: 24px; border-bottom: 1px solid rgb(204, 204, 204); border-right: 1px solid rgb(204, 204, 204); border-top: 1px solid rgb(204, 204, 204);&quot;&gt;&lt;p style=&quot;text-align: center;&quot;&gt;내용&lt;/p&gt;&lt;/td&gt;
&lt;td style=&quot;width: 111px; height: 24px; border-bottom: 1px solid rgb(204, 204, 204); border-right: 1px solid rgb(204, 204, 204); border-top: 1px solid rgb(204, 204, 204);&quot;&gt;&lt;p style=&quot;text-align: center;&quot;&gt;비고&amp;nbsp;&lt;/p&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;&lt;td style=&quot;width: 257px; height: 24px; border-bottom: 1px solid rgb(204, 204, 204); border-right: 1px solid rgb(204, 204, 204); border-left: 1px solid rgb(204, 204, 204);&quot;&gt;&lt;p&gt;&amp;nbsp;Kakao plus 프로필 만들기&lt;/p&gt;&lt;/td&gt;
&lt;td style=&quot;width: 414px; height: 24px; border-bottom: 1px solid rgb(204, 204, 204); border-right: 1px solid rgb(204, 204, 204);&quot;&gt;&lt;p&gt;&amp;nbsp;사용자가 카카오에서 채팅을 할 프로필 생성&lt;/p&gt;&lt;/td&gt;
&lt;td style=&quot;width: 111px; height: 24px; border-bottom: 1px solid rgb(204, 204, 204); border-right: 1px solid rgb(204, 204, 204);&quot;&gt;&lt;p&gt;&amp;nbsp;&lt;/p&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;&lt;td style=&quot;width: 257px; height: 24px; border-bottom: 1px solid rgb(204, 204, 204); border-right: 1px solid rgb(204, 204, 204); border-left: 1px solid rgb(204, 204, 204);&quot;&gt;&lt;p&gt;&amp;nbsp;Kakao i open builder 프로필 만들기&lt;/p&gt;&lt;/td&gt;
&lt;td style=&quot;width: 414px; height: 24px; border-bottom: 1px solid rgb(204, 204, 204); border-right: 1px solid rgb(204, 204, 204);&quot;&gt;&lt;p&gt;&amp;nbsp;챗봇을 만들기 위한 프로필 생성&lt;/p&gt;&lt;/td&gt;
&lt;td style=&quot;width: 111px; height: 24px; border-bottom: 1px solid rgb(204, 204, 204); border-right: 1px solid rgb(204, 204, 204);&quot;&gt;&lt;p&gt;&amp;nbsp;&lt;/p&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;&lt;td style=&quot;width: 257px; height: 24px; border-bottom: 1px solid rgb(204, 204, 204); border-right: 1px solid rgb(204, 204, 204); border-left: 1px solid rgb(204, 204, 204);&quot;&gt;&lt;p&gt;&amp;nbsp;Firebase 프로젝트 만들기&lt;/p&gt;&lt;/td&gt;
&lt;td style=&quot;width: 414px; height: 24px; border-bottom: 1px solid rgb(204, 204, 204); border-right: 1px solid rgb(204, 204, 204);&quot;&gt;&lt;p&gt;&amp;nbsp;챗봇 어플리케이션을 호스팅할 프로젝트 생성&lt;/p&gt;&lt;/td&gt;
&lt;td style=&quot;width: 111px; height: 24px; border-bottom: 1px solid rgb(204, 204, 204); border-right: 1px solid rgb(204, 204, 204);&quot;&gt;&lt;p&gt;&amp;nbsp;&lt;/p&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;&lt;td style=&quot;width: 257px; height: 24px; border-bottom: 1px solid rgb(204, 204, 204); border-right: 1px solid rgb(204, 204, 204); border-left: 1px solid rgb(204, 204, 204);&quot;&gt;&lt;p&gt;&amp;nbsp;언어 선택 스킬 응답 만들기&amp;nbsp;&lt;/p&gt;&lt;/td&gt;
&lt;td style=&quot;width: 414px; height: 24px; border-bottom: 1px solid rgb(204, 204, 204); border-right: 1px solid rgb(204, 204, 204);&quot;&gt;&lt;p&gt;&amp;nbsp;사용자가 번역할 언어 선택지를 스킬을 이용해 생성&lt;/p&gt;&lt;/td&gt;
&lt;td style=&quot;width: 111px; height: 24px; border-bottom: 1px solid rgb(204, 204, 204); border-right: 1px solid rgb(204, 204, 204);&quot;&gt;&lt;p&gt;&amp;nbsp;&lt;/p&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;&lt;td style=&quot;width: 257px; height: 24px; border-bottom: 1px solid rgb(204, 204, 204); border-right: 1px solid rgb(204, 204, 204); border-left: 1px solid rgb(204, 204, 204);&quot;&gt;&lt;p&gt;&amp;nbsp;언어 번역 스킬 응답 만들기&lt;/p&gt;&lt;/td&gt;
&lt;td style=&quot;width: 414px; height: 24px; border-bottom: 1px solid rgb(204, 204, 204); border-right: 1px solid rgb(204, 204, 204);&quot;&gt;&lt;p&gt;&amp;nbsp;Google API를 이용하여 사용자가 입력한 내용 번역&lt;/p&gt;&lt;/td&gt;
&lt;td style=&quot;width: 111px; height: 24px; border-bottom: 1px solid rgb(204, 204, 204); border-right: 1px solid rgb(204, 204, 204);&quot;&gt;&lt;p&gt;&amp;nbsp;&lt;/p&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;&lt;td style=&quot;width: 257px; height: 24px; border-bottom: 1px solid rgb(204, 204, 204); border-right: 1px solid rgb(204, 204, 204); border-left: 1px solid rgb(204, 204, 204);&quot;&gt;&lt;p&gt;&amp;nbsp;언어 번역 시나리오 및 블럭 연동&lt;/p&gt;&lt;/td&gt;
&lt;td style=&quot;width: 414px; height: 24px; border-bottom: 1px solid rgb(204, 204, 204); border-right: 1px solid rgb(204, 204, 204);&quot;&gt;&lt;p&gt;&amp;nbsp;스킬과 블럭을 연동시켜 서비스 구현&lt;/p&gt;&lt;/td&gt;
&lt;td style=&quot;width: 111px; height: 24px; border-bottom: 1px solid rgb(204, 204, 204); border-right: 1px solid rgb(204, 204, 204);&quot;&gt;&lt;p&gt;&amp;nbsp;&lt;/p&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;&lt;td style=&quot;width: 257px; height: 24px; border-bottom: 1px solid rgb(204, 204, 204); border-right: 1px solid rgb(204, 204, 204); border-left: 1px solid rgb(204, 204, 204);&quot;&gt;&lt;p&gt;&amp;nbsp;베포 및 테스트&lt;/p&gt;&lt;/td&gt;
&lt;td style=&quot;width: 414px; height: 24px; border-bottom: 1px solid rgb(204, 204, 204); border-right: 1px solid rgb(204, 204, 204);&quot;&gt;&lt;p&gt;&amp;nbsp;사용자에게 직접 서비스&lt;/p&gt;&lt;/td&gt;
&lt;td style=&quot;width: 111px; height: 24px; border-bottom: 1px solid rgb(204, 204, 204); border-right: 1px solid rgb(204, 204, 204);&quot;&gt;&lt;p&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;br /&gt;&lt;/div&gt;&lt;h2&gt;개발 시작!&lt;/h2&gt;&lt;p&gt;본격적으로 개발을 시작하여 봅니다.&lt;/p&gt;
&lt;p&gt;&lt;br /&gt;&lt;/p&gt;&lt;br /&gt;&lt;/div&gt;&lt;h3&gt;Kakao plus 프로필 만들기&lt;/h3&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&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: 820px;  height: auto; max-width: 100%;&quot;&gt;&lt;img src=&quot;https://t1.daumcdn.net/cfile/tistory/99FE46345C5D2BDB1C&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Ft1.daumcdn.net%2Fcfile%2Ftistory%2F99FE46345C5D2BDB1C&quot; width=&quot;820&quot; height=&quot;467&quot; filename=&quot;주석 2019-02-08 161209.jpg&quot; filemime=&quot;image/jpeg&quot;/&gt;&lt;/span&gt;&lt;/p&gt;
&lt;p&gt;&lt;br /&gt;&lt;/p&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;카카오 plus 친구를 만들 수 있는 주소는&amp;nbsp;&lt;a href=&quot;https://business.kakao.com&quot; target=&quot;_blank&quot; class=&quot;tx-link&quot;&gt;https://business.kakao.com&lt;/a&gt;&amp;nbsp;입니다.&lt;/div&gt;&lt;p&gt;시작하기 버튼을 눌러&amp;nbsp;프로필 관리 화면으로 이동할 수 있습니다.&amp;nbsp;&lt;/p&gt;
&lt;p&gt;&lt;br /&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: 820px;  height: auto; max-width: 100%;&quot;&gt;&lt;img src=&quot;https://t1.daumcdn.net/cfile/tistory/992E723D5C5D2C4928&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Ft1.daumcdn.net%2Fcfile%2Ftistory%2F992E723D5C5D2C4928&quot; width=&quot;820&quot; height=&quot;342&quot; filename=&quot;주석 2019-02-08 161341.jpg&quot; filemime=&quot;image/jpeg&quot;/&gt;&lt;/span&gt;&lt;/p&gt;
&lt;p&gt;&lt;br /&gt;&lt;/p&gt;
&lt;p&gt;새 플러스 친구 만들기 버튼을 눌러 새 프로필을 만들게 됩니다.&lt;/p&gt;
&lt;p&gt;&lt;br /&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: 820px;  height: auto; max-width: 100%;&quot;&gt;&lt;img src=&quot;https://t1.daumcdn.net/cfile/tistory/99A2C53D5C5D2C6212&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Ft1.daumcdn.net%2Fcfile%2Ftistory%2F99A2C53D5C5D2C6212&quot; width=&quot;820&quot; height=&quot;465&quot; filename=&quot;CreatePlusFriend.jpg&quot; filemime=&quot;image/jpeg&quot;/&gt;&lt;/span&gt;&lt;/p&gt;
&lt;p style=&quot;text-align: left; clear: none; float: none;&quot;&gt;필수 추가요소 및 프로필 정보를 입력한 후 확인을 누르면 플러스 친구 프로필이 만들어 집니다.&lt;/p&gt;
&lt;p style=&quot;text-align: left; clear: none; float: none;&quot;&gt;&lt;br /&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: 820px;  height: auto; max-width: 100%;&quot;&gt;&lt;img src=&quot;https://t1.daumcdn.net/cfile/tistory/99D384345C5D2CD50C&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Ft1.daumcdn.net%2Fcfile%2Ftistory%2F99D384345C5D2CD50C&quot; width=&quot;820&quot; height=&quot;470&quot; filename=&quot;주석 2019-02-08 161630.jpg&quot; filemime=&quot;image/jpeg&quot;/&gt;&lt;/span&gt;&lt;/p&gt;
&lt;p style=&quot;text-align: left; clear: none; float: none;&quot;&gt;&lt;br /&gt;&lt;/p&gt;
&lt;p&gt;왼쪽 메뉴에서 관리 -&amp;gt; 상세설정 -&amp;gt; 플러스친구 홈&amp;nbsp;&lt;/p&gt;
&lt;p&gt;에서 홈 공개, 검색 허용을 토글하면 카카오 검색시 프로필이 노출될지를 정할 수 있습니다.&lt;/p&gt;
&lt;p&gt;&lt;br /&gt;&lt;/p&gt;&lt;h3&gt;Kakao i open builder 프로필 만들기&lt;/h3&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&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: 820px;  height: auto; max-width: 100%;&quot;&gt;&lt;img src=&quot;https://t1.daumcdn.net/cfile/tistory/99D7A13D5C5D2D7C11&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Ft1.daumcdn.net%2Fcfile%2Ftistory%2F99D7A13D5C5D2D7C11&quot; width=&quot;820&quot; height=&quot;301&quot; filename=&quot;주석 2019-02-08 161911.jpg&quot; filemime=&quot;image/jpeg&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;Kakao i open builder 에서 프로필을 만들기 위해&amp;nbsp;&lt;a href=&quot;https://i.kakao.com/openbuilder&quot; target=&quot;_blank&quot; class=&quot;tx-link&quot;&gt;https://i.kakao.com/openbuilder&lt;/a&gt;&amp;nbsp;로 이동합니다.&lt;/p&gt;
&lt;p style=&quot;text-align: left; clear: none; float: none;&quot;&gt;&lt;br /&gt;&lt;/p&gt;우측상단의 + 버튼을 클릭하여 새 프로필을 만들 수 있습니다. 선택지에서는 카카오톡 챗봇을 선택합니다.&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&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: 820px;  height: auto; max-width: 100%;&quot;&gt;&lt;img src=&quot;https://t1.daumcdn.net/cfile/tistory/990B6C4E5C5D2E7A15&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Ft1.daumcdn.net%2Fcfile%2Ftistory%2F990B6C4E5C5D2E7A15&quot; width=&quot;820&quot; height=&quot;463&quot; filename=&quot;CreateOpenBuilderProject.jpg&quot; filemime=&quot;image/jpeg&quot;/&gt;&lt;/span&gt;&lt;/p&gt;
&lt;p&gt;프로필 이름까지 정하면 위와 같은 화면이 보여지게 됩니다.&lt;/p&gt;
&lt;p&gt;&lt;br /&gt;&lt;/p&gt;
&lt;p&gt;간단한 설정이 필요합니다. 위에서 만들었던 카카오 Plus 프로필과 방금 만든 Kakao i open builder 프로파일을 서로 연결시켜주어야 합니다.&lt;/p&gt;
&lt;p&gt;&lt;br /&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: 820px;  height: auto; max-width: 100%;&quot;&gt;&lt;img src=&quot;https://t1.daumcdn.net/cfile/tistory/990B514C5C5D2FB413&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Ft1.daumcdn.net%2Fcfile%2Ftistory%2F990B514C5C5D2FB413&quot; width=&quot;820&quot; height=&quot;469&quot; filename=&quot;주석 2019-02-08 162445.jpg&quot; filemime=&quot;image/jpeg&quot;/&gt;&lt;/span&gt;&lt;/p&gt;
&lt;p&gt;설정 탭 -&amp;gt; 플러스친구 계정 연결에서 플러스 친구 계정 드롭다운을 눌러 우리가 만들었던 카카오 Plus 프로필을 선택한 후 우측 상단의 저장 버튼을 꼭! 눌러줍니다.&lt;/p&gt;
&lt;p&gt;저장완료 후 다시 카카오 Plus 프로필로 돌아가보겠습니다.&lt;/p&gt;
&lt;p&gt;&lt;br /&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: 820px;  height: auto; max-width: 100%;&quot;&gt;&lt;img src=&quot;https://t1.daumcdn.net/cfile/tistory/99776E4B5C63678E37&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Ft1.daumcdn.net%2Fcfile%2Ftistory%2F99776E4B5C63678E37&quot; width=&quot;820&quot; height=&quot;564&quot; filename=&quot;주석 2019-02-13 094020.jpg&quot; filemime=&quot;image/jpeg&quot;/&gt;&lt;/span&gt;&lt;/p&gt;
&lt;p&gt;&lt;br /&gt;&lt;/p&gt;&lt;/div&gt;&lt;p&gt;카카오 Plus 친구 -&amp;gt; 스마트 채팅 -&amp;gt; 챗봇 매뉴에 들어가면 상단에&amp;nbsp;&lt;/p&gt;
&lt;p&gt;챗봇&lt;/p&gt;
&lt;p&gt;kakaobot ~~~과 연동됨 이라는 상태 표시 문구가 작성되어있습니다. 이때 연동 되었다는 문구가 보인다면 카카오Plus 프로필과 kakao i open builder 프로젝트가 서로 연결이 된 것입니다.&lt;/p&gt;
&lt;p&gt;&lt;br /&gt;&lt;/p&gt;&lt;h3&gt;Firebase 프로젝트 만들기&lt;/h3&gt;&lt;div&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: 820px;  height: auto; max-width: 100%;&quot;&gt;&lt;img src=&quot;https://t1.daumcdn.net/cfile/tistory/9969F54F5C636B1D32&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Ft1.daumcdn.net%2Fcfile%2Ftistory%2F9969F54F5C636B1D32&quot; width=&quot;820&quot; height=&quot;424&quot; filename=&quot;주석 2019-02-13 095541.jpg&quot; filemime=&quot;image/jpeg&quot;/&gt;&lt;/span&gt;&lt;/p&gt;
&lt;p&gt;&lt;a href=&quot;https://console.firebase.google.com/&quot; target=&quot;_blank&quot; class=&quot;tx-link&quot;&gt;https://console.firebase.google.com/&lt;/a&gt;&amp;nbsp;로 접속하여 프로젝트 추가를 눌르면 프로젝트 생성 작업이 시작됩니다.&lt;/p&gt;
&lt;p&gt;&lt;br /&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: 536px;  height: auto; max-width: 100%;&quot;&gt;&lt;img src=&quot;https://t1.daumcdn.net/cfile/tistory/993C09455C636B6E30&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Ft1.daumcdn.net%2Fcfile%2Ftistory%2F993C09455C636B6E30&quot; width=&quot;536&quot; height=&quot;725&quot; filename=&quot;주석 2019-02-13 095705.jpg&quot; filemime=&quot;image/jpeg&quot;/&gt;&lt;/span&gt;&lt;/p&gt;
&lt;p&gt;&lt;br /&gt;&lt;/p&gt;&lt;br /&gt;&lt;/div&gt;&lt;p&gt;프로젝트 이름을 입력하면 자동으로 프로젝트 ID가 작성되며 위치 설정시 서비스할 대상이 위치한 가장 가까운 지역을 선택합니다.&lt;/p&gt;
&lt;p&gt;위치 리스트는&amp;nbsp;&lt;a href=&quot;https://firebase.google.com/docs/functions/locations?hl=ko&quot; target=&quot;_blank&quot; class=&quot;tx-link&quot;&gt;https://firebase.google.com/docs/functions/locations?hl=ko&lt;/a&gt;&amp;nbsp;에서 확인할 수 있습니다.&lt;/p&gt;
&lt;p&gt;이후 동의, 프로젝트 만들기를 눌러주면 됩니다.&lt;/p&gt;
&lt;p&gt;&lt;br /&gt;&lt;/p&gt;
&lt;p&gt;Firebase에서는 많은 서비스를 제공하는데 이번에 사용할 서비스는 다음과 같습니다.&lt;/p&gt;
&lt;p&gt;- Realtime database&lt;/p&gt;
&lt;p&gt;- Cloud functions&lt;/p&gt;
&lt;p&gt;- Hosting (option)&lt;/p&gt;
&lt;p&gt;&lt;br /&gt;&lt;/p&gt;
&lt;p&gt;각각의 서비스의 시작 튜토리얼은 Firebase 에서 제공하고 있으므로 생략하겠습니다.&lt;/p&gt;
&lt;p&gt;또한 외부 네트워크 연결이 필요하므로 Firebase 가격정책상&amp;nbsp;&lt;a href=&quot;https://firebase.google.com/pricing/?hl=ko&quot; target=&quot;_blank&quot; class=&quot;tx-link&quot;&gt;https://firebase.google.com/pricing/?hl=ko&lt;/a&gt;&amp;nbsp;종량제를 사용해야 합니다.&lt;/p&gt;
&lt;p&gt;&lt;br /&gt;&lt;/p&gt;
&lt;p&gt;스킬응답을 위해 미리 개발한 프로젝트를 이용하도록 하겠습니다.&lt;/p&gt;
&lt;p&gt;&lt;br /&gt;&lt;/p&gt;
&lt;p&gt;&lt;a href=&quot;https://github.com/stories2/Kakao-Translate/tree/6df33334a13eae1e91ab91baf4a3cf4eb6abab2f&quot; target=&quot;_blank&quot; class=&quot;tx-link&quot;&gt;https://github.com/stories2/Kakao-Translate/tree/6df33334a13eae1e91ab91baf4a3cf4eb6abab2f&lt;/a&gt;&amp;nbsp;여기에서 프로젝트를 다운받을 수 있습니다.&lt;/p&gt;
&lt;p&gt;해당 프로젝트는 아직 번역 기능이 추가되지 않은 프로젝트입니다.&lt;/p&gt;
&lt;p&gt;&lt;br /&gt;&lt;/p&gt;&lt;h3&gt;스킬 개발 전 Kakao i open builder 응답 처리 형태&lt;/h3&gt;&lt;div&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: 820px;  height: auto; max-width: 100%;&quot;&gt;&lt;img src=&quot;https://t1.daumcdn.net/cfile/tistory/99FE21465C63703637&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Ft1.daumcdn.net%2Fcfile%2Ftistory%2F99FE21465C63703637&quot; width=&quot;820&quot; height=&quot;863&quot; filename=&quot;Untitled Diagram.jpg&quot; filemime=&quot;image/jpeg&quot;/&gt;&lt;/span&gt;&lt;/p&gt;
&lt;p&gt;&lt;br /&gt;&lt;/p&gt;&lt;br /&gt;&lt;/div&gt;&lt;p&gt;Kakao i open builder 에서는 이미 자세한 튜토리얼을 제공하고 있습니다. &lt;a href=&quot;https://i.kakao.com/docs/getting-started-overview#%EC%98%A4%ED%94%88%EB%B9%8C%EB%8D%94-%EC%86%8C%EA%B0%9C&quot; target=&quot;_blank&quot; class=&quot;tx-link&quot;&gt;https://i.kakao.com/docs/getting-started-overview#%EC%98%A4%ED%94%88%EB%B9%8C%EB%8D%94-%EC%86%8C%EA%B0%9C&lt;/a&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;모든 내용을 이해하면 좋지만 쉽게 보면&lt;/p&gt;
&lt;p&gt;- 시나리오에서 블럭을 만들었을 때 하나의 블럭에는 크게 발화와 응답으로 나누어집니다.&lt;/p&gt;
&lt;p&gt;- 발화는 사용자가 카톡을 날리는 행위&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;/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;/p&gt;&lt;h3&gt;스킬 개발 전 프로젝트 구조&lt;/h3&gt;&lt;div&gt;위에서 간단하게 발화, 응답을 형태를 확인하였습니다. 이를 응용하여 번역봇을 만들어 볼텐데 문제가 생깁니다.&lt;/div&gt;&lt;div&gt;번역을 하려면 사용자가 입력하는 모든 내용을 받아들이고 변환해주어야 합니다. 이를 위해서 모든 발화를 쓴다? 말도 안되는 소리지요.&amp;nbsp;&lt;/div&gt;&lt;div&gt;Kakao i open builder 에서는 지정되지 않은 발화가 받아들여졌을 시 폴백 블록이라는 기본 블럭에 도달하게 만들어 줍니다. 이를 응용하면 됩니다.&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&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: 820px;  height: auto; max-width: 100%;&quot;&gt;&lt;img src=&quot;https://t1.daumcdn.net/cfile/tistory/994ABE3A5C6375050A&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Ft1.daumcdn.net%2Fcfile%2Ftistory%2F994ABE3A5C6375050A&quot; width=&quot;820&quot; height=&quot;295&quot; filename=&quot;Untitled Diagram-Page-2.jpg&quot; filemime=&quot;image/jpeg&quot;/&gt;&lt;/span&gt;&lt;/p&gt;
&lt;p&gt;사용자가 발화를 만들어내면 블럭에 따라 처리를 하며, 이때 스킬이 해당 유저의 상태를 저장을 합니다.&lt;/p&gt;
&lt;p&gt;그 상태를 확인 하면서 다음 발화를 만들어 낼 시 이전 상태값을 참고하여 그 결과를 스킬로 만들어 응답하면 동적으로 응답을 구현 할 수 있게됩니다.&lt;br /&gt;&lt;/p&gt;&lt;br /&gt;&lt;/div&gt;&lt;h3&gt;언어 선택 스킬 응답 만들기&amp;nbsp;&lt;/h3&gt;&lt;div&gt;카카오톡에서는 많은 컴포넌트의 응답 형식을 지원하고 있습니다. 우리는 간단하게 구현할 것이기 때문에 simpleText와 quick replies만 사용할 것 입니다.&lt;/div&gt;&lt;div&gt;자세한 내용은&amp;nbsp;&lt;a href=&quot;https://i.kakao.com/docs/skill-response-format#quickreplies-%EB%B0%94%EB%A1%9C%EA%B0%80%EA%B8%B0-%EA%B7%B8%EB%A3%B9&quot; target=&quot;_blank&quot; class=&quot;tx-link&quot;&gt;https://i.kakao.com/docs/skill-response-format#quickreplies-%EB%B0%94%EB%A1%9C%EA%B0%80%EA%B8%B0-%EA%B7%B8%EB%A3%B9&lt;/a&gt;&amp;nbsp;을 참고하면 됩니다.&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;응답을 만들는 과정을 Firebase Realtime database에 기술하고 Firebase Cloud functions 에서는 DB에 정의된 응답을 반환하는 작업과 유저 관리, 번역 로직만을 기술할 것입니다.&lt;/div&gt;&lt;div&gt;&lt;pre class=&quot;line-numbers&quot;&gt;&lt;code class=&quot;language-json&quot;&gt;{
  &quot;actions&quot;: {
    &quot;1&quot;: {
      &quot;nextAction&quot;: [ &quot;1000&quot;, &quot;2000&quot;, &quot;3000&quot; ],
      &quot;quickReplies&quot;: [
        {
          &quot;action&quot;: &quot;message&quot;,
          &quot;label&quot;: &quot; 한국어&quot;,
          &quot;messageText&quot;: &quot;한국어로 번역을 시작해줘&quot;
        },
        {
          &quot;action&quot;: &quot;message&quot;,
          &quot;label&quot;: &quot; 영어&quot;,
          &quot;messageText&quot;: &quot;영어로 번역을 시작해줘&quot;
        },
        {
          &quot;action&quot;: &quot;message&quot;,
          &quot;label&quot;: &quot; 일본어&quot;,
          &quot;messageText&quot;: &quot;일본어로 번역을 시작해줘&quot;
        }
      ],
      &quot;response&quot;: [
        {
          &quot;simpleText&quot;: {
            &quot;text&quot;: &quot;새로운 번역은 언제나 환영이야!&quot;
          }
        }
      ]
    }
  }
}&lt;/code&gt;&lt;/pre&gt;&lt;br /&gt;&lt;/div&gt;&lt;p&gt;Firebase Realtime database 에 다음의 내용을 작성하면 언어 선택 스킬응답은 완료입니다.&amp;nbsp;&lt;/p&gt;
&lt;p&gt;위 내용을 해석하자면 다음과 같습니다.&lt;/p&gt;
&lt;p&gt;&lt;br /&gt;&lt;/p&gt;
&lt;p&gt;- actions: 여러 스킬 응답 탬플릿 액션들을 가지는 object 입니다.&lt;/p&gt;
&lt;p&gt;- 1: 임의로 정의한 action의 고유 번호입니다. 본 과정에선 언어 선택 부분의 스킬응답 고유 번호가 1이 됩니다.&lt;/p&gt;
&lt;p&gt;- nextAction: 퀵 응답을 눌렀을 시 이동할 다음 action의 고유 번호 리스트입니다.&lt;/p&gt;
&lt;p&gt;- quickReplies: 퀵 응답의 object 리스트입니다.&amp;nbsp;&lt;/p&gt;
&lt;p&gt;- response: 스킬 응답 템플릿 object 리스트입니다.&lt;/p&gt;
&lt;p&gt;&lt;br /&gt;&lt;/p&gt;&lt;h3&gt;언어 번역 스킬 응답 만들기&lt;/h3&gt;&lt;div&gt;&lt;pre class=&quot;line-numbers&quot;&gt;&lt;code class=&quot;language-json&quot;&gt;{
  &quot;actions&quot; : {
    &quot;1&quot; : {
      &quot;nextAction&quot; : [ &quot;1000&quot;, &quot;2000&quot;, &quot;3000&quot;],
      &quot;quickReplies&quot; : [ {
        &quot;action&quot; : &quot;message&quot;,
        &quot;label&quot; : &quot; 한국어&quot;,
        &quot;messageText&quot; : &quot;한국어로 번역을 시작해줘&quot;
      }, {
        &quot;action&quot; : &quot;message&quot;,
        &quot;label&quot; : &quot; 영어&quot;,
        &quot;messageText&quot; : &quot;영어로 번역을 시작해줘&quot;
      }, {
        &quot;action&quot; : &quot;message&quot;,
        &quot;label&quot; : &quot; 일본어&quot;,
        &quot;messageText&quot; : &quot;일본어로 번역을 시작해줘&quot;
      } ],
      &quot;response&quot; : [ {
        &quot;simpleText&quot; : {
          &quot;text&quot; : &quot;새로운 번역은 언제나 환영이야!&quot;
        }
      } ]
    },
    &quot;1000&quot; : {
      &quot;lang&quot; : &quot;ko&quot;,
      &quot;nextAction&quot; : [ &quot;1&quot; ],
      &quot;quickReplies&quot; : [ {
        &quot;action&quot; : &quot;message&quot;,
        &quot;label&quot; : &quot; 홈&quot;,
        &quot;messageText&quot; : &quot;다시 메인으로 돌아가줘&amp;nbsp;&quot;
      } ],
      &quot;response&quot; : [ {
        &quot;simpleText&quot; : {
          &quot;text&quot; : &quot;%s&quot;
        }
      }, &quot;다시 홈으로 돌아가욧!&quot; ]
    },
    &quot;2000&quot; : {
      &quot;lang&quot; : &quot;en&quot;,
      &quot;nextAction&quot; : [ &quot;1&quot; ],
      &quot;quickReplies&quot; : [ {
        &quot;action&quot; : &quot;message&quot;,
        &quot;label&quot; : &quot; 홈&quot;,
        &quot;messageText&quot; : &quot;다시 메인으로 돌아가줘&amp;nbsp;&quot;
      } ],
      &quot;response&quot; : [ {
        &quot;simpleText&quot; : {
          &quot;text&quot; : &quot;%s&quot;
        }
      }, &quot;다시 홈으로 돌아가욧!&quot; ]
    },
    &quot;3000&quot; : {
      &quot;lang&quot; : &quot;ja&quot;,
      &quot;nextAction&quot; : [ &quot;1&quot; ],
      &quot;quickReplies&quot; : [ {
        &quot;action&quot; : &quot;message&quot;,
        &quot;label&quot; : &quot; 홈&quot;,
        &quot;messageText&quot; : &quot;다시 메인으로 돌아가줘&amp;nbsp;&quot;
      } ],
      &quot;response&quot; : [ {
        &quot;simpleText&quot; : {
          &quot;text&quot; : &quot;%s&quot;
        }
      }, &quot;다시 홈으로 돌아가욧!&quot; ]
    }
}
&lt;/code&gt;&lt;/pre&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;p&gt;위 내용을 Firebase realtime database에 덮어 씌워주세요.&amp;nbsp;&lt;/p&gt;
&lt;p&gt;이번에는 새로운 action object 와 해당 action object 에 lang 키가 추가되었습니다.&amp;nbsp;&lt;/p&gt;
&lt;p&gt;사용자가 영어 번역을 요청했을 시 해당 사용자의 상태값은 2000이 되어있을 것이며 이때 모든 발화를 번역할 타겟 언어는 lang 에 정의된 en 이다 라는 것을 구현하기 위함입니다.&lt;/p&gt;
&lt;p&gt;&lt;br /&gt;&lt;/p&gt;
&lt;p&gt;본격적인 번역을 시작하겠습니다. 다운받은 소스의 functions 폴더에서&amp;nbsp;&lt;/p&gt;
&lt;p&gt;&lt;/p&gt;&lt;pre class=&quot;line-numbers&quot;&gt;&lt;code&gt;npm i -save @vitalets/google-translate-api&lt;/code&gt;&lt;/pre&gt;&lt;p&gt;를 작성하여 구글 번역 api npm 모듈을 설치합니다.&lt;/p&gt;
&lt;p&gt;&lt;br /&gt;&lt;/p&gt;
&lt;p&gt;functions/Action/translateAction.js 에 다음 소스를 작성합니다.&lt;/p&gt;
&lt;p&gt;&lt;br /&gt;&lt;/p&gt;
&lt;p&gt;&lt;/p&gt;&lt;pre class=&quot;line-numbers&quot;&gt;&lt;code class=&quot;language-js&quot;&gt;
exports.translateStringToOtherLang = function (request, response, callbackFunc) {
    const action = JSON.parse(JSON.stringify(request.action))
    const reqText = request.body[&quot;userRequest&quot;][&quot;utterance&quot;]
    const translate = require('@vitalets/google-translate-api')
    global.log.debug(&quot;translateAction&quot;, &quot;translateStringToOtherLang&quot;, &quot;user data: &quot; + JSON.stringify(request.user) + &quot; action data: &quot; + JSON.stringify(action))
    global.log.debug(&quot;translateAction&quot;, &quot;translateStringToOtherLang&quot;, &quot;req text: &quot; + reqText)

    var makeResponseTemplate = function(responseText) {
        const responseManager = request.responseManager
        const util = require('util')
        var actionText = action[&quot;response&quot;][global.define.DEFAULT_RESPONSE_TYPE_ZERO][&quot;simpleText&quot;][&quot;text&quot;]
        actionText = util.format(actionText, responseText)
        action[&quot;response&quot;][global.define.DEFAULT_RESPONSE_TYPE_ZERO][&quot;simpleText&quot;][&quot;text&quot;] = actionText
        responseManager.pushTemplate(action[&quot;response&quot;][global.define.DEFAULT_RESPONSE_TYPE_ZERO])
        for(var index in action[&quot;quickReplies&quot;]) {
            responseManager.pushQuickReply(action[&quot;quickReplies&quot;][index])
        }
    }

    translate(reqText, {to: action.lang})
        .then(result =&amp;gt; {
            global.log.debug(&quot;translateAction&quot;, &quot;translateStringToOtherLang&quot;, &quot;translate result: &quot; + JSON.stringify(result))
            makeResponseTemplate(result[&quot;text&quot;])
            callbackFunc()
        })
        .catch(error =&amp;gt; {
            global.log.error(&quot;translateAction&quot;, &quot;translateStringToOtherLang&quot;, &quot;cannot translate: &quot; + JSON.stringify(error))
            makeResponseTemplate(&quot;이런, 번역 요정이 장난을 쳐버렸군요.&quot;)
            callbackFunc()
        })
}&lt;/code&gt;&lt;/pre&gt;&lt;p&gt;request 로 부터 사용자 상태에 따른 현재 응답할 action 템플릿이 포함되서 들어오며, 사용자의 발화 내용은 reqest.body[&quot;userRequest&quot;][&quot;utterance&quot;] 에 있습니다. 이후로는 action 템플릿에 사용자 발화 내용을 번역한 결과를 쓰고, 응답 관리자(responseManager)에게 템플릿을 전달한 다음 callbackFunc 을 호출함으로써 action 처리를 마무리 짓고 있습니다.&lt;/p&gt;
&lt;p&gt;&lt;/p&gt;
&lt;p&gt;functions/Core/actionManager.js 에 다음 소스를 다음과 같이 수정합니다.&lt;/p&gt;
&lt;p&gt;&lt;/p&gt;&lt;pre&gt;&lt;code class=&quot;language-js&quot;&gt;exports.executeOrder = function (request, response, actionIndex, callbackFunc) {
    const basicAction = require('../Action/basicAction')
    const translateAction = require('../Action/translateAction')

    const actionTable = {
        &quot;1&quot;: basicAction.hello,
        &quot;1000&quot;: translateAction.translateStringToOtherLang,
        &quot;2000&quot;: translateAction.translateStringToOtherLang,
        &quot;3000&quot;: translateAction.translateStringToOtherLang,
    }

    global.log.debug(&quot;actionManager&quot;, &quot;executeOrder&quot;, &quot;execute action #&quot; + actionIndex)

    actionTable[actionIndex](request, response, callbackFunc) // &amp;lt;-- pass request, response, callbackFunc(flush response data)
}&lt;/code&gt;&lt;/pre&gt;&lt;p&gt;여기서는 action 번호와 그 action 을 실행할 메소드를 매칭하는 작업을 합니다. 번역 action의 번호를 1000, 2000, 3000 으로 DB에 정의 했었기 때문에 1000, 2000, 3000 을 작성한 후 그 값을 번역 매소드인&amp;nbsp;translateAction.translateStringToOtherLang 으로 설정합니다.&lt;/p&gt;
&lt;p&gt;&lt;br /&gt;&lt;/p&gt;
&lt;p&gt;이로써 스크립트 작업이 모두 끝났습니다.&lt;/p&gt;
&lt;p&gt;스킬으로 사용하기 위해 firebase functions 에 배포를 합니다. 배포 한 후 자동으로 endpoint 가 생성됩니다.&lt;/p&gt;
&lt;p&gt;&lt;br /&gt;&lt;/p&gt;&lt;h3&gt;언어 번역 시나리오 및 블럭 연동&lt;/h3&gt;&lt;div&gt;Kakao i open builder 의 스킬 탭에 들어가 새로운 스킬을 생성합니다.&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;우린 크게 2가지 종류의 스킬을 만들것입니다.&lt;/div&gt;&lt;div&gt;- 각 블럭마다 적용할 action 스킬&lt;/div&gt;&lt;div&gt;- 폴백 블럭에 실행될 continue 스킬&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&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: 820px;  height: auto; max-width: 100%;&quot;&gt;&lt;img src=&quot;https://t1.daumcdn.net/cfile/tistory/992166415C637DAC14&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Ft1.daumcdn.net%2Fcfile%2Ftistory%2F992166415C637DAC14&quot; width=&quot;820&quot; height=&quot;457&quot; filename=&quot;주석 2019-02-13 111259.jpg&quot; filemime=&quot;image/jpeg&quot;/&gt;&lt;/span&gt;&lt;/p&gt;
&lt;p&gt;&lt;br /&gt;&lt;/p&gt;
&lt;p&gt;스킬은 다음과 같이 작성하면 됩니다.&amp;nbsp;&lt;/p&gt;
&lt;p&gt;url 은 action/ 스킬 번호를 쓰면 됩니다.&lt;/p&gt;
&lt;p&gt;&lt;br /&gt;&lt;/p&gt;
&lt;p&gt;1: 번역 선택&lt;/p&gt;
&lt;p&gt;1000: 한국어 번역&lt;/p&gt;
&lt;p&gt;2000: 영어 번역&lt;/p&gt;
&lt;p&gt;3000: 일본어 번역&lt;/p&gt;
&lt;p&gt;&lt;br /&gt;&lt;/p&gt;
&lt;p&gt;continue 스킬은&amp;nbsp;&lt;/p&gt;
&lt;p&gt;/v3KakaoApi/continue&lt;/p&gt;
&lt;p&gt;형식으로 작성하면 됩니다.&lt;/p&gt;
&lt;p&gt;&lt;br /&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: 820px;  height: auto; max-width: 100%;&quot;&gt;&lt;img src=&quot;https://t1.daumcdn.net/cfile/tistory/99763D3C5C637E1118&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Ft1.daumcdn.net%2Fcfile%2Ftistory%2F99763D3C5C637E1118&quot; width=&quot;820&quot; height=&quot;397&quot; filename=&quot;주석 2019-02-13 111635.jpg&quot; filemime=&quot;image/jpeg&quot;/&gt;&lt;/span&gt;&lt;/p&gt;
&lt;p&gt;그럼 다음과 갈은 스킬들이 생성됩니다.&lt;/p&gt;
&lt;p&gt;&lt;br /&gt;&lt;/p&gt;&lt;h4&gt;폴백블럭 설정&lt;br /&gt;&lt;/h4&gt;&lt;/div&gt;&lt;div&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: 820px;  height: auto; max-width: 100%;&quot;&gt;&lt;img src=&quot;https://t1.daumcdn.net/cfile/tistory/991B94345C637E5511&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Ft1.daumcdn.net%2Fcfile%2Ftistory%2F991B94345C637E5511&quot; width=&quot;820&quot; height=&quot;421&quot; filename=&quot;주석 2019-02-13 111730.jpg&quot; filemime=&quot;image/jpeg&quot;/&gt;&lt;/span&gt;&lt;/p&gt;
&lt;p&gt;초기화 후 continue 스킬과 밑에 스킬데이터 사용을 허용합니다.&lt;/p&gt;
&lt;p&gt;사용자가 선택한 언어로 모든 발화가 번역되는 부분입니다.&lt;/p&gt;
&lt;p&gt;&lt;br /&gt;&lt;/p&gt;&lt;h4&gt;번역/환영 블럭 설정&lt;/h4&gt;&lt;p&gt;&lt;br /&gt;&lt;/p&gt;
&lt;p&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: 820px;  height: auto; max-width: 100%;&quot;&gt;&lt;img src=&quot;https://t1.daumcdn.net/cfile/tistory/996D15345C637ECD10&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Ft1.daumcdn.net%2Fcfile%2Ftistory%2F996D15345C637ECD10&quot; width=&quot;820&quot; height=&quot;411&quot; filename=&quot;주석 2019-02-13 111847.jpg&quot; filemime=&quot;image/jpeg&quot;/&gt;&lt;/span&gt;&lt;/p&gt;
&lt;p&gt;&lt;br /&gt;&lt;/p&gt;
&lt;p&gt;환영 스킬을 적용 후 스킬데이터를 응답으로 설정합니다.&lt;/p&gt;
&lt;p&gt;&lt;br /&gt;&lt;/p&gt;&lt;h4&gt;번역 블럭(영어) 설정&lt;/h4&gt;&lt;p&gt;&lt;br /&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: 820px;  height: auto; max-width: 100%;&quot;&gt;&lt;img src=&quot;https://t1.daumcdn.net/cfile/tistory/999FF3355C637F030D&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Ft1.daumcdn.net%2Fcfile%2Ftistory%2F999FF3355C637F030D&quot; width=&quot;820&quot; height=&quot;438&quot; filename=&quot;주석 2019-02-13 111913.jpg&quot; filemime=&quot;image/jpeg&quot;/&gt;&lt;/span&gt;&lt;/p&gt;
&lt;p&gt;번역 스킬을 적용 후 응답은 번역 시작한다는 문구를 작성합니다.&amp;nbsp;&lt;/p&gt;
&lt;p&gt;이 경우 스킬과 응답이 동시에 실행되어 사용자 상태는 영어 번역 모드로, 카카오톡 화면에서는 번역 시작하겠다는 피드백 문구가 보여지게 됩니다.&lt;br /&gt;&lt;/p&gt;
&lt;p&gt;&lt;br /&gt;&lt;/p&gt;&lt;h3&gt;베포 및 테스트&lt;/h3&gt;&lt;/div&gt;&lt;div&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: 820px;  height: auto; max-width: 100%;&quot;&gt;&lt;img src=&quot;https://t1.daumcdn.net/cfile/tistory/99FFC13D5C637FA513&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Ft1.daumcdn.net%2Fcfile%2Ftistory%2F99FFC13D5C637FA513&quot; width=&quot;820&quot; height=&quot;547&quot; filename=&quot;주석 2019-02-13 112320.jpg&quot; filemime=&quot;image/jpeg&quot;/&gt;&lt;/span&gt;&lt;/p&gt;
&lt;p&gt;배포 탭에서 베포를 눌러주면 됩니다.&lt;/p&gt;
&lt;p&gt;&lt;br /&gt;&lt;/p&gt;
&lt;p&gt;최종 소스는 &lt;a href=&quot;https://github.com/stories2/Kakao-Translate&quot; target=&quot;_blank&quot; class=&quot;tx-link&quot;&gt;https://github.com/stories2/Kakao-Translate&lt;/a&gt;&amp;nbsp;에서 받으 실 수 있습니다.&lt;br /&gt;&lt;/p&gt;&lt;br /&gt;&lt;/div&gt;&lt;p&gt;&lt;/p&gt;</description>
      <category>개발 일기/카카오톡 챗봇</category>
      <category>Firebase</category>
      <category>github</category>
      <category>Kakao i open builder</category>
      <category>번역 채팅 봇</category>
      <category>번역요정</category>
      <category>오픈소스</category>
      <category>챗봇 만들기</category>
      <category>카카오 아이 오픈 빌더</category>
      <category>카카오톡 챗봇</category>
      <category>파이어베이스</category>
      <author>hazimenya</author>
      <guid isPermaLink="true">https://stories2.tistory.com/2</guid>
      <comments>https://stories2.tistory.com/entry/%EC%B9%B4%EC%B9%B4%EC%98%A4%ED%86%A1-%EC%95%84%EC%9D%B4-%EC%98%A4%ED%94%88-%EB%B9%8C%EB%8D%94%EB%A5%BC-%EC%9D%B4%EC%9A%A9%ED%95%B4-%EB%B2%88%EC%97%AD-%EB%B4%87-%EB%A7%8C%EB%93%A4%EA%B8%B0#entry2comment</comments>
      <pubDate>Fri, 8 Feb 2019 14:02:41 +0900</pubDate>
    </item>
  </channel>
</rss>