4. 서버 프로그램 구현

RushBsite·2022년 7월 21일
0

정보처리기사

목록 보기
4/7

개발 환경 구축

개발 프로젝트를 이해하고 소프트웨어 및 하드웨어 장비를 구축하는것

하드웨어 환경

  • 클라이언트(pc,스마트폰)와 서버(웹서버,WAS,DB,FILE)가 존재

    WAS(웹 애플리케이션 서버) : 웹서버 <-> 데이터베이스 서버 or 웹서버 <-> 파일서버 등 서버간 인터페이스 역할

소프트웨어 환경

  • 시스템 소프트웨어(클라이언트,서버 운영 = os,dbms 등)와 개발 소프트웨어로 구성
  • 개발 소프트웨어 종류 :
    • 요구사항 관리 도구
    • 설계/모델링 도구 ( UML 언어 지원)
    • 구현 도구
    • 빌드 도구 (배포, 빌드 관리)
    • 테스트 도구
    • 형상 관리 도구 (버전별 품질 향상 지원)

웹서버 기능

  1. HTTP/HTTPS 지원
  2. 통신 기록 - 로그파일로 기록
  3. 정적 파일 관리 - HTML,CSS 등 정적파일 저장/관리
  4. 대역폭 제한 - 네트워크 트래픽 포화 방지위해 응답속도 제한
  5. 가상 호스팅 - 하나의 서버로 여러 개의 도메인 이름을 연결
  6. 인증 - 사용자 합법성 검증

개발 언어 선정 기준

  • 적절성/ 효율성/ 이식성/ 친밀성/ 범용성

소프트웨어 아키텍처

소프트웨어를 구성하는 요소들 간의 관계를 표현하는 시스템의 구조 또는 구조체

소프트웨어 아키텍처 설계 기본 원리

  • 모듈화 - 소프트웨어 성능 향상, 시스템 수정 및 재사용, 유지관리 에 용이하도록 시스템의 기능을 모듈 단위로 나누는 것
  • 추상화 - 문제의 전체적이고 포괄적인 개념을 설계한 후 차례로 세분화하여 구체화 시켜 나가는 것

추상화는 과정 / 데이터 / 제어 유형으로 나눌 수 있음

과정 - 자세한 수행과정을 정의하지 않고 전반적인 흐름만 파악할 수 있게 설계하는 방법
데이터 - 데이터의 세부적인 속성이나 용도를 정의하지 않고 데이터 구조를 대표할 수 있는 표현으로 대체하는 방법
제어 - 이벤트 발생의 정확한 절차나 방법을 정의하지 않고, 대표할 수 있는 표현으로 대체

  • 단계적 분해 - 문제를 상위의 중요 개념으로부터 하위의 개념으로 구체화 시키는 분할기법

= 하향식 설계전략

  • 정보 은닉 - 모듈 내부에 포함된 절차와 자료들의 정보가 감추어저 다른 모듈이 접근하거나 변경하지 못하도록 하는 기법

= 수정, 시험, 유지보수 용이

상위 설계와 하위 설계

sw 개발의 설계단계는 상위와 하위 설계로 구분 가능

상위하위
별칭아키텍처 설계, 예비 설계 모듈 설계, 상세 설계
설계 대상시스템의 전체적인 구조시스템의 내부 구조 및 행위
세부 목록 구조, DB, 인터페이스 컴포넌트, 자료 구조, 알고리즘

소프트웨어 아키텍처의 품질 속성

소프트웨어 아키텍처가 이해 관계자들 요구 수준의 품질유지 및 보장 가능하게 설계되었는지 확인하기 위해 평가 요소들을 구체화 시킨것

시스템 측면 : 성능, 보안, 가용성, 사용성, 변경 용이성

비즈니스 측면 : 시장 적시성, 비용과 혜택, 목표 시장..

아키텍처 측면 : 개념적 무결성, 정확성, 완결성, 변경성

소프트웨어 아키텍처 설계 과정

