JSCODE Logo
JSCODE 박재성JSCODE 제이온JSCODE 시니
과외유튜브블로그후기
완강 후기 이벤트블로그 리뷰 이벤트AWS SAA 합격 후기 이벤트
회사명 : JSCODE대표 : 박재성사업자 등록번호 : 244-22-01557통신판매업 : 제 2023-인천미추홀-0381 호

서울특별시 구로구 경인로 20가길 11(오류동, 아델리아)

Copyright ⓒ 2026 JSCODE - 최상위 현업 개발자들의 프로그래밍 교육 All rights reserved.

이용약관개인정보처리방침

비전공자도 이해할 수 있는 쿠버네티스 입문/실전

쿠버네티스 기본 개념

쿠버네티스(Kubernetes)란? / 장점
로컬에서의 쿠버네티스 설치 (Docker Desktop)

파드(Pod)를 활용해 서버 띄워보기

파드(Pod)란?
[예제] 웹 서버(Nginx)를 파드(Pod)로 띄워보기
파드(Pod)로 띄운 프로그램에 접속이 안 되는 이유
[예제] 백엔드(Spring Boot) 서버를 파드(Pod)로 띄워보기
이미지가 없다고 에러가 뜨는 이유 (이미지 풀 정책)
[예제] 백엔드(Nest.js) 서버를 파드(Pod)로 띄워보기
[예제] 프론트엔드(HTML, CSS, Nginx) 서버를 파드(Pod)로 띄워보기
[예제] 프론트엔드(Next.js) 서버를 파드(Pod)로 띄워보기
[예제] 백엔드(Spring Boot) 서버 3개 띄워보기
[보충 강의] 파드(Pod) 디버깅 하는 방법
[요약] 지금까지 나온 명령어 정리

디플로이먼트(Deployment), 서비스(Service)를 활용해 서버 띄워보기

디플로이먼트(Deployment)란?
[예제] 디플로이먼트를 활용해 백엔드(Spring Boot) 서버 3개 띄워보기
서비스(Service)란?
[예제] 서비스(Service)를 활용해 백엔드(Spring Boot) 서버와 통신해보기
디플로이먼트를 활용한 서버 개수 조절 방법
서버가 죽었을 때 자동으로 복구하는 기능 (Self-Healing)
새로운 버전의 서버로 업데이트 시키기
[예제] 디플로이먼트, 서비스를 활용해 백엔드(Nest.js) 서버 띄워보기
[요약] 지금까지 나온 명령어 정리
[요약] 파드(Pod), 디플로이먼트(Deployment), 서비스(Service) 개념 정리

컨피그맵(ConfigMap), 시크릿(Secret)을 활용해 환경변수 관리하기

[예제] 백엔드(Spring Boot) 서버에 환경변수 등록해 사용하기
컨피그맵(ConfigMap)을 활용해 환경변수 분리하기
시크릿(Secret)을 활용해 ‘민감한 값’을 환경 변수로 분리하기

볼륨(Volume)을 활용해 DB 띄워보기

볼륨(Volume)이란?
[예제] 디플로이먼트(Deployment)를 활용해 MySQL 실행시키기
볼륨(Volume)을 활용해 MySQL 실행시키기
[예제] 백엔드(Spring Boot) 서버와 MySQL 연동하기
만약 MySQL과 연결이 제대로 되지 않았다면 어떻게 될까?
컨피그맵(ConfigMap), 시크릿(Secret)을 활용해 환경변수 분리하기
보안을 위해 외부에서 MySQL 접근하지 못하도록 막기

AWS EC2에서 쿠버네티스를 활용해 서버 배포하기

EC2에서 쿠버네티스를 활용했을 때 발생하는 AWS 예상 비용
k3s란?
EC2에서 도커/쿠버네티스 설치하기 (k3s)
[예제] 디플로이먼트, 서비스를 활용해 웹 서버(Nginx) 띄워보기
[예제] 백엔드(Spring Boot) 서버 배포하기, DB 연동하기 (+ RDS, ECR)
RDS, ECR 생성하기
백엔드(Spring Boot) 서버 프로젝트, 매니페스트 파일 구성하기
백엔드(Spring Boot) 서버 빌드한 후 ECR로 Push하기
EC2가 ECR로부터 이미지를 Pull 받아올 수 있게 권한 부여하기
EC2에서 쿠버네티스로 백엔드(Spring Boot) 서버 띄우기
EC2에 배포된 백엔드(Spring Boot) 서버 업데이트하기
남들보다 훨씬 쿠버네티스를 빠르게 배우는 방법?!

AWS EKS를 활용해 서버 배포하기

EKS에서 쿠버네티스를 활용했을 때 발생하는 AWS 예상 비용
AWS EKS를 남들보다 빠르게 익히려면?!
EKS란?
쿠버네티스와 EKS의 아키텍처 구조
EKS 클러스터 생성하기
EKS 워커 노드 추가하기
로컬에서 EKS 클러스터 조정할 수 있게 셋팅하기
EKS에 백엔드(Spring Boot) 서버 배포하기 (+ RDS, ECR)
비용 나가지 않게 EC2, RDS, ECR, EKS 종료하기
← 블로그 목록으로 돌아가기

