Light Blue Pointer
본문 바로가기
Others/자격증 공부

01-03 서버 프로그램 구현하기

by Greedy 2021. 7. 28.

01 업무 프로세스 확인

1) 프로세스의 이해

프로그램의 개념

프로세스란 개인이나 조직이 한 가지 이상의 정보 자원의 입력을 통해 가치있는 산출물을 제공하는 모든 관련 활동들의 집합이다

공급자(Supplier) -> 입력 -> 프로세스(Process) -> 출력 -> 고객(Customer)

 

프로세스 모델의 구성 항목

항목 설명
고객 제품/서비스 또는 출력의 대상이 되는 개인이나 조직
프로세스 입력을 가치있는 산출물로 변환시켜 출력하는 활동들
공급자 입력을 제공하는 개인이나 조직
입력 공급자에 의해 제공되는 정보 자원
출력 프로세스를 통해 고객에게 제공되는 가치있는 제품/서비스

프로세스 구성 요소

항목 설명
프로세스 책임자 프로세스의 성과와 운영을 책임지는 구성원으로, 프로세스를 설계하고 지속적으로 유지하는 사람이다.
프로세스 맵 상위 프로세스와 하위 프로세스의 체계를 도식화하여 전체 업무의 청사진을 표현한다.
프로세스 Task 정의서 기대하는 결과물을 산출하기 위해 Task들이 어떻게 운영되어야 하는지에 대한 문서이다.
프로세스 성과 지표 프로세스의 과정과 결과를 고객 입장에서 정량적으로 표현한 성과 측정 지표이다.
프로세스 조직 프로세스를 성공적으로 수행하기 위해 개인들의 업무를 우기적으로 수행하는 구성원이다.
경영자의 리더십 경영자는 프로세스의 중요성을 인식하고 기업의 경영 방침을 확고하게 해야 한다.

 

2) 프로세스의 맵

프로세스의 맵은 상위 프로세스에서 하위 프로세스로의 흐름 체계를 도식화한 사진으로 다양한 형태로 표현할 수 있다.

 

구조적 분석 기법에서의 자료 흐름도

객체지향 분석 기법에서의 사용 사례 다이어그램

 

3) 업무 프로세스 수행하기

상세 설계를 기반으로 담당 업무를 확인한다.

프로그램 관리 대장을 확인한다.

업무 프로세스 맵을 확인한다.

프로그램 설계서를 확인한다.

화면 설계서를 확인한다.

화면 레이아웃을 확인한다.

 

02 서버 프로그램 구현

1) 프레임워크에 대한 이해

소프트웨어 프레임워크의 정의

효율적인 정보 시스템 개발을 위한 코드 라이브러리, 애플리케이션 인터페이스, 설정 정보 등의 집합으로서 재사용이 가능하도록 소프트웨어 구성에 필요한 기본 뼈대를 제공한다.

광의적으로 정보 시스템의 개발 및 운영을 지원하는 도구 및 가이드 등을 포함한다.

 

프레임워크의 특징

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

2) 소프트웨어 개발 보안

소프트웨어 개발 보안의 개념

소프트웨어 개발 과정에서 개발자의 실수, 논리적 오류 등으로 인해 소프트웨어에 내포될 수 있는 보안 취약성의 원인, 즉 보안 약점을 최소화한다.

사이버 보안 위협에 대응할 수 있는 안전한 소프트웨어를 개발하기 위한 일련의 보안 활동이다.

 

소프트웨어 개발 보안 가이드의 구성

Java 시큐어 코딩 가이드

유형 설명
입력 데이터 검증 및 표현 프로그램 입력값에 대한 검증 누락 또는 부적절한 검증, 데이터의 잘못된 형식 지정으로 인해 발생할 수 있는 보안 약점
보안 기능 보안 기능을 적절하지 않게 구현 시 발생할 수 있는 보안 약점
시간 및 상태 동시 또는 거의 동시 수행을 지원하는 병렬 시스템, 하나 이상의 프로세스가 동작하는 환경에서 시간 및 상태를 부적절하게 관리하여 발생할 수있는 보안 약점
에러 처리 에러를 처리하지 않거나, 불충분하게 처리하여 에러 정보에 중요정보가 포함될 때 발생할 수 있는 보안 약점
코드 오류 타입 변환 오류, 자원의 부적절한 반환 등과 같이 개발자가 범할 수 있는코딩 오류로 인해 유발되는 보안 약점
캡슐화 중요한 데이터 또는 기능성을 불충분하게 캡슐화하였을 때 인가되지 않는 사용자에게 데이터 누출이 가능해지는 보안 약점
API 오용 의도된 사용에 반하는 방법으로 API를 사용하거나, 보안에 취약한 API를 사용하여 발생할 수 있는 보안 약점

 

