노트

애자일 선언

Manifesto for Agile Software Development

개발 문화#agile · 연결된 개념 9개

쉽게 말하면

애자일 선언은 여행 일정표를 꼼꼼히 지키기보다 현지 날씨와 동행 상태를 보고 일정을 바꾸는 쪽을 더 귀하게 여기자는 약속이에요. 소프트웨어도 만들면서 계속 고쳐 가는 게 낫다는 거죠.

비유가 깨지는 곳 일정표를 버리자는 말은 아니에요. 선언은 문서·계획·계약에도 가치가 있다고 적고, 다만 사람, 작동하는 소프트웨어, 협력, 변화 대응을 더 가치 있게 여긴다고 말해요.

2001년 켄트 벡(Kent Beck), 마틴 파울러(Martin Fowler) 등 17명의 개발자가 발표한 소프트웨어 개발 선언이다. 네 가지 가치를 짝으로 비교한다.

  • 절차와 도구보다 개인과 상호작용
  • 포괄적인 문서보다 작동하는 소프트웨어
  • 계약 협상보다 고객과의 협력
  • 계획을 따르기보다 변화에 대응하기

오른쪽 항목도 가치가 있지만 왼쪽을 더 가치 있게 여긴다는 뜻이다. 문서나 계획이 필요 없다는 말이 아니다.

12원칙(Twelve Principles)에서 자주 인용되는 것

  • 가치 있는 소프트웨어를 일찍, 그리고 지속적으로 전달해 고객을 만족시킨다
  • 개발 후반이라도 요구사항 변경을 환영한다
  • 작동하는 소프트웨어를 몇 주에서 몇 개월 간격으로, 짧을수록 좋게 자주 전달한다. 진척의 주된 척도는 작동하는 소프트웨어다
  • 비즈니스 쪽 사람과 개발자는 매일 함께 일한다
  • 지속 가능한 속도를 유지한다
  • 기술적 탁월성과 좋은 설계에 대한 꾸준한 관심이 민첩성을 높인다 → 심플 디자인, 리팩터링
  • 단순성, 곧 하지 않는 일의 양을 최대화하는 기술이 필수다 → YAGNI, KISS 원칙
  • 팀은 정기적으로 더 효과적인 방법을 돌아보고 행동을 조정한다 → 회고

이어지는 생각

『함께 자라기』는 애자일이 불확실성을 다루는 방식을 "더 짧은 주기로, 더 다양한 사람에게서, 더 일찍 피드백을 받는 것"으로 요약한다 → 함께 자라기 (책 개요). 이 생각은 XP(Extreme Programming, 익스트림 프로그래밍)의 테스트 주도 개발 (TDD), 집단 코드 소유 같은 실천법과 이어진다.

출처: Manifesto for Agile Software Development · 한국어판 · Principles behind the Agile Manifesto

연결된 개념

이 노트를 가리키는 문서

뜻이 가까운 노트

  • 소프트웨어 공학의 법칙들

    소프트웨어 시스템과 팀, 의사결정에 반복해서 나타나는 경험칙들을 모아 부르는 말. 법칙이라고 부르지만 대부분 증명된 정리가 아니라 관찰과 격언이다. 판단할 때 떠올릴 이름표로 쓴다. 따로 노트를 둔 것은 링크로, 나머지는 한 줄로 적었다.

  • 최종 일관성

    최종 일관성(eventual consistency)은 "지금 당장은 저장소마다 값이 다를 수 있지만, 새 변경이 멈추면 결국 같아진다"는 보장이다. 원본 DB와 검색 색인·캐시·다른 서비스처럼 물리적으로 분리된 저장소를 한 트랜잭션으로 묶을 수 없을 때 받아들이는 일관성 모델(consistency model)이다.

  • 의존성 역전 원칙

    고수준 모듈(업무 규칙)이 저수준 모듈(데이터베이스(DB), HTTP(Hypertext Transfer Protocol) 클라이언트 같은 세부 구현)에 직접 의존하지 않고, 둘 다 추상화에 의존해야 한다는 원칙. 의존 방향이 "업무 → 세부"에서 "세부 → 추상화 ← 업무"로 뒤집힌다.

  • 최소 놀람의 원칙

    함수·API(Application Programming Interface)·UI(User Interface)는 사용자와 다른 개발자를 가장 덜 놀라게 하는 방식으로 동작해야 한다는 원칙. 이름과 관례에서 예측한 대로 움직여야 한다.

  • AI 시대 변경에 대한 책임 질문

    AI가 코드를 써도 그 변경이 왜 필요하고 무엇을 포기했으며 정말 동작하는지 설명하는 것은 엔지니어의 몫이다.

보기 옵션