소프트웨어 개발 방법론
01. 소프트웨어 개발 환경
1) 운영체제(OS : Operating System)
1. 운영체제의 정의
- 하드웨어와 소프트웨어 자원을 관리하고 컴퓨터 프로그램을 위한 공통 서비스를 제공하는 시스템 소프트웨어
2. 운영체제의 종류
- Windows : 중소 규모 서버, 개인용 PC, Tablet PC , Embedded System 등에서 사용하며, 유지 및 관리 비용 측면에서 Windows 시스템이 강점을 가짐
- UNIX : 대용량 처리, 안정성이 요구되는 Server, NAS, Workstation 등에서 사용하며 신뢰할 수 있는 대용량 처리를 위해서는 UNIX 기반 시스템을 선호
- NAS(Network Attached Storage)
- 서버와 저장 장치를 네트워크로 연결하는 방식으로 구성 설정이 간편함
- Workstation
- 개인이나 소수의 사람이 특수 분야에 사용하는 고성능의 컴퓨터
- Linux : 중대 규모 서버에서 사용하며 일반적으로 Linux 기반 시스템이 하드웨어 및 소프트웨어 소요 비용이 가장 적게 소요됨
- iOS : 애플의 운영체제로 스마트폰, 태블핏 PC 등에서 사용
- Android : 구글의 개방형 운영체제로 스마트폰, 태블릿 PC 등에서 사용
3. 운영체제 분석 시 고려사항
- 신뢰도 : 오랜 시간 시스템을 운영할 때 운영체제 고유의 장애 발생 가능성이 있는지 확인
- 성능 : 다수의 동시 사용자 요청 처리가 가능한지 확인하고, 대량 파일 작업 처리가 가능한지 확인
- 기술 지원 : 공급 벤더(Vender)들의 안정적인 기술 지원이 있는지 확인
- 벤더(Vender)
- 컴퓨터나 소프트웨어 제품을 판매하거나 공급하는 다품종 소량 도매업
- 주변 기기 : 다수의 주변 기기 지원 여부를 확인
- 구축 비용 : 지원 가능한 하드웨어 비용, 설치할 애플리케이션의 라이선스 정책 및 비용이 어느정도인지 확인(TCO 확인)
- TCO(Total Cost of Ownership)
- 컴퓨터 구입 비용, 업그레이드 비용, 유지보수 비용, 소프트웨어 비용 등 컴퓨터 시스템을 구축하고 사용하는 데 드는 모든 비용을 의미
4. 운영체제 현황
- 32bit 운영체제에서는 4GB 메모리까지 액세스 가능하고, 64bit 운영체제에서는 4GB 이상의 메모리까지 액세스 가능
- CISC 설계 방식이 적용된 인텔의 x86 아키텍처 기반 칩을 사용하고 있는 하드웨어는 Window나 Linux를 운영체제로 설치할 수 있으며, RISC 설계 방식이 적용된 칩들은 UNIX 운영체제를 설치
- HP와 Intel 사가 협력해서 만든 (IA -64) 칩은 여러 운영체제를 지원
- RISC 설계 방식이 적용된 ARM 칩은 스마트폰이나 태블릿에 주로 채택되고 있으며, iOS, Android 등의 운영체제를 지원
2) CPU(중앙 처리 장치)
1. CISC(Complex Instruction Set Computer) 설계 방식
- 복잡하고 많은 종류의 명령어와 주소 지정 모드를 사용
- 가변 길이 명령어 형식
- 100 ~ 250개 정도의 많은 명령어를 가지고 있어 설계가 어려움
- 마이크로 프로그래밍(소프트웨어적) 제어 방식
- 명령어가 소프트웨어적이므로 호환성이 좋음
- 컴파일 과정이 쉽고, 호환성이 좋지만, 속도가 느리다는 단점이 있음
- 인텔(Intel)사의 CPU에 주로 사용
2. RISC(Reduced Instruction Set Computer) 설계 방식
- 간단하고 적은 종류의 명령어와 적은 수의 주소 지정 모드를 사용
- 고정 길이 명령어 형식
- CISC에 비해 명령어 수가 적음
- 하드웨어(논리 회로를 이용한 하드웨어)적 제어 방식
- 효율적인 파이프라이닝 구조를 사용
- 명령어의 길이가 미리 정해져 있으므로 해석 속도가 빠름
- 작고 빠른 명령어 사용을 위해 많은 수의 범용 레지스터가 사용되며, 처리 속도가 빠르고 하드웨어 구조가 간단해짐
- 효율성이 떨어지고 전력 소모가 적음
- 처리 비트 단위가 변하거나 프로세서의 구조가 조금만 바뀌어도 하위 프로세서와의 호환성이 떨어짐
- 고성능의 워크스테이션이나 그래픽용 컴퓨터에서 주로 사용
3) DBMS(DataBase Management System)
1. DBMS의 정의
- 대량의 데이터를 저장하고 있는 데이터베이스를 생성, 조회, 변경 등의 관리를 사는 프로그램
- 사용자, 다른 애플리케이션, 데이터베이스와 상호 작용하여 데이터를 저장하고 분석하기 위한 애플리케이션
2. DBMS의 종류
- Oracle : 대규모 데이터 처리, 안정적인 처리가 가능
- IBM DB2 : 대규모 데이터 처리, 안정적인 처리가 가능
- SQL Server : 중소 규모 데이터 처리, 안정적인 처리가 가능
- MySQL : 오픈소스에서 주로 사용되는 RDBMS
- SQLite : 스마트폰, 태플릿 PC 등의 Embedded 데이터베이스 용도로 사용
- MongoDB : 오픈소스이며 NoSQL DBMS
- Redis : 오픈소스이며 키-값(Key-Value) DBMS
3. DBMS 분석 시 고려사항
- 가용성 : 오랜 기간 시스템을 운영할 때 장애 발생 가능성이 있는지 확인
- 성능 : 대규모 데이터를 처리할 만한 성능인지 확인하며 다양한 튜닝 옵션을 지원하는지 확인
- 기술 지원 : 공급 벤더들의 안정적인 기술을 지원하는지 확인하며 오픈소스 여부를 확인
- 상호 호환성 : 설치 가능한 운영체제 종류를 확인하며 다양한 운영체제에서 지원되는 JDBC, ODBC를 확인
- 구축 비용 : 라이선스 정책 및 비용을 확인하며 유지 및 관리 비용을 확인(TCO 확인)
4) 미들웨어(Middleware)
1. 미들웨어의 정의
- 운영체제와 스프트웨어 애플리케이션 사이에 위치
- 소프트웨어 애플리케이션에게 운영체제가 제공하는 서비스를 추가 및 확장하여 제공하는 컴퓨터 소프트웨어
- 클라이언트와 서버 간 통신을 담당하는 시스템 소프트웨어
- 분산 컴퓨팅 환경에서 서로 다른 기종 간의 하드웨어나 프로토콜, 통신 환경 등을 연결하여 응용 프로그램과 운영 환경 간에 원만한 통신이 이루어질 수 있게 서비스를 제공하는 소프트웨어
2. 미들웨어의 종류
- DBMS(DataBase Management System)
- 데이터베이스 벤더에서 제공하는 클라이언트에서 데이터베이스와 연결하기 위한 미들웨어
- 이 제품을 사용하여 시스템을 구축하는 경우 보통 2-티어(Tier) 아키텍처라고 부름
- RPC(Remote Procedure Call)
- 애플리케이션의 프로시저를 사용하여 원격 프로시저를 마치 로컬 프로시저처럼 호출하는 방식의 미들웨어
- MOM(Message Oriented Middleware)
- 메시지 기반의 비동기형 메시지를 전달하는 방식의 미들웨어
- 이 기종 분산 데이터 시스템의 데이터 동기를 위해 많이 사용
- TP-Monitor
- 트랜잭션이 올바르게 처리되고 있는지 데이터를 감시하고 제어하는 프로그램
- 온라인 트랜잭션 업무(은행 계정, 항공기/버스 예약 업무 등)에서 트랜잭션을 처리, 감시하는 미들웨어
- 사용자 수가 증가하여도 빠른 응답 속도를 유지해야 하는 업무에 적합
- ORB(Object Request Broker)
- 객체지향 미들웨어로 코바(CORBA) 표준 스펙을 구현한 미들웨어
- 최근에는 TP-Monitor가 가지고 있는 장점(트랜잭션 처리, 모니터링 등)을 추가하여 구현
- WAS(Web Application Server)
- 클라이언트/서버 환경보다는 웹 환경을 구현하기 위한 미들웨어
- EJB는 서버 컴퓨터에서 운영되는 Java 컴포넌트들을 설정하기 위한 아키텍처
5) WAS(Web Application Server)
1. WAS의 개념
- 동적인 웹 사이트, 웹 애플리케이션, 웹 서비스의 개발을 지원하기 위하여 설계된 소프트웨어로 데이터 접근 관리, 세션 관리, 트랜잭션 관리 등을 위한 라이브러리를 제공
- WAS는 HTTP 세션 처리를 위한 웹 서버 기능뿐만 아니라 필수적인 기업 업무까지 Java, EJB 컴포넌트 기반으로 구현이 가능
- 사용자가 웹 브라우저로 요청하면, 정적 데이터는 웹 서버가 직접 처리
- 동적 데이터는 웹 서버에서 직접 처리하지 못하여 WAS에서 지원받아 처리
- 정적 데이터는 이미지나 자바스크립트 등이 있음
- 동적 데이터는 데이터베이스와 접속, 외부 시스템과의 연동 등이 있음
2. WAS의 종류
- GlassFish : GlassFish Community(애플리케이션 서버 개발을 위한 Java 공동체)에서 제공, NetBeans(Java 개발자 플랫폼) 개발 툴과 연동하여 사용
- JBoss : Red Hat, JBoss(Java 기반으로 오픈소스 미들웨어의 총칭)에서 제공, 오픈소스 제품들을 이요하는 경우에 사용
- Jetty : Eclipse Foundation에서 제공, 빠른 처리 속도가 요구되는 경우에 사용
- JEUS : TmaxSoft에서 제공, 대량의 안정적인 거래 처리가 요구되며 적시에 기술 지원이 필요한 경우에 사용
- Resin : Caucho Technology(오픈소스 창시자, 웹 서버 소프트웨어 개발사)에서 제공, 빠른 처리 속도가 요구되는 경우에 사용
- WebLogic : Oracle Corporation에서 제공, 대량의 안정적인 거래 처리가 요구되는 경우에 사용
- WebSphere : IBM에서 제공, 대량의 안정적인 거래 처리가 요구되는 경우에 사용
3. WAS 분석 시 고려사항
- 가용성
- 오랜 시간 동안 시스템을 운영할 때 장애 발생 가능성이 있는지 확인
- 안정적인 트랜잭션 처리가 가능한지 확인
- 패치 설치를 위한 재기동이 되는지 확인
- WAS 이중화를 지원하는지 확인
- 성능
- 대규모 거래 요청 시 처리 성능을 확인
- 다양한 설정 옵션을 지원하는지 확인
- GC의 다양한 옵션을 지원하는지 확인
- 기술 지원
- 공급 벤더들의 안정적인 기술 지원이 가능한지 확인
- 다수의 사용자들 간의 정보를 공유할 수 있는지 확인
- 오픈 소스 여부를 확인
- 구축 비용
- 라이선스 정책 및 비용을 확인
- 유지 및 관리 비용을 확인
- 총 소요비용(TCO)을 확인
6) 오픈소스(Open Source)
1. 오픈소스의 정의
- 소스 코드를 공개해 누구나 특별한 제한 없이 그 코드를 보고 사용할 수 있는 오픈소스 라이선스를 만족하는 소프트웨어
2. 오픈소스 분석 시 고려사항
- 라이선스의 종류, 사용자 수, 기술의 지속 가능성 등을 고려해야 함
- 라이선스의 종류 등 자세한 내용은 한국저작권위원회의 OLIS 사이트를 참조
- 어떠한 오픈소스를 사용해야 라이선스에 문제가 없을지 판단이 어려운 경우에는 전자정부 표준 프레임워크에서 사용 중인 오픈소스 소프트웨어를 참조