협약에 의한 설계

컴포넌트를 설계할 때 클래스에 대한 여러 가정을 공유할 수 있도록 명세한 것

[명세 포함 조건 3가지]
1. 선행 조건 - 오퍼레이션 호출 전 참
2. 결과 조건 - 오퍼레이션 수행 후 만족
3. 불변 조건 - 오퍼레이션 실행 동안 항상 만족


아키텍처 패턴

기타 패턴

  • 마스터-슬레이브 패턴 : 슬레이브에서 처리된 결과물을 다시 돌려받는 형식 ex) 장애 허용 시스템, 병렬 컴퓨팅 시스템
  • 브로커 패턴 : 사용자가 원하는 서비스/특성을 브로커 컴포넌트에 요청하면 브로커 컴포넌트가 요청에 맞는 컴포넌트와 사용자를 연결 ex) 분산 환경 시스템
  • 피어-투-피어 패턴 : 피어(peer)라 불리는 컴포넌트가 클라 혹은 서버가 될 수 있는 패턴 ex) 파일 공유 네트워크
  • 이벤트-버스 패턴 : 소스가 특정 채널에 이벤트 메시지를 발행하면 해당 채널을 구독한 리스너들이 메시지를 받아 이벤트를 처리 ex) 알림 서비스
  • 블랙보드 패턴 : 모든 컴포넌트들이 공유 데이터 저장소와 블랙보드 컴포넌트에 접근이 가능한 패턴 ex) 음성 인식, 차량 식별, 신호 해석
  • 인터프리터 패턴 : 코드의 각 라인을 수행하는 방법을 지정하고, 기호마다 클래스를 갖도록 구성된 패턴 ex) 번역기, 컴파일러, 인터프리터

객체지향

SW의 각 요소들을 객체로 만든 후, 객체들을 조립해서 소프트웨어를 개발하는 기법

  • sw 재사용 및 확장에 용이, 유지보수 쉽다, 고품질의 sw를 빠르게 개발 가능

객체지향 구성3요소

객체 : 데이터와 이를 처리하기 위한 함수를 묶어 놓은 소프트웨어 모듈

  • 데이터 : 객체가 가지고 있는 정보 = 속성, 상태, 분류
  • 함수 : 객체가 수행하는 기능, 객체가 갖는 데이터를 처리하는 알고리즘, 객체의 상태를 참조하거나 변경하는 수단

클래스 : 공통된 속성과 연산을 갖는 객체의 집합

메시지 : 객체들간의 상호작용에 사용되는 수단. 객체의 동작이나 연산을 일으키는 외부의 요구 사항

객체지향의 특징

  • 캡슐화
    외부에서 접근을 제한하기 위해 인터페이스를 제외한 세부 내용을 은닉 하는 것 = 인터페이스 단순화, 객체간 결합도 낮아짐

  • 상속
    상위 클래스의 모든 속성과 연산을 하위 클래스가 물려받는 것

  • 다형성
    하나의 메시지에 대해 각각의 객체가 가지고 있는 고유한 방법으로 응답할 수 있는 능력
    ex) 연산자 '+'의 경우 숫자클래스에서는 덧셈, 문자열 클래스에서는 연결

  • 연관성
    두 개 이상의 객체들이 상호 참조하는 관계를 의미

종류의미특징
is member of연관화(association)2개 이상의 객체가 상호관련되어 있음을 의미
is instance of분류화(classification)동일한 형의 특성을 갖는 객체들을 모아 구성하는 것
is part of집단화(Aggregation)관련 있는 객체들을 묶어 하나의 상위 객체를 구성하는것
is a일반화(generalization)공통적인 성질들로 추상화한 상위 객체를 구성하는 것
특수화(specialization)상위 객체를 구체화 하여 하위 객체를 구성하는 것

객체지향 분석 및 설계

사용자 요구사항에 관한 속성, 객체, 연산 등을 정의하여 모델링하는 작업

