개발환경 구축
: 개발환경 구성 시 구현될 시스템 요구사항의 명확한 이해가 필요하다
: 개발 도구와 서버의 선정이 이루어져야 하고, 개발에 사용되는 도구들의 사용 편의성과, 성능, 라이선스를 확인한다
개발 도구의 분류
| 구분 | 설명 | 종류 |
| 빌드도구 | 작성한 코드의 빌드 및 배포를 수행하는 도구 각각의 구성요소와 모듈에 의한 의존성 관리 지원 |
Ant Maven Gradle |
| 구현 도구 | 개발자의 코드 작성과 디버깅, 수정 등과 같은 작업을 지원하는 도구 프로그램을 개발할 때 가장 많이 사용되는 도구 |
Eclipce Intellij Spring Tool Suite NetBeans Visual Studio |
| 테스트 도구 | 코드의 기능 검정과 전체의 품질을 높이기 위해 사용하는 도구 코드의 테스트, 테스트에 대한 계획, 수행 및 분석 등의 작업 기능 |
CVS Subversion Git |
| 형상 관리 도구 | 개발자들이 작성한 코드와 리소스 등 산출물에 대한 버전 관리를 위한 도구 프로젝트 진행 시 반드시 포함되는 도구 |
하드웨어 개발 환경
| 구분 | 설명 |
| 웹 서버 | HTTP를 이용한 요청/응답을 처리 웹 상의 정적 콘텐츠를 처리 WEB-WAS-DB의 3계층 구조를 실무에서 활용 |
| 웹 애플리케이션 서버 | 동적 콘텐츠를 처리하기 위해 사용 |
| 데이터베이스 서버 | 데이터의 수집, 저장을 위한 용도로 사용 |
| 파일 서버 | 파일 저장 하드웨어로 물리 저장 장치를 활용한 서버 |
WAS(Web Application Server)
: 사용자 요청 스레드를 처리하고, 데이터베이스에 접속하여 SQL 쿼리 문에 대한 결과 값을 반환하는 역할을 수항해는 서버이다
클라이언트 하드웨어 개발환경
| 구분 | 설명 |
| 클라이언트 프로그램 | 설치를 통해 사용자와 커뮤니케이션하는 프로그램 |
| 웹 브라우저 | 웹 서비스 형태로 서버에서 웹 애플리케이션 응답 시 브라우저를 통해 사용자와 커뮤니케이션 |
| 모바일 앱 | 모바일 디바이스에 설치되어 활용되는 애플리케이션 |
| 모바일 웹 | 웹 브라우저와 동일한 형태로 모바일상 웹 브라우저를 통해 서비스 제공 |
안드로이드
: 리눅스 커널을 기반으로 스마트폰을 위한 미들웨어와 사용자 인터페이스, 중요 애플리케이션이 포함된 구글이 개발한 운영체제이다
소프트웨어 개발 환경
: 개발을 위한 기본적인 소프트웨어 개발환경을 선택 및 구성한다
| 구분 | 설명 | 종류 |
| 운영체제 | 서버의 하드웨어를 사용자 관점에서 편리하고 유용하게 사용하기 위한 소프트웨어 | Windows Unix Linux |
| 미들웨어 | 컴퓨터와 컴퓨터 간의 연결을 쉽고 안전하게 할 수 있도록 해주고 이에 대한 관리를 도와주는 소프트웨어 자바 기반 환경에서 JVM을 설치하여 컨테이너로의 기능을 주로 이용 |
Weblogic Websphere Jeus Tomcat |
| DBMS | 사용자와 데이터베이스 사이에서 사용자의 요구에 따라 정보를 생성해주고, 데이터베이스를 관리해주는 소프트웨어 | Oracle MySQL MS-SQL ProstgreSQL |
JVM(JAVA Virtual Machine)
: 시스템 메모리를 관리하면서 자바 기반 애플리케이션을 위해 이식 가능한 실행 환경을 제공하는 소프트웨어이다
컨테이너(Container)
: JSP와 서블릿을 실행시킬 수 있는 소프트웨어이다
형상관리(Configuration Management)
: 소프트웨어 개발을 위한 전체 과정에서 발생하는 모든 항목의 변경 사항을 관리하기 위한 활동이다
: 소프트웨어 생명 주기 동안 형상 관리를 통해 산출물을 체계적으로 관리하여 소프트웨어의 가시성, 추적성, 무결성 등의 품질 보증을 보장할 수 있다
형상관리 목적
: 프로젝트 생명주기 동안 제품의 무결성과 변경에 대한 추적성을 확보할 수 있다
: 프로젝트 변경이 발생되었을 때 처리하는 메커니즘을 제공한다
: 대표적인 메커니즘으로 형상 관리대상 파악, 베이스라인 지정, 형상 관리, 접근제어 등이 있다
형상 통제
: 형상 항목의 버전 관리를 위해서 변경 여부와 변경 활동을 통제하는 활동이다
베이스라인(Baseline)
: 개발 과정의 각 단계의 산출물을 검토, 평가, 조정, 처리 등 변화를 통제하는 시점의 기준이다
형상 관리 절차
| 절차 | 설명 |
| 형상 식별 | 형상 관리 대상을 정의 및 식별하는 활동 추적성 부여를 위해 ID와 관리번호를 부여 변경 관련 이슈 발생 시 ID와 관리번호를 이용하여 추적 |
| 형상 통제 | 형상 항목의 버전 관리를 위한 형상통제위원회 운영 변경요구 관리, 변경제어, 형상 관리 등 통제 지원 베이스라인에 대한 관리 및 형상 통제 수행 가능 |
| 형상 감사 | 소프트웨어 베이스라인의 무결성 평가 베이스라인 변셩 시 요구사항과 일치 여부 검토 |
| 형상 기록 | 소프트웨어 형상 및 변경관리에 대한 각종 수행결과를 기록 형상결과 보고서 작성 |
소프트웨어 형상 관리 도구 유형
| 형상 관리 도구 유형 | 설명 |
| 공유 폴더 방식(RCS, SCCS) | : 매일 개발이 완료된 파일은 약속된 위치의 공유 폴더에 복사하는 방식 : 담당자 한 명이 매일 공유 폴더의 파일을 자기 PC로 복사하고 컴파일하여 에러 확인과 정상 동작 여부 확인 |
| 클라이언트/서버 방식(CVS, SVN) | 중앙에 버전 관리 시스템을 항시 동작시키는 방식 개발자들의 현재 작업 내용과 이전 작업내용 추적에 용이 서로 다른 개발자가 같은 파일을 작업했을 때 경고 메시지 출력 |
| 분산 저장소 방식(Git 등) | 로컬 저장소와 원격 저장소로 분리되어 분산 저장하는 방식 중앙의 저장소에서 로컬 파일을 복사한 순간 개발자 자신만의 로컬 저장소에 생성 개발 완료된 파일을 수정한 다음 로컬 저장소에 우선적으로 커밋한 이후, 다시 원격 저장소에 반영하는 방식 |
소프트웨어 형상 관리 도구별 특징
| 형상 관리 도구 | 설명 |
| CVS(Concurrent Versions System) | 서버와 클라이언트로 구성되어있고, 다수의 인원이 동시에 범용적인 운영체제로 접근 가능한 형상 관리 도구 |
| SVN(Subversion) | 하나의 서버에서 소스를 쉽고 유용하게 관리할 수 있게 도와주는 도구 저장소를 만들어 그곳에 소스를 저장해 소스 중복이나 여러 문제를 해결하기 위한 도구 |
| RCS(Revision Control System) | CVS와 달리 소스 파일의 수정을 한 사람만으로 제한하여 다수의 사람이 파일의 수정을 동시에 할 수 없도록 파일 잠금 방식으로 형상을 관리하는 도구 |
| Bitkeeper | SVN과 비슷한 중앙 통제 방식으로 대규모 프로젝트에서 빠른 속도를 내도록 개발된 형상 관리 도구 |
| Git | Git의 속도에 중점을 둔 분산형 버전 관리 시스템이며, 대형 프로젝트에서 효과적이고 유용 Git의 커밋 동작은 로컬 저장소에서 이루어지고, 푸시라는 동작으로 원격 저장소에 반영 로컬 저장소에서 작업이 이루어져 매우 빠른 응답을 받을 수 있음 Git의 작업 폴더는 전체 기록과 각 기록을 추적할 수 있는 정보를 포함하는 완전한 형태의 저장소 |
| Clear Case | 복수 서버, 복수 클라이언트 구조이며, 서버가 부족할 때 필요한 서버를 하나씩 추가하여 확장성을 기할 수 있음 |
재사용(Reuse)
: 목표 시스템의 개발 시간 및 비용 절감을 위하여 검증된 기능을 파악하고 재구성하여 시스템에 응용하기 위한 최적화 작업이다.
재사용의 종류
| 구분 | 설명 |
| 재공학(ReEngineering) | 기존 소프트웨어를 버리지 않고 기능을 개선시키거나 기능을 새로운 소프트웨어로 재활용하는 소프트웨어 재사용 기법 재공학의 장점으로는 위험부담 감소, 비용 절감, 개발 기간 단축, 시스템 명세의 오류억제가 있음 |
| 재개발(ReDevelopment) | 기존 시스템 내용을 참조하여 완전히 새로운 시스템을 개발, 기존 시스템에 새로운 기능을 추가, 기존 시스템의 기능을 변경하는 기법 |
재사용 규모에 따른 분류
| 유형 | 설명 |
| 함수와 객체 재사용 | 클래스나 함수 단위로 구현한 소스 코드를 재사용 |
| 컴포넌트 재사용 | 컴포넌트 자체에 대한 수정 없이 인터페이스를 통해 통신하는 방식으로 재사용함 |
| 애플리케이션 재사용 | 공통기능을 제공하는 애플리케이션과 기능을 공유하여 재사용 |
컴포넌트(Component)
: 특정한 기능을 수행하기 위해 독립적으로 개발되어 보급하고, 다른 부품과 조립되어 응용시스템을 구축하기 위해 사용되는 소프트웨어 프로그램이다.
모듈(Module)
: 하나의 완전한 기능을 수행할 수 있는 독립된 실체이다
모듈의 특징
: 각각의 모듈은 상대적으로 독립성을 가지고 있다
: 모듈 내부에는 그 모듈을 하나로 통합하는 수많은 조합이 존재할 수 있다
: 모듈은 단독으로 컴파일할 수 있으며, 재사용할 수 있다
: 독립성이 높은 모듈일수록 모듈 수정 시에도 다른 모듈들에게는 영향을 거의 미치지 않고, 오류 발생 시에도 쉽게 해결할 수 있다
: 모듈의 독립성은 결합도와 응집도에 의해 측정되며, 독립성을 높이려면 모듈의 결합도는 약하게, 응집도는 강하게, 모듈의 크기는 작게 만들어야 한다
모듈화(Modularization)
: 소프트웨어의 성능을 향상시키거나 복잡한 시스템의 수정, 재사용, 유지 관리 등이 용이하도록 기능 단위의 모듈로 분해하는 설계 및 구현 기법이다.
모듈화기법
| 기법 | 설명 |
| 루틴(Routine) | 소프트웨어에서 특정 동작을 수행하는 일련의 코드로 기능을 가진 명령들의 모임 |
| 메인 루틴(Main Routine) | 프로그램의 주요한 부분이며, 전체의 개략적인 동작 절차를 표시하도록 만들어진 루틴 메인 루틴은 서브 루틴을 호출 |
| 서브 루틴(Subroutine) | 메인 루틴에 의해 필요할 때마다 호출되는 루틴 |
공통 모듈 구현
: 소프트웨어 개발에 있어 기능을 분할하고 추상화하여 성능을 향상시키고 유지보수를 효과적으로 하기 위한 공통 컴포넌트 구현 기법이다
: 모듈 간의 결합도는 줄이고, 응집도는 높인 공통 모듈 구현을 권장하고 있다
추상화(Abstraction)
: 공통의 속성이나 기능을 묶어 이름을 붙인 것을 의미한다.
공통모듈(Common Module)
: 전체 프로그램의 기능 중 특정 기능을 처리할 수 있는 실행 코드이다.
응집도(Cohesion)
: 모듈의 독립성을 나타내는 정도로, 모듈 내부 구성요소 간 연관 정도이다
: 하나의 모듈은 하나의 기능을 수행할수록 응집도가 높다
응집도 유형
| 유형 | 설명 |
| 우연적 응집도(Coinidental Cohesion) | 모듈 내부의 각 구성요소가 연관이 없을 경우의 응집도 |
| 논리적 응집도(Logical Cohesion) | 유사한 성격을 갖거나 특정 형태로 분류되는 처리 요소들이 한 모듈에서 처리되는 경우의 응집도 |
| 시간적 응집도(Temporal Cohesion) | 연관된 기능이라기보다는 특정 시간에 처리해야 하는 활동들을 한 모듈에 처리할 경우의 응집도 |
| 절차적 응집도(Procedural Cohesion) | 모듈이 다수의 관련 기능을 가질 때 모듈 안의 구성요소들이 그 기능을 순차적으로 수행할 경우의 응집도 |
| 통신적 응집도(Communication Cohesion) | 동일한 입력과 출력을 사용하여 다른 기능을 수행하는 활동들이 모여 있을 경우의 응집도 |
| 순차적 응집도(Sequential Cohesion) | 모듈 내에서 한 활동으로부터 나온 출력값이 다른 활동이 사용할 경우의 응집도 |
| 기능적 응집도(Functional Cohesion) | 모듈 내부의 모든 기능이 단일한 목적을 위해 수행되는 경우의 응집도 |
결합도(Coupling)
: 모듈 내부가 아닌 외부의 모듈과의 연관도 또는 모듈 간의 상호의존성이다
: 소프트웨어 구조에서 모듈 간의 관련성을 측정하는 척도이다
결합도 유형
| 유형 | 설명 |
| 내용 결합도(Content Coupling) | 다른 모듈 내부에 있는 변수나 기능을 다른 모듈에서 사용하는 경우의 결합도 하나의 모듈이 직접적으로 다른 모듈의 내용을 참조할 때 두 모듈은 내용적으로 결합되어 있는 경우의 결합도 |
| 공통 결합도(Common Coupling) | 파라미터가 아닌 모듈 밖에 선언되어 있는 전역 변수를 참조하고 전역 변수를 갱신하는 식으로 상호 작용을 하는 경우의 결합도 공유되는 공통 데이터 영역을 여러 모듈이 사용할 때의 결합도 |
| 외부 결합도(External Coupling) | 두 개의 모듈이 외부에서 도입된 데이터 포맷, 통신 프로토콜, 또는 다바이스 인터페이스를 공유할 경우의 응집도 외부 모듈에서 선언한 데이터를 외부의 다른 모듈에서 참조할 때의 결합도 |
| 제어 결합도(Control Coupling) | 어떤 모듈이 다른 모듈의 내부 논리 조직을 제어하기 위한 목적으로 제어신호를 이용하여 통신하는 경우의 응집도 하위 모듈에서 상위 모듈로 제어 신호가 이동하여 상위 모듈에게 처리 명령을 부여하는 권리 전도 현상이 발생하는 결합도 |
| 스탬프 결합도(Stemp Coupling) | 모듈 간의 인터페이스로 배열이나 객체, 구조 등이 전달되는 경우의 결합도 두 모듈이 동일한 자료 구조를 조회하는 경우의 결합도이며, 자료 구조의 어떠한 변화는 모든 모듈에 영향을 미치게 됨 |
| 자료 결합도(Data Coupling) | 모듈 간의 인터페이스로 전달되는 파라미터를 통해서만 모듈 간의 상호 작용이 일어나는 경우의 결합도 한 모듈의 내용을 변경하더라도 다른 모듈에는 영향을 미치지 않는 상태로 가장 바람직한 결합도 |
공통 모듈 구현 대상
: 공통 모듈은 화면 모듈, 화면에서 입력받은 데이터를 처리를 위한 서비스 컴포넌트, 비즈니스 트랜잭션 컴포넌트 등이 있다
: 통합 구현에서 공통 모듈 구현은 상세설계된 공통 모듈, 환경변수를 실제 프로그래밍 언어로 구현한다
팬인(Fan-In) 및 팬아웃(Fan-Out)
: 소프트웨어의 구성요소인 모듈을 계층적으로 분석하기 위해서 팬인, 팬아웃을 활용한다
: 팬인과 팬아웃 분석을 통하여 시스템의 복잡도를 측정할 수 있다
| 구분 | 팬인(Fan-In) | 팬아웃(Fan-Out) |
| 개념 | 어떤 모듈을 제어(호출)하는 모듈의 수 | 어떤 모듈에 의해 제어(호출)되는 모듈의 수 |
| 모듈 숫자 계산 | 모듈 자신을 기준으로 모듈이 들어오면 팬인 | 모듈 자신을 기준으로 모듈에서 나가면 팬아웃 |
| 고려사항 | 팬인이 높으면 재사용 측면에서 설계가 잘되었지만, 단일 장애점 발생 가능 팬인이 높으면 관리 비용 및 테스트 비용 증가 |
팬아웃이 높을 경우 불필요한 모듈 호출 여부 검토 필요 팬아웃이 높을 경우는 단순화 여부 검토 |
시스템 복잡도를 최적화하기 위해서는 팬인은 높게, 팬아웃은 낮게 설계해야 한다
공통 모듈 테스트
: 공통 모듈 테스트를 위해 IDE(Integrated Development Environment) 도구를 활용하여 개별 공통 모듈에 대한 디버깅을 수행한다
: 공통 모듈테스트는 화이트박스 기법을 활용한다
: 대표적인 단위 테스트 도구인 xUnit을 활용하여 테스트 코드를 구현한다
화이트 박스 기법
: 프로그램의 로직을 이해하고, 내부 구조와 동작을 검사하는 소프트웨어 테스트 방식이다
공통 모듈 테스트 종류
| 종류 | 설명 |
| jUnit | 자바 프로그래밍 언어용 단위 테스트 도구 |
| CppUnit | 자바의 jUnit을 C++로 구현한 단위 테스트 도구 |
| HttpUnit | 웹 브라우저 없이 웹사이트 테스트를 수행하는 단위 테스트 도구 |
배치 프로그램(Batch Program)
: 사용자와의 상호 작용 없이 일련의 작업들을 작업 단위로 묶어 정기적으로 반복을 수행하거나 정해진 규칙에 따라 일괄 처리하는 방법이다.
배치 프로그램 유형
| 유형 | 설명 |
| 이벤트 배치 | 사전에 정의해 둔 조건 충족 시 자동을 실행 |
| 온디맨드 배치 | 사용자의 명시적 요구가 있을 때마다 실행 |
| 정기 배치 | 정해진 시점(주로 야간)에 정기적으로 실행 |
배치 스케줄러
: 일괄 처리(Batch Processing)을 위해 주기적으로 발생하거나 반복적으로 발생하는 작업을 지원하는 도구이다.
배치 스케줄러의 종류
| 설명 | 설명 |
| 스프링 배치(Spring Batch) | 스프링 프레임워크의 DI, AOP, 서비스 추상화 등 스프링 프레임워크의 3대 요소를 모두 사용할 수 있는 대용량 처리를 제공하는 스케줄러 배치 애플리케이션 |
| 쿼츠 스케줄러(Quartz Scheduler) | 스프링 프레임워크에 플러그인되어 수행하는 작업과 실행 스케줄을 정의하는 트리거를 분리하여 유연성을 제공하는 오픈 소스 기반 스케줄러 |
쿼츠
: 대용량 데이터 배치 처리에 대한 기능을 지원하지 않는다. 배치 또한 쿼리의 다양한 스케줄 기능을 지원하지 않는다
Cron 표현식
| 순서 | 필드 이름 | 허용 값 |
| 1 | 분(Minutes) | 0~59, 특수문자 |
| 2 | 시간(Hours) | 0~23, 특수문자 |
| 3 | 일(Day of Month) | 1~31, 특수문자 |
| 4 | 월(Months) | 1~12, JAN~DEC, 특수문자 |
| 5 | 요일(Day of Week) | 1~7, SUN-SAT, 특수문자 |
| 6 | 연도(Year) (생략 가능) | 1970~2099, 특수문자 |
쿼츠 크론 표현식
| 순서 | 필드 이름 | 허용 값 |
| 1 | 초(Seconds) | 0~59, 특수문자 |
| 2 | 분(Minutes) | 0~59, 특수문자 |
| 3 | 시간(Hours) | 0~23, 특수문자 |
| 4 | 일(Day of Month) | 1~31, 특수문자 |
| 5 | 월(Months) | 1~12, JAN~DEC, 특수문자 |
| 6 | 요일(Day of Week) | 1~7, SUN-SAT, 특수문자 |
| 7 | 연도(Year) (생략 가능) | 1970~2099, 특수문자 |
Cron 표현식 특수문자 의미
| 기호 | 의미 |
| * | 모든 수 |
| ? | 해당 항목을 미사용 |
| - | 기간 설정 |
| . | 특정 기간 설정 |
| / | 시작시간과 반복간격 설정 |
| L | 마지막 기간에 동작 |
| W | 가장 가까운 평일에 동작 |
| # | 몇 번째 주, 요일 설정 |
| 10. 애플리케이션 테스트 관리 (0) | 2023.04.10 |
|---|---|
| 9. 소프트웨어 개발 보안 구축 (0) | 2023.04.08 |
| 7. SQL 활용 및 최적화 (0) | 2023.04.07 |
| 6. 응용 SQL 작성하기 (0) | 2023.04.07 |
| 5. 데이터베이스 기본 (0) | 2023.04.06 |