<?xml version="1.0" encoding="utf-8" standalone="yes"?><rss version="2.0" xmlns:atom="http://www.w3.org/2005/Atom"><channel><title>Heroku on</title><link>https://taetaetae.github.io/tags/heroku/</link><description>Recent content in Heroku on</description><generator>Hugo</generator><language>en</language><lastBuildDate>Sun, 04 Apr 2021 18:54:00 +0900</lastBuildDate><atom:link href="https://taetaetae.github.io/tags/heroku/index.xml" rel="self" type="application/rss+xml"/><item><title>공모주 알리미 개발 후기 - 3부</title><link>https://taetaetae.github.io/posts/public-offering-notice-3/</link><pubDate>Sun, 04 Apr 2021 18:54:00 +0900</pubDate><guid>https://taetaetae.github.io/posts/public-offering-notice-3/</guid><description>&lt;p>　﻿&lt;a href="https://t.me/PublicOfferingNotice" target="_blank" rel="noopener noreffer ">공모주 알리미&lt;/a>라는 토이 프로젝트 개발기의 마지막 포스팅이다. 토이 프로젝트를 왜 시작하게 되었고 어떻게 설계하게 되었으며 데이터는 어떤 식으로 수집하고 그 데이터를 어떤 방법으로 사용자들에게 알림을 보내기까지 알아보았다. 이제는 이러한 일련의 &amp;lsquo;파이프라인&amp;rsquo;을 자동화해야 할 시간이다. 사람이 직접 수동으로 로컬 컴퓨터에서 위 파이프라인을 실행하는 것이 아니라 별도의 서버에 해당 애플리케이션이 등록되어 있고 이를 어떤 무언가에 의해 트리거링을 해주는 방식으로 말이다.﻿&lt;/p>
&lt;ul>
&lt;li>1부 : &lt;a href="https://taetaetae.github.io/posts/public-offering-notice-1" rel="">프로젝트 설계, 데이터 수집&lt;/a>&lt;/li>
&lt;li>2부 : &lt;a href="https://taetaetae.github.io/posts/public-offering-notice-2" rel="">수집한 데이터 알림 발송&lt;/a>&lt;/li>
&lt;li>3부 : &lt;a href="https://taetaetae.github.io/posts/public-offering-notice-3" rel="">서버 선정 및 릴리즈&lt;/a>&lt;/li>
&lt;/ul>
&lt;h2 id="서버-선정">서버 선정&lt;/h2>
&lt;p>　﻿1부에서 이야기했던 것처럼 &lt;a href="https://www.heroku.com" target="_blank" rel="noopener noreffer ">heroku&lt;/a>라는 PaaS(Platform as a service)를 사용하면 될 것 같았다. 무료 플랜으로도 설계했던 서비스 내용을 모두 소화 가능했기 때문이다. 앞서 만든 Spring Boot Application 을 heroku에 배포를 해보자.&lt;/p>
&lt;p>　heroku에서 새로운 &amp;lsquo;App&amp;rsquo;을 생성한다. 아래에서 보여주고 있는 화면대로 App name을 지정하고 만들기만 하면 끝. 그러면 배포 방법이 여러 가지가 나오는데 heroku에서 제공하는 CLI를 사용하는 방법, 그리고 Github 과 연동하거나, 컨테이너 레지스트리를 활용하는 방법 총 3가지가 있다. 여기서 필자는 Github을 활용해서 연동하는 방법을 소개해 보고자 한다.&lt;/p>
&lt;figure>&lt;a class="lightgallery" href="https://taetaetae.github.io/images/public-offering-notice-3/1.jpg" title="/images/public-offering-notice-3/1.jpg" data-thumbnail="/images/public-offering-notice-3/1.jpg" data-sub-html="&lt;h2>heroku 에서 app을 생성하자.&lt;/h2>">
 &lt;img
 class="lazyload"
 src="https://taetaetae.github.io/svg/loading.min.svg"
 data-src="https://taetaetae.github.io/images/public-offering-notice-3/1.jpg"
 data-srcset="https://taetaetae.github.io/images/public-offering-notice-3/1.jpg, https://taetaetae.github.io/images/public-offering-notice-3/1.jpg 1.5x, https://taetaetae.github.io/images/public-offering-notice-3/1.jpg 2x"
 data-sizes="auto"
 alt="/images/public-offering-notice-3/1.jpg" />
 &lt;/a>&lt;figcaption class="image-caption">heroku 에서 app을 생성하자.&lt;/figcaption>
 &lt;/figure>