객체지향 분석의 방법론

종류내용
럼바우분석활동을 객체 모델, 동적 모델, 기능 모델로 나누어 수행함
부치미시적 / 거시적 개발 프로세스를 모두 사용, 클래스와 객체들을 분석/식별 하고 속성과 연산을 정의
Jacobson유스케이스를 강조하여 사용
Coad와 YourdonE-R 다이어그램을 사용하여 객체의 행위 모델링
Wirfs-Brock분석과 설계간의 구분이 없고, 고객 명세서를 평가해서 설계 작업까지 연속적으로 수행

럼바우 분석 기법

모든 소프트웨어 구성 요소를 그래픽 표기법을 이용하여 모델링 하는 방법(OMT)
객->동->기 순서

  • 객체(Object) 모델링
    = 정보(Information) 모델링, 시스템에서 요구되는 객체를 찾아내어 객체관 관계 규정 후, 객체 다이어그램으로 표시

  • 동적(Dynamic) 모델링
    = 상태 다이어그램 을 이용하여 시간의 흐름에 따른 행위 표현

  • 기능(function) 모델링
    = 자료 흐름도(DFD)를 이용하여 다수의 프로세스들 가느이 자료 흐름을 중심으로 처리 과정을 표현한 모델링

객체지향 설계 원칙

단일 책임 원칙 (SRP) : 객체는 단 하나의 책임만 가져야 한다
개방-폐쇄 원칙 (OCP) : 기존 코드의 변경 없이 기능을 추가 가능하도록 설계해야 한다
리스코프 치환 원칙(LSP) : 자식 클래스는 최소한 부모 클래스의 기능은 수행할 수 있어야 한다
인터페이스 분리 원칙 (ISP) : 자신이 사용하지 않는 인터페이스와 의존 관계를 맺거나 영향을 받지 않아야 한다
의존 역전 원칙 (DIP) : 의존 관계 성립 시 추상성이 높은 클래스와 의존 관계를 맺어야 한다


모듈

모듈화를 통해 분리된 시스템의 각 기능

결합도(Coupling)

모듈간의 상호 의존하는 정도

종류내용
내용 결합도(content coupling)한 모듈이 다른 모듈의 내부 기능,자료를 직접 참조하거나 수정시
공통 결합도(common coupling)공유되는 데이터 영역을 여러 모듈이 사용시, (전역변수)
외부 결합도(external coupling)한 모듈에서 선언한 변수를 다른 모듈에서 참조할 시
제어 결합도(control coupling)한 모듈에서 다른 모듈 내부의 논리적 흐름을 제어하기 위해서 제어신호나 요소를 전달할시, 하위->상위 처리명령 내리는 권리 전도현상 발생
스탬프 결합도(stamp)모듈간의 인터페이스로 배열이나 레코드 등의 자료 구조가 전달 될 시
자료 결합도(Data)모듈간 인터페이스가 자료 요소로만 구성될 시

응집도(Cohesion)

종류내용
기능적(functional)모듈 내부의 모든 기능 요소들이 단일 문제와 연관 되어 수행
순차적(sequential)모듈 내 하나의 활동으로 부터 나온 데이터를 그 다음 활동의 입력 데이터로 사용시
교환적(communication)동일한 입력과 출력을 사용하여 서로 다른 기능을 수행하는 구성 요소들이 모였을 시
절차적(procedural)모듈이 다수의 기능을 가지고 구성요소들이 순차적으로 수행될시
시간적(temporal)특정 시간에 처리되는 기능을 모아 하나의 모듈로 작성 시
논리적(logical)유사한 성격, 특정형태로 분리되는 요소들리 하나의 모듈로 형성시
우연적(coincidental)서로 관련 없는 요소끼리 모듈화

팬인/팬아웃

  • 팬인 : 모듈을 제어하는 모듈의 수
  • 팬아웃 : 모듈에 의해 제어되는 모듈의 수

