애플리케이션/이론

[애플리케이션] 배포환경 구성

노트북 산 김에 공부 2023. 3. 9. 13:05

컴파일 언어

    기계어로 바로 변환되어 실행되기 때문에 가장 속도가 빠르고 보안에 유리하다. 하지만 소스 변경 시마다 컴파일 과정을 통해서 빌드 작업을 수행하기 때문에 빌드 과정이 오래 걸린다.  ex) C, C++

Byte  Code 언어

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

인터프리터 언어 

    한 줄 씩 번역되어 실행된다. 컴파일 과정에서 메모리가 훨씬 적게 소모되고 빠른 시간에 컴파일을 진행한다

    ex) Javascript, Python, Ruby


애플리케이션 배포 환경

 애플리케이션 배포는 개발자 또는 사용자가 애플리케이션을 실행 테스트할 수 있도록 컴파일된 프로그램, 실행에 필요한 리소스(이미지, 환경 설정 파일 등)를 서버상의 적합한 위치로 이동하는 작업

 

    1.  웹 서버(Web Server) : 사용자의 http 요청을 받아 웹 컨테이터에 요청을 전달하고 결괏값을 받아와 사용자에게 전송

                                                    애플리케이션 배포 시 이미지, 단순 HTML과 같은 정적인 리소스를 배포  

 

    2.  WAS(Web Applicathon Server) : 사용자의 요청을 받아 동적인 처리를 수행하는 프로그램 실행 부분을 배포.

 

애플리케이션 배포 단위 

컴파일된 실행 파일 또는 Byte Code를 복사하는 방식 이외에 다양한 단위로 묶음,  패키징하여 배포할 수 있다 Java의 경우...

 

  • jar (Java Archive) : Java 라이브러리, 리소스, property 파일들을 포함한다. 프로그램에서 참조하는 라이브러리, 구현된 비즈니스 서비스를 배포할 때 jar 단위로 패키징하여 배포한다.
  • war (Web Archive) : 웹 컨테이너에 배포되는 배포 형식으로 Servlet, jar 파일과 WEB-INF 폴더에 있는 web.xml 파일로 구성된다. 웹 컨테이너상에 배포되어 독립적인 UI단 웹 애플리케이션 서비스를 제공할 수 있다.
  • ear (Enterprise Archive) : jar와 war을 묶어서 하나의 완성된 웹 애플리케이션 서비스를 제공할 수 있다.

형상관리(Configuration Management) 시스템

서비스 제공 대상 형상항목을 식별하여 기준선을 설정하고, 형상 항목 변경 과정에서 점검, 검증 등의 체계적인 통제를 통해 형 상항목 간의 일관성과 추적성을 확보하기 위한 시스템. 소프트웨어의 개발 및 운영/유지 보수에 필요한 문서 관리, 변경 관리, 버전 관리, 배포 관리 및 작업 산출물에 대한 형상관리를 포함한다

 

  •     형상관리 : 계획부터 개발, 운영, 유지 보수, 폐기까지 발생하는 모든 활동을 지속적으로 관리
  •     형상항목 : 형상관리 대상이 되는 항목
  •     기준선 : 검토되고 협의되어 향후 기준이 되는 형상항목의 집합체
  •     리포지터리(Repository) : 관리 대상을 형상관리 스스템으로 일괄 전송하여 저장, 관리하는 저장공간
  •     마이그레이션(Migration) : 개발 완료된 시스템이 운영 단계로 전환될 때 관련 소스 파일 저장공간(리포지터리) 이관
  •     워크플로(Workflow) : 형상관리 활동을 수행하기 위해 미리 정해진 절차
  •     반출 : 형상항목을 변경하기 위해 형상 리포지터리로부터 전송받음 
  •     반입 : 반출된 형상항목을 변경 후 다시 형상 리포지터리로 전송

버전 관리

소프트웨어에서 형상 관리는 개발 중 발생하는 모든 산출물들이 변경됨으로써 점차 변해가는 소프트웨어 형상을 체계적으로 관리하고 유지하는 기법이다.

 

버전 관리 항목

가져오기 (import) 버전 관리 되지 안흔 로컬 디렉토리 파일을 처음으로 저장소에 복사
체크아웃 (Check-out) 저장소 파일 받기
체크인 (Check-in) 저장소에 새로운 버전으로 갱신
커밋 (Commit) 체크인 시 이전 갱신 사항이 있는 경우 충돌 알림, diff 도구 이용 수정, commit 과정 수행
저장소 (Repository) 파일 현재 버전과 변경 이력 정보를 저장하는 저장소

 

버전 관리 도구 유형

공유 폴더 방식 1) 매일 개발 완료 파일은 약속된 위치의 공유 폴더에 복사
2) 담당자 한 명이 매일 공유 파일을 자기 PC로 복사, 컴파일하여 에러 확인과 정상 동작 여부 확인
3) 정상 동작일 경우 다음날 각 개발자들이 동작 여부 확인
클라이언트 / 서버 방식 1) 중앙에 버전 관리 시스템이 항시 동작
2) 개발자들의 현재 작업 내용과 이전 작업내용 축적 용이
3) 서로 다른 개발자가 같은 파일을 작업했을 때 경고 출력
4) Trac나 CVS view와 같은 GUI 툴을 이용 모니터링 가능
분산 저장소 방식 1) 로컬 저장소와 원격저장소 구조
2) 주앙의 저장소에서 로컬에 복사한 순간 개발자 자신만의 로컬저장소에 생성
3) 개발 완료한 파일 수정 이후 로컬 저장소에 커밋한 이후 다시 원격 저장소에 반영하는 방식

 

