기타/정보처리기사실기

[정보처리기사 실기 / 내용정리 ] 08. 서버 프로그램 구현

rinix_x 2022. 4. 18. 02:16
반응형
정보처리기사 실기 08. 서버 프로그램 구현
반응형
개발 환경 구축

* 개발 도구 분류
  - 구현 도구 : 코드의 작성과 디버깅, 수정 등과 같이 작업 시 사용되는 도구 (Eclipse, InteliJ, VS)
  - 테스트 도구 : 코드의 기능 검증과 전체의 품질을 높이기 위해 사용하는 도구 (xUnit, PMD, Sonar)
  - 빌드 도구 : 작성한 코드의 빌드 및 배포를 수행하는 도구 (Ant, Maven, Gradle)
  - 형상 관리 도구 : 산출물에 대한 버전 관리를 위한 도구 (Git, SVN, CVS)'
* 서버 하드웨어 개발환경
  - 웹 서버 : 웹상의 정적 콘텐츠 HTTP를 이용한 요청/응답을 처리 (Apache 웹서버, 구글 웹서버)
  - 웹 애플리케이션 서버(WAS) : 동적 콘텐츠를 처리하고 제공하기 위해 사용 (Tomcat, Jeus, Resin)
  - 데이터베이스 서버 : 데이터의 수집, 저장을 위한 용도로 사용 (MySql, Oracle, MS-SQL)
  - 파일 서버 : 파일 저장 하드웨어로 물리 저장 장치를 활용한 서버(HDD, SSD)
  - Client : Client하드웨어 개발 환경
* 소프트웨어 개발환경
  - 운영체제 : 사용자 관점에서 편리하고 유용하게 사용하기 위한 소프트웨어, 하드웨어와 사용자 인터페이스
  - 미들웨어 : 웹 서버, JVM과 같은 개발 환경의 구성요소로 활용, 컴퓨터와 컴퓨터를 연결, 쉽고 안전하게 프로그램 사용
  - DBMS : 데이터의 저장 및 활용을 위해 DBMS를 설치, 사용자. DB사이 위치
  - JVM : 시스템 메모리를 관리하고 자바 기반 Application을 위해 실행 환경 제공

* 형상관리(SCM : Software Configuration Management)
  - 소프트웨어 개발을 위한 전체 과정에서 발생하는 모든 항목의 변경 사항을 관리하기 위한 활동
  - 형상관리는 소프트웨어 개발 전 단계에 적용되는 활동이며, 유지보수 단계에서도 수행
  - 소프트웨어 개발의 전체 비용을 줄이고, 개발 과정의 여러 방해 요인이 최소화되도록 보증하는 것을 목적으로 함.
  - 형상 관리 절차 : 형상 식별(대상 정의) → 형상 통제(버전 관리) → 형상 감사(무결성) → 형상 기록(보고서)
     + 형상 식별 : 형상 관리 대상에 이름과 관리 번호를 부여하고, 계층(Tree) 구조로 구분하여 수정 및 추적이 용이하도록 함.
     + 버전 제어 : 소프트웨어 업그레이드나 유지보수과정에서 생성된 다른 버전의 형상 항목을 관리하고, 이를 위해 특정 절차와 도구(Tool)를 결합시키는 작업
     + 형상 통제(변경관리) : 식별된 형상 항목에 대한 변경 요구를 검토하여 현재의 기준선(Base Line)이 잘 반영될 수 있도록 조정하는 작업
     + 형상 감사 : 기준선의 무결성을 평가하기 위해 확인, 검증, 검열 과정을 통해 공식적으로 승인하는 작업
     + 형상 기록(상태보고) : 형상의 식별, 통제, 감사, 작업의 결과를 기록 관리하고 보고서를 작성하는 작업
     + 베이스라인 : 개발 과정의 각 단계에서 나온 산출물들의 변화를 통제하는 시점

* 개발 언어의 선정 기준

 - 적정성 : 개발하려는 소프트웨어의 목적에 적합해야 합니다.

 - 효율성 : 코드의 작성 및 구현이 효율적이어야 합니다.

 - 이식성 : 다양한 시스템 및 환경에 적용이 가능해야 합니다.

 - 친밀성 : 개발 언어에 대한 개발자들의 이해도와 활용도가 높아야 합니다.

 - 범용성 : 다른 개발 사례가 존재하고 여러 분야에서 활용되고 있어야 합니다.


* 소프트웨어 형상 관리 도구 유형
  - 공유 폴더 방식 : 매일 개발이 완료된 파일은 약속된 우치의 공유 폴더에 복사하는 방식 (RCS, SCCS)
  - 클라이언트/서버 방식 : 중앙에 버전 관리 시스템을 항시 동작시키는 방식 (CVS, SVN)
  - 분산 저장소 방식 : 로컬 저장소와 원격 저장소로 분리되어 분산 저장하는 방식 (Git)
