본문 바로가기
정보처리/프로그래밍언어활용

서버 프로그램 구현 공통 모듈 구현

by 피갓자 2025. 5. 10.

서버 프로그램 구현 공통 모듈 구현
서버 프로그램 구현 공통 모듈 구현

공통 모듈 구현

재사용

재사용(Reuse)의 개념

  • 목표 시스템의 개발 시간 및 비용 절감을 위하여 검증된 기능을 파악하고 재구성하여 시스템에 응용하기 위한 최적화 작업
  • 이미 개발되어 그 기능, 성능 및 품질을 인정받았던 소프트웨어의 전체 또는 일부분을 다시 사용하는 기법

재사용의 종류

재공학(Re-Engineering)

  • 기존 소프트웨어를 버리지 않고 기능을 개선하거나 기능을 새로운 소프트웨어로 재활용하는 소프트웨어 재사용 기법
  • 장점으로는 위험부담 감소, 비용 절감, 개발 기간 단축, 시스템 명세의 오류 억제가 있음

재개발(Re-Development)

  • 기존 시스템 내용을 참조하여 완전히 새로운 시스템을 개발, 기존 시스템에 새로운 기능을 추가, 기존 시스템의 기능을 변경하는 기법

재사용 규모에 따른 분류

  • 함수와 객체 재사용 : 클래스(Class)나 함수(Function) 단위로 구현한 소스 코드를 재사용
  • 컴포넌트 재사용 : 컴포넌트 자체에 대한 수정 없이 인터페이스를 통해 통신하는 방식으로 재사용함
  • 애플리케이션 재사용 : 공통 기능을 제공하는 애플리케이션과 기능을 공유하여 재사용

공통 모듈 구현의 개념

모듈(Module)의 개념

  • 그 자체로 하나의 완전한 기능을 수행할 수 있는 독립된 실체
  • 모듈화를 통해 분리된 시스템의 각 기능으로 서브 프로그램, 서브 루틴, 소프트웨어 내의 단위 프로그램, 작업 단위 등과 같은 의미로 사용

모듈의 특징

  • 각각의 모듈은 상대적으로 독립성을 가지고 있음
  • 모듈 내부에는 그 모듈을 하나로 통합하는 수많은 조합이 존재할 수 있음
  • 단독으로 컴파일할 수 있으며, 재사용할 수 있음
  • 독립성이 높은 모듈일수록 모듈 수정 시에도 다른 모듈들에는 영향을 거의 미치지 않고, 오류 발생 시에도 쉽게 해결할 수 있음
  • 독립성은 결합도와 응집도에 의해 측정되며, 독립성을 높이려면 모듈의 결합도는 약하게(낮게), 응집도는 강하게(높게), 모듈의 크기는 작게 만들어야 함

모듈화(Modularization)의 개념 및 기법

  • 소프트웨어의 성능을 향상하거나 복잡한 시스템의 수정, 재사용, 유지 관리 등이 쉽도록 기능 단위의 모듈로 분해하는 설계 및 구현 기법

모듈화 기법

  • 루틴(Routine) : 소프트웨어에서 특정 동작을 수행하는 일련의 코드로 기능을 가진 명령의 모임
  • 메인 루틴(Main Routine) : 프로그램의 주요한 부분이며, 전체의 개략적인 동작 절차를 표시하도록 만들어진 루틴. 메인 루틴은 서브 루틴을 호출
  • 서브 루틴(Subroutine) : 메인 루틴에 의해 필요할 때마다 호출되는 루틴

공통 모듈 구현의 개념

  • 소프트웨어 개발에 있어 기능을 분할하고 추상화(Abstraction)하여 성능을 향상하고 유지보수를 효과적으로 하려는 공통 컴포넌트 구현 기법
  • 인터페이스 모듈, 데이터베이스 접근 모듈 등 필요한 공통 모듈을 구현
  • 모듈 간의 결합도는 줄이고, 응집도는 높인 공통 모듈 구현을 권장

소프트웨어 모듈 응집도

응집도(Cohesion)의 개념

  • 모듈의 독립성을 나타내는 정도로, 모듈 내부 구성요소 간 연관 정도
  • 하나의 모듈은 하나의 기능을 수행할수록 응집도가 높음

응집도의 유형

적 응집도(Coincidental Cohesion)

  • 모듈 내부의 각 구성요소가 연관이 없을 경우의 응집도

리적 응집도(Logical Cohesion)

  • 유사한 성격을 갖거나 특정 형태로 분류되는 처리 요소들이 한 모듈에서 처리되는 경우의 응집도

적 응집도(Temporal Cohesion)

  • 연관된 기능이라기보다는 특정 시간에 처리되어야 하는 활동들을 한 모듈에서 처리할 경우의 응집도

차적 응집도(Procedural Cohesion)

  • 모듈이 다수의 관련 기능을 가질 때 모듈 안의 구성 요소들이 그 기능을 순차적으로 수행할 경우의 응집도