볼륨(Volume)을 활용해 MySQL 실행시키기

JSCODE 박재성
JSCODE 박재성
2026. 03. 30.
author
JSCODE 박재성
category
쿠버네티스
createdAt
Dec 6, 2025 12:37 PM
isPublic
isPublic
series
비전공자도 이해할 수 있는 쿠버네티스 입문/실전
slug
run-mysql-with-volume
type
post
updatedAt
Mar 30, 2026 09:00

✅ 볼륨(Volume)을 활용해 MySQL 실행시키기

🧑🏻‍🏫
데이터베이스를 확인해보면 이전에 만들었던 new-db라는 데이터베이스가 없어졌다. 실제 데이터베이스에서는 데이터가 없어져서는 안 된다. 데이터가 보존되도록 볼륨(Volume)을 설정해보자.
 
  1. 퍼시스턴트 볼륨(PV), 퍼시스턴트 볼륨 클레임(PVC) 정의하기
    1. mysql-pv.yaml
      apiVersion: v1 kind: PersistentVolume # PersistentVolume 기본 정보 metadata: name: mysql-pv # PersistentVolume 이름 # PersistentVolume 세부 정보 spec: storageClassName: my-storage # PV와 PVC의 storageClassName이 같다면 볼륨이 연결된다. capacity: storage: 1Gi # 볼륨이 사용할 용량을 설정 accessModes: - ReadWriteOnce # 아래 hostPath 타입 활용 시 이 옵션만 사용 가능 hostPath: # hostPath 타입을 활용 (hostPath : 쿠버네티스 내부 공간을 활용) path: "/mnt/data" # 쿠버네티스 내부의 공간에서 /mnt/data의 경로를 볼륨으로 사용
       
      mysql-pvc.yaml
      apiVersion: v1 kind: PersistentVolumeClaim # PersistentVolumeClaim 기본 정보 metadata: name: mysql-pvc # PersistentVolumeClaim 이름 # PersistentVolumeClaim 세부 정보 spec: storageClassName: my-storage # PV와 PVC의 storageClassName이 같다면 볼륨이 연결된다. accessModes: - ReadWriteOnce # 볼륨에 접근할 때의 권한 resources: # PVC가 PV에 요청하는 리소스의 양을 정의 requests: # 필요한 최소 리소스 storage: 1Gi # PVC가 PV에 요청하는 스토리지 양 (PV가 최소 1Gi 이상은 되어야 한다.)
 
  1. 기존 디플로이먼트(Deployment) 수정하기
    1. mysql-deploymentyaml.yaml
      apiVersion: apps/v1 kind: Deployment # Deployment 기본 정보 metadata: name: mysql-deployment # Deployment 이름 # Deployment 세부 정보 spec: replicas: 1 # 생성할 파드의 복제본 개수 selector: matchLabels: app: mysql-db # 아래에서 정의한 Pod 중 'app: backend-app'이라는 값을 가진 파드를 선택 # 배포할 Pod 정의 template: metadata: labels: # 레이블 (= 카테고리) app: mysql-db spec: containers: - name: mysql-container # 컨테이너 이름 image: mysql # 컨테이너를 생성할 때 사용할 이미지 ports: - containerPort: 3306 # 컨테이너에서 사용하는 포트를 명시적으로 표현 env: - name: MYSQL_ROOT_PASSWORD valueFrom: secretKeyRef: name: mysql-secret key: mysql-root-password - name: MYSQL_DATABASE valueFrom: configMapKeyRef: name: mysql-config key: mysql-database # 컨테이너 내에서 어떤 경로를 볼륨으로 사용할 지 지정 volumeMounts: - name: mysql-persistent-storage # 밑에서 설정할 volumes.name과 값이 같아야 함 mountPath: /var/lib/mysql # mysql 컨테이너 내부에 있는 경로 # 파드가 사용할 볼륨을 지정 volumes: - name: mysql-persistent-storage # 위에서 설정할 volumeMounts.name과 일치해야 함 persistentVolumeClaim: claimName: mysql-pvc # 연결시킬 PVC의 name과 동일해야 함
       
  1. 매니페스트 파일 반영하기
    1. $ kubectl apply -f mysql-pv.yaml $ kubectl apply -f mysql-pvc.yaml $ kubectl apply -f mysql-deployment.yaml
       
  1. 새로운 데이터베이스 생성하기
    1. notion image
       
  1. 디플로이먼트 재시작하기
    1. $ kubectl rollout restart deployment mysql-deployment
       
  1. 데이터베이스 다시 확인해보기
    1. 디플로이먼트를 재시작하기 전에 생성했던 데이터베이스가 삭제되지 않고 그대로 잘 남아있는 걸 확인할 수 있다.
      notion image
       
📎
이 글은 비전공자도 이해할 수 있는 쿠버네티스 입문/실전 강의의 수업 자료 중 일부입니다.