Welcome! Everything is fine.

[정처기/실기] 8단원(서버 프로그램 구현) 요약 본문

자격증 및 기타 활동/정보처리기사

[정처기/실기] 8단원(서버 프로그램 구현) 요약

개발곰발 2023. 10. 25.
728x90

*  수제비 정보처리기사 실기 책을 보고 직접 정리한 내용입니다.

1. 개발환경 구축

[1] 개발 도구의 분류

빌드 도구

  • 작성한 코드의 빌드 및 배포를 수행하는 도구
  • 각각의 구성요소와 모듈에 대한 의존성 관리를 지원

구현 도구

  • 개발자의 코드 작성과 디버깅, 수정 등과 같은 작업을 지원하는 도구

테스트 도구

  • 코드의 기능 검증과 전체 품질을 높이기 위해 사용하는 도구
  • 코드의 테스트, 테스트에 대한 계획, 수행 및 분석 등의 작업 가능

형상 관리 도구

  • 산출물에 대한 버전 관리를 위한 도구
  • 프로젝트 진행 시 필수로 포함

[2-1] 하드웨어 개발환경

  • 웹 서버
  • 웹 애플리케이션 서버
  • 데이터베이스 서버
  • 파일 서버
  • 클라이언트 프로그램
  • 웹 브라우저
  • 모바일 앱
  • 모바일 웹

[2-2] 소프트웨어 개발환경

운영체제

  • 서버의 하드웨어를 사용자 관점에서 편리하고 유용하게 사용하기 위한 소프트웨어
  • 프로젝트 성격에 따른 운영체제 사용

미들웨어

  • 컴퓨터와 컴퓨터 간의 연결을 쉽고 안전하게 할 수 있도록 해주고 이에 대한 관리를 도와주는 소프트웨어
  • 자바 기반 환경에서 JVM을 설치하여 컨테이너로의 기능을 주로 이용

DBMS

  • 사용자와 데이터베이스 사이에서 사용자의 요구에 따라 정보를 생성해주고, 데이터베이스를 관리해주는 소프트웨어
  • 데이터의 저장 및 활용을 위해 DBMS 설치

[2-3] 형상 관리

형상 관리 개념 및 목적

  • 형상 관리 : 소프트웨어 개발을 위한 전체 과정에서 발생하는 모든 항목의 변경사항을 관리하기 위한 활동
  • 목적
    • 프로젝트 생명주기 동안 제품의 무결성과 변경에 대한 추적성을 확보
    • 프로젝트 변경이 발생 되었을 때 처리하는 메커니즘 제공
    • 형상 관리대상 파악, 베이스라인 지정, 형상 관리, 접근 제어 등

형상 관리 절차(식통감기)

  • 형상 식별
    • 형상 관리 대상을 정의 및 식별하는 활동
    • 추적성 부여를 위해 ID와 관리 번호 부여
    • 변경 관련 이슈 발생 시 ID와 관리번호를 이용하여 추적
  • 형상 통제
    • 형상 항목의 버전관리를 위한 형상통제위원회(CCB) 운영
    • 변경 요구 관리, 변경 제어, 형상 관리 등 통제 지원
    • 베이스라인에 대한 요구사항과 형상 통제 수행 가능
  • 형상 감사
    • 소프트웨어 베이스라인의 무결성 평가
    • 베이스라인 변경 시 요구사항과 일치 여부 검토
  • 형상 기록
    • 소프트웨어 형상 및 변경관리에 대한 각종 수행결과를 기록
    • 형상결과 보고서 작성

소프트웨어 형상 관리 도구 유형(공클분)

  • 공유 폴더 방식(RCS, SCCS)
  • 클라이언트/서버 방식(CVS, SVN)
  • 분산 저장소 방식(Git )

소프트웨어 형상 관리 도구별 특징

