본문 바로가기
Computer Science/정보처리기사

[정보처리기사-실기] 8장 서버프로그램 구현

by eyi-jin 2022. 4. 28.

순서

CH01 개발환경 구축
CH02 공통 모듈 구현
CH03 서버 프로그램 구현
CH04 배치 프로그램 구현

<CH01 개발환경 구축>

개발 도구 분류

  • 빌드 도구 : 작성한 코드의 빌드 및 배포를 수행하는 도구(Ant, Maven, Gradle)
  • 구현 도구: 코드의 작성과 디버깅, 수정 등과 같이 작업시 사용되는 도구(Eclipse, InteliJ, VS)
  • 테스트 도구: 코드의 기능 검증과 전체의 품질을 높이기 위해 사용하는 도구(xUnit, PMD, Sonar)
  • 형상 관리 도구: 산출물에 대한 버전관리를 위한 도구(Git, SVN, CVS)

개발환경 구축 절차

  1. 프로젝트 요구사항 분석
  2. 필요 도구 설계
  3. 개발언어 선정
  4. 구현도구 선정
  5. 빌드, 테스트 도구 선정

개발환경 구성 요소

개발환경 구분
하드웨어 개발 환경 서버 하드웨어 개발환경 웹 서버 (Web Server)
웹 애플리케이션 서버 (WAS; Web Application Server
데이터베이스 서버 (DB Server)
파일 서버 (File Server)
클라이언트 하드웨어 개발환경 클라이언트 프로그램
웹 브라우저
모바일 앱
모바일 웹
소프트웨어 개발환경 운영체제
미들웨어
DBMS


서버 하드웨어 개발환경

  • 웹 서버: HTTP를 이용한 요청/응답을 처리(Apache 웹서버, 구글 웹서버)
  • 웹 애플리케이션 서버(WAS): 동적 콘텐츠를 처리하고 제공하기 위해 사용(Tomcat, Jeus, Resin)
  • 데이터베이스 서버: 데이터의 수집, 저장을 위한 용도로 사용(MySQL, Oracle, MS-SQL)
  • 파일 서버: 파일 저장 하드웨어로 물리 저장 장치를 활용한 서버(HDD, SSD)

소프트웨어 개발환경

  • 운영체제: 사용자 관점에서 편리하고 유용하게 사용하기 위한 소프트웨어
  • 미들웨어: 웹 서버, JVM과 같은 개발 환경의 구성요소로 활용
  • DBMS: 데이터의 저장 및 활용을 위해 DBMS를 설치

서버 개발 프레임워크

프레임워크(Framework)

소프트웨어의 구체적인 부부에 해당하는 설계와 구현을 재사용이 가능하게끔 일련의 협업화된 형태로 클래스들을 제공하는 틀이다.

특징[모재확역]

  • 모듈화 (Modularity): 인터페이스에 의한 캡슐화를 통해 모듈화를 강화, 설계와 구현의 변경에 따르는 영향을 극소화하여 소프트웨어의 품질을 향상시킨다.
  • 재사용성 (Reusability): 프레임워크가 제공하는 인터페이스는 반복적으로 사용할 수 있는 컴포넌트를 정의할 수 있게 하여 재사용성을 높여 준다. 또한 재사용성은 소프트웨어의 품질을 향상시킬 뿐만 아니라, 개발자의 생산성도 높여준다.
  • 확장성 (Extensibility): 프레임워크는 다형성(polymorphism)을 통해 애플리케이션이 프레임워크의 인터페이스를 넓게 사용할 수 있게 한다. 또한 애플리케이션 서비스와 특성을 변경하고 프레임워크를 애플리케이션의 가변성으로부터 분리함으로써 재사용성의 이점을 얻게 한다.
  • 제어의 역행 (loC; Inversion of Control): 프레임워크 코드가 전체 애플리케이션의 처리 흐름을 제어하여 특정한 이벤트가 발생할 때 다형성을 통해 애플리케이션이 확장한 메소드를 호출함으로써 제어가 프레임워크로부터 애플리케이션으로 반대로 흐르게 한다.

형상 관리(Configuration Management)

소프트웨어 개발을 위한 전체 과정에서 발생하는 모든 항목의 변경 사항을 관리하기 위한 활동
  • 형상 관리 절차: 형상식별(대상정의) → 형상 통제(버전관리) → 형상 감사(무결성 평가) → 형상 기록(보고서 작성)

소프트웨어 형상 관리 도구 유형

  • 공유 폴더 방식: 매일 개발이 완료된 파일은 약속된 위치의 공유 폴더에 복사하는 방식(RCS, SCCS)
  • 클라이언트/서버 방식: 중앙에 버전 관리 시스템을 항시 동작시키는 방식(CVN, SVN)
  • 분산 저장소 방식: 로컬 저장소와 원격 저장소로 분리되어 분산 저장하는 방식(Git)

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

  • CVS(Concurrent Versions System): 서버와 클라이언트로 구성되어 있고, 다수의 인원이 동시에 범용적인 운영체제로 접근 가능한 형상 관리 도구
  • SVN(Subversion): 하나의 서버에서 소스를 쉽고 유용하게 관리할 수 있게 도와주는 도구
  • RCS(Revision Control System): 소스 파일의 수정을 한 사람만으로 제한하여 다수의 사람이 파일 수정을 동시에 할 수 없도록 팡리 잠금 방식으로 형상을 관리하는 도구
  • Bitkeeper: 중앙 통제 방식으로 대규모 프로젝트에서 빠른 속도를 내도록 개발된 형상 관리 도구
  • Git: 속도에 중점을 둔 분산형 버전 관리 시스템, 대형 프로젝트에서 효과적이고 유용함
  • Clear Case: 복수 서버, 복수 클라이언트 구조, 필요한 서버를 하나씩 추가하여 확장성을 기할 수 있음

<CH02 공통 모듈 구현>

모듈(Module)

하나의 완전한 기능을 수행할 수 있는 독립된 실체
    • 모듈화(Modularity): 프로그램 개발 시 생산성과 최적화, 관리에 용이하게 기능 단위로 분할하는 기법
      • 원리: 정보은닉, 분할과 정복, 데이터 추상화, 모듈 독립성
    • 응집도(Cohesion):
    • 모듈의 독립성을 나타내는 정도,
    • 모듈 내부 구성요소 간 연관 정도,
    • 높을수록 좋다
      [우논시절통순기]
단계 종류 설명
1단계 우연적 응집도(Coincidental Cohesion) 모듈 내부의 각 구성 요소들이 서로 관련 없는 요소(우연적으로 같이 존재)로만 구성된 경우
2단계 논리적 응집도(Logical Cohesion) 유사한 성격을 갖는 처리 요소들로 하나의 모듈이 형성되는 경우
2단계 시간적 응집도(Temporal Cohesion) 특정 시간에 처리되는 기능을 모아 하나의 모듈로 작성할 경우
3단계 절차적 응집도(Procedural Cohesion) 모듈 내부 구성 요소들이 특정 기능을 순차적으로 수행할 경우
4단계 통신적 응집도(Communication Cohesion) 동일 입출력 사용, 서로 다른 기능을 수행하는 요소들이 모였을 경우
5단계 순차적 응집도(Sequential Cohesion) 모듈의 출력 데이터를 그 다음 모듈의 입력 데이터로 사용할 경우(파이프 구조)
6단계 기능적 응집도(Functional Cohesion) 모듈 내부의 모든 기능이 단일 문제와 연관될 경우
    • 결합도(Coupling):
      외부 모듈과 연관도
      모듈 간의 상호의존성,
      모듈간의 관련성을 측정하는 척도,
      낮을 수록 좋다
      [내공외제스자]
단계 종류 설명
1단계 내용 결합도(Content Coupling) 한 모듈이 다른 모듈의 내부 기능 및 데이터를 직접 참조하거나 수정
2단계 공통 결합도(Common Coupling) 공유되는 공통 데이터 영역을 여러 모듈이 사용할 때
3단계 외부 결합도(External Coupling) 어떤 모듈에서 선언한 데이터를 외부의 다른 모듈에서 참조할 때
4단계 제어 결합도(Control Coupling) 한 모듈이 다른 모듈의 상세한 처리 절차를 알고 있어, 다른 모듈에서 흐름을 제어
5단계 스탬프 결합도(Stamp Coupling) 두 모듈이 동일한 자료 구조를 조회함
6단계 자료 결합도(Data Coupling) 호출시 매개변수로 데이터를 넘겨주고, 동작이 끝나면 처리 결과를 돌려줌

공통 모듈

전체 프로그램의 기능 중 특정 기능을 처리할 수 있는 실행 코드

팬인(Fan-In)과 팬아웃(Fan-Out)

  • Fan-In: 어떤 모듈을 제어하는 모듈의 수/ 모듈 자신을 기준으로 모듈에 들어올 때
  • Fan-Out: 어떤 모듈에 의해 제어되는 모듈의 수/ 모듈 자신을 기준으로 모듈에서 나갈 때
  • 시스템 복잡도를 최적화 = 팬인은 높게, 팬아웃은 낮게

공통 모듈 테스트

IDE 도구를 활용하여 개별 공통 모듈에 대한 디버깅을 수행

  • IDE(통합 개발 환경: Integrated Development Environment): 개발에 필요한 다양한 툴을 하나의 인터페이스로 통합하여 제공하는 환경
    ex) Eclipse, VSC, Android Studio

