정보처리기사

정유빈·2025년 6월 10일

혼자 공부하는

목록 보기
2/2
post-thumbnail

주요 개념

1장

  • 스크럼 : 이 중심이 되어 개발의 효율성을 높이는 기법

    • PO (Product Owner) 제품 책임자
    • SM (Scrum Master) 스크럼 마스터
    • DT (Development Team) 개발팀
  • 스프린트(Sprint) : 실제 개발 작업을 진행하는 과정으로, 보통 2~4주 정도의 기간 내에서 진행함

  • XP(eXtreme Programming) : XP는 수시로 발생하는 고객의 요구사항에 유연하게 대응하기 위해 고객의 참여와 개발 과정의 반복을 극대화하여 개발 생산성을 향상시키는 방법

    • XP의 5가지 핵심 가치
      • 의사소통(Communication)
      • 단순성(Simplicity)
      • 용기(Courage)
      • 존중(Respect)
      • 피드백(Feedback)
  • 리팩토링(Refactoring) :
    기존 코드를 기능 변경 없이 구조나 디자인을 개선하는 과정

    • 리팩토링(Refactoring)의 목적 :
      프로그램을 쉽게 이해하고 수정하여 빠르게 개발하기 위해서
  • 데이터베이스 관리 시스템(DBMS; DataBase Management System)
    사용자와 데이터베이스 사이에서 사용자의 요구에 따라 정보를 생성해 주고, 데이터베이스를 관리해 주는 소프트웨어 이다.

  • 웹 애플리케이션 서버(WAS; Web Application Server)
    사용자의 요구에 따라 변하는 동적인 콘텐츠를 처리하기 위해 사용되는 미들웨어이다.

    • 데이터 접근, 세션 관리, 트랜잭션 관리 등을 위한 라이브러리를 제공하는 것으로 주로 데이터베이스 서버와 연동해서 사용한다.
  • 요구사항 개발 프로세스(출.석.명.확)
    도출(Elicitation) -> 분석(Analysis) -> 명세(Specification) -> 확인(Validation)

    요구사항 도출은 시스템, 사용자, 개발자 등 시스템 개발에 관련된 사람들이 서로 의견을 교환하여 요구사항을 어떻게 수정할 것인지를 식별하고 이해하는 과정이다.

    • 소프트웨어 개발 생명 주기(SDLC) 동안 지속적으로 반복된다.
  • 프로토타이핑(Prototyping)
    프로토타이핑은 프로토타입(견본품)을 통해 효과적으로 요구 분석을 수행하면서 명세서를 산출하는 작업으로, 가장 단순한 형태는 설명을 위해 종이에 대략적인 순서나 형태를 그려 보여주는 것이다.

요구사항 명세에서 기능 요구항은 빠짐없이 기록하지만, 비기능 요구사항은 필요한 것만 기술한다.

  • 자료 흐름도(DFD)

  • 요구사항 분석용 CASE(자동화 도구)
    요구사항 분석용 CASE는 요구사항을 자동으로 분석하고, 요구사항 분석 명세서를 기술하도록 개발된 도구를 의미한다.

    • 대표적인 요구사항 분석용 CASE

      • SADT(필기 20.9)
        • 시스템 정의, 소프트웨어 요구사항 분석, 시스템/소프트웨어 설계를 위한 도구
        • SoftTech 사에서 개발
        • 구조적 요구 분석을 하기 위해 블록 다이어그램을 채택한 자동화 도구
  • HIPO(Hierarchy Input Process Output)

    • HIPO는 시스템의 분석 및 설계 또는 문서화에 사용되는 기법으로, 시스템 실행 과정인 입력·처리·출력의 기능을 표현한 것이다
    • 하향식 소프트웨어 개발을 위한 문서화 도구이다.
  • UML(Unified Modeling Language)
    unified : 통일된

    • UML은 시스템 분석, 설계, 구현 등 시스템 개발 과정에서 시스템 개발자와 고객 또는 개발자 상호 간의 의사소통이 원활하게 이루어지도록 표준화한 대표적인 객체지향 모델링 언어이다.

    • UML 구성 요소

      • 사물(Things)

      • 관계(Relationships)

        • 관계는 연관, 집합, 포함, 일반화 관계가 있다.
        • 연관 관계

        • 집합(Aggregation) 관계

          전체(whole)와 부분(part)로 나누어 지며, 비어있는 다이아몬드가 있는 쪽이 전체이다. 해당 내용을 보면 school에는 student와 teacher가 있으며, student와 teacher은 다른 school로 갈 수 있다.

        • 포함(Composition) 관계

          포함 관계는 집합 관계의 특수한 형태로, 포함하는 사물의 변화가 포함되는 사물에게 영향을 미치는 관계이다.

          • 일반화(Generalization) 관계

            일반화 관계는 하나의 사물이 다른 사물에 비해 더 일반적이거나 구체적인 관계이다.

            예를 들어 사람은 여자와 남자보다 일반적인 개념이고, 반대로 여자와 남자는 사람보다 구체적인 개념이다.

          • 의존(Dependency) 관계

            사람은 자동차를 이용하여서 출퇴근을 한다. 이 경우 보통 같은 자동차를 이용한다. 하지만 자동차에 주유를 할 때, 특정 주유소에 있는 특정 주유기만을 사용하지 않는다. 이 같이 주유 서비스를 받을 때마다 달라지는 주유기같은 것을 의존 관계로 표현한다.

            의존 관계는 연간 관계와 같이 사물 사이에 서로 연관은 있으나 필요에 의해 서로에게 영향을 주는 짧은 시간 동안만 연관을 유지하는 관계이다.

            하나의 사물과 다른 사물이 소유 관계는 아니지만 사물의 변화가 다른 사물에도 영향을 미치는 관계이다.

            영향을 받는 사물(이용자)이 영향을 주는 사물(제공자) 쪽으로 점선 화살표를 연결하여 표현하다.

          • 실체화(Realization) 관계

            비행기는 날 수 있고 새도 날 수 있다. 그러므로 비행기와 새는 날 수 있다는 행위로 그룹화 할 수 있다.

