일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
1 | 2 | 3 | ||||
4 | 5 | 6 | 7 | 8 | 9 | 10 |
11 | 12 | 13 | 14 | 15 | 16 | 17 |
18 | 19 | 20 | 21 | 22 | 23 | 24 |
25 | 26 | 27 | 28 | 29 | 30 | 31 |
- 다음에 또 만나자
- 대외활동
- AWS
- 아싸의 생일
- 다행이야...ㅎ
- 정보처리기사 2022
- 다들 안잊어서
- 확진
- 교수님 과제 이제 그만..
- 재택치료
- 교육봉사
- 플러터
- CRUDS
- 지독한 컨셉충
- 뽀모도로 타이머
- 2022 정보처리기사
- N-Queen
- 수제비 2022
- 스프링 MVC
- FLUTTER
- 레이튼 교수와 이상한 마을
- 얘들아 잘 지내니
- pem키 분실
- 모바일 청첩장
- 정보처리기사2022
- 대학생
- 개강해짐
- 자가격리
- 생일축하해 나 자신
- 수제비2022 정리
- Today
- Total
Rei’s Tech diary
Chapter 1. 서버프로그램 구현 본문
[1] 개발환경 구축
#. 개발환경 구축 도구의 분류
구분 | 설명 |
빌드 도구 | ˙ 작성한 코드의 빌드 및 배포를 수행하는 도구 ˙ 각각의 구성요소와 모듈에 대한 의존성 관리를 지원하는 도구 |
구현 도구 | ˙ 코드의 작성과 디버깅, 수정 등과 같은 작업 시 사용되는 도구 ˙ 프로그램을 개발할 때 가장 많이 사용되는 도구 |
테스트 도구 | ˙ 코드의 기능 검증과 전체의 품질을 높이기 위해 사용하는 도구 ˙ 코드의 테스트, 테스트에 대한 계획, 수행 및 분석 등의 작업 수행 |
형상 관리 도구 | ˙ 개발자들이 작성한 코드와 리소스 등 산출물에 대한 버전 관리를 위한 도구 ˙ 프로젝트 진행 시 필수로 포함되는 도구 |
① 하드웨어 개발환경
㉮ 서버 하드웨어 개발환경 (예시 알아둘 것!)
구분 | 설명 |
웹 서버 (Web Server) |
˙ 웹 브라우저의 요청을 받아 HTTP를 통해 웹 브라우저에서 요청하는 HTML 문서나 오브젝트(이미지 파일 등)를 전송해주는 서버 예) Apache HTTP Server, Microsoft Internet Information Service, Google Web Server |
웹 애플리케이션 서버 (WAS; Web Application Server) |
˙ 사용자에게 동적 서비스를 제공하기 위해 웹 서버로부터 요청을 받아 데이터 처리를 수행하거나, 웹 서버와 데이터베이스 서버 또는 웹 서버와 파일 서버 사이에서 인터페이스 역할을 수행하는 서버 예) Oracle WebLogic, Apache Tomcat, IBM WebSphere, JEUS |
데이터베이스 서버 (DB Server) |
˙ 데이터베이스와 이를 관리하는 DBMS를 운영하는 서버 예) Mysql Server, Oracle Server, MS-SQL Server |
파일 서버 (File Server) |
˙ 파일 저장 하드웨어로 물리 저장 장치를 활용한 서버 ˙ 대용량 HDD, SSD 등의 장치가 존재 예) AWS S3 |
㉯ 클라이언트 하드웨어 개발환경
구분 | 설명 |
클라이언트 프로그램 |
˙ 설치를 통해 사용자와 커뮤니케이션하는 프로그램 ˙ Visual Basic, C#, Delphi 등으로 개발되어 사용 |
웹 브라우저 | ˙ 웹 서비스의 형태로 서버에서 웹 애플리케이션을 응답 시 브라우저를 통해 사용자와 커뮤니케이션 ˙ 일반적인 형태의 웹 사이트가 해당 |
모바일 앱 | ˙ 모바일 디바이스에 설치되어 활용되는 애플리케이션 ˙ App Store, Android Market 등을 통해 다운로드 가능 |
모바일 웹 | ˙ 웹 브라우저와 동일한 형태로 모바일 상 웹 브라우저를 통해 서비스를 제공 ˙ 모바일에 최적화되어 제공되는 웹 사이트가 해당 |
② 소프트웨어 개발환경
- 운영체제
- 미들웨어
- DBMS
#. 프레임워크(Framework)
- 프레임워크는 소프트웨어의 구체적인 부분에 해당하는 설계와 구현을 재사용이 가능하게끔 일련의 협업화된 형태로 클래스들을 제공하는 틀이다.
- 재사용이 가능하도록 소프트웨어 구성에 필요한 기본을 제공한다.
- 정보 시스템의 개발 및 운영을 지원하는 도구 및 가이드 등을 포함한다.
#. 프레임 워크의 특징
- 모듈화 (Modularity)
- 재사용성 (Reusability)
- 확장성 (Extensibility)
- 제어의 역행 (Inversion of Control)
#. 프레임워크 구성요소
- 개발환경
- 실행환경
- 운영환경
- 관리환경
[2] 공통 모듈 구현
#. 재사용 (Reuse) ★
- 재사용은 목표 시스템의 개발 시간 및 비용 절감을 위하여 검증된 기능을 파악하고 재구성하여 시스템에 응용하기 위한 최적화 작업이다.
- 기존의 소프트웨어 또는 소프트웨어 지식을 활용하여 새로운 소프트웨어를 구축하는 작업이다.
#. 재사용의 유형
유형 | 설명 |
함수와 객체 재사용 | ˙ 클래스(Class)나 함수(Function) 단위로 구현한 소스 코드를 재사용 |
컴포넌트 재사용 | ˙ 컴포넌트(Component) 단위로 재사용 ˙ 컴포넌트의 인터페이스를 통해 통신 |
애플리케이션 재사용 | ˙ 공통 기능을 제공하는 애플리케이션과 기능을 공유하여 재사용 |
#. 재사용 프로그래밍 기법
기법 | 설명 |
객체지향 프로그래밍 |
˙ 객체 단위로 재사용이 이루어지도록 설계 ˙ 구조화된 프로그래밍 구현이 가능 |
제네릭 프로그래밍 |
˙ 하나의 값이 여러 데이터 타입을 가질 수 있음 ˙ 재사용성을 높일 수 있는 프로그래밍 방식 |
자동 프로그래밍 |
˙ 사용자가 설정 변수에 근거한 프로그램 생성 |
메타 프로그래밍 |
˙ 런타임에 수행해야 할 작업의 일부를 컴파일 타임 동안 수행하는 프로그램 |
#. 모듈화(Modularization) ★
- 모듈화는 프로그램을 개발 시 생산성과 최적화, 관리에 용이하게 기능 단위로 분할하는 기법
- 프로그램을 구성하는 데이터와 함수들을 묶어서 모듈을 형성
#. 모듈화의 장점
- 효율적인 관리 및 성능 향상
- 용이성 증대, 복잡성 감소
- 기능의 분리가 가능, 단순해지는 인터페이스
- 개발과 유지보수에 용이
#. 모듈화의 원리
- 정보 은닉
- 분할과 정복
- 데이터 추상화
- 모듈 독립성
#. 모듈화 측정 지표
- 모듈화의 적정성을 측정하는 지표는 응집도와 결합도이다.
- 좋은 모듈화란 용도에 맞게 잘 구분된 기능을 가진 모듈들로 세분화하는 것이다.
- 개별 모듈은 독립적으로 주어진 역할 만을 수행하며, 타 모듈에 의존성이 높지 않아야 한다.
- 모듈의 독립성은 결합도와 응집도에 의해 측정되며, 독립성을 높이려면 모듈의 결합도를 약하게하고 응집도를 강하게 하며 모듈의 크기를 작게 만들어야 한다.
#. 모듈화의 유형
구분 | 유형 | 설명 |
설계 측면 |
모듈 (Module) | ˙ 설계 시 연관 기능을 한 부분에 모아놓고 라이브러리 형태로 사용 |
컴포넌트 (Component) | ˙ 바이너리 형태의 재사용 가능한 형태 ˙ 인터페이스에 의해 로직을 수행항 수 있는 모듈 단위 |
|
서비스 (Service) | ˙ 기존 컴포넌트보다는 느슨한 결합 형태의 기능을 제공하는 모듈 단위 | |
구현 측면 |
함수 (Function) | ˙ 프로그램 구현 시 커다란 프로그램의 일부 코드로 특정한 작업을 수행하고 상대적으로 다른 코드에 비해 독립적인 모듈 |
매크로 (Macro) | ˙ 프로그램의 반복되는 부분을 특정 이름을 부여하고 실행할 수 있도록 하는 기법 | |
인라인 (Inline) | ˙ 프로그램 구현 시 반복되는 부분을 특정 이름을 부여하여 실행할 수 있도록 하는 프로그램 기법 |
#. 효과적인 모듈 설계를 위한 유의사항 ★
- 모듈 간의 결합도를 약하게하면 모듈 독립성이 향상된다.
- 복잡도와 중복성을 줄이고 일관성을 유지시킨다.
- 모듈의 기능은 예측이 가능해야 하며, 지나치게 제한적이면 안된다.
- 유지보수가 용이해야 한다.
- 모듈의 수가 증가하면 상대적으로 각 모듈의 크기가 커지며, 모듈 사이의 상호 교류가 감소하여 과부하(Overload) 현상이 나타난다.
#. 결합도(Coupling) ★ - "낮아야한다!"
- 결합도는 모듈 내부가 아닌 외부 모듈과의 연관도 또는 모듈 간의 상호 의존성을 나타내는 정도이다.
- 결합도는 소프트웨어 구조에서 모듈 간의 관련성을 측정하는 척도이다.
#. 결합도의 유형 ★★★ (내공 외제 스자)
' 내용 > 공통 > 외부 > 제어 > 스탬프 > 자료 ' 순으로 결합도가 낮다.
유형 | 설명 |
내용 결합도 (Content Coupling) |
˙ 다른 모듈 내부에 있는 변수나 기능을 다른 모듈에서 사용하는 경우의 결합도 ˙ 하나의 모듈이 직접적으로 다른 모듈의 내용을 참조할 때 두 모듈은 내용적으로 결합되어 있는 경우의 결합도 |
공통 결합도 (Common Coupling) |
˙ 파라키터가 아닌 모듈 밖에 선언되어 있는 전역 변수를 참조하고 전역 변수를 갱신하는 식으로 상호작용하는 경우의 결합도 ˙ 공유되는 공통 데이터 영역을 여러 모듈이 사용할 때의 결합도 |
외부 결합도 (External Coupling) |
˙ 두 개의 모듈이 외부에서 도입된 데이터 포맷, 통신 프로토콜 또는 디바이스 인터페이스를 공유할 경우의 결합도 ˙ 외부 모듈에서 선언한 데이터(변수)를 외부의 다른 모듈에서 참조할 때의 결합도 |
제어 결합도 (Control Coupling) |
˙어떤 모듈이 다른 모듈의 내부 논리 조직을 제어하기 위한 목적으로 제어신호를 이용하여 통신하는 경우의 결합도 ˙ 하위 모듈에서 상위 모듈로 제어 신호가 이동하여 상위 모듈에게 처리 명령을 부여하는 권리 전도 현상이 발생하는 결합도 |
스탬프 결합도 (Stamp Coupling) |
˙모듈 간의 인터페이스로 배열이나 객체, 구조 등이 전달되는 경우의 결합도 ˙ 두 모듈이 동일한 자료 구조를 조회하는 경우의 결합도이며, 자료 구조의 어떠한 변화는 모든 모듈에 영향을 미치게 됨 |
자료 결합도 (Data Coupling) |
˙모듈 간의 인터페이스로 전달되는 파라미터를 통해서만 모듈 간의 상호작용이 일어나는 경우의 결합도 ˙ 한 모듈의 내용을 변경하더라도 다른 모듈에는 영향을 미치지 않는 상태로 가장 바람직한 결합도 |
#. 응집도 (Cohesion) ★ - "높아야 한다!"
- 응집도는 모듈의 독립성을 나타내는 개념으로, 모듈 내부 구성요소 간 연관 정도이다.
- 응집도는 정보 은닉 개념의 확장개념으로, 하나의 모듈은 하나의 기능을 수행하는 것을 의미한다.
#. 응집도의 유형 ★★★ (우논 시절 통순기)
' 우연적 < 논리적 < 시간적 < 절차적 < 통신적 < 순차적 < 기능적 ' 순서로 응집도가 높아진다.
유형 | 설명 |
우연적 응집도 (Coincidental Cohesion) |
˙ 서로 간에 어떠한 의미 있는 연관 관계도 없는 기능 요소로 구성될 경우의 응집도 ˙ 서로 다른 상위 모듈에 의해 호출되어 처리상의 연관성이 없는 서로 다른 기능을 수행할 경우의 응집도 |
논리적 응집도 (Logical Cohesion) |
˙ 유사항 성격을 갖거나 특정 형태로 분류되는 처리요소들이 한 모듈에서 처리되는 경우의 응집도 |
시간적 응집도 (Temporal Cohesion) |
˙ 연관된 기능이라기보다는 특정 시간에 처리되어야 하는 활동들을 한 모듈에서 처리할 경우의 응집도 |
절차적 응집도 (Procedural Cohesion) |
˙ 모듈이 다수의 관련 기능을 가질 때 모듈 안의 구성요소들이 그 기능을 순차적으로 수행할 경우의 응집도 |
통신적 응집도 (Communication Cohesion) |
˙ 동일한 입력과 출력을 사용하여 다른 기능을 수행하는 활동들이 모여 있을 경우의 응집도 |
순차적 응집도 (Sequential Cohesion) |
˙ 모듈 내에서 한 활동으로부터 나온 출력값을 다른 활동이 사용할 경우의 응집도 |
기능적 응집도 (Functional Cohesion) |
˙ 모듈 내부의 모든 기능이 단일한 목적을 위해 수행되는 경우의 응집도 |
[3] 서버 프로그램 구현
#. 보안 취약성(Vulnerability)
- 보안 취약점은 정보시스템에 불법적인 사용자 접근, 정상적인 서비스를 방해, 정보시스템에서 관리하는 중요 데이터의 유출, 변조, 삭제에 대한 위협이다.
- 응용 프로그램의 보안 취약점, 위협 요소, 허점을 탐지하는 데 도움을 준다.
#. 침투 테스트 (Penetration Test)
- 침투 테스트는 시스템을 안전하게 만들기 위해 전문 해커가 공격자보다 먼저 시스템의 취약점을 찾기 위한 방법
#. 취약성 공격
- 취약성 공격은 공격자가 원하는 결과를 얻기 위해서 악성 코드, 악성 프로그램 등을 이용하여 보안 버그나 잘못된 설정 등의 결함에 대한 공격이다.
- 취약성 공격의 목표는 대상 시스템을 장악하여 정보를 빼내거나 혹은 다른 용도로 악용하기 위함이다.
- 기존 취약점 공격과는 달리 피해 시스템의 중요 데이터를 암호화하여 인질로 삼고 금전을 요구하는 렌섬웨어(Ransomware)도 취약점 공격을 통해 권한을 획득하고 있다.
#. 취약성에 따른 공격기법
유형 | 설명 |
서비스 거부(DoS) | 무의미한 서비스 요청등의 반복을 통해 특정 시스템의 가용자원을 소모시켜 서비스 가용성을 저하시키는 공격기법 |
코드 실행 | 응용 프로그램이 적절한 입력 유효성 검사 없이 쉘(Shell) 명령을 실행하는 취약점을 이용하여 공격자가 원하는 임의 코드가 실행되도록 하는 공격기법 |
버퍼 오버플로우 | 정해진 메모리의 범위를 넘치게 해서 원래의 리턴 주소를 변경시켜 임의의 프로그램이나 함수를 실행시키는 시스템 해킹 기법 |
정보 수집 | 공격 전 서버 또는 시스템의 취약점, 네트워크 경로, 방화벽 설치 유무를 알아내고 정보를 수집하는 공격기법 |
권한 상승 | 악성프로그램 설치 후 데이터 조회, 변경, 삭제 등을 통한 권한 상승으로 루트권한을 획득하는 공격기법 |
SQL 삽입 | 데이터베이스와 연동된 웹 애플리케이션에서 공격자가 입력 폼 및 URL 입력란에 SQL 문을 삽입하여 DB로부터 정보를 열람할 수 있는 공격기법 |
크로스 사이트 스크립팅 (XSS) |
공격자가 게시판에 악성 스크립트를 작성, 삽입하여 사용자가 그것을 보았을 때 이벤트 발생을 통해 사용자의 쿠키정보, 개인정보 등을 특정 사이트로 전송하는 공격기법 |
사이트 간 요청 위조 공격 (CSRF) |
웹 사이트 취약점 공격의 하나로, 사용자가 자신의 의지와는 무관하게 공격자가 의도한 행위(수정, 삭제, 등록 등)를 특정 웹 사이트에 요청하게 하는 공격기법 |
디렉터리 접근 | HTTP 기반의 공격으로 액세스가 제한된 디렉터리에 접근하여, 서버의 루트 디렉터리에서 외부 명령을 실행하여 파일, 웹 소스 등을 강제로 내려받을 수 있는 공격기법 |
FTP 바운스 공격 | FTP 서버가 데이터를 전송할 때 목적지가 어디인지 검사하지 않는 설계상의 문제점을 이용한 공격기법 |
[4] 배치 프로그램 구현
#. 배치 프로그램
- 배치 프로그램은 사용자와의 상호 작용 없이 일련의 작업들을 작업 단위로 묶어 정기적으로 반복 수행하거나 정해진 규칙에 따라 일괄 처리하는 기법
#. 배치 프로그램의 필수 요소
필수 요소 | 내용 |
자동화 | 심각한 오류 상황 외에는 사용자의 개입 없이 동작해야 함 |
안정성 | 어떤 문제가 생겼는지, 언제 발생했는지 등을 추적할 수 있어야 함 |
대용량 데이터 | 대용량의 데이터를 처리할 수 있어야 함 |
견고성 | 유효하지 않은 데이터의 경우도 처리해서 비정상적인 동작 중단이 발생하지 않아야 함 |
성능 | 주어진 시간 내에 처리를 완료할 수 있어야 하고, 동시에 동작하고 있는 다른 애플리케이션을 방해하지 말아야 함 |
#. 배치 프로그램의 유형
유형 | 설명 |
이벤트 배치 | 사전에 정의해 둔 조건 충족 시 자동으로 실행 |
온디멘드 배치 | 사용자의 명시적 요구가 있을 때마다 실행 |
정기 배치 | 정해진 시점(주로 야간)에 정기적으로 실행 |
#. 배치 프로그램의 종류
- 스프링 배치
- 쿼츠 스케줄러
'정보처리기사 > [4] 프로그래밍 언어 활용' 카테고리의 다른 글
Chapter 3. 응용 SW 기초 기술 활용 - (2) (0) | 2022.03.25 |
---|---|
Chapter 3. 응용 SW 기초 기술 활용 - (1) (0) | 2022.03.25 |
Chapter 2. 프로그래밍 언어 활용 (0) | 2022.03.23 |