개발 환경 구축
: 응용 소프트웨어 개발을 위해 개발 프로젝트를 이해하고 소프트웨어 및 하드웨어 장비를 구축하는 것을 의미
하드웨어 환경
: 사용자와의 인터페이스 역할을 하는 클라이언트 크리고 클라이언트와 통신하여 서비스를 제공하는 서버로 구성된다.
- 클라이언트에는 PC, 스마트폰 등이 있다.
- 서버는 사용 목적에 따라 웹 서버, 웹 애플리케이션 서버, 데이터베이스 서버, 파일 서버 등으로 나뉜다.
- 웹 서버: 클라이언트로부터 직접 요청을 받아 처리하는 서버로, 저용량의 정적 파일들을 제공한다.
- 웹 애플리케이션 서버(WAS): 사용자에게 동적 서비스를 제공하기 위해 웹 서버로부터 요청을 받아 데이터 가공 작업을 수행하거나, 웹 서버와 데이터베이스 서버 또는 웹 서버와 파일 서버 사이에서 인터페이스 역할을 수행하는 서버이다.
- 데이터베이스 서버: 데이터베이스와 이를 관리하는 DBMS를 운영하는 서버이다.
- 파일 서버: 데이터베이스에 저장하기에는 비효율적이거나, 서비스 제공을 목적으로 유지하는 파일들을 저장하는 서버이다.
웹 서버(Web Server)의 기능
HTTP/HTTPS 지원: 브라우저로부터 요청을 받아 응답할 때 사용되는 프로토콜
통신 기록: 처리한 요청들을 로그 파일로 기록하는 기능
정적 파일 관리: HTML, CSS, 이미지 등의 정적 파일들을 저장하고 관리하는 기능
대역폭 제한: 네트워크 트래픽의 포화를 방지하기 위해 응답 속도를 제한하는 기능
가상 호스팅: 하나의 서버로 여러 개의 도메인 이름을 연결하는 기능
인증: 사용자가 합법적인 사용자인지를 확인하는 기능ㅌ
소프트웨어 환경
: 클라이언트와 서버 운영을 위한 시스템 소프트웨어와 개발에 사용되는 개발 소프트웨어로 구성된다.
- 시스템 소프트웨어에는 운영체제, 웹 서버 및 WAS 운용을 위한 서버 프로그램, DBMS 등이 있다.
- 개발 소프트웨어에는 요구사항 관리 도구, 설계/모델링 도구, 구현 도구, 빌드 도구, 테스트 도구, 형상 관리 도구 등이 있다.
- 요구사항 관리 도구: 요구사항의 수집과 분석, 추적 등을 편리하게 도와주는 소프트웨어
- 설계/모델링 도구: UML(통합 모델링 언어)을 지원하며, 개발의 전 과정에서 설계 및 모델링을 도와주는 소프트웨어
- 구현 도구: 개발 언어를 통해 애플리케이션의 실제 구현을 지원하는 소프트웨어
- 빌드 도구: 구현 도구를 통해 작성된 소스의 빌드 및 배포, 라이브러리 관리를 지원하는 소프트웨어
- 테스트 도구: 모듈들이 요구사항에 적합하게 구현되었는지 테스트하는 소프트웨어
- 형상 관리 도구: 산출물들을 버전별로 관리하여 품질 향상을 지원하는 소프트웨어
개발 언어의 산정 기준
적정성 | 개발하려는 소프트웨어의 목적에 적합해야 합니다. |
효율성 | 코드의 작성 및 구현이 효율적이어야 합니다. |
이식성 | 다양한 시스템 및 환경에 적용이 가능해야 합니다. |
친밀성 | 개발 언어에 대한 개발자들의 이해도와 활용도가 높아야 합니다. |
범용성 | 다른 개발 사례가 존재하고 여러 분야에서 활용되고 있어야 합니다. |
모듈 (Module)
: 모듈화를 통해 분리된 시스템의 각 기능들로, 서브루틴, 서브시스템, 소프트웨어 내의 프로그램, 작업 단위 등과 같은 의미로 사용된다.
- 모듈은 단독으로 컴파일이 가능하며, 재사용 할 수 있다.
- 모듈의 기능적 독립성은 소프트웨어를 구성하는 각 모듈의 기능이 서로 독립됨을 의미하는 것으로, 모듈이 하나의 기능만을 수행하고 다른 모듈과의 과도한 상호작용을 배제함으로써 이루어진다.
- 독립성이 높은 모듈일수록 모듈을 수정하더라도 다른 모듈들에게는 거의 영향을 미치지 않으며, 오류가 발생해도 쉽게 발견하고 해결할 수 있다.
- 모듈의 독립성은 결합도와 응집도에 의해 측정되며, 독립성을 높이려면 모듈의 결합도는 약하게, 응집도는 강하게, 모듈의 크기는 작게 만들어야한다.
결합도 (Coupling)
: 모듈 간에 상호 의존하는 정도 또는 두 모듈 사이의 연관 관계를 의미한다.
자료 결합도 | 스탬프 결합도 | 제어 결합도 | 외부 결합도 | 공통 결합도 | 내용 결합도 |
결합도 약함 <----------> 결합도 강함
- 자료 결합도: 모듈 간의 인터페이스가 자료 요소로만 구성될 때의 결합도이다.
- 스탬프(검인) 결합도: 모듈 간의 인터페이스로 배열이나 레코드 등의 자료 구조가 전달될 때의 결합도이다.
- 제어 결합도: 어떤 모듈이 다른 모듈 내부의 논리적인 흐름을 제어하기 위해 제어 신호를 이용하여 통신하거나 제어 요소를 전달하는 결합도
- 외부 결합도: 어떤 모듈에서 선언한 데이터(변수)를 외부의 다른 모듈에서 참조할 때의 결합도
- 공통(공유) 결합도: 공유되는 공통 데이터 영역을 여러 모듈이 사용할 때의 결합도
- 내용 결합도: 한 모듈이 다른 모듈의 내부 기능 및 그 내부 자료를 직접 참조하거나 수정할 때의 결합도
응집도 (Cohesion)
: 정보 은닉 개념을 확장한 것으로, 명령어나 호출문 등 모듈의 내부 요소들의 서로 관련되어 있는 정도, 즉 모듈이 독립적인 기능으로 정의되어 있는 정도를 의미한다.
기능적 응집도 | 순차적 응집도 | 교환적 응집도 | 절차적 응집도 | 시간적 응집도 | 논리적 응집도 | 우연적 응집도 |
응집도 강함 <----------> 응집도 약함
- 기능적 응집도: 모듈 내부의 모들 기능 요소들이 단일 문제와 연관되어 수행될 경우의 응집도
- 순차적 응집도: 모듈 내 하나의 활동으로부터 나온 출력 데이터를 그 다음 활동의 입력 데이터로 사용할 경우의 응집도
- 교환(통신)적 응집도: 동일한 입력과 출력을 사용하여 서로 다른 기능을 수행하는 구성 요소들이 모였을 경우의 응집도
- 절차적 응집도: 모듈이 다수의 관련 기능을 가질 때 모듈 안의 구성 요소들이 그 기능을 순차적으로 수행할 경우의 응집도
- 시간적 응집도: 특정 시간에 처리되는 몇 개의 기능을 모아 하나의 모듈로 작성할 경우의 응집도
- 논리적 응집도: 유사한 성격을 갖거나 특정 형태로 분류되는 처리 요소들로 하나의 모듈이 형성되는 경우의 응집도
- 우연적 응집도: 모듈 내부의 각 구성 요소들이 서로 관련 없는 요소로만 구성된 경우의 응집도
팬인(Fan-In) / 팬아웃(Fan-Out)
- 팬인: 어떤 모듈을 제어하는 모듈의 수
- 팬아웃: 어떤 모듈에 의해 제어되는 모듈의 수
- 팬인이 높은 경우 재사용 측면에서 설계가 잘 되어있다고 볼 수 있으나, 단일 장애점이 발생할 수 있으므로 중점적인 관리 및 테스트가 필요하다.
- 팬아웃이 높은 경우 불필요하게 다른 모듈을 호출하고 있는지 검토하고, 단순화시킬 수 있는지 여부에 대한 검토가 필요하다.
공통 모듈
: 여러 프로그램에서 공통적으로 사용할 수 있는 모듈을 의미한다.
- 공통 모듈을 구현할 때는 다른 개발자들이 해당 기능을 명확히 이해할 수 있도록 다음의 명세 기법을 준수해야 한다.
- 정확성: 시스템 구현 시 해당 기능이 필요하다는 것을 알 수 있도록 정확히 작성한다.
- 명확성: 해당 기능을 이해할 때 중의적으로 해석되지 않도록 명확하게 작성한다.
- 완전성: 시스템 구현을 위해 필요한 모든 것을 기술한다.
- 일관성: 공통 기능들 간 상호 충돌이 발생하지 않도록 작성한다.
- 추적성: 기능에 대한 요구사항의 출처, 관련 시스템 등의 관계를 파악할 수 있도록 작성한다.
재사용
: 비용과 개발 시간을 절약하기 위해 이미 개발된 기능들을 파악하고 재구성하여 새로운 시스템 또는 기능 개발에 사용하기 적합하도록 최적화 시키는 작업
DBMS 접속
: 사용자가 데이터를 사용하기 위해 응용 시스템을 이용하여 DBMS에 접근하는 것을 의미한다.
- 인터넷을 통해 구동되는 웹 응용 프로그램은 웹 응용 시스템을 통해 DBMS에 접근한다.
- 웹 응용 시스템은 웹 서버와 웹 애플리케이션 서버로 구성되며, 서비스 규모가 작은 경우 웹 서버와 웹 애플리케이션 서버를 통합하여 하나의 서버만으로 운용할 수 있다.
DBMS 접속 기술
- JDBC
- Java 언어로 다양한 종류의 데이터베이스에 접속하고 SQL문을 수행할 때 사용되는 표준 API이다.
- ODBC (Open DataBase Connectivity)
- 데이터베이스에 접근하기 위한 표준 개방형 API로, 개발 언어에 관계없이 사용할 수 있다.
- 1992년 9월 마이크로소프트에서 출시했다.
- 프로그램 내 ODBC 문장을 사용하여 MS-Access, DBase, DB2, Excel, Text 등 다양한 데이터베이스에 접근할 수 있다.
- ODBC도 접속하려는 DBMS에 맞는 드라이버가 필요하지만, 접속하려는 DBMS의 인터페이스를 알지 못하더라도 ODBC 문장을 사용하여 SQL을 작성하면 ODBC에 포함된 드라이버 관리자가 해당 DBMS의 인터페이스에 맞게 연결해 주므로 DBMS의 종류를 몰라도 된다.
- MyBatis
- JDBC 코드를 단순화하여 사용할 수 있는 SQL Mapping 기반 오픈 소스 접속 프레임워크이다.
- JDBC로 데이터베이스에 접속하려면 다양한 메소드를 호출하고 해제해야 하는데, MyBatis는 이를 간소화 했고 접속 기능을 더욱 강화하였다.
- MyBatis는 SQL 문장을 분리하여 XML 파일을 만들고, Mapping을 통해 SQL을 실행한다.
- MyBatis는 SQL을 거의 그대로 사용할 수 있어 SQL 친화적인 국내 환경에 적합하여 많이 사용된다.
동적 SQL
: 다양한 조건에 따라 SQL 구문을 동적으로 변경하여 처리할 수 있는 SQL 처리 방식이다.
- 동적 SQL은 SQL문을 문자열 변수에 넣어 처리한다.
- 동적 SQL은 사용자로부터 SQL문의 일부 또는 전부를 입력받아 실행할 수 있다.
- 동적 SQL은 값이 입력되지 않을 경우 사용하는 NVL 함수를 사용할 필요가 없다.
- 동적 SQL은 응용 프로그램 수행 시 SQL이 변형될 수 있으므로 프리컴파일 할 때 구문 분석, 접근 권한 확인 등을 할 수 없다.
- 동적 SQL은 정적 SQL에 비해 속도가 느리지만, 상황에 따라 다양한 조건을 첨가하는 등 유연한 개발이 가능하다.
정적 SQL | 동적 SQL | |
SQL 구성 | 커서를 통한 정적 처리 | 문자열 변수에 담아 동적 처리 |
개발 패턴 | 커서의 범위 안에서 반복문을 활용하여 SQL 작성 | NVL 함수 없이 로직을 통해 SQL 작성 |
실행 속도 | 빠름 | 느림 |
사전 검사 | 가능 | 불가능 |
서버 개발
: 웹 애플리케이션의 로직을 구현할 서버 프로그램을 제작하여 웹 애플리케이션 서버(WAS)에 탑재하는 것을 의미
서버 개발 프레임워크
: 서버 프로그램 개발 시 다양한 네트워크 설정, 요청 및 응답 처리, 아키텍처 모델 구현 등을 손쉽게 처리할 수 있도록 클래스나 인터페이스를 제공하는 소프트웨어
프레임워크 | 특징 |
Spring | JAVA를 기반으로 만들어진 프레임워크로, 전자정부 표준 프레임워크의 기반 기술로 사용되고 있다. |
Node.js | JavaScript를 기반으로 만들어진 프레임워크로, 비동기 입'출력 처리와 이벤트 위주의 높은 처리 성능을 갖고 있어 실시간으로 입'출력이 빈번한 애플리케이션에 적합하다. |
Django | Python을 기반으로 만들어진 프레임워크로, 컴포넌트의 재사용과 플러그인화를 강조하여 신속한 개발이 가능하도록 지원한다. |
Codeigniter | PHP를 기반으로 만들어진 프레임워크로, 인터페이스가 간편하며 서버 자원을 적게 사용한다. |
Ruby on Rails | Ruby를 기반으로 만들어진 프레임워크로, 테스트를 위한 웹 서버를 지원하며 데이터베이스 작업을 단순화, 자동화시켜 개발 코드의 길이가 짧아 신속한 개발이 가능하다. |
프레임워크의 특성
- 모듈화: 프레임워크는 캡슐화를 통해 모듈화를 강화하고 설계 및 구현의 변경에 따른 영향을 최소화함으로서 소프트웨어의 품질을 향상시킨다.
- 재사용성: 프레임워크는 재사용 가능한 모듈들을 제공함으로써 개발자의 생산성을 향상시킨다.
- 확장성: 프레임워크는 다형성을 통한 인터페이스 확장이 가능하여 다양한 형태와 기능을 가진 애플리케이션 개발이 가능하다.
- 제어의 역흐름: 개발자가 관리하고 통제해야 하는 객체들의 제어 권한을 프레임워크에 넘김으로써 생산성을 향상시킨다.
서버 개발 과정
- DTO/VO, SQL, DAO, Service, Controller를 각각 구현하는 과정을 통해 이루어진다.
DTO(Data Transfer Object)/VO(Value Object) 구현
: 데이터 교환을 위해 사용할 객체를 만드는 과정
- 로직은 구현하지 않고, 저장과 반환에 대한 메소드만 존재한다.
SQL 구현
: 데이터의 삽입, 변경, 삭제 등의 작업을 수행할 SQL문을 생성하는 과정
DAO(Data Access Object) 구현
: 데이터베이스에 접근하고, SQL을 활용하여 데이터를 실제로 조작하는 코드를 구현하는 과정
Service 구현
: 사용자의 요청에 응답하기 위한 로직을 구현하는 과정
Controller 구현
: 사용자의 요청에 적절한 서비스를 호출하여, 그 결과를 사용자에게 반환하는 코드를 구현하는 과정
배치 프로그램
: 사용자와의 상호 작용 없이 여러 작업들을 미리 정해진 일련의 순서에 따라 일괄적으로 처리하는 것을 의미한다.
배치 프로그램이 자동으로 수행되는 주기에 따라 정기 배치, 이벤트성 배치, On-Demand 배치로 구분된다.
- 정기 배치: 일, 주, 월과 같이 정해진 기간에 정기적으로 수행된다.
- 이벤트성 배치: 특정 조건을 설정해주고 조건이 충족될 때만 수행된다.
- On-Demand 배치: 사용자 요청 시 수행된다.
* 배치 프로그램이 갖추어야 하는 필수 요소
- 대용량 데이터: 대량의 데이터를 가져오거나, 전달하거나, 계산하는 등의 처리가 가능해야 한다.
- 자동화: 심각한 오류가 발생하는 상황을 제외하고는 사용자의 개입 없이 수행되어야 한다.
- 견고성: 잘못된 데이터나 데이터 중복 등의 상황으로 중단되는 일 없이 수행되어야 한다.
- 안정성/신뢰성: 오류가 발생하면 오류의 발생 위치, 시간 등을 추적할 수 있어야 한다.
- 성능: 다른 응용 프로그램의 수행을 방해하지 않아야 하고, 지정된 시간 내에 처리가 완료되어야 한다.
배치 스케줄러
: 일괄 처리(Batch Processing) 작업이 설정된 주기에 맞춰 자동으로 수행되도록 지원해주는 도구이다.
- 배치 스케줄러는 특정 업무(Job)를 원하는 시간에 처리할 수 잇도록 지원한다는 특성 때문에 잡 스케줄러(Job Scheduler)라고도 불린다.
- 주로 사용되는 배치 스케줄러에는 스피링 배치, Quartz 등이 있다.
스프링 배치(Spring Batch)
- 스프링 프레임워크의 특성을 그대로 가져와 스프링이 가지고 있는 다양한 기능들을 모두 사용할 수 있다.
- 데이터베이스나 파일의 데이터를 교환하는데 필요한 컴포넌트들을 제공한다.
- 로그 관리, 추적, 트랜잭션 관리, 작업 처리 통계, 작업 재시작 등의 다양한 기능을 제공한다.
스프링 배치의 주요 구성 요소와 역할 | |
Job | 수행할 작업 정의 |
Job Launcher | 실행을 위한 인터페이스 |
Step | Job 처리를 위한 제어 정보 |
Job Repository | Step의 제어 정보를 포함하여 작업 실행을 위한 모든 정보 저장 |
Quartz
: 스프링 프레임워크로 개발되는 응용 프로그램들의 일괄 처리를 위한 다양한 기능을 제공하는 오픈 소스 라이브러리이다.
- 수행할 작업과 수행 시간을 관리하는 요소들을 분리하여 일괄 처리 작업에 유연성을 제공한다.
Quartz의 주요 구성 요소와 역할 | |
Scheduler | 실행 환경 관리 |
Job | 수행할 작업 정의 |
JobDetail | Job의 상세 정보 |
Trigger | Job의 실행 스케줄 정의 |
Cron
: 리눅스의 스케줄러 도구로 crontab 명령어를 통해 적업을 예약할 수 있다.
- 편집기(Editor)에서 요일, 월, 일, 시 분을 기준으로 수행할 명령어를 지정한다.
- 옵션
- -e: 편집기(Editor)를 호출하여 작업 추가 및 수정
- -l: 작업 목록(List) 출력
- -r: 작업 삭제(Remove)
'IT Study > 정보처리기사' 카테고리의 다른 글
2020 정보처리기사 3회 필기,실기 합격 후기 (0) | 2020.11.12 |
---|---|
정보처리기사 실기 빈출 용어 (0) | 2020.10.16 |
2020 정보처리기사 (4장. 통합 구현) (0) | 2020.10.10 |
2020 정보처리기사 (3장. 데이터 입출력 구현) (0) | 2020.10.05 |
2020 정보처리기사 (2장. 요구사항 확인) (0) | 2020.10.04 |
댓글