사람, 자동차, 컴퓨터, 동물 등과 같이 우리 주위에서 사용되는 물질적이거나 개념적인 것을 개체(Entity)라고 한다. 이러한 개체를 컴퓨터 내부에 추상적으로 표현한 것을 사물(Things) 또는 객체(Object)라고 하느데, 다이어그램을 표현할 때는 사물보다는 객체라는 표현을 주로 사용한다.

  • 다이어그램(Diagram)

    • 다이어그램은 사물과 관계를 도형으로 표현한 것이다.
    • 여러 관점에서 시스템을 가시화한 뷰(View)를 제공함으로써 의사소통에 도움을 준다
    • 정적 모델링에서는 주로 구조적 다이어그램을 사용한다
    • 동적 모델링에서는 주로 행위 다이어그램을 사용한다
  • UML 다이어그램 종류

    • 클래스 다이어그램

      클래스, 인터페이스, 추상 클래스 등 객체 지향 프로그래밍에서 사용되는 모든 요소를 보여준다. 3개의 직사각형으로 구성되며 맨 위부터 이름, 속성, 메소드가 명시되어 있다.
      속성은 클래스의 상태를 나타내며 메소드는 클래스가 수행할 수 있는 작업을 나타낸다. 또한 클래스와 클래스 간의 관계는 일반적으로 상속, 연관, 집합, 의존 등으로 표현한다.

    • 다중성 표시 방법

    • 객체 다이어그램

      클래스 다이어그램과 유사하지만, 클래스 간의 관계를 보여주는 클래스 다이어그램과 달리 객체 다이어그램은 객체 간의 관계를 보여준다. 이는 객체 간의 상호작용을 파악할 수 있다.

    • 상태 다이어그램(기출 문제)

      • 하나의 객체가 자신이 속한 클래스의 상태 변화 혹은 다른 객체와의 상호 작용에 따라 상태가 어떻게 변화하는지를 표현함
      • 럼바우(Rumbaugh) 객체지향 분석 기법에서 동적 모델링에 활용됨
  • 스테레오 타입(Stereotype) is not 고정관념

    • 스테레오 타입은 UML에서 표현하는 기본 기능 외에 추가적인 기능을 표현하는 것 이다.
    • 길러멧(Guilemet)이라고 부르는 겹화살괄호« » 사이에 표현할 형태를 기술한다
    • «incluede» : 연결된 다른 UML 요소에 대해 포함 관계에 있는 경우
    • «extends» : 연결된 다른 UML 요소에 대해 확장 관계에 있는 경우
  • 컴포넌트(Component)
    컴포넌트는 문서, 소스코드, 파일 라이브러리 등과 같은 모듈화된 자원으로, 재사용이 가능하다.

  • 인터페이스
    클래스나 컴포넌트의 저체 또는 일부분의 동작(Operation)을 모아 놓은 것이며, 클래스가 외부적으로 가시화되는 행동을 표현한다.

  • 관계(Relationship)

    • 시스템(System)
    • 액터(Actor)
    • 유스케이스(UseCase)
    • 관계(Relationship)
      • 연관 관계
      • 포함 관계(Include)
      • 확장 관계(Extend)
      • 일반화 관계(Generalization)
  • 활동(Activity) 다이어그램

    • 사용자의 관점에서 시스템이 수행하는 기능을 처리흐름에 따라 순서대로 표현한 것이다.
    • 하나의 유스케이스 안에서 혹은 유스케이스 사이에 발생하는 복잡한 처리의 흐름을 명확하게 표현할 수 있다
    • 자료 흐름도와 유사하다

    스윔레인(Swim Lane)
    액티비티 수행을 담당하는 주체를 구분하는 선
    가로 또는 세로 실선을 그어 구분한다.

    수영 경기장에서 각 선수별로 레인을 지정하여 해당 레인 안에서만 경기를 진행하도록 구분하는 것처럼 활동 다이어그램에서 사용되는 스윔레인도 액터나 시스템별로 처리 흐름이 진행되는 부분을 구분하기 위한 구분선이다.

  • 객체지향 방법론의 구성 요소

    • 객체(Object) : 데이터와 데이터를 처리하는 함수를 묶어 놓은 하나의 소프트웨어 모듈
    • 클래스(Class) : 공통된 속성과 연산을 갖는 객체의 집합으로 객체의 일반적인 타입(Type)
    • 메시지(Message) : 객체들 간에 상호작용을 하는 데 사용되는 수단으로, 객체에게 어떤 행위를 하도록 지시하는 명령 또는 요구사항
  • 객체지향 방법론의 기본 원칙

    • 캡슐화(Encapsulation) : 데이터와 데이터를 처리하는 함수를 하나로 묶는 것
    • 정보 은닉(Information Hiding) : 캡슐화에서 가장 중요한 개념으로, 다른 객체에게 자신의 정보를 숨기고 자신의 연산만을 통하여 접근을 허용하는 것
    • 추상화(Abstraction) : 불필요한 부분을 생략하고 객체의 속성 중 가장 중요한 것에 중점을 두어 개략화하는것
    • 상속성(Inheritance) : 이미 정의된 상위 클래스의 모든 속성과 연산을 하위 클래스가 물려받는 것
    • 다형성(Polymorphism) : 메시지에 의해 객체가 연산을 수행하게 될 때 하나의 메시지에 대해 각 객체가 가지고 있는 고유한 방법으로 응답할 수 있는 능력
  • 컴포넌트(Component)
    문서, 소스코드, 파일, 라이브버리 등과 같은 모듈화된 자원으로, 재사용이 가능하다.

  • 컴포넌트 기반(CBD) 방법론
    컴포넌트를 조합하여 하나이 새로운 애플리케이션을 만드는 방법론

  • 소프트웨어 재사용 방법

    • 합성 중심(Composition-Based) :
      전자 칩과 같은 소프트웨어 부품, 즉 블록을 만들어서 끼워 맞춰 소프트웨어를 완성시키는 방법으로, 블록 구성 방법이라고도 함
    • 생성 중심(Generation-Based) :
      추상화 형태로 써진 명세를 구체화하여 프로그램을 만드는 방법으로, 패턴 구성 방법이라고도 함

