DevOps/Docker2024. 10. 13. 05:31[Docker] 애플리케이션 종료시 Compose 자동시작

환경AWS EC2 (ubuntu) Docker Compose 로 여러개의 도커 컨테이너가 묶여있고, EC2 인스턴스로 배포된 상황에서 여러가지 이슈들로 인스턴스가 재부팅 되거나 애플리케이션이 종료될 수 있다.이때 재부팅되거나 배포한 애플리케이션이 종료되었을 때 자동으로 애플리케이션이 시작되게끔 할 수 있다.먼저 Docker Compose 애플리케이션 서비스 파일을 생성해야 한다.sudo vi /etc/systemd/system/docker-compose-app.service 이후 아래의 서비스 파일을 입력한다.[Unit]Description=Docker Compose Application ServiceAfter=docker.serviceRequires=docker.service[Service]Restar..

[Docker + SpringBoot] 스프링부트 로그 파일 남기기
DevOps/Docker2024. 10. 11. 02:06[Docker + SpringBoot] 스프링부트 로그 파일 남기기

개발환경SpringBoot v3.3.3AWS EC2 (ubuntu)RDSDocker ComposeGithubActions 로그를 파일로 저장하기(환경 분리 포함)스프링부트에서 local 환경과 prod 환경을 분리하여 로그를 남기는 방법은 아래의 글에서 참고하였다.https://blog.pium.life/server-logging/ Logback을 이용해 운영 환경 별 로그 남기기이 글은 우테코 피움팀 크루 '그레이'가 작성했습니다. 로깅이란 ? 우리가 처음 개발을 할 때 System.out.println(), cout blog.pium.life 이 글은 local 환경에서는 콘솔에서 로그를 확인할 수 있고 prod환경에선 info 로그와 error 로그 파일을 분리할 수 있는 설명이 담겨있다. 먼저 a..

[Docker + SpringBoot] Docker와 SpringBoot의 타임존 동기화
DevOps/Docker2024. 10. 9. 21:55[Docker + SpringBoot] Docker와 SpringBoot의 타임존 동기화