신(=교환)적 응집도(Communication Cohesion)

  • 동일한 입력과 출력을 사용하여 다른 기능을 수행하는 활동들이 모여 있을 경우의 응집도

적 응집도(Sequential Cohesion)

  • 모듈 내에서 한 활동으로부터 나온 출력값을 다른 활동이 사용할 경우의 응집도

적 응집도(Functional Cohesion)

  • 모듈 내부의 모든 기능이 단일한 목적을 위해 수행되는 경우의 응집도

소프트웨어 모듈 결합도

결합도(Coupling)의 개념

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

결합도의 유형

용 결합도(Content Coupling)

  • 다른 모듈 내부에 있는 변수나 기능을 다른 모듈에서 사용하는 경우의 결합도
  • 하나의 모듈이 직접적으로 다른 모듈의 내용을 참조할 때 두 모듈은 내용적으로 결합하여 있는 경우의 결합도

통 결합도(Common Coupling)

  • 파라미터가 아닌 모듈 밖에 선언된 전역 변수를 참조하고 전역 변수를 갱신하는 식으로 상호작용을 하는 경우의 결합도
  • 공유되는 공통 데이터 영역을 여러 모듈이 사용할 때의 결합도

부 결합도(External Coupling)

  • 두 개의 모듈이 외부에서 도입된 데이터 포맷, 통신 프로토콜, 또는 디바이스 인터페이스를 공유할 경우의 결합도
  • 외부 모듈에서 선언한 데이터(변수)를 외부의 다른 모듈에서 참조할 때의 결합도

어 결합도(Control Coupling)

  • 어떤 모듈이 다른 모듈의 내부 논리 조직을 제어하기 위한 목적으로 제어 신호를 이용하여 통신하는 경우의 결합도
  • 하위 모듈에서 상위 모듈로 제어 신호가 이동하여 상위 모듈에 처리 명령을 부여하는 권리 전도 현상이 발생하는 결합도

탬프 결합도(Stamp Coupling)

  • 모듈 간의 인터페이스로 배열이나 객체, 구조 등이 전달되는 경우의 결합도
  • 두 모듈이 동일한 자료 구조를 조회하는 경우의 결합도이며, 자료 구조의 어떠한 변화는 모든 모듈에 영향을 미치게 됨

료 결합도(Data Coupling)

  • 모듈 간의 인터페이스로 전달되는 파라미터를 통해서만 모듈 간의 상호 작용이 일어나는 경우의 결합도
  • 한 모듈의 내용을 변경해도 다른 모듈에는 영향을 미치지 않는 상태로 가장 바람직한 결합도

공통 모듈 구현 대상

  • 화면 모듈, 화면에서 입력받은 데이터 처리를 위한 서비스 컴포넌트, 비즈니스 트랜잭션 컴포넌트 등이 있음
  • 통합 구현에서 공통 모듈 구현은 상세 설계된 공통 모듈, 환경변수를 실제 프로그래밍 언어로 구현

팬인 및 팬아웃

팬인(Fan-In) 및 팬아웃(Fan-Out) 개념

  • 소프트웨어의 구성요소인 모듈을 계층적으로 분석하기 위해서 팬인, 팬아웃을 활용
  • 팬인과 팬아웃 분석을 통하여 시스템의 복잡도를 측정할 수 있음
  • 시스템 복잡도를 최적화하기 위해서는 팬인은 높게, 팬아웃은 낮게 설계해야 함

팬인 및 팬아웃

팬인

  • 어떤 모듈을 제어(호출)하는 모듈의 수
  • 팬인이 높으면 재사용 측면에서 설계가 잘되었지만, 단일 장애점 발생 가능
  • 팬인이 높으면 관리 비용 및 테스트 비용 증가

팬아웃

  • 어떤 모듈에 의해 제어(호출)되는 모듈의 수
  • 팬아웃이 높을 경우는 불필요한 모듈 호출 여부 검토 필요
  • 팬아웃이 높을 경우는 단순화 여부 검토 필요

팬인 및 팬아웃 계산 방법

  • 팬인 : 모듈 자신을 기준으로 모듈에 들어오면 팬인(in)
  • 팬아웃 : 모듈 자신을 기준으로 모듈에서 나가면 팬아웃(out)

공통 모듈 테스트

공통 모듈 테스트의 개념

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

공통 모듈 테스트 종류

jUnit

  • 자바 프로그래밍 언어용 단위 테스트 도구
  • Erich Gamma와 Dent Beck 등이 작성한 오픈소스로 JAVA 단위 테스트 프레임워크

CppUnit

  • 자바의 jUnit을 C++로 구현한 단위 테스트 도구

HttpUnit

  • 웹 브라우저 없이 웹사이트 테스트를 수행하는 단위 테스트 도구