본문 바로가기
2020 정보처리기사

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

by SungJe 2020. 7. 2.

1. 개발환경 구축하기

개발 하드웨어 환경

  • 클라이언트(Client) 환경 : PC, 웹 브라우저, 스마트폰

  • 서버(Server) 환경

종류 설명
웹 서버 클라이언트로부터 직접 요청을 받아 처리하는 서버, 저용량의 정적 파일들을 제공
웹 어플리케이션 서버 동적 서비스를 제공하기 위해 웹 서버로부터 요청을 받아 데이터 가공 작업을 수행하는 서버
데이터베이스 서버 데이터베이스와 이를 관리하는 DBMS를 운영하는 서버
파일 서버 서비스 제공을 위해 파일을 저장하고 공유하기 위한 파일 저장 서버

 

개발 소프트웨어 환경

  • 시스템 소프트웨어 : 운영체제(OS), 웹 서버, WAS, DBMS 등

  • 개발 소프트웨어

종류 설명
요구사항 관리도구 고객의 요구사항을 수집, 분석, 추적을 쉽게 할 수 있게 지원하는 도구
설계/모델링 도구 UML(통합 모델링 언어)을 지원, 설계 및 모델링을 지원하는 도구
구현 도구 소프트웨어 언어를 통해 구현 및 개발을 지원하는 도구
빌드 도구 작성된 소스의 빌드 및 배포, 라이브러리 관리를 지원하는 도구
테스트 도구 모듈들이 요구사항에 적합하게 구현되었는지 테스트를 지원하는 도구
형상관리 도구 사출물들을 버전별로 관리하여 목표 시스템의 품질 향상을 지원하는 도구

 

형상관리(SCM : Software Configuration Management)

  • 개요 : 소프트웨어 변경사항을 파악하고 제어하며, 적절히 변경되고 있는지에 대해 확인하여 해당 담당자에게 통보하는 작업

  • 절차

    • 형상 식별 : 형상관리 대상을 식별하여 추적이 용이하도록 하는 작업, 베이스라인의 기준을 정하는 활동

    • 형상 통제 : 식별된 형상 항목의 변경 요구를 검토, 승인하여 베이스라인에 잘 반영될 수 있도록 조정하는 작업

    • 형상 감시 : 베이스라인의 무결성을 평가하기 위해 확인, 검증 과정을 통해 공식적으로 승인하는 작업

    • 형상 기록 : 형상의 식별, 통제, 감사 작업의 결과를 기록 및 관리하고 보고서를 작성하는 작업

 

2. 공통 모듈 구현하기

공통 모듈

  • 개요 : 정보 시스템 구축 시 자주 사용하는 기능들로써 재사용이 가능하게 패키지로 제공하는 독립된 모듈을 의미

  • 재사용(Reuse) : 목표 시스템의 개발 시간 및 비용 절감을 위해 기능들을 파악하고 재구성하여 시스템에 응용하기 위한 최적화 작업

    • 재사용 규모

      1. 함수와 객체 재사용

      2. 컴포넌트 재사용

      3. 애플리케이션 재사용

  • 컴포넌트 기반 개발(CBD : Component Based Development) : 재사용 가능한 컴포넌트 개발 또는 상용 컴포넌트를 조합하여 응용 시스템을 구축하는 방법론

결합도(Coupling)

  • 개요 : 모듈 간에 상호 의존하는 정도 또는 두 모듈 사이의 연관 관계를 의미

  • 유형

결합도 유형 설명
자료 결합도
(Data Coupling)
모듈 간의 인터페이스가 자료 요소(파라미터, 인수)로만 구성
스템프 결합도
(Stamp Coupling)
모듈 간의 인터페이스로 배열이나 자료 구조(오브젝트, 스트럭처)가 전달
제어 결합도
(Control Coupling)
다른 모듈 내부의 논리적인 흐름을 제어하기 위한 제어 요소(Function Code, Switch, Tag, Flag)를 전달
외부 결합도
(External Coupling)
데이터, 프로토콜, 인터페이스 등을 외부의 다른 모듈에서 참조
공통 결합도
(Common Coupling)
공유되는 공통 데이터 영역을 여러 모듈이 사용
내용 결합도
(Content Coupling)
모듈 내부에 있는 변수나 제어정보를 다른 모듈에서 직접 참조하거나 수정

 

응집도(Cohesion)

  • 개요 : 정보 은닉 개념을 확장한 것, 모듈이 독립적인 기능으로 정의되어 있는 정도

  • 유형

