1-3. Worker Node 컴포넌트 (kubelet, kube-proxy)
·
DevOps/kubernetes
이번 편에서는 실제 파드가 실행되는 Worker Node의 컴포넌트와, 컨테이너 런타임이 Docker에서 containerd로 전환된 흐름을 함께 정리합니다.이 글은 “[Udemy] CKA with Practice Tests” 강의를 수강하며 정리한 내용을 바탕으로 작성한 내용입니다.kubeletkubelet은 각 쿠버네티스 노드에서 실행되는 에이전트입니다.kube-apiserver로부터 명령을 받아 실제 컨테이너를 실행하고 관리하며, 클러스터에서 파드가 Running 상태가 되기까지의 마지막 실행 단계를 담당합니다. 동작 흐름은 아래와 같습니다.kube-apiserver가 특정 파드를 노드에 바인딩 (.spec.nodeName 기록)해당 노드의 kubelet이 새로운 파드 정보를 감지파드 스펙(spec..
1-2. Control Plane 컴포넌트 (etcd, API Server, Controller Manager, Scheduler)
·
DevOps/kubernetes
이 글은 “[Udemy] CKA with Practice Tests” 강의를 수강하며 정리한 내용을 바탕으로 작성한 내용입니다.etcdetcd는 쿠버네티스의 데이터 저장소로 쿠버네티스 마스터 노드에서 실행됩니다.etcd 데이터 저장소는 PODS, Configs, Secrets, Accounts, Roles, Bindings와 같은 클러스터에 대한 정보를 저장합니다.kubectl get으로 조회하는 모든 정보는 etcd에서 가져오는 것이며, 노드 추가, 파드 배포 등 클러스터에서 발생하는 모든 변경 사항도 etcd에 기록됩니다.데이터베이스의 형태로 key-value 값으로 저장되기 때문에, /var/lib/etcd에 저장 가능하고, 별도의 파일로 백업(스냅샷) 가능합니다. 설치 방법# *바이너리 설치*wg..
1-1. 쿠버네티스란?
·
DevOps/kubernetes
이 글은 “[Udemy] CKA with Practice Tests” 강의를 수강하며 정리한 내용을 바탕으로 작성한 내용입니다.컨테이너 인프라 환경이란?리눅스 운영체제의 커널 하나에서 여러 개의 컨테이너가 격리된 상태로 실행되는 인프라 환경입니다.여기서 컨테이너는 목적을 위해 독립적으로 작동하는 프로세스입니다. 각 컨테이너는 CPU, 네트워크, 메모리 같은 시스템 자원을 독자적으로 사용하도록 할당된 개별 실행 환경을 갖습니다.PID도 컨테이너 안에 격리돼 관리되기 때문에, 컨테이너 내부에서 실행되는 애플리케이션들은 서로 영향을 미치지 않고 독립적으로 작동합니다. 리눅스는 하나의 호스트 운영체제 안에서 이 격리를 두 가지 방식으로 제공해왔습니다.매커니즘역할cgroup (Control Group)CPU, 메..
2-2. ansible-playbook 역할 기반으로 재구성하기
·
프로젝트/엔터프라이즈 JVM 애플리케이션의 Cloud-Native 전환기
Ansible 플레이북 업그레이드 — 단일 파일에서 Role 기반 구조로이 글은 "엔터프라이즈 JVM 애플리케이션의 Cloud-Native 전환기" 시리즈의 2편 후기입니다.지난 편에서 site_orbstack.yml 하나로 k3s 클러스터를 구축했습니다.플레이북이 정상적으로 동작하는 걸 확인하고 나서, 한 가지 생각이 들었습니다."이 파일, 나중에 클라우드 환경에서도 재사용할 수 있을까?" 솔직히 말하면 어렵습니다. DB 설정을 조금 고치려다 실수로 쉼표 하나를 지우면 k3s 클러스터 설치 전체가 영향을 받을 수 있고, 개발 환경과 운영 환경의 JVM 메모리 크기가 다른데 그걸 코드 안에서 분리할 방법도 마땅치 않습니다.처음부터 이 프로젝트의 목표가 run-book으로 재사용할 수 있는 템플릿을 만드는..
[Github] Github Projects를 Jira처럼 세팅하기 (사이드 프로젝트 관리)
·
DevOps/Github
Atlassian 엔지니어로 근무하며 기업들의 협업 도구(Jira, Confluence 등)를 운영하다 보니, 자연스럽게 체계적인 프로젝트 관리에 많은 관심을 가지게 되었습니다.최근 사이드 프로젝트를 시작하면서 진행 상황을 효율적으로 관리할 시스템이 필요했고, 이슈 관리 툴로 GitHub Projects를 선택하게 되었습니다.이번 글에서는 엔지니어의 관점에서 왜 GitHub Projects를 선택했는지에 대한 고찰과, 이를 Jira의 체계적인 이슈 관리 형태처럼 구성한 방법을 기록으로 남기고자 합니다.왜 GitHub Projects인가?Jira는 대규모 프로젝트와 엔터프라이즈 환경에서 매우 강력한 도구입니다. 하지만 소규모 인원이 빠르게 진행해야 하는 사이드 프로젝트 환경에서는 다음과 같은 점들을 고려해..
Spring Bean 이란?
·
Backend
Spring에서 Bean은 Spring 컨테이너가 직접 생성하고 관리하는 Java 객체를 의미합니다.일반적인 Java 객체는 개발자가 new 연산자를 통해 생성하고 관리하지만, Spring Bean은 스프링 컨테이너가 생성, 의존성 주입, 초기화, 소멸까지의 생명주기(Lifecycle)을 전적으로 관리합니다.제어의 역전(IoC)과 의존성 주입(DI)스프링이 Bean을 관리하는 원리를 이해하기 위해서는 IoC와 DI라는 개념을 알아야 합니다.제어의 역전(IoC : Inversion of Control)객체의 제어권이 개발자가 아닌 **프레임워크(Spring)**에 있는 것을 말합니다.전통적인 프로그래밍에서는 개발자가 직접 객체를 생성하고 흐름을 제어했지만, 스프링에서는 프레임워크가 객체의 생명주기(생성, ..
Maven vs Gradle vs Ant : 빌드 방식의 변화
·
Backend
Java 개발을 시작하면 가장 먼저 마주하는 것이 바로 빌드 도구입니다.pom.xml, build.gradle, build.xml… 각 파일들은 대체 무엇이고, 왜이렇게 많은 빌드 도구들이 존재할까요? Spring 프로젝트 빌드에 사용되는 다양한 도구들의 차이점과 빌드 방식을 알아보려고합니다.우선 빌드 도구인 Ant, Mave, Gradle을 도입하게 된 배경과, 목적을 한번 정리해봤습니다.Java 빌드 도구의 역사와 배경Ant (2000년 출시)배경 : Unix의 Make를 Java 세계로 가져오려는 시도, Java의 “Write Once, Run Anywhere”의 철학에 맞춰 플랫폼 독립적 빌드 필요특징절차적(Imperative) 방식의 XML 기반 빌드 스크립트의존성 관리 기능이 없음Maven (..
[Docker] 컨테이너 실행 과정 파헤치기
·
DevOps/docker
앞 글에서 도커의 이론적인 구조를 정리해본 후, 실제로 컨테이너가 어떤 과정으로 실행되는지 궁금해졌습니다.직접 도커를 설치하고 테스트하면서, 어떤 과정으로 컨테이너가 실행되는지 정리해보려고 합니다.Docker 설치테스트 환경은, M3 맥북에서 가상머신을 구성하여 진행했습니다.아키텍처 : aarch64linux : Rocky Linux 9.3 기존에 설치된 패키지 삭제sudo dnf remove -y docker docker-client docker-client-latest docker-common docker-latest docker-latest-logrotate docker-logrotate docker-engine docker 설치# docker 저장소 추가sudo dnf config-manager ..
Springboot 공통 예외처리를 위한 로직
·
Backend
이번 글에서는 사이드 프로젝트를 진행하며 구성했던 전역 예외 처리(Global Exception Handling) 로직에 대해 정리 후 공유해보려고 합니다.프로젝트 초기, “어떻게 하면 Error Code를 템플릿화하여 모든 도메인에서 공통적으로 사용할 수 있을까?”라는 고민이 가장 컸습니다. 특히 추후 Spring 프레임워크나 라이브러리에서 발생하는 표준 예외에도 적용할 수 있도록 확장성을 고려한 설계를 목표로 했습니다.아래의 방법이 정답이라고 할 수는 없지만, 제가 고민하고 구현했던 기록을 공유합니다.설계 목표 : 일관된 에러 응답 및 관심사 분리이번 설계의 핵심 목표는 두 가지입니다.일관된 에러 응답 제공: 애플리케이션 전체에서 발생하는 다양한 예외를 잡아 클라이언트에게 표준화된 형식의 JSON 에..
Spring Boot 테스트 코드를 통한 안정적인 애플리케이션 관리
·
Backend
소프트웨어 개발에서 테스트는 선택이 아닌 필수입니다. 특히 스프링 부트 기반의 백엔드 개발에서는 다양한 레벨의 테스트를 효율적으로 조합하여 코드의 품질과 안정성을 확보해야 합니다.이번 글에서는 Spring Boot 환경에서 가장 많이 쓰이는 단위 테스트, 통합 테스트, 슬라이스 테스트를 언제, 어떻게 사용해야 하는지 구체적인 적용 방법을 살펴보려고 합니다.테스트 개발 방법론의 이해: TDD와 회귀 테스트A. 테스트 주도 개발 (TDD, Test-Driven Development)TDD는 '실패하는 테스트를 작성 → 테스트를 통과할 만큼만 최소한의 코드를 작성 → 코드를 리팩토링'의 짧은 주기를 반복하는 개발 방법론입니다.정의: 테스트를 먼저 작성하고, 그 테스트를 통과하는 프로덕션 코드를 나중에 작성하는..
[Docker] 도커와 컨테이너란 무엇일까?
·
DevOps/docker
개발하다 보면 환경 차이 때문에 예상치 못한 오류를 자주 만나게 됩니다.특히 여러 사람이 서버를 관리하는 환경에서는 각자 다른 방식으로 설정하다 보니 일관성이 무너지곤 합니다.컨테이너를 활용하면 이런 문제들을 깔끔하게 해결할 수 있다는 걸 알게 되었고, 제대로 이해하기 위해 정리한 내용들을 공유합니다.컨테이너를 실행하기 위해서는 먼저 Docker가 필요합니다.그렇다면 Docker란 무엇이고, 왜 애플리케이션을 컨테이너화하여 사용하는 걸까요? 애플리케이션을 왜 컨테이너화 해야할까?컨테이너를 사용하면 주변 환경과의 격리가 가능하고 애플리케이션이 실행할 때 사용하는 모든 것이 컨테이너 안에 준비됩니다.예를 들어, 우리가 만든 Spring Boot 애플리케이션의 경우 대부분의 의존성은 Gradle에 의해 관리되..
[GitLab] GitLab 설치 및 초기 설정
·
DevOps/GitLab
프로젝트를 진행하면서 체계적인 코드 관리와 팀 협업을 위한 관리 시스템의 중요성을 느끼게 되었습니다.지금까지는 클라우드 기반의 Github를 주로 활용해왔으나, 최근 많은 기업들이 데이터 보안과 자체 관리를 위해 온프레미스 기반의 GitLab 자체 호스팅을 채택하는 경향이 있어 이를 학습해보기로 결정했습니다.초기 설치 과정부터 프로젝트 운영, CI/CD 파이프라인 설정에 이르기까지 실제 프로젝트를 구축하며 공부한 내용들을 기록으로 남기고자 합니다.테스트 진행 중인 개발 환경이 M3 칩셋의 맥북이다 보니, 패키지 의존성 문제와 환경 통일성을 확보하기 위해 Docker 컨테이너 기반으로 Gitlab 서버를 설치하는 방식을 선택했습니다. 시작하기 전에GitLab은 다양한 환경에 맞는 설치 가이드를 제공하고 ..
okbear3
bear's blog