1. 개발환경 구축하기
개발 하드웨어 환경
-
클라이언트(Client) 환경 : PC, 웹 브라우저, 스마트폰
-
서버(Server) 환경
종류 | 설명 |
웹 서버 | 클라이언트로부터 직접 요청을 받아 처리하는 서버, 저용량의 정적 파일들을 제공 |
웹 어플리케이션 서버 | 동적 서비스를 제공하기 위해 웹 서버로부터 요청을 받아 데이터 가공 작업을 수행하는 서버 |
데이터베이스 서버 | 데이터베이스와 이를 관리하는 DBMS를 운영하는 서버 |
파일 서버 | 서비스 제공을 위해 파일을 저장하고 공유하기 위한 파일 저장 서버 |
개발 소프트웨어 환경
-
시스템 소프트웨어 : 운영체제(OS), 웹 서버, WAS, DBMS 등
-
개발 소프트웨어
종류 | 설명 |
요구사항 관리도구 | 고객의 요구사항을 수집, 분석, 추적을 쉽게 할 수 있게 지원하는 도구 |
설계/모델링 도구 | UML(통합 모델링 언어)을 지원, 설계 및 모델링을 지원하는 도구 |
구현 도구 | 소프트웨어 언어를 통해 구현 및 개발을 지원하는 도구 |
빌드 도구 | 작성된 소스의 빌드 및 배포, 라이브러리 관리를 지원하는 도구 |
테스트 도구 | 모듈들이 요구사항에 적합하게 구현되었는지 테스트를 지원하는 도구 |
형상관리 도구 | 사출물들을 버전별로 관리하여 목표 시스템의 품질 향상을 지원하는 도구 |
형상관리(SCM : Software Configuration Management)
-
개요 : 소프트웨어 변경사항을 파악하고 제어하며, 적절히 변경되고 있는지에 대해 확인하여 해당 담당자에게 통보하는 작업
-
절차
-
형상 식별 : 형상관리 대상을 식별하여 추적이 용이하도록 하는 작업, 베이스라인의 기준을 정하는 활동
-
형상 통제 : 식별된 형상 항목의 변경 요구를 검토, 승인하여 베이스라인에 잘 반영될 수 있도록 조정하는 작업
-
형상 감시 : 베이스라인의 무결성을 평가하기 위해 확인, 검증 과정을 통해 공식적으로 승인하는 작업
-
형상 기록 : 형상의 식별, 통제, 감사 작업의 결과를 기록 및 관리하고 보고서를 작성하는 작업
-
2. 공통 모듈 구현하기
공통 모듈
-
개요 : 정보 시스템 구축 시 자주 사용하는 기능들로써 재사용이 가능하게 패키지로 제공하는 독립된 모듈을 의미
-
재사용(Reuse) : 목표 시스템의 개발 시간 및 비용 절감을 위해 기능들을 파악하고 재구성하여 시스템에 응용하기 위한 최적화 작업
-
재사용 규모
-
함수와 객체 재사용
-
컴포넌트 재사용
-
애플리케이션 재사용
-
-
-
컴포넌트 기반 개발(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) |
테스트 케이스 간의 의존성 |
-
테스트 프로세스
-
계획 및 제어
-
분석 및 설계
-
구현 및 실행
-
평가
-
완료
-
3. 서버 프로그램 구현하기
서버 개발 프레임워크
-
개요 : 네트워크 설정, 요청 및 응답 처리, 아키텍처 모델 구현 등을 손쉽게 처리할 수 있도록 클래스나 인터페이스를 제공하는 소프트웨어
-
종류
프레임워크 | 특징 |
Spling | JAVA 기반, 전자정부 표준 프레임워크의 기반 기술 |
Node.js | JavaScript 기반, 입·출력이 빈번한 애플리케이션에 적합 |
Django | Python 기반, 컴포넌트의 재사용과 플러그인화를 강조 |
Codeigniter | PHP 기반, 인터페이스가 간편하며 서버 자원을 적게 사용 |
Ruby on Rails | Ruby 기반, 테스트를 위한 웹 서버를 지원하며 신속한 개발이 가능 |
-
특징
-
모듈화(Modularity) : 캡슐화를 통해 모듈화를 강화, 변경에 따른 영향을 최소화함으로써 소프트웨어의 품질을 향상
-
재사용성(Reusability) : 재사용 가능한 모듈들을 제공함으로써 개발자의 생산성을 향상
-
확장성(Extensibility) : 다형성(Polymorphism)을 통한 인터페이스 확장이 가능
-
제어의 역흐름(Inversion of Control) : 객체들의 제어를 프레임워크에 넘김으로써 생산성을 향상
-
서버 개발 과정
-
DTO/VO 구현 : 데이터 교환을 위해 사용할 객체를 생성하는 과정
-
DTO(Data Access Object) : 데이터 교환을 위해 생성되는 객체
-
VO(Value Object) : DTO와 동일하지만 일기만 가능, 수정 불가
-
-
SQL문 구현 : XML 파일로 저장하여 관리, 중복 SQL문을 최소화하고 유지보수가 간편
-
DAO 구현 : 데이터베이스에 접근하고, SQL을 활용하여 데이터를 실제로 조작하는 코드 구현
-
DAO(Data Transfer Objcet) : DB에 접근하여 데이터를 조회, 생성, 수정, 삭제 작업을 수행하는 객체
-
-
Service 구현 : 사용자의 요청에 응답하기 위한 로직 구현
-
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 수행 시점을 알려줌 |
'2020 정보처리기사' 카테고리의 다른 글
[정보처리기사 실기] 화면 설계 (0) | 2020.07.07 |
---|---|
[정보처리기사 실기] 인터페이스 구현 (0) | 2020.07.07 |
[정보처리기사 실기] 통합 구현 (0) | 2020.06.29 |
[정보처리기사 실기] 데이터 입출력 구현 (0) | 2020.06.24 |
[정보처리기사 실기] 요구사항 확인 (0) | 2020.06.18 |