View
Section 121. 개발 환경 구축
1. 하드웨어 환경 - 웹 서버, 웹 애플리케이션 서버, 데이터베이스 서버, 파일 서버
사용자와의 인터페이스 역할을 하는 클라이언트 (pc,스마트폰 등) 그리고 클라이언트와 통신하는 서비스를 제공하는 서버로 구성
- 웹 서버 : 클라이언트로부터 직접 요청을 받아 처리하는 서버로, 저용량의 정적 파일들을 제공
- 웹 애플리케이션 서버(WAS) : 사용자에게 동적 서비스를 제공하기 위해 웹 서버로부터 요청을 받아 데이터 가공 작업을 수행하거나 웹 서버와 데이터베이스 서버 또는 웹 서버와 파일 서버 사이에서 인터페이스 역할을 수행하는 서버
- 데이터베이스 서버 : 데이터베이스와 이를 관리하는 DBMS를 운영하는 서버
- 파일 서버 : 데이터베이스에 저장하기에는 비효율적이거나, 서비스 제공을 목적으로 유지하는 파일들을 저장하는 서버
*정적 파일(Static File) : 인터넷 브라우저와 같은 클라이언트에서 별도의 처리 과정 없이 다운로드 하여 사용자에게 보여주는 파일로 HTML,CSS,이미지 파일 등이 있다.
동적 서비스(Dynamic Service) : 사용자의 입력에 따라 다른 결과를 보여주는 서비스 (ex. 인기순으로 정렬)
2. 소프트웨어 환경 - 시스템 소프트웨어, 개발 소프트웨어
시스템 소프트웨어 : 운영체제(OS), 웹 서버 및 WAS 운용을 위한 서버 프로그램, DBMS 등
개발 소프트 웨어
- 요구사항 관리 도구
- 설계/모델링 도구 : UML(통합 모델링 언어)을 지원하며, 개발의 전 과정에서 설계 및 모델링을 도와주는 소프트웨어
- 구현 도구
- 빌드 도구
- 테스트 도구
- 형상 관리 도구 (버전 관리)
* UML : 시스템 개발자와 고객 또는 개발자 상호 간의 의사소통이 원활하게 이루어지도록 표준화한 대표적인 객체지향 모델링 언어
* 개발 언어의 선정 기준
- 적정성 : 개발하려는 소프트웨어의 목적에 적합해야 한다.
- 효율성 : 코드의 작성 및 구현이 효율적이어야 한다.
- 이식성 : 다양한 시스템 및 환경에 적용이 가능해야 한다.
- 친밀성 : 개발 언어에 대한 개발자들의 이해도와 활용도가 높아야 한다.
- 범용성 : 다른 개발 사례가 존재하고 여러 분야에서 활용되고 있어야 한다.
Section 122. 서버 개발
1. 서버 개발의 개요
서버 개발은 웹 애플리케이션의 로직을 구현할 서버 프로그램을 제작하여 웹 애플리케이션 서버(WAS)에 탑재하는 것을 의미
- 웹 애플리케이션 서버에 구현된 서버 프로그램은 웹 서버로부터 받은 요청을 처리하여 결과를 반환하는 역할
- 각 프로그래밍 언어에는 해당 언어로 서버 프로그램을 개발할 수 있도록 지원하는 프레임워크가 있다.
2. 서버 개발 프레임워크
서버 개발 프레임워크는 서버 프로그램 개발 시 다양한 네트워크 설정, 요청 및 응답처리, 아키텍처 모델 구현 등을 손쉽게 처리할 수 있도록 클래스나 인터페이스를 제공하는 소프트웨어를 의미
* 프레임워크 : 특정 기능을 수행하기 위해 필요한 클래스나 인터페이스 등을 모아둔 집합체
- 서버 개발 프레임워크는 대부분은 모델-뷰-컨트롤러(MVC) 패턴을 기반으로 개발되었다.
* 모델-뷰-컨트롤러 : 시스템을 세부분으로 분리하여 서로 영향 받지 않고 개발할 수 있는 아키텍처 패턴
프레임워크 | 특징 |
Spring | JAVA를 기반으로 만들어진 프레임워크 / 전자정부 표준 프레임워크의 기반 기술 |
Node.js | JavaScript를 기반으로 만들어진 프레임워크 / 실시간으로 입출력이 빈번한 애플리케이션에 적합 |
Django | Python을 기반으로 만들어진 프레임워크 / 컴포넌트의 재사용과 플러그인화를 강조 |
Codeigniter | PHP를 기반으로 만들어진 프레임워크 / 인터페이스가 간편하며 서버 자원을 적게 사용 |
Ruby on Rails | Ruby를 기반으로 만들어진 프레임워크 / 단순화,자동화로 신속한 개발 가능 |
3. 서버 프로그램 구현
서버 프로그램은 응용 소프트웨어와 동일하게 모듈 및 공통 모듈을 개발한 후 모듈들을 통합하는 방식으로 구현
- 모듈은 모듈화를 통해 분리된 시스템의 각 기능들로, 서브 루틴, 서브시스템, 소프트웨어 내의 프로그램, 작업 단위 등과 같은 의미로 사용
* 루틴 : 기능을 가진 명령들의 모임
메인 루틴 : 프로그램 실행의 큰 줄기가 되는 것
서브 루틴 : 메인 루틴에 의해 필요할 때마다 호출되는 루틴
- 모듈의 독립성(↑): 결합도(↓) 응집도(↑) 모듈의 크기(↓)
* 결합도 : 모듈 간에 상호 의존하는 정도 또는 연관 관계
* 응집도 : 정보 은닉 개념을 확장한 것으로 명령어나 호출문 등 모듈의 내부 요소들의 서로 관련되어 있는 정보, 즉 모듈이 독립적인 기능으로 정의되어 있는 정도
- 공통 모듈 : 여러 프로그램에서 재사용할 수 있는 모듈
3.1 프레임워크의 특성
- 모듈화 : 프레임워크는 캡슐화를 통해 모듈화를 강화하고 설계 및 구현의 변경에 따른 영향을 최소화함으로서 소프트웨어의 품질을 향상시킨다.
- 재사용성 : 프레임워크는 재사용 가능한 모듈들을 제공함으로써 개발자의 생산성을 향상시킨다.
- 확장성 : 프레임워크는 다형성을 통한 인터페이스 확장이 가능하여 다양한 형태와 기능을 가진 애플리케이션 개발이 가능
- 제어의 역흐름(Inversion of Control) : 개발자가 관리하고 통제해야 하는 객체들의 제어를 프레임워크에 넘김으로써 생산성을 향상시킨다.
* 다형성 : 메시지에 의해 객체(클래스)가 연산을 수행하게 될 때 하나의 메시지에 대해 각각의 객체가 가지고 있는 고유한 방법으로 응답할 수 있는 능력
Section 123. 보안 및 API
1. 소프트웨어 개발 보안
소프트웨어 개발 과정에서 발생할 수 있는 보안 취약점을 최소화하여 보안 위협으로부터 안전한 소프트웨어를 개발하기 위한 일련의 보안 활동
- 데이터의 기밀성, 무결성, 가용성을 유지하는 것이 목표
- 정부에서 제공하는 소프트웨어 개발 보안 가이드를 참고하여 소프트웨어 개발과정에서 점검해야 할 보안 항목들을 점검
2. 소프트웨어 개발 보안 점검 항목
세션 통제 | - 세션(서버와 클라이언트의 연결)의 연결과 연결로 인해 발생하는 정보를 관리하는 것 - 보안 약점 : 불충분한 세션 관리, 잘못된 세션에 의한 정보 노출 등 |
입력 데이터 검증 및 표현 | - 입력 데이터에 대한 유효성 검증체계를 갖추고 검증 실패 시 이를 처리할 수 있도록 코딩하는 것 - 보안 약점 : SQL 삽입, 경로 조작 및 자원 삽입, 크로스사이트 스크립팅(XSS) 등 |
보안 기능 | - 인증, 접근제어, 기밀성, 암호화 등의 기능을 의미 - 보안 약점 : 적절한 인증 없는 중요기능 허용, 부적절한 인가 등 |
시간 및 상태 | - 동시 수행을 지원하는 병렬 처리 시스템이나 다수의 프로세스가 동작하는 환경에서 시간과 실행 상태를 관리하여 시스템이 원활히 동작되도록 코딩하는 것을 의미 - 보안 약점 : 검사 시점과 사용 시점(TOCTOU) 경쟁조건, 종료되지 않는 반복문 또는 재귀함수 등 |
에러처리 | - 오류를 사전에 정의하여 에러로 인해 발생할 수 있는 문제들을 예방하는 것을 의미 - 보안 약점 : 오류 메시지를 통한 정보 노출, 오류 상황 대응 부재 등 |
코드 오류 | - 개발자들이 코딩 중 실수하기 쉬운 형 변환, 자원의 반환 등을 고려하며 코딩하는 것을 의미 - 보안 약점 : 널 포인터 역참조, 부적절한 자원 해제 등 |
캡슐화 | - 데이터(속성)와 데이터를 처리하는 함수를 하나의 객체로 묶어 코딩하는 것을 의미 - 보안 약점 : 잘못된 세션에 의한 데이터 정보 노출, 제거되지 않고 남은 디버그 코드 등 |
API 오용 | - API를 잘못 사용하거나 보안에 취약한 API를 사용하지 않도록 고려하여 코딩하는 것을 의미 - 보안 약점 : DNS looksp에 의존한 보안결정, 취약한 API 사용 |
3. API (Application Programming Interface)
응용 프로그램 개발 시 운영체제나 프로그래밍 언어 등에 있는 라이브러리를 이용할 수 있도록 규칙 등을 정의해 놓은 인터페이스
(ex. 리모컨 - TV를 조작하기 위해 제조사가 미리 정해둔 방법이 API)
- 특정한 작업을 수행하기 위해 사용되거나, 운영체제의 파일 제어, 화상 처리, 문자 제어 등의 기능을 활용하기 위해 사용
- Windows API, 단일 유닉스 규격(SUS), Java API, 웹 API 등이 있다.
Section 124. 배치 프로그램
1. 배치 프로그램
사용자와의 상호 작용 없이 여러 작업들을 미리 정해진 일련의 순서에 따라 일괄적으로 처리하는 것
- 수행 주기
정기 배치 | 일, 주, 월과 같이 정해진 기간에 정기적으로 수행 |
이벤트성 배치 | 특정 조건을 설정해두고 조건이 충족될 때만 수행 |
On-Demand 배치 | 사용자 요청 시 수행 |
- 필수 요소
대용량 데이터 | 대량의 데이터를 가져오거나, 전달하거나, 계산하는 등의 처리가 가능해야 한다. |
자동화 | 심각한 오류가 발생하는 상황을 제외하고는 사용자의 개입 없이 수행되어야 한다. |
견고성 | 잘못된 데이터나 데이터 중복 등의 상황으로 중단되는 일 없이 수행되어야 한다. |
안정성/신뢰성 | 오류가 발생하면 오류의 발생 위치, 시간 등을 추적할 수 있어야 한다. |
성능 | 다른 응용 프로그램의 수행을 방해하지 않아야 하고, 지정된 시간 내에 처리가 완료되어야 한다. |
2. 배치 스케줄러 (잡 스케줄러)
일괄 처리 작업이 설정된 주기에 맞춰 자동으로 수행되도록 지원해주는 도구
2.1 스프링 배치
- 스프링 프레임워크의 특성을 그대로 가져와 스프링이 가지고 있는 다양한 기능들을 모두 사용할 수 있다.
- 스프링 프레임워크 : 웹 서버 개발을 위해 다양한 API를 제공하는 오픈 소스의 경량형 애플리케이션 프레임워크로 전자정부 표준 프레임워크의 기반 기술로도 사용
- 데이터베이스나 파일의 데이터를 교환하는데 필요한 컴포넌트들을 제공한다.
- 로그 관리, 추적, 트랜잭션 관리, 작업 처리 통계, 작업 재시작 등의 다양한 기능을 제공한다.
- 주요 구성 요소와 역할
Job | 수행할 작업 정의 |
Job Launcher | 실행을 위한 인터페이스 |
Step | Job 처리를 위한 제어 정보 |
Jop Repository | Step의 제어 정보를 포함하여 작업 실행을 위한 모든 정보 저장 |
2.2 Quartz
- 스프링 프레임워크로 개발되는 응용 프로그램들의 일괄 처리를 위한 다양한 기능을 제공하는 오픈 소스 라이브러리
- 수행할 작업과 수행 시간을 관리하는 요소들을 분리하여 일괄 처리 작업에 유연성을 제공한다.
- 주요 구성 요소와 역할
Scheduler | 실행 환경 관리 |
Job | 수행할 작업 정의 |
JobDetail | Job의 상세 정보 |
Trigger | Job의 실행 스케줄 정의 |
Section 125. 패키지 소프트웨어
기업에서 일반적으로 사용하는 여러 기능들을 통합하여 제공하는 소프트웨어