[정보처리기사] 4장 - 서버 프로그램 구현

devheyrin·2022년 7월 11일
0

정보처리기사

목록 보기
4/10

70. 개발 환경 구축


웹 애플리케이션 서버

  • 웹 서버의 요청에 따라 가공된 데이터를 제공하는 역할을 수행한다.
  • 가공된 데이터를 제공하는 동적 서비스뿐 아니라 웹 서버와 DB 사이에서 인터페이스의 역할도 수행하는데, 이는 사용자로부터 많은 요청을 직접 받아 수행하는 웹 서버의 부담을 줄이기 위함이다.

웹 서버

  • HTTP 및 HTTPS 기능을 지원하며, 처리한 요청들을 기록한다.
  • HTML, CSS, 이미지 등의 정적 파일들을 저장하고 관리하며, 네트워크 트래픽의 포화를 방지하기 위해 응답 속도를 제한할 수 있다.
  • 하나의 서버로 여러 개의 도메인 이름을 연결하는 기능을 갖고 있으며, 사용자를 인증하는 역할을 수행한다.
  • 대역폭 제한
    • 웹 서버의 기능 중 하나로, 네트워크 트래픽의 포화를 방지하기 위해 응답 속도를 제한하는 기능이다.

형상 관리 도구

  • 산출물들을 버전별로 관리하여 품질 향상을 지원하는 도구로, Git, Subvervision 등이 있다.
  • 산출물들의 변경사항을 파악하고 제어 및 관리함으로써 개발 과정에서 발생할 수 있는 문제점들을 최소화할 수 있도록 지원하는 역할을 수행한다.

71. 소프트웨어 아키텍쳐


상위 설계와 하위 설계

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

협약에 의한 설계

  • 컴포넌트를 설계할 때 클래스에 대한 여러 가정을 공유할 수 있도록 명세한 것
  • 컴포넌트에 대한 정확한 인터페이스를 명세
  • 컴포넌트의 오퍼레이션 사용 전에 참이 되어야 할 선행 조건
  • 사용 후 만족되어야 할 결과 조건
  • 실행되는 동안 항상 만족되어야 할 불변조건 등이 포함되어야 한다.

소프트 아키텍쳐 설계 과정

  1. 설계 목표 설정
  2. 시스템 타입 결정
  3. 아키텍쳐 패턴 적용
  4. 서브시스템 구체화
  5. 검토

추상화

  • 소프트웨어 아키텍쳐 설계의 기본 원리 중 하나
  • 문제의 전체적이고 포괄적인 개념을 설계한 후 차례로 세분화하여 구체화시켜 나가는 것
  • 완전한 시스템을 구축하기 전에 그 시스템과 유사한 모델을 만들어서 여러 가지 요인들을 테스트할 수 있다.

정보 은닉

  • 소프트웨어 아키텍쳐 설계의 기본 원리 중 하나
  • 다른 모듈이 모듈 내부의 절차와 자료들의 정보에 접근 및 변경하는 것을 막기 위한 방법으로, 모듈을 독립적으로 수행할 수 있고, 하나의 모듈이 변경되더라도 다른 모듈에 영향을 주지 않으므로 수정, 시험, 유지보수가 용이하다.

72. 아키텍쳐 패턴


파이프-필터 패턴

  • 서브시스템이 입력 데이터를 받아 처리하고 결과를 다음 서브시스템으로 넘겨주는 과정을 반복하는 아키텍쳐 패턴

이벤트-버스 패턴

  • 소스가 특정 채널에 이벤트 메시지를 발행하면, 해당 채널을 구독한 리스너들이 메시지를 받아 이벤트를 처리하는 아키텍쳐 패턴

MVC 패턴

  • 서브시스템을 세 개의 컴포넌트로 구조화하는 패턴.
  • 한 개의 모델에 여러 개의 뷰를 필요로 하는 대화형 어플리케이션에 가장 많이 사용되는 패턴 중 하나.
  • 서브시스템을 모델, 뷰, 컨트롤러로 구조화

