통합 개발 환경(IDE; Integrated Development Environment)
코딩, 디버그, 컴파일, 배포 등 프로그램 개발과 관련된 모든 작업을 하나의 프로그램에서 처리할 수 있도록 제공하는 소프트웨어적인 개발 환경
- 기존 소프트웨어 개발에서는 편집기, 컴파일러, 디버거 등의 다양한 툴을 별도로 사용
- 현재는 하나의 인터페이스로 통합하여 제공
- IDE 개발 환경을 지원하는 도구는 플랫폼, 운영체제, 언어별로 다양하게 존재
- 대표적인 기능
코딩 (Coding) |
C, Java 등의 프로그래밍 언어로 프로그램을 작성하는 기능 |
컴파일 (Compile) |
개발자가 작성한 고급 언어로 된 프로그램을 컴퓨터가 이해할 수 있는 목적 프로그램으로 번역하여 컴퓨터에서 실행 가능한 형태로 변환하는 기능 |
디버깅 (Debugging) |
소프트웨어나 하드웨어의 오류나 잘못된 동작, 즉 버그(Bug)를 찾아 수정하는 기능 |
배포 (Deployment) |
소프트웨어를 사용자에게 전달하는 기능 |
빌드
소스 코드 파일들을 컴파일 한 후 여러 개의 모듈을 묶어 실행 파일로 만드는 과정
빌드 도구
소스 코드 파일들을 컴퓨터에서 실행할 수 있는 제품 소프트웨어로 변환하는 과정을 수행하는 도구
- 소스 코드를 소프트웨어로 변환하는 과정에 필요한 전처리(Preprocessing), 컴파일(Complie) 등의 작업들을 수행하는 소프트웨어
- 대표적인 도구
Ant | 아파치 소프트웨어 재단(Apache Software Foundation)에서 개발한 소프트웨어, 자바 프로젝트의 공식적인 빌드 도구로 사용 중 |
Maven | Ant와 동일한 아파치 소프트웨어 재단에서 개발된 것, Ant의 대안으로 개발 |
Gradle | 기존의 Ant와 Maven을 보완하여 개발된 빌드 도구, 한스 도커(Hans Dockter)외 6인의 개발자가 모여 공동 개발하였음 |
빌드 자동화 도구
빌드를 포함하여 테스트 및 배포를 자동화하는 도구
- 애자일 환경에서는 하나의 작업이 마무리 될 때마다 모듈 단위로 나눠서 개발된 코드들이 지속적으로 통합
- 지속적인 통합(Continuous Integration) 개발 환경에서 빌드 자동화 도구는 유용하게 활용
- 종류 - Ant, Make, Maven, Gradle, Jenkins 등
Jenkins
Java 기반의 오픈 소스 형태, 가장 많이 사용되는 빌드 자동화 도구
- 서블릿 컨테이너에서 실행되는 서버 기반 도구
- SVN, Git 등 대부분의 형상 관리 도구와 연동이 가능
- 친숙한 Web GUI 제공으로 사용이 쉬움
- 여러 대의 컴퓨터를 이용한 분산 빌드나 테스트가 가능
Gradle
Groovy를 기반으로 한 오픈 소스 형태의 자동화 도구, 안드로이드 앱 개발 환경에 사용
- 플러그인을 설정하면 Java, C/C++, Python 등의 언어도 빌드 가능
- Groovy를 사용해서 만든 DSL(Domain Specific Language)을 스크립트 언어로 사용
- Gradle은 실행할 처리 명령들을 모아 태스크(Task)로 만든 후 태스크 단위로 실행
- 이전에 사용했던 태스크를 재사용하거나 다른 시스템의 태스크를 공유할 수 있는 빌드 캐시 기능을 지원하므로 빌드의 속도를 향상시킬 수 있음
소프트웨어 패키징
소프트웨어 패키징이란 모듈별로 생성한 실행 파일들을 묶어 배포용 설치 파일을 만드는 것
- 사용자를 중심으로 진행
- 소스 코드는 향후 관리를 고려하여 모듈화하여 패키징함
- 사용자가 소프트웨어를 사용하게 될 환경을 이해하여, 다양한 환경에서 소프트웨어를 손쉽게 사용할 수 있도록 일반적인 배포 형태로 패키징함
- 고려 사항
사용자의 시스템 환경, 즉 운영체제(OS), CPU, 메모리 등에 필요한 최소 환경을 정의함 |
UI(User Interface)는 사용자가 눈으로 직접 확인할 수 있도록 시각적인 자료와 함께 제공, 매뉴얼과 일치 시켜 패키징 |
소프트웨어는 하드웨어와 함께 관리될 수 있도록 Managed Service 형태로 제공하는 것이 좋음 |
사용자가에 배포되는 소프트웨어이므로 내부 콘텐츠에 대한 암호화 및 보안을 고려 |
다른 여러 콘텐츠 및 단말기 간 DRM(디지털 저작권 관리) 연동을 고려 |
사용자의 편의성을 위한 복잡성 및 비효율성 문제를 고려함 |
제품 소스트웨어 종류에 적합한 암호화 알고리즘을 적용함 |
릴리즈 노트(Release Note)
개발 과정에서 정리된 릴리즈 정보를 소프트웨어의 최종 사용자인 고객과 공유하기 위한 문서
- 릴리즈 노트를 통해 테스트 진행 방법에 대한 결과와 소프트웨어 사양에 대한 개발팀의 정확한 준수 여부를 확인
- 소프트웨어에 포함된 전체 기능, 서비스의 내용, 개선 사항 등을 사용자와 공유할 수 있음
- 릴리즈 노트를 이용해 소프트웨어의 버전 관리나 릴리즈 정보를 체계적으로 관리할 수 있음
- 릴리즈 노트는 소프트웨어의 초기 배포 시 또는 출시 후 개선 사항을 적용한 추가 배포 시에 제공
- 고려 사항
- 릴리즈 노트는 정확하고 완전한 정보를 기반으로 개발팀에서 직접 현재 시제로 작성
- 신규 소스, 빌드 등의 이력이 정확하게 관리되어 변경 또는 개선된 항목에 대한 이력 정보들도 작성되어야 함
- 릴리즈 노트 작성에 대한 표준 형식은 없지만 일반적으로 다음과 같은 항목이 포함
- Header(머릿말)
- 개요
- 목적
- 문제 요약
- 재현 항목
- 수정/개선 내용
- 사용자 영향도
- SW 지원 영향도
- 노트
- 면책 조항
- 연락처
디지털 저작권 관리(DRM; Digital Right Management)
저작권자가 배포한 디지털 콘텐츠가 저작권자가 의도한 용도로만 사용되도록 디지털 콘텐츠의 생성, 유통, 이용까지의 전 과정에 걸쳐 사용되는 디지털 콘텐츠 관리 및 보호 기술
- 원본 콘텐츠가 아날로그인 경우에는 디지털로 변환한 후 패키저에 의해 DRM 패키징 수행
- 콘텐츠의 크기에 따라 음원이나 문서와 같이 크기가 작은 경우, 사용자가 콘텐츠를 요청하는 시점에서 실시간으로 패키징 수행, 크기가 큰 경우에는 미리 패키징을 수행한 후 배포
- 패키징을 수행하면 콘텐츠에는 암호화된 저작권자의 전자서명이 포함, 저작권자가 설정한 라이선스 정보가 클리어링 하우스(Clearing House)에 등록됨
- 사용자가 콘텐츠를 사용하기 위해서 클리어링 하우스에 등록된 라이선스 정보를 통해 사용자 인증과 콘텐츠 사용 권한 소유 여부를 확인 받아야함
- 종량제 방식을 적용한 소프트웨어의 경우 클리어링 하우스를 통해 서비스의 실제 사용량을 측정하여 이용한 만큼의 요금을 부과함
구성 요소
클리어링 하우스 (Clearing House) |
저작권에 대한 사용 권한, 라이선스 발급, 암호화된 키 관리, 사용량에 따른 결제 관리 등을 수행하는 곳 |
콘텐츠 제공자 (Contents Provider) |
콘텐츠를 제공하는 저작권자 |
패키저 (Packager) |
콘텐츠를 메타 데이터와 함께 배포 가능한 형태로 묶어 암호화하는 프로그램 |
콘텐츠 분배자 (Contents Distributor) |
암호화된 콘텐츠를 유통하는 곳이나 사람 |
콘텐츠 소비자 (Customer) |
콘텐츠를 구매해서 사용하는 주체 |
DRM 컨트롤러 (DRM Controller) |
배포된 콘텐츠의 이용 권한을 통제하는 프로그램 |
보안 컨테이너 (Security Container) |
콘텐츠 원본을 안전하게 유통하기 위한 전자적 보안 장치 |
기술 요소
암호화 (Encryption) |
콘텐츠 및 라이선스를 암호화하고 전자 서명을 할 수 있는 기술 |
키 관리 (Key Management) |
콘텐츠를 암호화한 키에 대한 저장 및 분배 기술 |
암호화 파일 생성 (Packager) |
콘텐 츠를 암호화된 콘텐츠로 생성하기 위한 기술 |
식별 기술 (Identification) |
콘텐츠에 대한 식별 체계 표현 기술 |
저작권 표현 (Right Expression) |
라이선스의 내용 표현 기술 |
정책 관리 (Policy Management) |
라이선스 발급 및 사용에 대한 정책 표현 및 관리 기술 |
크랙 방지 (Tamper Resistance) |
크랙에 의한 콘텐츠 사용 방지 기술 |
인증 (Authentication) |
라이선스 발급 및 사용의 기준이 되는 사용자 인증 기술 |
소프트웨어 설치 매뉴얼
소프트웨어 설치 매뉴얼을 개발 초기에서부터 적용된 기준이나 사용자가 소프트웨어를 설치하는 과정에 필요한 내용을 기록한 설명서와 안내서
- 설치 매뉴얼은 사용자 기준으로 작성
- 설치 시작부터 완료할 때까지의 전 과정을 빠짐없이 순서대로 설명
- 설치 과정에서 표시될 수 있는 오류 메시지 및 예외 상황에 관한 내용을 별도로 분류하여 설명
- 소프트웨어 설치 매뉴얼에는 목차 및 개요, 서문, 기본 사항등이 기본적으로 포함
- 기능 식별 -> UI 분류 -> 설치 파일/백업 파일 확인 -> Uninstall 절차 확인 -> 이상 Case 확인 -> 최종 매뉴얼 적용
기본 사항
소프트웨어 개요 | - 소프트웨어의 주요 기능 및 UI 설명 - UI 및 화면 상의 버튼, 프레임 등을 그림으로 설명 |
설치 관련 파일 | - 소프트웨어 설치에 피요한 파일 설명 - exe, ini, log 등의 파일 설명 |
설치 아이콘 (Installation) |
설치 아이콘 설명 |
프로그램 삭제 | 설치된 소프트웨어의 삭제 방법 설명 |
관련 추가 정보 | - 소프트웨어 이외의 관련 설치 프로그램 정보 - 소프트웨어 제작사 등의 추가 정보 기술 |
소프트웨어 사용자 매뉴얼
소프트웨어 사용자 매뉴얼을 사용자가 소프트웨어를 사용하는 과정에서 필요한 내용을 문서로 기록한 설명서와 안내서
- 사용자가 소프트웨어 사용에 필요한 절차, 환경 등의 제반 사항이 모두 포함되도록 작성
- 개별적으로 동작이 가능한 컴포넌트 단위로 매뉴얼을 작성
- 사용자 매뉴얼을 컴포넌트 명세서와 컴포넌트 구현 설계서를 토대로 작성
- 사용자 매뉴얼에는 목차 및 개요, 서문, 기본 사항 등이 기본적으로 포함되어야 함
- 작성 지침의 정의 -> 사용자 매뉴얼 구성 요소 정의 -> 구성 요소별 내용 작성 -> 사용자 매뉴얼 검토
소프트웨어 패키징의 형상 관리
형상 관리(SCM; Software Configuration Management)는 소프트웨어의 개발 과정에서 소프트웨어의 변경 사항을 관리하기 위해 개발된 일련의 활동
- 소프트웨어 변경의 원인을 알아내고 제어하며, 적절히 변경되고 있는지 확이하여 해당 담당자에게 통보
- 형상 관리는 소프트웨어 개발의 전 단계에 적용되는 활동, 유지보수 단계에서도 수행
- 형상 관리는 소프트웨어 개발의 전체 비용을 줄이고, 개발 과정의 여러 방해 요인이 최소화되도록 보증하는 것을 목적
- 관리 항목에는 소스 코드뿐만 아니라 각종 정의서, 지침서, 분석서 등이 포함
- 형상 관리를 통해 가시성과 추적성을 보장함으로써 소프트웨어의 생산성과 품질을 높일 수 있음
- 대표적인 형상 관리 도구 - Git, CVS, Subversion 등
형상 관리의 중요성
- 지속적인 소프트웨어의 변경 사항을 체계적으로 추적하고 통제
- 제품 소프트웨어에 대한 무절제한 변경을 방지할 수 있음
- 제품 소프트웨어에서 발견된 버그나 수정 사항을 추적할 수 있음
- 소프트웨어는 형태가 없어 가시성이 결핍되므로 진행 정도를 확인하기 위한 기준으로 사용될 수 있음
- 소프트웨어의 배포본을 효율적으로 관리할 수 있음
- 소프트웨어를 여러 명의 개발자가 동시에 개발할 수 있음
형상 관리 기능
형상 식별 | 형상 관리 대상에 이름과 관리 번호를 부여하고, 계층(Tree) 구조로 구분하여 수정 및 추적이 용이하도록 하는 작업 |
버전 제어 | 소프트웨어 업그레이드나 유지 보수 과정에서 생성된 다른 버전의 형상 항목을 관리하고, 이를 위해 특정 절차와 도구(Tool)를 결합시키는 작업 |
형상 통제 (변경 관리) |
식별된 형상 항목에 대한 변경 요구를 검토하여 현재의 기준선(Base Line)이 잘 반영될 수 있도록 조정하는 작업 |
형상 감사 | 기준선의 무결성을 평가하기 위해 확인, 검증, 검열 과정을 통해 공식적으로 승인하는 작업 |
형상 기록 (상태 보고) |
형상의 식별, 통제, 감사 작업의 결과를 기록, 관리하고 보고서를 작성하는 작업 |
소프트웨어의 버전 등록 관련 주요 기능
항목 | 설명 |
저장소 (Repository) |
최신 버전의 파일들과 변경 내역에 대한 정보들이 저장되어 있는 곳 |
가져오기 (import) |
버전 관리가 되고 있지 않은 아무것도 없는 저장소(Repository)에 처음으로 파일을 복사 |
체크아웃 (Check-Out) |
- 프로그램을 수정하기 위해 저장소에서 파일을 받아옴 - 소스 파일과 함께 버전 관리를 위한 파일들도 받아옴 |
체크인 (Check-In) |
체크아웃 한 파일의 수정을 완료한 후 저장소의 파일을 새로운 버전으로 갱신함 |
커밋 (Commit) |
체크인 수행할 때 이전에 갱신된 내용이 있는 경우에는 충돌을 알리고 diff 도구를 이용해 수정한 후 갱신을 완료 |
동기화 (Update) |
저장소에 있는 최신 버전으로 자신의 작업 공간을 동기화함 |
공유 폴더 방식
버전 관리 자료가 로컬 컴퓨터의 공유 폴더에 저장되어 관리되는 방식
특징
- 개발자들은 개발이 완료된 파일을 약속된 공유 폴더에 매일 복사
- 담당자는 공유 폴더의 파일을 자기 PC로 복사한 후 컴파일 하여 이상 유무를 확인
- 종류 - SCCS, RCS, PVCS, QVCS 등
클라이언트/서버 방식
버전 관리 자료가 중앙 시스템(서버)에 저장되어 관리되는 방식
특징
- 서버의 자료를 개발자별로 자신의 PC(클라이언트)로 복사하여 작업한 후 변경된 내용을 서버에 반영
- 모든 버전 관리는 서버에서 수행
- 종류 - CVS, SVN(Subversion), CVSNT, Clear Case, CMVC, Perforce 등
분산 저장소 방식
버전 관리 자료가 하나의 원격 저장소와 분산된 개발자 PC의 로컬 저장소에 함께 저장되어 관리되는 방식
특징
- 개발자별로 원격 저장소의 자료를 자신의 로컬 저장소로 복사하여 작업한 후 변경한 내용을 로컬 저장소에서 우선 반영(버전 관리)한 다음 원격 저장소에 반영
- 로컬 저장소에서 버전 관리가 가능함, 원격 저장소에 문제가 생겨도 로컬 저장소의 자료를 이용하여 작업할 수 있음
- 종류 - Git, GNU arch, DCVS, Bazaar, Mercurial, TeamWare, Bitkeeper, Plastic SCM 등
SVN(Subversion)
CVS를 개선한것, 아파치 소프트웨어 재단에서 2000년에 발표
- 클라이언트/서버 구조, 서버에는 최신 버전의 파일들과 변경 내역이 관리
- 서버의 자료를 클라이언트로 복사해와 작업한 후 변경 내용을 서버에 반영 - Commit
- 모든 개발 작업은 trunk 디렉터리에서 수행, 추가 작업은 branches 디렉터리 안에서 별도의 디렉터리를 만들어 작업한 후 trunk 디렉터리와 병합(merge)함
- 커밋 할 때마다 리비전(Revision)이 1씩 증가
- 클라이언트는 대부분의 운영체제에서 사용, 서버는 주로 유닉스를 사용
- 오픈소스
- CVS의 단점이였던 파일이나 디렉터리의 이름 변경, 이동 등이 가능
Git(깃)
리누스 토발즈(Linus Torvalds)가 2005년 리눅스 커널 개발에 사용할 관리 도구로 개발한 이후 주니오 하마(Junio Hamano)에 의해 유지 보수되고 있음
- 분산 버전 관리 시스템, 지역 로컬 저장소와 원격 저장소 존재
- 원격 저장소 - 여러 사람들이 협업을 위해 버전을 공동으로 관리, 자신의 버전 관리 내역을 반영하거나 다른 개발자의 변경 내용을 가져올 때 사용
- 지역 저장소 - 버전 관리
- 버전 관리가 신속하게 처리되고, 원격 저장소나 네트워크 문제가 있어도 작업 가능
- Branch를 이용하면 기본 버전 관리 틀에 영향을 주지 않으면서 다양한 형태의 기능이 테스팅이 가능
- 파일 변화를 스냅샷(Snapshot)으로 저장, 스냅샷은 이전 스냅샷의 포인터를 가지므로 버전의 흐름을 파악할 수 있음
'자격증 준비 > 정보처리기사필기 - 2과목(소프트웨어 개발)' 카테고리의 다른 글
[정보처리기사 필기] 2과목 - 정렬, 검색 알고리즘 (0) | 2023.01.12 |
---|---|
[정보처리기사 필기] 2과목 - 자료구조 (0) | 2023.01.11 |
[정보처리기사 필기] 2과목 - 성능과 품질 (0) | 2023.01.10 |
[정보처리기사 필기] 2과목 - 테스팅(2) (0) | 2023.01.03 |
[정보처리기사 필기] 2과목 - 테스팅(1) (0) | 2023.01.03 |