수달이네 기술 블로그

2. 소프트웨어 개발(통합 구현, 관리) 본문

공부/정보처리기사

2. 소프트웨어 개발(통합 구현, 관리)

슬픈 수달이 2026. 5. 10. 16:05

통합 구현

모듈 구현

단위 모듈 구현

  • 기능을 단위 모듈별로 분할하고, 추상화해 성능 향상, 유지보수를 목표하는 기법
  • 인터페이스 모듈, 데이터베이스 접근 모듈 등. 통합 구현에 필요한 단위 컴포넌트 구현

원리

정보은닉 어렵거나 변경 가능성이 있는 모듈을 타 모듈로부터 은폐
분할과 정복 복잡한 문제를 분해, 모듈 단위로 문제 해결
데이터 추상화 각 모듈 자료 구조를 액세스하고, 수정하는 함수 내에 자료 구조의 표현 내역을 은폐
모듈 독립성 낮은 결합도와 높은 응집도를 가짐

컴포넌트 vs모듈

컴포넌트: 런타임에 독립적으로 배포되고 실행됨

모듈: 정적인 구조

즉, 서버와 클라이언트를 모듈로서 구현하고, 하나의 서버에서 5개의 클라이언트로 정보를 제공하면 컴포넌트는 6개가 된다. 모듈은 2개 그대로.

구현

  1. 코딩 계획: 기능을 실제 수행할 수 있도록 수행 방법을 논리적으로 결정
  2. 코딩: 논리적으로 결정한 문제 해결 방법을 특정 프로그래밍 언어로 구현
    • 언어 선택 시 시스템의 특성, 사용자의 요구사항, 컴파일러의 가용성을 살펴야한다.
  3. 컴파일: 작성한 코드를 기계어 등으로 변환하는 단계
  4. 테스트: 기능이 요구사항을 만족하는지, 예상과 실제 결과가 어떤 차이를 보이는지 검사하고 평가

재사용 기법

이미 성능, 기능, 품질을 인정받은 소프트웨어의 일부, 전체를 재사용하는 기법

  • 재공학: 기존 소프트웨어를 버리지 않고, 기능 개선 or 새로운 소프트웨어로 재활용하는 소프트웨어 재사용 기법
    분석 기존 소프트웨어 명세를 확인하여 동작을 이해하고, 재공학 대상을 선정하는 작업
    재구조 상대적으로 같은 추상적 수준에서 하나의 표현을 다른 형태로 바꾸는 작업
    역공학 기존 소프트웨어를 분석해 설계도를 추출하거나 다시 만들어내는 작업
    이식 기존 소프트웨어 시스템을 새로운 기술, 하드웨어 환경에서 사용할 수 있도록 변환하는 작업
  • 재개발: 기존 시스템 내용을 참조하여 완전히 새로운 시스템을 개발. 기능 추가, 변경하는 기법

규모에 따라 분류

함수, 객체: 클래스나 매서드 단위의 소스 코드를 재사용

컴포넌트: 컴포넌트에 대한 수정 없이 인터페이스로 통신하여 재사용

애플리케이션: 공통된 기능을 제공하는 애플리케이션을 공유하는 방식.

테스트

개별적 코드가 예상대로 작동하는지 확인하는 기법(IDE를 활용해 디버깅)

  • 테스트로 찾고 디버깅으로 수정
  • 블랙박스 테스트: 외부 사용자의 요구사항 명세를 보며 수행(소스 안봄)하는 테스트
  • 화이트박스 테스트: 모듈 내부의 소스를 보며 수행하는 테스트

통합 구현 관리

IDE(Integrated Development Environment)도구

코딩, 디버그, 컴파일, 배포등 프로그램 개발에 관련된 작업을 하나의 프로그램 안에서 처리하는 환경을 제공하는 소프트웨어(Editer + Compiler + Debugger)

개발 환경 자바, 파이썬등 개발 언어로 개발 환경 제공
컴파일 문법을 확인하고, 기계어로 변환
디버깅 프로그래밍 과정에 발생하는 오류, 비정상적 연산 제거
외부 연계 외부 형상, 배포관리 기능과 연계되어 자동 배포 등이 가능
DB연동 JDBC,ODBC등을 통한 데이터베이스를 연동한다

