정보처리기사/[수제비] 정보처리기사 실기

VIII. 서버프로그램 구현

web_seul 2023. 4. 5. 17:03
반응형

01. 개발환경 구축 : 응용 소프트웨어의 개발 편의성, 개발성능 향상을 위해 하드웨어 및 소프트웨어 개발환경을 구축하는 과정

빌드도구 작성한 코드의 빌드 및 배포를 수행하는 도구
각각의 구성요소와 모듈에 대한 의존성 관리를 지원하는 도구
Gradle, Maven, Ant
구현도구 코드의 작성과 디버깅, 수정 등과 같은 작업시 사용되는 도구
프로그램을 개발할 때 가장 많이 사용되는 도구
이클립스, IntelliJ, STS, VS
테스트도구 코드의 기능 검증과 전체의 품질을 높이기 위해 사용하는 도구
코드의 테스트, 테스트에 대한 계획, 수행 및 분석 등의 작업 수행
xUnit, PMD, FindBugs, SonarQube
형상관리도구 개발자들이 작성한 코드와 리소스 드 ㅇ산출물에 대한 버전관리를 위한 도구
프로젝트 진행시 필수로 포함되는 도구
SVN, git, CVS

 

개발환경 구성요소 : 하드웨어 / 소프트웨어

서버 HW 개발환경

웹서버 웹 브라우저의 요청을 받아 HTTP를 통해 웹 브라우저에서 요청하는 HTML이나 오브젝트(이미지파일 등)를 전송해주는 서버
Apache HTTP Server, Microsoft Internet Information Service, Google Web Server 등
웹 애플리케이션 서버
(WAS)
사용자에게 동적 서비스를 제공하기 위해 웹 서버로부터 요청을 받아 데이터 처리를 수행하거나 웹 서버와 데이터베이스 서버 또는 웹서버와 파일서버 사이에서 인터페이스 역할을 수행하는 서버
Oracle WebLogic, Apache Tomcat, IBM WebSphere 등
DB 서버 데이터베이스와 이를 관리하는 DBMS를 운영하는 서버
MySql Server, Oracle Server, MS-SQL Server 등
파일서버 파일 저장 하드웨어로 물리 저장 장치를 활용한 서버
대용량 HDD, SSD 등의 장치가 존재
AWS S3 등

 

클라이언트 HW 개발환경

클라이언트 프로그램 설치를 통해 사용자와 커뮤니케이션 하는 프로그램
Visual Basic, C#, Delphi 등으로 개발되어 사용
웹 브라우저 웹 서비스의 형태로 서버에서 웹 애플리케이션을 응답시 브라우저를 통해 사용자와 커뮤니케이션
일반적인 형태의 웹사이트
모바일 앱 모바일 디바이스에 설치되어 활용되는 애플리케이션
App Store, Android Market등을 통해 다운로드 가능
모바일 웹 웹 브라우저와 동일한 형태로 모바일 상 웹 브라우저를 통해 서비스 제공
모바일에 최적화되어 제공되는 웹 사이트

 

SW 개발환경

운영체제(OS) 서버의 하드웨어를 사용자 관점에서 편리하고 유용하게 사용하기 위한 소프트웨어
프로젝트의 성격에 따른 운영체제 사용
미들웨어 컴퓨터와 컴퓨터간의 연결을 쉽고 안전하게 할 수 있도록 하고 관리를 도와주는 소프트웨어
자바 기반 환경에서 JVM을 설치하여 컨테이너로의 기능을 주로 이용
Tomcat
DBMS 사용자와 데이터베이스 사이에서 사용자의 요구에 따라 정보를 생성해주고 데이터베이스를 관리해주는 소프트웨어
데이터의 저장 및 활용을 위해 DBMS 설치

 

형상관리의 개념 : 소프트웨어 개발을 위한 전체과정에서 발생하는 모든 항목의 변경사항을 관리하기 위한 활동

형상관리의 절차

