1. 통합구현 - 20. 통합구현
20. 통합구현
1. IDE
2. 빌드 자동도구 종류
단위 모듈
- 소프트웨어 구현에 필요한 다양한 동작 중 한 가지 동작을 수행하는 기능을 모듈로 구현한 것을 의미한다.
- 사용자 또는 다른 모듈로부터 값을 전달받아 시작되는 작은 프로그램이다.
- 독립적인 컴파일이 가능하며, 다른 모듈에 호출되거나 삽입될 수 있다.
- 두 개의 단위 모듈이 합쳐지면 두 개의 기능들을 같은 모듈로 구현할 수 있다.
종류
화면, DB 접근, 인터페이스, 비즈니스 트랜잭션, 데이터 암호화 등
단위 기능 명세서
큰 규모의 시스템을 분해하여 단위 기능별로 계층적으로 구조화하고, 단순하게 추상화한 문서이다.
모듈화의 원리
모듈화를 하는 이유
소프트웨어 개발에 있어 기능을 나누고 추상화하여 소프트웨어의 성능을 향상하고 유지보수를 효과적으로 구현하기 위한 기법을 의미한다.
종류
1. 분할과 지배 (Divide Conquer)
복잡한 문제를 분해, 모듈 단위로 문제를 해결한다.
2. 정보 은폐 (Information Hiding)
어렵거나 변경 가능성이 있는 모듈을 타 모듈로부터 은폐시킨다.
3. 자료 추상화 (Data Abstraction)
함수 내에 자료 구조의 표현 명세를 은폐, 자료와 자료에 적용 가능한 오퍼레이션을 함께 정의한다.
추상화 종류 : 기능 추상화, 자료 추상화, 제어 추상화
4. 모듈의 독립성 (Module Independence)
낮은 결합도, 높은 응집도를 갖도록 한다.
단위 모듈 테스트 (Unit Test)
프로그램의 단위 기능을 구현하는 모듈이 정해진 기능을 정확히 수행하는지 검증하는 것이다.
화이트박스 테스트와 블랙박스 테스트 기법이 있다.
구현 단계의 작업 절차 ☆
코딩계획 → 코딩 → 컴파일(실행 가능한 파일로 만드는 것) → 테스트
1. IDE (Integrated Development Environment) ☆
C++, Java 등의 언어를 이용한 소프트웨어 개발 단계에서 패키지 인크루딩, 소스 코드 편집, 디버깅, 바이너리 배포 등 모든 작업을 통합 지원한다.
- 편집기, 컴파일러, 디버거 등의 다양한 도구를 하나의 인터페이스로 통합하여 제공한다.
- 오류 체크를 시각화하여 확인 및 수정을 쉽도록 지원한다.
- 컴파일에 필요한 외부 추가 기능을 연계하여 개발의 편의성을 높였다.
종류
이클립스, 비주얼 스튜디오, 엑스 코드, 안드로이드 스튜디오, IDEA
IDE 도구의 기능
개발 환경을 지원해 준다, 컴파일, 디버깅, 외부 연계, DB 연동, Deployment (배포)
Deployment 예) 5일장
시장상인이 팔 것을 쫙 깔아놓는다. "내가 팔 것을 여기에 놓을게"
판매가능하게 배포까지 해준다.
빌드 자동화 도구 ☆
소스 코드 컴파일 후 다수의 연관된 모듈을 묶어 실행 파일로 만든다. (소스코드 → 컴파일 →. exe)
소스 코드 (원시 코드)는 Text이다. 윈도우 기준으로 실행 가능한 파일은. exe 파일이다.
애를 실행 가능한 파일로 만들어주는 것이 컴파일이다. 근데 컴파일 단계에서도 다양한 기능들이 필요하다.
그 다양한 기능들을 한 번에 처리해 주는 것이 빌드 자동화 도구이다.
소프트웨어 개발자가 반복 작업해야 하는 코딩을 잘 짜인 프로세스를 통해 자동으로 실행하여, 신뢰성 있는 결과물을 생산해 낼 수 있는 작업 방식 및 방법이다.
- 소스 코드를 컴파일, 테스트, 정적 분석(문법 검사) 등을 실시하여 실행 가능한 애플리케이션으로 자동 생성하는 프로그램이며, 지속해서 증가하는 라이브러리의 자동 추가 및 관리 (Preprocessing ; 전처리 )를 지원한다.
- 최근에는 오픈소스인 Gradle이 등장했으며, 구글이 안드로이드의 기본 빌드 시스템으로 Gradle을 선택하면서 사용자가 급증하였다.
전처리
- 우리가 작업해야 하는 기반 처리를 미리 처리해 주는 것
- 컴파일 전 코드 내 주석을 제거하거나 외부 라이브러리를 탑재하는 등의 컴파일 준비 과정
기능
코드 컴파일, 컴포넌트 패키징, 파일 조작, 개발 테스트 실행, 버전 관리 도구 통합, 문서 생성, 배포 기능, 코드 품질 분석
프로세스
컴파일 → 패키징 → 단위 테스트 → 정적 분석 → 리포팅 → 배포 → 최종 빌드(실제적으로 사용가능하게 구축하다)
종류
Gradle, Jenkins, Makefile, Ant, Maven 등
2. 빌드 자동화 도구 종류
1. Ant
- 아파치 소프트웨어 재단에서 개발한 공식적인 빌드 도구이며, XML 기반 빌드 스크립트를 사용한다.
- 정해진 규칙이 없고, 절차적이다 (명확한 빌드 절차 정의가 필요하다)
- 생명주기를 갖지 않아 각 Target에 대한 의존관계와 작업을 정의해 주어야 한다.
- 유연성이 높으나 프로젝트가 복잡해지는 경우 Build 과정의 이해가 어려워진다.
- XML, Remote Repository를 가져올 수 없고 스크립트의 재사용이 어렵다.
2. Maven
- 프로젝트에 필요한 종속성(Dependency)을 리스트의 형태로 Maven에 알려서 종속성을 관리한다.
- 사용성이 좋지만 맞춤화된 로직 실행이 어렵다
- XML, Repository를 가져올 수 있지만 라이브러리가 서로 종속할 경우 XML이 복잡해진다.
- 'Jar', 'Class Path'를 선언만 하면 직접 다운로드할 필요가 없이 Repository에서 계층적인 데이터를 표현하기에는 좋지만, 플로우나 조건부 상황을 표현하기 어렵다
3. Gradle (그래들)
- JVM(Java virtual machine) 기반의 빌드 도구(가상 머신 : 플랫폼을 가리지 않는다)이며, Ant와 Maven의 단점을 보완한
오픈소스 기반의 Build 자동화 도구로 프로젝트 시작 시 설정에 드는 시간을 절약할 수 있다.
- 한스도커를 중심으로 6인의 개발자가 공동 개발하였다.
- Maven처럼 종속성을 활용하여 Grovy 기반 스크립트를 사용한다.
- Maven처럼 Grovy를 기반으로 제작된 DSL(Domain Specific Language)을 스크립트 언어로 사용하는 오픈 소스 형태의 자동화 도구이다.
- 안드로이드 앱 개발 환경에서 사용된다.
- if, else, for 등의 로직 구현이 가능하고, XML을 사용하지 않아 간결하고 빠른 성능을 제공한다.
- 유연성과 확장성을 제공하며 하나의 Repository 내에 멀티 프로젝트를 구성할 수 있다.
# Grovy
자바를 기반으로 파이썬, 루비, 스몰토크 등의 특징을 더한 동적 객체지향 프로그래밍 언어
# DSL
웹 페이지에 사용되는 HTML과 같이 특정한 도메인에 특화된 언어
4. Jenkins
- Java 기반의 오픈소스 형태의 빌드 자동화 도구로 쉽게 설치 가능하다
- 서버 기반의 도구로서 클라이언트의 요청을 처리하기 위해 서버에서 실행되는 서블릿(작은 프로그램) 실행과 생명주기를 관리하는 서블릿 컨테이너에서 실행된다.
- Web UI를 지원하고, SVN, Git 등의 대부분 형상 관리 도구와 연동 가능하다.
문제 풀이
1. 큰 규모의 시스템을 분해하여 단위 기능별로 계층적으로 구조화하고, 단순하게 추상화한 문서는?
단위 기능 명세서
2. 다음이 설명하는 빌드 자동화 도구는?
- JVM 기반의 빌드 도구이며, Ant와 Maven의 단점을 보완한 오픈소스 기반의 Build 자동화 도구로 프로젝트 시작 시 설정에 드는 시간을 절약할 수 있다.
- 한스도커를 중심으로 6인의 개발자가 공동 개발하였다.
- Maven처럼 종속성을 활용하여 Grovy 기반 스크립트를 사용한다.
Gardle
3. 다음 중 모듈화의 원리가 아닌 것은?
① Divide conquer
② Information Hiding
③ Data Compile
④ Module Independence
3번
Data Abstraction
4. 다음 중 빌드 자동화 도구의 종류가 아닌 것은?
① Ant
② Maven
③ Gradle
④ xUnit
4번
뼈대를 제공해 주는 프레임워크임 - 앞에 c 붙으면 c언어 제공 J는 Java제공
5. IDE 도구의 각 기능에 대한 설명으로 틀린 것은?
① Coding - 프로그래밍 언어를 가지고 컴퓨터 프로그램을 작성할 수 있는 환경을 제공
② Compile - 저급 언어의 프로그램을 고급언어 프로그램으로 변환하는 기능
③ Debugging - 프로그램에서 발견되는 버그를 찾아 수정할 수 있는 기능
④ Deployment - 소프트웨어를 최종 사용자에게 전달하기 위한 기능
2번
원시코드를 실행파일로 변환한다.