CVS 서버와 클라이언트로 구성, 다수의 인원이 동시에 범용적인 운영체제로 접근 가능
SVN 하나의 서버에서 소스를 쉽게 관리, 저장소에 소스를 저장해 소스 중복이나 여러 문제를 해결
RCS CVS와 달리 소스 파일의 수정을 한 사람으로 제한, 파일 잠금 방식
Bikeeper SVN과 비슷한 중앙 통제 방식, 대규모 프로젝트에서 빠른 속도를 내도록 개발
Git Git의 속도에 중점을 둔 분산형 버전 관리 시스템으로 대형 프로젝트에서 효과적, 커밋(Commit)은 로컬 저장소에서 이루어지고 푸시(Push)로 원격 저장소에 반영, 매우 빠른 응답
Clear Case 복수 서버, 복수 클라이언트 구조이며 서버가 부족할 때 필요한 서버를 하나씩 추가

2. 공통 모듈 구현

[1-1] 재사용(Reuse)

  • 목표 시스템의 개발 시간 및 비용 절감을 위해 검증된 기능을 파악하고 재구성 → 시스템에 응용하기 위한 최적화 작업, 이미 개발된 소프트웨어의 전체 또는 일부분을 다시 사용하는 기법
  • 재사용의 종류
    재공학(Re-Engineering) 기존 소프트웨어를 버리지 않고 기능 개선, 기능을 새로운 소프트웨어로 재활용하는 소프트웨어 재사용 기법 → 위험 부담 감소, 비용 절감, 개발 기간 단축, 시스템 명세의 오류 억제
    재개발(Re-Development) 기존 시스템 내용을 참조하여 완전히 새로운 시스템 개발, 기존 시스템에 새로운 기능 추가, 기존 시스템의 기능을 변경하는 기법
  • 재사용 규모에 따른 분류
    함수와 객체 재사용 클래스나 함수 단위로 구현한 소스 코드 재사용
    컴포넌트 재사용 컴포넌트 자체에 대한 수정 없이 인터페이스를 통해 통신하는 방식으로 재사용
    애리케이션 재사용 공통기능을 제공하는 애플리케이션과 기능을 공유하여 재사용

[1-2] 공통 모듈 구현

  • 모듈 : 그 자체로 하나의 완전한 기능을 수행할 수 있는 독립된 실체
  • 특징
    • 각각의 모듈은 상대적으로 독립성을 가짐 → 독립성이 높을수록 모듈 수정 시 다른 모듈에 영향X, 오류 발생 시에도 쉽게 해결
    • 모듈의 독립성은 결합도와 응집도에 의해 측정됨
    • 독립성을 높이려면? → 결합도↓ 응집도 ↑ 모듈 크기↓
    • 단독으로 컴파일, 재사용 가능
  • 모듈화 기법
    루틴 소프트웨어에서 특정 동작을 수행하는 일련의 코드로 기능을 가진 명령들의 모임
    메인 루틴 프로그램의 주요한 부분이며 전체의 개략적인 동작 절차를 표시하도록 만들어진 루틴, 서브루틴 호출
    서브 루틴 메인 루틴에 의해 필요할 때마다 호출되는 루틴

[1-3] 소프트웨어 모듈 응집도

응집도(Cohesion) 개념

  • 모듈의 독립성을 나타내는 정도(모듈 내부 구성요소 간 연관 정도)
  • 하나의 모듈은 하나의 기능을 수행할수록 응집도↑

응집도의 유형(우논시절 통순기)

  • 우연적, 논리적, 시간적, 절차적, 통신적, 순차적, 기능적 응집도 순으로 응집도가 높아짐
    우연적 응집도(Coincidental Cohesion) 모듈 내부의 각 구성요소가 연관이 없을 경우의 응집도
    논리적 응집도(Logical Cohesion) 유사한 성격을 갖거나 특정형태로 분류되는 처리 요소들이 한 모듈에서 처리되는 경우의 응집도
    시간적 응집도(Temporal Cohesion) 연관된 기능이라기보다는 특정 시간에 처리되어야 하는 활동들을 한 모듈에서처리할 경우의 응집도
    절차적 응집도(Procedure Cohesion) 모듈이 다수의 관련 기능을 가질 때 모듈 안의 구성요소들이 그 기능을 순차적으로 수행할 경우의 응집도
    통신적 응집도(Communication Cohesion) 동일한 입력과 출력을 사용하여 다른 기능을 수행하는 활동들이 모여있을 경우의 응집도
    순차적 응집도(Sequantial Cohesion) 모듈 내에서 한 활동으로부터 나온 출력값을 다른 활동이 사용할 경우의 응집도
    기능적 응집도(Funtional Cohesion) 모듈 내부의 모든 기능이 단일한 목적을 위해 수행되는 경우의응집도(가장 높은 응집도/좋은 품질)

