Rei’s Tech diary

Chapter 1. 서버프로그램 구현 본문

정보처리기사/[4] 프로그래밍 언어 활용

Chapter 1. 서버프로그램 구현

Reiger 2022. 3. 22. 17:03

[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] 배치 프로그램 구현

 

#. 배치 프로그램

- 배치 프로그램은 사용자와의 상호 작용 없이 일련의 작업들을 작업 단위로 묶어 정기적으로 반복 수행하거나 정해진 규칙에 따라 일괄 처리하는 기법

 

#. 배치 프로그램의 필수 요소

필수 요소 내용
자동화 심각한 오류 상황 외에는 사용자의 개입 없이 동작해야 함
안정성 어떤 문제가 생겼는지, 언제 발생했는지 등을 추적할 수 있어야 함
대용량 데이터 대용량의 데이터를 처리할 수 있어야 함
견고성 유효하지 않은 데이터의 경우도 처리해서 비정상적인 동작 중단이 발생하지 않아야 함
성능 주어진 시간 내에 처리를 완료할 수 있어야 하고, 동시에 동작하고 있는 다른 애플리케이션을 방해하지 말아야 함

 

#. 배치 프로그램의 유형

유형 설명
이벤트 배치 사전에 정의해 둔 조건 충족 시 자동으로 실행
온디멘드 배치 사용자의 명시적 요구가 있을 때마다 실행
정기 배치 정해진 시점(주로 야간)에 정기적으로 실행

 

#. 배치 프로그램의 종류

- 스프링 배치

- 쿼츠 스케줄러