공통 모듈 테스트 케이스 종류

  • 화이트박스 테스트: 소스 코드를 보면서 테스트 케이스를 다양하게 만들어 테스트
  • 메서드 기반 테스트: 공통 모듈의 외부에 공개된 메서드 기반 테스트
  • 화면 기반 테스트: 화면 단위로 단위모듈을 개발 후에 화면에 직접 데이터를 입력하여 테스트
  • 테스트 드라이버/테스트 스텁 활용 테스트: 기능을 테스트할 수 있는 화면 또는 하위 모듈이 구현되지 않은 경우
    • 테스트 드라이버(Test Driver): 하위 모듈을 있지만 상위 모듈은 없는 경우 사용
    • 테스트 스텁(Test Stub): 상위 모듈은 있지만 하위 모듈은 없는 경우
  • Junit: 자바 프로그래밍 언어용 단위테스트 도구

<CH03 서버 프로그램 구현>

구현 절차

  • 백엔드: DTO/VO → SQL → DAO → Service → Controller → 화면구현
    • DTO(Data Transfer Object): 프로세스 사이에서 데이터를 전송하는 객체
    • VO(Value Object): 고정 클래스를 가지는 객체
    • DAO(Data Access Object): 데이터베이스에 추상 인터페이스를 제공하는 객체