[1-4] 소프트웨어 모듈 결합도

결합도(Coupling)의 개념

  • 모듈 내부가 아닌 외부 모듈과의 연관도 또는 모듈 간의 상호의존성
  • 소프트웨어 구조에서 모듈 간의 관련성을 측정하는 척도

결합도의 유형(내공 외제 스자)

  • 내용, 공통, 외부, 제어, 스탬프, 자료 결합도 순으로 결합도가 낮아짐
    내용 결합도(Content Coupling) 다른 모듈 내부에 있는 변수나 기능을 다른 모듈에서 사용하는 경우의 결합도
    공통 결합도(Common Coupling) 파라미터가 아닌 모듈 밖에 선언되어 있는 전역 변수를 참조하고 전역 변수를 갱신하는 식으로 상호작용하는 경우의 결합도
    외부 결합도(External Coupling) 두 개의 모듈이 외부에서 도입된 데이터 포맷, 통신 프로토콜, 또는 디바이스 인터페이스를 공유할 경우의 결합도
    제어 결합도(Control Coupling) 어떤 모듈이 다른 모듈의 내부 논리 조직을 제어하기 위한 목적으로 제어 신호를 이용해 통신하는 경우의 결합도
    스탬프 결합도(Stamp Coupling) 모듈 간의 인터페이스로 배열이나 객체, 구조 등이 전달되는 경우의 결합도
    자료 결합도(Data Coupling) 모듈 간의 인터페이스로 전달되는 파라미터를 통해서만 모듈 간의 상호작용이 일어나는 경우의 결합도(가장 낮은 결합도/좋은 품질)

[1-5] 팬인(Fan-In) 및 팬아웃(Fan-Out)

  • 소프트웨어의 구성요소인 모듈을 계층적으로 분석하기 위해 팬인, 팬아웃을 활용 → 시스템의 복잡도 측정
  • 시스템의 복잡도를 최적화하기 위해서는 팬인은 높게↑, 팬아웃은 낮게↓
  • 팬인(Fan-In) : 모듈 자신을 기준으로 모듈에 들어오면 팬인. 팬인이 높으면 재사용성 Good 그러나 단일 장애점 발생 가능, 관리 비용 및 테스트 비용 증가
  • 팬아웃(Fan-Out) : 모듈 자신을 기준으로 모듈에서 나가면 팬아웃. 팬아웃이 높을 경우 불필요한 모듈 호출 여부 검토, 단순화 여부 검토 필요

[2-1] 공통 모듈 테스트 개념

  • 공통 모듈 테스트를 위해 IDE 도구를 활용하여 개별 공통 모듈에 대한 디버깅 수행
  • 공통 모듈 테스트는 화이트박스 기법 활용
  • 대표적인 단위 테스트 도구인 xUnit을 활용하여 테스트 코드 구현

[2-2]공통 모듈 테스트 종류

  • jUnit : 자바 프로그래밍 언어용 단위 테스트 도구
  • CppUnit : 자바의 jUnit을 C++로 구현한 단위 테스트 도구
  • HttpUnit : 웹 브라우저 없이 웹사이트 테스트를 수행하는 단위 테스트 도구

3. 배치 프로그램 구현

  • 배치 프로그램 : 사용자와의 상호작용 없이 일련의 작업들을 작업 단위로 묶어 정기적으로 반복 수행하거나 정해진 규칙에 따라 일괄 처리하는 방법
  • 배치 프로그램 유형
    • 이벤트 배치 : 사전에 정의해둔 조건 충족 시 자동으로 실행
    • 온디맨드 배치 : 사용자의 명시적 요구가 있을 때마다 실행
    • 정기 배치 : 정해진 시점에 정기적으로 실행
  • 배치 스케줄러 : 일괄 처리(batch Processing)를 위해 주기적으로 발생하거나 반복적으로 발생하는 작업을 지원하는 도구
  • 배치 스케줄러 종류
    • 스프링 배치
    • 쿼츠 스케줄러
  • Cron 표현식(초분시일 월요연) → 리눅스/유닉스와 쿼츠로 구분