소프트웨어 재사용과 재공학의 차이

재사용의 경우, 이미 개발되어 인정받은 소프트웨어를 다른 소프트웨어 개발이나 유지에 사용하는 것이며
재공학의 경우, 새로운 요구에 맞도록 기존 시스템을 이용하여 보다 나은 시스템을 구축하고, 새로운 기능을 추가하여 소프트웨어 성능을 향상시키는 것이다.
재사용 방법에는 합성 중심과 생성 중심이 있다.

  • CASE(Computer Aided Software Engineering)

    • CASE는 소프트웨어 개발 과정에서 사용되는 요구분석, 설계, 구현, 검사 및 디버깅 과정 전체 또는 일부를 컴퓨터와 전용 소프트웨어 도구를 사용하여 자동화하는 것이다.

      CASE의 주요기능

      • 소프트웨어 생명 주기 전 단계의 연결
      • 다양한 소프트웨어 개발 모형 지원
      • 그래픽 지원

      CASE Tool(자동화 도구)
      자동호 도구는 소프트웨어 공학과 관련된 직업 중에서 하나의 작업을 자동화하는 패키지를 의미한다

  • 하향식 비용 산정 기법
    하향식 비용 산정 기법은 과거의 유사한 경험을 바탕으로 전문 지식이 많은 개발자들이 참여한 회의를 통해 비용을 산정하는 비과학적인 방법이다.

산정 기법으로는 전문가 감정 기법, 델파이 기법이 있다

전문가 감정 기법의 경우 경험이 많은 두 명 이상의 전문가에게 비용 산정을 의뢰하는 기법이다.

델파이 기법의 경우 전문가 감정 기법의 주관적인 편견을 보완하기 위해 많은 전문가의 의견을 종합하여 산정하는 기법이다.

  • 상향식 비용 산정 기법
    상향식 비용 산정 기법은 프로젝트의 세부적인 작업 단위별로 비용을 산정한 후 집계하여 전체 비용을 산정하는 기법이다.

산정 기법으로는 LOC(원시 코드 라인 수), 개발 단계별 인월수 기법, 수학적 산정 기법이 있다.

  • LOC(원시 코드 라인 수, source Line of Code) 기법
    계산 방법 : 예측치 = a+4m+b/6 (a:낙관치 b: 비관치, m:기대치(중간치))

  • 개발 단계별 인월수(Effort Per Task) 기법

    • 각 기능을 구현시키는 데 필요한 노력을 생명 주기의 각 단계별로 산정하는 기법이다
    • LOC 기법을 보완하기 위해 만들어졌기 때문에 LOC 기법보다 정확하다.

LOC 기법에 의하여 소프트웨어 개발에 소요되는 노력이 40PM(Programmer-Month)으로 계산되었다. 개발에 소요되는 기간이 5개월이고, 1인당 인건비가 100만원 이라면, 이 프로젝트에 소요되는 개발 비용은 얼마인지 구하시오