* 소프트웨어 형상 관리 도구별 특징
  - SCV(Concurrent Versions System) : 서버와 클라이언트로 구성되어있고, 다수의 인원이 동시에 범용적인 운영체제로 접근 가능한 형상 관리 도구
  - SVN(Subversion): 하나의 서버에서 소스를 쉽고 유용하게 관리할 수 있게 도와주는 도구
  - RCS(Revision Control System) : 소스 파일의 수정을 한 사람만으로 제한하여 다수의 사람이 파일을 수정을 동시에 할 수 없도록 파일 잠금 방식으로 형상을 관리하는 도구
  - Bitkeeper : 중앙 통제 방식으로 대규모 프로젝트에서 빠른 속도를 내도록 개발된 형상 관리 도구
  - Git : 속도에 중점을 둔 분산형 버전 관리 시스템, 대형 프로젝트에서 효과적이고 유용함
  - Clear Case : 복수 서버, 복수 클라이언트 구조, 필요한 서버를 하나씩 추가하여 확장성을 기할 수 있음

공통 모듈 구현

* 모듈(Module) : 하나의 완전한 기능을 수행할 수 있는 독립된 실체
* 모듈화(modularity)
  - 프로그램 개발 시 생산성과 최적화, 관리에 용이하게 기능 단위로 분할하는 기법
  - 모듈을 통해 소프트웨어의 성능을 향상시키고 디버깅, 수정, 통합을 용이하게 하는 설계 기법  
  - 모듈화 원리 : 정보은닉, 분할과 정복, 데이터 추상화, 모듈 독립성
* 응집도(Cohesion) : 모듈의 독립성을 나타내는 정도로, 모듈 내부 구성요소 간 연관 정도
  - 응집도 유형 : (약함) 우연적, 논리적, 시간적, 절차적, 통신적, 순차적, 기능적(강함)
     + 우연적(Coincidental) : 모듈 내부의 각 구성요소들이 서로 관련 없는 요소로만 구성된 경우
     + 논리적(Logical) : 유사한 성격을 갖거나 특정 형태로 분류되는 처리 요소들이 하나의 모듈이 되는 경우
     + 시간적(Temporal) : 특정 시간에 처리되는 몇 개의 기능을 모아 하나의 모듈로 작성한 경우
     + 절차적(Proceduaral) : 모듈이 다수의 관련 기능을 가질 때 모듈 안이 구성요소들이 그 기능을 순차적으로 수행할 경우
     + 통신적(교환)(Communiacation) : 동일한 입출력을 사용하여 서로 다른 기능을 수행하는 구성요소들이 모였을 경우
     + 순차적(Sequential) : 모듈 내 하나의 활동으로부터 나온 출력 데이터를 그다음 활동의 입력 데이터로 사용할 경우
     + 기능적(Functional) : 모듈 내부의 모든 기능 요소들이 단일 문제와 연관되어 수행될 경우

* 결합도(Coupling) : 외부 모듈과의 연관도 도는 모듈 간의 상호의존성, 모듈 간의 관련성을 측정하는 척도
  - 결합도 유형 : (강함) 내용, 공통, 외부, 제어, 스탬프, 자료(약함)
     + 내용(Content) : 한 모듈이 다른 모듈의 내부 기능 및 그 내부 자료를 직접 참조하거나 수정할 때
     + 공통(Common) : 공유되는 공통 데이터 영역을 여러 모듈이 사용할 때
     + 외부(External) : 어떤 모듈에서 선언한 데이터를 외부의 다른 모듈에서 참조할 때
     + 제어(Control) : 한 모듈이 다른 모듈의 상세한 처리 절차를 알고 있어 이를 통하는 경우나 처리 기능이 두 모듈에 분리되어 설계된 경우, 다른 모듈에서 흐름을 제어
     + 스탬프(Stamp) : 두 모듈이 동일한 자료 구조를 조회하는 경우
     + 자료(Data) : 어떤 모듈이 다른 모듈을 호 추하면서 매개변수나 인수로 데이터를 넘겨주고, 호출받은 모듈은 받은 데이터에 대한 처리 결과를 다시 돌려주는 방식
* 응집도는 높을수록, 결합도는 낮을수록 좋다. * 공통 모듈 구현 절차 : DTO/VO -> SQl -> DAO -> Service -> Controller -> 화면 구현(View)
  - DTO(Data Transfer Object) : 프로세스 사이에서 데이터를 전송하는 객체
  - VO(Value Object) : 고정 클래스를 가지는 객체
  - DAO(Data Access Object) : 특정 타입의 데이터 베이스에 추상 인터페이스를 제공하는 객체
