목차
CI/CD, BDD
Terraform & Jenkins Study를 하면서, CI/CD라는 용어를 접하게 되었고 (이미 AWS Well Architecture 등을 통해 많이 접하였지만) Terraform의 Testing Tool을 살펴보던 중 Terraform Compliance라는 툴을 통해 BDD라는 용어를 접하게 되었다. 이를 정리하고자 한다.
CI(Continuous Integration)
지속적 통합은 자동화된 빌드 및 테스트가 수행된 후, 개발자가 코드 변경 사항을 중앙 리포지토리에 정기적으로 병합하는 데브옵스 소프트웨어 개발 방식입니다. 지속적 통합은 소프트웨어 릴리스 프로세스 중 빌드 또는 통합 단계를 주로 가리키며, 자동화 구성 요소(예: CI 또는 빌드 서비스)와 문화적 구성 요소(예: 빈번하게 통합하도록 학습) 모두를 포함합니다. 지속적 통합의 핵심 목표는 버그를 신속하게 찾아 해결하고, 소프트웨어 품질을 개선하고, 새로운 소프트웨어 업데이트를 검증 및 릴리스하는 데 걸리는 시간을 단축하는 것입니다.
CD(Continuous Delivery / Continuous Deployment)
지속적 전달에서는 프로덕션으로 릴리스하기 위한 코드 변경이 자동으로, 빌드, 테스트 및 준비됩니다. 지속적 전달은 빌드 단계 이후의 모든 코드 변경을 테스트 환경 및/또는 프로덕션 환경에 배포함으로써 지속적 통합을 확장합니다.
즉, AWS에 따르면 빌드까지의 단계를 자동화 구성 요소를 통해 정기적으로 수행하여 지속적인 서비스 제공이 이루어질 수 있도록 하는 것이 내용의 골자인 것으로 보인다. 이 때에는 물론 각종 툴(Jenkins와 같은..)과 테스트, 절차가 성립되어야 할 것이다.
BDD(Behavior Driven Development)
1. 특정 값이 주어지고(Given)
2. 어떤 이벤트가 발생했을 때(When)
3. 그에 대한 결과를 보장해야 한다(Then).
프로그래밍적으로 풀어서 쓰면 어떤 조건에서 혹은 어떤 파라미터가 들어왔을 때 테스트하고자 하는 프로세스가 실행되면 그에 상응하는 결과가 나와야 한다는 것이다. 여기서 각각은 And로 이어져 복수(複數)가 될 수도 있다.
이쯤 되면 독자는 ‘BDD와 TDD를 굳이 나눠야 하는가?’라는 생각이 들 것이다. 그런 의구심들은 수많은 사람들을 통해 BDD와 TDD의 다른 점을 두고 다양한 논쟁거리와 이슈로 재기돼 왔고, 대부분은 TDD의 한 종류로 BDD를 볼 수 밖에 없다고 결론지어지고 있다. TDD는 단위 테스트에 기반하는데 단위 테스트의 행위기반 테스트가 BDD의 기둥과 같은 개념인 Given, When, Then과 유사한 처리 과정을 갖기 때문이다.
BDD를 접할 때 가지는 기대감은 TDD와 유사할 수 있다. 하지만 BDD가 아주 새롭거나 도입 후 TDD만큼 현존하는 개발론에 지대한 영향을 미칠 정도의 파급효과를 갖지는 못한다. 그럼에도 불구하고 BDD가 아직까지 존재하는 이유는 뭘까? 그것은 앞에서 잠깐 언급했듯이 고객의 입장에서 사고하게 만드는 것과 TDD의 촉매제 역할을 도모할 수 있다는 점 때문이다. 또한 TEST라는 의미의 엔지니어적 사고에서 벗어나 Should라는 사고의 전환과 이를 통한 당위성에 대한 기준으로 구현체를 만들어간다는 것만으로도 BDD는 존재할 만한 가치가 있는 개념이다
BDD는 TDD의 일종으로, 시나리오 기반 테스트를 기반으로 하는 개발방식인 것으로 보인다.
Terraform은 Terraform-Compliance라는 BDD 기반 Framework가 있다.
위의 예제를 보면 바로 이해가 되는데, Given, When, Then, Examples 와 같은 선언적 문구를 통해 시나리오를 검증하도록 되어있다. TDD 방식은 아직 익숙하지 않아서 뭐라고 표현은 못하겠지만, 굉장히 가독성이 뛰어나다는 것을 알 수 있다. 물론, 최종적인 형태는 BDD뿐만 아니라, TDD(inspec or Terratest)를 통해 실질적인 자원 생성을 통한 모듈 및 단위 테스트를 구현하는 것을 목표로 해야하겠다.
이후에 포스팅할 글에는 Jenkins (Blue Ocean; Jenkinsfile을 통한 Pipeline)를 통해 Terraform으로 CI/CD를 어떻게 적용하는 지를 작성하려고 한다.
[출처]
'Devops > CI, CD' 카테고리의 다른 글
AWS Service를 활용한 AMI CI/CD 환경 구성 (Packer) (0) | 2021.06.30 |
---|---|
[DEVOPS] 빌드 자동화 환경 구축 일지 I (0) | 2020.04.26 |