개발 비용 = 노력(인월)x단위 비용(1인당 월평균 인건비)
40 x 1,000,000 = 40,000,000

  • 수학적 산정 기법

  • COCOMO(COnstructive COst MOdel)

    • COCOMO 모형은 원시 프로그램의 규모인 LOC에 의한 비용 산정 기법이다.
    • 비용 산정 결과는 프로젝트를 완성하는 데 필요한 노력(Man-Month)으로 나타난다.
    • 보헴(Boehm)이 제안하였다
  • COCOMO의 소프트웨어 개발 유형

    • 조직형(Organic Mode)

      • 기관 내부에서 개발된 중·소 규모의 소프트웨어
      • 일괄 자료 처리나 과학기술 계산용, 비즈니스 자료 처리용 등의 5만(50KDSI)라인 이하의 소프트웨어를 개발하는 유형
      • 사무 처리용, 업무용, 과학용 응용 소프트웨어 개발에 적합함

      cf.. KDSI : 전체 라인수를 1,000라인 단위로 묶은 것(=Kilo LOC)

    • 반분리형(Semi-Detached Mode)

      • 조직형과 내장형의 중간형 소프트웨어
      • 트랜잭션 처리 시스템이나 운영체제, 데이터베이스 관리 시스템 등의 30만(300KDSI) 라인 이하의 소프트웨어를 개발하는 유형
      • 컴파일러, 인터프리터와 같은 유틸리티 개발에 적합함
    • 내장형(Embedded Mode)

      • 초대형 규모의 소프트웨어
      • 트랜잭션 처리 시스템이나 운영체제 등의 30만(300KDSI) 라인 이상의 소프트웨어를 개발하는 유형
      • 신호기 제어 시스템, 미사일 유도 시스템, 실시간 처리 시스템 등의 시스템 프로그램 개발에 적합함
  • COCOMO 모형의 종류
    기본형, 중간형, 발전형이 있다

  • Putnam 모형
    Putnam 모형은 소프트웨어 생명 주기의 전 과정 동안에 사용될 노력의 분포를 예상하는 모형이다.
    Putnam(푸트남)이 제안하였으며, Rayleigh-Norden 곡선의 노력 분포도를 기초로 한다. 또한, 개발 기간이 늘어날수록 프로젝트의 적용 인원의 노력이 감소한다.

  • 기능 점수(FP, Function Point) 모형
    기능 점수 모형은 소프트웨어의 기능을 증대시키는 요인별로 가중치를 부여하고, 요인별 가중치를 합산하여 총 기능 점수를 산출하며, 총 기능 점수와 영향도를 이용하여 기능 점수(FP)를 구한 후 이를 이용해서 비용을 산정하는 기법이다.

  • SLIM
    Rayleigh-Norden 곡선Putnam 예측 모델을 기초로 하여 개발된 자동화 추정 도구

  • PERT 차트

프로젝트에 필요한 전체 작업의 상호 관계를 표시하는 네트워크로, 작업들간의 상호 관련성, 결정 경로, 경계 시간, 자원 할당 등을 제시하는 프로젝트 일정 계획 기법이다.

  • 간트 차트

    • 프로젝트 각 작업들의 시작과 종료에 대한 작업 일정을 표시하는 프로젝트 일정표로, 시간선(Time-Line)차트라고도 한다.
    • 막대로 표시하며, 수평 막대의 길이는 각 작업(Task)의 기간을 나타낸다.
  • 프로젝트 관리(Project Management)
    일정 관리, 비용 관리, 인력 관리, 위험 관리, 품질 관리가 있다

  • CMMI(Capability Maturity Model Integration)

    • CMMI는 소프트웨어 개발 조직의 업무 능력 및 조직의 성숙도를 평가하는 모델이다.
    • 초기, 관리, 정의, 정량적 관리, 최적화 -> 기.관.정.량.화
  • SPICE
    소프트웨어 개발 표준 중 정보 시스템 분야에서 소프트웨어의 품질 및 생산성 향상을 위해 소프트웨어 프로세스를 평가 및 개선하는 국제 표준으로, 공식 명칭은 ISO/IEC 15504인 것.

  • 소프트웨어 개발 프레임워크

    • 개발해야 할 애플리케이션의 일부분이 이미 내장된 클래스 라이브러리로 구현이 되어 있다.
    • 따라서, 그 기반이 되는 부분을 찾아 확장 및 이용하는 것으로 볼 수 있다
    • JAVA 기반의 대표적인 소프트웨어로는 스프링(Spring)이 있다.
  • 소프트웨어 개발 프레임워크 특성

    • 모듈화(Modularity) : 프레임워크는 캡슐화를 통해 모듈화를 강화하고 설계 및 구현의 변경에 따른 영향을 최소화함으로써 소프트웨어의 품질을 향상 시킨다
    • 재사용성(Reusability) : 프레임워크는 다시 사용이 가능한 모듈들을 제공함으로써 예산 절감, 생산성 향상, 품질 보증이 가능하다
    • 제어의 역흐름(Inversion of Control) : 개발자가 관리하고 통제해야 하는 객체들의 제어를 프레임워크에 넘김으로써 생산성을 향상시킴
    • 확장성(Extensibility) : 프레임워크는 다형성(Polymorphism)을 통한 인터페이스의 확장이 가능하여 다양한 형태와 기능을 가진 애플리케이션 개발이 가능함.

    cf. 다형성 : 하나의 인터페이스나 타입을 통해 여러 다른 형태의 객체를 참조하고 조작할 수 있는 기능

