애자일을 굴리는 6가지 엔진

2001년 애자일 선언에서 2025년까지, 애자일을 지탱하는 6가지 기반

by 닉 nick



2001년 2월 애자일 선언문을 작성하던 현장 사진.jpg 2001년 2월 애자일 선언문을 작성하던 현장 사진


2001년, 미국 유타주에서 켄 슈와버, 켄트 벡, 마틴 파울러 등 17명의 유명 소프트웨어 개발자들이 모여 하나의 선언문을 발표했습니다. 바로 현재까지도 소프트웨어 개발 분야에서 널리 활용되고 있는 애자일 개발 선언문(Agile Manifesto, 2001)입니다.


애자일 개발에 대해 이해하기 위해선 이것이 발표되기 직전 1990년대 말~2000년대를 살펴보는게 좋습니다.

이때는 인터넷이 보급되고 닷컴 붐이 확산되며 웹사이트와 온라인 서비스들이 쏟아지기 시작하던 때였습니다. 기존에 은행·정부·통신처럼 안정성이 최우선인 대형 시스템 구축 뿐만 아니라 다양한 서비스 개발에 대한 요구도 늘었습니다.


그러나 온라인, 웹 서비스 개발은 빠른 시장반영과 업데이트 배포가 필수였음에도 불구하고 기존 워터폴 방식은 최소 1~2년 장기 프로젝트가 기본이였습니다. 워터폴 방식으로 기능을 모두 완성하고 테스트해 쓸만한 상태로 내놓을 때 쯤엔 시장이 바뀌어버릴정도로 시간이 흐른 뒤였기에 그 결과 당시 대부분의 프로젝트들이 수없이 무너졌습니다.


이러한 상황에서 애자일 개발은 기존 개발의 한계에 대한 안티 테제로서 등장했습니다.





워터폴과 애자일 방식 차이 설명 이미지.png






애자일을 가능케하는 6가지 보조기술

애자일은 철학으로, 이것이 가능하게 하려면 뒷받침하는 기술적 기반이 필요합니다. 익스트림 프로그래밍(XP), 크리스탈, ASD(적응형 소프트웨어 개발), FDD(기능 중심 개발), XM(익스트림 모델링), 칸반(Kanban), 스크럼, 스프린트와 같은 프레임 워크가 없으면 실제 구현은 어렵습니다.

그외에도 대표적으로 아래 여섯 가지가 서로 맞물려 돌아갑니다.




1) 버전 관리 시스템(VCS)

여러 명의 개발자가 동시에 같은 코드를 수정하면 충돌이 생기기 마련입니다.

과거 버전으로 되돌리거나, 누가 언제 무엇을 바꿨는지 추적할 수 있어야 안전하게 짧은 주기로 개발을 이어갈 수 있습니다.


그래서 버전 관리 시스템이 필수적입니다.

오늘날 표준은 Git이며, GitHub· GitLab· Bitbucket 같은 플랫폼을 통해 코드 리뷰와 이슈 관리까지 한 번에 할 수 있습니다. 작업할 때는 작은 단위로 자주 커밋하고 푸시하는 것이 좋습니다. 그래야 피드백이 빨리 오고 충돌도 줄어듭니다.


또한 feature → main 같은 브랜치 전략을 쓰면 안정성을 확보할 수 있고, feat:, fix: 같은 태그를 붙여 커밋 메시지를 남기면 히스토리가 훨씬 읽기 좋아집니다. 또 주의할 점은 main에 직접 푸시하지 않는 것, .gitignore를 제대로 설정하는 것, 대용량 파일은 Git LFS 같은 별도 방식을 쓰는 것입니다.






CD,CI 모델 설명.png


2) CI/CD (지속적 통합, 지속적 제공 및 배포)


애자일 개발에서는 고객과 팀이 진행 상황을 빠르게 확인할 수 있도록, 작은 단위의 결과물을 짧은 주기로 제공하는 것이 핵심입니다 그래서 고객에게 작동하는 소프트웨어를 자주 보여주는 것이 가장 좋은 방법으로 꼽힙니다. 하지만 사람이 매번 빌드하고 테스트하고 배포한다면 느릴 뿐 아니라 실수도 많아집니다. 그래서 자동화(CI/CD)가 필요합니다.


이상적인 CI/CD 모델은 다음과 같습니다.

CI(지속적 통합)는 코드가 메인 브랜치에 합쳐질 때마다 자동으로 빌드와 테스트를 수행합니다.

CD(지속적 제공/배포)는 이 과정을 통과한 코드가 자동으로 배포까지 이어지도록 만듭니다.

이 과정은 GitHub Actions, GitLab CI, Jenkins, CircleCI 같은 툴로 구현할 수 있습니다.


일반적인 파이프라인은 lint → unit test → build → security scan → deploy 순서에서 살짝만 변주됩니다. 핵심 검증(린트, 단위 테스트, 빌드)은 10분 이내에 끝나는 게 이상적입니다. 하지만 대규모 서비스에서는 전체 테스트가 20~30분 이상 걸릴 수 있습니다.


이 경우 빠른 피드백을 위한 스모크 테스트와, 안정성을 위한 풀 테스트를 병렬/분리 운영하는 전략이 현실적입니다.단순한 프로젝트라면 GitHub Actions의 시크릿 저장소로 충분하지만, 보안 요건이 높은 환경에서는 HashiCorp Vault, AWS Secrets Manager 같은 별도 솔루션을 연동하는 게 권장됩니다.






3) 자동화 테스트

애자일에서 중요한 건 빠른 변화에도 품질이 무너지지 않게 하는 것입니다.

그 안전망이 바로 자동화 테스트로, 품질을 지키면서도 빠르게 바꿀 수 있는 방법입니다.