응집도 유형 설명
기능적 응집도
(Functional Cohesion)
하나의 기능만 수행하는 모듈
순차적 응집도
(Sequential Cohesion)
모듈 내에서 한 활동으로부터 나온 출력 데이터를 다른 모듈의 입력 값으로 사용
통신적 응집도
(Communication Cohesion)
동일한 입력과 출력을 사용하여 다른 기능을 수행하는 활동들이 모여 있는 경우
절차적 응집도
(Procedural Cohesion)
모듈 안의 구성 요소들이 그 기능을 순차적으로 수행할 경우
시간적 응집도
(Temporal Cohesion)
특정 시간에 처리되는 활동들을 한 모듈에서 처리하는 경우
논리적 응집도
(Logical Cohesion)
유사한 성격을 갖거나 특정 형태로 분류되는 처리 요소들로 하나의 모듈이 형성되는 경우
오류처리, 출력 처리 등
우연적 응집도
(Coincidental Cohesion)
관련 없는 작업을 한 모듈에 모은 경우

 

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

  • 팬인 : 어떤 모듈을 제어(호출)하는 모듈의 수

  • 팬아웃 : 어떤 모듈에 의해 제어(호출)되는 모듈의 수

  • 팬인(Fan-In) : A는 0, B·C·D·E·G는 1, F·H·I는 2
  • 팬아웃(Fan-Out) : H·I는 0, C·E·F·G는 1, B·D는 2, A는 3

 

테스트 케이스

  • 개요 : 요구사항을 준수하는지 검증하기 위하여 테스트 조건, 입력 값, 예상 출력 값 및 결과 등 테스트 조건을 명세한 것

  • 구성 요소(ISO/IEC/IEEE 29119-3 표준)

구성 요소 설명
식별자(Identifier) 항목, 식별자, 일련번호
테스트 항목(Test Item) 테스트 대상(모듈 또는 기능)
입력 명세(Input Specification) 입력 데이터 또는 테스트 조건
출력 명세(Output Specification) 테스트 케이스 수행 시 예상되는 출력 결과
환경 설정(Environmental Needs) 필요한 하드웨어나 소프트웨어 환경
특수 절차 요구
(Special Procedure Requirement)
테스트 케이스 수행 시 특별히 요구되는 절차
의존성 기술
(Inter-case Dependencies)
테스트 케이스 간의 의존성

 

  • 테스트 프로세스

    1. 계획 및 제어 

    2. 분석 및 설계 

    3. 구현 및 실행

    4. 평가

    5. 완료

 

3. 서버 프로그램 구현하기

서버 개발 프레임워크

  • 개요 : 네트워크 설정, 요청 및 응답 처리, 아키텍처 모델 구현 등을 손쉽게 처리할 수 있도록 클래스나 인터페이스를 제공하는 소프트웨어

  • 종류

프레임워크 특징
Spling JAVA 기반, 전자정부 표준 프레임워크의 기반 기술
Node.js JavaScript 기반, 입·출력이 빈번한 애플리케이션에 적합
Django Python 기반, 컴포넌트의 재사용과 플러그인화를 강조
Codeigniter PHP 기반, 인터페이스가 간편하며 서버 자원을 적게 사용
Ruby on Rails Ruby 기반, 테스트를 위한 웹 서버를 지원하며 신속한 개발이 가능
  • 특징

    • 모듈화(Modularity) : 캡슐화를 통해 모듈화를 강화, 변경에 따른 영향을 최소화함으로써 소프트웨어의 품질을 향상

    • 재사용성(Reusability) : 재사용 가능한 모듈들을 제공함으로써 개발자의 생산성을 향상

    • 확장성(Extensibility) : 다형성(Polymorphism)을 통한 인터페이스 확장이 가능

    • 제어의 역흐름(Inversion of Control) : 객체들의 제어를 프레임워크에 넘김으로써 생산성을 향상

 

서버 개발 과정

  1. DTO/VO 구현 : 데이터 교환을 위해 사용할 객체를 생성하는 과정

    • DTO(Data Access Object) : 데이터 교환을 위해 생성되는 객체

    • VO(Value Object) : DTO와 동일하지만 일기만 가능, 수정 불가

  2. SQL문 구현 : XML 파일로 저장하여 관리, 중복 SQL문을 최소화하고 유지보수가 간편

  3. DAO 구현 : 데이터베이스에 접근하고, SQL을 활용하여 데이터를 실제로 조작하는 코드 구현

    • DAO(Data Transfer Objcet) : DB에 접근하여 데이터를 조회, 생성, 수정, 삭제 작업을 수행하는 객체

  4. Service 구현 : 사용자의 요청에 응답하기 위한 로직 구현

  5. Controller 구현 : 사용자의 요청에 적절한 서비스를 호출하여 그 결과를 사용자에게 반환하는 코드 구현

 

소프트웨어 개발 보안

  • 개요 : SW 개발 과정에서 개발자의 발생할 수 있는 보안 취약점을 최소화하여 보안 위협으로부터 안전한 SW를 개발하기 위한 보안활동
  • 점검 항목(시큐어 코딩 가이드)
