▶ 001 소프트웨어 생명 주기
소프트웨어 생명 주기
소프트웨어를 개발하기 위해 정의하고 운용, 유지보수 등의 과정을 각 단계별로 나눈것
폭포수 모형(Waterfall Model)
- 폭포에서 한번 떨어진 물을 거슬러 올라갈 수 없듯이 소프트웨어 개발도 이전 단계로 돌아갈 수 없음
- 소프트웨어 공학에서 가장 오래되고 폭넓게 사용된 전통적인 모형, 고전적 생명 주기 모형
- 소프트웨어 개발 과정의 한 단계가 끝나야만 다음 단계로 넘어갈 수 있음
- 다음 단계를 수행하기 위한 결과물이 명확하게 산출되어야 함
프로토 타입 모형(Prototype Model, 원형 모형) / 중요★
사용자의 요구사항을 정확히 파악하기 위해 실제 개발될 소프트웨어에 대한 견본(시제)품을 만들어 최종 결과물 예측하는 모형
나선형 모형(Spiral Model, 점진적 모형)
폭포수 모형과 프로토타입 모형의 장점에 위험 분석 기능을 추가한 모형
- 보헴이 제안
- 위험 최소화 목적
- 점진적 모형
애자일 모형(Agile Model) / 중요★
고객의 요구사항 변화에 유연하게 대응할 수 있도록 일정한 주기를 반복하면서 개발과정 진행
- 스프린트(Sprint) 또는 이터레이션(Iteration)이라고 불림
- 반복되는 주기마다 만들어지는 결과물에 대한 고객 평가와 요구 적극 수용
• 애자일 모형 기반으로 하는 소프트웨어 개발 모형 / 아닌 것 골라라~
- 스크럼(Scrum)
- XP(eXtreme Programming),
- 칸반(Kanban)
- Lean, 크리스탈
- ASD 등
☞ 애자일 개발 4가지 핵심 가치
1. 프로세스와 도구보다는 개인과 상호작용에 더 가치를 둔다.
2. 방대한 문서보다는 실행되는 SW에 더 가치를 둔다.
3. 계약 협상보다는 고객과 협업에 더 가치를 둔다.
4. 계획을 따르기 보다는 변화에 반응하는 것에 더 가치를 둔다.
▶ 002 스크럼(Scrum) 기법
스크럼
팀이 중심이 되어 개발의 효율성을 높인다
• 제품 책임자(PO; Product Owner)
- 이해관계자들 중 제품에 대한 이해도가 높고, 요구사항을 책임지고 의사결정을 함, 주로 개발 의뢰자, 사용자가 담당
- 요구사항이 담긴 백로그(Backlog) 작성, 백로그에 대한 우선순위 지정
* 백로그 : 제품 개발에 필요한 요구사항을 모두 모아 우선순위를 부여해 놓은 목록
• 스크럼 마스터(SM; Scrum Master)
- 스크럼 팀이 스크럼을 잘 수행할 수 있도록 객관적인 시각에서 조언을 해주는 가이드 역할
- 진행 사항 점검, 장애 요소 공론화해 처리
• 개발팀(DT; Development Team)
- PO와 SM을 제외한 모든 팀원
- 백로그에 스토리를 추가하는 것 가능, 우선순위는 지정 못함
* 스토리 : 백로그에 작성되는 요구사항
스크럼 개발 프로세스 / 순서 알기
1. 제품 백로그(Product Backlog)
- 제품 개발에 필요한 모든 요구사항을 우선순위에 따라 나열한 목록
- 제품 백로그에 작성된 사용자 스토리를 기반으로 전체 일정 계획인 릴리즈 계획(Release Plan) 수립
2. 스프린트 계획회의(Sprint Planning Meeting)
3. 스프린트(Sprint)
4. 일일 스크럼 회의(Daily Scrum Meeting)
5. 스프린트 검토 회의(Sprint Review)
6. 스프린트 회고(Sprint Retrospective)
▶ 003 XP(eXtreme Programming)
XP(eXtreme Programming)
수시로 발생하는 고객의 요구사항에 유연하게 대응하기 위해 고객의 참여와 개발 과정의 반복을 극대화하여 개발 생산성을 향상시키는 방법
- XP의 5가지 핵심 가치 : 의사소통, 단순성, 용기, 존중, 피드백
XP 개발 프로세스
• 사용자 스토리(User Story)
- 고객의 요구사항을 간단한 시나리오로 표현한 것
- 내용은 기능 단위로 구성, 필요한 경우 간단한 테스트 사항(Test Case)도 기재
• 릴리즈 계획 수립(Release Planning)
- 몇 개의 스토리가 적용되어 부분적으로 기능이 완료된 제품을 제공하는 것
- 부분 혹은 전체 개발 완료 시점에 대한 일정 수립
* 릴리즈(Release) : 몇 개의 요구사항이 적용되어 부분적으로 기능이 완료된 제품을 제공하는 것
• 스파이크(Spike)
- 요구사항의 신뢰성을 높이고 기술 문제에 대한 위험을 감소시키기 위해 별도로 만드는 간단한 프로그램
- 처리할 문제 외의 다른 조건은 모두 무시하고 작성
• 주기(Iteration, 이터레이션)
- 하나의 릴리즈를 더 세분화 한 단위
• 승인 검사(Acceptance Test, 인수 테스트)
- 하나의 이터레이션 안에서 계획된 릴리즈 단위의 부분 완료 제품이 구현되면 수행하는 테스트
• 소규모 릴리즈(Small Release)
- 릴리즈를 소규모로 하게 되면, 고객의 반응을 기능별로 확인할 수 있어, 고객의 요구사항에 좀 더 유연하게 대응 가능
XP의 주요 실천 방법
- Pair Programming(짝 프로그래밍)
- Test-Driven Development(테스트 주도 개발)
- Whole Team(전체 팀)
- Continuous Integration(계속적인 통합)
- Design Improvement(디자인 개선) 또는 Refactoring(리팩토링)
- Small Releases(소규모 릴리즈)
▶ 004 현행 시스템 파악 절차
현행 시스템 파악 절차
• 1단계 : 시스템 구성 파악, 시스템 기능 파악, 시스템 인터페이스 파악
• 2단계 : 아키텍처 구성 파악, 소프트웨어 구성 파악
• 3단계 : 하드웨어 구성 파악, 네트워크 구성 파악
시스템 구성 파악
조직의 주요 업무를 담당하는 기간 업무와 이를 지원하는 지원 업무로 구분하여 기술
- 조직 내에 있는 모든 정보시스템의 현황을 파악할 수 있도록 각 업무에 속하는 단위 업무 정보시스템들의 명칭, 주요 기능 들 명시
시스템 기능 파악
단위 업무 시스템이 현재 제공하는 기능들을 주요 기능과 하부 기능, 세부 기능으로 구분하여 계층형으로 표시
시스템 인터페이스 파악
단위 업무 시스템 간에 주고받는 데이터의 종류, 형식, 프로토콜, 연계 유형, 주기 등을 명시
- 데이터를 어떤 형식으로 주고받는지, 통신규약은 무엇을 사용하는지, 연계 유형은 무엇인지 등을 반드시 고려
아키텍처 구성 파악
기간 업무 수행에 어떠한 기술 요소들이 사용되는지 최상위 수준에서 계층별로 표현한 아키텍처 구성도로 작성
- 아키텍처가 단위 업무 시스템별로 다른 경우에는 가장 핵심이 되는 기간 업무 처리 시스템을 기준으로 표현
소프트웨어 구성 파악
단위 업무 시스템별로 업무 처리를 위해 설치되어 있는 소프트웨어들의 제품명, 용도, 라이선스 적용 방식, 라이선스 수 등을 명시
- 시스템 구축비용 면에서 소프트웨어 비용이 적지 않은 비중을 차지하므로, 상용 소프트웨어의 경우 라이선스 적용 방식의 기준과 보유한 라이선스의 파악이 중요
하드웨어 구성 파악
단위 업무 시스템들이 운용되는 서버의 주요 사양과 수량, 그리고 이중화의 적용 여부 명시
- 서버의 이중화는 기간 업무의 서비스 기간, 장애 대응 정책에 따라 필요 여부가 결정
- 현행 시스템에 이중화가 적용된 경우 대부분 새로 구성될 시스템에도 이중화가 필요하므로 이로 인한 비용 증가와 시스템 구축 난이도가 높아질 가능성 고려
* 서버의 주요 사양 : 서버의 CPU 처리 속도, 메모리 크기, 하드디스크의 용량 등을 파악해 명ㅅ
* 서버의 이중화 : 운용 서버의 장애 시 대기 서버로 서비스를 계속 유지할 수 있도록, 운용 서버의 자료 변경이 예비 서버에도 동일하게 복제되도록 관리
네트워크 구성 파악
업무 시스템들의 네트워크 구성을 파악할 수 있도록 서버의 위치, 서버 간의 네트워크 연결 방식을 네트워크 구성도로 작성
- 네트워크 구성도를 통해 서버들의 물리적인 위치 관계를 파악, 보안 취약성 분석
- 현행 시스템에 이중화가 적용된 경우 대부분 새로 구성될 시스템에도 이중화가 필요하므로 이로 인한 비용 증가와 시스템 구축 난이도가 높아질 가능성 고려
▶ 005 개발 기술 환경 파악 / 대충 읽어보기
운영체제(OS, Operating System)
컴퓨터 시스템의 자원들을 효율적으로 관리하며, 사용자가 컴퓨터를 편리하고 효율적으로 사용할 수 있도록 환경을 제공하는 소프트웨
운영체제 관련 요구사항 식별 시 고려사항
구분 | 내용 | |
가용성 | - 시스템의 장시간 운영으로 인해 발생할 수 있는 운영체제 고유의 장애 발생 가능성 - 메모리 누수로 인한 성능 저하 및 재가동 - 보안상 발견된 허점을 보완하기 위한 지속적인 패치 설치로 인한 재가동 - 운영체제의 결함 등으로 인한 패치 설치를 위한 재가동 | |
성능 | - 대규모 동시 사용자 요청에 대한 처리 - 대규모 및 대용량 파일 작업에 대한 처리 - 지원 가능한 메모리 크기 | |
기술지원 | - 제작업체의 안정적인 기술 지원 - 여러 사용자들 간의 정보 공유 - 오픈 소스 여부 | |
주변기기 | - 설치 가능한 하드웨어 - 여러 주변기기 지원 여부 | |
구축비용 | - 지원 가능한 하드웨어 비용 - 설치할 응용 프로그램의 라이선스 정책 및 비용 - 유지관리 비용 - 총 소유 비용(TOC) |
* 미들웨어 : 운영체제와 해당 운영체제에 의해 실행되는 응용 프로그램 사이에서 운영체제가 제공하는 서비스 이외에 추가적인 서비스를 제공하는 소프트웨어
* 오픈 소스 : 누구나 별다른 제한 없이 사용할 수 있도록 소스 코드를 공개해 무료로 사용이 가능한 소프트웨어
* 총 소유 비용(T0C) : 어떤 자산을 획득하려고 할 때 지정된 기간 동안 발생할 수 있는 모든 직간접 비용
데이터베이스 관리 시스템(DBMS)
사용자와 데이터베이스 사이에서 사용자의 요구에 따라 정보를 생성해주고, 데이터베이스를 관리해 주는 소프트웨어
- DBMS는 기존의 파일 시스템이 갖는 데이터 종속성과 중복성의 문제를 해결하기 위해 제안된 시스템
- DBMS의 종류에는 Oracle, IBM DB2, Microsoft SQL Server, MySQL, SQLite, MongoDB, Redis 등이 있음
DMBS 관련 요구사항 식별 시 고려사항
구분 | 내용 | |
가용성 | - 시스템의 장시간 운영으로 인해 발생할 수 있는 운영체제 고유의 장애 발생 가능성 - DBMS의 결함 등으로 인한 패치 설치를 위한 재가동 - 백업이나 복구의 편의성 - DBMS 이중화 및 복제 지원 | |
성능 | - 대규모 데이터 처리 성능 - 대용량 트랜잭션 처리 성능 - 튜닝 옵션의 다양한 지원 - 최소화된 설정과 비용 기반 질의 최적화 지원 | |
기술지원 | - 제작업체의 안정적인 기술 지원 - 여러 사용자들 간의 정보 공유 - 오픈 소스 여부 | |
상호 호환성 | - 설치 가능한 운영체제의 종류 - JDBC, ODBC와의 호환 여부 | |
구축 비용 | - 라이선스 정책 및 비용 - 유지관리 비용 - 총 소유 비용 |
* JDBC : 자바와 DB를 연결해 주는 인터페이스
* ODBC : 응용 프로그램과 DB를 연결해 주는 표준 인터페이스
웹 애플리케이션 서버(WAS; Web Application Sever)
정적인 콘텐츠 처리를 하는 웹 서버와 달리 사용자의 요구에 따라 변하는 동적인 콘텐츠를 처리하기 위해 사용되는 미들웨어
- WAS의 종류에는 Tomcat, GlassFish, JBoss, Jetty, JEUS, Resin, WebLogic, WebSphere 등이 있음
WAS 관련 요구사항 식별 시 고려사항
구분 | 내용 | |
가용성 | - 시스템의 장시간 운영으로 인해 발생할 수 있는 운영체제 고유의 장애 발생 가능성 - WAS의 결함 등으로 인한 패치 설치를 위한 재가동 - 안정적인 트랜잭션 처리 - WAS 이중화 지원 | |
성능 | - 대규모 트랜잭션 처리 성능 - 다양한 설정 옵션 지원 - 가비지 컬렉션(GC)의 다양한 옵션 | |
기술지원 | - 제조업체의 안정적인 기술 지원 - 여러 사용자들 간의 정보 공유 - 오픈 소스 여부 | |
구축 비용 | - 라이선스 정책 및 비용 - 유지관리 비용 - 총 소유 비용 |
* 가비지 컬렉션(Garbage Collection) : 실제로는 사용되지 않으면서 가용 공간 리스트에 반환되지 않는 메모리 공간인 가비지를 강제로 해제하여 사용할 수 있도록 하는 메모리 관리 기법 ex)압축
오픈 소스 사용에 따른 고려사항
누구나 별다른 제한 없이 사용할 수 있도록 소스 코드를 공개한 것
- 오픈 소스 사용 시 라이선스의 종류, 사용자 수, 기술의 지속 가능성 등을 고려