작성 맥락
이 글은 직접 학습하거나 구현하며 남긴 개인 기술 기록입니다. 참고 자료가 있는 경우 본문에 출처를 남기고, 틀린 부분을 발견하면 수정합니다.
소프트웨어 개발 방법론
“소프트웨어 개발 방법론”이라는 말은 폭포수, 애자일, 객체지향처럼 서로 완전히 달라 보이는 접근을 한데 묶어 부르지만, 결국 전부 “분석 → 설계 → 구현 → 시험”이라는 같은 뼈대를 어떤 순서·주기·중점으로 도는지가 다를 뿐이다. 이 글은 소프트웨어의 분류부터 SDLC 모델, 애자일 계열, 보안 개발 방법론까지 그 뼈대를 기준으로 정리한다.
소프트웨어 유형
상용 소프트웨어
- 상업적 목적으로 만들어진 소프트웨어
상용소프트웨어의 분류
- 산업 범용 소프트웨어
- 운영체제
- 미들웨어
- 응용SW
- 산업 특화 소프트웨어
- 자동차, 항공, 교육 등 특정 산업에 특화
- 예시: 자동주행 소프트웨어
응용 소프트웨어
- 애플리케이션, 응용 솔루션으로 구성
- 주요 기업용 소프트웨어 5가지:
- 오피스웨어
- ERP (전사적 자원 관리)
- SCM (공급망 관리)
- BI (비즈니스 인텔리전스)
- CRM (고객 관계 관리)
시스템 소프트웨어
- 컴퓨터 시스템을 효율적으로 사용하기 위한 소프트웨어
- 운영체제와 같은 의미로 사용
시스템의 이해
시스템 정의
- 장치를 중심으로 구성된 소프트웨어
- 구축된 환경을 의미
컴퓨터 시스템의 구성요소
- 입력
- 처리
- 출력
- 제어
- 피드백
평가기준
플랫폼
- 특정 시스템을 바탕으로 제공되는 운영체제
- 응용프로그램 관점 예시:
- 윈도우 이용자 → 윈도우
- 카카오톡 이용자 → 카카오톡
시스템 성능 지표
- 반환시간: 처리가 되는 시간
- 응답시간: 명령에 반응하는 시간
- 사용률: 데이터 처리에 시스템 자원을 사용하는 정도
소프트웨어 공학
기본 원칙
- 효율성 (시간, 기간, 인력, 비용)
- 수단, 도구, 생산성의 향상
- 목적: 효율적인 방법 선택
- 핵심: 효율
소프트웨어 개발 프레임워크 구성요소
모듈
- 분할하여 재사용이 가능한 부품
라이브러리
- 툴킷, 모듈의 집합
디자인 패턴
- 특정 기능의 문제해결 가이드라인
- 세부적인 구조 제공
프레임워크
- 개발의 틀을 제공
- 개발자는 기능을 구체화 (제어의 역흐름)
- 특정 디자인 패턴 유도
- 품질, 예산, 유지보수 효율성 증대
소프트웨어 아키텍처
- 소프트웨어의 전체적인 구조 설계
컴포넌트
- 협약에 의한 설계 방식
재사용 가능한 소프트웨어 요소
- 데이터 구조 포함
- 테스트 계획이나 문서화 방법 포함
- 합성 중심: 모듈을 조립
- 생성 중심: 추상적인 명세(틀)와 패턴 구성방식
소프트웨어 개발 수명주기 (SDLC)
폭포수 모델
- 이전 단계로 돌아갈 수 없음
- 명확한 산출물 생성
- 메뉴얼 작성 필수
프로토타입 모델
- 폭포수 모델의 단점 보완
- 시제품(프로토타입)을 통한 최종결과물 도출
- 사용자와 시스템 사이의 인터페이스 골격 제공
나선형 모델
- 폭포수 모델과 프로토타입 모델의 장점 결합
- 위험 분석 기능 추가
- 고객 평가와 위험 분석을 통한 완성도 향상
이 세 모델은 서로 대체재라기보다 “무엇이 불확실한가”에 따라 다르게 선택된다. 요구사항이 명확하고 변경이 거의 없는 프로젝트라면 폭포수가 관리하기 쉽고, 사용자가 자신의 요구사항을 말로 설명하기 어려운 경우 프로토타입으로 먼저 보여주는 편이 낫고, 프로젝트 규모가 크고 위험 요소가 많다면 나선형처럼 반복마다 위험을 재평가하는 쪽이 안전하다.
애자일 모델
- 소통 중심의 방법론
- 특징:
- 짧은 개발 주기와 피드백
- 소통을 통한 우선순위 결정
- 절차/문서/계획보다 소통/협업/변화대응 중시
- 고객 요구사항 반영으로 품질 향상
- 주요 방법론:
- Scrum
- XP
- Kanban
- Crystal
- FDD
- ASD
- DSDM
스크럼 모델
조직 구성
- 제품책임자
- 스크럼 마스터
- 개발팀
주요 개념
- 스프린트: 2~4주 단위의 개발 주기
- 태스크: 개발 요구사항(사용자 스토리)을 팀별로 분할한 작업 단위
핵심 가치
- 확약
- 전념
- 정직
- 존중
- 용기
역할별 책임
제품책임자
- 의사결정 담당
- 제품 백로그 작성
- 릴리즈 계획 수립
팀원
- 스토리 추가만 가능
- 우선순위 조정 불가
스크럼 마스터
- 가이드 역할 수행
- 일일 스크럼 회의 진행
- 장애 요소 관리
- 유연한 상황 대응
- 통제 권한 없음
개발팀
- 전체 개발 인원으로 구성
XP (eXtreme Programming) 모델
- 특징:
- 짧은 개발과정의 반복 극대화
- 높은 생산성
- 소규모 인원 운영
핵심 가치
- 의사소통
- 단순성
- 용기
- 존중
- 피드백
개발 프로세스
- 소규모 릴리즈: 작은 단위로 분할
- 스파이크: 특정 기술 검증
- 이터레이션: 1~3주 단위 개발 주기
- 프로세스 흐름:
- 스파이크를 통한 기술 검증
- 이터레이션 진행
- 새로운 스토리 작성
- 사용자 스토리 기반 승인 검사
- 테스트 과정에서 발견된 요구사항/오류를 다음 이터레이션에 반영
XP의 12가지 기본 원리
- Planning Game
- Small Releases
- System Metaphor
- Simple Design
- Test Driven Development
- Pair Programming
- Collective Ownership
- Continuous Integration
- Sustainable Pace
- Whole Team
- Coding Standards
- On-site Customer
소프트웨어 개발 방법론
개요
- 개발 전 과정에 지속적으로 적용할 방법/절차/기법
- 목적: 생산성과 품질 향상(효율성)
- 소프트웨어 공학에서 활용
- 기본 절차: 분석 → 설계 → 구현 → 시험
구조적 방법론
- Yourdon에 의해 개발
- 주요 도구:
- 자료 흐름도(DFD)
- 자료 사전(DD)
- 특징:
- 모듈 중심 설계
- 순차, 선택, 반복 구조
정보공학 방법론
- 정형화된 기법 통합
- 주요 모델링:
- 데이터 모델링: ERD
- 프로세스 모델링: 자료 흐름도, 프로세스 의존도(PDD)
객체지향 방법론
- 실체(Entity)를 객체(Object)로 표현
- 특징:
- 속성과 메소드 보유
- 데이터 객체의 관계형 테이블 변환
- 주요 개념:
- 캡슐화
- 정보은닉
- 추상화
- 상속성
- 다형성
컴포넌트 기반 (CBD)
- 컴포넌트 조립 방식의 프로그램 개발
- 장점:
- 신속성
- 유연성
- 표준화
- 단점:
- 높은 선행 투자 비용
- 책임 및 지적재산권 고려 필요
단계별 산출물
- 분석 단계
- 정의서
- 유스케이스 명세서
- 설계 단계
- 설계서
- 컴포넌트 설계서
- 총괄시험 계획서
- 시나리오
- 구현 단계
- 결과서
- 시험 단계
- 결과서
애자일 방법론
- 애자일 모델과 유사한 접근
제품 계열 방법론
- 임베디드 소프트웨어 중심
- 구성:
- 영역공학
- 응용공학
보안 개발 방법론
개요
- 목적: 보안 취약점 최소화
- 구성: 지침 및 사례 제공
- 특징: 다양한 취약점과 보안 방법론 존재
MS-SDL
- 마이크로소프트사의 보안 개발 방법론
Seven Touchpoints
- 검증된 보안 모범사례 7가지:
- 코드 검토
- 아키텍처 위험 분석
- 침투 테스트
- 위험 기반 보안 테스트
- 악용 사례
- 보안 요구
- 보안 운영
CLASP
- 초기 단계 보안 강화
- 운영 중인 시스템 적용 가능
- 5가지 관점:
- 개념
- 역할 기반
- 활동 평가
- 활동 구현
- 취약성
CWE
- 7가지 취약점 원인 분류:
- 입력 데이터 검증 및 표현
- 보안 기능
- 시간 및 상태
- 에러 처리
- 코드 오류
- 캡슐화
- API 오용
핵심 정리
- SDLC 모델(폭포수/프로토타입/나선형/애자일)의 선택 기준은 결국 “이 프로젝트에서 가장 불확실한 것이 무엇인가”이다.
- 애자일 계열(스크럼·XP)의 공통점은 “긴 계획 문서보다 짧은 반복과 피드백”이며, 스크럼은 역할·의식(세레모니) 중심, XP는 코딩 실천 방법(짝 프로그래밍, TDD) 중심으로 강조점이 다르다.
- 구조적/정보공학/객체지향/CBD 방법론은 “무엇을 설계의 기본 단위로 삼는가”(기능, 데이터, 객체, 컴포넌트)로 구분하면 차이가 뚜렷해진다.
댓글이 보이지 않으면 GitHub에 로그인한 뒤 새로고침해 주세요. 공개 댓글은 로그인 상태에서 더 안정적으로 표시됩니다.