![[Docker + SpringBoot] Docker와 SpringBoot의 타임존 동기화](https://img1.daumcdn.net/thumb/R750x0/?scode=mtistory2&fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FHkcgi%2FbtsJ0frndDM%2FuyKPrDjUJW1yaf9ZKYxkbK%2Fimg.png)
환경스프링부트 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..
![[Docker] Stateless](https://img1.daumcdn.net/thumb/R750x0/?scode=mtistory2&fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FbYOuUf%2FbtsJuHI9h8O%2Fo1h8SKr2jAb9QVoyT947fK%2Fimg.webp)
StatelessStateless(무상태)는 시스템이나 애플리케이션이 특정 요청 간의 상태를 저장하지 않는 구조를 의미한다. 즉, 각 요청은 서로 독립적이며, 요청을 처리하는 데 있어서 이전의 요청이나 세션 정보를 참조하지 않는다.Docker에서 Stateless는 컨테이너의 성격과 관련이 깊다. Docker 컨테이너는 애플리케이션의 실행 환경을 격리된 상태로 제공하며, Stateless 방식으로 설계된 애플리케이션을 실행하기에 적합하다. 컨테이너의 Stateless 특성Docker 컨테이너는 일반적으로 Stateless 특성을 가진다. 즉, 컨테이너를 중지하거나 삭제하면 그 안에서 발생한 모든 변경 사항이 사라진다.Stateless 애플리케이션은 상태를 컨테이너 내부에 저장하지 않으므로, Docker의..
![[Docker] 이미지와 컨테이너 레이어](https://img1.daumcdn.net/thumb/R750x0/?scode=mtistory2&fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FXC760%2FbtsJuzD8Z5t%2FF6kZr1CeD8DxIhpi4Qro61%2Fimg.webp)
이 글은 인프런의 개발자를 위한 쉬운도커(데브위키) 강의를 수강하고 개인적으로 정리하는 글임을 알립니다.이미지 레이어(Image Layer)Docker 이미지는 여러 개의 읽기 전용 레이어로 구성되어 있다. 각 레이어는 하나의 명령어(예: RUN, COPY 등)가 실행될 때마다 생성된다. 예를 들어, Dockerfile에서 각 명령어를 실행할 때마다 새로운 레이어가 만들어지며, 이런 레이어들이 쌓여서 하나의 Docker 이미지를 형성한다. 이때 각 레이어는 변경된 부분만 저장되므로, 이미지가 효율적으로 관리될 수 있다.읽기 전용(Read-only): 이미지를 구성하는 레이어들은 모두 읽기 전용이다. 즉, 이미지를 실행하면서 이 레이어들을 변경할 수 없다.레이어의 중복 방지: Docker는 이미지의 레이어..
![[Docker] MySQL 이미지 빌드](https://img1.daumcdn.net/thumb/R750x0/?scode=mtistory2&fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FbcBuqM%2FbtsJthXJAPa%2FO6WkDo5x9ADKa6rDA492gK%2Fimg.webp)
도커파일이 존재하는 디렉토리에 init.sql과 my.cnf가 존재한다.init.sql은 구축되어야할 DDL등이 정의되어있는 sql 파일이다. Dockerfile# MySQL 8.0 버전을 베이스 이미지로 사용FROM mysql:8.0.32# MySQL 설정 파일을 복사COPY ./my.cnf /etc/mysql/conf.d/my.cnf# init.sql 파일을 /docker-entrypoint-initdb.d/로 복사COPY ./init.sql /docker-entrypoint-initdb.d/# 계정 정보 설정ENV MYSQL_ROOT_PASSWORD=ENV MYSQL_DATABASE=ENV MYSQL_USER=ENV MYSQL_PASSWORD=# MySQL 기본 포트 3306 노출EXPOSE 330..
![[Docker] 이미지 레지스트리](https://img1.daumcdn.net/thumb/R750x0/?scode=mtistory2&fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2F7kgRx%2FbtsJtc2VknH%2F1uWA7cGdkt8EAUqRox6d40%2Fimg.webp)
이 글은 인프런의 개발자를 위한 쉬운도커(데브위키) 강의를 수강하고 개인적으로 정리하는 글임을 알립니다.이미지 레지스트리도커 이미지 레지스트리(Docker Image Registry)는 도커 이미지들을 저장하고 관리하는 중앙 저장소 역할을 하는 서비스이다.도커는 애플리케이션을 패키징한 이미지를 생성한 후, 이 이미지를 레지스트리에 저장하고, 필요할 때 해당 이미지를 다운로드하여 컨테이너를 실행한다.퍼블릭 레지스트리-누구나 접근할 수 있는 레지스트리로, 가장 대표적인 퍼블릭 레지스트리는 Docker Hub이다. -Docker Hub에는 수많은 공식 이미지(Nginx, MySQL, Redis 등)와 커뮤니티가 만든 이미지를 제공하며, 무료로 사용할 수 있다.프라이빗 레지스트리-조직이나 개인이 비공개로 운영하..
![[Docker] 이미지와 컨테이너](https://img1.daumcdn.net/thumb/R750x0/?scode=mtistory2&fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FFFsOF%2FbtsJsfzvm4c%2FiDVKheDalkCqYmKwhdHtnk%2Fimg.webp)
이 글은 인프런의 개발자를 위한 쉬운도커(데브위키) 강의를 수강하고 개인적으로 정리하는 글임을 알립니다.도커 이미지이미지는 애플리케이션을 실행하기 위한 모든 파일, 라이브러리, 설정을 미리 포함한 패키지라고 생각하면 된다. 이미지는 변하지 않는 읽기 전용 파일 시스템으로 구성되며, 이를 기반으로 컨테이너를 생성하고 실행한다.도커의 이미지는 애플리케이션과 그 실행에 필요한 모든 요소를 포함한 애플리케이션 실행 패키지이다.이미지는 읽기 전용으로 유지되며, 컨테이너를 생성할 때 이 이미지를 기반으로 애플리케이션을 실행한다.여러 계층으로 구성되어 있어 효율적으로 관리할 수 있으며, 이미지를 공유하고 재사용할 수 있다.애플리케이션 패키지이미지에는 특정 애플리케이션을 실행하기 위해 필요한 모든 것이 들어 있다. 예..
![[Docker] 하이퍼바이저 및 컨테이너 가상화와 도커 아키텍쳐](https://img1.daumcdn.net/thumb/R750x0/?scode=mtistory2&fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FbxUAj0%2FbtsJshxaJ34%2F94A6H2u0EGnBQyWeXX8kn1%2Fimg.webp)
이 글은 인프런의 개발자를 위한 쉬운도커(데브위키) 강의를 수강하고 개인적으로 정리하는 글임을 알립니다.하이퍼바이저 가상화가상 머신(Virtual Machine)두 개의 가상 머신이 물리적 서버에서 실행되고 있으며, 각각 리눅스(Linux)와 맥(MacOS) 운영체제를 사용하는 게스트 OS(Guest OS)를 가지고 있다.가상 머신은 각기 독립적인 프로세스를 실행하고, 리소스(예: CPU, 메모리, 저장공간)를 할당받아 운영된다.각 게스트 OS는 자체 커널(Kernel)을 가지고 있으며, 사용자 프로세스는 이 커널을 통해 시스템 자원에 접근하게 된다. 하이퍼바이저(Hypervisor)가상 머신들을 관리하는 소프트웨어 계층이다.하이퍼바이저는 물리적 서버 자원을 추상화하여 각 가상 머신에 필요한 리소스를 할..
![[Docker] Docker를 이용한 AWS EC2에 배포](https://img1.daumcdn.net/thumb/R750x0/?scode=mtistory2&fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2Fp2yzF%2FbtsJg78sbch%2FEsskCSNKxPfc9TUgVxF4h1%2Fimg.webp)
서버 환경 : Ubuntu 24.04 LTS (GNU/Linux 6.8.0-1012-aws x86_64)MySQL : 8.0.32스프링부트 : 3.3.3Redis : latest(24.8.26 기준) EC2에 Docker, Docker Compose 설치sudo apt-get update && \sudo apt-get install -y apt-transport-https ca-certificates curl software-properties-common && \curl -fsSL https://download.docker.com/linux/ubuntu/gpg | sudo apt-key add - && \sudo apt-key fingerprint 0EBFCD88 && \sudo add-apt-rep..