전체 글 76

단위 테스트와 통합 테스트, 언제 어떤 걸 써야 할까?

단위 테스트와 통합 테스트, 언제 어떤 걸 써야 할까?개발을 하다 보면 "테스트를 왜 해야 하지?", "어떤 테스트가 더 중요한가?" 같은 고민이 생긴다.이번에 직접 테스트를 작성하면서, 단위 테스트와 통합 테스트에 대해 정리해봤다.✅ 단위 테스트(Unit Test)란?실제 데이터 없이, 로직 자체의 흐름과 메서드 호출 여부를 검증하는 테스트주로 mock 객체를 사용하여 의존성 분리빠르고, 내부 구현이 바뀌면 바로 확인 가능💡 예를 들어특정 메서드가 호출되었는지if/else 조건 분기가 잘 작동하는지특정 입력에 대해 정확한 출력을 내는지✅ 통합 테스트(Integration Test)란?실제 데이터(DB 등)를 사용하여 기능이 전반적으로 잘 동작하는지를 검증사람이 수동으로 하던 QA를 자동화한 느낌예: ..

Kubernetes에서 MySQL과 연동하여 볼륨(Persistent Volume) 사용하기

쿠버네티스(Kubernetes)에서 MySQL을 배포할 때, 데이터를 지속적으로 유지하려면 Persistent Volume (PV) 및 **Persistent Volume Claim (PVC)**를 활용해야 합니다. 이 글에서는 MySQL을 쿠버네티스에서 운영하면서 볼륨을 연동하는 방법을 설명합니다.1. Persistent Volume (PV) 생성PV는 클러스터 내에서 사용할 수 있는 스토리지 자원을 정의하는 객체입니다. MySQL 데이터를 유지하기 위해 PV를 생성합니다.apiVersion: v1kind: PersistentVolumemetadata: name: mysql-pvspec: capacity: storage: 10Gi accessModes: - ReadWriteOnce p..

DevOps/k8s 2025.02.06

MSA 도커 localhost 안될때 호스트머신 주소 접근방법, host.docker.internal

Docker 컨테이너 간 통신 및 localhost 사용 문제 해결 문제 상황Docker 컨테이너에서 localhost 또는 **127.0.0.1**을 사용할 경우, 이는 컨테이너 내부를 참조합니다.따라서 다른 컨테이너나 호스트 머신에 접근하려고 할 때 연결되지 않는 문제가 발생할 수 있습니다.해결 방법방법 1. 컨테이너 이름으로 접근Docker는 같은 네트워크에 있는 컨테이너 간에 컨테이너 이름을 도메인 이름처럼 사용할 수 있도록 지원합니다.예를 들어, **post-service**라는 이름의 컨테이너에 접근하려면 **http://post-service:포트번호**로 요청할 수 있습니다. 1. 컨테이너를 같은 네트워크로 설정기본적으로 Docker 컨테이너는 서로 다른 네트워크로 분리되어 있습니다. 따라..

DevOps/Docker 2025.02.05

쿠버네티스 ConfigMap과 Secret 완벽 정리

쿠버네티스에서 애플리케이션의 설정을 분리하여 관리하는 두 가지 주요 리소스가 ConfigMap과 Secret입니다. 이 두 가지는 환경 설정 값을 Pod에 주입하는 데 사용되지만, 중요한 차이점이 있습니다. 이번 포스팅에서는 ConfigMap과 Secret의 차이점, 사용 방법, 주의할 점 등을 정리해 보겠습니다.  🔹 1. ConfigMap이란?ConfigMap은 애플리케이션에서 사용하는 설정 데이터를 저장하는 쿠버네티스 리소스입니다. 일반적으로 환경 변수, 설정 파일, 커맨드라인 인자 등을 저장하는 용도로 사용됩니다.✅ 특징비밀 데이터가 아닌 일반적인 설정 값을 저장함 (예: 데이터베이스 URL, 서비스 포트)Key-Value 형태로 데이터를 저장Pod 내에서 환경 변수, 파일, 커맨드라인 인자로 ..

DevOps/k8s 2025.02.05