형상식별 형상관리 대상을 정의 및 식별하는 활동
추적성 부여를 위해 ID와 관리번호 부여
변경관련 이슈 발생시 ID와 관리번호를 이용하여 추적
형상통제 형상 항목의 버전 관리를 위한 형상통제위원회 운영
변경요구 관리, 변경제어, 형상관리 등 통제 지원
베이스 라인에 대한 관리 및 형상 통제 수행 가능
형상감사 소프트웨어 베이스라인의 무결성 평가
베이스라인 변경시 요구사항과 일치여부 검토
형상기록 소프트웨어 형상 및 변경관리에 대한 각종 수행결과 기록
형상결과 보고서 작성

 

형상관리 도구 유형

공유폴더 방식
(RCS/SCCS)
매일 개발이 완료된 파을을 약속된 위치의 공유폴더에 복사하는 방식
담당자 한명이 매일 공유 폴더의 파일을 자기 PC로 복사하고 컴파일하여 에러 확인과 정상동작 여부 확인
정상 동작일 경우 다음날 각 개발자들이 동작 여부 확인
클라이언트-서버 방식
(CVS/SVN)
중앙에 버전 관리 시스템을 항시 동작시키는 방식
개발자들의 현재 작업 내용과 이전 작업내용 추적에 용이
서로 다른 개발자가 같은 파일을 작업했을때 경고 메시지 출력
분산 저장소 방식
(GIT)
로컬 저장소와 원격 저장소로 분리되어 분산 저장하는 방식
중앙의 저장소에서 로컬파일을 복사한 순간 개발자 자신마늬 로컬저장소에 생성
개발완료한 파일을 수정한 다음 로컬저장소에 우선적으로 커밋한 후 다시 원격저장소에 반영하는 방식

 

02. 공통 모듈 구현

재사용 : 이미 개발되어 그 기능, 성능 및 품질을 인정받았던 소프트웨어의 전체 또는 일부를 다시 사용하는 것

재공학
re-engineering
기존 소프트웨어를 버리지않고 기능을 개선시키거나 기능을 새로운 소프트웨어로 재활용하는 기법
위험부담 감소, 비용절감, 개발기간 단축, 시스템 명세의 오류억제 등의 장점을 가짐
재개발
re-developing
기존 시스템 내용을 참조하여 완전히 새로운 시스템을 개발하거나 기능을 추가 및 변경하는 기법

 

모듈 : Module, 그 자치로 하나의 완전한 기능을 수행할 수 있는 독립된 실체

모듈화 : Modularity, 소프트웨어의 성능을 향상시키거나 복잡한 시스템의 수정, 재사용, 유지관리 등이 용이하다록 기능단위의 모듈로 분해하는 설계 및 구현 기법

루틴 소프트웨어에서 특정 동작을 수행하는 일련의 코드로 기능을 가진 명령들의 모임
메인루틴 프로그램의 주요한 부분, 전체의 개략적인 동작 절차를 표시하도록 만들어진 루틴
서브루틴 메인 루틴에 의해 필요할 때마다 호출되는 루틴

 

응집도 : 모듈의 독립성을 나타내는 개념, 모듈 내부 구성요소간 연관 정도, 정보은닉 개념의 확장개념으로 하나의 모듈은 하나의 기능을 수행함

응집도 유형

우연적 응집도
(Coincidential Cohesion)
모듈 내부의 각 구성요소가 연관이 없을 경우
논리적 응집도
(Logical Cohesion)
유사한 성격을 갖거나 특정 형태로 분류되는 처리 요소들이 한 모듈에서 처리되는 경우
시간적 응집도
(Temporal Cohesion)
연관된 기능이라기보다는 특정 시간에 처리되어야 하는 활동들을 한 모듈에서 처리하는 경우
절차적 응집도
(Procedural Cohesion)
모듈이 다수의 관련 기능을 가질때 모듈안의 구성요소들이 그 기능을 순차적으로 수행할 경우
통신적 응집도
(Communication Cohesion)
동일한 입력과 출력을 사용하여 다른 기능을 수행하는 활동들이 모여 있을 경우
순차적 응집도
(Sequential Cohesion)
모듈 내에서 한 활동으로부터 나온 출력값을 다른 활동이 사용할 경우
기능적 응집도
(Functional Cohesion)
모듈 내부의 모든 기능이 단일한 목적을 위해 수행되는 경우

 