3) 보안 취약성 식별

정의 및 개념

취약점은 공격자가 시스템의 정보 보증을 낮추는데 사용되는 약점이다.

시스템의 민감성 또는 결함, 공격자가 결함에 대한 접근 및 결함에 대한 익스플로잇의 가능성이 있을 때 취약점을 나타낸다.

취약점을 익스플로잇하기 위해서 공격자는 반드시 시스템의 약점에 접속할 수 있는 적어도 하나의 툴이나 기법을 가져야 한다

 

취약점 식별과 제거

컴퓨터 시스템에서 취약점들을 발견할 수 있게 도와주는 많은 소프트웨어툴들이 존재한다.

툴들이 감시관에게 현재 존재할 수 있는 취약점들에 대한 좋은 개요를 제공할 수 있지만, 인간의 판단을 대체하지는 못한다.

단지 스캐너에만 존재하는 것은 현재 시스템에 존재하는 문제들에 대한 제한된 관점과 긍정 오류를 만들 수 있다.

취약점들은 모든 주요 운영체제들에서 발견되고 있다

시스템들을 사용하면서 취약점들의 확률을 줄일 수 있는 유일한 방법은 감시와 최적의 배치, 세심한 시스템 관리를 포함한 꾸준한 점검을 통해서 가능해진다.

 

시스템의 물리적 환경 취약점

직원 .

관리.

조직 내에서 관리 절차와 보안 방식.

경영 활동과 서비스 전달.

하드웨어.

소프트웨어.

통신 장비와 시설.

 

소프트웨어 취약점

 

메모리 보안 침입 버퍼 오버플로 메모리를 다루는데에 오류가 발생하여 잘못된 동작을 하는 프로그램 약점
컴퓨터 보안과 프로그래밍에서는 프로세스가 데이터를 버퍼에 저장할 때 프로그래머가 지정한 곳 바깥에 저장하는 것을 의미
  허상 포인터 컴퓨터 프로그래밍에서 적절한 타입의 유효한 객체를 가리키고 있지 않는 포인터를 말함
입력 확인 오류 포맷 스트링 버그 포맷팅을 수행하는 printf()같은 특정한 C함수들에서 검사되지 않은 사용자 입력을 포맷 스트링 파라미터로 사용하는것
  SQL삽입 응용 프로그램 보안상의 허점을 의도적으로 이용한, 악의적인 SQL문을실행되게 함으로써 데이터베이스를 비정상적으로 조작하는 코드 인젝션 공격방법
  코드 인젝션 유효하지 않은 데이터를 실행함으로써 야기되는 소프트에어 버그의 부당한 사용
  이메일 인젝션 웹 애플리케이션의 메일 송신 기능에 공격자가 임의의 To및 Subject등의 메일 헤더를 부정하게 추가하는 공격
  디렉터리 접근 공격 비공개 디렉터리의 파일에 대해서 부정하게 디렉터리 패스를 가로질러 액세스하는 공격
  웹 어플리케이션에서의 사이트간 스크립팅 취약성이 있는 웹 사이트를 방문한 사용자의 디렉터리 패스를 가로질러 액세스하는 공격
  HTTP 헤더 인젝션 공격자가 리스폰스 헤더필드에 개행문자 등을 삽입함으로써 임의의 리스폰스 헤더 필드나 바디를 추가하는 수동적 공격
  HTTP 응답 스플리팅 공격자가 HTTP요청에 삽입한 인자값이 HTTP응답헤더에 포함되어 사용자에게 다시 전달될 때 개행문자를 이용하여 첫번째 응답을 종료시키고 두번째 응답에 악의적인 코드 주입
