안녕하세요.
사람에 가치를|
개발자 최민석입니다.

thumbnail
Devops
K8S
July 04, 2025
CKA 합격 후기

CKA 합격 후기 2025년 6월, 올해 따기로 결심했던 자격증 중 하나인 CKA에 합격했다. 개정된 시험 포맷 이후 치른 시험이었고, DevOps, MSA 아키텍처, 인프라 자동화에 깊은 관심을 가져오던 나로서는 하나의 마일스톤이 되었다. 이 글에서는 내가 CKA에 합격하기까지 어떤 전략과 학습 경로를 거쳤는지, 어떤 부분에서 시간을 쏟았는지, 그리고 실전 시험에서 어떤 식으로 접근했는지를 공유하려한다. 왜 CKA인가? 나는 온프레미스 환경(Proxmox)에서 을 이용해 직접 Kubernetes 클러스터를 구축한 경험이 있다. 여기에 MetalLB, Calico CNI, Ingress, Istio, Helm 등을 직접 적용해보면서, Kubernetes는 나에게 단순한 관심사를 넘어 직접 다루고 싶은 도구가 되었다. 나는 백엔드 개발자이지만, 나 스스로를 단순히 “백엔드 개발자”로만 규정하고 싶지 않았다. 프론트엔드부터 인프라, 운영까지 전반적인 흐름을 이해하고 다룰 수 있는 개…

Etc
May 31, 2025
NICE PASS 인증 API 연동 가이드

🔐 NICE PASS 인증 API 연동 가이드 본 문서는 서버에서 안전하게 암호화 폼 데이터를 핸들링하고 클라이언트와 통신하면서 사용자의 정보를 취득하는 프로세스를 상세히 설명합니다. 🏃 준비하기 (프로젝트가 생성된 상태라고 가정합니다.) Nice API에서 SecretKey를 조회합니다. 여기서 ClientID, ClientSecret을 얻을 수 있습니다. 상세보기에서 구성 상품 섹션으로 이동합니다. 여기서 ProductId(상품코드)를 얻을 수 있습니다. 다음과 같이 nice.yaml에 저장합니다. ⚠️ 추가로, 로컬에서 테스트를 하기 위해서는 APP 세부정보에서 허용할 IP를 명시해야합니다. 배포시에도 마찬가지입니다. 💪 전체 플로우 파악 클라이언트 = 프론트엔드 서버 = 백엔드(우리가 구현할 것) NICE서버 = NICE측 서버 위 플로우를 반드시 숙지해주세요. 각 번호 기준으로 설명합니다. 요청 및 콜백은 직선이고, 요청에 대한 응답은 점선입니다. 1. 기관토큰 신청…

Devops
Docker
April 25, 2025
🐳 DinD vs DooD / Docker 기반 Jenkins/Argo CI/CD 전략 분석

🐳 DinD vs DooD: Docker 기반 Jenkins/Argo CI/CD 전략 분석 Docker 기반의 CI/CD 파이프라인을 구성할 때, Jenkins나 Argo 같은 자동화 도구에서 Docker를 어떻게 실행할지에 따라 DinD(Docker-in-Docker) 와 DooD(Docker-outside-of-Docker) 두 가지 방식 중 선택하게 된다. DinD (Docker-in-Docker) 컨테이너 내부에서 자체적으로 Docker 데몬을 실행하여, 완전한 격리 환경을 제공한다. 예를 들어, Jenkins Job이 실행되는 컨테이너 안에서 독립적인 Docker 데몬을 구동하여, 그 안에서 다시 컨테이너를 실행하는 구조이다. 이러한 방식은 테스트 환경을 완전히 분리하고자 할 때 유용하다. 그러나 —privileged 권한이 필요하며, 보안상 위험이 존재하고 리소스 사용량이 많을 수 있다. DooD (Docker-outside-of-Docker) 컨테이너에서 호스트의 …

Spring
MSA
DDD
April 25, 2025
DDD Aggregate 패턴과 OneToMany 메모리 비효율성 문제에 대한 고찰

DDD 애그리거트에서의 fetch join 처음 나는 도메인 주도 설계(DDD)의 원칙에 따라 와 을 하나의 애그리거트로 묶었다. 그리고 자연스럽게 모든 의 변경은 루트를 통해서만 일어나도록 설계했다. 이 구조 자체는 문제가 없었다. 문제는 그 이후, 성능 최적화에 대한 오해에서 비롯되었다. 💡 애그리거트 패턴이란? 애그리거트(Aggregate) 패턴은 도메인 모델에서 관련된 객체들을 하나의 일관된 단위로 묶어 관리하는 개념이다. 이 묶음의 중심에는 루트 엔티티(Aggregate Root)가 있으며, 외부에서는 반드시 루트를 통해서만 내부 구성 요소에 접근하거나 변경할 수 있다. 이렇게 함으로써 도메인의 불변 조건이나 비즈니스 규칙을 루트가 통제할 수 있게 된다. 구성 객체들은 루트 없이는 독립적으로 저장되거나 로딩될 수 없다. 애그리거트는 하나의 트랜잭션 단위를 구성하며, 변경은 항상 이 경계 내에서 일어난다. 여러 애그리거트가 서로 참조할 경우에는 실제 객체 참조 대신 식별자…