Chapter 01. 서버프로그램 구현
1. 개발환경 구축
(1) 개발환경 구축
개발환경 구축의 개념
개발환경 구축은 응용 소프트웨어의 개발 편의성, 개발 성능 향상을 위해 하드웨어 및 소프트웨어 개발환경을 구축하는 과정이다.
개발환경 구축 도구의 분류 = 빌구테형
구분 | 설명 |
빌드 도구 | 작성한 코드의 빌드 및 배포를 수행하는 도구 각각의 구성요소와 모듈에 대한 의존성 관리를 지원하는 도구 |
구현 도구 | 코드의 작성과 디버깅, 수정 등과 같은 작업 시 사용되는 도구 프로그램을 개발할 때 가장 많이 사용되는 도구 |
테스트 도구 | 코드의 기능 검증과 전체의 품질을 높이기 위해 사용하는 도구 코드의 테스트, 테스트에 대한 계획, 수행 및 분석 등의 작업 수행 |
형상 관리 도구 | 개발자들이 작성한 코드와 리소스 등 산출물에 대한 버전 관리를 위한 도구 프로젝트 진행 시 필수로 포함되는 도구 |
개발 환경 구성요소
① 하드웨어 개발환경
웹 서버(Web Server) : 웹 브라우저의 요청을 받아 HTTP를 통해 웹 브라우저에서 요청하는 HTML 문서나 오브젝트를 전송해주는 서버
웹 애플리케이션 서버(WAS : Web Application Server) : 사용자에게 동적 서비스를 제공하기 위해 웹 서버로부터 요청을 받아 데이터 처리를 수행하거나, 웹 서버와 데이터베이스 서버 또는 웹 서버와 파일 서버 사이에서 인터페이스 역할을 수행하는 서버
데이터베이스 서버(DB Server) : 데이터베이스와 이를 관리하는 DBMS를 운영하는 서버
파일 서버(File Server) : 파일 저장 하드웨어로 물리 저장 장치를 활용한 서버
클라이언트 하드웨어 환경
클라이언트 프로그램 : 설치를 통해 사용자와 커뮤니케이션하는 프로그램
웹 브라우저 : 웹 서비스의 형태로 서버에서 웹 애플리케이션을 응답 시 브라우저를 통해 사용자와 커뮤니케이션
모바일 앱 : 모바일 디바이스에 설치되어 활용되는 애플리케이션
모바일 웹 : 웹 브라우저와 동일한 형태로 모바일 상 웹 브라우저를 통해 서비스를 제공
② 소프트웨어 개발환경
운영체제
미들웨어
DBMS
개발환경 구축 절차
프로젝트 요구사항 분석 > 필요 도구 설계 > 개발언어 선정 > 구현도구 선정 > 빌드, 테스트 도구 선정
(2) 서버 개발 프레임워크
프레임워크의 개념
프레임워크는 소프트웨어의 구체적인 부분에 해당하는 설계와 구현을 재사용이 가능하게끔 일련의 협업화된 형태로 클래스들을 제공하는 틀이다.
프레임워크의 특징 = 모재확역
특징 | 설명 |
모듈화 (Modularity) |
프레임워크는 구현을 인터페이스 뒤에 감춰 모듈화를 강화 |
재사용성 (Reusability) |
인터페이스를 통해 여러 애플리케이션에서 반복적으로 사용하는 일반적 컴포넌트를 정의하여 재사용성을 높임 |
확장성 (Extensibility) |
다형성을 통해 애플리케이션이 프레임워크의 인터페이스를 확장 |
제어의 역행 (Inversion of Control) |
프레임워크 코드가 전체 애플리케이션의 처리 흐름을 제어 |
프레임워크의 구성요소 = 개실운관
구성요소 | 설명 |
개발환경 | 설계, 구현, 테스트 등 개발에 필요한 지원 도구 모음 |
실행환경 | 자바 기반 응용시스템 개발 시 필수적 기능을 패턴화해 미리 구현해둔 라이브러리 코드 모음 |
운영환경 | 표준 프레임워크 기반 개발 시스템에 대한 운영 시 필요한 의사소통 및 모니터링 도구 모음 |
관리환경 | 표준 프레임워크에 대한 기술 지원, 업그레이드 등 관리하기 위한 내부 업무 시스템 |
2. 공통 모듈 구현
(1) 재사용
재사용의 개념
재사용은 목표 시스템의 개발 시간 및 비용 절감을 위하여 검증된 기능을 파악하고 재구성하여 시스템에 응용하기 위한 최적화 작업이다.
재사용의 유형
유형 | 설명 |
함수와 객체 재사용 | 클래스나 함수 단위로 구현한 소스 코드를 재사용 |
컴포넌트 재사용 | 컴포넌트 단위로 재사용 컴포넌트의 인터페이스를 통해 통신 |
애플리케이션 재사용 | 공통기능을 제공하는 애플리케이션과 기능을 공유하여 재사용 |
코드 재사용(Code Reuse)
코드 재사용은 프로그램의 일부 또는 전부를 이후의 다른 프로그램을 만들 때 사용하는 기법이다.
코딩 작업에 소비하는 시간과 에너지를 절약하는 전형적 기법이다.
프로그램 이전 버전에서 시작해 다음의 버전을 개발하는 작업도 코드 재사용에 속한다.
기존 프로그램에서 코드를 일부 또는 전체를 추출하여 새로운 프로그램에 복사할 경우 중복 코드로 인한 문제가 발생할 수 있다.
재사용 프로그래밍 기법 = 객제자메
기법 | 설명 |
객체지향 프로그래밍 | 객체 단위로 재사용이 이루어지도록 설계 구조화된 프로그래밍 구현이 가능 |
제네릭 프로그래밍 | 하나의 값이 여러 데이터 타입을 가질 수 있음 재사용성을 높일 수 있는 프로그래밍 방식 |
자동 프로그래밍 | 사용자가 설정 변수에 근거한 프로그램 생성 |
메타 프로그래밍 | 런타임에 수행해야 할 작업의 일부를 컴파일 타임 동안 수행하는 프로그램 |
(2) 모듈화
모듈화(Modularization)의 개념
모듈화는 프로그램을 개발 시 생산성과 최적화, 관리에 용이하게 기능 단위로 분할하는 기법이다.
모듈화의 장점
모듈화는 프로그램의 호율적인 관리 및 성능 향상이 가능하다.
소프트웨어 이해의 용이성 증대와 복잡성이 감소한다.
기능의 분리가 가능하고 인터페이스가 단순해진다.
모듈의 재사용 가능으로 개발과 유지보수가 용이하다.
모듈화의 원리 = 정분추모
원리 | 설명 |
정보 은닉 (Information Hiding) |
어렵거나 변경 가능성이 있는 모듈을 타 모듈로부터 은폐한다는 원리 |
분할과 정복 (Divide & Conquer) |
복잡한 문제를 분해, 모듈 단위로 문제 해결한다는 원리 |
데이터 추상화 (Data Abstraction) |
각 모듈 자료 구조를 액세스하고 수정하는 함수 내에 자료 구조의 표현 내역을 은폐한다는 원리 |
모듈 독립성 (Module Independency) |
낮은 결합도와 높은 응집도를 가진다는 원리 |
모듈화의 유형 = 모컴서 함매인
구분 | 유형 | 설명 |
설계 측면 | 모듈(Module) | 설계 시 연관 기능을 한 부분에 모아놓고 라이브러리 형태로 사용 |
컴포넌트(Component) | 바이너리 형태의 재사용 가능한 형태 인터페이스에 의해 로직을 수행할 수 있는 모듈 단위 |
|
서비스(Service) | 기존 컴포넌트보다는 느슨한 결합 형태의 기능을 제공하는 모듈 단위 | |
구현 측면 | 함수(Function) | 프로그램 구현 시 커다란 프로그램의 일부 코드로 특정한 작업을 수행하고 상대적으로 다른 코드에 비해 독립적인 모듈 |
매크로(Macro) | 프로그램의 반복되는 부분을 특정 이름을 부여하고 실행할 수 있도록 하는 기법 | |
인라인(Inline) | 프로그램 구현 시 반복되는 부분을 특정 이름을 부여하여 실행할 수 있도록 프로그램 기법 |
효과적인 모듈 설계를 위한 유의사항
모듈 간의 결합도를 약하게 하면 모듈 독립성이 향상된다.
복잡도와 중복성을 줄이고 일관성을 유지시킨다.
모듈의 기능은 예측이 가능해야 하며 지나치게 제한적이면 안 된다.
유지보수가 용이해야 한다.
(3) 결합도
결합도(Coupling)의 개념
결합도는 모듈 내부가 아닌 외부의 모듈과의 연관도 또는 모듈 간의 상호의존성을 나타내는 정도이다.
결합도의 특징
모듈 연관성 없음
인터페이스 의존성
복잡성 감소
파급효과 최소화
결합도의 유형 = 내용>공통>외부>제어>스탬프>자료 순으로 결합도가 낮아진다.
유형 | 설명 |
내용 결합도 (Content) |
다른 모듈 내부에 있는 변수나 기능을 다른 모듈에서 사용하는 경우의 결합도 |
공통 결합도 (Common) |
파라미터가 아닌 모듈 밖에 선언되어 있는 전역 변수를 참조하고 전역 변수를 갱신하는 식으로 상호작용하는 경우의 결합도 |
외부 결합도 (External) |
두 개의 모듈이 외부에서 도입된 데이터 포맷, 통신 프로토콜 또는 디바이스 인터페이스를 공유할 경우의 결합도 |
제어 결합도 (Control) |
어떤 모듈이 다른 모듈의 내부 논리 조직을 제어하기 위한 목적으로 제어 신호를 이용하여 통신하는 경우의 결합도 |
스탬프 결합도 (Stamp) |
모듈 간의 인터페이스로 배열이나 객체, 구조 등이 전달되는 경우의 결합도 |
자료 결합도 (Data) |
모듈 간의 인터페이스로 전달되는 파라미터를 통해서만 모듈 간의 상호 작용이 일어나는 경우의 결합도 |
(4) 응집도
응집도(Cohesion)의 개념
응집도는 모듈의 독립성을 나타내는 개념으로, 모듈 내부 구성요소 간 연관 정도이다.
응집도의 특징
유사기능 영역구성
단일 책임할당
함수 간 상호협력
응집도의 유형 = 우연적<논리적<시간적<절차적<통신적<순차적<기능적 순서로 응집도가 높아진다.
유형 | 설명 |
우연적 응집도 (Coincidental) |
서로 간에 어떠한 의미 있는 연관 관계도 없는 기능 요소로 구성될 경우의 응집도 |
논리적 응집도 (Logical) |
유사한 성격을 갖거나 특정 형태로 분류되는 처리요소들이 한 모듈에서 처리되는 경우의 응집도 |
시간적 응집도 (Temporal) |
연관된 기능이라기보다는 특정 시간에 처리되어야 하는 활동들을 한 모듈에서 처리할 경우의 응집도 |
절차적 응집도 (Procedural) |
모듈이 다수의 관련 기능을 가질 때 모듈 안의 구성요소들이 그 기능을 순차적으로 수행할 경우의 응집도 |
통신적 응집도 (Communication) |
동일한 입력과 출력을 사용하여 다른 기능을 수행하는 활동들이 모여 있을 경우의 응집도 |
순차적 응집도 (Sequential) |
모듈 내에서 한 활동으로부터 나온 출력값을 다른 활동이 사용할 경우의 응집도 |
기능적 응집도 (Functional) |
모듈 내부의 모든 기능이 단일한 목적을 위해 수행되는 경우의 응집도 |
3. 서버 프로그램 구현
(1) 보안 취약성 식별
보안 취약성의 개념
보안 취약성은 정보시스템에 불법적인 사용자의 접근, 정상적인 서비스를 방해, 정보시스템에서 관리하는 중요 데이터의 유출, 변조, 삭제에 대한 위협이다.
취약성에 따른 공격기법
유형 | 설명 |
서비스 거부(Dos) | 무의미한 서비스 요청 등의 반복을 통해 특정 시스템의 가용자원을 소모시켜 서비스 가용성을 저하시키는 공격기법 |
코드 실행 | 응용 프로그램이 적절한 입력 유효성 검사 없이 쉘 명령을 실행하는 취약점을 이용하여 공격자가 원하는 임의 코드가 실행되도록 하는 공격기법 |
버퍼 오버플로우 | 정해진 메모리의 범위를 넘치게 해서 원래의 리턴 주소를 변경시켜 임의의 프로그램이나 함수를 실행시키는 시스템 해킹 기법 |
정보 수집 | 공격 전 서버 또는 시스템의 취약점, 네트워크 경로, 방화벽 설치 유무를 알아내고 정보를 수집하는 공격기법 |
권한 상승 | 악성프로그램 설치 후 데이터 조회, 변경, 삭제 등을 통한 권한 산승으로 루트권한을 획득하는 공격기법 |
SQL 삽입 (Injection) |
데이터베이스와 연동된 웹 애플리케이션에서 공격자가 입력 폼 및 URL 입력란에 SQL 문을 삽입하여 DB로부터 정보를 열람할 수 있는 공격기법 |
크로스 사이트 스크립팅 (XSS) |
공격자가 게시판에 악성 스크립트를 작성, 삽입하여 사용자가 그것을 보았을 때 이벤트 발생을 통해 사용자의 쿠키정보, 개인정보 등을 특정 사이트로 전송하는 공격기법 |
사이트 간 요청 위조 공격 (CSRF) |
웹 사이트 취약점 공격의 하나로, 사용자가 자신의 의지와는 무관하게 공격자가 의도한 행위를 특정 웹 사이트에 요청하게 하는 공격기법 |
디렉터리 접근 | HTTP 기반의 공격으로 액세스가 제한된 디렉터리에 접근하여, 서버의 루트 디렉터리에서 외부 명령을 실행하여 파일, 웹 소스 등을 강제로 내려받을 수 있는 공격기법 |
FTP 바운스 공격 | FTP 서버가 데이터를 전송할 때 목적지가 어디인지 검사하지 않는 설계상의 문제점을 이용한 공격기법 |
(2) API
API의 개념
API는 응용 프로그램에서 사용할 수 있도록, 운영체제나 프로그래밍 언어가 제공하는 기능을 제어할 수 있게 만든 인터페이스이다.
API의 유형
유형 | 설명 | 예시 |
오픈 API(Open API) | 누구나 쉽게 접근하여 정보를 공유하기 위해 만들어진 API | 기상청 API |
비공개 API(Close API) | 권한이 있는 일부 사용자들에게만 정보를 제공하기 위해 만들어진 API | 사내 API |
API의 종류
종류 | 설명 |
윈도즈 API | 마이크로소프트 윈도즈 운영체제가 사용하는 API |
웹 API | 웹 애플리케이션에서 다른 서비스에 요청을 보내고 응답을 받기 위해 정의된 API |
오픈 API | API 중에서 플랫폼의 기능과 콘텐츠를 외부에서 웹 프로토콜로 호출해 사용할 수 있게 개방한 API |
자바 API | 자바를 사용하여 쉽게 구현할 수 있도록 한 클래스 라이브러리의 집합 |
4. 배치 프로그램 구현
(1) 배치 프로그램
배치 프로그램의 개념
배치 프로그램은 사용자와의 상호 작용 없이 일련의 작업들을 작업 단위로 묶어 정기적으로 반복 수행하거나 정해진 규칙에 따라 일괄 처리하는 방법이다.
배치 프로그램의 필수 요소
필수 요소 | 내용 |
자동화 | 심가한 오류 상황 외에도 사용자 개입 없이 동작해야 함 |
안정성 | 어떤 문제가 생겼는지 등을 추적할 수 있어야 함 |
대용량 데이터 | 대용량의 데이터를 처리할 수 있어야 함 |
견고성 | 유효하지 않은 데이터의 경우도 처리해서 비정상적인 동작 중단이 발생하지 않아야 함 |
성능 | 주어진 시간 내에 처리를 완료할 수 있어야 하고, 동시에 동작하고 있는 다른 애플리케이션을 방해하지 말아야 함 |
배치 프로그램의 유형 = 이온정
유형 | 설명 |
이벤트 배치 | 사전에 정의해 둔 조건 충족 시 자동으로 실행 |
온디맨드 배치 | 사용자의 명시적 요구가 있을 때마다 실행 |
정기 배치 | 정해진 시점에 정기적으로 실행 |
배치 프로그램
종류 | 설명 |
스프링 배치 (Spring Batch) |
스프링 프레임워크의 AOP, DI, 서비스 추상화 등 스프링 프레임워크의 3대 요소를 모두 사용할 수 있는 대용량 처리를 제공하는 스케줄러 |
쿼츠 스케줄러 (Quartz Scheduler) |
스프링 프레임워크에 플러그인 되어 수행하는 작업과 실행 스케줄을 정의하는 트리거를 분리하여 유연성을 제공하는 오픈소스 기반 스케줄러 |
https://book.naver.com/bookdb/book_detail.nhn?bid=15910265
수제비 정보처리기사 필기
NCS 모듈제작에 참여한 경험을 기반으로, 다양한 모듈에서 시험 출제 빈도를 분석하여 출제 비중이 높은 내용 위주로 구성했다. 출제 비중이 낮고 이해하기 어려운 개념들은 과감하게 제외함으
book.naver.com
'IT 자격증 > 정보처리기사' 카테고리의 다른 글
(추가)정보처리기사 필기 4주차 Day-3 정리(추가) (0) | 2021.07.31 |
---|---|
정보처리기사 필기 4주차 Day-2 정리 (0) | 2021.07.29 |
정보처리기사 필기 3주차 Day-5 정리 (0) | 2021.07.26 |
정보처리기사 필기 3주차 Day-4 정리 (0) | 2021.07.25 |
(추가)정보처리기사 필기 3주차 Day-3 정리(추가) (0) | 2021.07.24 |