본문 바로가기

자격증 준비/정보처리기사필기 - 2과목(소프트웨어 개발)

[정보처리기사 필기] 2과목 - 빌드

728x90
반응형

통합 개발 환경(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)으로 저장, 스냅샷은 이전 스냅샷의 포인터를 가지므로 버전의 흐름을 파악할 수 있음

 

728x90
반응형