&lt;p>　﻿로컬에서 만든 애플리케이션을 Github에 push 하면 Github Repository 가 생기고 작업 파일들이 정상적으로 업로드된 것을 확인할 수 있다. 그다음 heroku에서 만들었던 App 페이지에서 Deploy 탭을 클릭하면 아래와 같이 3가지 방법으로 Deploy를 할 수 있다고 나오고, 이 중에 &amp;ldquo;Connect to Github&amp;quot;을 선택하면 Github 과 연동할 수 있는 버튼이 생기고 이를 누르면 자동으로 본인의 Github 내 Repository를 등록할 수 있도록 화면이 바뀐다.&lt;/p>
&lt;figure>&lt;a class="lightgallery" href="https://taetaetae.github.io/images/public-offering-notice-3/2.jpg" title="/images/public-offering-notice-3/2.jpg" data-thumbnail="/images/public-offering-notice-3/2.jpg" data-sub-html="&lt;h2>heroku 와 github 연동&lt;/h2>">
 &lt;img
 class="lazyload"
 src="https://taetaetae.github.io/svg/loading.min.svg"
 data-src="https://taetaetae.github.io/images/public-offering-notice-3/2.jpg"
 data-srcset="https://taetaetae.github.io/images/public-offering-notice-3/2.jpg, https://taetaetae.github.io/images/public-offering-notice-3/2.jpg 1.5x, https://taetaetae.github.io/images/public-offering-notice-3/2.jpg 2x"
 data-sizes="auto"
 alt="/images/public-offering-notice-3/2.jpg" />
 &lt;/a>&lt;figcaption class="image-caption">heroku 와 github 연동&lt;/figcaption>
 &lt;/figure>
&lt;p>　﻿그다음 위에서 Github에 push 했던 Repository 이름을 적고 검색하면 조회가 되고 &amp;lsquo;Connect&amp;rsquo;를 누르면 자동으로 연결이 된 것을 확인할 수 있다. 연동된 Repository 브랜치에 코드가 푸시 되면 자동으로 heroku에 배포가 되도록 자동화 설정도 가능하고 그 아래에 보면 브랜치를 선택해서 배포를 수동으로 할 수 있기도 하다. 수동으로 푸시를 눌러보면 이런저런 빌드 로그가 나오고 최종적으로 배포가 되어 &lt;code>{Appname}.herokuapp.com&lt;/code> 을 접속해보면 서버에 배포가 되어있는 것을 확인할 수 있다.&lt;/p>
&lt;ul>
&lt;li>sample Github Code : &lt;a href="https://github.com/taetaetae/heroku/blob/master/src/main/java/com/taetaetae/helloworld/heroku/HelloWorldController.java#L11" target="_blank" rel="noopener noreffer ">taetaetae@heroku#HelloWorldController.java#L11&lt;/a>&lt;/li>
&lt;li>sample heroku app : &lt;a href="https://taetaetae-test.herokuapp.com/" target="_blank" rel="noopener noreffer ">https://taetaetae-test.herokuapp.com/&lt;/a>&lt;/li>
&lt;/ul>
&lt;figure>&lt;a class="lightgallery" href="https://taetaetae.github.io/images/public-offering-notice-3/3.jpg" title="/images/public-offering-notice-3/3.jpg" data-thumbnail="/images/public-offering-notice-3/3.jpg" data-sub-html="&lt;h2>수동으로 배포를 해보자.&lt;/h2>">
 &lt;img
 class="lazyload"
 src="https://taetaetae.github.io/svg/loading.min.svg"
 data-src="https://taetaetae.github.io/images/public-offering-notice-3/3.jpg"
 data-srcset="https://taetaetae.github.io/images/public-offering-notice-3/3.jpg, https://taetaetae.github.io/images/public-offering-notice-3/3.jpg 1.5x, https://taetaetae.github.io/images/public-offering-notice-3/3.jpg 2x"
 data-sizes="auto"
 alt="/images/public-offering-notice-3/3.jpg" />
 &lt;/a>&lt;figcaption class="image-caption">수동으로 배포를 해보자.&lt;/figcaption>
 &lt;/figure>