팬인 높다 = 재사용 측면에서 설계가 잘 되었다. = 단일 장애점 발생 가능

N-S 차트

(Nassi-Schneiderman chart)
논리의 기술에 중점을 두고 도형을 이용해 표현하는 방법 = 박스 다이어그램 = Chapin chart


단위 모듈

sw 구현이 필요한 여러 동작 중 한가지 동작을 수행하는 기능을 모듈로 구현한 것 : 단위 기능 명세서 작성 -> 입/출력 기능 구현 -> 알고리즘 구현 순서로 구현함

독립적인 컴파일 가능

IPC(Inter-Process Communication)

모듈간 통신 방식을 구현하기 위해 사용되는 대표적인 프로그래밍 인터페이스 집합

[IPC 대표 메소드 5가지]
1. shared memory
2. Socket
3. Semaphores
4. Pipes&named Pipes (pipes = FIFO메모리,공통점유 불가)
5. Message Queueing

단위 모듈 테스트

프로그램 단위 기능으로 구현된 모듈이 정해진 기능을 정확히 수행하는지 검증하는 것 = Unit test

테스트 케이스

구현된 SW가 사용자의 요구사항을 정확하게 준수했는지 확인하기 위한 테스트 항목에 대한 명세서

[ISO/IEC/IEEE 29119-3 표준 테스트 케이스 구성요소]
식별자 (일련번호)
테스트 항목
입력 명세 (입력 데이터)
출력 명세 (예상 출력 결과)
환경 설정 (필요한 hw/sw환경)
특수 절차 요구 (특별히 요구되는 절차)
의존성 기술 (test case간 의존성)


공통 모듈

여러 프로그램에서 공통으로 사용할 수 있는 모듈

공통 모듈 명세 기법의 종류

명세 기법내용
정확성시스템 구현시 해당기능이 필요하다는것을 알 수 있도록 정확히 작성함
명확성해당 기능을 이해할 때 중의적 해석이 없도록 명확하게 작성
완전성시스템 구현을 위해 필요한 모든 것을 기술
일관성공통 기능들 간 상호 충돌이 발생하지 않도록 작성
추적성기능에 대한 요구사항의 출처, 관련 시스템등의 관계를 파악 할 수 있도록 작성함

재사용

이미 개발된 기능들을 새로운 시스템이나 기능 개발에 사용하기에 적합하도록 최적화 하는 작업

[재사용 규모에 따른 분류]

  • 함수와 객체 - 클래스나 메소드단위 코드 재사용
  • 컴포넌트 - 컴포넌트 수정없이 인터페이스 통해 통신하는 방식으로 재사용
  • 애플리케이션 - 공통된 기능들을 제공하는 app 공유 방식으로 재사용

효과적인 모듈 설계 방안

결합도는 줄이고 응집도는 높여서 모듈의 독립성과 재사용성 높이자
복잡도와 중복성 줄이자
...


코드

코드는 자료의 분류/ 조합/ 집계/ 추출을 용이하게 하기 위해 사용하는 기호

코드의 주요 기능

기능내용
식별기능데이터 간의 성격에 따라 구분이 가능
분류기능특정 기준이나 동일한 유형에 해당하는 데이터를 그룹화 할 수 있음
배열 기능의미를 부여하여 나열 가능
표준화 기능다양한 데이터를 기준에 맞추어 나열할 수 있음
간소화 기능복잡한 데이터를 간소화할 수 있음

코드의 종류

  • 순차 코드 - 1,2,3,4, (일련번호 코드)
  • 블록 코드(구분코드) - 1001~1100 : 총무부
  • 10진 코드 - 1000: 공학, 1100: 소프트웨어 ..(도서분류식 코드)
  • 그룹 분류 코드 - 1-01-001: 본사-총무부-인사계, 2-01-001: 지사-총무부-인사계
  • 연상 코드(Mnemonic) - TV-40 :40인치 tv
  • 표의 숫자 코드(Significant Digit code) - 120-720-1500 : 두께x폭x길이
  • 합성 코드 - KE-711 : 대한항공 711기