N장

디자인 패턴

디자인 패턴(Design Pattern) 이란?
디자인 패턴은 개발하면서 발생하는 반복적인 문제들을 어떻게 해결할 것인지에 대한 해결 방안으로 실제 현업에서 비즈니스 요구 사항을 프로그래밍으로 처리하면서 만들어진 다양한 해결책 중에서 많은 사람들이 인정한 모범 사례(Best Practice) 이다.
이러한 디자인 패턴은 객체 지향 4대 특성(캡슐화, 상속, 추상화, 다형성)과 설계 원칙(SOLID)을 기반으로 구현되어 있다.

생성 패턴(Creational Pattern)

  • Singleton(싱글톤 패턴) : 하나의 클래스 인스턴스를 전역에서 접근 가능하게 하면서 해당 인스턴스가 한 번만 생성되도록 보장하는 패턴이다.
  • Factory Method(팩토리 메서드 패턴) : 객체를 생성하기 위한 인터페이스를 정의하고, 서브클래스에서 어떤 클래스의 인스턴스를 생성할지 결정하는 패턴이다.
  • Abstract Factory(추상 팩토리 패턴) : 관련된 객체들의 집합을 생성하는 인터페이스를 제공하며, 구체적인 팩토리 클래스를 통해 객체 생성을 추상화하는 패턴이다.
  • Builder(빌더 패턴) : 복잡한 객체의 생성 과정을 단순화하고, 객체를 단계적으로 생성하며 구성하는 패턴이다.
  • Prototype(프로토타입 패턴) : 객체를 복제하여 새로운 객체를 생성하는 패턴으로, 기존 객체를 템플릿으로 사용하는 패턴이다.

구조 패턴(Structural Pattern)

  • Adapter(어댑터 패턴) : 인터페이스 호환성을 제공하지 않는 클래스를 사용하기 위해 래퍼(Wrapper)를 제공하는 패턴이다.
  • Bridge(브릿지 패턴) : 추상화와 구현을 분리하여 두 가지를 독립적으로 확장할 수 있는 패턴이다.
  • Composite(컴포지트 패턴) : 개별 객체와 복합 객체를 동일하게 다루어, 트리 구조의 객체를 구성하는 패턴
  • Decorator(데코레이터 패턴) : 객체에 동적으로 새로운 기능을 추가하여 객체를 확장할 수 있는 패턴
  • Proxy(프록시 패턴) : 다른 객체에 대한 대리자(Proxy)를 제공하여 접근 제어, 지연 로딩 등을 구현하는 패턴
  • Facade(퍼사드(정면) 패턴) : 서브시스템을 더 쉽게 사용할 수 있도록 단순한 인터페이스를 제공하는 패턴이다.
  • Flyweight(플라이웨이트 패턴) : 공유 가능한 객체를 통해 메모리 사용을 최적화하는 패턴이다.

행위 패턴(Behavioral Pattern)

  • Command(커맨드 패턴) : 요청을 객체로 캡슐화하여 요청을 매개변수화 하고, 요청을 큐에 저장하거나 로깅하고 실행을 지연시킨다.

  • Interpreter(인터프리터 패턴) : 언어나 문법에 대한 해석기를 제공하여, 주어진 언어로 표현된 문제를 해결하는 패턴이다.

  • Iterator(이터레이터 패턴) : 컬렉션 내의 요소들에 접근하는 방법을 표준화하여 컬렉션의 내부 구조에 독립적으로 접근할 수 있는 패턴이다. -> 순차적 접근

  • Mediator(중재자 패턴) : 객체 간의 상호 작용을 캡슐화하여, 객체 간의 직접적인 통신을 방지하는 패턴이다.

  • Observer(옵저버 패턴) : 객체 간의 일대다 종속 관계를 정의하여 한 객체의 상태 변경이 다른 객체들에게 알려지도록 한다.

  • Visitor(방문자) : 각 클래스들의 데이터 구조에서 처리 기능을 분리하여 별도로 구성함으로써, 클래스를 수정하지 않고도 새로운 연산의 추가가 가능함

  • Stratege(전략 패턴) : 알고리즘을 정의하고, 실행 중에 선택할 수 있게 한다.

  • State(상태 패턴) : 객체의 상태를 캡슐화하고, 상태 전환을 관리한다.

  • Chain of Responsibility(책임 연쇄 패턴) : 요청을 보내는 객체와 이를 처리하는 객체를 분리하여, 다양한 처리자 중 하나가 요청을 처리한다

  • Memento(메멘토(기억/기념) 패턴) : 객체의 내주 상태를 저장하고 복원할 수 있는 기능을 제공하는 패턴이다

  • Template Method(템플릿 메서드 패턴) : 알고리즘의 구조를 정의하면서 하위 클래스에서 각 단계의 구현을 제공하는 디자인 패턴이다.

    테스트 설계 기법

  • 구문 or 문장 커버리지

    • 조건 : 문장 1회
    • 모든 문장이 적어도 한 번 실행
    • 테스트 Suite에 실행된 구문이 몇 퍼센트인지를 측정
  • 분기 or 결정 커버리지

    • 조건 : T/F
    • 모든 결정의 분기가 적어도 한번씩은 실행되어야 함
  • 조건 커버리지(분기 커버리지 하위)

    • 조건 : T/F
    • 전체 조건식의 결과와 관계없이 각 개별 조건식이 참/거짓 한번 모두 갖도록 수행
  • 조건/결정 커버리지

    • 조건 : TT/FF
    • 전체 조건식 참/거짓 한번씩 하면서 개별 조건식 참/거짓 모두 한번씩 갖도록 함

