Search

애플리케이션 배포

빌드 는 프로그래머가 작성한 소스코드를 실행 할 수 있는 상태로 변환하는 과정
리눅스 환경 에서는 컴파일러를 GCC 를 사용함

실행파일 생성과정

1.
소스코드를 전처리기 통하여 선행처리 과정을 거침
2.
cc1, as 라는 어셈블러 통하여 목적파일인 오브젝트 파일을 생성
3.
목적파일들을 하나로 묶는 과정인 링크과정을 거침
4.
링크가 끝나면 실행파일이 생성됨 (링크시에 정적라이브러리, 공유라이브러리가 필요함)

빌드 과정

전처리기 → 파싱 → 번역 → 어셈블리 → 링킹
크게 나누면 4단계로 나누어짐 : 전처리 → 컴파일 → 어셈블 → 링크
전처리
컴파일 전, 사용자가 작성한 코드가 잘 번역될 수 있도록 단순 치환해주는 작업
ex. #include, #define 이 구문들은 전처리 구문임
컴파일
번역의 과정임 고수준 언어를 어셈블리어로 1차번역하는 과정
우리가 작성한 고수준 언어를 저수준 언어인 어셈블리어로 중간 번역하는 과정
번역은 우리가 사용하는 IDE의 컴파일러가 담당함
ex. Visual C++
어셈블
컴파일 과정에서 번역한 저수준 언어인 어셈블리어를 기계어로 최종 번역하는 단계
어셈블리어를 기계어로 최종 번역해주는 프로그램을 어셈블러라고 함
이를 통해 컴퓨터(CPU)가 해석할 수 있는 언어로 번역된 파일인 오브젝트 파일을 얻게됨
어셈블 과정을 컴파일의 과정으로 포함하는 경우도 있음
링크
어셈블 단계에서 번역된 결과물들을 하나로 묶는 단계
오브젝트파일은 컴퓨터가 해석은 할 수 있지만 실행 할 수 있는 파일은 아님
링크 과정은 이 오브젝트파일들을 필요한 라이브러리와 연결시켜주고 하나로 묶어 실행가능한 파일로 만듬
ex. 우리가 실행 할 수 있는 확장자인 .exe 확장자 파일을 만듬

