⬇️
통합 구현
- 단위 모듈
- 소프트웨어 구현에 필요한 다양한 동작 중 한 가지 동작을 수행하는 기능을 모듈로 구현한 것
- 사용자 또는 다른 모듈로부터 값을 전달받아 시작되는 작은 프로그램
- 독립적인 컴파일이 가능하며, 다른 모듈에 호출되거나 삽입될 수있다.
- 두 개의 단위 모듈이 합쳐지면 두 개의 기능들을 같은 모듈로 구현할 수 있다.
- 종류 : 화면, DB 접근, 인터페이스, 비즈니스 트랜잭션, 데이터 암호화등
- 단위 기능 명세서
- 큰 규모의 시스템을 분해하여 단위 기능별로 계층적으로 구조화하고, 단순하게 추상화한 문서이다.
- 모듈화의 원리
- 소프트웨어 개발에 있어 기능을 나누고 추상화하여 소프트웨어의 성능을 향상시키고 유지보수를 효과적으로 구현하기 위한 기법을 의미한다.
- 종류
- 분할과 지배 (Divide Conquer) : 복잡한 문제를 분해, 모듈 단위로 해결
- 정보 은폐 (Information Hiding) : 어렵거나 변경 가능성이 있는 모듈을 타 모듈로부터 은폐시킨다.
- 자료 추상화 (Data Abstraction) : 함수 내에 자료 구조의 표현 명세를 은폐, 자료와 자료에 적용 가능한 오퍼레이션을 함께 정의한다.
- 모듈의 독립성 (Module Independence) : 낮은 결합도, 높은 응집도를 갖도록 한다.
- 단위 모듈 테스트 (Unit Test)
- 프로그램의 단위 기능을 구현하는 모듈이 정해진 기능을 정확히 수행하는지 검증하는 것이다.
- 구현 단계의 작업 절차
통합 개발 환경
- IDE (Integrated Development Environment)
- C++, Java 등의 언어를 이용한 소프트웨어 개발 단계에서 패키지 인크루딩, 소스 코드 편집, 컴파일, 디버깅, 바이너리 배포 등 모든 작업을 통합 지원한다.
- 편집기, 컴파일러, 디버거 등의 다양한 도구를 하나의 인터페이스로 통합하여 제공한다.
- 오류 체크를 시각화하여 확인 및 수정을 쉽도록 지원한다.
- 컴파일에 필요한 외부 추가 기능을 연계하여 개발의 편의성을 높였다.
- 종류 : 이클립스, 비주얼 스튜디오, 엑스 코드, 안드로이드 스튜디오, IDEA
- IDE 도구의 기능
- Coding : 프로그램 언어를 가지고 프로그램을 작성할 수 있는 환경 제공
- Compile : 소스 코드를 기계어나 중간 코드로 변경하는 역할
- Debugging : 프로그램에서 발견되는 버그를 찾아 수정할 수 있는 기능
- Deployment : 소프트웨어를 최종 사용자에게 전달하기 위한 기능
- 외부 연계, DB 연동
- 빌드 자동화 도구
- 소스 코드 컴파일 후 다수의 연관되 모듈을 묶어 실행 파일로 만든다.
- 소프트웨어 개발자가 반복 작업해야 하는 코딩을 잘 짜여진 프로세스를 통해 자동으로 실행
- 신뢰성 있는 결과물을 생산해 낼 수 있는 작업 방식 및 방법
- 소스 코드를 컴파일, 테스트, 정적 분석 등을 실시하여 실행 가능한 애플리케이션으로 자동 생성하는 프로그램이며, 지속해서 증가하는 라이브러리의 자동 추가 및 관리(전처리, Preprocessing)를 지원한다.
- 기능 : 코드 컴파일, 컴포넌트 패키징, 파일 조작, 개발 테스트 실행, 버전 관리 도구 통합, 문서 생성, 배포 기능, 코드 품질 분석
- 프로세스 : 컴파일 → 패키징 → 단위 테스트 → 정적 분석 → 리포팅 → 배포 → 최종 빌드
- 종류 : Gradle, Jenkins, Makefile, Ant, Maven
- Ant
- 아파치 재단에서 개발한 자바의 공식적인 빌드 도구
- 아파치 소프트웨어 재단에서 개발, XML 기반 빌드 스크립트를 사용한다.
- 정해진 규칙이 없고, 절차적이다. (명확한 빌드 절차 정의)
- 생명주기를 갖지 않아 각 Target에 대한 의존관계와 작업을 정의해 주어야 한다.
- 유연성이 높으나 프로젝트가 복잡해지는 경우 Build 과정의 이해가 어려워진다.
- XML, Remote Repository를 가져올 수 없고 스크립트의 재사용이 어렵다.
- Maven
- 프로젝트에 필요한 모든 종속성(Dependency)을 리스트의 형태로 Maven에 알려서 종속성을 관리한다.
- 사용성이 좋지만 맞춤화된 로직 실행이 어렵다.
- XML, Repository를 가져올 수 있지만 라이브러릴가 서로 종속할 경우 XML이 복잡해진다.
- ‘Jar’, ‘Class Path’ 를 선언만 하면 직접 다운로드할 필요가 없이 Repository에서 계층적인 데이터를 표현하기에는 좋지만, 플로우나 조건부 상황을 표현하기 어렵다.
- Gradle
- JVM 기반의 빌드 도구이며, Ant와 Maven의 단점을 보완한 오픈소스 기반의 Build 자동화 도구로 프로젝트 시작시 설저에 드는 시간을 절약할 수 있다.
- 한스도커를 중심으로 6인의 개발자가 공동 개발하였다.
- Maven처럼 종속성을 활용하여 Groovy 기반 스크립트를 사용한다.
- Maven처럼 Groovy를 기반으로 제작된 DSL을 스크립트 언어로 사용하는 오픈소스 형태의 자동화 도구이다.
- 안드로이드 앱 개발 환경에서 사용된다.
- if, eles, for 등의 로직 구현이 가능하고, xml을 사용하지 않아 간결하고 빠른 성능을 제공한다.
- 우연성과 확장성을 제공하며 하나의 Repository 내에 멀티 프로젝트를 구성할 수 있다.
- Jenkins
- Java 기반의 오픈소스 형태의 빌드 자동화 도구로 쉽게 설치 가능하다.
- 서버 기반의 도구로서 클라이언트의 요청을 처리하기 위해 서버에서 실행되는 서블릿 실행과 생명주기를 관리하는 컨테이너 실행된다.
- Web UI를 지원하고, SVN, Git 등의 대부분 형상 관리 도구와 연동가능하다.
제품 소프트웨어 패키징
- 애플리케이션 패키징의 개념
- 개발이 완료된 소프트웨어를 고객에 인도하기 위해 패키징하고, 설치 매뉴얼, 사용 메뉴얼 등을 작성하는 일련의 배포용 설치 파일을 만드는 작업을 의미한다.
- 패키징은 사용자 중심으로 진행한다.
- 패키징시 고려사항
- 사용자 시스템의 환경, 직관적 UI, 관리 서비스 형태 제공, 패키징 변경 및 개선 관리를 통한 안정적 배포
- 패키징 프로세스
- 기능식별
- 입,출력 데이터를 식별하고, 전체적인 기능 정의 및 데이터 흐름을 식별한다.
- 기능 단위 및 출력에 대하여 상세 정의한다.
- 모듈화
- 모듈화를 위하여 모듈 간 결합도와 응집도를 분석한다.
- 분류할 수 있는 기능 단위 및 서비스 단위를 모듈별로 분류한다.
- 공유 가능한 기능과 재사용 기능을 분류한다.
- 기능분리가 가능하여 인터페이스가 간단해 짐
- 빌드진행
- 신규 개발 소스 및 컴파일 결과물을 준비한다.
- 정상적으로 빌드되는 기능 단위 및 서비스를 분류 한다.
- 빌드 도구를 선별하여 선택하고, 해당 빌드 도구를 이용하여 빌드를 수행한다.
- 컴파일 외의 에디터 등의 관련 도구 기능을 확인한다.
- 사용자 환경 분석
- 고객의 편의를 위하여 최소 사용자 환경 사전을 정의한다.
- 다양한 사용자 환경 테스트를 수행한다.
- 패키지 적용 시험
- 실 사용자 환경에서의 패키징 적용을 테스트한다.
- 사용자 관점에서 UI 및 시스템상의 편의상을 점검한다.
- 패키징 변경 개선
- 사용자 관점에서 패키징 적용 시 개선점을 도출하여 서비스 가능한 수준의 개선 후 개선 버전을 다시 패키징 한다.
- 제품 소프트웨어의 패키징 도구
- 패키징 도구
- 소프트웨어 배포를 목적으로 패키징시에 지적 재산권을 보호하고, 관리하는 기능을 제공하는 도구
- 소프트웨어의 안전한 유통 그리고 배포를 도와주는 솔루션이다.
- 패키징 도구는 불법 복제로부터 디지털 콘텐츠의 지적 재산권을 보호해주는 사용 권한 제어 기술, 패키징 기술, 라이선스 과닐, 권한 통제 기술등을 포함
- 패키징 도구 활용시 고려사항
- 암호화 (Encryption)
- 콘텐츠 및 라이선스를 암호화하고, 전자 서명을 할 수 있는 기술
- 키 관리 (Key Management)
- 콘텐츠를 암호화한 키에 대한 저장 및 배포 기술이다.
- 관리 방식 : 분산형, 중앙 집중형
- 암호화 파일 생성 (Packager)
- 콘텐츠를 암호화된 콘텐츠로 생성하기 위한 기술이다.
- 식별 기술 (Identification)
- 저작권 표현 (Right Expression)
- 정책 관리 (Policy Management)
- 라이선스 발급 및 사용에 대한 정책 표현 및 관리 기술이다.
- 크랙 방지 (Tamper Resistance)
- 인증 (Authentication)
- 라이선스 발급 및 사용의 기준이 되는 사용자 인증 기술이다.
- 모니터링 도구와 협업 도구
- 애플리케이션 모니터링 도구 (APM : Application Perfaormance Management)
- 애플리케이션 모니터링 도구의 기능
- 협업 도구
제품 소프트웨어 저작권
- DRM : Digital Rights Managemnt