9장

암호 알고리즘

비밀키(개인키)와 공개키의 차이

  • 비밀키(개인키)는 동일한 키로 데이터를 암호화하고 복호화 한다.
    • 대칭 암호 기법 또는 단일키 암호화 기법이라고 한다
  • 공개키 기법은 데이터를 암호화할 때 사용하는 공개키(Public Key)는 사용자에게 공개하고, 복호화할 때의 비밀키는 관리자가 비밀리에 관리한다.

양방향 알고리즘의 종류

  • DES : 미국 NBS에서 발표한 개인키 암호화 알고리즘
    블록 크기 : 64비트 , 키 길이 : 56비트 / DES를 3번 적용한 3DES도 있다
  • AES : DES의 한계를 느낀 NIST가 발표
    블록 크기 : 128 비트 , 키 길이에 따라 AES-128, -192, -256 으로 분류
  • RSA : MIT에서 만들었으며, 큰 숫자를 소인수분해하기 어렵다는 것에 기반하여 만들어짐
  • ECC : 1985년 RSA암호 방식으로 이산대수 문제를 타원곡선으로 옮겨 기밀성과 효율성을 높였다.
  • IDEA : 스위스의 라이와 메시가 만듦
  • Skipjack : 클리퍼 칩(Clipper Chip)이라는 IC칩에 내장
    주로 음성 통신 장비에 삽입되어 음성 데이터를 암호화
  • TKIP : 무선랜 보안

서비스 공격 유형

CS

웹 서버와 WAS(Web Application Server)의 차이점

웹 서버
웹 브라우저 클라이언트로부터 HTTP 요청을 받아들이고, HTML 문서와 같은 웹 페이지를 반환하는 컴퓨터 프로그램

웹 서버란, 사용자가 웹 브라우저(Chrome)에서 어떠한 페이를 요청하면 웹 서버에서 그 요청을 받아 정적 컨텐츠를 제공하는 서버이다. 여기서 정적 컨텐츠란 단순 HTML 문서, CSS, Javascript, 이미지, 파일 등 즉시 응답 가능한 컨텐츠 이다.

그렇다면, 웹 서버는 정적만 제공하냐?
-> 그것은 아니다. 웹 서버가 동적 컨텐츠를 요청 받으면 WAS에게 해당 요청을 넘겨주고, WAS에서 처리한 결과를 사용자에게 전달해주는 역할도 한다.

WAS
인터넷 상에서 HTTP 프로토콜을 통해 사용자 컴퓨터나 장치에 애플리케이션을 수행하는 미들웨어로서, 주로 동적 서버 컨텐츠를 수행하는 것으로 웹 서버와 구별이 되며, 주로 데이터베이스 서버와 같이 수행한다.

WAS는 웹 서버와 웹 컨테이너가 합쳐진 형태로, 웹 서버 단독으로 처리할 수 없는 데이터베이스의 조회나 다양한 로직 처리가 필요한 동적 콘텐츠를 제공한다. 덕분에 사용자의 다양한 요구에 맞춰 웹 서비스를 제공할 수 있다. WAS는 JSP, Servlet 구동환경을 제공해주기 때문에 웹 컨테이너 혹은 서블릿 컨테이너 라고도 불린다.

💡 그렇다면 WAS만 써도 되겠네!? 답은 (❌)

WAS는 DB조회 및 다양한 로직을 처리하는데 집중해야 해서 단순한 정적 컨텐츠는 웹 서버에서 맡기며 기능을 분리시켜 서버 부하를 방지해야해. 만약 WAS가 정적 콘텐츠 요청까지 처리하면, 부하가 커지고 동적 콘텐츠 처리가 지연되면서 수행 속도가 느려지고 이로 인해 페이지 노출 시간이 늘어나는 문제가 발생하여서 효율성이 크게 떨어져

웹 서버를 WAS 앞에 두고 필요한 WAS들을 Web Server에 플러그인 형태로 설정하면 더욱 효율적인 분산 처리가 가능하다

UML(Unified Modeling Language)을 사용하는 이유

많은 사람들이 모여 작업을 수행하다 보면 같은 대상물을 보고도 서로 다르게 표현하여 의사소통에 문제가 생기는 경우가 있다. 이러한 문제를 해결하기 위해 공통된 표현 방법을 만들어서 사용하는 것이다.
UML은 공통된 표현법을 사용하는 개발할 대상물을 다이어그램으로 표현하는 도구이다.

