Notice
Recent Posts
Recent Comments
Link
| 일 | 월 | 화 | 수 | 목 | 금 | 토 |
|---|---|---|---|---|---|---|
| 1 | 2 | 3 | 4 | 5 | 6 | |
| 7 | 8 | 9 | 10 | 11 | 12 | 13 |
| 14 | 15 | 16 | 17 | 18 | 19 | 20 |
| 21 | 22 | 23 | 24 | 25 | 26 | 27 |
| 28 | 29 | 30 |
Tags
- 쿠버네티스
- Spring Data JPA
- redis
- Web
- @ComponentScan
- 서블릿 컨테이너
- JWT
- securitycontextholderfilter
- MSA
- CORS
- Spring Container
- Routing Key
- mybatis
- 페이징
- JdbcTemplate
- Dead Letter Queue
- 스프링 부트
- @Transactional
- Spring
- JPA
- docker compose
- dockerhub
- JPQL
- 컨테이너
- DI
- DLQ
- AWS
- kafka
- 지연 로딩
- docker
Archives
- Today
- Total
look-forest
컨피그맵(ConfigMap), 시크릿(Secret)을 활용해 환경변수 관리하기 본문
SpringBoot에서 시스템 환경변수를 사용하려면 어떻게 할까?
@RestController
public class AppController {
@Value("${My_ACCOUNT:default}")
private String myAccount;
@Value("${My_PASSWORD:default}")
private String myPassword;
@GetMapping("/")
public String home(){
return "my account is " + myAccount + " and password is " + myPassword;
}
}
백엔드(Spring Boot) 서버에 환경변수 등록해 사용하기
매니페스트 파일에 환경 변수를 등록하기
-> 컨테이너 자체의 환경 변수로 설정하는 것이다
apiVersion: apps/v1
kind: Deployment
# Deployment 기본 정보
metadata:
name: spring-deployment # Deployment 이름
# Deployment 세부 정보
spec:
replicas: 3 # 생성할 파드의 복제본 개수
selector:
matchLabels:
app: backend-app # 아래에서 정의한 Pod 중 'app: backend-app'이라는 값을 가진 파드를 선택
# 배포할 Pod 정의
template:
metadata:
labels: # 레이블 (= 카테고리)
app: backend-app
spec:
containers:
- name: spring-container # 컨테이너 이름
image: spring-server # 컨테이너를 생성할 때 사용할 이미지
imagePullPolicy: IfNotPresent # 로컬에서 이미지를 먼저 가져온다. 없으면 레지스트리에서 가져온다.
ports:
- containerPort: 8080 # 컨테이너에서 사용하는 포트를 명시적으로 표현
env: # 환경변수 등록
- name: MY_ACCOUNT
value: jaeryang
- name: MY_PASSWORD
value: password123
디플로이먼트를 실행하고 파드 내부로 접속해서, 리눅스 서버에 env 명령어를 치면 환경변수가 나오는데,
위에서 등록한 환경 변수가 조회된다.