* MVC패턴 : Model, View, Controller로 이루어진 패턴

 

* 디자인 패턴 유형

 - 생성 패턴 (Creational Pattern) : 객체의 생성과 관련된 패턴

   + 추상 팩토리 (Abstract Factory) : 동일한 주제의 다른 팩토리 묶어줌, 구체적인 클래스에 의존하지 않고 서로 연관되거나 의존적인 객체들의 조함을 만드는 인터페이스를 제공하는 패턴
   + 빌더 (Builder) : 생성과 표기를 분리해 복잡한 객체를 생성
   + 팩토리 메서드 (Factory Method) : 생성할 객체의 클래스를 국한하지 않고 객체를 생성, 객체 생성 처리를 서브 클래스로 분리해 처리하도록 캡슐화하는 패턴
   + 프로토타입 (Prototype) : 기존 객체를 복제함으로써 객체를 생성
   + 싱글톤 (Singleton) : 한 클래스에 한 객체만 존재하도록 제한, 전역 변수를 사용하지 않고 객체를 하나만 생성하도록 하며, 생성된 객체를 어디에서든지 참조할 수 있도록 하는 패턴

 - 구조 패턴 (Structural Pattern) : 클래스나 객체들을 조합하여 더 큰 구조로 만들 수 있게 해주는 패턴

   + 어댑터 (Adapter) : 인터페이스가 호환되지 않는 클래스들을 함께 이용할 수 있도록, 타 클래스의 인터페이스를 기존 인터페이스에 덧씌움
   + 브리지 (Bridege) : 추상화와 구현을 분리해 둘을 각각 따로 발전시킬 수 있음
   + 컴포넌트 (Composite) : 0개, 1개 혹은 그 이상의 객체를 묶어 하나의 객체로 이용할 수 있음, 여러 개의 객체들로 구성된 복합 객체와 단일 객체를 클라이언트에서 구별 없이 다루게 해주는 패턴
   + 데코레이터 (Decorator) : 기존 객체의 매서드에 새로운 행동을 추가하거나 오버라이드 할 수 있음
   + 퍼 싸드 (Facade) : 많은 분량의 코드에 접근할 수 있는 단순한 인터페이스를 제공
   + 플라이 웨이트 (Flyweight) : 다수의 유사한 객체를 생성, 조작하는 비용을 절감할 수 있음
   + 프락시 (Proxy) : 접근 조절, 비용 절감, 복잡도 감소를 위해 접근이 힘든 객체에 대한 대역을 제공함

 - 행위 패턴 (Behavioral Pattern) : 클래스나 객체들이 서로 상호작용하는 방법이나 책임 분배 방법을 정의하는 패턴

   + 책임 연쇄 (Chain of Responsibility) 
   + 커맨드 (Command)
   + 인터프리터 (Interpreter)
   + 반복자 (Iterator)
   + 중재자 (Mediator)
   + 메멘토 (Memeto)
   + 옵서버 (Observer)
   + 상태 (State)
   + 전략 (Strategy)
   + 템플릿 메서드 (Template Method)
   + 방문자 (Visitor)


* 팬인(Fan-In), 팬아웃(Fan-Out)
  - Fan-In : 어떤 모듈을 제어하는 모듈의 수 / 모듈 자신을 기준으로 모듈에 들어오면 팬인
  - Fan-Out : 어떤 모듈에 의해 제어되는 모듈의 수 / 모듈 자신을 기준으로 모듈에서 나가면 팬아웃
  - 시스템 복잡도를 최적화하기 위해 팬인은 높게, 팬아웃은 낮게 설계해야 한다.

* 공통모듈 테스트 : IDE 도구를 활용하여 개별 공통 모듈에 대한 디버깅을 수행
  - 통합 개발 환경(IDE: Integrated Developmnet Environment) : 개발에 필요한 다양한 틀을 하나의 인터페이스로 통합하여 제공하는 환경
     + (도구: Eclipse, VS, Android Studio, IDEA)

 - 정확성(Correctness) : 시스템 구현 시 해당 기능이 필요하다는 것을 알 수 있도록 정확히 작성한다.

 - 명확성(Clarity) : 해당 기능을 이해할 때 중의적으로 해석되지 않도록 명확하게 작성한다.

 - 완정성(Completeness) : 시스템 구현을 위해 필요한 모든 것을 기술한다.

 - 일관성(Consistency) : 공통 기능들 간 상호 충돌이 발생하지 않도록 작성한다.

 - 추적성(Traceability) : 기능에 대한 요구사항의 출처, 관련 시스템 등의 관계를 파악할 수 있도록 작성한다.

 