버전 관리 도구 종류

저장소 구분 로컬 버전 관리 시스템 rcs
중앙 집중형 버전 관리 시스템 CVS, SVN, Clear Case
분산현 버전 관리 시스템 Git, Mercurial
소스 공개 유형 Open Source 툴 SVS, SVN
상용 버전 관리 툴 PVCS, Clear Case

 


CVS(Concurrent Versions System)

CVS은 가장 오래된 형상 관리 도구 중의 하나로서, 중앙 집중형 서버 저장소에 클라이언트가 접속해서 버전 관리를 한다.

CVS
주요기능 1) 서버 저장소와 클라이언트의 변경 사항 전송
2) diff를 통한 파일 내용 비교
3) 파일 단위의 변경 사항 관리
장점 직관적이고 비교적 단순한 명령 세트
단점 1) 유니코드 파일명 지원 부족
2) 텍스트 기반 소스 코드만 지원
3) 등록된 파일이나 디겍토리의 이름 변경이나 이동이 불편
4) 커밋 실패시 롤백 미지원

 

SVN(Subversion)

SVN은 SVS와 같은 중앙 집중형 클라이언트-서버 방식이지만 CVS의 단점을 보완하여 현재 가장 널리 사용되고 있는 형상 관리 도구이다. SVN은 CVS를 대체하기 위해 만든 도구로서 그 개념과 사용법이 CVS와 거의 유사하다.

SVN
주요기능 1) 서버 저장소와 클라이언트의 변경 사항 전송
2) diff를 통한 파일 내용 비교
3) 바이너리 문서 형상 관리
4) 작업 단위의 변경 사항 관리
5) atomic commit
6) svn:ignore를 통한 형상 관리 배제 자원 지정 기능
장점 1) SVS 사용자가 쉽게 적응 가능
2) CVS 비해 빠른 속도
3) 디렉토리나 파일을 자유롭게 이동해도 이력 유지
4) gzip를 통한 압축으로 저장 공간 절약
5) atomic commit으로 커밋 샐패 시 롤백 지원
6) 다양한 써드 파티 GUI 도구 존재
단점 1) trunk, branch, tag가 모두 물리적인 저장 위치를 점유하므로 비효율적
2) Git에 비해 branch, tag 작업이 무거움

 

Git

Git은 앞서 나왔던 CVS나 SVN과는 개념이 많이 다른 형상 관리 도구로서, 

공개 SW 커뮤니티를 중심으로 사용 저변이 많이 확대되고 있다. Git은 중앙 집중형 방식이 아닌 분산형 방식으로 각 로컬 PC에 스스로 완전한 저장소가 구성되며, 필요에 따라 중앙 집중형 방식으로도 운영할 수 있다.

Git
주요기능 1) branch, chekout, commit, tag등 로컬 환경에서의 형상 관리 가능
2) push, fetch, pull 등 원격 환경에서의 변경 사항 전송 가능
3) 변경은 했지만 커밋에는 포함하지 않을 수 있는 staging 기능
4) SVN으로 관리되던 저장소를 Git으로 전해주는 마이그레이션 기능
5) diff를 통한 파일 내용 비교
6) 바이너리 문서 형상 관리
7) 작업 단위의 변경 사항 관리
8) .gitignore를 통한 형상 관리 배제 자원 지정 기능
장점 1) branch 생성, 이동, 병합이 매우 가벼우므로 branch를 자주 사용하여 상황에 맞게 자주 분기하고 합칠 수 있어 코드 꼬임에 따른 위험 감소
2) 각 로컬에 완전한 로컬 저장소가 있으므로 원격 저장소에 장애가 나더라도 쉽게 복구 가능
3) 여러번의 커밋을 로컬 저장소에 실행하고, 모아진 커밋을 원격 저장소에 반영할 수 있으므로 네트워킹 빈도는 줄고 속도는 항상 Pack 방식의 압축으로 SVN에 비해 저장 공간 절약
4) 다양한 써드파티 GUI 도구 존재
단점 1) CVS, SVN과 기본 개념이 많이 다르므로 적응에 시간 필요
2) sheckout, commit 등 텍스트는 가티만 의미나 동직이 SVN이나 CVS와 다른 명령어가 있어 혼란 야기
3) 빈 디렉터리가 저장되지 않음

모듈

모듈(화)란 소프트웨어 설계에서 능단위로 분해하고 추상화되어 재사용 및 공유 가능한 수준으로 만들어진 단위를 모듈로 규정, 소프트웨어의 성능을 향상시키거나 시스템의 디버깅, 시험, 통합 및 수정을용이하도록 하는 소프트웨어 설계 기법

 

모듈화의 장점

  • 프로그램의 효율적인 관리 및 성능 향상
  • 전체적인 소프트웨어 이해의 용이성 증대 및 복잡성 감소
  • 소프트웨어 시험, 통합, 수정 시 용이성 제공
  • 기능의 분리가 가능하고 인터페이스가 단순
  • 오류의 파급 효과를 최소화
  • 모듈의 재사용 가능으로 개발과 유지보수가 용이

모듈화의 목표

  • 모듈 간 결합도의 최소화
  • 모듈 내 요소들 간의 응집도 최대화

'애플리케이션 > 이론' 카테고리의 다른 글

[애플리케이션] 형상관리  (0) 2023.03.23
[애플리케이션] 배포  (0) 2023.03.15
[애플리케이션] 빌드  (0) 2023.03.14
[애플리케이션] 소스 검증  (0) 2023.03.09