아키텍쳐 패턴

  • 아키텍쳐를 설계할 때 참조할 수 있는 전형적인 해결 방식 또는 예제
  • 소프트웨어 시스템의 구조를 구성하기 위한 기본 윤곽을 제시
  • 서브시스템들과 역할이 정의되어 있다.
  • 서브시스템 사이의 관계와 여러 규칙, 지침 등이 포함되어 있다.

마스터-슬레이브 패턴

  • 장애 허용 시스템, 병렬 컴퓨팅 시스템

인터프리터 패턴

  • 외국어 번역, 프로그래밍 언어, 컴파일러, 인터프리터 개발

73. 객체지향 ⭐


클래스

  • 객체지향의 구성 요소 중 하나
  • 하나 이상의 유사한 객체를 묶어서 하나의 공통된 특성으로 표현한 것
  • 객체지향 프로그램에서 데이터를 추상화하는 단위로 사용된다.

캡슐화

  • 인터페이스를 단순화할 수 있다.
  • 소프트웨어 재사용성이 높아진다.
  • 변경 발생 시 오류의 파급 효과가 적다.
  • 정보 은닉과 관계 있다.

집단화

  • 객체지향 기법에서 연관성을 나타내는 표현들 중 ‘부분-전체'관계 또는 ‘부분’의 관계로 설명되는 연관성
  • 관련 있는 객체들을 묶어 하나의 상위 객체를 구성하는 것

상속

  • 이미 정의된 상위 클래스의 모든 속성과 연산을 하위 클래스가 물려받는 것을 의미
  • 하위 클래스는 상위 클래스의 모든 속성과 연산을 자신의 클래스 내에서 다시 정의하지 않고서도 즉시 사용할 수 있다.

객체

  • 실세계 또는 개념적으로 존재하는 세계의 사물들
  • 데이터를 가지며 이 데이터를 변경하는 함수를 가지고 있는 경우도 있다.
  • 상호작용의 수단으로 메시지를 사용한다.

74. 객체지향 분석 및 설계 ⭐


Coad와 Yourdon 방법

  • E-R다이어그램을 사용하여 객체의 행위를 모델링
  • 객체 식별, 구조 식별, 주제 정의 , 속성과 인스턴스 연결 정의, 연산과 메시지 연결 등의 과정으로 구성된다.

럼바우 분석 기법

  • 객체 모델링
  • 동적 모델링
  • 기능 모델링

인터페이스 분리 원칙

자신이 사용하지 않는 인터페이스와 의존 관계를 맺거나 영향을 받지 않아야 한다는 원칙

리스코프 치환 원칙

서브타입은 어디에서나 자신의 기반타입으로 교체할 수 있어야 함을 의미하는 원칙

75. 모듈 ⭐


모듈화의 목표

모듈 간 결합도의 최소화와 모듈 내 요소들 간 응집도의 최대화

데이터 결합도

모듈 간의 인터페이스가 자료 요소로만 구성될 때의 결합도

결합도 강한 순서

  1. 내용 결합도
  2. 공통 결합도
  3. 외부 결합도
  4. 제어 결합도
  5. 스탬프 결합도
  6. 자료 결합도

제어 결합도

  • 어떤 모듈이 다른 모듈의 내부 논리 조직을 제어하기 위한 목적으로 제어 신호를 이용하여 통신하는 경우
  • 하위 모듈에서 상위 모듈로 제어 신호가 이동하여 상위 모듈에게 처리 명령을 부여하는 권리 전도 현상이 발생

우연적 응집도

  • 서로 간에 어떠한 의미 있는 연관 관계도 지니지 않은 기능 요소로 구성되는 경우
  • 서로 다른 상위 모듈에 의해 호출되어 처리상의 연관성이 없는 서로 다른 기능을 수행하는 경우의 응집도

