개발 환경 구축 - 하드웨어 환경
[ 개발 환경 구축 ]
응용 소프트웨어 개발을 위해 개발 프로젝트를 이해하고 소프트웨어 및 하드웨어 장비를 구축하는 것을 의미
- 하드웨어 환경은 사용자와의 인터페이스 역할을 하는 클라이언트(Client)
- 클라이언트와 통신하여 서비스를 제공하는 서버(Server)로 구성된다.
- 서버는 사용 목적에 따라 웹 서버, 웹 애플리케이션 서버, 데이터 베이스 서버, 파일 서버 등으로 나뉜다.
웹 서버 (Web Server) |
클라이언트로부터 직접 요청을 받아 처리하는 서버. 저용량의 정적 파일들을 제공 |
웹 애플리케이션 서버 (WAS : Web Application Server) |
사용자에게 동적 서비스를 제공하기 위해 웹 서버로부터 요청을 받아 데이터 가공 작업을 수행하거나, 웹 서버와 데이터베이스 서버 또는 웹 서버와 파일 서버 사이에서 인터페이스 역할을 수행하는 서버 |
데이터베이스 서버 (DB Server) |
데이터베이스와 이를 관리하는 DBMS를 운영하는 서버 |
파일 서버 (File Server) |
데이터베이스에 저장하기에는 비효율적이거나, 서비스 제공을 목적으로 유지하는 파일들을 저장하는 서버 |
개발 환경 구축 - 소프트웨어 환경
- 소프트웨어 환경은 클라이언트와 서버 운영을 위한 시스템 소프트웨어
- 개발에 사용되는 개발 소프트웨어로 구성
- 시스템 소프트웨어에는 운영체제(OS), 웹 서버 및 WAS 운용을 위한 서버 프로그램, DBMS등이 있다.
- 개발 소프트웨어는 요구사항 관리 도구, 설계/모델링 도구, 구현 도구, 빌드 도구, 테스트 도구, 형상 관리 도구 등이 있다.
요구사항 관리 도구 | 요구사항의 수집과 분석, 추적 등을 편리하게 도와주는 소프트웨어 |
설계/모델링 도구 | UML(Unify Modeling Language)을 지원하며 개발의 전 과정에서 설계 및 모델리을 도와주는 소프트웨어 |
구현 도구 | 개발 언어를 통해 애플리케이션의 실제 구현을 지원하는 소프트웨어 |
빌드 도구 | 구현 도구를 통해 작성된 소스의 빌드 및 배포 라이브러리 관리를 지원하는 소프트웨어 |
테스트 도구 | 모듈들이 요구사항에 적합하게 구현되었는지 테스트하는 소프트웨어 |
형상 관리 도구 | 산출물들을 버전별로 관리하여 품질 향상을 지원하는 소프트웨어 |
모듈(Module)
모듈화를 통해 분리된 시스템의 각 기능들로, 서브루틴, 서브시스템, 소프트웨어 내의 프로그램, 작업 단위 등과 같은 의미로 사용된다.
- 모듈화
: 소프트웨어의 성능을 향상시키거나 시스템의 수정 및 재사용, 유지 관리 등이 용이하도록 시스템의 기능들을 모듈 단위로 분해하는 것으로 모듈 간 결합도의 최소화, 응집도의 최대화가 목표임
- 모듈의 기능적 독립성은 소프트웨어를 구성하는 각 모듈의 기능이 서로 독립됨을 의미. 모듈이 하나의 기능만을 수행하고 다른 모듈과의 과도한 상호 작용을 배제함으로써 이루어 진다.
- 독립성이 높은 모듈일수록 모듈을 수정하더라도 다른 모듈들에게는 거의 영향을 미치지 않으며, 오류가 발생해도 쉽게 발견하고 해결할 수 있다.
- 모듈의 독립성은 결합도(Coupling)와 응집도(Cohesion)에 의해 측정되며, 독립성을 높이려면 모듈의 결합도는 약하게, 응집도는 강하게, 모듈의 크기는 작게 만들어야한다.
결합도( Coupling )
모듈 간에 상호 의존하는 정도 또는 두 모듈 사이의 연관 관계를 의미한다.
- 결합도가 약할수록 품질이 높고, 강할수록 품질이 낮다.
- 결합도가 강하면 시스템 구현 및 유지보수 작업이 어렵다.
자료 결합도 (Data Coupling) (결합도 낮음, 품질 좋음) |
- 모듈 간의 인터페이스가 자료 요소로만 구성될 때의 결합도 - 어떤 모듈이 다른 모듈을 호출하면서 매개 변수나 인수로 데이터를 넘겨주고, 호출 받은 모듈은 받은 데이터에 대한 처리 결과를 다시 돌려주는 방식 |
스탬프 결합도 (Stamp Coupling) |
모듈 간의 인터페이스로 배열이나 레코드 등의 자료구조가 전달될 때의 결합도 |
제어 결합도 (Control Coupling) |
어떤 모듈이 다른 모듈 내부의 논리적인 흐름을 제어하기 위해 제어 신호를 이용하여 통신하거나 제어 요소를 전달하는 결합도 |
외부 결합도 (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)
- 팬인은 어떤 모듈을 제어(호출)하는 모듈의 수
- 팬아웃은 어떤 모듈에 의해 제어(호출)되는 모듈의 수
- 팬인과 팬아웃을 분석하여 시스템의 복잡도를 알 수 있다.
- 팬인이 높다 => 재사용 측면에서 설계가 잘 되었다.
But, 단일 장애점이 발생할 수 있으므로 중점적인 관리 및 테스트가 필요하다.
공통 모듈
여러 프로그램에서 공통적으로 사용할 수 있는 모듈을 의미
- 자주 사용되는 계산식이나 매번 필요한 사용자 인증과 같은 기능들이 공통 모듈로 구성될 수 있다.
- 다른 개발자들이 해당 기능을 명확히 이해할 수 있도록 다음 명세 기법을 준수해야함.
정확성 (Correctness) |
시스템 구현 시 해당 기능이 필요하다는 것을 알 수 있도록 정확히 작성 |
명확성 (Clarity) |
해당 기능을 이해할 때 중의적으로 해석되지 않도록 명확하게 작성 |
완전성 (Completeness) |
시스템 구현을 위해 필요한 모든 것을 기술 |
일관성 (Consistency) |
공통 기능들 간 상호 충돌이 발생하지 않도록 작성 |
추적성 (Traceability) |
기능에 대한 요구사항의 출처, 관련 시스템 등의 관계를 파악할 수 있도록 작성 |
재사용
비용과 개발 시간을 절약하기 위해 이미 개발된 기능들을 파악하고 재구성해서 새로운 시스템 또는 기능 개발에 사용하기 적합하도록 최적화 시키는 작업
- 재사용되는 대상은 외부 모듈과의 결합도는 낮고, 응집도는 높아야 한다.
함수와 객체 | 클래스나 메소드 단위의 소스 코드를 재사용함 |
컴포넌트 | 컴포넌트 자체에 대한 수정 없이 인터페이스를 통해 통신하는 방식 |
애플리케이션 | 공통된 기능들을 제공하는 애플리케이션을 공유하는 방식 |
DBMS 접속( Connection )
사용자가 데이터를 사용하기 위해 응용 시스템을 이용하여 DBMS에 접근하는 것을 의미
- 응용 시스템은 사용자로부터 매개 변수를 전달받아 SQL을 실행하고 DBMS로부터 전달받은 결과를 사용자에게 전달하느 ㄴ매개체 역할을 수행한다.
- 인터넷을 통해 구동되는 웹 응용 프로그램은 웹 응용 시스템을 통해 DBMS에 접근한다.
- DBMS 접속 기술 : DBMS에 접근하기 위해 사용하는 API 또는 API의 사용을 편리하게 도와주는 프레임워크 등을 의미
JDBC (Java DataBase Connectivity) |
Java 언어로 다양한 종류의 DB에 접속하고 SQL문을 수행할 때 사용되는 표준 API |
ODBC (Open DataBase Connectivity) |
DB에 접근하기 위한 표준 개방형 API 개발 언어에 관계없이 사용할 수 있다. |
MyBatis | - JDBC 코드를 단순화하여 사용할 수 있는 SQL Mapping 기반 오픈 소스 접속 프레임워크 - SQL을 거의 그대로 사용할 수 있어 SQL 친화적인 국내 환경에 적합하여 많이 사용됨 * 프레임워크(Framework) : 필요한 클래스나 인터페이스 등을 모아둔 집합체 |
- 동적 SQL ( Dynamic SQL )
: 다양한 조건에 따라 SQL 구문을 동적으로 변경하여 처리 할 수 있는 SQL 처리 방식
: 사용자로부터 SQL문의 일부 또는 전부를 입력받아 실행할 수 있다.
: 정적 SQL에 비해 속도가 느리지만, 상황에 따라 다양한 조건을 첨가하는 등 유연한 개발이 가능하다.
* 정적 SQL : SQL 코드를 변수에 담지 않고 코드 사이에 직접 기술한 SQL문
서버 개발
웹 애플리케이션의 로직을 구현할 서버 프로그램을 제작하여 웹 애플리케이션 서버(WAS)에 탑재하는 것을 의미
- 웹 애플리케이션 서버에 구현된 서버 프로그램은 웹 서버로부터 받은 요청을 처리하여 결과를 반환한다.
- 서버 개발에 사용되는 프로그래밍 언어에는 Java, JavaScript, Python, PHP, Ruby 등이 있다.
- 각 프로그래밍 언어에는 해당 언어로 서버 프로그램을 개발하 수 있도록 지원하는 프레임워크가 있다.
프레임워크 | 특징 |
spring | Java를 기반으로 만들어진 프레임워크 전자정부 표준 프레임워크의 기반 기술로 사용 |
Node.js | JavaScript를 기반으로 만들어진 프레임워크 비동기 입출력 처리와 이벤트 위주의 높은 처리 성능을 갖고 있어 실시간으로 입출력이 빈번한 애플리케이션에 적합 |
Django | Python을 기반으로 만들어진 프레임워크 컴포넌트의 재사용과 플러그인화를 강조하여 신속한 개발이 가능하도록 지원 |
Codeigniter | PHP를 기반으로 만들어진 프레임워크 인터페이스가 간편하며 서버 자원을 적게 사용 |
Ruby on Rails | Ruby를 기반으로 만들어진 프레임워크 테스트를 위한 웹 서버를 지원하며 DB작업을 단순화, 자동화시켜 개발 코드의 길이가 짧아 신속한 개발이 가능 |
- 프레임워크의 특징
모듈화 (Modularity) |
캡슐화를 통해 모듈화를 강화하고 설계 및 구현의 변경에 따른 영향을 최소화 소프트웨어의 품질을 향상시킨다. |
재사용성 (Reusability) |
재사용 가능한 모듈들을 제공함으로써 개발자의 생산성을 향상시킨다 |
확장성 (Extensibility) |
다형성(Polymorphism)을 통한 인터페이스 확장이 가능 다양한 형태와 기능을 가진 애플리케이션 개발 가능 |
제어의 역흐름 (Inversion of Control) |
개발자가 관리하고 통제해야 하는 객체들의 제어 권한을 프레임워크에 넘김으로써 생산성을 향상시킨다. |
서버 개발 과정
서버 개발은 DTO/VO, SQL, DAO, Service, Controller를 각각 구현하는 과정을 통해 이루어진다.
- 구현 순서는 개발자가 임의로 변경할 수 있다.
- 개발하려는 서버 프로그램의 목적, 개발 언어, 규모 등의 이유로 통합되거나 세분화 될 수 있다.
- 모든 과정에서 보안 약점이 발생하지 않도록 소프트웨어 개발 보안 가이드를 참고한다.
DTO 구현 (Data Transfer Object) VO 구현 (Value Object) |
- 데이터 교환을 위해 사용할 객체를 만드는 과정 - 변수 및 객체를 송수신할 데이터의 자료형(Data type)에 알맞게 생성 - 알고리즘 등의 로직은 구현하지 않고, 변수와 데이터를 저장하고 반환하는 메소드만 구현한다. |
SQL 구현 | - 데이터의 삽입,변경,삭제 등의 작업을 수행할 SQL문을 생성 - SQL문은 소스 코드 내에 직접 입력하거나, 별도의 XML파일로 저장하여 관리 - XML파일로 SQL문을 관리하는 경우, 중복되는 SQL문을 최소화할 수 있고, 유지보수가 간편해진다. |
DAO 구현 (Data Access Object) |
DB에 접근하고, SQL을 활용하여 데이터를 실제로 조작하는 코드를 구현하는 과정 |
Service 구현 | 사용자의 요청에 응답하기 위한 로직을 구현하는 과정 |
Controller 구현 | 사용자의 요청에 적절한 서비스를 호출하여, 그 결과를 사용자에게 반환하는 코드를 구현하는 과정 |
배치 프로그램( Batch Program )
사용자와의 상호 작용 없이 여러 작업들을 미리 정해진 일련의 순서에 따라 일괄적으로 처리하는 것을 의미
- 배치 프로그램이 자동으로 수행되는 주기에 따라 정기배치, 이벤트성 배치, On-Demand 배치로 구분
- 배치 프로그램의 필수 요소 : 대용량 데이터, 자동화, 견고성, 안정성, 신뢰성, 성능
- 배치 스케쥴러( Batch Schedular ) : 일괄 처리( Batch Processing ) 작업이 설정된 주기에 맞춰 자동으로 수행되도록 지원도구
스프링 배치 (Spring Batch) |
- Spring Source 사와 Accenture 사가 공동 개발한 오픈소스 프레임워크 - 로그, 관리, 추적, 트랜잭션 관리, 작업 처리 통계, 작업 재시작 등의 다양한 기능을 제공 - [ 주요 구성 요소 ] : Job, Job Launcher, Step, Job Repository |
Quartz | - 스프링 프레임워크로 개발되는 응용 프로그램들의 일괄 처리를 위한 다양한 기능을 제공하는 오픈 소스 라이브러리 - [ 주요 구성 요소 ] : Schedular, Job, JobDetail, Trigger |
Cron | 리눅스의 스케줄러 도구 crontab 명령어를 통해 작업을 예약할 수 있다. |
728x90
반응형
'정보처리기사 > 실기고사 이론정리' 카테고리의 다른 글
[Chapter 7] 애플리케이션 테스트 관리 (0) | 2020.10.08 |
---|---|
[Chapter 6] 화면 설계 (0) | 2020.10.06 |
[Chapter 4] 통합구현 (0) | 2020.10.04 |
[ chapter 3 ] 데이터 입출력 구현 (0) | 2020.10.03 |
[ Chapter 2 ] 요구사항 확인 (0) | 2020.09.30 |