IDE 종류

  이클립스 비주얼스튜디오 엑스코드
개발사 IBM, 이클립스 마이크로소프트 애플
플랫폼 크로스플랫폼 크로스플랫폼 애플
운영체제 대부분 가능 윈도우 맥OS
언어 Java,PHP,JSP Visual Basic,C++ Object C, Swift
라이센스 이클립스 상용 GCC
특징 Java 개발 최적화 C계열 언어 중심 iOS기반 앱 개발

협업 도구(깃허브 등)

기능 설명
개발자 간 커뮤니케이션 개발자간 작업 공유, 오류 공유 등 의사소통
일정 및 이슈 공유 구현 도중 발생하는 오류 및 이슈와 프로젝트 일정 공유
개발자 간 집단 지성 활용 새로운 아이디어를 개발자간 공유하여 집단 지성을 활용함.

형상 관리 도구(깃 등)

소프트웨어 생명주기동안 발생하는 변경 사항을 체계적으로 관리해 소프트웨어의 품질 보증을 향상시키는 활동

  • 개발 과정의 변경사항 관리
  • 요구 분석서, 소스코드, 운영 및 설치 지침서등을 관리한다.
  • 유지 보수 단계 뿐만 아니라 개발 단계에도 사용할 수 있다.

형상관리 개념도

절차

  1. 형상 식별: 형상관리 계획을 근거로 대상이 무엇인지 식별(ID, 관리번호를 부여해 이슈 발생 시 추적)
  2. 형상 통제: 형상 항목의 변경 사항에 대해, 형상통제 위원회가 승인, 기각/보류를 결정하고, 변경사항에 대해 통제(버전관리) → 형상통제위원회(CCB; Change Control Board: 변경사항 적용에 대해 회의함)
  3. 형상 감사: 계획대로 진행되고 있는지형상 항복의 변경이 요구사항에 맞는지 살펴봄(베이스 라인 변경시 요구사항 일치 여부 검토)
  4. 형상 기록: 소프트웨어 형상 및 변경 관리에 대한 각종 수행 결과를 기록하는 활동(형상 결과 보고서 작성)

기능

체크인: 수정한 소스를 저장소로 업로드

체크아웃: 저장소로부터 최신 버전을 개발자PC로 다운로드

커밋: 개발자가 소스를 저장소에 업로드 후 서버에 반영

사례

CVS(Concurrent Versions System): 중앙 집중형 서버에 저장소를 두고 클라이언트가 접속해서 버전 관리

  • 동기화: 체크아웃, 체크인, 업데이트 커밋 이용
  • 파일단위 관리: 파일 단위로 변경사항 관리 가능(diff를 통해 파일 내용 비교)
  • 장점: 직관적이고 단순한 명령셋
  • 단점: 텍스트 기반 소스코드 위주 지원, 등록된 파일 및 디렉토리의 변동이 불편함, 커밋 실패등에 대한 롤백 기능 없음

SVN(Subversion): 중앙 집중형 클라이언트-서버 방식으로 CVS의 단점을 보완한 도구

  • CVS의 대부분 기능 사용
  • 이진 파일 지원
  • 롤백 기능
  • 장점: 디렉토리 파일을 자유롭게 이동, 빠른 속도, Gzip으로 압축해 공간 절약, 다양한 플러그인
  • 단점: Trunk, Branch, Tag등 모두 물리적 저장위치 점유, 잦은 커밋으로 리버전 번호 크게 증가, 개별 개발자의 개발 이력을 가질 수 없음

Git: 리누스 토발스가 리눅스 개발을 위해 만든 형상관리도구

  • 로컬/원격 형상 관리
  • Push, Fetch, Pull등 원격 환경에서의 형상관리 기능 제공
  • 커밋 실패 시 롤백 가능
  • 장점: 저장소의 완전한 복사본을 로컬 저장 가능, 오프라인 작업 가능, 일시적 작업에 대한 이력관리가 쉬움
  • 단점: 대용량 코드 관리에 부적절. 한번에 변경사항을 보기 힘듦, CVS, SVN과 개념이 상이해 학습시간이 요구됨.