Byte Code 언어 (Java, C# 등)

컴파일의 결과물이 실행파일이 아닌 class라는 바이트 코드 파일로 생성되며
가상 실행 환경JRE(Java Runtime Environment), CLI(Common Language Infrastructure)
에서 한 줄 씩 실행하는 방식으로 빌드 됨 JRE, CLI환경에서 실행될때 기계어로 변환됨
컴파일 언어에 비해 빌드 과정이 빠름

인터프리터 언어 (Javascript, Ruby, Python, PERL)

컴파일언어와 다르게 한 줄씩 번역되어 실행
인터프리터언어는 컴파일하는 과정에서 메모리가 훨씬 적게 소모되고 빠른 시간에 컴파일 진행 가능
인터프리터언어의 빌드과정

애플리케이션 배포 환경

애플리케이션 배포는 개발자 또는 사용자가 애플리케이션을 실행, 테스트 할 수 있도록
컴파일된 프로그램, 실행에 필요한 리소스를 서버상의 적합한 위치로 이동하는 작업
웹 서버
웹 콘텐츠를 저장하거나 처리하는 컴퓨터 또는 소프트웨어, 일반적으로 웹서버가 되는
컴퓨터에 설치되는 소프트웨어를 말함 웹 서버 소프트웨어는 HTTP 프로토콜을 사용하여
클라이언트와 통신함. 대표적인 웹 서버로는 Apache, nginx, IIS 등이 있음
WAS (Web Application Server)
인터넷 상에서 HTTP를 통해 사용자 컴퓨터나 장치에 애플리케이션을 수행해주는 미들웨어
Server단에서 Application이 동작할 수 있도록 지원함 WAS는 동적 서버 콘텐츠를 수행하며
주로 데이터베이스 서버와 같이 수행이 됨 서버는 대부분 자바 기반임

애플리케이션 배포 단위

애플리케이션 배포 단위는 단순히 컴파일된 실행 파일 또는 Byte Code를 복사하는 방식
이외에 다양한 단위로 묶음, 패키징을 통해서 배포 할 수 있음
Java의 경우 jar, war, ear 등의 방식으로 패키징 하여 배포 가능
jar
Java 라이브러리, 리소스, property 파일들을 포함하며 프로그램에서 참조하는 라이브러리, 구현된 비즈니스 서비스를 배포할때 jar 단위로 패키징하여 배포함
war
웹 컨테이너에 배포되는 형식으로 Servlet, jar파일과 WEB-INF 폴더에 있는 web.xml파일로 구성됨
웹 컨테이너상에 배포되어 독립적인 UI 단 웹 애플리케이션 서비스를 제공 할 수 있음
ear
jar과 war을 묶어서 하나의 완성된 웹 애플리케이션 서비스를 제공 할 수 있음

형상관리 시스템

형상관리 시스템은 서비스 제공 대상 형상항목을 식별하여 기준선을 설정하고, 형상항목 변경 과정에서
점검, 검증 등의 체계적인 통제를 통해 형 상항목 간의 일관성과 추적성을 확보하기 위한 시스템
형상관리의 범위
신규 프로젝트 및 보완 개발, 업무시스템의 운영/유지 보수, 전산 설비 및 시스템 소프트웨어 등과 관련된 작업,
사용자(EUC) 파일 관리 등을 포함함
형상관리 시스템에서 사용하는 용어
형상관리
소프트웨어의 전체 생명 주기, 즉 계획부터 개발 운영, 유지 보수, 폐기까지 발생하는 모든 활동을 지속적으로
관리하는것을 의미함
형상항목
형상관리 대상이 되는 항목을 의미하며, 유일한 식별자가 부여되어 개별적으로 관리되는 소스 파일, 문서,
기타 사항 등이 포함됨
기준선
공식적으로 검토되고 협의되어 향후 기준이 되는 형상항목의 집합체를 의미함
마이그레이션
개발 완료된 시스템이 운영단계로 전환될때 관련 소스 파일을 저장 공간으로 이관 시키는 작업을 의미함
리포지터리
관리 대상을 형상관리 시스템으로 일괄 전송하여 압축, 암호화한 후에 저장, 관리하는 저장공간을 의미함
일반적으로 업무 또는 디렉터리의 단위로 구성됨
워크플로
형상관리 활동을 수행하기 위해 미리 정해진 절차가 형상관리 시스템 안에 구현되어 있는것을 의미함
반출
형상항목을 변경하기 위해 형상 리포지터리로부터 전송받는것을 의미함
반출된 형상항목에 대해서는 잠금 상태가 유지됨
반입
반출된 형상항목을 변경 후 다시 형상 리포지터리로 전송하는것을 의미함
반입 시 버전관리는 자동적으로 이루어짐

애플리케이션 소스 검증하기

소스코드 검증도구
검증도구의 구분
소스코드 검증도구는 구현된 SW를 실행하지 않고 테스트하는 정적 테스트 도구와 구현된 SW를 실행하여
동작을 보면서 테스트하는 동적 테스트 도구로 구분됨
소스코드 검증도구의 용도
정적 테스트 도구 사용 목적
정적 테스트 도구는 테스트 하기전에 코딩 오류, 성능 저하, 보안 취약점 등의 결함을 조기에 발견하게 지원함
개발의 생산성을 향상시키고 운영환경에서의 품질 향상을 제고하며 정량적인 품질 관리시스템을 구축하게 함
소프트웨어 개발 초기에 결함을 발견할 수 있어 소프트웨어 개발 비용을 낮추는데 도움이 됨
동적 테스트 도구 사용 목적
테스트 미수행 코드를 확인하고 분기문 등 특정 유형의 코드 구조가 충분히 테스트 되었는지를 확인하여 추가적인 테스트를 진행함 이로써 에플리케이션 안정성 ↑, 소스 품질 관리 활동을 할 수 있는 정량적인 품질 관리
시스템을 구축할 수 있게 함
동적 테스트는 프로그램을 실행하여 오류를 찾는 테스트로 소프트웨어 개발의 모든 단계에서 테스트 수행가능
블랙박스 테스트, 화이트박스 테스트가 있음
동적 테스트 방법
내용 설명
블랙박스 테스트
소프트웨어의 내부구조나 작동 원리를 모르는 상태에서 동작을 검사하는 방식
화이트박스 테스트
응용프로그램의 내부 구조, 동작을 디테일하게 검사하는 테스트 방식
블랙박스 테스트 기법
동등분할 기법
프로그램의 입력 도메인을 테스트 케이스가 산출될 수 있는 데이터 클래스로 분류하는 방법
경계값분석기법
입력조건의 중간 값보다 경계값에서 에러가 발생 될 확률이 높다는 점을 이용하여 테스트 케이스를 생성
오류예측기법
각 시험 기법들이 놓치기 쉬운 오류들을 감각 및 경험으로 찾아보는 방법
원인결과 그래프기법
입력 데이터 간 관계가 출력에 미치는 영향을 그래프로 표현하여 오류를 발견하도록 함
의사결정테이블테스트
논리적 조건이나 상황에서 입력 조건과 결과를 참, 거짓으로 표현하여 조합을 만들고 테스트케이스를 작성
상태전이테스팅
시스템에 반영되는 이전의 상태가 무엇이지, 상태간 전이, 상태를 변화시키는 이벤트와 입력값을 파악
화이트박스 테스트 기법
문장검증
프로그램의 모든 문장이 적어도 한번씩 수행되는 검증 기준
선택검증
선택하는 부분만 검증
경로검증
수행가능한 모든 경로검사
조건검증
IF문장이나 While문장내에 조건식을 조사하는 기준
코드 인스펙션
코드 인스펙션 Rule 유형
코드인스펙션은 정적 테스트의 가장 일반적인 유형임, 사전에 정의 된 코드 작성 규칙 기반으로 소스코드를 점검
하여 작성 규칙에 위반되는 소스코드를 추출하는 분석도구임
애플리케이션 개발 시 대부분 사용되며, 빌드 도구와 연계하여 빌드 배포 수행 시 자동적으로 점검 할 수 있음
성능 개선
애플리케이션의 성능에 영향을 미칠 수 있는 코드를 점검하는 Rule임
메모리 누수, 미 사용 변수, 메소드 여부 등을 확인하여 메모리를 낭비하는 코드를 식별함
코드 작성 규칙
개발언어에서 사전에 정의된 작성 규칙 또는 프로젝트 내에서 정의된 프로그램 명명규칙의 준수 여부를 점검하는 Rule임 작성 규칙을 미준수한 코드 내역을 추출하여 소스코드의 가독성을 향상시킴
에러 발생 가능성
애플리케이션 동작 중 에러 발생 가능성이 있는 코드를 점검하는 Rule임
코드 작성 Rule 삼각도 구분
필수 Blocker
에러 발생 가능성이 매우 높거나 메모리 누수가 발생되는 코드로, 반드시 수정되어야하는 위반 사항
권고 상 Critical
에러 발생 가능성이 높거나 일반적으로 수정되어야하는 심각한 위반 사항을 말함
권고 중 Major
에러 발생이 있거나 수정을 권고하는 중요 위반 사항을 말함
권고 하
소스코드의 가독성, 유지 보수성 향상을 위해 수정을 권고하는 위반 사항을 말함
정보
정보성으로 제공되는 위반 사항으로 개발자가 참고하여 적용 할 수 있음
정규 표현식
정규 표현식은 특정한 규칙을 가진 문자열의 집합을 표현하는 범용적인 방식을 말함
기본 문법
.
문자
1개의 문자와 일치함 단일행 모드에서는 새줄 문자를 제외
[]
문자 클래스
“[”, “]” 사이의 문자 중 하나를 선택함 [abc]d는 ab, bd, cd를 의미하며, “-” 를 통해 범위를 지정함 [a-z]와 같이
[^]
부정
클래스 안의 문자를 제외한 나머지를 선택함 [^abc]d 는 ab, bd, cd를 포함하지 않고 ef, fd 등을 포함하며 [^a-z]는 알파벳 소문자로 시작하지 않는 모든 문자를 의미함
^
처음
문자열이나 행의 처음을 의미함
$
문자열이나 행의 끝을 의미함
()
하위식
여러 식을 하나로 묶을 수 있음 예시로 abc|dc는 a(b|)c 와 같이
\n
일치하는 n 번째 패턴
일치하는 패턴들 중 n 번째를 선택하며, 여기서 n은 1에서 9중 하나가 옴
*
0회 이상
0개 이상의 문자를 포함함
{m, n}
m회 이상 n회 이하
{1,3}b는 “ab”, “aab”, “aaab”를 포함
테스트 프레임워크의(동적 분석 도구) 구성
테스트 프레임워크는 테스트 케이스를 별도의 테스트 코드로 작성하고 동작 시킬 수 있는 환경을 제공하는 도구임
개발자의 반복적이고 시간이 많이 소요되는 테스트 작업을 자동화하여 테스트에 소요되는 시간과 노력을 절감함
테스트 프레임워크의 구성
테스트 코드
테스트 코드 작성 및 자동화 된 운영환경을 구성함 빌드 도구와 연계하여 빌드 수행 시 테스트코드를 동작시켜 자동화된 테스트 환경을 제공함
테스트 저장소
테스트 수행을 위한 테스트 코드, 테스트 데이터, 관련 테스트 스크립트, 테스트 수행 결과를 저장, 관리 함
unit 테스트 프레임워크
Java, 오픈소스 기반의 테스트 프레임워크로 Java 개발환경의 범용적인 표준으로 사용되며, 다음 같이 테스트 가능한 Assert함수를 제공함
제공 함수
설명
assertArrayEquals(a,b)
배열 a와 b가 일치함을 확인
assertEquals(a,b)
객체 a와 b가 일치함을 확인
assertSame(a,b)
객체 a와 b가 같은 객체임을 확인
assertTrue(a)
a값이 참인지 확인
assertNotNull(a)
객체 a가 null이 아님을 확인

애플리케이션 빌드하기

지속적인 통합 환경
애플리케이션 개발 과정 중 지속적으로 개발된 프로그램을 통합, 빌드, 배포하여 애플리케이션의 개발 내역을 검증, 테스트할 수 있는 환경을 말함
빌드 도구
애플리케이션의 배포 단위, 형식에 따라 소스코드를 컴파일, 패키징하며, 배포하는 스크립트를 제공, 수행하는 도구
테스트 도구
개발된 소스코드를 테스트 할 수 있는 테스트 코드를 작성, 동작 시킬 수 있는 도구로,
통합 빌드 수행 시 연결 가능 (Junit, DBUnit, StrutsTestCase)
소스코드 품질 측정도구
정해진 소스코드 작성 규칙에 따라 소스코드를 점검 및 규칙위반 여부를 체크하는 도구로,
통합 빌드 수행 시 연결가능 (PMD, FindBugs)
테스트 커버리지 측정도구
소스코드 내 테스트 가능한 경로 중 테스트 도구를 통해서 테스트된 커버리지를 측정하는 도구임
(Clover, JCoverage, ElcEmma 등)
빌드 스케줄 관리도구
작성된 빌드 스크립트를 정해진 조건, 시간에 기동하고 진행 상태, 수행 결과를 관리하는 도구
(Anthill, CruiseControl, Husdon 등)
테스트 커버리지
테스트 커버리지의 의미
테스트 커버리지는 전체 프로그램의 범위 대비 테스트 수행 시 해당 테스트 수행을 위해 동작된 프로그램의 범위
비율을 의미한다.
테스트 커버리지 측정 유형
라인 커버리지 (구문 커버리지)
개발 소스의 각 라인이 수행되었는지를 확인하는 측정 지표임
분기 커버리지
개발소스의 각 분기문이 수행되었는지를 확인하는 측정 지표임 if문에 대한 조건이 모두 테스트해야 100%임
조건 커버리지
각 분기문 내에 존재하는 조건식이 모두 테스트 되었는지를 확인하는 측정지표임
(조건식 간의 조합에 대해서는 체크하지 않음)
빌드 스케줄 관리도구
빌드 스케줄 관리도구의 구성
빌드 스케줄 관리도구는 별도의 웹 애플리케이션으로 구성되어 웹 서버상에 배포되고, 관리자 화면을 통해서
빌드 스크립트, 형상관리 도구 등과 연계되며, 이메일을 통해서 관련 개발자, 관리자들에게 빌드 수행 결과를 제공함
빌드 스케줄 관리도구의 기능
빌드 작업 스케줄링
빌드 작업의 작업 주기, 작업 시간을 설정함
빌드 작업 상태 및 이력 관리
등록된 빌드 작업의 진행 상태를 대기 중, 진행 중, 완료, 오류 유형으로 구분하여 관리하고 수행 이력을 관리함
빌드 도구 연계 관리
빌드 작업 수행을 위해 기작성된 빌드 스크립트와 접근 가능한 형상관리 도구를 연계설정함
빌드 수행 결과 리포팅
빌드 수행 결과 오류사항, 코드 인스펙션 점검 결과, 테스트 수행 결과 등을 웹 화면을 통해서 보여주고,
관련자들이 공유할 수 있도록 리포팅을 제공함

애플리키에션 배포하기

운영환경의 특징
운영환경의 특징
기업의 IT인프라 운영환경은 안정적인 IT서비스 운영 관리를 위해서 애플리케이션 배포 및 변경 작업에 대한 관리, 통제를 강화하고 있으며, 여러가지 제약 사항을 가지고 있음
네트워크 관점
운영환경은 일반적으로 인터넷망과 분리되어 직접전인 연결을 허용허지 않으며 별도의 내부망을 구성하고 방화벽을 통해서 인가된 IP를 통해서만 접근을 허용함 기업의 운영환경, 서버에 접근하기 위해서는 사전에 방화벽 허용 신청을 통해서 서버의 IP가 접근 가능하도록 설정되어야함
계정 관리 부문
기업의 운영환경은 접근 계정을 별도 IP관리시스템을 통해서 관리하고 있으며, 정부의 보안 관리 기준에 따라 정기적으로 패스워드를 변경하는 형태로 관리됨
보안 취약점 부문
해킹 위협의 증가로 기업의 운영환경은 다양한 보안 취약점 점검을 주기적으로 수행해 보완함
프로그램 통제 부문 전자 금융 감독 규정
금융권 애플리케이션의 경우 안정적인 애플리케이션 운영 및 변경 작업을 수행하기 위해 프로그램 통제 부문에 대한 기본 규정을 제시하고 있으며, 운영환경에 배포 운영하기 위해서는 해당 기준을 준수하는 애플리케이션 배포 운영 환경과 절차를 구현해야 함
️ 기억해야할 문장
운영 시스템 적용은 처리하는 정보의 기밀성, 무결성, 가용성을 고려하여 충분한 테스트 및 책임자 승인 후에 실시할것