[개발방법] 애자일, CI/CD, TDD

Yungsang Hwang·2022년 7월 12일
0

참조와 터득

목록 보기
6/8

애자일, CI/CD, TDD


🚩애자일이란?

  • 소규모 기능 단위빠르게 개발적용을 반복하는 개발 방법

🚩CI/CD란?

💡CI(Continous Integration)

  • 지속적인 통합이란 의미로 어플리케이션의 새로운 코드 변경 사항이 정기적으로 빌드 및 테스트 되어 통합하는 것
  • CI가 필요한 환경
    • 다수의 개발자가 형상관리 툴을 공유하여 사용하는 환경
      1. 수 많은 commit이 쌓이는 환경에서 기능별로 빌드/테스트/통합에 번거로움 ⇒ 이러한 상황에 자동화된 빌드&테스트는 원천 소스코드의 충돌 등을 방어할 수 있다.

🙋‍♂️ 우리 팀에 적용해보기

  • Source control : 실시간 코드 파악, 코드 리뷰, 컨벤션을 통해서 코드 읽기 쉽게 하기
  • Build 자동화 : 미정
  • Test 자동화 : DRF Test 사용
  • Jenkins, Bamboo, Travis CI 등을 사용하여 CI/CD 시도해보기(주로 Jenkins 사용함) : 미정

💡CD(Continous Delivery, Continous Deployment)

  • Continuous Delivery
    • 공유 레포지토리로 자동으로 Release 하는 것
  • Continuous Deployment
    • Production 레벨까지 자동으로 deploy 하는 것을 의미

🚩TDD란? (Test Driven Development)

  • TDD의 정의 Test Driven Development
    • 테스트 주도 개발 : 코드 작성 → 테스트 → 리팩토링 단계를 거치는 일련의 개발 방법론
  • TDD를 왜 할까?
    • 개발 하는 과정에 있어서, 단순한 코딩이 아닌 코드에서 발생하는 문제 및 다양한 이슈를 사전에 잡고 넘어갈 수 있음
      • 코드를 작성하는데서 멈추지 않고, 테스트를 진행
      • 테스트에서 통과했다면 가독성을 올리고, 성능을 올리는 방향으로 리팩토링까지 진행
    • 테스트를 통과하기 때문에 코드를 붙였을 때 문제를 줄여줌
  • 단위 테스트(Unit Test)작성 이유
    • 작성한 코드들에 대해 수시로 빠르게 검증 가능
    • 리팩토링 시에 안정성 확보가 가능
    • 개발 및 테스팅에 대한 시간과 비용을 절감
  • 좋은 테스트의 특징 (Clean Code 참조)
    • Fast : 테스트는 빠르게 동작하여 자주 돌릴 수 있어야 함
    • Independent : 각각의 테스트는 독립적이며 서로 의존해서는 안됨
    • Repeatable : 어느 환경에서도 반복 가능해야 함
    • Self-Validating : 테스트는 성공 또는 실패로 bool 값으로 결과를 내어 자체적으로 검증 되어야 함
    • Timely : 테스트는 적시에 즉, 테스트 하려는 실제 코드를 구현하기 직전에 구현해야 함
  • 테스트 코드를 먼저 작성하는 이유
    • 깔끔한 코드 작성 가능
    • 장기적으로 개발 비용 절감
    • 개발이 끝나면 테스트 코드를 작성하는 것은 매우 귀찮음, 실패한 케이스라면 더더욱!
  • TDD 방법 및 순서
  1. 실패하는 작은 단위 테스트를 작성한다. (처음엔 컴파일 조차 되지 않을 수 있음)
  2. 빨리 테스트를 통과하기 위해 프로덕션 코드를 작성. (이를 위해 정답이 아닌 가짜 구현등을 작성할 수 있음)
  3. 그 다음의 테스트 코드를 작성. * 실패 테스트가 없을 경우에만 성공 테스트를 작성한다
  4. 새로운 테스트를 통과하기 위해 프로덕션 코드를 추가 또는 수정
  5. 1~4단계를 반복하여 실패/성공의 모든 테스트 케이스를 작성
  6. 개발된 코드들에 대해 모든 중복을 제거하며 리팩토링 한다
profile
하루종일 몽상가

0개의 댓글