일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
1 | 2 | |||||
3 | 4 | 5 | 6 | 7 | 8 | 9 |
10 | 11 | 12 | 13 | 14 | 15 | 16 |
17 | 18 | 19 | 20 | 21 | 22 | 23 |
24 | 25 | 26 | 27 | 28 | 29 | 30 |
31 |
- 글로벌리더십학부
- 데이터베이스
- 한동대학교
- 날솟샘
- 일반화학
- 컴네
- 혼자공부하는sql
- 프론트엔드
- SQL
- 설교
- QT
- 전산전자공학부
- SQLD
- 찬양
- CCM
- 네트워킹
- CHEMISTRY
- 예배
- Database
- 화학
- 고윤민교수님
- computer networks and the internet
- dbms
- GLS
- 묵상
- FE
- 날마다 솟는 샘물
- csee
- 유태준교수님
- 어노인팅
- Today
- Total
멈추지 않는 기록
[SE] L07/L08 - 요약 본문
신속한 소프트웨어 개발
- 특징
- 신속한 개발과 배포는 소프트웨어 시스템에서 가장 중요한 '요구 사항' 중 하나이다.
- 기업은 빠르게 변화하는 환경에서 운영된다.
- 따라서, 안정적인 소프트웨어 요구 사항을 설정하는 것이 사실상 불가능하다
- 소프트웨어는 변화하는 비즈니스 요구 사항을 반영하기 위해 빠르게 발전해야 한다.
- 일부 시스템에서는 계획 기반 개발이 '필수'적이지만, 이러한 비즈니스 요구사항을 충족하지 못한다.
- 1990년대 후반, 애자일 개발 방법이 등장했다.
애자일 개발
- 특징
- 시스템은 여러 버전 또는 증분 형태로 개발된다.
- 이해관계자가 버전 명세 및 평가에 참여한다.
- 새로운 버전을 자주 제공하여 평가한다.
- 개발을 지원하기 위해 '자동화된 테스트 도구' 등의 광범위한 도구를 활용한다.
- 최소한의 문서와 작동하는 코드에 초점을 맞춘다.
- 계획 기반 개발과 애자일 개발의 차이
- 계획 기반 개발
- 개발 단계가 분리되어 있으며, 각 단계에서 생성될 산출물이 사전에 계획된다.
- 꼭 폭포수 모델을 의미하는 것은 아니며, 계획 기반이면서 점진적인 개발도 가능하다.
- 반복은 '각 활동 내에서 발생'한다.
- 애자일 개발
- 명세, 설계, 구현, 테스트가 서로 얽혀 진행된다.
- 반복이 '전체 활동에 걸쳐 발생'한다
- 세 가지 주요 사항
- 코드에 집중하고, 설계 보다는 '실제 작동하는 소프트웨어 개발'을 우선시한다.
- 반복적인 개발 접근 방식을 기반으로 한다.
- 빠르게 작동하는 소프트웨어를 제공하며, 변화하는 요구 사항에 빠르게 적응하는 것이 목표이다.
- 애자일 선언문
: "우리는 소프트웨어 개발의 더 나은 방법을 발견하고 있으며, 이를 통해 다른 사람들도 도울 수 있다. 이 과정에서 우리는 다음 가치를 중요하게 여긴다."
- 프로세스와 도구보다 개인과 상호작용 → 효과적인 개발은 프로세스보다 팀원 간의 원활한 협업에서 나온다.
- 포괄적인 문서보다 작동하는 소프트웨어 → 문서보다 실제 동작하는 소프트웨어를 만드는 것이 더 중요하다.
- 계약 협상보다 고객과의 협력 → 고객과 긴밀히 협력하며 요구사항을 유연하게 반영해야 한다.
- 계획을 따르는 것보다 변화에 대한 대응 → 초기 계획에 얽매이지 않고 변화에 빠르게 대응하는 것이 중요하다.
- 오른쪽도 중요하지만 왼쪽을 더 우선한다 → 기존 방식도 의미 있지만, 더 나은 소프트웨어 개발을 위해 유연한 접근이 필요하다.
- 애자일 방법의 원칙
원칙설명
고객 참여 | 고객은 개발 과정에 적극적으로 참여해야 하며, 요구 사항을 제공하고 우선순위를 설정하며, 반복된 시스템을 평가해야 한다. |
점진적 제공 | 소프트웨어는 고객과 협력하여 점진적으로 개발되며, 각 단계에서 포함될 요구 사항을 지정한다. |
사람 우선 | 개발자의 역량을 인식하고 존중해야 하며, 고정된 프로세스보다 개별적인 작업 방식을 존중해야 한다. |
변화 수용 | 시스템 요구 사항이 변경될 가능성이 크므로, 이를 수용할 수 있도록 시스템을 설계해야 한다. |
단순성 유지 | 개발 과정과 소프트웨어 자체를 최대한 단순하게 유지하며, 불필요한 복잡성을 제거해야 한다. |
- 애자일 방법이 효과적인 경우
: 변화에 유연하게 대응할 수 있는 개발 방식으로, 다음과 같은 경우에 특히 효과적이다.
- 제품 개발: 규모가 작은 소프트웨어나 중간 크기의 제품을 만들 때 적합하다.
- 소프트웨어 제품과 앱: 요즘 대부분의 소프트웨어와 앱은 애자일 방식으로 개발된다.
- 맞춤형 시스템 개발: 고객이 개발 과정에 적극적으로 참여할 수 있고, 외부의 복잡한 규칙이 적은 조직에서 효과적이다.
애자일 기법 - 극단적 프로그래밍
- 극단적 프로그래밍이란?
: 1990년대 후반에 등장한 애자일 방법으로, 다양한 애자일 개발 기법을 도입했다.
- 특징
- XP는 '반복적 개발 방식'을 극한으로 적용한다.
- 하루에도 여러 번 '새로운 버전'이 빌드될 수 있다.
- 2주마다 고객에게 '증분된 기능'을 제공한다.
- 모든 빌드는 '모든 테스트'를 통과해야 한다
- 만약 테스트가 실패하면, 빌드는 허용되지 않는다.
- XP의 관행 (주요 기법)
원칙/관행설명
점진적 계획 | 요구 사항은 스토리 카드에 기록되며, 릴리스 포함 여부는 가용 시간과 우선순위를 고려해 결정된다. 개발자는 이를 개발 작업 단위로 나눈다. |
소규모 릴리스 | 최소한의 유용한 기능 세트를 먼저 개발하며, 이후 반복적인 기능 추가를 통해 시스템을 발전시킨다. |
단순한 설계 | 현재 요구 사항을 충족하는 데 필요한 최소한의 설계만 수행한다. |
테스트 우선 개발 | 기능을 구현하기 전에 자동화된 단위 테스트를 먼저 작성하고, 테스트를 통과해야 기능을 완성하는 방식으로 개발한다. |
리팩토링 | 개발자는 코드 개선이 필요하다고 판단되면 즉시 리팩토링하여 코드를 단순하고 유지보수하기 쉽게 만든다. |
페어 프로그래밍 | 두 명의 개발자가 짝을 이루어 작업하며, 서로의 코드를 검토하고 품질을 개선한다. |
집단적 소유권 | 모든 개발자가 시스템의 모든 영역을 담당할 수 있으며, 누구나 코드를 변경할 수 있다. |
지속적 통합 | 개발이 완료된 코드는 즉시 전체 시스템에 통합되며, 모든 단위 테스트를 통과해야 한다. |
지속 가능한 페이스 | 장기적인 초과 근무를 지양하며, 코드 품질과 생산성을 유지하는 속도로 작업한다. |
현장 고객 | 최종 사용자(고객) 대표가 개발 팀에 상주하며, 요구 사항을 즉시 제공하고 개발 과정에 직접 참여한다. |
- XP와 애자일 원칙의 연관성
- 작은 규모의 빈번한 시스템 배포를 통해 점진적 개발을 지원한다.
- 고객 참여를 보장하기 위해, 개발 팀 내에 고객을 포함한다.
- 긴 작업 시간을 피하고 페어 프로그래밍, 집단적 코드 소유 등을 통해 '개발자가 주도적'으로 작업할 수 있도록 한다.
- 정기적인 시스템 배포를 통해 변화에 대응한다.
- 지속적인 '코드 리팩토링'을 통해 단순성을 유지한다.
- XP의 실제 적용
- XP는 기술적 요소에 집중하기 때문에 조직의 관리 방식과 통합하기 어려운 경우가 많다.
- 따라서, 애자일 개발에서는 XP의 일부 기법을 채택하여 사용한다.
- 핵심 기법
- 사용자 스토리를 활용한 요구 사항 관리
- 코드 리팩토링
- 테스트 우선 개발 (TDD)
- 페어 프로그래밍
요구 사항 관리: 사용자 스토리 (User Story)
- 고객이 직접 팀에 참여하여 요구 사항을 스토리 카드로 작성한다.
- 스토리는 개발 작업 단위로 나뉘며, 일정과 비용을 고려하여 릴리스에 포함될 항목을 결정한다.
리팩토링
- 개념
- 코드의 기능은 유지하면서 내부 구조를 개선하는 과정
- 지속적인 개선을 통해 가독성을 높이고 유지보수를 쉽게 만듦
- 기존 개발 방식과 XP의 차이점
- 일반적인 소프트웨어 공학 원칙
- 변화에 대비하여 미리 설계하면 장기적으로 비용 절감 가능
- XP(익스트림 프로그래밍)에서의 관점
- 미래의 변화를 정확히 예측하는 것은 불가능하므로, 사전 대비보다는 필요할 때 개선하는 것이 효율적
- 리팩토링의 필요성
- 변화에 유연하게 대응할 수 있도록 코드 품질을 지속적으로 개선
- 가독성 향상 → 문서화 필요성 감소
- 코드 구조가 개선되어 유지보수가 쉬워짐
- 일부 경우, 아키텍처 수준의 리팩토링이 필요할 수 있으며, 이는 높은 비용이 발생
- 리팩토링의 예시
- 중복 코드 제거 → 클래스 계층을 재구성하여 코드 재사용성 증가
- 명확한 이름 사용 → 속성과 메서드 이름을 직관적으로 변경하여 코드 이해도 향상
- 코드 간소화 → 인라인 코드 제거 후, 라이브러리 메서드를 활용하여 유지보수 용이
테스트 우선 개발 (Test-first development)
- 개념
- XP(익스트림 프로그래밍)에서는 '테스트'를 중심으로 개발하며, '코드 변경이 발생할 때마다' 반복적으로 테스트를 수행
- 자동화된 테스트를 활용하여 코드 품질을 지속적으로 유지 및 개선
- XP에서의 테스트 특징
- 테스트 우선 개발 → 코드를 작성하기 전에 '테스트를 먼저 설계'
- 시나리오 기반 테스트 → 요구 사항을 반영한 '점진적 테스트 개발'
- 사용자 테스트 포함 → 고객이 테스트 과정에 참여하여 검증
- 자동화된 테스트 프레임워크 사용 → 새 릴리스가 빌드될 때 모든 컴포넌트 테스트 자동 실행
- 테스트 주도 개발 (TDD, Test-Driven Development)
- 코드를 작성하기 전에 '테스트를 먼저 작성'하여 구현할 요구 사항을 명확히 함
- 테스트는 '코드 형태로 작성'되어 자동 실행 가능
- 테스트 코드가 실행 결과를 검증하여 '정확한 동작을 보장'
- 일반적으로 JUnit과 같은 테스트 프레임워크 활용
- 새로운 기능 추가 시, '기존 및 신규 테스트를 자동 실행'하여 기존 코드에 미치는 영향을 검증
- 문제점
- 개발자는 코딩을 선호하며, 테스트 작성 시 이 있다.
- 예시 : 발생 가능한모든 예외를 검증하지 않는 불완전한 테스트
- 단순화 하려는 경향
- 일부 테스트는
- 예시 : 복잡한 사용자 UI일 경우, 화면 간의 워크플로우를 테스트하는 것이 어려울 수 있다.
- 점진적으로 작성하기 어렵다
- 테스트가 충분한지 판단하기 어렵다.
- 많은 시스템 테스트를 보유하고 있어도, 전체적인 테스트 커버리지가 부족할 수 있다.
고객 참여
- 고객의 역할은 다음 릴리스에서 구현될 '사용자 스토리에 대한 승인 테스트를 개발하는 것'이다.
- 개발이 진행되는 동안 '고객이 팀의 일원으로 테스트를 작성'하며, '새로운 코드가 고객의 요구 사항을 충족하는지 검증'한다.
- 하지만 고객 역할을 수행하는 사람들은 .
- 시간적 제약이 있어 개발 팀과 풀타임으로 협업하기 어렵다
- 또한, 일부 고객은
- 요구 사항을 제공하는 것만으로도 충분한 기여를 했다고 느껴 테스트 과정에 적극적으로 참여하지 않을 수도 있다.
테스트 자동화 (Test Automation)
- 개요
- 특정 기능을 구현하기 전에
- 실행 가능한 테스트를 작성하는 과정
- 테스트는 해야 하며, 해야 함입력과 출력을 검증
- 독립적으로 실행 가능
- 테스트 자동화의 특징
특징설명
독립 실행 가능 | 개별 테스트가 다른 테스트에 의존하지 않고 단독으로 실행될 수 있어야 함 |
입력 시뮬레이션 | 실제 사용자 입력을 흉내 내어 테스트 진행 |
출력 검증 | 실행 결과가 기대값과 일치하는지 자동으로 확인 |
- 테스트 자동화의 이점
이점설명
빠른 테스트 실행 | 자동화된 테스트를 활용하면 수동 테스트보다 훨씬 빠르게 검증 가능 |
지속적 검증 | 새로운 기능 추가 시 기존 테스트를 실행하여 코드 변경이 문제를 일으키지 않았는지 즉시 확인 가능 |
프레임워크 활용 | JUnit과 같은 자동화 테스트 프레임워크를 사용하여 테스트 작성 및 실행이 용이함 |
페어 프로그래밍 (Pair Programming)
- 개요
- 두 명의 프로그래머가 한 팀을 이루어 함께 코드를 개발하는 방식
- 코드 공동 소유권을 형성하여 팀 전체에 지식을 공유
- 페어 프로그래밍의 특징
특징설명
실시간 코드 검토 | 한 사람이 작성한 코드가 즉시 검토되므로 비공식적인 코드 리뷰가 자연스럽게 이루어짐 |
리팩토링 촉진 | 코드 개선을 함께 논의하며 유지보수성을 높임 |
협력 개발 | 같은 컴퓨터에서 협력하여 소프트웨어를 개발 |
유동적인 페어 구성 | 개발 과정에서 팀원들이 다양한 사람과 협업할 기회를 가짐 |
- 페어 프로그래밍의 장점
장점설명
지식 공유 | 팀원 간 기술과 도메인 지식을 효과적으로 공유 가능 |
리스크 감소 | 특정 개발자가 프로젝트를 떠나도 남은 팀원이 업무를 이해하고 이어받을 수 있음 |
생산성 향상 | 연구에 따르면 협력 개발이 개별 작업보다 높은 생산성을 보일 수 있음 |
애자일 프로젝트 관리 (Agile Project Management)
- 개요
- 소프트웨어 프로젝트 관리자의 주요 목표는
- 일정 내 프로젝트 완료 및 예산 내 소프트웨어 제공
- 전통적인 프로젝트 관리:
- 프로젝트 계획을 수립하고, 일정과 책임을 명확히 정의
- 계획 중심 접근 방식
- 애자일 프로젝트 관리:
- 점진적 개발과 유연한 조정 방식 적용
- 스크럼 (Scrum)
- 특정 애자일 실천법이 아닌
- 반복적인 개발 관리에 초점을 맞춘 애자일 방법론
- 스크럼의 3단계
단계설명
초기 계획 단계 | 프로젝트 목표 설정 및 소프트웨어 아키텍처 설계 |
스프린트 주기 | 각 주기(2~4주)마다 새로운 기능 개발 |
프로젝트 종료 단계 | 프로젝트 마무리, 문서화, 피드백 반영 |
- Scrum 용어 및 정의
용어정의
개발 팀 | 최대 7명으로 구성된 자기 조직화된 개발 그룹 |
잠재적 출시 가능한 제품 증분 | 추가 작업 없이 최종 제품에 바로 적용될 수 있는 소프트웨어 증분 |
제품 백로그 | 수행해야 할 작업 목록 (기능 정의, 요구사항, 사용자 스토리 포함) |
제품 소유자 | 제품의 기능 및 요구사항을 정의하고 우선순위 관리 |
스크럼 | 진행 상황을 점검하고 우선순위를 정하는 일일 회의 |
스크럼마스터 | 스크럼 프로세스를 조율하며 팀이 외부 방해 없이 작업할 수 있도록 지원 |
스프린트 | 개발 반복 주기 (일반적으로 2~4주 단위 진행) |
속도 (Velocity) | 한 스프린트에서 팀이 처리할 수 있는 작업량을 측정한 값 |
- Scrum 스프린트 주기 (2~4주)
- 스프린트 주기 흐름
단계설명
백로그 선정 | 제품 백로그에서 이번 스프린트에서 수행할 작업 선정 |
개발 진행 | 선정된 작업을 개발하며, 팀은 외부 간섭 없이 작업 |
일일 스크럼 | 진행 상황 공유, 문제 해결, 목표 조정 |
스프린트 종료 및 검토 | 개발된 기능을 이해관계자에게 시연하고 피드백 반영 |
새로운 스프린트 시작 | 이전 결과를 반영하여 새로운 스프린트 시작 |
- Scrum의 팀워크
역할책임
스크럼마스터 | 일일 회의 주최, 백로그 관리, 진행 상황 추적, 외부 방해 요소 차단 |
개발 팀 | 코드 작성, 기능 구현, 문서화 |
제품 소유자 | 요구사항 정의 및 우선순위 조정 |
이해관계자 | 스프린트 결과 검토 및 피드백 제공 |
- Scrum의 이점
이점설명
작업 관리 용이 | 제품이 작은 단위로 나뉘어 관리가 쉬움 |
유연한 대응 | 요구사항 변경이 발생해도 진행 가능 |
효율적인 커뮤니케이션 | 팀원 간 투명한 정보 공유 |
고객 피드백 반영 | 고객이 정기적으로 결과물을 확인하고 의견 제공 |
팀워크 강화 | 고객과 개발자 간 신뢰 및 협력 문화 조성 |
- 분산된 Scrum (Distributed Scrum)
- 다양한 지역에 분산된 팀이 함께 협업하는 스크럼 방식
- 원격 환경에서도 일정한 프로세스 유지 필요
- 온라인 협업 도구 활용 (예: Jira, Trello, Slack, Zoom 등)
애자일 방법 확장 (Scaling Agile Methods)
- 애자일 방법의 한계
- 애자일 방법은 함.
- 소규모 프로젝트나 같은 장소에서 협업하는 팀에 적합
- 팀원이 같은 공간에서 근무할 때 커뮤니케이션이 원활해짐.
- 대규모·장기 프로젝트에서는 애자일 방법을 확장할 필요가 있음.
- 애자일 방법 확장 방식
확장 방식설명
확장 업 (Scaling up) | 소규모 팀이 감당할 수 없는 대형 소프트웨어 개발 프로젝트에 애자일 방법 적용 |
확장 아웃 (Scaling out) | 애자일 방법을 다년간의 소프트웨어 개발 경험이 있는 대규모 조직에 도입 |
- 확장하더라도 애자일의 기본 원칙(유연한 계획, 잦은 릴리스, 지속적 통합, 테스트 주도 개발, 원활한 팀 커뮤니케이션)을 유지해야 함.
3-1. 여러 가지 문제
- 애자일 방법의 실용적 문제 (Practical Issues in Agile Development)
문제설명
비형식적인 개발 방식 | 애자일 개발의 비형식적 특성은 대기업에서 사용하는 계약 방식과 충돌 가능 |
적합성 | 애자일은 새로운 소프트웨어 개발에 적합하나, 소프트웨어 유지보수에는 적합하지 않을 수 있음 |
비용 지급 방식 문제 | 개발자의 시간 기준으로 비용을 지불하는 방식이 필요하지만, 법무팀에서 리스크가 크다고 판단할 가능성이 있음 |
활동 방식 | 애자일은 소규모 팀을 전제로 하지만, 현재 소프트웨어 개발은 전 세계에 분산된 팀들이 협업하는 경우가 많음 |
- 계약 관련 문제
- 대부분의 맞춤형 소프트웨어 계약은 명확한 사양을 기준으로 작성됨
- 하지만, 애자일 개발에서는 명세와 개발이 동시에 진행되므로, 전통적인 계약 방식과 맞지 않음
- 기능이 아닌, 개발자의 시간에 따라 비용을 지불하는 계약 방식이 필요함.
- 하지만, 이는 법무팀에서 리스크가 크다고 판단할 수 있음.
- 애자일과 소프트웨어 유지보수
- 많은 조직이 새로운 소프트웨어 개발보다 기존 시스템 유지보수에 더 많은 비용을 지출함.
- 애자일이 유지보수까지 지원하려면 다음 문제 해결 필요:
- 제품 문서 부족 → 유지보수 어려움
- 고객과의 지속적인 협업 필요
- 개발 팀의 연속성 유지 어려움
- 애자일 개발은 팀원들이 시스템을 잘 알고 있어야 한다.
- 장기 운영 시스템에서는 원래 개발팀이 항상 유지 되지 않기 때문에, 문제 발생 가능성이 있다.
애자일 vs. 계획 기반 접근 (Agile vs. Plan-driven Approaches)
- 혼합적 접근 방식
- 대부분의 프로젝트는 애자일과 계획 기반 접근을 혼합하여 사용함.
- 적절한 균형을 찾는 것이 중요함.
- 애자일과 계획 기반 방법 비교
고려 요소애자일이 적합한 경우획 기반 접근이 필요한 경우
요구사항 정의 | 점진적 제공 방식이 가능할 때 | 세부 명세와 설계가 선행되어야 할 때 |
프로젝트 규모 | 소규모 프로젝트 | 대규모 프로젝트 |
예상 시스템 수명 | 단기 운영 | 장기 운영 → 유지보수 문서 필요 |
규제 준수 여부 | 비규제 시스템 | 규제를 받는 시스템 (상세 문서 요구됨) |
애자일 원칙 vs. 조직 내 현실 (Agile Principles vs. Organizational Reality)
원칙현실적 문제
고객 참여 | 고객 대표자의 시간 부족, 외부 이해관계자(규제 기관 등)와의 소통 어려움 |
변화 수용 | 이해관계자마다 변경 요청의 우선순위가 달라 조정이 어려움 |
점진적 배포 | 비즈니스·마케팅 계획과 맞지 않을 가능성 |
단순성 유지 | 일정 압박으로 인해 코드 최적화 및 단순화에 시간 부족 |
사람 중심 접근 | 애자일 방식이 모든 개발자의 성향에 맞지 않을 수 있음 |
애자일과 계획 기반 접근법: 선택을 위한 고려 요소
- 시스템 (System)
- 유형 (Type)
- 애자일 적합: 요구사항이 자주 변경되는 시스템, 사용자 인터페이스 중심 애플리케이션
- 계획 기반 적합: 구현 전 많은 분석이 필요한 시스템, 복잡한 시스템 통합이 요구되는 경우
- 수명 (Lifetime)
- 애자일 적합: 짧은 수명 또는 지속적 발전이 필요한 제품
- 계획 기반 적합: 장기간 운영될 시스템 (개발자 의도를 지원 팀에 전달할 문서화 필요)
- 규모 (Scale)
- 애자일 적합: 비교적 소규모 시스템, 공동 작업 팀에서 비공식적 소통이 가능한 프로젝트
- 계획 기반 적합: 대규모 복잡한 시스템, 다수의 팀이 참여하는 프로젝트
- 규제 (Regulation)
- 애자일 적합: 규제가 적은 분야의 시스템
- 계획 기반 적합: 외부 규제를 받는 시스템 (시스템 안전성 입증을 위한 상세 문서 필요)
- 팀 (Team)
- 기술 역량 (Competence)
- 애자일 적합: 높은 기술 수준을 갖춘 설계자와 프로그래머
- 계획 기반 적합: 다양한 기술 수준의 개발자가 혼합된 팀, 상세 설계를 코드로 변환하는 업무
- 분산도 (Distribution)
- 애자일 적합: 동일 위치에서 작업하는 팀, 긴밀한 협업이 가능한 환경
- 계획 기반 적합: 지리적으로 분산된 팀 (원활한 소통을 위한 상세 설계 문서 필요)
- 기술 (Technology)
- 애자일 적합: 시각화 및 프로그램 분석을 지원하는 현대적 IDE 사용 가능
- 계획 기반 적합: 특수 도메인의 개발 도구, 레거시 시스템 지원 도구
- 조직 (Organization)
- 문화 (Culture)
- 애자일 적합: 변화 수용적이고 유연한 문화, 실험과 학습을 장려하는 환경
- 계획 기반 적합: 전통적 엔지니어링 문화, 공식적 프로세스 중심 환경
- 계약 (Contracts)
- 애자일 적합: 유연한 계약 구조, 지속적 고객 참여가 가능한 프로젝트
- 계획 기반 적합: 상세한 시스템 명세서가 요구되는 계약, 고정 가격 계약
- 납품 (Delivery)
- 애자일 적합: 고객 대표가 시스템 증분에 대한 지속적 피드백 제공 가능
- 계획 기반 적합: 명확한 마일스톤 기반 납품, 사전 정의된 요구사항에 따른 검수
대형 시스템을 위한 애자일 방법론 (Agile Methods for Large-Scale Systems)
- 구조
- 일반적으로 개별적으로 개발된 여러 시스템의 집합
- 각 시스템은 별도의 팀이 개발한다.
- 이러한 팀은 종종 서로 달느 장소에서, 때로는 서로 다른 시간대에서 작업한다.
- 브라운필스 시스템
: 대형 시스템은 기존 시스템과 상호작용하는 브라운필드 시스템이다.
- 시스템 요구 사항 중 상당 부분이 기존 시스템과의 연동과 관련이 있기에, 유연한 증분 개발 방식이 어렵다.
- 따라서, 여러 시스템을 통합하여 하나의 시스템을 만들 경우, 개발 과정에서 코드 작성 보다는 시스템 구성이 주요 작업이 될 가능성이 크다.
대형 시스템 개발
- 상황
: 대형 시스템과 그 개발 프로세스는 외부 규제 및 규칙에 의해 개발 방식이 제한되는 경우가 많다.
- 기간
: 대형 시스템은 조달 및 개발 기간이 길다.
- 그 기간 동안 시스템을 깊이 이해하는 일관된 팀을 유지하기 어렵다.
- 결국 팀원들이 다른 업무나 프로젝트로 이동하게 된다.
- 다양한 이해 관계자
: 대형 시스템은 다양한 이해 관계자를 포함한다.
- 모든 이해 관계자를 개발 과정에 참여시키는 것은 현실적으로 어렵다.
- 고려해야 할 요소
- System of Systems : 여러 독립 시스템이 연결되어 협력하는 구조를 의미하며, 각 시스템의 통합 및 상호작용을 이해해야 한다.
- Brownfield Development : 기존 시스템을 기반으로 개선하는 개발 방식으로, 기존 시스템의 구조와 데이터를 충분히 고려해야 한다.
- Diverse Stakeholders : 다양한 이해 관계자가 포함되어 있으며, 이들의 요구를 충족시키는 것이 어렵기 때문에 효과적인 소통이 필요하다.
- Regulatory Constraints : 외부 법규 및 규제를 준수해야 하며, 이를 이해하고 충족하는 설계와 개발이 필요하다.
- System Configuration : 시스템 구성 요소 간의 조정 방법으로, 효율성과 안정성을 확보해야 한다.
- Prolonged Procurement : 대형 시스템 조달에 필요한 긴 시간으로, 팀의 일관성을 유지하기 어려워지므로 전문성과 지식을 지속적으로 유지해야 한다.
- 대형 시스템으로의 확장
- 요구사항 엔지니어링: 요구사항 엔지니어링을 완전히 증분 방식으로 진행하는 것은 불가능하다.
- 제품 소유자: 단일 제품 소유자 (PO)나 고객 대표를 두는 것이 어렵다.
- 개발 집중: 대형 시스템 개발에는 코드만 집중적으로 다룰 수 없다.
- 커뮤니케이션: 팀 간의 커뮤니케이션 메커니즘을 설계하고 활용해야 한다.
- 지속적인 통합: 지속적인 통합은 현실적으로 어렵지만, 자주 시스템을 빌드하고 정기적으로 출시하는 것은 필수적이다.
다중 팀 스크럼 (Multi-team Scrum)
: 다중 팀 스크럼은 여러 팀이 함께 협력하여 효과적으로 작업할 수 있도록 지원한다.
1. 역할 복제 (Role Replication)
- 각 팀은 제품 소유자와 스크럼마스터를 두어, 자신이 맡은 작업을 관리한다.
- 제품 소유자는 제품의 방향을 정하고, 스크럼마스터는 팀이 스크럼 프로세스를 잘 따르도록 돕는다.
2. 제품 아키텍트 (Product Architects)
- 각 팀은 제품 아키텍트를 선택한다.
- 이 아키텍트들은 함께 협력하여 전체 시스템의 구조를 설계하고 발전시킨다.
3. 출시 일정 정렬 (Release Alignment)
- 모든 팀의 제품 출시 일정을 맞춘다.
- 이를 통해 모든 기능이 포함된 완전한 시스템을 만들어, 시연할 수 있도록 준비한다.
4. 스크럼 간 회의 (Scrum of Scrums)
- 각 팀의 대표들이 매일 모여 진행 상황을 공유하고, 다음 작업을 계획한다.
- 이 회의는 팀 간의 협력과 소통을 강화하는 데 도움을 준다.
조직 전반의 애자일 적용 (Enterprise-wide Agile Adoption)
: 대기업에서 애자일 적용이 어려운 이유
문제설명
기존 관리 방식과 충돌 | 애자일을 경험해보지 않은 관리자들이 새로운 접근 방식 도입을 부담스러워함 |
관료적 절차와 충돌 | 대형 조직에서는 표준화된 품질 절차 및 표준이 존재 |
팀원의 기술 편차 | 애자일이 높은 기술 수준을 요구하는데, 대형 조직에서는 다양한 실력의 개발자가 존재함 |
문화적 저항 | 기존 시스템 엔지니어링 프로세스를 오랫동안 사용해 온 조직에서는 애자일 도입에 대한 저항 발생 |
'한동대학교 > 25-1 수업 정리' 카테고리의 다른 글
[DB] DB02 - 요약 (미완료) (0) | 2025.03.24 |
---|---|
[DB] DB01 - 요약 (미완료) (0) | 2025.03.21 |
[SE] L06 - 요약 (0) | 2025.03.17 |
[SE] L05 - 요약 (미완료) (0) | 2025.03.17 |
[SE] L03/L04 - 요약 (미완료) (0) | 2025.03.17 |