Notice
Recent Posts
Recent Comments
Link
«   2024/04   »
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
Archives
Today
Total
관리 메뉴

차근차근

[2020 정보처리기사 필기] 서버 프로그램 구현 본문

대학교/자격증

[2020 정보처리기사 필기] 서버 프로그램 구현

SWKo 2020. 8. 10. 23:23

121. 개발 환경 구축

1. 개발 환경 구축의 개요

- 개발 환경 구축은 응용 소프트웨어 개발을 위해 개발 프로젝트를 이해하고 소프트웨어 및 하드웨어 장비를 구축하는 것을 의미한다.

- 개발 환경은 응용 소프트웨어가 운영될 환경과 유사한 구조로 구축한다.

- 개발 프로젝트의 분석 단계의 산출물을 바탕으로 개발에 필요한 하드웨어와 소프트웨어를 선정한다.

- 하드웨어와 소프트웨어의 성능, 편의성, 라이선스 등의 비즈니스 환경에 적합한 제품들을 최종적으로 결정하여 구축한다.

 

2. 하드웨어 환경

- 하드웨어 환경은 사용자의 역할을 하는 클라이언트(Client) 그리고 클라이언트와 통신하여 서비스를 제공하는 서버(Server)로 구성된다.

- 서버는 사용 목적에 따라 웹 서버, 웹 애플리케이션 서버, 데이터베이스 서버, 파일 서버 등으로 나뉜다.

- 웹 서버(Web Server) : 클라이언트로부터 직접 요청을 받아 처리하는 서버로, 저용량의 정적 파일들을 제공한다.(Apache HTTP Server, Microsoft Internet Information Service, Google Web Server 등)

- 웹 어플리케이션 서버(WAS; Web Application Server) : 사용자에게 동적 서비스를 제공하기 위해 웹 서버로부터 요청을 받아 데이터 가공 작업을 수행하거나, 웹 서버와 데이터베이스 서버 또는 웹 서버와 파일 서버 사이에서 인터페이스 역할을 수행하는 서버(Apache Tomcat, IBM WebSphere, Oracle WebLogic 등)

- 데이터베이스 서버(DB Server) : 데이터베이스와 이를 관리하는 DBMS를 운영하는 서버(MySQL Server, Oracle Server, Microsoft SQL Server 등)

- 파일 서버(File Server) : 데이터베이스에 저장하기에는 비효율적이거나, 서비스 제공을 목적으로 유지하는 파일들을 저장하는 서버(AWS S3 등)

 

3. 소프트웨어 환경

- 소프트웨어 환경을 클라이언트와 서버 운영을 위한 시스템 소프트웨어와 개발에 사용되는 개발 소프트웨어로 구성된다.

- 시스템 소프트웨어운영체제(OS), 웹 서버 및 WAS 운영을 위한 서버 프로그램, DBMS 등이 있다.

- 개발 소프트웨어에서는 요구사항 관리 도구, 설계/모델링 도구, 구현 도구, 빌드 도구, 테스트 도구, 형상 관리 도구 등이 있다.

- 요구사항 관리 도구 : 요구사항의 수집과 분석, 추적 등을 편리하게 도와주는 도구(JIRA, IBM DOORS, inteGREAT, Reqtify, Trello 등)

- 설계/모델링 도구 : UML(통합 모델링 언어)를 지원하며, 개발의 전 과정에서 설계 및 모델링을 도와주는 소프트웨어(DB Designer, PlantUML, ArgoUML 등)

- 구현 도구 : 개발 언어를 통해 애플리케이션의 실제 구현을 지원하는 소프트웨어(Eclipse, IntellJ IDEA, Visual Studio, Netbeans, Node.js 등)

- 빌드 도구 : 구현 도구를 통해 작성된 소스의 빌드 및 배포, 라이브러리 관리를 지원하는 소프트웨어(Ant, Gradle, Maven, Jenkins 등)

- 테스트 도구 : 모듈들이 요구사항에 적합하게 구현되었는지 테스트하는 소프트웨어(CPPUnit, JUnit, HttpUnit, NUnit, SpringTest 등)

- 형상 관리 도구 : 산출물들을 버전별로 관리하여 품질 향상을 지원하는 소프트웨어(GIT, CVS, Subversion, Mercurial 등)

- 개발 언어 선정 기준 : 적정성, 효율성, 이식성, 친밀성, 범용성

 

핵심

- 하드웨어 환경 : 클라이언트, 서버(웹 서버, 웹 애플리케이션 서버, 데이터베이스 서버, 파일 서버)

- 소프트웨어 환경 : 시스템 소프트웨어(운영체제(OS), 서버 프로그램, DBMS), 개발 소프트웨어(요구사항 관리도구, 설계/모델링 도구, 구현 도구, 빌드 도구, 테스트 도구, 형상 관리 도구)


122. 서버 개발

1. 서버 개발의 개요

- 서버 개발은 웹 애플리케이션의 로직을 구현할 서버 프로그램을 제작하여 웹 애플리케이션 서버(WAS)에 탑재하는 것을 의미한다.

