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