환경스프링부트 v3.3.3AWS EC2RDSDocker ComposeGithub Actions 문제 상황현재 내가 진행하고 있는 프로젝트에서 설정된 시간에 알람 시간을 설정하는 기능이 있다.DB에 저장할 때 기본값이 오전 8시인데 자꾸 9시간 뒤인 오후 5시로 설정되는 문제를 확인하였다.이렇게 9시간 차이가 나는 것은 보통 타임존 설정 문제인데, 나는 이미 타임존 관련 문제를 아래와 같이 세팅해둔 상태라서 더욱 당황했다. @PostConstruct 를 이용한 JVM 타임존 설정@SpringBootApplicationpublic class PromiseApplication { public static void main(String[] args) { SpringApplication.run(PromiseAp..

[AWS + SpringBoot] 시간대 설정하기
DevOps/AWS2024. 9. 20. 11:53[AWS + SpringBoot] 시간대 설정하기

리전을 서울로 설정했더라도 EC2는 기본적으로 외국에 있기 때문에 날짜관련된 로직이 들어갔을 때 정상적으로 작동하지 않을 가능성이 있다. 아래의 두 가지 방법중 하나를 선택해서 이러한 문제를 해결할 수 있다. @PostConstruct를 이용해 타임존 변경애플리케이션 시작 시점에 명시적으로 JVM의 시간대를 설정할 수 있다. @SpringBootApplicationpublic class PromiseApplication { public static void main(String[] args) { SpringApplication.run(PromiseApplication.class, args); } @PostConstruct public void init() { // JVM의 기본 시간대를 Asia/Se..

[Github Actions] 기본 문법 + 스프링부트 프로젝트 배포 자동화
DevOps/CI & CD2024. 9. 13. 00:20[Github Actions] 기본 문법 + 스프링부트 프로젝트 배포 자동화

이 글은 인프런의 지식 공유자 박재성님의 강의를 듣고 개인적으로 정리하는 글임을 알립니다.CI/CD는 소프트웨어 개발에서 중요한 개념 중 하나로, “Continuous Integration(지속적 통합)“과 “Continuous Deployment(지속적 배포)” 또는 “Continuous Delivery(지속적 전달)“를 뜻한다.이 개념은 개발자가 더 효율적으로 코드를 작성하고, 빠르고 안정적으로 사용자에게 소프트웨어를 제공하는 것을 목표로 한다. GitHub Actions는 자동화된 워크플로우를 지원하는 강력한 도구로, 저장소의 빌드, 테스트, 배포 등의 작업을 자동화할 수 있다.즉, GitHub Actions는 CI/CD 과정에서 빌드, 테스트, 배포에 대한 로직을 실행시키는 서버(컴퓨터)의 역할을..

[Docker] Stateless 와 Volume
DevOps/Docker2024. 9. 12. 00:02[Docker] Stateless 와 Volume

StatelessStateless(무상태)는 시스템이나 애플리케이션이 특정 요청 간의 상태를 저장하지 않는 구조를 의미한다. 즉, 각 요청은 서로 독립적이며, 요청을 처리하는 데 있어서 이전의 요청이나 세션 정보를 참조하지 않는다.Docker에서 Stateless는 컨테이너의 성격과 관련이 깊다. Docker 컨테이너는 애플리케이션의 실행 환경을 격리된 상태로 제공하며, Stateless 방식으로 설계된 애플리케이션을 실행하기에 적합하다. 컨테이너의 Stateless 특성Docker 컨테이너는 일반적으로 Stateless 특성을 가진다. 즉, 컨테이너를 중지하거나 삭제하면 그 안에서 발생한 모든 변경 사항이 사라진다.Stateless 애플리케이션은 상태를 컨테이너 내부에 저장하지 않으므로, Docker의..

[Docker] 도커 네트워크
DevOps/Docker2024. 9. 11. 00:16[Docker] 도커 네트워크

이 글은 인프런의 개발자를 위한 쉬운도커(데브위키) 강의를 수강하고 개인적으로 정리하는 글임을 알립니다.네트워크 기본 개념공인IP와 사설IP공인 IP공인 IP는 전 세계 어디서나 고유하게 사용되며, 인터넷 상에서 서버나 장치가 통신할 때 사용된다. 일반적으로 ISP(인터넷 서비스 제공자)로부터 할당받는다.그림에서 공유기가 공인 IP를 사용하여 외부 서버와 통신한다. 사설 IP사설 IP는 특정 네트워크 안에서만 유효하며, 외부 인터넷에서는 사용되지 않는다. 가정이나 회사 내부에서 네트워크 장치 간 통신을 할 때 사용된다.사설 IP는 라우터나 공유기에 의해 내부 네트워크의 장치(스마트폰, 컴퓨터 등)에 할당된다.사설 IP 대역은 10.0.0.0~10.255.255.255, 172.16.0.0~172.31.2..

[Docker] 이미지와 컨테이너 레이어
DevOps/Docker2024. 9. 9. 00:56[Docker] 이미지와 컨테이너 레이어

이 글은 인프런의 개발자를 위한 쉬운도커(데브위키) 강의를 수강하고 개인적으로 정리하는 글임을 알립니다.이미지 레이어(Image Layer)Docker 이미지는 여러 개의 읽기 전용 레이어로 구성되어 있다. 각 레이어는 하나의 명령어(예: RUN, COPY 등)가 실행될 때마다 생성된다. 예를 들어, Dockerfile에서 각 명령어를 실행할 때마다 새로운 레이어가 만들어지며, 이런 레이어들이 쌓여서 하나의 Docker 이미지를 형성한다. 이때 각 레이어는 변경된 부분만 저장되므로, 이미지가 효율적으로 관리될 수 있다.읽기 전용(Read-only): 이미지를 구성하는 레이어들은 모두 읽기 전용이다. 즉, 이미지를 실행하면서 이 레이어들을 변경할 수 없다.레이어의 중복 방지: Docker는 이미지의 레이어..

image