절차적 응집도

  • 모듈이 다수의 관련 기능을 가질 때 모듈 안의 구성 요소들이 그 기능을 순차적으로 수행할 경우의 응집도

응집도 강한 순서

  1. 기능적 응집도
  2. 순차적 응집도
  3. 교환적 응집도
  4. 절차적 응집도
  5. 시간적 응집도
  6. 논리적 응집도
  7. 우연적 응집도

N-S 차트

  • 논리의 기술에 중점을 둔 도형식 표현 방법
  • 연속, 선택 및 다중 선택, 반복 등의 제어 논리 구조로 표현
  • 조건이 복합되어 있는 곳의 처리를 시각적으로 명확히 식별하는 데 적합

76. 단위 모듈


단위 모듈

  • 소프트웨어 구현에 필요한 여러 가지 동작 중 한 가지 동작을 수행하는 기능을 모듈로 구현한 것

IPC

  • 모듈 간 통신 방식을 구현하기 위해 사용되는 대표적인 프로그래밍 인터페이스 집합
  • 복수의 프로세스를 수행하며 이뤄지는 프로세스 간 통신까지 구현 가능
  • 대표적인 메소드로 Shared Memory, Socket, Semaphores 등이 있다.
  • Semaphores
    • 공유 자원에 대한 접근 제어를 통해 통신하는 방식
  • 메시지 큐
    • 메시지가 발생하면 이를 전달하는 방식으로 통신하는 방식

테스트 케이스

  • 소프트웨어가 사용자의 요구사항을 정확하게 준수했는지 확인하기 위한 테스트 항목에 대한 명세서

77. 공통 모듈 ⭐


명확성

  • 공통 모듈 명세 시 해당 기능에 대해 일관되게 이해되고 한 가지로 해석될 수 있도록 작성해야 한다는 명세 기법 원칙

공통 모듈의 재사용 규모에 따른 분류에 해당하는 것

  • 함수와 객체
  • 컴포넌트
  • 애플리케이션

공통 모듈

  • 여러 프로그램에서 공통으로 사용할 수 있는 모듈
  • 자주 사용되는 계산식이나 매번 필요한 사용자 인증과 같은 기능들로 구성
  • 해당 기능을 명확히 이해할 수 있도록 명세 기법을 준수해야 한다.

소프트웨어 재사용

  • 이미 개발된 기능들을 새로운 시스템이나 기능 개발에 사용하기 적합하도록 최적화하는 작업
  • 새로 개발하는 데 필요한 비용과 시간을 절약할 수 있다.
  • 누구나 이해할 수 있고 사용이 가능하도록 사용법을 공개해야 한다.

공통 모듈 명세 기법의 종류

  • 정확성, 명확성, 완전성, 일관성, 추적성

78. 코드 ⭐


순차 코드

일정한 일련번호를 부여하는 코드 부여 방식

표의 숫자 코드

코드화 대상 항목의 중량, 면적, 용량 등의 물리적 수치를 이용해 코드를 부여하는 방식

그룹 분류 코드

일정 기준에 따라 대분류, 중분류, 소분류 등으로 구분하고, 각 그룹 안에서 일련번호를 부여하는 방식

10진 코드

코드화 대상 항목을 10진 분할하고, 다시 극 각각에 대하여 10진 분할하는 방법을 필요한 만큼 반복하는 코드

코드 대상 항목의 추가가 용이하며 무제한적으로 확대할 수 있음

자릿수가 길어질 수 있고 기계 처리에는 적합하지 않음

79. 디자인 패턴 ⭐


옵서버

  • 한 객체의 상태가 바뀌면 그 객체에 의존하는 다른 객체들에게 자동으로 연락이 가서 내용이 갱신되는 방식
  • 일대다의 의존성을 정의하는 패턴
  • 상호 작용을 하는 객체에서는 가능하면 느슨하게 결합하는 패턴