- 웹 애플리케이션 서버에 구현된 서버 프로그램은 웹 서버로부터 받은 요청을 처리하여 결과를 반환하는 역할을 수행한다.

- 서버 개발에 사용되는 프로그래밍 언어에는 Java, JavaScript, Python, PHP, Ruby 등이 있다.

- 각 프로그래밍 언어에는 해당 언어로 서버 프로그램을 개발할 수 있도록 지원하는 프레임워크가 있다.

 

2. 서버 개발 프레임워크

- 서버 개발 프레임워크는 서버 프로그램 개발 시 다양한 네트워크 설정, 요청 및 응답 처리, 아키텍처 모델 구현 등을 손쉽게 처리할 수 있도록 클래스나 인터페이스를 제공하는 소프트웨어를 의미한다.

- 서버 개발 프레임워크의 대부분은 모델-뷰-컨트롤러(MVC) 패턴을 기반으로 개발되었다.

- Spring : JAVA를 기반으로 만들어진 프레임워크로, 전자정부 표준 프레임워크의 기반 기술로 사용되고 있다.

- Node.js: JavaScript를 기반으로 만들어진 프레임워크로, 비동기 입출력 처리와 이벤트 위주의 높은 처리 성능을 갖고 있어 실시간으로 입출력이 빈번한 애플리케이션에 적합하다.

- Django : Python을 기반으로 만들어진 프레임워크로, 컴포넌트의 재사용과 플러그인화를 강조하여 신속한 개발이 가능하도록 지원한다.

- Codeigniter : PHP를 기반으로 만들어진 프레임워크로, 인터페이스가 간편하며 서버 자원을 적게 사용한다.

- Ruby on Rails : Ruby를 기반으로 만들어진 프레임워크로, 테스트를 위한 웹 서버를 지원하며 데이터베이스 작업을 단순화, 자동화시켜 개발 코드의 길이가 짧아 신속한 개발이 가능하다.

 

3. 서버 프로그램 구현

- 서버 프로그램은 응용 소프트웨어와 동일하게 모듈 및 공통 모듈을 개발한 후, 모듈들을 통합하는 방식으로 구현된다.

- 모듈은 모듈화를 통해 분리된 시스템의 각 기능들로, 서브 루틴, 서브 시스템, 소프트웨어 내의 프로그램, 작업 단위 등과 같은 의미로 사용된다.

- 특정 모듈의 수정이 다른 모듈에 영향을 끼치면 안된다.

- 모듈의 독립성은 결합도(Coupling)응집도(Cohesion)에 의해 측정된다.

- 공통 모듈은 여러 프로그램에서 재사용(Reuse)할 수 있는 모듈을 의미한다.

- 프레임워크의 특성 : 모듈화, 재사용성, 확장성, 제어의 역흐름(개발자가 관리해야 하는 객체들의 제어를 프레임워크에 넘김으로써 생산성 향상)

 

핵심

- MVC패턴

- 각 언어별 프레임워크

- 프레임워크의 특성 : 모듈화, 재사용성, 확장성, 제어의 역흐름


123. 보안 및 API

1. 소프트웨어 개발 보안의 개요

- 소프트웨어 개발 보안은 소프트웨어 개발 과정에서 발생할 수 있는 보안 취약점을 최소화하여 보안 위협으로부터 안전한 소프트웨어를 개발하기 위한 일련의 보안 활동을 의미한다.

- 데이터의 기밀성, 무결성, 가용성을 유지하는 것을 목표로 한다.

- 정부에서 제공하는 소프트웨어 개발 보안 가이드를 참고하여 보안 항목들을 점검한다.

 

2. 소프트웨어 개발 보안 점검 항목

- 세션 통제 : 세션은 서버와 클라이언트의 연결을 말한다. 세션의 연결과 연결로 인해 발생하는 정보를 관리하는 것

- 입력 데이터 검증 및 표현 : 입력 데이터에 대한 유효성 검증체계를 갖추고, 검증 실패 시 이를 처리할 수 있도록 코딩하는 것

- 보안 기능 : 인증, 접근제어, 기밀성, 암호화등의 기능

- 시간 및 상태 : 병렬 처리 시스템이나 다수의 프로세스가 동작하는 환경에서 시간과 실행 상태를 관리하여 시스템이 원활히 동작되도록 코딩하는 것

- 에러처리 : 오류들을 사전에 정의하여 에러로 인해 발생하는 문제들을 예빵

- 코드 오류 : 형변환, 자원의 반환 등을 고려하여 코딩하는 것

- 캡슐화 : 데이터와 데이터를 처리하는 함수를 하나의 객체로 묶어 코딩하는 것

- API 오용 : API를 잘못 사용하거나 보안에 취약한 API를 사용하지 않도록 고려하여 코딩하는 것

 

3. API(Application Programming Interface)

- API는 응용 프로그램 개발 시 운영체제나 프로그래밍 언어 등에 있는 라이브러리를 이용할 수 있도록 규칙 등을 정의해 놓은 인터페이스를 의미한다.

