07.개발환경준비
개발환경 구축
개발환경을 구축하기 위해서는 해당 프로젝트의 목적과 구축설계에 대한 명확한 이해가
필요하며, 이에 맞는 하드웨어, 스프트웨어의 선정이 이루어져야한다.
개발언어의 선정 기준
적정성, 효율성, 이식성, 친밀성, 범용성
빌드도구 : Ant, Maven, Gradle, Jenkins
테스트 도구 : xUnit, Spring Test, JMeter
개발 하드웨어 환경
운영환경과 유사한 구조로 구성.
-클라이언트 환경 구성
서버 시스템에서 제공하는 서비스를 활용하기 위해 사용자와의 인터페이스를 제공하는
하드웨어.(PC, 핸드폰)
-서버환경 구성
1.애플리케이션 서버
-웹 서버 : 정적파일들을 제공하는 웹 서버 애플리케이션이 설치되는 하드웨어.
-웹 애플리케이션 서버 : 동적 웹 서비스를 제공하기 위해 미들웨어인 WAS와 서비스에
관련된 애플리케이션이 설치되는 하드웨어.
2.데이터베이스 서버
데이터베이스가 설치되는 하드웨어
3.파일 서버
파일 저장 하드웨어.
개발 소프트웨어 환경
운영환경과 유사한 구조로 구성.
시스템 소프트웨어
운영체제(OS, Operation System)
JVM(Java Virtual Machine) : Java관련 응용 프로그램을 가동하기 위한 인터프리터
Web Server(웹 서버 애플리케이션) 정적 웹 서비스를 수행하는 미들웨어.
WAS : HTTP를 통해 사용자 컴퓨터에서 애플리케이션을 수행해주는 미들웨어.
DBMS(DataBase Management System) : 다수의 사용자들이 데이터베이스 안에 데이터를
기록하거나 접근할 수 있도록 해주는 프로그램.
08.공통 모듈 구현
모듈화
하나의 큰 작업을 각 기능에 따라 실제로 개발할 수 있는 작은 단위로 나누는 것.
모듈 : 서브루틴, 하부시스템, 프로그램, 작업단위를 의미.
결합도
두 모듈간의 상호 의존도
내용 결합도(Content Coupling)
어떤 모듈을 호출하여 사용하고자 할 때 그 모듈의 내용을 미리 조사하여 알고 있지 않으면
사용할 수 없는 경우.
모듈 내부에 있는 변수나 기능을 다른 모듈에서 사용하는 것.
공통 결합도(Common Coupling)
모듈 밖 전역 변수를 참조.
외부 결합도(External Coupling)
extern으로 선언된 데이터를 참조.
제어 결합도(Control Coupling)
다른 모듈을 호출할 때 제어정보를 파라미터로 넘겨주는 경우(Flag(0,1),
Switch(on, off))
스탬프 결합도(Stamp Coupling)
Struct(구조체), 배열, 레코드 등을 매개 변수로 넘기는 것
자료 결합도(Data Coupling)
매개변수로 변수 하나만 주고 받는 것.
응집도
한 모듈 내에 있는 처리 요소들 사이의 기능적인 연관정도.
우연적 응집도(Coincidental Cohesion)
관계없는 것들이 모인 경우
논리적 응집도(Logical Cohesion)
유사한 성격
시간적 응집도(Temporal Cohesion)
특정 시간에 처리되어야 하는 것들이 모인 경우
절차적 응집도(Procedural Cohesion)
기능들을 순차적으로 수행할 경우
통신적 응집도(Communication Cohesion)
동일한 입력과 출력을 사용하여 다른 기능을 하는 활동들이 모인 경우.
순차적 응집도(Sequencial Cohesion)
한 활동으로부터 나온 출력값을 다른 활동의 입력값으로 사용하는 경우
기능적 응집도(Functional Cohesion)
모든 기능이 단일한 목적을 위해 수행되는 경우
구조적 설계 도구
구조도(Structuer Chart)
모듈간의 인터페이스를 계층 구조로 표현한 도형
사각형은 모듈, 백색원 화살표는 자료이동, 흑색원 화살표는 제어 흐름, 마름모는 선택,
곡선 화살표는 반복을 나타냄.
팬 인, 팬 아웃
HIPO
프로그램 논리의 문서화와 설계를 위해 도식적인 방법을 제공하며, 기능 표현 중심.
하향식 개발 기법.
가시적도표 : 시스템의 전체적인 흐름
총괄도표 : 입력, 처리, 출력에 대한 기능을 개략적으로 표현
세부도표 : 총괄도표의 내용을 구체적으로 표현.
N-S Chart(Box, Chapin)
논리 기술에 중점을 둔 도형식 표현 도구. 순차, 선택, 반복.
화살표나 GOTO문은 사용하지 않음.
Jackson Diagram
트리 구조의 다이어그램.
테스트케이스
요구 사항을 준수하는지 검증하기 위하여 테스트 조건, 입력값, 예상 출력값 및 수행한
결과 등의 테스트 조건을 명세한 것.
테스트케이스 구성요소
식별자, 테스트 항목, 입력 명세, 출력 명세, 환경 설정
테스트 프로세스
테스트 수행과 관련된 활동들이 의도된 테스트 목적과 조건을 달성할 수 있도록 도와주는 역활.
프로세스
개인이나 조직이 한 개 이상의 정보 자원의 입력을 통해 가치 있는 산출물을 제공하는
활동들의 집합.
프로세스 구성요소 : 프로세스 책임자, 프로세스 맵, 프로세스 성과지표(고객입장),
프로세스 조직.
프레임워크
소프트웨어 개발 프레임워크의 개념
재사용이 가능하도록 소프트웨어 구성에 필요한 기본 뼈대를 제공
프레임워크의 특징
모듈화(Modularity)
재사용성(Reusability)
확장성(Extensibility)
다형성을 통한 인터페이스 확장이 가능해 다양한 형태와 기능을 가진 애플리케이션
개발이 가능하다.
제어의 역흐름(Inversion of Control)
개발자가 관리하고 통제해야 하는 객체들의 제어를 프레임워크에 넘김으로써
생산성을 향상.
프레임워크의 종류
스프링 프레임워크, 전자정부 프레임워크, 닷넷 프레임워크.
데이터 저장 계층 또는 영속 계층
DAO(Data Access Object) : 추상 인터페이스를 제공하는 객체, 특정 데이터 조작
기능 제공
DTO(Data Transfer Object) : 데이터를 전송하는 객체
VO(Value Object) : 가변 클래스인 DTO와 다르게 getter(사용O, 수정X) 기능만 제공
소프트웨어 개발 보안
보안 취약점을 최소화하고 사이버 보안 위협에 대응할 수 있는 안전한 소프트웨어를 개발하기
위한 일련의 보안활동.
소프트웨어 개발 보안 가이드의 구성(JAVA 시큐어 코딩 가이드)
입력 데이터 검증 및 표현
프로그램 입력값에 대한 검증 누락 또는 부적절한 검증, 데이터의 잘못된 형식
지정으로 인해 발생할 수 있는 보안 약점
ex)SQL삽입, 자원삽입, XSS(크로스 사이트 스크립트)
예외처리
오류를 처리하지 않거나 불충분하게 처리하여 오류 정보에 중요 정보가 포함될 때
발생할 수 있는 보안 약점.
서버 개발 프레임워크
MVC패턴을 기반으로 개발
Spring - JAVA기반 프레임워크, 전자정부 표준 프레임워크.
Node.js - JavaScript 기반 프레임워크.
Django - Python 기반 프레임워크.
Codeigniter - PHP 기반 프레임워크
Ruby on Rails - Ruby 기반 프레임워크.
소프트웨어 테스트
사용자의 요구사항을 만족시키는지 확인학 위하여 기능 및 비기능 요소의 결함을 찾아내는 활동.
테스트 원칙
개발자가 자신이 개발한 프로그램 및 소스 코드를 테스팅하지 않는다.
결함집중(Defect Clustering) : 애플리케이션 결함의 대부분은 소수의 모듈에
집중되어 있다.
낚시의 법칙, 파레토법칙(전체 결함의 80%는 전체 모듈의 20%에 집중되어 있다.)
완벽한 소프트웨어 테스팅은 불가능하다.
테스트는 계획 단계부터 해야한다.
살충제패러독스(Pesticide Paradox) : 동일한 테스트케이스로 반복 실행하면 더 이상
새로운 결함을 발견할 수 없다.
오류-부재의 궤변(Absence of Errors Fallacy) : 요구사항을 만족하지 못한다면
오류가 없다고해도 품질이 높다고 할 수 없다.
배치프로그램(batch)
사용자와의 상호작용 없이 일련의 작업들을 작업단위로 묶어 정기적으로 반복수행하거나,
정해진 규칙에 따라 일괄적으로 처리하는 것.
배치프로그램의 필수요소
대용량 데이터
자동화 : 심각한 오류 상황 외에는 사용자으 ㅣ개입 없이 동작해야 한다.
견고함 : 유효하지 않은 데이터도 처리하여 비정상적인 중단이 없도록해야함.
안정성 : 어떤 문제가 생겼는지, 언제 발생했는지 추적할 수 있어야 한다.
성능
배치스케줄러 : 일괄처리를 위해 주기적으로 발생하거나 반복적으로 발생하는 작업을
지원하는 도구.