결합도 : 모듈 내부가 아닌 외부 모듈과의 연관도 또는 모듈간의 상호 의존성을 나타내는 정도

결합도 유형

내용 결합도
(Content Coupling)
다른 모듈 내부에 있는 변수나 기능을 다른 모듈에서 사용하는 경우
공통 결합도
(Common Coupling)
파라미터가 아닌 모듈 밖에 선언되어 있는 전역 변수를 참조하고 전역변수를 갱신하는 식으로 상호작용하는 경우
외부 결합도
(External Coupling)
두 개의 모듈에 외부에서 도입된 데이터 포맷, 통신 프로토콜, 또는 디바이스 인터페이스를 공유할 경우
제어 결합도
(Control Coupling)
단순 처리할 대상인 값만 전달되는게 아닌 어떻게 처리해야한다는 제어요소가 전달되는 경우
스탬프 결합도
(Stamp Coupling)
모듈간의 인터페이스로 배열이나 객체, 구조 등이 전달되는 경우
자료 결합도
(Data Coupling)
모듈간의 인터페이스로 전달되는 파라미터를 통해서만 모듈간의 상호작용이 일어나는 경우

 

팬인/ 팬아웃 : 소프트웨어의 구성요소인 모듈을 계층적으로 분석하기위해 팬인(Fan-in), 팬아웃(Fan-Out) 활용

  팬인(Fan-in) 팬아웃(Fan-out)
개념 어떤 모듈을 제어(호출)하는 모듈의 수 어떤 모듈에 의해 제어(호출)되는 모듈의 수
모듈 숫자 계산 모듈 자신을 기준으로 모듈에 들어오면 팬인(in) 모듈 자신을 기준으로 모듈에서 나가면 팬아웃(out)
고려사항 팬인이 높으면 재사용 측면에서 설계가 잘되어 있지만 단일 장애점 발생 가능
팬인이 높으면 관리비용 및 테스트 비용 증가
팬아웃이 높을 경우는 불필요한 모듈 호출 여부 검토 필요
팬아웃이 높을 경우는 단순화 여부 검토 필요

 

공통 모듈 테스트 : IDE 도구를 활용하여 개별 공통 모듈에 대한 디버깅 수행

JUnit 자바 프로그래밍 언어용 단위 테스트 도구
Erich Gamma와 Kent Beck 등이 작성한 오픈소스로 JAVA 단위 테스트 프레임 워크
CppUnit 자바의 JUnit을 C++로 구현한 단위 테스트 도구
HttpUnit 웹 브라우저 없이 웹사이트 테스트를 수행하는 단위 테스트 도구

 

03. 배치 프로그램 구현

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

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

배출 스케줄러 : 일괄처리(Batch Processing)를 위해 주기적으로 발생하거나 반복적으로 발생하는 작업을 지원하는 도구

스프링 배치
(Spring Batch)
스프링 프레임워크의 DI, AOP, 서비스 추상화 등 스프링 프레임워크의 3대 요소를 모두 사용할 수 있는 대용량 처리를 제공하는 스케줄러 배치 애플리케이션
쿼츠 스케줄러
(Quartz Scheduler)
스프링 프레임워크에 플러그인되어 수행하는 작업(Job)과 실행 스케줄을 정의하는 트리거를 분리하여 유연성을 제공하는 오픈소스 기반 스케줄러

 

리눅스/유닉스 크론 표현식

쿼츠 크론 표현식

Cron 표현식 특수문자

반응형