클래스(Class)와 객체(Object)의 차이

클래스는 객체를 생성하기 위한 설계도 또는 템플릿이고, 객체는 클래스에 의해 생성된 실체 또는 인스턴스이다. 클래스는 객체의 속성(데이터)과 행동(메서드)을 정의하며, 객체는 이러한 정의를 기반으로 메모리에 할당되어 실제 사용되는 개체를 의미한다.

클래스 : 붕어빵 틀
객체(인스턴스) : 붕어빵
-> 객체 하나하나를 인스턴스라고 부르며, 대체로 객체와 인스턴스는 혼용해서 표현한다.
인스턴스는, 클래스 기준에서 생성된 것으로 어떤 클래스에서 파생되었는지를 강조할때 사용한다.

객체들이 가질 수 있는 속성과 동작을 추상적으로 표현한 것이 클래스(Class)이다.

활동(Activity) 다이어그램의 요소 중 액션(Action)과 액티비티(Activity)의 차이점을 간략히 서술하시오

액션(Action)은 더 이상 분해할 수 없는 단일 작업이고, 액티비티(Activity)는 몇 개의 액션으로 분리될 수 있는 작업이다.

UML 다이어그램 중 다음과 같은 특징을 갖는 다이어그램이 무엇인지 쓰시오

  • 시스템이나 객체들이 메시지를 주고받으며 시간의 흐름에 따라 상호 작용 하는 과정을 액터, 객체, 링크, 메시지 등의 요소를 사용하여 그림으로 표현한 것이다
  • 동작에 참여하는 객체들이 주고받는 메시지를 표현하는데 메시지뿐만 아니라 객체들 간의 관계까지 표현한다
  • 클래스 다이어그램에서 관계가 제대로 표현됐는지 점검하는 용도로도 사용된다.
  • 초기에는 협업(Collaboration) 다이어그램이라고 불렸다

    커뮤니케이션(Communication) 다이어그램

커뮤니케이션의 요소 중 객체들 간의 관계를 표현하는데 사용하는 요소가 무엇인지 쓰시오

커뮤니케이션(Communication) 다이어그램이 순차(Sequence) 다이어그램과 구별되는 가장 큰 특징은 메시지뿐만 아니라 객체들 간의 관계까지 표현한다는 것이다.

링크(Link)

소프트웨어 재공학(Software Reengineering)의 개념을 간략히 서술하시오

소프트웨어 재공학은 기존 시스템을 이용하여 보다 나은 시스템을 구축하고, 새로운 기능을 추가하여 소프트웨어 성능을 향상시키는 것이다.

많은 전문가들의 의견을 종합하여 산정하는 기법은 무엇인가

소프트웨어 비용 산정 기법 중 전문가 감정 기법의 주관적인 편견을 보완하기 위해서

델파이 기법

소프트웨어 프로젝트 관리의 개념을 간략히 서술

소프트웨어 프로젝트 관리는 주어진 기간 내에 최소의 비용으로 사용자를 만족시키는 시스템을 개발하기 위한 전반적인 활동이다.

CMMI의 개념 서술

소프트웨어 개발 표준 중 CMMI(능력 성숙도 통합 모델)의 개념

CMMI는 소프트웨어 개발 조직의 업무 능력 및 조직의 성숙도를 평가하는 모델

테일러링의 개념을 간략히 서술

소프트웨어 개발 방법론 테일러링에 대해서

소프트웨어 개발 방법론 테일러링은 소프트웨어 개발 방법론의 절차, 사용기법 등을 수정 및 보완하는 작업이다.

스프링 프레임워크

소프트웨어 개발 프레임워크 중 EJB(Enterprise JAVA Beans) 기반의 복잡함과 무거움을 극복하고 개발 생산성 향상과 고품질의 시스템 개발을 위한 자바 플랫폼상의 경량화된 오픈 소스 웹 애플리케이션 프레임워크

CHAR와 VARCHAR

CHAR은 항상 지정된 크기만큼 기억 장소가 확보되고 VARCHAR은 기억 장소의 크기가 지정되어도 필드에 저장된 데이터만큼만 기억 장소가 확보된다.

인덱스(Index)

인덱스는 검색 시간을 단축시키기 위해 만든 보조적인 데이터 구조이다.

클러스터드 인덱스(Clustered Index)

인덱스 키의 순서에 따라 데이터가 정렬되어 저장되는 방식이다. 실제 데이터가 순서대로 저장되어 있어 인덱스를 검색하지 않아도 원하는 데이터를 빠르게 찾을 수 있다. 하지만 데이터 삽입, 삭제 발생 시 순서를 유지하기 위해 데이터를 재정렬 해야한다.

트랜잭션(Transaction)

트랜잭션(Transaction)은 데이터베이스에서 여러 작업(명령어)들을 하나의 묶음으로 처리하는 단위이다. 쉽게 말해, 여러 개의 작업을 한 번에 처리하고 그 결과가 모두 성공해야만 실제로 데이터에 반영되도록 만드는 기능이다.

