[Docker] 컨테이너 timezone 변경
·
Docker, Container
상황 현재 개발 중인 서비스에는 1분 배치 단위로 작동하는 스케줄러가 존재한다. 사용자의 알약 복용 스케줄에 맞춰서 알림을 보내주는데, 개발 서버에 배포 후 테스트 하는 과정에서 복용 시간이 지났는데도 알림이 전송되지 않고 기록도 남지 않는 문제가 발생하였다. 처음에는 알림을 보내주는 과정에서 문제가 발생하였다고 생각하였지만, 알림 전송에 실패하는 경우에도 기록은 남기도록 로직을 작성하였기에, 복용 시간을 스캔하는 과정에서 문제가 있다고 생각하였다. 문제를 디버깅한 결과, 개발 서버의 컨테이너 시간이 UTC(세계 협정시)였기 때문에 스케줄러가 해당 루틴을 찾지 못했었던 것이다.데이터베이스에 복용 루틴을 utc를 고려한 timestamptz으로 변경하는 방법도 있지만, 국내에서만 출시를 할 계획이기 때문에..
[Docker] Springboot 이미지 최적화
·
Docker, Container
개요현재 진행하고 있는 프로젝트에서 서버 애플리케이션을 Docker 이미지로 관리하고 있다.Spring Boot 기반의 프로젝트로, Dockerfile을 작성해 이미지를 빌드하고 이를 컨테이너로 실행한다. 하지만 기존 방식으로 생성된 이미지의 크기가 상당히 커,1. 네트워크 전송 비용 증가2. 빌드/배포 시간 증가3. 테스트 및 로컬 실행 시 부담과 같은 문제들이 발생했다.이를 해결하기 위해 Dockerfile을 리팩토링하고 이미지 경량화 작업을 진행하게 되었다.아래는 그 과정을 기록한 내용이다.기존 Dockerfile 구조기존 Dockerfile은 단일 스테이지로 구성되어 있어 다음과 같은 단점이 있었다1. 빌드 도구, 소스 코드, 테스트 리소스 등 불필요한 파일까지 이미지에 포함됨2. 불필요한 의존 ..
[Linux] Docker, Docker Compose 설치
·
Docker, Container
개요 프로젝트를 배포할 때마다, 클라우드 서비스를 이용할 때마다 제일 먼저하는 설치 서비스 중 하나는 Docker이다.Docker Image를 활용하여 쉽게 애플리케이션을 설치, 배포할 수 있기 때문에, 현대 소프트웨어에서 Docker와 같은 컨테이너 런타임 도구는 필수적이라고 볼 수 있다.  따라서 Docker 설치 과정을 정리해보았다.패키지 설치 및 저장소 지정우분투 패키지 업데이트sudo apt-get update필요한 패키지 설치sudo apt-get install apt-transport-https ca-certificates curl gnupg-agent software-properties-commonapt-transport-https: APT가 HTTPS프로토콜을 통해 패키지 다운로드ca-c..