소프트웨어 개발 방법론
소프트웨어 개발 환경
1) 운영체제(OS:Operation System)
운영체제의 정의: 하드웨어와 소프트웨어 자원을 관리하고 컴퓨터 프로그램을 위한 공통 서비스를 제공하는 시스템 소프트웨어
운영체제의 종류
- Windows: 중소 규모 서버, 개인용 PC, 테블릿, 임베디드 등에서 사용. 유지 및 관리 비용 측면에서 강점
- UNIX: 대용량 처리, 안정성이 요구되는 서버, NAS(서버와 저장 장치를 네트워크로 연결), Workstation(고성능 컴퓨터)
- Linux: 중대 규모 서버. 하드퉤어 및 소프트웨어 소요 비용이 가장 적게 소요
- iOS: 스마트 폰, 테블릿 PC 등에서 사용
- Android: 스마트 폰, 테블릿 PC 등에서 사용
운영체제 분석 시 고려사항
- 신뢰도: 장시간 운영시 OS의 고유 장애 발생 가능성이 있는가
- 성능: 다수 사용자 요청 처리, 대량 파일 작업 처리
- 기술 자원: 벤더들의 안정적인 기술 지원
- 주변 기기: 다수의 주변 기기 지원 여부
- 구축 비용: TCO(컴퓨터 구입+업그레이드, 유지보수+소프트웨어 비용 등)
운영체제 현황
-
32bit 운영체제에서는 4GB 메모리까지 엑세스 가능(사용자 메모리는 2GB), 64bit 운영체제에서는 4GB 이상의 메모리까지 엑세스 가능
-
CISC 설계 방식: 인텔의 x86 아키텍쳐 기반 칩. Windows, Linux 설치 가능
RISC 설계 방식: UNIX 지원. ARM 칩은 iOS, Android 지원
2) CPU(중앙 처리 장치)
CISC 설계 방식
- 복잡하고 많은 종류의 명령어와 주소 지정 모드 사용(설계 어려움)
- 마이크로 프로그래밍(소프트웨어적) 제어 방식(호환성 좋음)
- 컴파일 과정이 쉽고 호환성이 좋지만 속도가 느림
- 주로 인텔
RISC 설계 방식
- 간단하고 적은 종류의 명령어와 적은 수의 주소 지정 모드
- 논리 회로를 이용한 하드웨어적 제어 방식
- 효율적인 파이프라이닝 구조 사용
- 호환성 떨어짐
- 범용 레지스터 사용으로 처리 속도 빠름
- 고성능의 워크스테이션이나 그래픽용 컴퓨터에 주로 사용
3) DBMS
정의: 대량의 데이터를 저장하고 있는 DB를 생성, 조회, 변경 등의 관리를 하는 프로그램. 다른 어플리케이션, DB와 상호 작용해 데이터를 저장, 분석
종류
- Oracle: 대규모 데이터 처리, 안정적인 처리
- IBM: 대규모 데이터 처리, 안정적인 처리
- SQL Server: 중소 규모 데이터 처리, 안정적인 처리
- MySQL: 오픈소스에서 사용
- SQLite: 스마트폰, 테블릿 등의 임베디드 DB 용도로 사용
- MongoDB: 오픈소스. NoSQL
- Redis: 오픈소스. 키 값 DBMS
DBMS 분석 시 고려사항
- 가용성: 장시간 시스템 운영시 장애 발생 가능성 여부
- 성능: 대규모 데이터 처리, 튜닝 옵션 지원 여부
- 기술 지원: 벤더들의 안정적인 기술 지원
- 상호 호환성: 설치 가능한 OS 종류 확인
- 구축 비용: TCO
4) 미들웨어
정의: OS와 S/W 어플리케이션 사이에 위치하며, 어플리케이션에 OS가 제공하는 서비스를 추가 및 확장하여 제공하는 컴퓨터 소프트웨어. 클라이언트와 서버 간 통신을 담당
종류
- DBMS: 클라이언트에서 데이터베이스와 연결하기 위한 미들웨어(2-Tier Arc)
- RPC(Remote Procedure Call): 어플리케이션의 프로시저를 사용해 원격 프로시저를 로컬 프로시저 처럼 호출하는 방식
- MOM(Message Oriented Middleware): 비동기형 메시지 전달 방식. 분산 데이터 시스템의 데이터 동기를 위해 많이 사용
- TP-Monitor: 트랜잭션이 올바르게 처리 되고 있는지 데이터를 감시, 제어. 사용자 수가 증가해도 빠른 응답 속도를 유지해야 하는 업무에 적합
- ORB(Object Request Broker): 흩어져 있는 컴퓨터들을 공통 회선으로 묶음(기능, 프로그램 공동 사용)
- WAS(Web Application Server): 웹 환경 구현
5) WAS
정의
- 동적 웹 사이트, 웹 어플리케이션, 웹 서비스의 개발을 지원하기 위해 설계된 소프트웨어
- 데이터 접근 관리, 세션 관리, 트랜잭션 관리 등을 위한 라이브러리 제공
종류
- GrassFish: 자바 기반. for 어플리케이션 서버 개발
- JBoss: 자바 기반. 오픈소스 제품 이용
- Jetty: 이클립스에서 제공. 빠른 처리 속도 요구되는 경우 사용
- JEUS: TmaxSoft. 대량의 안정적인 거래 처리 요구, 적시의 기술 지원 요구하는 경우
- Resin: 빠른 처리 속도 요구되는 경우
- WebLogic: 오라클에서 제공. 대량의 안정적인 거래 처리 요구하는 경우
- WebSphere: IBM에서 제공. 대량의 안정적인 거래 처리 요구하는 경우
고려사항
- 가용성: 장시간 시스템 운영시 장애 발생 가능성 여부
- 성능: 대규모 거래 요청 처리 가능
- 기술 지원: 벤더의 안정적인 기술 지원
- 구축 비용: TCO
6) 오픈 소스
정의: 소스 코드를 공개해 누구나 특별한 제한 없이 사용할 수 있는 오픈소스 라이선스를 만족하는 소프트웨어
고려사항: 라이선스 종류, 사용자 수, 기술의 지속 가능성 등을 고려
소프트웨어 개발 방법론
1) 구조적 방법론 - 1970년대
절차: 타당성 검토 -> 계확 -> 요구사항 -> 설계 -> 구현 -> 시험 -> 운용/유지보수
특징
- 구조적인 프로그래밍 작성(부품 조립)
- 정형화된 분석 절차
- 쉽게 이해할 수 있고, 검증할 수 있는 프로그램 코드 생성 목적
- 모듈(부품) 중심
- 하향식 기능 분해
- 프로세스 중심
- 재사용성, 유지보수성이 낮음
2) 정보공학 방법론 - 1980년대
절차
- 수직적 구조 방법론: 정보 전략 계획 -> 업무 영역 분석 -> 업무 시스템 설계 -> 기술 설계 -> 업무 시스템 구축 -> 업무 시스템 실행
- 수평적 구조 방법론: 데이터 -> 업무 활동 -> 상호 작용
특징
- for 정보 시스템 개발
- 생명주기를 이용해 대형 프로젝트를 수행
- 데이터 중심
- 자료 구조 중심(안정적)
- 데이터와 프로세스가 균형적
- 기능적 설계를 벗어나지 못함
- 재사용성, 유지보수성 낮음
3) 객체지향 방법론 - 1990년대
절차: 요구분석 -> 설계 -> 구현 -> 시험 -> 인수
특징
- 데이터(실체)와 관련 동작(절차, 방법 ,기능) 포함
- for 정보 시스템, 데이터베이스 설계
- 객체지향 기법을 활용해 시스템 구축
- 객체 중심(캡슐화, 추상화 기술 필요)
- 분석 초점 명확
- 자연스럽고 유연하며 재사용 용이
- 전문가 부족
4) 컴포넌트 기반 방법론 - 2000년대
절차: 개발 준비 -> 분석 -> 설계 -> 구현 -> 시험 -> 전개 -> 인도
특징
- 컴포넌트를 조립해 어플리케이션을 만듦
- 공공 행정 정보 시스템 개발에 많이 활용
- 재사용이 가능한 컴포넌트의 개발 또는 사용 컴포넌트를 조합하여 개발
- 재사용성, 생산성, 품질이 높음
- 비용 저렴, 위기 개선
- 테스트 환경 부족, 컴포넌트 평가, 인증 환경 미흡
5) 애자일 방법론 - 2000년 이후
정의: 요구사항 -> 설계 -> 구현 -> 시험의 단계를 거침. 개발 단계에서 변화에 신속하게 대응하기 위해 요구사항을 지속적으로 분석, 반영하여 시간 지연 최소화
특징
- 소통과 협력을 중요시. 반복적인 개발을 통한 잦은 출시를 목표
- 기본 모형(폭포수, 프로토타입, 나선형)의 문제점 보안
- 점증적 개발
- 출시 주기를 짧게해 다양한 요구 변화에 대응
- 가볍고 실용적인 소프트웨어 개발 방법론
선언문
- 개인과의 상호 작용을 중시
- 동작하는 소프트웨어를 문서보다 중시
- 고객과의 협력 중시
- 변화의 대응 중시
- 프로세스와 도구 문서작업, 계약의 협상, 계획의 수행을 무시하는 것은 아님
원칙
- 소통- 차트, 정보 공유, 회의
- 협력- 협조, 고객과의 대화로 문제 해결
- 적응- 변화 수용, 융통성
- 지속- 검증 반복, 점증 개발
- 가치 전달- 위험도 높은 작업 우선, 비용 감소
- 피드백- 자주 출시, 고객 평가
가치: 의사소통, 용기, 피드백, 단순함, 존경
XP(eXtreme Programming)
- 애자일 모형으로 개발하는 대표적인 방법
- 문서화를 강조하지 않고 변경을 추구하며, 개발 초기부터 검사를 병행
- 의사소통의 개선과 즉각적 피드백에 의한 단순 코딩으로 품질을 높힘
스크럼(SCRUM)
- 애자일 방법중 하나. 상호 점진적 개발 방법론
- 매일 정해진 시간, 정해진 장소에서 단기간에 개발(프로젝트 관리 중심)
- 추정 및 조정 기반의 경험적 관리 기법
- 5가지 가치: 확약, 전념, 정직, 존중, 용기
- 요소: 백로그(요구사항), 스프린트(30일 단위로 분리하여 반복적으로 수행), 스크림 미팅(5분 회의), 스크림 마스터(팀 리더)
린(Lean)
- 개발 프로세스의 낭비적인 부분 제거
- 7가지 원칙: 낭비 요소 제거, 품질 내재화, 지식 창출, 늦은 결정, 빠른 인도, 사람 존중, 공정 최소화
6) 제품 계열 방법론 - 2010년대
- 특정 제품에 적용하고 싶은 공통된 기능 정의 개발
- 임베디드 소프트웨어 작성시 유용
7) 테일러링 개발 방법론
특징
- 서로 다른 개발 환경에서 개발되는 다양한 종류의 프로젝트를 일관되게끔 하기 위해
- 개발하려는 소프트웨어 특성에 맞게 융퉁성 있게 적용하는 방법론
- 표준 프레임워크 기반
- 커스터마이징의 작업이 반복
- 프로젝트의 다양한 특성들을 분석해 쉽게 해결, 진행
- ISO/IEC 12207, CMMI, SPICE
필요성
- 내부 기준
- 목표 환경: 개발 환경과 유형이 다른 경우
- 요구사항: 요구 사항이 다른 경우
- 프로젝트 규모: 일정, 비용, 범위 등이 다른 경우
- 기술 환경: 방법론, 보유 기술, 구성원의 능력 등이 다른 경우
- 외부 기준
- 법적 제약 사항: IT 컴플라이언스(규정) 등이 다른 경우
- 표준 품질 기준: 표준 품질 기준이 다른 경우
8) 보안 개발 방법론
- MS-SDL: 보안 수준이 높은 안전한 소프트웨어를 개발하기 위해
- Seven Touchpoints: 실무적으로 검증된 개발 보안 방법론 중 하나.보안의 모범 사례를 SDLC에 통합
- CLASP: 개발 초기 단계에 보안을 강화하기 위해. 활동 중심 역할 기반 프로세스 집합체. 이미 운영중인 시스템에 적용하기 적합
- CWE: 보안 취약점을 유발하는 원인을 7가지로 정리한 방법론.
참고
출제 위원이 참고하는 정보처리기사 필기(이기적) -최희준, 영진정보연구소 공저