CodePipeline을 처음 보면 Jenkins를 웹 UI로 바꿔놓은 것처럼 보인다. 그 느낌으로 공부를 시작하면 시험 문제 앞에서 막힌다. DOP-C02가 파이프라인에 대해 묻는 것은 "어떻게 쓰나"가 아니라 "왜 이렇게 설계됐나, 이 시나리오에서 어떤 조합이 정확한가"다. 그 답에 도달하려면 CodePipeline의 계층 구조가 어떤 문제를 풀기 위해 만들어졌는지부터 이해해야 한다.
Jenkins가 2004년 허드슨(Hudson)이라는 이름으로 나왔을 때 파이프라인은 단순한 Job 연쇄였다. "A가 끝나면 B를 시작" 수준. 문제는 조직이 커질수록 이 단순함이 깨진다. Dev 계정에서 빌드하고 Prod 계정에서 배포하는 멀티 계정 환경, 어떤 브랜치는 배포하고 어떤 브랜치는 빌드만 하는 분기 로직, 사람이 승인해야만 다음 단계로 가는 게이트—이 모든 것을 Jenkins Job 체인으로 표현하면 스파게티가 된다. CodePipeline의 Stage/Action/Artifact 계층은 이 스파게티를 명시적인 그래프로 바꾸기 위해 설계된 것이다.
파이프라인은 수학적으로 DAG(Directed Acyclic Graph, 방향 비순환 그래프)다. 노드가 작업이고, 엣지가 의존 관계이며, 사이클이 없다는 게 핵심이다. Makefile(1976), Ant(2000), Maven(2004)이 모두 이 아이디어의 변형이다