스프링부트로 웹 서비스 출시하기 8일차

박세건·2023년 8월 25일
0

무중단 배포 테스트

무중단 배포 테스트를 하기 전, 한가지 추가 작업을 진행해보자. 잦은 배포를 하면서 매번 버전을 변경해주는 일은 귀찮기때문에, 자동으로 버전값이 변경될 수 있도록 설정해보자!

version = '1.0.1-SNAPSHOT-' + new Date().format("yyyyMMddHHmmss")

추가하고 이전에 만들어놓은 스크립트들도 함께 commit&push 해보자!!

trvis CI 에서 에러가 발생했고,

빌드는 성공했지만 배포에서 실패했다.
배포한 log를 확인하기위해서 nohup.out 파일과 codedeploy-agent-deployments.log를 확인해보았다.

nohup.out

codedeploy-agent-deployments.log

Health.sh 부분에서 오류를 뱉는다..

스크립트에 오류는 없었는지 책과 다른점은 제대로 수정했는지, 경로 변수값에 올바른 정보가 들어있는지 확인을 모두 했고 결국해결하지 못해서 그냥 현재까지 수정한것을 다시 commit&pull 하고 보니 Travis CI에서 오류는 사라지고 정상적으로 작동되길래...
nohup.out 파일과 codedeploy-agent-deployments.log를 확인해보니 역시나 성공으로 올바르게 작동되고있었다 EC2의 퍼블릭 도메인 주소에 접속해도

올바르게 접근되는 것을 확인할 수 있었다.

아마 코드에 오타가 있어서 오류가 발생했었고 수정해놓고 뭘 수정했는지도 모르는 것 같다...

제대로 작동하는지 2번 정도 실행해보자!
지금은 nginx는 8081의 profile은 real1을 바라보고있고 8082의 real2는 대기하고있는 상태이다.
이상태에서 내가 코드를 수정하고 다시 커밋&풀 해준다면
이전에 작성했던 스크립트 내용처럼
nginx와 연결되지않은(8082,real2)를 종료시킨후에
종료된(8082,real2) profile에 새로운 버전을 실행시킨다.
정상적으로 작동되는지 health.sh를 통해서 확인하고
nginx를 (8082,real2) 해당 profile을 바라보게 설정해준다.

#추가로 @ResponseBody나 @RestController를 통해서 값을 전달해서 쉘 스크립트에서

curl -s http://localhost:8080/profile

로 만들어놓은 함수에 접근해서 값을 반환받을 수 있다.
예시로 이런 흐름을 이용해서 현재 사용하고있는 profile값을 리턴받아서 사용하지 않는 profile은 무엇인지 알아낼 수 있다.

1번 돌리기


8082포트에 real2로 이동! 정상적으로 변경된 상태 적용 완료!

2번 돌리기

정상적으로 두번 배포를 시켰을때에 이상이 없이 정상적으로 보여지는것을 확인할 수 있습니다.
현재 실행되고있는 프로세스를 확인했을때도


정확이 두개의 스프링부트 프로젝트가 진행되고있는것을 확인할 수 있습니다!!

스프링 부트와 AWS로 혼자 구현하는 웹 서비스를 마치면서...

혼자서 끝까지 진행할 수 있을까 걱정부터되었지만 일단 먼저 하고보자고 생각했다.
역시나 진행하면서 힘든 부분이 너무 많았고 너무 막막했던 순간도 많았다.
'결국은 해결할 수 있다' 라는 생각으로 계속 달려 들었던것 같다.
이동욱 선생님의 블로그와 책이 아니면였다면 정말 힘들었을거 같다.. 다시한번 감사합니다!
책의 마지막에는 1인 개발시 도움될 도구와 조언들 이라는 항목으로 많은 도움이 되는 정보들을 알려주신다.
내가 기억하기위해서 적어두자! (기억보단 기록을-이동욱님의 블로그명)

  • 댓글 - Disqus(외국), LiveRe(국내), Utterances(개발자를 위한)
  • 외부서비스 연동 - Zapier, IFTTT
    - 외부서비스에 자동으로 접근가능하게 ex)내 사이트에 새로운 기능이생긴것을 알리고싶다면 자동으로 트위터나 페이스북에 업로드
  • 방문자 분석 - 구글 애널리스틱 (사이트를 방문한 사람들의 정보를 분석)
  • CDN - 클라우드플레어
    • CDN이란 Content Delivery Network 로 정적 콘텐츠(js,css,이미지 등) 을 전 세계에 퍼진 서버에 전달해서 사용자가 접속할때 가장 가까운 서버에서 가져가도록 도와주는 서비스
    • 목적 : 트래픽 분산, 비용과 속도 절약
  • 이메일 마케팅 : Mailchimp
    • 뉴스레터와 같이 현재 내 사이트에 핫한 콘텐츠나 신규기능들을 메일로 알려주는 서비스

1인 개발팁

  • 욕심부리지 말것 - 핵심기능 위주
  • 혼자서 개발하는것이 더 빠를때도있다(개인 서비스 출시에서)
  • 가장 자신있는 개발 환경을 사용
  • 자사서비스를 운영하는 곳에 입사해서 경험해보기(네카라쿠배당토야)
  • 기본 세션(톰켓)을 사용하면 재시작 순간에 모든 로그인이 풀려버리게된다 따라서 기본세션(톰켓)보다는 JDBC 세션을 추천한다.
  • 관리자 페이지는 분리해서 구현하는것을 추천 yml 다르게 설정하는 것도 좋은 방법
  • 주요기능은 무조건 테스트 코드를 작성할 것
profile
멋있는 사람 - 일단 하자

0개의 댓글