경쟁 상태 Time of check to time of use버그 하나의 자원에 대하여 동시에 검사시점과 달라 생기는 보안양점으로 인해 동기화 오류쁀만 아니라 교착상태 등과 같은 문제점 발생
  심볼릭 링크 경쟁 심볼릭 링크는 절대 경로 또는 상대 경로의 형태로 된 다른 파일이나 디렉터리에 대한 참조를 포함하고 있는 특별한 종류의 파일을 이용한 공격

취약점 결과

보안 위반의 영향은 매우 크다

IT관리자나 높은 관리직이 취약점이 있는 IT 시스템과 애플리케이션에 대해 쉽게 알 수 있는 것과 IT위험에 대해 어떤 조치도 취하지 않는 것은 대부분의 경우에 좋지 않은 행위이다.

프라이버시 법은 관리자들이 보안 위험에 대한 영향과 가능성을 줄이는 것을 강요한다다모의 해킹은 조직에 의해 채택된 약점과 대응책을 확인하는 형태이다.

IT위험을 전문적으로 관리하는 적절한 방식은 정보 보안 관리 시스템을 채택하는 것이다

 

4) API

API 정의

API는 응용프로그램 프로그래밍 인터페이스로 응용프로그램에서 사용할 수 있도록, 운영체제나 프로그래밍 언어가 제공하는 기능을 제어할 수 있게 만든 인터페이스를 말한다

주로 파일 제어, 창 제어, 화상 처리, 문자 제어 등을 위한 인터페이스를 제공한다.

 

절차적 언어에서의 API

대부분의 절차적 언어에서 API는 특정한 작업을 수행할 함수들의 집합을 규정하며, 특정 소프트웨어 구성 요소와 상호작용할 수 있게 한다

 

Windows API

윈도우 API는 마이크로소프트 윈도우 운영체제들이 사용하는 API이다

C/C++프로그램에서 직접 운영체제의 상호작용할 수 있도록 만들어졌으며, 그보다 더 낮은 수준의 제어는 Null, dll을 사용한 낮은 수준의 DLL로 가능하다.

 

단일 유닉스 규격

단일 유닉스 규칙은 컴퓨터의 운영체제가 유닉스란 이름을 사용하기 위해 지켜야 하는 표준규격의 총칭이다.

SUS는 전기 전자기술자협회(IEEE)와 오픈 그룹의 표준화 작업 결과물에 바탕을 두고 있으며, 오스틴 그룹이 개발 및 유지 관리를 담당하고 있다

단일 유닉스 규칙 이전에 존재하였던 POSIX는 ISO/IECJTCI에서의 작업은 종료되어, 오스틴 그룹이 유지관리 작업에 관여하고 있다.

 

4가지 인터페이스 분류표

분류 설명
Base Definitions 표준 규칙을 기술하는데 사용되고 있는 정의와 규약 등의 목록과 이에 따르는 운영체제가 반드시 제공해야 할 C언어의 헤더 파일 목록
Shell and Utilities 유틸리티의 목록 및 셸의 내역
SYstem Interfaces 제공되어야 하는 시스템 호출 및 C라이브러리의 목록
Rationals 이상의 표준에 대한 해설

JAVA API

자바 API는 자바를 사용하여 쉽게 구현할 수 있도록 한 클래스 라이브러리의 집합이다.

자바라는 언어를 사용하여 사용자의 부담을 최소하하는 반면에 입출력, 화면 구성, 이비지, 네트워크와 같이 복잡하지만 필요한 클래스들을 미리 구현하여 사용자가 쉽게 구현하도록 하는 API이다. 이러한 자바 API는 하나의 커다란 클래스 계층구조로 설계되어 있다.

 

웹 API

웹 API는 웹 애플리케이션 개발에서 다른 서비스에 요청을 보내고 응답을 받기 위해 정의된 명세를 일컫는다.

예를 들어 블로그 API를 이용하면 블로그에 접속하지 않고도 다른 방법으로 글을 올릴 수 있다.

그 외에 우체국의 우편번호 API, 구글과 네이버의 지도 API등을 가져와서 사용하는 추세이다.

 

윈도우 API 서비스