<CH04 배치 프로그램 구현>

배치 프로그램(Batch Program)

사용자와의 상호작용 없이 일련의 작업들을 작업 단위로 묶어 정기적으로 반복 수행하거나 정해진 규칙에 따라 일괄 처리하는 방법

유형

  • 이벤트 배치: 사전에 정의해 둔 조건 충족시 자동으로 실행
  • 온디맨드 배치: 사용자의 명시적 요구가 있을 때마다 실행
  • 정기 배치: 정해진 시점에 정기적으로 실행

배치 스케줄러(Batch Scheduler)

일괄 처리(Batch Processing)작업이 설정된 주기에 맞춰 자동으로 수행되도록 지원하는 도구

종류

  • 스프링 배치(Spring Batch)
    • Spring Source 사와 Accenture사의 공동 작업으로 2007년에 탄생한 배치 기반 오픈소스 프레임워크
    •  
  • 쿼츠 스케줄러(Quartz Scheduler)
    • Spring Framework에 플러그인(Plug-in)되어 수행하는 Job과 실행 스케줄을 정의하는 Trigger를 분리하여 유연성을 제공하는 오픈 소스 스케줄러

Corn 표현식

크론 표현식 (클릭 -> 사진 출처로 이동)

크론 표현식을 통해 배치 수행 시간을 시간 및 주기 등으로 설정

  • 리눅스/유닉스 크론 표현식: 분, 시간, 일, 월, 요일, 연도
  • 쿼츠 크론 표현식: 초, 분, 시간, 일, 월, 요일, 연도

요약작성 참고 https://dustink.tistory.com/158
https://velog.io/@hammii/정보처리기사실기-8.-서버-프로그램-구현
실기 암기 테스트: https://arakene.tistory.com/entry/정보처리기사-실기-8과목-서버-프로그램-구현

배치 스케줄러 참고 https://shlee1990.tistory.com/824

댓글