Kubernetes에서 Service란?

서비스(Service) : 외부로부터 요청을 받는 역할 / 외부로부터 들어오는 트래픽을 받아, 파드에 균등하게 분배해주는 로드밸런서 역할을 하는 기능  spring-service.yamlapiVersion: v1kind: Service# Service 기본 정보metadata: name: spring-service # Service 이름 # Service 세부 정보spec: type: NodePort # Service의 종류 selector: app: backend-app # 실행되고 있는 파드 중 'app: backend-app'이라는 값을 가진 파드와 서비스를 연결 ports: - protocol: TCP # 서비스에 접속하기 위한 프로토콜 port: 8080 # 쿠버네티..

DevOps/k8s 2025.02.04

Docker + GitHub Actions 배포 vs 쿠버네티스 배포 비교

쿠버네티스를 이용한 배포 방식으로 변경하면 기존 Docker + GitHub Actions 기반 배포와 비교해서 차이가 많습니다.특히, 온프레미스(개발 서버 직접 운영) 환경이라면, 쿠버네티스를 적용하는 방식이 다소 달라질 수 있습니다. 배포 방식기존 Docker + GitHub Actions쿠버네티스 (K8s) 배포 대상EC2 또는 직접 구축한 서버에서 실행쿠버네티스 클러스터 (온프레미스 or 클라우드)실행 방식서버에서 Docker 컨테이너 직접 실행K8s의 Pod 단위로 컨테이너 관리배포 방식GitHub Actions에서 docker build → docker runGitHub Actions에서 kubectl apply확장 방식서버의 스펙을 높이거나, 새로운 서버 추가 후 수동 배포HPA(Pod 자동..

DevOps/k8s 2025.02.04

Kubernetes Deployment를 사용하여 여러 개의 Pod 실행하기

Kubernetes에서 동일한 Pod을 여러 개 실행하려면 Deployment를 활용하면 된다. Deployment는 여러 개의 Pod을 관리하고, 업데이트 및 롤백을 손쉽게 수행할 수 있도록 도와준다.  Deployment 작성 방법apiVersion: apps/v1 # Deployment의 API 버전kind: Deployment # Deployment 리소스를 생성한다.metadata: name: spring-deployment # Deployment의 이름spec: replicas: 3 # 동일한 Pod을 3개 실행한다. selector: matchLabels: app: backend-app # backend-app 레이블을 가진 Pod을 관리한다. template:..

DevOps/k8s 2025.02.04

Dockerfile에서 WORKDIR과 COPY . .의 역할과 필요성

Dockerfile을 작성할 때 `WORKDIR`과 `COPY . .`을 자주 사용하지만, **정말 필요할까? 없이도 실행이 가능할까? 이 글에서는 `WORKDIR`과 `COPY . .`의 필요성과 역할을 명확하게 정리해보겠습니다.## ✅ WORKDIR과 COPY . . 없이도 실행이 가능할까?### 1️⃣ `WORKDIR` 없이 `COPY . .`만 사용하는 경우FROM node:18COPY . .RUN npm installCMD ["node", "index.js"]✅ 실행 가능하지만 모든 파일이 루트(/) 디렉터리에 복사됩니다.❌ 루트 디렉터리는 시스템 파일과 섞일 위험이 있어 관리하기 어렵습니다. 2️⃣ COPY . . 없이 WORKDIR만 설정한 경우FROM node:18WORKDIR /appRU..

DevOps/Docker 2025.02.04

쿠버네티스 기초 명령어

1. 매니페스트 생성 (nginx-pod.yaml)apiVersion: v1kind: Pod #Pod를 만들때는 apiVersion을 V1을 써야하는데 공식문서에서 이렇게 안내한다. 따로 이유를 알 필요는 없음metadata: name: nginx-podspec: containers: - name: nginx-container image: nginx ports: - containerPort: 80 imagePullPolicy: IfNotPresent 2. pod 시작kubectl apply -f nginx-pod.yaml  3. 실행중인 pod 확인kubectl get pods  4. pod 내부로 진입kubectl exec -it nginx-pod -- ..

DevOps/k8s 2025.01.22