디자인 패턴의 구성 요소

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

GoF 디자인 패턴 분류 3가지

  • 생성, 구조, 행위

팩토리 메소드

  • 객체를 생성하기 위한 인터페이스를 정의하여 어떤 클래스가 인스턴스화 될 것인지 서브 클래스가 결정하도록 하는 것
  • Virtual Constructor 패턴이라고도 한다.

컴포지트

  • 여러 객체를 가진 복합 객체와 단일 객체를 구분 없이 다루고자 할 때 사용하는 패턴
  • 객체들을 트리 구조로 구성하여 디렉터리 안에 디렉터리가 있듯 복합 객체 안에 복합 객체가 포함되는 구조를 구현할 수 있음

80. 개발 지원 도구 ⭐


통합 개발 환경

  • 편집기, 컴파일러, 디버거 등 개발에 필요한 다양한 툴을 하나의 인터페이스로 통합하여 제공하는 소프트웨어 또는 서비스
  • 코드 자동 생성, 컴파일 과정 자동 수행
  • 여러 기능을 다운로드하여 추가하는 것도 가능

Maven

  • 아파치 소프트웨어 재단에서 Ant의 대안으로 개발
  • 의존성을 설정하여 라이브러리를 관리
  • 규칙이나 표준이 존재하여 예외 사항만 기록

협업 도구

  • 개발에 참여하는 사람들이 서로 다른 작업 환경에서 원활히 프로젝트를 수행할 수 있도록 도와주는 도구

81. 서버 개발


스프링

  • 자바를 기반으로 만든 프레임워크
  • 전자정부 표준 프레임워크의 기반 기술

장고

  • 파이썬을 기반으로 만든 프레임워크
  • 컴포넌트의 재사용과 플러그인화를 강조하여 신속한 개발이 가능하도록 지원

코드이그나이터

  • 인터페이스가 간편하며 서버 자원을 적게 사용

컨트롤러

사용자의 요청에 적절한 서비스를 호출하여 그 결과를 사용자에게 반환하는 객체

DAO

데이터베이스에 접근하고, SQL을 활용하여 데이터를 실제로 조작하는 코드를 구현하는 과정

82. 보안 및 API


세션 통제

  • 서버와 클라이언트의 연결과 이 연결로 발생하는 정보를 관리하는 것
  • 잘못 관리하는 경우 사용자의 접속 정보가 노출되어 인가되지 않은 시스템의 기능을 이용하거나 중요한 정보에 접근할 수 있다.

API

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

83. 배치 프로그램 ⭐


배치 프로그램의 필수 요소

  • 대용량 데이터 : 대용량 데이터의 처리 능력
  • 자동화 : 사용자의 개입 없는 작업의 수행
  • 견고성 : 시스템의 중단없는 지속 능력
  • 안전성 : 오류 추적 능력
  • 성능 : 작업 수행 능력

배치 스케줄러

  • 배치 프로그램이 일괄 처리 작업을 설정된 주기에 맞춰 원활히 수행하도록 지원하는 도구
  • 코드를 직접 작성하여 구현하는 것에 비해 안정적이며 생산성에도 큰 차이가 있음
  • 스프링 배치, Quartz, Cron

84. 패키지 소프트웨어


  • 기업에서 일반적으로 사용하는 여러 기능들을 통합하여 제공하는 소프트웨어
  • 기업 환경에 적합하게 커스터마이징하여 사용
  • 기능 요구사항을 70%이상 충족시키는 소프트웨어가 있을 때만 사용
  • 개발 조직을 갖출 필요성이 없어 비용을 절감할 수 있고, 프로젝트 기간이 단축됨
  • 직접 개발하는 소프트웨어는 전용 개발 소프트웨어라고 부름
profile
개발자 헤이린 🔜 프로덕트 매니저로 나아가는 중!

0개의 댓글