01 개발환경 구축
개발 환경 구축은 응용 소프트웨어 개발을 위해 개발 프로젝트를 이해하고 소프트웨어 및 하드웨어 장비를 구축하는 것을 의미한다.
📌 프로그램 개발을 위한 도구
빌드 도구, 구현 도구, 테스트 도구, 형상 관리 도구(산출물에 대한 버전 관리 도구)
서버 하드웨어 개발 환경
종류 | 특징 |
웹 서버(Web Server) | - 클라이언트로부터 직접 요청을 받아 처리함 - 저용량의 정적 파일들을 제공함 |
웹 애플리케이션 서버(WAS; Web Application Server) | 동적 서비스를 제공하거나, 웹 서버와 데이터베이스 서버 또는 웹 서버와 파일 서버 사이에서 인터페이스 역할을 수행함 |
데이터베이스 서버(DB Server) | 데이터베이스와 이를 관리하는 DBMS를 운영함 |
파일 서버(File Server) | 데이터베이스에 저장하기에는 비효율적이거나, 서비스 제공을 목적으로 유지하는 파일들을 저장함 |
소프트웨어 환경
소프트웨어 환경은 클라이언트와 서버 운영을 위한 시스템 소프트웨어와 개발에 사용되는 개발 소프트웨어로 구성된다.
종류 | 특징 |
요구사항 관리 도구 | 요구사항의 수집과 분석, 추적 등을 편리하게 도와주는 소프트웨어 |
설계/모델링 도구 | UML을 지원하며, 개발의 전 과정에서 설계 및 모델링을 도와주는 소프트웨어 |
구현 도구 | 개발 언어를 통해 애플리케이션의 실제 구현을 지원하는 소프트웨어 |
빌드 도구 | 구현 도구를 통해 애플리케이션의 실제 구현을 지원하는 소프트웨어 |
테스트 도구 | 모듈들이 요구사항에 적합하게 구현되었는지 테스트하는 소프트웨어 |
형상 관리 도구 | 산출물들을 버전별로 관리하여 품질 향상을 지원하는 소프트웨어 |
형상관리(Configuration Management)
소프트웨어 개발을 위한 전체 과정에서 발생하는 모든 항목의 변경 사항을 관리하기 위한 활동
형상관리의 절차 (식통감기)
- 형상 식별: 형상 관리 대상 정의 및 식별
- 형상 통제: 형상 항목 버전 관리를 위해 변경 여부와 변경 활동 통제
- 형상 감사: 소프트웨어 베이스라인의 무결성 평가, 베이스라인 변경 시 요구사항과 일치하는 지 검토
- 형상 기록: 형상 및 변경관리에 대한 각종 수행결과 기록
소프트웨어 형상 관리도구
- 공유 폴더 방식(RCS, SCCS): 매일 개발이 완료된 파일은 약속된 위치의 공유 폴더에 복사하는 방식
- 클라이언트/서버 방식(CVS, SVN): 중앙에 버전 관리 시스템을 향시 동작시키는 방식
- 분산 저장소 방식(Git): 로컬 저장소와 원격 저장소로 분리되어 분산 저장하는 방식
≫ CVS: 서버와 클라이언트와 구성, 다수의 인원이 동시에 운영체제로 접근 가능
≫ SVN(Subversion): 하나의 서버에서 소스를 쉽고 유용하게 관리할 수 있게 도와줌
≫ RCS: 소스 파일의 수정을 한 사람으로 제한
≫ BitKeeper: SVN과 비슷, 대규모 프로젝트에서 빠른 속도 내도록 개발된 형상 관리 도구
아키텍처 패턴(Patterns)
아키텍처 패턴은 아키텍처를 설계할 때 참조할 수 있는 전형적인 해결 방식 또는 예제를 의미한다.
📍 레이어 패턴: 시스템을 계층으로 구분하여 구성하는 고전적 방법의 패턴
📍 클라이언트-서버 패턴: 하나의 서버 컴포넌트와 다수의 클라이언트 컴포넌트로 구성되는 패턴
📍 파이프-필터 패턴: 데이터 스트림 절차의 각 단계를 필터로 캡슐화하여 파이프를 통해 전송하는 패턴이다.
📍 모델-뷰-컨트롤러 패턴: 서브시스템을 모델, 뷰, 컨트롤러로 구조화하는 패턴이다.
📔 객체지향(Object-Oriented)
객체지향은 소프트웨어의 각 요소들을 객체(Object)로 만든 후, 객체들을 조립해서 소프트웨어를 개발하는 기법이다.
소프트웨어의 재사용 및 확장이 용이하여 고품질의 소프트웨어를 빠르게 개발할 수 있고 유지보수가 쉽다.
객체지향의 구성 요소
- 객체(Object): 데이터와 이를 처리하기 위한 함수를 묶어 놓은 소프트웨어 모듈이다.
- 클래스(Class): 공통된 속성과 연산을 갖는 객체의 집합이다.
- 메시지(Message): 객체들 간의 상호작용에 사용되는 수단으로, 객체의 동작이나 연산을 일으키는 외부의 요구 사항이다.
객체지향의 특징
- 캡슐화(Encapsulation): 외부에서의 접근을 제한하기 위해 인터페이스를 제외한 세부 내용을 은닉하는 것
- 상속(Inheritance): 상위 클래스의 모든 속성과 연산을 하위 클래스가 물려받는 것이다.
- 다형성(Polymorphism): 하나의 메시지에 대해 각각의 객체가 가지고 있는 고유한 방법으로 응답할 수 있는 능력
- 연관성(Relationship): 두 개 이상의 객체들이 상호 참조하는 관계
객체지향 분석(OOA; Object Oriented Analysis)
객체지향 분석은 사용자의 요구사항과 관련된 객체, 속성, 연산, 관계 등을 정의하여 모델링하는 작업이다.
종류 | 내용 |
Rumbaugh(럼바우) 방법 | 분석 활동을 객체 모델, 동적 모델, 기능 모델로 나누어 수행함 |
Boochi(부치) 방법 | - 미시적 개발 프로세스와 거시적 개발 프로세스를 모두 사용함 - 클래스와 객체들을 분석 및 식별하고 클래스의 속성와 연산을 정의함 |
Jacobson 방법 | 유스케이스(Use Case)를 강조하여 사용함 |
Coad와 Yourdon 방법 | E-R 다이어그램을 사용하여 객체의 행위를 모델링함 |
Wirfs-Brock 방법 | 분석과 설계 간의 구분이 없고 고객 명세서를 평가해서 설계 작업까지 연속적으로 수행함 |
럼바우(Rumbaugh)의 분석 기법
럼바우의 분석 기법은 모든 소프트웨어 구성 요소를 그래픽 표기법을 이용하여 모델링하는 기법이다.
≫ 객체 모델링(Object Modeling): 정보 모델링이라고도 하며, 시스템에서 요구되는 객체들을 찾아내어 속성과 연산 식별 및 객체들 간의 관계를 규정하여 객체 다이어그램으로 표시하는 것
≫ 동적 모델링(Dynamic Modeling): 상태 다이어그램을 이용하여 시간의 흐름에 따른 객체들 간의 제어, 흐름, 상호 작용, 동작 수선 등의 동적인 행위를 표현하는 모델링
≫ 기능 모델링(Functional Modeling): 자료 흐름도(DFD)를 이용하여 다수의 프로세스들 간의 자료 흐름을 중심으로 처리 과정을 표현한 모델링
객체지향 설계원칙(SOLID)
변경이나 확장에 유연한 시스템을 설계하기 위해 지켜야할 원칙
- 단일 책임 원칙(SRP): 객체는 단 하나의 책임만 가져야 한다.
- 개방-폐쇄 원칙(OCP): 기존의 코드를 변경하지 않고 기능을 추가할 수 있도록 설계해야 한다는 원칙
- 리스코프 치환 원칙(LSP): 자식 클래스는 최소한 부모 클래스의 기능은 수행할 수 있어야 한다는 원칙
- 인터페이스 분리 원칙(ISP): 자신이 사용하지 않는 인터페이스와 의존 관계를 맺거나 영향을 받지 않아야 한다는 원칙
- 의존 역전 원칙(DIP): 의존 관계 성립 시 추상성이 높은 클래스와 의존 관계를 맺어야 한다는 원칙
02 공통 모듈 구현
모듈(Module): 하나의 완전한 기능을 수행할 수 있는 독립된 실체
→ 모듈은 모듈화를 통해 분리된 시스템의 각 기능으로, 기능적 독립성은 소프트웨어를 구성하는 각 모듈의 기능이 서로 독립됨을 의미한다.
결합도와 응집도에 의해 측정된다.
모듈화(Modularity): 소프트웨어의 성능을 향상시키거나 시스템의 디버깅, 시험, 통합 및 수정을 용이하도록 시스템을 분해 기법
모듈화 기법
🪐 루틴: 소프트웨어에서 특정 동작을 수행하는 일련의 코드로 기능을 가진 명령어들의 모임
메인 루틴, 서브 루틴
단위 모듈
단위 모듈은 소프트웨어 구현에 필요한 여러 동작 중 한 가지 동작을 수행하는 기능을 모듈로 구현한 것이다.
IPC(Inter-Process Communication)
- IPC는 모듈 간 통신 방식을 구현하기 위해 사용되는 대표적인 프로그래밍 인터페이스 집합이다.
- 복수의 프로세스를 수행하며 이뤄지는 프로세스 간 통신까지 구현이 가능하다.
메소드 | 특징 |
Shared Memory | 공유 가능한 메모리를 구성하여 다수의 프로세스가 통신하는 방식 |
Socket | 네트워크 소켓을 이용하여 네트워크를 경유하는 프로세스 간에 통신하는 방식 |
Semaphores | 공유 자원에 대한 접근 제어를 통해 통신하는 방식 |
Pipes&named Pipes | 'Pipe'라고 불리는 선입선출 형태로 구성된 메모리를 여러 프로세스가 공유하여 통신하는 방식 - Pipe는 하나의 프로세스가 이용 중이라면 다른 프로세스는 접근할 수 없음 |
Message Queueing | 메시지가 발생하면 이를 전달하는 방식으로 통신하는 방식 |
응집도(Cohesion)
모듈의 독립성을 나타내는 정도, 모듈 내부 구성요소 간 연관정도
응집도가 강할수록 품질이 높고, 약할수록 품질이 낮다.
기능적 응집도 | 순차적 응집도 | 통신적 응집도 | 절차적 응집도 | 시간적 응집도 | 논리적 응집도 | 우연적 응집도 |
응집도 유형(우논시절 통신기)
1. 우연적 응집도: 모듈 내부의 구성요소가 연관이 없는 경우
2. 논리적 응집도: 유사한 성격, 특정 형태로 분류되는 처리 요소들이 한 모듈에서 처리되는 경우
3. 시간적 응집도: 특정 시간에 처리되어야 하는 활동들
4. 절차적 응집도: 모듈이 다수의 관련 기능을 가지고 모듈 안 구성요소들이 그 기능을 순차적으로 수행할 경우
5. 통신적 응집도: 동일한 입력과 출력을 사용해 다른 기능을 수행하는 활동들의 모임
6. 순차적 응집도: 모듈내 한 활동으로부터 나온 출력값을 다른 활동이 사용할 경우
7. 기능적 응집도: 모듈 내부의 모든 기능이 단일한 목적을 위해 수행되는 경우
결합도(Coupling)
모듈 내부가 아닌 외부 모듈과의 연관도, 모듈 간 상호의존성, 모듈간 관련성
결합도는 모듈 간에 상호 의존하는 정도 또는 두 모듈 사이의 연관 관계이다.
결합도가 약할수록 품질이 높고, 강할수록 품질이 낮다.
내용 결합도 | 공통 결합도 | 외부 결합도 | 제어 결합도 | 스탬프 결합도 | 자료 결합도 |
결합도 유형(내공외제스자)
1. 내용 결합도: 다른 모듈 내부에 있는 변수나 기능을 다른 모듈에서 사용하는 경우
2. 공통 결합도: 파라미터가 아닌 모듈 밖에 선언되어 있는 전역 변수를 참조하고 갱신하는 식으로 상호작용하는 경우
3. 외부 결합도: 두 개의 모듈이 외부에서 도입된 데이터 포맷, 통신 프로토콜, 또는 디바이스 인터페이스를 공유할 경우
4. 제어 결합도: 어떻게 처리해야한다는 제어요소가 전달되는 경우
5. 스탬트 결합도: 모듈 간 인터페이스로 배열이나 객체, 구조 등이 전달되는 경우
6. 자료 결합도: 모듈 간 인터페이스로 전달되는 파라미터를 통해서만 모듈 간 상호작용이 일어나는 경우
공통 모듈(또는 서버 프로그램)의 구현 절차
공통 모듈은 여러 프로그램에서 공통으로 사용할 수 있는 모듈이다.
공통 모듈 명세 기법의 종류
명세 기법 | 내용 |
정확성(Correctness) | 시스템 구현 시 해당 기능이 필요하다는 것을 알 수 있도록 정확히 작성함 |
명확성(Clarity) | 해당 기능을 이해할 때 중의적으로 해석되지 않도록 명확하게 작성함 |
완전성(Completeness) | 시스템 구현을 위해 필요한 모든 것을 기술함 |
일관성(Consistency) | 공통 기능들 간 상호 충돌이 발생하지 않도록 작성함 |
추적성(Traceability) | 기능에 대한 요구사항의 출처, 관련 시스템 등의 관계를 파악할 수 있도록 작성함 |
서버 개발 프레임워크
서버 개발 프레임워크는 서버 프로그램 개발 시 다양한 네트워크 설정, 요청 및 응답 처리, 아키텍처 모델 구현 등을 손쉽게 처리할 수 있도록 클래스나 인터페이스를 제공하는 소프트웨어를 의미한다.
서버 개발 프레임워크의 대부분은 모델-뷰-컨트롤러(MVC) 패턴을 기반으로 개발되었다.
DTO/VO → SQL → DAO → Service → Controller → View
과정 | 내용 |
DTO/VO 구현 | - 데이터 교환을 위해 사용할 객체를 만드는 과정 - 송, 수신할 데이터의 자료형(Data Type)에 맞는 변수 및 객체를 생성함 |
SQL 구현 | - 데이터의 삽입, 변경, 삭제 등의 작업을 수행할 SQL문을 생성하는 과정 - SQL문은 소스 코드 내에 직접 입력, 또는 별도의 XML 파일로 관리함 |
DAO 구현 | 데이터베이스에 접근하고, SQL을 활용하여 데이터를 실제로 조작하는 코드를 구현하는 과정 |
Service 구현 | 사용자의 요청에 응답하기 위한 로직을 구현하는 과정 |
Controller 구현 | 사용자의 요청에 적절한 서비스를 호출하여, 그 결과를 사용자에게 반환하는 코드를 구현하는 과정 |
팬인(Fan-In) 과 팬아웃(Fan-Out)
팬인: 어떤 모듈을 제어하는 모듈의 수/모듈 자신을 기준으로 들어오면 팬인
→ 팬인이 높다는 것은 재사용 측면에서 설계가 잘 되어있다고 볼 수 있다./팬인이 높은 경우 단일 장애점이 발생할 수 있으므로 중점적인 관리 및 테스트가 필요하다.
팬아웃: 어떤 모듈에 의해 제어되는 모듈의 수/모듈 자신을 기준으로 나가면 팬아웃
JUnit: 자바 프로그래밍 언어용 단위 테스트 도구
03 배치 프로그램 구현
배치 프로그램
일련의 작업들을 정기적으로 반복 수행하거나 정해진 규칙에 따라 일괄 처리하는 방법으로,
배치 프로그램의 유형에는: 이벤트 배치, 온디맨드 배치, 정기 배치 등이 있다.
배치 프로그램의 필수 요소
요소 | 내용 |
대용량 데이터 | 대량의 데이터를 가져오거나, 전달하거나, 계산하는 등의 처리가 가능해야 함 |
자동화 | 심각한 오류가 발생하는 상황을 제외하고는 사용자의 개입 없이 수행되어야 함 |
견고성 | 잘못된 데이터나 데이터 중복 등의 상황으로는 중단되는 일 없이 수행되어야 함 |
안전성/신뢰성 | 오류가 발생하면 오류의 발생 위치, 시간 등을 추적할 수 있어야 함 |
성능 | - 다른 응용 프로그램의 수행을 방해하지 않아야 함 - 지정된 시간 내에 처리가 완료되어야 함 |
배치 스케줄러
일괄 처리를 위해 주기적으로 발생하거나 반복적으로 발생하는 작업을 지원하는 도구
배치 스케줄러 종류: 스프링 배치, 쿼츠 스케줄러, 크론
Cron 표현식
리눅스/유닉스 크론 표현식: 분시일 월요연
쿼츠 크론 표현식: 초분시일 월요연
'정보처리기사' 카테고리의 다른 글
정보처리기사 10. 애플리케이션 테스트 관리 (0) | 2021.10.01 |
---|---|
정보처리기사 09. 소프트웨어 개발 보안 구축 (0) | 2021.09.30 |
정보처리기사 07. 인터페이스 구현 (0) | 2021.09.22 |
정보처리기사 06. 통합 구현 (0) | 2021.09.21 |
정보처리기사 05. 데이터 입출력 구현 (0) | 2021.09.21 |