- 프로그래밍 언어에서 특정한 작업을 수행하기 위해 사용하거나, 운영체제의 파일 제어, 화상 처리등의 기능을 활용하기 위해 사용한다.

- 개발에 필요한 여러 도구를 제공하기 때문에 이를 이용하면 원하는 기능을 쉽고 효율적으로 구현할 수 있다.

- API의 종류에는 Windows API, 단일 유닉스 규격(SUS), Java API, 웹 API 등이 있으며, 누구나 무료로 사용할 수 있는 API를 Open API라고 한다.

 

핵심

- 소프트웨어 개발 보안 점검 항목

- API : 응용프로그램의 개발을 도와주는 인터페이스

- 소프트웨어 개발 가이드를 참고하여 항목 점검


124. 배치 프로그램

1. 배치 프로그램(Batch Program)의 개요

- 배치 프로그램은 사용자와의 상호 작용 없이 여러 작업들을 미리 정해진 일련의 순서에 따라 일괄적으로 처리하는 것을 의미한다.

- 배치 프로그램이 자동으로 수행되는 주기에 따라 정기 배치, 이벤트성 배치, On-Demand 배치로 구분된다.

- 정기 배치(일, 주, 월과 같이 정해진 기간에 정기적으로 수행), 이벤트 배치(특정 조건 설정 후 조건 충족 시 수행), On-Demand배치(사용자 요청 시 수행)

- 배치 프로그램이 갖추어야 하는 필수 요소 : 대용량 데이터, 자동화, 견고성, 안정성/신뢰성, 성능

 

2. 배치 스케줄러(Batch Scheduler)

- 배치 스케줄러는 일괄 처리(Batch Processing) 작업이 설정된 주기에 맞춰 자동으로 수행되도록 지원해주는 도구이다.

- 잡 스케줄러(Job Scheduler)라고도 불린다.

- 주로 사용되는 배치 스케줄러에는 스프링 배치, Quartz 등이 있다.

- 스프링 배치(Spring Batch) : 스프링 프레임워크의 특성을 그대로 가져와 스프링이 가지고 있는 다양한 기능들을 모두 사용할 수 있다, 데이터베이스나 파일의 데이터를 교환하는데 필요한 컴포넌트들을 제공한다, 로그관리, 추적, 트랜잭션 관리 등의 다양한 기능을 제공한다.

- 스프링 배치의 주요 구성요소와 역할 : Job(수행할 작업), Job Launcher(실행을 위한 인터페이스), Step(Job 처리를 위한 제어 정보), Job Repository(Step의 제어 정보를 포함하여 작업 실행을 위한 모든 정보 저장)

- Quartz : 스프링 프레임워크로 개발되는 응용 프로그램들의 일괄 처리를 위한 다양한 기능을 제공하는 오픈 소스 라이브러리

- 수행할 작업과 수행 시간을 관리하는 요소들을 분리하여 일괄 처리 작업에 유연성을 제공

- Quartz의 주요 구성 요소와 역할 : Scheduler(실행 환경 관리), Job(수행할 작업 정의), JobDetail(Job의 상세 정보), Trigger(Job의 실행 스케줄 정의)

 

핵심

- 배치 프로그램 : 일괄적 처리(정기 배치, 이벤트성 배치, On-Demand 배치)

- 스프링 배치, Quartz


125. 패키지 소프트웨어

1. 패키지 소프트웨어(Package Software) 개요

- 패키지 소프트웨어는 기업에서 일반적으로 사용하는 여러 기능들을 통합하여 제공하는 소프트웨어

- 기업에서는 패키지 소프트웨어를 구입하여 기업 환경에 적합하게 커스터마이징(Customizing)하여 사용한다.

- 패키지 소프트웨어를 이용하여 시스템을 구축하는 방식을 패키지 개발 방식이라고 한다.

- 기능 요구사항을 70% 이상 충족시키는 패키지 소프트웨어가 있을 때만 사용하는 것이 적합하다.

 

2. 패키지 소프트웨어의 특징

- 요구사항을 분석하여 업무 특성에 맞게 전용으로 개발되는 소프트웨어(전용 개발 소프트웨어)와 비교하여 안정성, 라이선스, 생산성 등에서 차이가 있다.

- 안정적 이용 가능

- 라이선스가 판매자에게 있기 때문에 시스템 구축 후 기능 추가 및 코드 재사용 등에 제약 발생

- 비용 절감, 기간 단축

- 기존 보유하고 있던 시스템과 상호 연동 및 연계가 어려울 수 있음

- 결함이 발생한 경우 판매처의 프로세스에 따라 보완되므로 능동적인 대처가 어려움

 

핵심

- 패키지 소프트웨어 : 실제로 개발하는 것이 아닌 외부의 상용 소프트웨어 패키지를 구매하여 사용하는 방식

- 기능 요구사항 70% 이상 충족할 때 사용

- 패키지 소프트웨어(안정성, 품질보증, 시간절약, 대응 어려움), 전용 개발 소프트웨어(모든 요구사항 반영 가능, 개발자 역량 중요, 시간 오래걸림, 결함 발생 시 즉시 대응 가능)

Comments