ex. 예를 들어 은행에서 돈을 이체할 때,
1. 내 계좌에서 돈을 빼고
2. 친구 계좌에 돈을 넣는
두 가지 작업이 동시에 이루어져야 한다. 만약 한 작업만 성공을 하고 나머지는 실패하면 문제가 발생한다. 이 두 작업을 묶어서 '둘 다 성공해야만 실제로 처리한다'는 약속이 바로 트랜잭션이다.

즉 트랜잭션은 COMMIT 되거나 ROLLBACK 되어야 한다

3-way-handshake

신뢰성 있는 연결을 위해 송신지(보내는 곳)와 수신지(받는 곳) 간의 통신에 앞서 3단계에 걸친 확인 작업을 수행한 후 통신을 수행한다.

  • 1단계 : 송신지에서 수신지로 'SYN' 패킷을 전송
  • 2단계 : 수신지에서 송신지로 'SYN' + 'ACK' 패킷을 전송
  • 3단계 : 송신지에서 수신지로 'ACK' 패킷을 전송

SYN 패킷의 경우 연결 요청을 의미하는 패킷이다.

컴포넌트

여러 객체를 묶은 기능 단위 블록

  • 컴포넌트 기반(CBD: Component Based Design) 방법론
    • 컴포넌트의 재사용(Reusability)이 가능하여 시간과 노력을 절감할 수 있다
    • 새로운 기능을 추가하는 것이 간단하여 확장성이 보장된다
    • 유지 보수 비용을 최소화하고 생산성 및 품질을 향상시킬 수 있다

문제

Q. 소프트웨어 개발 방법론 중 프로토타입 모형(Prototype Model)에 대해 간략히 서술

A. 프로토타입은 개발될 소프트웨어에 대한 견본품을 만들어 최종 결과물을 예측

Q. 요구공학(Requirement Engineering)의 개념을 간략히 서술하시오

A. 요구공학은 요구사항을 정의하고, 분석 및 관리하는 프로세스를 연구하는 학문

Q. 정형화된 분석 절차에 따라 사용자 요구사항을 파악, 문서화하는 체계적 분석방법으로 자료흐름도, 자료사전, 소단위명세서의 특징을 갖는 것은?

구조적 개발 방법론
-> 정형화된 분석 절차가 나오면, 구조적 개발 방법론이다.
-> 특징으로는, 분할과 정복(Divide and Conquer)이다.

코딩

약수 중 자신을 제외한 약수 모두 합을 하면 자신과 같아지는 완전 수

ex. 6의 약수 1,2,3,6 중 자신을 제외한 1,2,3을 모두 더하면 6이 된다.

#include <stdio.h>

main() {
    int s, el = 0; 
    for (int i = 6; i<=30; i++) {   // i는 6부터 30까지 
        s = 0; 
        for (int j=1; j <=i/2; j++)
            if(i%j == 0)
                s = s + j;
        if(s==i)
            el++;
    }
    printf("%d", el);
}

싱글톤(Singleton) 디자인 패턴

한 번만 생성되고, 계속 그 하나만 쓰는 객체

class Connection {
    private static Connection _inst = null;  // 전역에서 딱 1개만 존재하는 인스턴스
    private int count = 0;                   // 호출 횟수 저장하는 변수

    public static Connection get() {
        if (_inst == null) {                 // 아직 생성되지 않았다면
            _inst = new Connection();        // 새로 만들어서
        }
        return _inst;                        // 항상 같은 인스턴스를 반환
    }

    public void count() { count++; }         // count를 1 증가
    public int getCount() { return count; }  // count 값을 리턴
}

public class Test {
    public static void main(String[] args) {
        Connection conn1 = Connection.get(); // 새 객체 생성됨
        conn1.count();                       // count = 1

        Connection conn2 = Connection.get(); // 기존 객체 재사용
        conn2.count();                       // count = 2

        Connection conn3 = Connection.get(); // 기존 객체 재사용
        conn3.count();                       // count = 3

        conn1.count();                       // count = 4

        System.out.print(conn1.getCount());  // 4 출력
    }
}

완전수

1부터 100까지의 '완전수'를 찾아서 더하는 프로그램
1부터 100사이의 완전수는 '6'과 '28'이 있다

#include <stdio.h>
int isPerfectNum(int num) {
    int sum = 0;
    for (int i =1; i<num; i++) {
        if (num % i == 0) 
            sum += i;
    }
    if (num==sum) return 1
    else return 0
}

main() {
    int r = 0;
    for (int i = 1; i <= 100; i++)
        if (isPerfectNum(i))
            r+= i;
    printf("%d", r);
}

코드 오류

public static String get() {
return name;
} 부분에서 오류 발생

정적 메서드에서 일반 변수(name)을 쓸 수 없다

class Person {
    private String name;
    public Person(String val) {
        name = val; 
    }
    public static String get() {
        return name; 
    }
    public void print() {
        System.out.println(name);
    }
}

public class Test {
    public static void main (String[] args) {
        Person obj = new Person("Kim");
        obj.print();
    }
}
profile
대한민국의 미래를 묻는다면 고개를 들어 나를 쳐다보거라

0개의 댓글