API 서비스 설명
기본 서비스 이용할 수 있는 중요한 리소스를 윈도우 시스템에서 사용할 수 있게 도와준다
파일 시스템, 장치, 프로세스, 스레드, 오류처리와 같은 것들을 포함한다.
이러한 기능들은 32비트 윈도우의 경우 kernel32.dll에 상주한다
고급 서비스 부가 기능을 커널에 사용할 수 있게 도와준다
윈도 레지스트리, 시스템 종료/다시 시작, 윈도우 서비스 시작/중지/만들기, 사용자 계정 만들기와 같은 것들을 포함한다
커널모드 GDI 지원은 그래픽 드라이버와 직접 통신하는 win32k.sys가 제공한다.
그래픽 장치 인터페이스 GDI 출력되는 그래픽 콘텐츠를 모니터, 프린터, 기타 출력 장치에 전달하는 기능을 제공한다다모드에서의 32 윈도우의 경우 gdi32.dll에 상주한다다터널모드 GDI지원은 그래픽 드라이버와 직접 통신하는 win32k.sys가 제공한다.
사용자 인터페이스 화면 창뿐 아니라 단추와 스크롤바와 같은 가장 기본적인 컨트롤을 만들어 관리하고, 마우스와 키보드 입력을 받는 기능, 윈도우의 GUI와 연동하는 기능을 제공한다.
32비트 윈도우의 경우 user32.dll에 상주한다.
윈도우 XP 버전 이후로 기본 컨트롤은 공동 컨트롤과 함께 comctl32.dll에 상주한다.
공통 대화 상자 라이브러리 응용 프로그램에 파일 열기 및 저장, 색 및 글꼴 선택 등을 위한 표준 대화 상자를 제공한다 
32비트 윈도의 경우 comdlg.dll에 상주한다
이 라이브러리는 API의 사용자 인터페이스 집합에 들어있다.
윈도셀 윈도우 API의 구성 요소는 응용 프로그램이 운영체제 셀이 제공하는 기능에 접근하고 변경하고 강화할 수 있게 도와준다
32비트 윈도우의 경우 shell32.dll에 상주한다다셀 라이트웨이트 유틸리티 기능은 shlwapi.dll에 있다.
이 라이브러리는 API의 사용자 인터페이스 집합에 들어 있다
네트워크 서비스 다양한 네트워킹 기능을 운영체제에 제공한다
넷바이오스, 윈속, NetDDE, RPC 등을 포함한다
인터넷 익스플로러 웹 브라우저 또한 응용 프로그램에 자주 쓰이는 수많은 API를 노출하며 이러한 것들은 윈도우 API의 일부로 간주할 수 있다.
인터넷 익스플로러는 윈도 98 SE이후의 운영체제부터 포함되어 왔으며 윈도우 98 이후로 웹 관련 서비스를 제공하고 있다.
추가할 수 있는 웹 브라우저 컨트롤 : shdocvw.dll및 mshtml.dll에 포함한다.
URL모니터 서비스 : COM오브젝트를 응용 프로그램에 제공하는 urlmon.dll가 관할한다. 응용프로그램은 자체 URL, 핸들러를 제공할 수 있다.
다중 언어 및 국제 텍스트 지원 보조 라이브러리
DirectX변형 
XML 지원
윈도우 주소록에 접속

5) 서버 프로그램 구현 수행하기

세부 업무 프로세스를 기반으로 업무 프로그램을 구현한다

프로그램을 구현하기 위해 서버 영역과 화면 영역을 구현한다. 순서에 상관없이 구현을 해도 무방하다.

 

Back End

DTO/VO구현 -> SQL문 구현 -> DAO구현 -> Service 구현 -> Cotroller 구현 

 

Front End

화면 구현

 

업무 프로그램을 구현하기 위한 I/O 오브젝트(DTO/VO)를 정의한다

업무 프로그램을 구현하기 위한 Data를 준비한다

업무 프로그램을 구현하기 위한 SQL을 작성한다

데이터 접근 객체를 구현한다

서비스 클래스를 구현한다

Java시큐어 코딩 가이드에 의한 보안 취약성을 제거하는 코드를 구현한다

컨트롤러 클래스를 구현한다

 

03 서버 프로그램 테스트