테스트는 보통 단위 테스트(Unit), 통합 테스트(Integration), 엔드투엔드(E2E)로 나뉘며, “테스트 피라미드”라는 개념처럼 단위 테스트는 많이, 통합 테스트는 적당히, E2E는 필요한 만큼 최소로 작성하는 것이 일반적입니다. (최근 DevOps/마이크로서비스 환경에서는 테스트 피라미드 대신 테스트 다이아몬드라는 관점도 논의되고 있습니다)


자동화 테스트에는 JUnit, pytest, Jest, Cypress 같은 프레임워크가 대표적입니다.

테스트는 작고 빠른 것부터 쌓아야 CI가 느려지지 않습니다. 또 매번 실행할 때마다 같은 결과가 나오는 결정론적 테스트여야 신뢰할 수 있습니다.또 외부 의존성은 목(Mock)이나 스텁(Stub)으로 대체해 테스트를 안정적으로 유지하는 것도 중요합니다. 주의할 점은 과도하게 E2E 테스트만 늘리는 것입니다. 이런 테스트는 느리고 불안정해 유지보수 비용이 크기 때문에 균형이 필요합니다.





jira(지라)화면.png
애자일 개발을 위한 협업 커뮤니케이션 툴 BCTO 화면.jpg
(왼) Jira 화면 / (오) BCTO 화면



4) 일이 보이게 하는 협업·커뮤니케이션 도구

애자일은 투명성과 협업을 강조합니다. 누가 어떤 일을 하고 있고, 어디가 막혀 있는지 모두가 한눈에 볼 수 있어야 합니다. 이를 위해 Jira, Trello, Asana, BCTO, Aline.team 같은 보드 툴을 사용해 스프린트나 칸반 형태로 업무를 관리합니다.


Slack이나 Teams 같은 메신저는 빠른 소통을 돕고, Confluence나 Notion 같은 문서화 툴은 의사결정 기록과 설계 공유에 쓰입니다. BCTO는 이 기능들을 총망라하여 하나의 툴에서 커밋 확인, 칸반 정리, 문서화, 티켓 발급까지 다룰 수 있습니다. 이런 툴을 효율적으로 쓰려면 티켓에 배경, 목표, 수용 기준(AC), 완료 정의(DoD)를 명확히 적어야 합니다.


보드는 “To Do / In Progress / Review / Done” 정도로 단순하게 유지해야 흐름이 잘 보입니다.

그리고 스레드나 이슈 링크를 활용해 맥락을 보존하는 것이 중요합니다.

다만 회의와 문서화가 목적이 되어버리면 애자일은 금세 형식적인 절차로 변질됩니다.






5) 클라우드 & DevOps

아이디어가 나왔을 때 바로 실행 가능한 환경을 만들 수 있어야 애자일 리듬이 유지됩니다

AWS, GCP, Azure 같은 클라우드는 서버와 인프라를 빠르게 준비할 수 있게 합니다.


Docke는 컨테이너화로 환경 일관성을 보장하고 Kubernetes는 배포와 확장을 자동화하고, Terraform 같은 IaC 도구는 인프라를 코드로 관리할 수 있게 해줍니다. 또 CloudWatch, Prometheus, Grafana 같은 도구는 로그와 지표를 모니터링해 문제를 빠르게 파악하게 해줍니다.


환경은 개발/스테이징/프로덕션이 일관되게 유지돼야 하며, Docker 같은 컨테이너로 이 차이를 줄일 수 있습니다. 또 PR마다 미리 임시 환경을 배포(프리뷰 환경)하면 피드백 속도가 크게 빨라집니다.

블루-그린, 카나리 배포 같은 전략으로 문제 발생 시 빠르게 롤백할 수 있도록 준비하면 리스크를 최소화 할수도 있습니다.


(다만 Kubernetes는 학습 난이도가 높기 때문에 규모와 필요에 따라 점진적으로 도입하는 것이 좋습니다)







6) 코드 리뷰 & 품질 도구

빠르게 개발하는 만큼 품질 기준을 지키는 장치가 필요합니다.

코드 리뷰와 자동 품질 도구는 애자일의 “지속적인 개선”을 현실화하는 방법입니다.

보통 PR(Pull Request)에서 최소 2명 이상이 승인하는 식의 팀 규칙을 둡니다.


ESLint, Prettier, Flake8 같은 린터와 포매터는 코드 스타일과 간단한 버그를 자동으로 잡아줍니다.

또 SonarQube, CodeQL, Snyk 같은 정적 분석과 보안 도구는 복잡도, 취약점, 중복 코드를 발견해줍니다.


효율적인 리뷰를 위해서는 가능하다면 200~400줄 정도의 작은 PR로 나누는 것을 가이드로 드립니다.

리뷰할 때는 설계 의도, 경계 조건, 테스트 여부를 확인하는 체크리스트를 활용하고, 사소한 포맷 문제보다는 동작과 설계, 보안에 우선순위를 두는 것이 중요합니다.


형식적으로 “승인”만 누르는 리뷰는 지양하고 경고를 중요도별로 triage하고 관리하는 것을 추천합니다.













애자일은 단순히 속도를 높이는 게 아니라, 작게-자주-안전하게 바꾸고, 더 빠르게 배우는 문화입니다.

그리고 그걸 가능하게 해주는 현실적 무기가 바로 Git, CI/CD, 자동화 테스트, 협업 툴, 클라우드/DevOps, 코드 리뷰와 품질 도구입니다.





더 많은 IT개발 인사이트 받아보기







keyword
작가의 이전글20여년, 400개의 개발자 포트폴리오를 보며 느낀 점