본 콘텐츠의 이미지 및 내용은 AI로 생성되었습니다.
본 콘텐츠의 이미지 및 내용을 무단으로 복제, 배포, 수정하여 사용할 경우 저작권법에 의해 법적 제재를 받을 수 있습니다.
이미지 로딩 중...
AI Generated
2025. 12. 2. · 12 Views
훈련/테스트 데이터 분리 완벽 가이드
머신러닝 모델을 제대로 평가하기 위한 데이터 분리 기법을 배웁니다. train_test_split 함수부터 교차 검증까지, 초급자도 쉽게 이해할 수 있도록 실무 예제와 함께 설명합니다.
목차
1. 훈련/테스트 분리의 필요성
김개발 씨는 처음으로 머신러닝 프로젝트를 맡게 되었습니다. 열심히 모델을 만들고 정확도 98%라는 놀라운 결과를 얻었습니다.
그런데 실제 서비스에 적용하니 성능이 형편없었습니다. 대체 무엇이 잘못된 걸까요?
훈련/테스트 분리란 데이터를 두 부분으로 나누어 하나는 모델 학습에, 다른 하나는 성능 평가에 사용하는 것입니다. 마치 시험 공부를 할 때 문제집의 일부는 연습용으로 풀고, 나머지는 실력 테스트용으로 남겨두는 것과 같습니다.
이렇게 해야만 모델이 처음 보는 데이터에서도 잘 작동하는지 확인할 수 있습니다.
다음 코드를 살펴봅시다.
from sklearn.model_selection import train_test_split
import numpy as np
# 전체 데이터 준비
X = np.array([[1, 2], [3, 4], [5, 6], [7, 8], [9, 10]])
y = np.array([0, 0, 1, 1, 1])
# 훈련 데이터와 테스트 데이터로 분리
X_train, X_test, y_train, y_test = train_test_split(
X, y, test_size=0.2
)
# 결과 확인
print(f"훈련 데이터 크기: {len(X_train)}")
print(f"테스트 데이터 크기: {len(X_test)}")
김개발 씨는 입사 6개월 차 주니어 데이터 사이언티스트입니다. 첫 번째 머신러닝 프로젝트를 맡아 밤새 고민하며 모델을 완성했습니다.
학습 데이터에서 정확도 98%라는 놀라운 결과가 나왔을 때, 김개발 씨는 기쁨을 감추지 못했습니다. 그런데 이상한 일이 벌어졌습니다.
실제 서비스에 모델을 적용하니 정확도가 60%도 채 되지 않았던 것입니다. 당황한 김개발 씨는 선배 박시니어 씨에게 도움을 요청했습니다.
박시니어 씨가 코드를 살펴보더니 고개를 저었습니다. "김개발 씨, 혹시 전체 데이터로 학습하고 같은 데이터로 평가했나요?" 그렇다면 왜 같은 데이터로 학습하고 평가하면 안 되는 걸까요?
쉽게 비유하자면, 이것은 마치 시험 문제를 미리 알려주고 시험을 보는 것과 같습니다. 학생이 문제와 답을 외워버리면 100점을 받을 수 있지만, 그것이 진짜 실력일까요?
다른 문제가 나오면 전혀 풀지 못할 수도 있습니다. 머신러닝에서도 마찬가지입니다.
모델이 학습 데이터를 그대로 외워버리는 현상을 **과적합(Overfitting)**이라고 합니다. 과적합된 모델은 학습 데이터에서는 완벽하게 작동하지만, 처음 보는 데이터에서는 엉망인 예측을 합니다.
바로 이 문제를 해결하기 위해 훈련/테스트 분리가 등장했습니다. 전체 데이터를 두 부분으로 나누어, 한쪽은 오직 학습에만 사용하고 다른 한쪽은 오직 평가에만 사용하는 것입니다.
이렇게 하면 테스트 데이터는 모델이 한 번도 본 적 없는 데이터가 됩니다. 따라서 테스트 데이터에서의 성능이 곧 실제 서비스에서 기대할 수 있는 성능과 비슷해집니다.
위의 코드를 살펴보면, train_test_split 함수가 데이터를 자동으로 분리해주고 있습니다. X는 입력 데이터, y는 정답 레이블입니다.
test_size=0.2는 전체의 20%를 테스트용으로 사용하겠다는 의미입니다. 실제 현업에서 이 원칙을 지키지 않으면 어떤 일이 벌어질까요?
쇼핑몰에서 고객 이탈을 예측하는 모델을 만들었다고 가정해봅시다. 과적합된 모델을 배포하면 실제 이탈 고객을 놓치게 되고, 이는 곧바로 매출 손실로 이어집니다.
박시니어 씨의 설명을 들은 김개발 씨는 고개를 끄덕였습니다. "아, 그래서 테스트 데이터를 따로 분리해야 하는군요!" 이제 김개발 씨는 왜 데이터를 나눠야 하는지 완전히 이해하게 되었습니다.
실전 팁
💡 - 테스트 데이터는 절대로 모델 학습에 사용하지 마세요
- 최종 평가는 반드시 테스트 데이터로만 수행해야 합니다
2. train test split 함수 사용법
데이터 분리의 필요성을 깨달은 김개발 씨는 이제 직접 코드를 작성해보려 합니다. 그런데 데이터를 어떻게 나눠야 할까요?
직접 인덱스를 계산해서 슬라이싱해야 할까요?
train_test_split은 scikit-learn 라이브러리에서 제공하는 데이터 분리 함수입니다. 마치 카드를 섞어서 두 더미로 나누는 딜러처럼, 데이터를 무작위로 섞은 뒤 지정한 비율로 분리해줍니다.
단 한 줄의 코드로 훈련 데이터와 테스트 데이터를 얻을 수 있어 매우 편리합니다.
다음 코드를 살펴봅시다.
from sklearn.model_selection import train_test_split
from sklearn.datasets import load_iris
# 붓꽃 데이터 불러오기
iris = load_iris()
X, y = iris.data, iris.target
# 훈련/테스트 분리 (80% 훈련, 20% 테스트)
X_train, X_test, y_train, y_test = train_test_split(
X, y,
test_size=0.2, # 테스트 데이터 비율
random_state=42, # 재현성을 위한 시드값
shuffle=True # 데이터 섞기 (기본값)
)
print(f"전체 데이터: {len(X)}, 훈련: {len(X_train)}, 테스트: {len(X_test)}")
김개발 씨가 처음 시도한 방법은 직접 데이터를 나누는 것이었습니다. 전체 데이터가 100개라면 앞의 80개는 훈련용, 뒤의 20개는 테스트용으로 사용하려 했습니다.
그런데 박시니어 씨가 이를 보고 손을 저었습니다. "잠깐요, 데이터가 시간순으로 정렬되어 있거나 특정 패턴으로 나열되어 있으면 어떻게 되죠?" 김개발 씨는 생각해보았습니다.
만약 고객 데이터가 나이순으로 정렬되어 있다면, 앞의 80%는 젊은 고객, 뒤의 20%는 나이 든 고객이 될 것입니다. 이렇게 나누면 공정한 테스트가 될 수 없습니다.
바로 이런 문제를 해결해주는 것이 train_test_split 함수입니다. 이 함수는 데이터를 무작위로 섞은 뒤 분리하기 때문에, 훈련 데이터와 테스트 데이터 모두 전체 데이터의 특성을 골고루 반영하게 됩니다.
함수의 사용법은 매우 간단합니다. 첫 번째와 두 번째 인자로 입력 데이터 X와 정답 레이블 y를 넣습니다.
그러면 함수가 X_train, X_test, y_train, y_test 네 개의 배열을 반환합니다. 여기서 중요한 점이 있습니다.
반환 순서가 항상 일정하다는 것입니다. X의 훈련/테스트가 먼저 나오고, y의 훈련/테스트가 그 다음에 나옵니다.
이 순서를 헷갈리면 안 됩니다. test_size 파라미터는 테스트 데이터의 비율을 지정합니다.
0.2라고 쓰면 20%를 의미합니다. 반대로 train_size를 사용해서 훈련 데이터 비율을 지정할 수도 있습니다.
shuffle 파라미터는 데이터를 섞을지 여부를 결정합니다. 기본값이 True이므로 특별한 경우가 아니면 생략해도 됩니다.
단, 시계열 데이터처럼 순서가 중요한 경우에는 False로 설정해야 합니다. 실제 프로젝트에서 train_test_split은 거의 모든 머신러닝 코드의 시작점이 됩니다.
데이터를 불러온 직후 가장 먼저 하는 일이 바로 이 분리 작업입니다. 김개발 씨는 코드를 작성하면서 뿌듯함을 느꼈습니다.
단 한 줄로 데이터 분리가 끝나다니, scikit-learn은 정말 편리한 도구입니다.
실전 팁
💡 - 반환값 순서를 기억하세요: X_train, X_test, y_train, y_test
- 시계열 데이터는 shuffle=False로 설정해야 합니다
3. 적절한 분리 비율 선택
김개발 씨가 train_test_split을 사용하려는데 고민이 생겼습니다. test_size를 얼마로 해야 할까요?
10%? 20%?
30%? 정답이 있는 걸까요?
분리 비율은 전체 데이터 중 훈련과 테스트에 각각 얼마나 할당할지 결정하는 것입니다. 마치 피자를 나눌 때 조각 크기를 정하는 것과 같습니다.
훈련 데이터가 너무 적으면 모델이 충분히 학습하지 못하고, 테스트 데이터가 너무 적으면 신뢰할 수 있는 평가가 어렵습니다. 보통 70:30에서 90:10 사이에서 결정합니다.
다음 코드를 살펴봅시다.
from sklearn.model_selection import train_test_split
from sklearn.datasets import load_digits
# 손글씨 숫자 데이터 (1797개 샘플)
digits = load_digits()
X, y = digits.data, digits.target
# 다양한 분리 비율 실험
ratios = [0.1, 0.2, 0.3]
for test_ratio in ratios:
X_train, X_test, y_train, y_test = train_test_split(
X, y, test_size=test_ratio, random_state=42
)
print(f"테스트 {int(test_ratio*100)}%: "
f"훈련 {len(X_train)}개, 테스트 {len(X_test)}개")
# 출력 결과로 데이터 수 확인 가능
박시니어 씨가 김개발 씨에게 질문을 던졌습니다. "데이터가 100개일 때와 100만 개일 때, 같은 비율로 나눠야 할까요?" 김개발 씨는 잠시 생각했습니다.
100개 중 20개를 테스트로 빼면 훈련 데이터가 80개밖에 남지 않습니다. 하지만 100만 개 중 20만 개를 테스트로 빼면 여전히 80만 개라는 충분한 훈련 데이터가 남습니다.
이것이 바로 분리 비율을 결정할 때 고려해야 할 핵심입니다. 절대적인 정답은 없지만, 상황에 따른 가이드라인은 있습니다.
가장 흔히 사용되는 비율은 80:20입니다. 훈련에 80%, 테스트에 20%를 할당하는 것입니다.
이 비율은 대부분의 상황에서 적절한 균형을 제공합니다. 데이터가 적을 때는 90:10 비율을 고려해볼 수 있습니다.
훈련 데이터가 충분해야 모델이 패턴을 제대로 학습할 수 있기 때문입니다. 다만 테스트 데이터가 너무 적으면 평가 결과의 신뢰도가 떨어질 수 있다는 점을 기억해야 합니다.
반대로 데이터가 매우 많을 때는 70:30이나 심지어 60:40도 가능합니다. 이미 충분한 훈련 데이터가 확보되어 있다면, 더 많은 테스트 데이터로 더 정확한 평가를 할 수 있습니다.
실무에서는 또 다른 고려 사항이 있습니다. 바로 **검증 데이터(Validation Data)**입니다.
훈련 중에 모델의 성능을 확인하고 하이퍼파라미터를 조정하기 위해, 훈련 데이터에서 일부를 추가로 분리하는 경우가 많습니다. 이 경우 훈련 60%, 검증 20%, 테스트 20%와 같은 비율을 사용합니다.
중요한 원칙이 하나 있습니다. 테스트 데이터는 최종 평가에만 사용해야 한다는 것입니다.
모델을 개선하면서 테스트 데이터를 반복해서 확인하면, 결국 테스트 데이터에도 과적합되는 결과를 낳습니다. 김개발 씨는 자신의 프로젝트 데이터가 약 5000개라는 것을 확인했습니다.
적지도 많지도 않은 양이므로, 표준적인 80:20 비율을 적용하기로 결정했습니다.
실전 팁
💡 - 데이터 수가 적으면 훈련 비율을 높이세요 (90:10)
- 항상 테스트 데이터는 최소 몇백 개 이상 확보하세요
4. random state 이해하기
김개발 씨가 코드를 여러 번 실행해보니 이상한 현상을 발견했습니다. 같은 코드인데 실행할 때마다 결과가 다릅니다.
어제는 정확도가 85%였는데 오늘은 83%입니다. 버그일까요?
random_state는 난수 생성의 시드값으로, 무작위 분리의 결과를 고정시켜줍니다. 마치 주사위를 던질 때 항상 같은 눈이 나오도록 마법을 거는 것과 같습니다.
이 값을 지정하면 코드를 몇 번을 실행해도 동일한 분리 결과를 얻을 수 있어, 실험의 재현성이 보장됩니다.
다음 코드를 살펴봅시다.
from sklearn.model_selection import train_test_split
import numpy as np
X = np.arange(10).reshape(5, 2)
y = np.array([0, 0, 1, 1, 1])
# random_state가 없으면 매번 다른 결과
print("random_state 미지정:")
for i in range(3):
_, X_test, _, _ = train_test_split(X, y, test_size=0.4)
print(f" 실행 {i+1}: {X_test.flatten()}")
# random_state를 지정하면 항상 같은 결과
print("\nrandom_state=42 지정:")
for i in range(3):
_, X_test, _, _ = train_test_split(X, y, test_size=0.4, random_state=42)
print(f" 실행 {i+1}: {X_test.flatten()}")
김개발 씨는 혼란스러웠습니다. 분명히 아무것도 바꾸지 않았는데 결과가 달라지다니요.
선배에게 물어보니 박시니어 씨가 미소를 지으며 설명해주었습니다. "train_test_split은 데이터를 무작위로 섞는다고 했죠?
무작위라는 건 매번 다른 결과가 나온다는 의미예요." 컴퓨터에서 무작위란 사실 진짜 무작위가 아닙니다. **의사 난수(Pseudo-random)**라고 하는데, 특정 알고리즘을 통해 마치 무작위처럼 보이는 숫자를 생성합니다.
이 알고리즘은 **시드(Seed)**라는 시작점에 따라 결과가 결정됩니다. random_state가 바로 이 시드값을 지정하는 파라미터입니다.
random_state=42라고 설정하면, 난수 생성기가 항상 같은 시작점에서 시작하므로 같은 순서의 숫자들을 생성합니다. 결과적으로 데이터 분리 결과도 항상 동일해집니다.
왜 42를 많이 사용할까요? 사실 아무 숫자나 상관없습니다.
42는 SF 소설 은하수를 여행하는 히치하이커를 위한 안내서에서 "삶, 우주, 그리고 모든 것에 대한 답"으로 등장하는 숫자입니다. 프로그래머들 사이에서 유머처럼 사용되다가 관례가 되었습니다.
0이나 1, 또는 자신만의 숫자를 사용해도 전혀 문제없습니다. 재현성이 왜 중요할까요?
여러 가지 이유가 있습니다. 첫째, 디버깅이 가능해집니다.
버그가 발생했을 때 같은 조건에서 문제를 재현할 수 있어야 원인을 찾을 수 있습니다. 둘째, 비교 실험이 공정해집니다.
두 가지 모델의 성능을 비교할 때, 데이터 분리가 다르면 공정한 비교가 아닙니다. 셋째, 협업이 원활해집니다.
팀원이 같은 코드를 실행했을 때 같은 결과가 나와야 코드 리뷰와 토론이 가능합니다. 다만 주의할 점이 있습니다.
random_state를 고정하면 특정 분리 결과에 우연히 유리하거나 불리한 상황이 생길 수 있습니다. 따라서 최종 결과를 보고할 때는 여러 random_state 값으로 실험하여 평균 성능을 확인하는 것이 좋습니다.
김개발 씨는 random_state=42를 추가하고 다시 코드를 실행했습니다. 이제 몇 번을 실행해도 같은 결과가 나왔습니다.
안심이 되었습니다.
실전 팁
💡 - 실험 초기에는 random_state를 고정하고, 최종 보고 시에는 여러 값으로 검증하세요
- 팀 프로젝트에서는 random_state 값을 코드에 명시하세요
5. stratify 옵션 활용
김개발 씨의 프로젝트는 사기 탐지 모델입니다. 전체 데이터 중 정상 거래가 95%, 사기 거래가 5%입니다.
그런데 테스트 데이터를 뽑아보니 사기 거래가 하나도 없습니다. 이래서야 제대로 된 평가가 가능할까요?
stratify 옵션은 데이터를 분리할 때 클래스 비율을 유지해주는 기능입니다. 마치 여론조사에서 성별, 연령대별 인구 비율을 맞춰 표본을 추출하는 것과 같습니다.
이 옵션을 사용하면 훈련 데이터와 테스트 데이터 모두에서 원래 데이터의 클래스 분포가 그대로 유지됩니다.
다음 코드를 살펴봅시다.
from sklearn.model_selection import train_test_split
import numpy as np
# 불균형 데이터 (클래스 0: 90%, 클래스 1: 10%)
np.random.seed(42)
X = np.random.randn(100, 2)
y = np.array([0]*90 + [1]*10)
# stratify 없이 분리
_, _, _, y_test_no_strat = train_test_split(
X, y, test_size=0.2, random_state=42
)
# stratify 사용하여 분리
_, _, _, y_test_strat = train_test_split(
X, y, test_size=0.2, random_state=42, stratify=y
)
print(f"원본 클래스 1 비율: {sum(y==1)/len(y)*100:.1f}%")
print(f"stratify 미사용 테스트셋 클래스 1 비율: {sum(y_test_no_strat==1)/len(y_test_no_strat)*100:.1f}%")
print(f"stratify 사용 테스트셋 클래스 1 비율: {sum(y_test_strat==1)/len(y_test_strat)*100:.1f}%")
박시니어 씨가 김개발 씨의 데이터를 확인하며 걱정스러운 표정을 지었습니다. "사기 거래가 5%밖에 안 되네요.
이런 불균형 데이터는 분리할 때 조심해야 해요." **불균형 데이터(Imbalanced Data)**란 특정 클래스의 샘플이 다른 클래스보다 훨씬 많은 경우를 말합니다. 사기 탐지, 질병 진단, 이상 탐지 등 실무에서 매우 흔하게 마주치는 상황입니다.
문제는 무작위로 데이터를 분리하면 소수 클래스가 한쪽에 몰리거나 아예 빠질 수 있다는 것입니다. 전체 데이터 중 5%가 사기인데, 운이 나쁘면 테스트 데이터에 사기 샘플이 2%만 들어가거나 8%가 들어갈 수도 있습니다.
이렇게 되면 평가 결과를 신뢰하기 어렵습니다. 모델이 진짜 잘하는 건지, 아니면 테스트 데이터가 우연히 유리했던 건지 알 수 없기 때문입니다.
stratify 옵션이 바로 이 문제를 해결합니다. stratify=y라고 지정하면, y의 클래스 비율을 그대로 유지하면서 분리합니다.
원본이 5%의 사기 비율이면, 훈련 데이터도 5%, 테스트 데이터도 5%가 됩니다. 사용법은 간단합니다.
train_test_split 함수에 stratify 파라미터를 추가하고, 분류 대상이 되는 레이블 배열을 넣어주면 됩니다. 대부분의 경우 stratify=y로 사용합니다.
위의 코드 결과를 보면 차이가 명확합니다. stratify를 사용하지 않았을 때는 테스트셋의 클래스 1 비율이 원본과 다를 수 있습니다.
하지만 stratify를 사용하면 정확히 10%를 유지합니다. 주의할 점도 있습니다.
특정 클래스의 샘플이 너무 적으면 stratify가 불가능할 수 있습니다. 예를 들어 클래스 1이 3개밖에 없는데 test_size=0.5로 분리하려 하면, 각각 1.5개씩 배분해야 하는데 이는 불가능합니다.
이런 경우 에러가 발생합니다. 김개발 씨는 바로 코드에 stratify=y를 추가했습니다.
이제 테스트 데이터에도 사기 거래 샘플이 원래 비율대로 포함되어 신뢰할 수 있는 평가가 가능해졌습니다.
실전 팁
💡 - 분류 문제에서는 항상 stratify 사용을 고려하세요
- 클래스당 샘플이 너무 적으면 에러가 발생할 수 있으니 주의하세요
6. 교차 검증 개념 소개
김개발 씨는 random_state를 바꿔가며 여러 번 실험해봤습니다. 그런데 어떤 분리에서는 정확도가 85%, 어떤 분리에서는 78%가 나옵니다.
어떤 결과를 믿어야 할까요?
**교차 검증(Cross-Validation)**은 데이터를 여러 번 다르게 분리하여 모델을 평가하는 기법입니다. 마치 바리스타가 커피의 맛을 여러 번 테스트하여 평균적인 품질을 확인하는 것과 같습니다.
가장 흔한 방식인 K-Fold 교차 검증은 데이터를 K개로 나누어 K번의 실험을 수행하고, 그 평균 성능을 최종 결과로 사용합니다.
다음 코드를 살펴봅시다.
from sklearn.model_selection import cross_val_score
from sklearn.datasets import load_iris
from sklearn.tree import DecisionTreeClassifier
# 데이터 준비
iris = load_iris()
X, y = iris.data, iris.target
# 모델 생성
model = DecisionTreeClassifier(random_state=42)
# 5-Fold 교차 검증 수행
scores = cross_val_score(model, X, y, cv=5)
print("각 Fold별 정확도:")
for i, score in enumerate(scores, 1):
print(f" Fold {i}: {score:.4f}")
print(f"\n평균 정확도: {scores.mean():.4f}")
print(f"표준편차: {scores.std():.4f}")
박시니어 씨가 김개발 씨의 고민을 듣고 말했습니다. "단 한 번의 분리로 모델 성능을 판단하는 건 위험해요.
운이 좋거나 나쁜 분리였을 수도 있거든요." 이것은 마치 시험을 한 번만 봐서 학생의 실력을 판단하는 것과 같습니다. 그날 컨디션이 좋았을 수도 있고, 우연히 아는 문제가 많이 나왔을 수도 있습니다.
진짜 실력을 알려면 여러 번 시험을 봐야 합니다. 교차 검증이 바로 이 원리를 적용한 것입니다.
가장 대표적인 K-Fold 교차 검증을 살펴보겠습니다. 먼저 전체 데이터를 K개의 동일한 크기로 나눕니다.
K=5라면 5개의 조각(Fold)이 생깁니다. 첫 번째 실험에서는 1번 조각을 테스트로, 나머지 4개를 훈련으로 사용합니다.
두 번째 실험에서는 2번 조각을 테스트로, 나머지를 훈련으로 사용합니다. 이렇게 5번 반복하면 모든 데이터가 한 번씩은 테스트로 사용됩니다.
결과적으로 5개의 성능 점수가 나옵니다. 이 5개의 평균이 최종 성능 추정치가 됩니다.
표준편차를 함께 보면 모델이 얼마나 안정적인지도 알 수 있습니다. scikit-learn의 cross_val_score 함수를 사용하면 이 모든 과정을 한 줄로 처리할 수 있습니다.
cv=5라고 지정하면 5-Fold 교차 검증을 수행합니다. 교차 검증의 장점은 명확합니다.
첫째, 모든 데이터가 훈련과 평가에 모두 활용되므로 데이터 낭비가 없습니다. 둘째, 여러 번의 평가 결과를 평균 내므로 우연에 의한 오차가 줄어듭니다.
셋째, 표준편차를 통해 모델의 안정성까지 파악할 수 있습니다. 다만 단점도 있습니다.
K번 모델을 훈련해야 하므로 시간이 K배 걸립니다. 데이터가 많거나 모델이 복잡할 경우 부담이 될 수 있습니다.
보통 K=5 또는 K=10을 많이 사용합니다. 교차 검증과 훈련/테스트 분리를 함께 사용하는 방법도 있습니다.
먼저 테스트 데이터를 떼어놓고, 나머지 데이터에서 교차 검증을 수행하여 최적의 하이퍼파라미터를 찾은 뒤, 최종적으로 테스트 데이터에서 성능을 평가하는 것입니다. 김개발 씨는 교차 검증을 적용해보았습니다.
5번의 실험에서 평균 82%, 표준편차 3%라는 결과를 얻었습니다. 이제 이 숫자를 자신 있게 보고서에 쓸 수 있게 되었습니다.
실전 팁
💡 - 일반적으로 K=5 또는 K=10을 사용합니다
- 표준편차가 크면 모델이 불안정하다는 신호입니다
이상으로 학습을 마칩니다. 위 내용을 직접 코드로 작성해보면서 익혀보세요!
댓글 (0)
함께 보면 좋은 카드 뉴스
Helm 마이크로서비스 패키징 완벽 가이드
Kubernetes 환경에서 마이크로서비스를 효율적으로 패키징하고 배포하는 Helm의 핵심 기능을 실무 중심으로 학습합니다. Chart 생성부터 릴리스 관리까지 체계적으로 다룹니다.
보안 아키텍처 구성 완벽 가이드
프로젝트의 보안을 처음부터 설계하는 방법을 배웁니다. AWS 환경에서 VPC부터 WAF, 암호화, 접근 제어까지 실무에서 바로 적용할 수 있는 보안 아키텍처를 단계별로 구성해봅니다.
AWS Organizations 완벽 가이드
여러 AWS 계정을 체계적으로 관리하고 통합 결제와 보안 정책을 적용하는 방법을 실무 스토리로 쉽게 배워봅니다. 초보 개발자도 바로 이해할 수 있는 친절한 설명과 실전 예제를 제공합니다.
AWS KMS 암호화 완벽 가이드
AWS KMS(Key Management Service)를 활용한 클라우드 데이터 암호화 방법을 초급 개발자를 위해 쉽게 설명합니다. CMK 생성부터 S3, EBS 암호화, 봉투 암호화까지 실무에 필요한 모든 내용을 담았습니다.
AWS Secrets Manager 완벽 가이드
AWS에서 데이터베이스 비밀번호, API 키 등 민감한 정보를 안전하게 관리하는 Secrets Manager의 핵심 개념과 실무 활용법을 배워봅니다. 초급 개발자도 쉽게 따라할 수 있도록 실전 예제와 함께 설명합니다.