디자인 패턴

모듈간의 관계 및 인터페이스를 설계할때 참조할 수 있는 전형적인 해결 방식

  • 문제 및 배경, 실제 적용된 사례, 재사용이 가능한 샘플 코드로 구성

생성(Creational) 패턴 5개

클래스나 객체의 생성과 참조 과정을 정의

이름내용
추상팩토리(Abstract Factory)구체적인 클래스에 의존 X, 인터페이스를 통해 서로 연관,의존하는 객체의 그룹으로 생성하여 추상적으로 표현.
빌더(Builder)작게 분리된 인스턴스를 조합하여 객체를 생성. 동일한 객체 생성에서도 서로다른 결과 가능
팩토리 메소드(Factory Method)상위 클래스는 인터페이스만 생성, 객체 생성을 서브 클래스에서 담당. = 가상 생성자 (Virtual Constructor)패턴
프로토타입 (Prototype)원본 객체를 복제하는 방법으로 객체를 생성, 객체 생성 비용이 큰경우 사용
싱글톤 (Singleton)하나의 객체를 생성하면 생성된 객체를 어디서든 참조가능, 단 동시 참조 불가능. 클래스 내에서 인스턴스가 하나뿐임을 보장.

구조 패턴 7개

클래스나 객체를 조합하여 더 큰 구조로 만드는 패턴

이름내용
어댑터(Adapter)호환성이 없는 클래스들의 인터페이스를 다른 클래스가 이용할 수 있도록 변환
브리지(Bridge)구현부에서 추상층을 분리. 독립적 확장가능. 기능부와 구현부 클래스를 별도로 구현
컴포지트(Composite)여러 객체를 가진 복합 객체와 단일 객체를 구분 없이 다룰 때. (디렉토리 생각),트리구조
데코레이터(Decorator)객체 간의 결합을 통해 능동적으로 기능들을 확장 할 수 있는 패턴
퍼싸드(Facade)복잡한 서브클래스 피해 상위에 통합 인터페이스 제공 객체 = wrapper 객체 필요
플라이웨이트(Flyweight)인스턴스가 필요할때마다 생성하는 것이 아니라 가능한 공유해서 사용
프록시(Proxy)접근이 어려운 객체 에 연결할 시 인터페이스 역할 수행

행위 패턴 11개

클래스나 객체가 서로 상호작용하는 방법이나 책임 분배 방법 정의

이름내용
책임 연쇄(Chain of Responsibility)요청을 처리할 수 있는 객체가 둘 이상 존재하여 한객체가 처리 하지 못하면 다음 객체로 넘어가는 형태(형태 = chain)
커맨드(Command)요청을 객체의 형태로 캡슐화하여 재이용/취소에 용이. 명령어를 추상 클래스와 구체 클래스로 분리
인터프리터(Interpreter)언어에 문법을 정의하는 패턴 (SQL)
반복자(Iterator)자료구조와 같이 접근이 잦은 객체에 대해 동일한 인터페이스를 사용하도록 하는 패턴
중재자(Mediator)수많은 객체들 간의 복잡한 상호작요을 캡슐화하여 객체로 정의하는 패턴 , 객체 사이 의존성을 줄여 결합도를 감소시킬 수 있다.
메멘토(Memento)특정 시점에서 객체 내부 상태를 객체화 함으로써 이후 요청에 따라 객체를 해당 시점의 상태로 돌릴 수 있는 기능 제공
옵서버(Observer)한 객체의 상태가 변화하면 객체에 상속되어 있는 다른 객체들에게 변화된 상태를 전달, 일대다 의존성 정의. publish, subscribe
상태(State)객체의 상태에 따라 동일한 동작을 다르게 처리해야할 때 사용하는 패턴
전략(Strategy)동일한 계열의 알고리즘을 개별적으로 캡슐화, 상호교환 가능하게 정의하는 패턴. 클라이언트가 독립적으로 원하는 알고리즘 선택 후 사용 가능
템플릿 메소드(Template Method)상위 클래스에서 골격을 정의하고 하위 클래스에서 세부 처리를 구체화. 코드양 줄이고 유지보수 용이
방문자(Visitor)각 클래스들의 데이터 구조에서 처리 기능을 분리하여 별도의 클래스로 구성