유형 설명
세션 통제 세션의 연결과 연결로 인해 발생하는 정보를 관리
보안 약점 : 불충분한 세션 관리, 잘못된 세션에 의한 정보 노출 등
입력 데이터
검증 및 표현
입력 데이터에 대한 유효성 검증체계를 갖추고, 검증 실패 시 이를 처리할 수 있도록 코딩
보안 약점 : SQL 삽입, 경로 조작 및 자원 삽입, 크로스사이트 스크립팅(XSS) 등
보안 기능 인증, 접근제어, 기밀성, 암호화 등의 기능
보안 약점 : 적절한 인증 없는 중요기능 허용, 부적절한 인가 등
시간 및 상태 병렬 처리 시스템이나 다수의 프로세스가 동작하는 환경에서 시스템이 원활히 동작되도록 코딩
보안 약점 : 검사 시점과 사용 시점(TOCTOU) 경쟁조건, 종료되지 않는 반복문 또는 재귀함수 등
에러처리 SW 실행 중 발생할 수 있는 오류들을 사전에 정의하여 문제들을 예방
보안 약점 : 오류 메시지를 통한 정보 노출, 오류 상황 대응 부재 등
코드 오류 코딩 중 실수하기 쉬운 형(Type) 변환, 자원의 반환 등을 고려하며 코딩
보안 약점 : 널 포인터 역참조, 부적절한 자원 해제 등
캡슐화 데이터(속성)와 데이터를 처리하는 함수를 하나의 객체로 묶어 코딩
보안 약점 : 잘못된 세션에 의한 데이터 정보 노출, 제거되지 않고 남은 디버그 코드 등
API오용 API를 잘못 사용하거나 보안에 취약한 API를 사용하지 않도록 고려하여 코딩
보안 약점 : DNS lookup에 의존한 보안 결정, 취약한 API 사용

 

소프트웨어 테스트

  • 개요 : 애플리케이션이나 시스템을 사용자의 요구사항이 만족되었는지 확인하기 위하여 기능 및 비기능 요소의 결함을 찾아내는 활동

  • 원리

    • 개발자가 자신이 개발한 프로그램 및 소스코드를 테스팅하지 않음 : 자기 자신이 테스팅을 할 경우에는 결함을 발견하는 것이 쉽지 않음

    • 효율적인 결함 제거 법칙 사용

    • 낚시의 법칙 : 특정 기능, 모듈, 라이브러리에서 결함이 많이 발견된다는 것

    • 파레토의 법칙 : 전체 결함의 80%는 전체 기능 중 20%에 집중되어 있음

    • 완벽한 소프트웨어 테스팅은 불가능 : 완벽한 테스트를 위한 노력보다는 효율적인 테스트를 하는 것이 중요

    • 테스트는 계획 단계부터 해야 함 : 개발 초기 이전인 계획 단계에서부터 최대한 결함을 예방해야 함

    • 살충제 패러독스(Pesticide Paradox) : 동일한 테스트 케이스로 반복 실행하면 더 이상 새로운 결함을 발견할 수 없음

    • 오류-부재의 궤변(Absence of Errors Fallacy) : 개발된 시스템이 사용자의 요구사항을 만족하지 못하거나 사용성이 낮다면 오류를 제거해도 품질이 높다고 말할 수 없음

 

4. 배치 프로그램 구현하기

배치 프로그램(Batch Program)

  • 개요 : 사용자와의 상호 작용 없이 일련의 작업들을 정기적으로 반복 수행하거나 정해진 규칙에 따라 일괄 처리

  • 수행 주기

주기 설명
정기 배치 일, 주, 월과 같이 정해진 기간에 정기적으로 수행
이밴트성 배치 특정 조건을 설정해두고 조건이 충족될 때만 수행
On-Demand 배치 사용자 요청 시 수행
  • 필수 요소

요소 설명
대용량 데이터 대량의 데이터를 처리가 가능
자동화 사용자의 개입 없이 수행
견고성 비정상적인 중단 없이 수행
안정성/신뢰성 오류 발생 시 위치, 시간 등을 추적 가능
성능 수행을 방해하지 않고, 지정된 시간 내에 처리 완료

 

배치 스케줄러(Batch Scheduler)

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

  • 스프링 배치(Spring Batch) : 스프링 프레임워크의 특성을 그대로 가져와 스프링의 기능들을 모두 사용 가능

    • 핵심 기능

기능 설명
스프링 프레임워크 기반 스프링의 DI, AOP 및 다양한 엔터프라이즈 지원 기능을 사용
자체 제공 컴포넌트 배치처리 시 공통적으로 필요한 컴포넌트를 제공
견고함과 안정성 선언적 생략과 처리 실패 후 재시도 설정을 제공
  • Quartz 스케줄러 : 스프링 프레임워크로 개발되는 응용 프로그램들의 일괄 처리를 위한 다양한 기능을 제공

    • 구성 요소

구성 요소 설명
Scheduler Quartz 실행환경을 관리하는 핵심 개체
Job 사용자가 수행할 작업을 정의하는 인터페이스, Trigger 개체를 이용하여 스케줄 가능
JobDetail Job에 대한 상세 정보를 정의하는 개체
Trigger Job 개체의 실행 스케줄을 정의하는 개체, Scheduler 개체에게 Job 수행 시점을 알려줌