&lt;p>　﻿heroku에서는 이렇게 몇 번의 클릭만으로 간단하게 애플리케이션을 배포할 수 있는 기능을 제공하고 있고 서버 내 로그도 아래 화면처럼 보여주고 있기 때문에 쉽고 간단하게 서버를 구성하고 싶은 사용자들에게 매력적으로 보이는 것 같다. 단, 무료 플랜의 제한사항들을 자세히 살펴보고 사용할 것을 추천한다.&lt;/p>
&lt;figure>&lt;a class="lightgallery" href="https://taetaetae.github.io/images/public-offering-notice-3/4.jpg" title="/images/public-offering-notice-3/4.jpg" data-thumbnail="/images/public-offering-notice-3/4.jpg" data-sub-html="&lt;h2>서버 로그도 볼 수 있다!&lt;/h2>">
 &lt;img
 class="lazyload"
 src="https://taetaetae.github.io/svg/loading.min.svg"
 data-src="https://taetaetae.github.io/images/public-offering-notice-3/4.jpg"
 data-srcset="https://taetaetae.github.io/images/public-offering-notice-3/4.jpg, https://taetaetae.github.io/images/public-offering-notice-3/4.jpg 1.5x, https://taetaetae.github.io/images/public-offering-notice-3/4.jpg 2x"
 data-sizes="auto"
 alt="/images/public-offering-notice-3/4.jpg" />
 &lt;/a>&lt;figcaption class="image-caption">서버 로그도 볼 수 있다!&lt;/figcaption>
 &lt;/figure>
&lt;h2 id="호출-테스트-문제의-시작">호출 테스트, 문제의 시작&lt;/h2>
&lt;p>　﻿앞서 만들었던 텔레그램 채널에는 아무도 가입을 하지 않았기에 배포한 heroku web endpoint를 호출하면 텔레그램 봇을 통해 알림이 오는 걸 테스트하고 싶었다. 그런데 아무리 호출을 해도 서버는 타임아웃이라는 에러 응답을 뱉기 일쑤였고, 로직이 문제인지 한참을 리팩토링하며 원인을 파악하는데 꽤 오랜 시간을 삽질하였다. 왜 타임아웃이 발생할까? heroku는 web에서 바로 실행할 수 있는 console 페이지를 제공하고 있었다. 그래서 &amp;lsquo;크롤링을 하기 위한 페이지&amp;rsquo;와 &amp;lsquo;구글&amp;rsquo;을 비교하기 위해 단순하게 curl 해서 가져오는 테스트를 해보니 아래처럼 확연히 결과가 달랐다. 결국은 heroku 와 크롤링 하는 서버 간의 네트워크 타임아웃이 문제였던 것.&lt;/p>
&lt;figure>&lt;a class="lightgallery" href="https://taetaetae.github.io/images/public-offering-notice-3/5.jpg" title="/images/public-offering-notice-3/5.jpg" data-thumbnail="/images/public-offering-notice-3/5.jpg" data-sub-html="&lt;h2>오류가 나고 원인을 찾는 과정이 가장 어려운 것 같다. 어플리케이션의 문제가 아닌 네트워크 자체의 문제&lt;/h2>">
 &lt;img
 class="lazyload"
 src="https://taetaetae.github.io/svg/loading.min.svg"
 data-src="https://taetaetae.github.io/images/public-offering-notice-3/5.jpg"
 data-srcset="https://taetaetae.github.io/images/public-offering-notice-3/5.jpg, https://taetaetae.github.io/images/public-offering-notice-3/5.jpg 1.5x, https://taetaetae.github.io/images/public-offering-notice-3/5.jpg 2x"
 data-sizes="auto"
 alt="/images/public-offering-notice-3/5.jpg" />
 &lt;/a>&lt;figcaption class="image-caption">오류가 나고 원인을 찾는 과정이 가장 어려운 것 같다. 어플리케이션의 문제가 아닌 네트워크 자체의 문제&lt;/figcaption>
 &lt;/figure>
&lt;h2 id="그래서-어떻게-해결-했나">그래서 어떻게 해결 했나?&lt;/h2>
&lt;p>　﻿heroku에서 타임아웃이 발생하는 문제를 해결하려 여러 구글링을 통해 찾아봤지만 방법을 찾을 수 없어서 결국 heroku를 사용하는 것을 포기하고 다른 방법을 찾아봐야만 했다. 앞서 이야기했지만 토이 프로젝트를 무료로 운영하고 싶었기 때문에 이런저런 방법을 찾다 보니 AWS 와 비슷하게 Google에서도 GCP라는 서비스를 알게 되었다. 이곳에서도 1년 동안은 무료이지만 이후 AWS처럼 과금이 드는 문제가 아쉬워서 좀 더 찾아보니 아주 작은 서버에 특정 조건을 맞춘다면 평생 무료로 사용이 가능하다는 걸 알게 되었고 이를 사용하기로 마음먹는다. (참고 사이트 : &lt;a href="https://nhj12311.tistory.com/317" target="_blank" rel="noopener noreffer ">https://nhj12311.tistory.com/317&lt;/a>)﻿&lt;/p></description></item></channel></rss>