본문 바로가기
반응형

분류 전체보기108

Docker Image를 Minikube 로드하기 Docker Image를 Minikube로 로드 하는 과정에서 아래 에러가 발견됬습니다. ~ minikube image load api-exam:0.0.1 ❌ Exiting due to GUEST_IMAGE_LOAD: Failed to load image: save to dir: caching images: caching image "/Users/myuserid/.minikube/cache/images/arm64/api-exam_0.0.1": write: unable to calculate manifest: blob sha256:00fd5b12683afed295344689d9cd313043ecd10a660da04f9c48484e10095a09 not found GUEST_IMAGE_LOAD: Failed.. 2024. 3. 24.
ArgoCD를 통해서 Application 배포 지난번 포스팅에서 ArgoCD를 구축하는 방법을 정리했습니다. 이어서 Application을 만들고 Git Ops 워크플로우를 적용해봅시다. 1. Git Ops 워크플로우란 GitOps 워크플로우란 Git Repository를 통해 Application 배포 및 관리를 수행하는 것을 뜻합니다. Application의 상태와 구성이 Git 저장소에 정의되어있으며, 변경사항이 Commit 되면 ArgoCD를 통해서 Application 배포가 이뤄지게 됩니다. 위와 같은 워크플로우 적용을 위해서는 Git Repository에 저장될 정의가 중요할 것입니다. 여기서 kustomize라는 쿠버네티스의 오브젝트 선언형 관리 방법을 적용해 볼 수 있습니다. 2. Kustomize로 Application 정의 여기.. 2024. 3. 24.
Springbatch에서 메타테이블 없이 실행(Springbatch 5) 외부로부터 대량의 데이터를 가져와 주기적으로 가공 및 저장하는 기능 개발이 필요했습니다. 이에 Springbatch를 사용해서 배치 프로그램을 작성 해보기로 했습니다. 다만, 문제가 있었는데요. 자주 실행 되는 만큼 메타 테이블에 데이터가 너무 많이 쌓인다는 것이었어요. 메타 테이블이란 Springbatch 프레임워크에서 작업의 상태를 추적하고 관리하기 위해 메타데이터를 저장하는 장소입니다. BATCH_JOB_INSTANCE, BATCH_JOB_EXECUTION, BATCH_STEP_EXECUTION ... 등으로 구성되어 있습니다. 기본적으로 Job을 실행하면 해당 테이블에 관련 데이터들이 자동으로 생성 및 저장됩니다. 메타테이블을 사용한다면 거기에 따른 장점이 있겠지만 현시점에서 중요도는 떨어져서 메.. 2024. 3. 19.
Kubernetes, ArgoCD 설치 해보기(with Minikube) ArgoCD는 쿠버네티스 클러스터에 쉽게 애플리케이션을 배포 할 수 있게 해주는 유용한 도구입니다. 저도 실무에서 사용하고 있는데요. 운영을 하고 있는건 아니고 개발자로서 사용자 입장입니다. ArgoCD가 없는 업무 환경은 상상하기 싫을 정도로 만족하며 쓰는 도구입니다.👍 아래와 같은 주요 특징이 있습니다. 사용자 친화적 UI 제공 Git repository와 연동 및 지속 배포(Continuous Delivery) 구성 손쉬운 쿠버네티스 CLI(Command Line Interface) 사용 이번 포스팅에서는 ArgoCD를 설치하는 과정을 정리합니다. Docker, Minikube가 설치되어 있어야합니다. 1. 설치 먼저 설치하기 전에 Namespace를 하나 만들어 줍니다. ~ kubectl crea.. 2024. 3. 9.
kubectl 자주 쓰는 명령어 정리 kubectl은 쿠버네티스 클러스터 사용을 위한 CLI(Comand Line Interface)입니다. 이번 포스팅에서는 실무에서 자주 사용하는 kubectl을 정리해봅니다. 1. 설치 만약 로컬 환경에 minikube 설치 또는 kubernetes on docker desktop 활성화가 되어있다면 따로 설치할 필요가 없습니다. 만약 쿠버네티스 클러스터가 외부에 있다면 공식 홈에서 설치 가능합니다. 설치가 완료되었다면 아래처럼 로컬 PC에서 kubectl 사용 가능합니다. ~ kubectl version Client Version: v1.29.2 Kustomize Version: v5.0.4-0.20230601165947-6ce0bf390ce3 Server Version: v1.28.3 2. 클러스터 .. 2024. 3. 9.
Kubernetes, Ingress 구성 해보기 Ingress는 쿠버네티스 클러스터 외부에서 내부 서비스로 HTTP와 HTTPS 경로를 노출하기 위해 사용합니다. 위 핵심 기능 외에도 Ingress 리소스에 라우팅 규칙을 정의하여 로드밸런서로서의 역할을 할 수도 있습니다. 이번 포스팅에서는 Minikube를 통해 Ingress를 설정하는 방법을 정리합니다. 그 전에 Minikube 및 간단한 Service, Deployment는 구성되어 있다고 가정합니다. 이전 포스팅👉 Minikube 설치: https://basketdeveloper.tistory.com/104 Service 구성: https://basketdeveloper.tistory.com/105 1. Ingress 설치 아래처럼 minikube 명령어를 통해 ingress를 클러스터에 설치해.. 2024. 3. 8.
Kubernetes, Deployment와 Service 구성 해보기 배포 (Deployments): 컨테이너의 롤아웃 및 업데이트를 관리하며, 응용 프로그램 복제본 및 이미지 버전의 원하는 상태를 유지합니다. 롤링 업데이트 및 롤백을 지원합니다. 실제 Application 구성 단위가 됩니다. 서비스 (Services): 클러스터 내부에서 응용 프로그램 컨테이너에 대한 네트워킹 및 액세스를 제공하며, 아래와 같은 타입이 있습니다. ClusterIP: 쿠버네티스 클러스터 내부에서만 통신을 허용합니다. 운영환경에서 백엔드 서버 구성에 사용됩니다. NodePort: 특정 포트를 매핑 시킵니다. 그리고 클러스터 외부에서 해당 포트로 접근을 허용합니다. 운영환경에서는 권장하지 않습니다. Loadbalancer: 클라우드 제공업체에서 제공하는 로드 밸런서를 사용하여 서비스를 외부로.. 2024. 3. 2.
Minikube 설치해보기 Minikube는 로컬 컴퓨터에서 Kubernetes 클러스터를 실행하는 도구로, 개발 및 테스트 목적에 유용합니다. 컴퓨터 내 가상 머신 안에 단일 노드 Kubernetes 클러스터를 설정하여 전체 규모의 클러스터나 클라우드 인프라 없이도 Kubernetes를 실험할 수 있게 해줍니다. 해당 포스팅에서는 Minikube를 로컬 PC에 설치하는 방법을 정리합니다. 먼저 저의 로컬 PC 환경은 아래와 같습니다. 사전에 도커가 받드시 설치되어 있어야합니다. MacOS Sonoma (칩: M2) Docker version 25.0.3 (Docker Desktop on Mac 사용 중) 1. 설치 MacOS에서는 Homebrew가 설치되어 있다면, 아래 명령어로 간단히 설치 가능합니다. 터미널을 열러 brew.. 2024. 3. 2.
[독서] 가상 면접 사례로 배우는 대규모 시스템 설계 1 이 책의 목차를 열었을때, 개발자라면 흥미로운 단어들이 많이 눈에 띌 것입니다. 웹크롤러, 분산시스템, 피드 시스템, 검색어 자동 완성, 유투브 설계 등 챕터 별로 다양한 종류의 시스템을 어떻게 설계하고 개발 할 것인가에 대한 내용이 포함되어 있습니다. 몇몇 기억에 남는 내용을 포스팅 해봅니다. 서버 확장 1장 사용자 수에 따른 규모 확장성에서는 실제 현업에서 많이 고민하게 되는 서버의 확장성에 대해서 이야기 하고 있습니다. 비관계형 데이터 저장소(NoSQL)을 고려해봄직 할 케이스를 기술 한 것이 기억에 남네요. 낮은 응답 지연(Latency) 비정형 데이터 데이터를 직렬화, 역직렬화 대규모 데이터 저장 위 같은 요구가 있다면 고려해봄직 하다고 합니다. 그리고 웹 계층의 무상태, 데이터 베이스의 수평.. 2024. 3. 1.
Multi-module에서 Domain 분리하기 Springboot로 API 서버 애플리케이션 등을 개발할 때 Multi-module을 채택 할 수 있습니다. (요즘 핫하다고는 못하겠네요. 주목 받은지 꽤 시간이 흐른듯합니다 ㅎㅎ) 아래와 같은 Multi-module로 된 프로젝트가 있습니다. Front API와 Backoffice API를 개발하다보면 같은 도메인(예: DB Entity 및 Repository)을 사용할 때가 생길 수 있습니다. 중복코드가 많아 질 수 있는 상황입니다. 아래와 같이 Domain 모듈로 분리해주면 좀 더 세련된 코딩을 할 수 있을 것 같습니다. 이번 포스팅에서는 Multi-module에서 Domain(DB 의존성) 모듈을 분리하여 세팅할 때 필요한 작업을 정리해봅니다. 1. 프로젝트 구조 Project의 각 Module.. 2024. 2. 21.
MongoDB, docker-compose로 띄워보기 1. MongoDB란? MongoDB는 유연한 JSON 형식으로 데이터를 저장하는 인기 있는 NoSQL 데이터베이스입니다. Document Base 데이터베이스로, 데이터를 Table과 Row가 아닌 Document로 저장합니다. MongoDB는 유연한 스키마, 확장성, 고가용성, 쿼리, Indexing 등으로 다양한 웹서비스에서 사용됩니다. 대부분의 프로덕션 환경에서는 MongoDB 인프라는 클러스터링 되어 구성됩니다. 클라우드를 사용한다면 AWS DocumentDB를 선택할 수 있습니다. 이는 MongoDB와 완전 호환됩니다. 이번 포스팅에서는 MongoDB를 docker-compose로 띄우고, 계정 생성까지 해보겠습니다. 2. docker-compose.yml 작성 아래와 같이 docker-com.. 2024. 2. 14.
Springboot Webflux에서 blocking 감지하기(with BlockHound) 1. BlockHound란? Webflux를 도입하고 로깅 관련 리서치를 하던 중 우연히 blocking을 감지하는 라이브러리가 있다는 것을 알게 되었습니다. 출처: https://stackoverflow.com/questions/63788067/spring-webflux-and-non-blocking-logging-with-log4j2 로깅 관련 Stackoverflow질문의 채택된 답변에서 처음 접하게 되었습니다. BlockHound란 리액티브 애플리케이션에서 Blocking 코드를 감지하고 식별하는 라이브러리입니다. Project Reactor와 호환되며, Blocking 코드를 감지하고 StackTrace를 통해 그 원인을 식별합니다. Project Reactor를 기반으로 하는 Webflux는 .. 2024. 2. 8.
반응형