-
Spring boot Graceful Shutdown
시작하며 보통 애플리케이션에서 변경 사항이 있으면, 애플리케이션을 재시작 해야 변경사항이 반영된다. 물론 배포 방식에 따라 Blue-Green 배포 형식을 따르게 되면, 이전 버전 앱을 굳이 죽일 필요는 없지만, Rolling 배포를 따르는 경우, 순차적으로 구버전의 앱을 죽이고, 신규 버전 앱을 띄어야 한다. 구버전 앱을 죽일때 프로세스 자체를 바로 죽이게 되면, 현재 요청을 받아 처리중인 작업들이 모두 취소가 되기 때문에, 복구 프로세스 확립등 할것이 너무나 많아 진다. 예를들어 결재처리중인 애플리케이션이 갑자기 죽어 버린다면?(생각도 하기 싫다….) 물론 애플리케이션 윗단에서,...
-
gitlab-runnner 를 활용한 docker 배포
서론 jekyll 블로그를 사용하면서 github action 에 대해서 많이 부러움을 느꼈습니다. 여기서는 gitlab 과 gitlab-runner (+ nexus) 를 설치하여 나도 자동적으로 빌드와 배포가 되도록 CI (Continuous Integration) / CD (Continuous Deployment) 를 구성 해보았습니다. Basic Concept 기본 컨셉은 다음과 같습니다! 코드를 보내면 자동으로 도커 이미지를 생성하고 배포 대상 서버에서 컨테이너를 실행! gitlab 으로 코드를 커밋 build CI/CD (gitlab runner) 가 실행됨 코드를 도커 이미지 로 빌드하고 사설 도커 저장소 (이하 nexus) 로 배포 진행 deploy...
-
JPA(패러다임불일치, 영속성)
패러다임 불일치 애플리케이션은 자바라는 객체지향 언어로 개발하고 데이터는 관계형 데이터베이스에 저장해야 한다면, 패러다임의 불일치 문제를 개발자가 중간에서 해결해야 한다. 객체는 상속 이라는 개념을 가지고 있지만 테이블은 상속이라는 기능이 없으며 이를 해결하기 위해서 슈퍼타입 서브타입 관계를 사용하여 객체 상속와 유사한 형태로 테이블 설계가 가능 하다. JDBC API 를 사용해서 Album, Movie 객체를 저장하는 코드를 완성하기 위해서는 각 객체를 저장하는 SQL 을 생성해야 하며 이때, Item 테이블 저장 쿼리도 개발이 필요하다. 조회의 경우, Album 을 조회하기 위해서는...
-
StatelessWidget, StatefulWidget, Provider
Application life cycle 관리 안드로이드 app, IOS app 모두 life cycle 관리가 필요합니다. Android는 코드에 기본이 되는 “extends Activity”가 그역활을 하고 있고 Flutter는 상속 받아 만들 수 있는 StatelessWidget과 StatefulWidget가 life cycle 관리를 수행 합니다. 1, StatelessWidget 단 한번 만 Build 과정이 일어나고, 한번 그려진 화면은 계속 유지되며, 성능 상 장점이 생김니다. 2, StatefulWidget state를 포함한 Widgetd이며, setState 가 발생할때마다 다시 Build 과정이 일어고, 때문에, 동적 화면을 쉽게 구현이 가능합니다. Application 데이터 관리를 위한 Provider...
-
NPM 번외편 - npm에 내 라이브러리 등록하기
나만의 라이브러리를 만들어 보자. 오픈소스… 라이브러리… 말은 많이 들어 봤지만.. 그런건 정말 대단한 슈퍼개발자들이나 하는 거 아닌가? 라는 생각을 어렴풋이 가지고 있었던 것 같다. (물론 지금도 어느 정도는 벽을 느끼고 있지만.) 그런데 아래와 같은 경험을 하며 그 진입장벽중 꽤나 큰 부분이 허물어졌던(?) 기억이 있어, 이 글을 읽은 분들이라면 한번쯤은 도전해 보셨으면 하는 마음에 주제를 선정해 보았다. 개발을 하다 보니 유틸리티성을 띄는 js모듈을 별도로 만들어 작업하는 경우가 있었다. 그런데 이런 유틸성 모듈들은 또 다른 프로젝트에서도 사용하고...