개발 지원 도구

IDE : 통합 개발 환경. 다양한 툴을 하나의 인터페이스로 통합하여 제공
apple : xcode
빌드도구 : Ant ->대안 Maven ->대안 Gradle
협업도구 = 그룹웨어 = 개발에 참여하는 사람들이 서로 다른 환경에서 원활히 프로젝트를 수행할 수 있도록 도와주는 도구

서버 개발

웹 app의 로직을 구현할 서버 프로그램을 제작하여 WAS에 탑재하는 것

서버 개발 프레임워크

서버 프로그램 개발(네트워크 설정,요청/응답처리,아키텍처 모델 구현)을 손쉽게 처리 할 수 있도록 클래스나 인터페이스를 제공하는 소프트웨어를 의미
ex) php - Codeigniter

[구현과정]

DTO/VO 구현 - 데이터 교환 위한 객체 만드는 과정
SQL 구현
DAO 구현 - 데이터 베이스 접근, sql활용하여 실제 data 조작하는 코드 구현
Service 구현
Controller 구현

보안 및 API

보안 3대요소

기밀성 , 가용성, 무결성

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

  • 세션 통제
  • 입력 데이터 검증 및 표현
  • 보안 기능
  • 시간 및 상태
  • 에러 처리
  • 코드 오류
  • 캡슐화
  • API 오용

API

응용프로그램 개발시, OS나 프로그래밍 언어 등에 있는 라이브러리를 이용할 수 있도록 규칙 등을 정의해 놓은 인터페이스
ex) Windows API, 단일 유닉스 규격(SUS), JAVA API, 웹 API

배치 프로그램

사용자와의 상호작용 없이 여러 작업들을 미리 정해진 일련의 순서에 따라 일괄적으로 처리하도록 만든 프로그램

배치 프로그램 필수 요소

요소내용
대용량 데이터대량의 데이터를 처리 가능해야함
자동화오류발생시 제외하고 사용자 개입없이 수행되어야함
견고성잘못된 데이터로 중단되는 일 없어야함
안전성/신뢰성오류가 발생하면 오류의 발생위치, 시간등을 추적가능해야함
성능다른 응용프로그램방해X,지정된 시간내에 처리

배치 스케줄러

일괄 처리 작업이 설정된 주기에 맞춰 자동으로 수행되도록 지원해주는 도구

배치 스케줄러 종류

  • Spring Batch(스프링 배치) spring source & Accenture사 공동개발
  • Quartz - 오픈소스(spring framework)
  • Cron - 리눅스

crontab 명령어 작성 방법

[] [] [] [] [요일] [명령어]

분,시,일,월,요일에 * 입력시 매 시기마다 수행
ex) * * * * * /root/com_1.sh = 매월 매일 매시 매분마다 com_1.sh실행

시기 우측에 '/[단위]'를 입력하면 나눈 나머지가 0일 때마다 실행
ex) 30 */3 * * * /root/com.sh -> 매월 매일 0:30부터 3시간마다 수행

'[시작시기]-[종료시기]' 통해 특정 구간에서만 반복가능
ex) * 18-23 20 * * /com.sh -> 매월 2018시 ~23시 매분마다 수행

시기는 ,로 여러번 입력 가능
ex) 30 23 25 4,9,11 * /com.sh ->4월, 911252330분에 실행

패키지 소프트웨어

기업에서 일반적으로 사용하느 여러 기능을 통합하여 제공하는 sw

profile
게임 기획/개발 지망생

0개의 댓글