컨피그맵(ConfigMap)을 활용해 환경변수 분리하기
컨피그맵(ConfigMap)이란?
SpringBoot에서는 설정값을 application.yml으로 분리해서 관리한다. 별도의 파일로 분리해서 관리함으로써 유지보수가 편해지고 개발, 테스트, 프로덕션과 같은 환경 분리가 편해지기 때문이다.
쿠버네티스에서도 환경 변수를 관리하는 역할을 가진 오브젝트가 따로 존재하는데, 그게 바로 컨피그맵이다.
디플로이먼트에 환경 변수의 정보를 같이 작성했을 때의 단점
다른 환경(개발, 테스트, 프로덕션 등)에서 서버를 실행할 때 유연하게 설정 값을 변경하기가 어려워진다.
컨피그맵을 활용해 환경변수 분리하기
1. ConfigMap 매니페스트 파일 생성
apiVersion: v1
kind: ConfigMap
# ConfigMap 기본 정보
metadata:
name: spring-config # ConfigMap 이름
# Key, Value 형식으로 설정값 저장
data:
my-account: jaeryang
my-password: password1234
2. Deployment 매니페스트 파일 수정(ConfigMap 등록 정보 활용)
apiVersion: apps/v1
kind: Deployment
# Deployment 기본 정보
metadata:
name: spring-deployment # Deployment 이름
# Deployment 세부 정보
spec:
replicas: 5 # 생성할 파드의 복제본 개수
selector:
matchLabels:
app: backend-app # 아래에서 정의한 Pod 중 'app: backend-app'이라는 값을 가진 파드를 선택
# 배포할 Pod 정의
template:
metadata:
labels: # 레이블 (= 카테고리)
app: backend-app
spec:
containers:
- name: spring-container # 컨테이너 이름
image: spring-server # 컨테이너를 생성할 때 사용할 이미지
imagePullPolicy: IfNotPresent # 로컬에서 이미지를 먼저 가져온다. 없으면 레지스트리에서 가져온다.
ports:
- containerPort: 8080 # 컨테이너에서 사용하는 포트를 명시적으로 표현
env:
- name: MY_ACCOUNT
valueFrom:
configMapKeyRef:
name: spring-config # ConfigMap의 이름
key: my-account # ConfigMap에 설정되어 있는 Key값
- name: MY_PASSWORD
valueFrom:
configMapKeyRef:
name: spring-config
key: my-password
3. 매니페스트 파일 반영하기
$ kubectl apply -f spring-config.yaml
$ kubectl apply -f spring-deployment.yaml
# kubectl rollout restart deployment [디플로이먼트명]
$ kubectl rollout restart deployment spring-deployment # Deployment 재시작
시크릿(Secret)을 활용해 ‘민감한 값’을 환경 변수로 분리하기
시크릿(Secret)이란?
시크릿은 컨피그맵과 비슷하게 환경 변수를 분리해서 관리하는 오브젝트이다.
차이점은 시크릿은 비밀번호와 같이 보안적으로 중요한 값을 관리하기 위해 사용한다.
시크릿(Secret)을 활용해 ‘민감한 값’을 따로 분리하기
1. 시크릿 매니페스트 파일 생성
apiVersion: v1
kind: Secret
# Secret 기본 정보
metadata:
name: spring-secret # Secret 이름
# Key, Value 형식으로 값 저장
stringData:
my-password: my-secret-password
2. 컨피그맵 매니페스트 파일 수정
apiVersion: v1
kind: ConfigMap
# ConfigMap 기본 정보
metadata:
name: spring-config # ConfigMap 이름
# Key, Value 형식으로 설정값 저장
data:
my-account: jaeryang
# my-password: password1234
3. 디플로이먼트 매니페스트 파일 수정
apiVersion: apps/v1
kind: Deployment
# Deployment 기본 정보
metadata:
name: spring-deployment # Deployment 이름
# Deployment 세부 정보
spec:
replicas: 5 # 생성할 파드의 복제본 개수
selector:
matchLabels:
app: backend-app # 아래에서 정의한 Pod 중 'app: backend-app'이라는 값을 가진 파드를 선택
# 배포할 Pod 정의
template:
metadata:
labels: # 레이블 (= 카테고리)
app: backend-app
spec:
containers:
- name: spring-container # 컨테이너 이름
image: spring-server # 컨테이너를 생성할 때 사용할 이미지
imagePullPolicy: IfNotPresent # 로컬에서 이미지를 먼저 가져온다. 없으면 레지스트리에서 가져온다.
ports:
- containerPort: 8080 # 컨테이너에서 사용하는 포트를 명시적으로 표현
env:
- name: MY_ACCOUNT
valueFrom:
configMapKeyRef:
name: spring-config # ConfigMap의 이름
key: my-account # ConfigMap에 설정되어 있는 Key값
- name: MY_PASSWORD
valueFrom:
secretKeyRef:
name: spring-secret
key: my-password
4. 매니페스트 파일 반영
$ kubectl apply -f spring-secret.yaml
$ kubectl apply -f spring-config.yaml
$ kubectl apply -f spring-deployment.yaml
$ kubectl rollout restart deployment spring-deployment
참고 자료 & 이미지 출처
비전공자도 이해할 수 있는 쿠버네티스 입문/실전
'Infra > Kubernetes' 카테고리의 다른 글
| AWS EC2에서 쿠버네티스를 활용해 서버 배포하기 (0) | 2026.02.02 |
|---|---|
| 볼륨(Volume)을 활용해 DB 띄워보기 (0) | 2026.02.01 |
| 디플로이먼트(Deployment), 서비스(Service)를 활용해 서버 띄워보기 (0) | 2026.01.28 |
| 파드(Pod)를 활용해 서버 띄워보기 (0) | 2026.01.26 |
| 쿠버네티스란? (0) | 2026.01.26 |