* DBMS접속의 개요

 - JDBC(Java DataBase Connectivity) : java언어로 다양한 종류의 데이터베이스에 접속하고 SQL문을 수행할 때 사용되는 표준 API로, 1997년 2월 썬 마이크로시스템에서 출시

 - ODBC(Open DataBase Connectivity) : 데이터베이스에 접근하기 위핸 표준 개방형 API로, 개발 언어에 관계없이 사용, 1992년 9월 마이크로소프트에서 출시

 - MyBatis : JDBC코드를 단순화하여 사용할 수 있는 SQL Mapping 기반 오픈 소스 접속 프레임워크


* 공통 모듈 테스트 종류
  - 화이트박스 테스트 : 소스 코드를 보면서 테스트 케이스를 다양하게 만들어 테스트, 프로그램 로직을 이해하고 내부와 동작을 검사하는 기법

  - 블랙박스 테스트 : 사용자 요구사항 시점에서 기능이 잘 작동하는지 살펴봄, 인터페이스 오류와 입력값에 목표 결괏값이 나오는지 등을 보는 테스트

  - 메서드 기반 테스트 : 공통 모듈의 외부에 공개된 메서드 기반 테스트
  - 화면 기반 테스트 : 화면 단위로 단위 모듈을 개발 후에 화면에 직접 데이터를 입력하여 테스트
  - 테스트 드라이버/테스트 스텁 활용 테스트 : 기능을 테스트할 수 있는 화면 또는 하위 모듈이 구현되지 않은 경우
  - 테스트 드라이버(Test Driver) : 하위 모듈은 있지만 상위 모듈은 없는 경우 사용
  - 테스트 스텁(Test Stub) : 상위 모듈은 있지만 하위 모듈은 없는 경우 사용
* Junit : 자바 프로그래밍 언어용 단위 테스트 도구

* 서버 개발의 개요

 - Sping : JAVA를 기반으로 만들어진 프레임워크

 - Node.js : JavaScript를 기반으로 반들어진 프레임워크

 - Django : Python을 기반으로 만들어진 프레임워크

 - Codeigniter : PHP기반으로 만들어진 프레임워크

 - Ruby on Rails : Ruby를 기반으로 만들어진 프레임워크

 

* 프레임워크의 특성

 - 모듈화(Modularity) : 프레임워크는 캡슐화를 통해 모듈화를 강화하고 설계 및 구현의 변경에 따른 영향을 최소화함으로써 소프트웨어의 품질을 향상시킵니다.

 - 재사용성(Reusability) : 프레임워크는 재사용 가능한 모듈들을 제공함으로써 개발자의 생산성을 향상시킵니다.

 - 확장성(Extensibility) : 프레임워크는 다형성(Polymorphism)을 통한 인터페이스 확장이 가능하여 다양한 형태와 기능을 가진 애플리케이션 개발이 가능합니다.

 - 제어의 역 흐름(Inversion of Control) : 개발자가 관리하고 통제해야 하는 객체들의 제어 권한을 프레임워크에 넘김으로써 생산성을 향상시킵니다.

배치 프로그램 구현

* 배치 프로그램(Batch Program) : 사용자와의 상호작용 없이 일련의 작업들을 작업 단위로 묶어 정기적으로 반복 수행하거나 정해진 규칙에 따라 일괄 처리하는 방법
* 배치 프로그램 유형
  - 이벤트 배치 : 사전에 정의해둔 조건 충족 시 자동으로 실행
  - 온디맨드 배치(On-Demand) : 사용자의 명시적 요구가 있을 때마다 실행
  - 정기 배치 : 정해진 시간에 정기적으로 실행

* 배치 스케줄러(Batch Scheduler) : 일괄 처리(Batch processing) 작업이 설정된 주기에 맞춰 자동으로 수행되도록 지원하는 도구
* 배치 스케줄러 종류
  - 스프링 배치(Spring Batch) : 오픈 소스 프레임워크
  - 쿼츠 스케줄러(Quartz Scheduler) : 수행할 작업과 수행 시간을 관리하는 요소들을 분리하여 일괄 처리 작업에 유연성을 제공(오픈 소스 라이브러리)
* Corn 표현식 : 크론 표현식을 통해 배치 수행 시간을 시간 및 주기 등으로 설정
  - 리눅스/유닉스 크론 표현식 : 분, 시간, 일, 월, 요일, 연도
  - 쿼츠 크론 표현식 : 초, 분, 시간, 일, 월, 요일, 연도


반응형