1) 소프트웨어 테스트의 이해

소프트웨어 테스트의 개념

소프트웨어 테스트란 구현된 애플리케이션이나 시스템이 사용자의 요구사항에 만족되었는지 확인하기 위하여 기능 및 비기능 요소의 결함을 찾아내는 활동이다.

소프트웨어 테스트의 원칙

개발자가 자신이 개발한 프로그램 및 소스코드를 테스팅하지 않는다.

일반적으로 개발자가 자신이 개발한 소스코드에 대해서 자신이 테스팅을 할 경우 결하을 발견하는 것은 쉬운 일이 아니다.

효율적인 결함 제거 법칙 사용(낚시의 법칙, 파레토의 법칙)

효율적으로 결함을 발견, 가시화, 제거, 예방하는 순서를 통하여 정량적으로 관리할 수 있어야 한다.

낚시의 법칙 : 소프트웨어 제품의 결함도 특정 기능, 모듈, 라이브러리에서 결함이 많이 발견된다.

파레토의 법칙 : 소프트웨어 제품에서 발견되는 전체 결함의 80%는 소프트웨어 제품의 전체 기능 중 20%에 집중되어있다.

완벽한 소프트웨어 테스팅은 불가능하다.

단순한 애플리케이션이라도 테스트 케이스의 수는 무한대로 발생되기 때문에 완벽한 테스트는 불가능하다

테스트는 계획 단계부터 해야 한다

소프트웨어 테스트는 결함의 발견이 목적이긴 하지만 개발 초기 이전인 게획단계에서부터 할 수 있다면 결함을 예방할 수 있다.

살충제 패러독스

동일한 테스트 케이스로 반복 실행하면 더 이상 새로운 결함을 발견할 수 없으므로 주기적으로 테스트케이스를 점검하고 개선해야 한다.

오류-부재의 궤변

사용자의 요구사항을 만족하지 못한다면 오류를 발견하고 제거해도 품질이 높다고 말할 수 없다.

 

2) 소프트웨어 테스트의 명세

테스트 결과 정리

테스트가 완료되면 테스트 계획과 테스트 케이스 설계부터 단계별 테스트 시나리오, 테스트 결과까지 모두 포함된 문서를 일관성 있게 작성한다.

테스트 요약 문서

테스트 계획, 소요 비용, 테스트 결과에 의해 판단 가능한 대상 소프트웨어의 품질 상태를 포함한 요약 문서를 작성한다.

 

품질 상태

품질 상태는 품질 지표인 테스트 성공률, 발생한 결함의 수와 결함의 중요도, 테스트 커버리지 등이 포함된다.

테스트 결과서

테스트 결과서는 결함에 관련된 내용을 중점적으로 기록하며, 결함의 내용, 결함의 재현 순서를 상세하게 기록한다.

테스트 실행 절차 및 평가

단계별 테스트 종료 시 테스트 실행 절차를 리뷰하고 결과에 대한 평가를 수행하며, 그 결과에 따라 실행 절차를 최적화하여 다음 테스트에 적용한다.

 

3) 서버 프로그램 테스트 수행하기

단위 테스트 케이스를 작성한다

단위 테스트 방식을 결정한다.

단위 테스트의 범위를 결정한다.

단위 테스트의 방식과 범위에 따라 테스트 케이스를 작성한다.

작성된 단위 테스트 케이스를 내부 검토한다.

작성된 단위 테스트 케이스를 고객에게 승인을 획득했다.

 

테스트를 명세하기 위한 테스트 도구를 설정한다.

단위 테스트 도구를 실행한 후 테스트케이스를 생성한다.

테스트를 수행할 함수를 선택하고 Finish를 클릭한다.

테스트 구문을 작성한다.

테스트 도구를 실행한다.

테스트 결과를 명세화한다.

 

 

 

'Others > 자격증 공부' 카테고리의 다른 글

02-01 기본 문법 활용하기  (0) 2021.07.29
02-01 프로그래밍 언어 활용  (0) 2021.07.29
01-04 배치 프로그램 구현하기  (0) 2021.07.28
01-02 공통 모듈 구현하기  (0) 2021.07.27
01 서버 프로그램 구현  (0) 2021.07.20