애자일, CI/CD, TDD
🚩애자일이란?
소규모 기능 단위
로 빠르게 개발
과 적용을 반복
하는 개발 방법
🚩CI/CD란?
💡CI(Continous Integration)
- 지속적인 통합이란 의미로 어플리케이션의 새로운 코드 변경 사항이 정기적으로 빌드 및 테스트 되어 통합하는 것
- CI가 필요한 환경
- 다수의 개발자가 형상관리 툴을 공유하여 사용하는 환경
- 수 많은 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~4단계를 반복하여 실패/성공의 모든 테스트 케이스를 작성
- 개발된 코드들에 대해 모든 중복을 제거하며 리팩토링 한다