모니터링/실행: CI/CD Pipeline

ㅁ 모니터링/실행

ㅇ 정의:
시스템에서 모델의 실행과 배포를 관리하며, 운영 중 발생하는 문제를 모니터링하고 대응하는 과정.

ㅇ 특징:
– 운영 환경에서의 안정성과 성능을 보장.
– 문제 발생 시 신속한 대응 가능.
– 지속적인 개선과 업데이트를 지원.

ㅇ 적합한 경우:
– 모델 배포 후 성능 저하를 방지하고자 할 때.
– 운영 환경에서의 실시간 문제 감지가 필요한 경우.

ㅇ 시험 함정:
– CI/CD 파이프라인과 모니터링의 역할을 혼동.
– 단순 배포와 지속적 배포의 차이를 명확히 이해하지 못함.

ㅇ 시험 대비 “패턴 보기” 예시:
O: “모니터링은 운영 중 성능 문제를 사전에 감지하고 대응하는 데 중요하다.”
X: “모니터링은 모델의 학습 과정을 최적화하는 데 주로 사용된다.”

================================

1. CI/CD Pipeline

ㅇ 정의:
소프트웨어 개발에서 코드 변경 사항을 자동으로 통합(Continuous Integration)하고, 이를 자동으로 배포(Continuous Deployment)하는 프로세스.

ㅇ 특징:
– 코드 품질 보장을 위한 자동화된 테스트 포함.
– 배포 시간을 단축시키고, 오류를 최소화.
– 개발, 테스트, 배포가 하나의 파이프라인으로 연결됨.

ㅇ 적합한 경우:
– 빈번한 코드 변경과 배포가 필요한 환경.
– 자동화된 테스트와 배포로 생산성을 높이고자 할 때.

ㅇ 시험 함정:
– CI와 CD의 차이를 명확히 구분하지 못함.
– CI/CD 파이프라인을 단순히 코드 저장소로만 오해.

ㅇ 시험 대비 “패턴 보기” 예시:
O: “CI/CD 파이프라인은 코드 변경 사항의 통합 및 배포를 자동화하여 생산성을 높인다.”
X: “CI/CD 파이프라인은 수동 테스트를 기본으로 한다.”

================================

1.1 Continuous Integration (CI)

ㅇ 정의:
개발자가 코드 변경 사항을 공유 저장소에 자주 통합하여, 자동화된 빌드 및 테스트를 통해 문제를 빠르게 식별하는 과정.

ㅇ 특징:
– 코드 충돌을 최소화.
– 문제를 조기에 발견하여 수정 비용 절감.
– 자동화된 테스트로 품질 유지.

ㅇ 적합한 경우:
– 다수의 개발자가 협업하는 프로젝트.
– 코드 변경 빈도가 높은 경우.

ㅇ 시험 함정:
– CI를 단순히 코드 저장소로 오해.
– 자동화된 테스트를 포함하지 않는 경우 CI로 간주하는 오류.

ㅇ 시험 대비 “패턴 보기” 예시:
O: “Continuous Integration은 코드 변경 사항을 자동으로 통합하고 테스트하는 과정을 포함한다.”
X: “Continuous Integration은 배포 프로세스를 자동화하는 데 중점을 둔다.”

================================

1.2 Continuous Deployment (CD)

ㅇ 정의:
코드 변경 사항이 테스트를 통과한 후, 운영 환경에 자동으로 배포되는 과정.

ㅇ 특징:
– 배포 과정을 자동화하여 신속성 향상.
– 사용자에게 새로운 기능을 빠르게 제공.
– 테스트 실패 시 배포가 중단됨.

ㅇ 적합한 경우:
– 운영 환경에서의 신속한 업데이트가 중요한 경우.
– 자동화된 테스트가 충분히 신뢰할 수 있는 경우.

ㅇ 시험 함정:
– Continuous Delivery와 Continuous Deployment의 차이를 혼동.
– 자동화된 배포가 아닌 경우에도 CD로 간주하는 오류.

ㅇ 시험 대비 “패턴 보기” 예시:
O: “Continuous Deployment는 테스트를 통과한 코드 변경 사항을 운영 환경에 자동으로 배포한다.”
X: “Continuous Deployment는 개발 단계에서만 사용된다.”

================================

ㅁ 추가 학습 내용

CI/CD 파이프라인의 주요 도구와 보안 문제에 대한 학습 내용을 정리하면 다음과 같습니다.

1. CI/CD 주요 도구의 간단한 설명과 비교:
– Jenkins:
Jenkins는 오픈소스 자동화 서버로, CI/CD 파이프라인을 설정하고 관리하는 데 널리 사용됩니다. 플러그인을 통해 다양한 기능을 확장할 수 있으며, 유연성과 커스터마이징이 뛰어납니다. 하지만 설정이 복잡할 수 있고, 유지보수가 필요합니다.
– GitLab CI/CD:
GitLab의 내장 CI/CD 도구로, GitLab 플랫폼과 긴밀히 통합됩니다. 코드 저장소와 CI/CD가 통합되어 있어 설정이 간단하고, YAML 파일로 파이프라인을 정의합니다. GitLab의 유료 버전에서는 추가적인 기능을 제공합니다.
– CircleCI:
클라우드 기반 CI/CD 도구로, 간단한 설정과 빠른 실행 속도가 특징입니다. YAML 파일을 사용하여 워크플로우를 정의하며, 클라우드와 온프레미스 환경 모두 지원합니다. 사용량에 따라 요금이 부과되며, 무료 플랜도 제공됩니다.

2. CI/CD 파이프라인에서 보안 문제를 다루는 방법:
– Secret 관리:
민감한 정보(예: API 키, 데이터베이스 비밀번호 등)를 환경 변수로 저장하고, 코드베이스에 포함하지 않도록 해야 합니다. 도구별로 Secret 관리 기능을 제공하며, 예를 들어 GitLab에서는 “CI/CD Variables” 기능을, Jenkins에서는 “Credentials” 플러그인을 사용할 수 있습니다.
– 코드 스캔:
정적 코드 분석 도구를 사용하여 코드 내부의 보안 취약점을 사전에 식별합니다. 예를 들어, SonarQube, Snyk, Checkmarx와 같은 도구를 CI 파이프라인 단계에 통합하여 자동으로 코드를 검사할 수 있습니다.
– 접근 제어:
CI/CD 도구에 대한 접근 권한을 최소화하고, 사용자의 역할에 따라 적절한 권한을 부여해야 합니다. 이를 통해 불필요한 접근을 방지하고, 보안을 강화할 수 있습니다.
– 종속성 관리:
외부 라이브러리나 패키지를 사용할 때, 최신 버전으로 유지하고, 알려진 취약점을 점검해야 합니다. Dependabot, Renovate 같은 도구를 활용하면 종속성 업데이트를 자동화할 수 있습니다.
– 로그 및 모니터링:
CI/CD 파이프라인의 실행 로그를 지속적으로 모니터링하고, 비정상적인 활동을 탐지할 수 있는 시스템을 구축해야 합니다. 이는 보안 사고 발생 시 신속한 대응을 가능하게 합니다.

이 내용을 기반으로 CI/CD 파이프라인의 주요 도구와 보안 문제를 대비할 수 있습니다.

답글 남기기

Your email address will not be published. Required fields are marked *.

*
*