기타/정보처리기사

2024 정보처리기사 정처기 벼락치기 요약 | 소프트웨어 생명주기 모델부터 데이터 모델까지 | 필기&실기 두문자

YUNI Heo 2024. 7. 24. 05:46
반응형

 

⭕ 2024 정보처리기사 정처기 벼락치기 요약 | 소프트웨어 생명주기 모델부터 데이터 모델까지 | 필기&실기 두문자

➡️ 소프트웨어 생명주기 모델

  • Waterfall Model (폭포수 모델): 한 단계씩 꼼꼼히! 각 단계를 확실히 끝내고 다음 단계로 넘어가는 전통적인 모델
  • Prototyping Model (프로토타이핑 모델): 고객이 왕! 주요 기능을 빠르게 프로토타입으로 만들어 고객의 피드백을 반영하는 모델
  • Spiral Model (나선형 모델): 위험 줄이기! 위험을 최소화하면서 점진적으로 시스템을 완성해 나가는 모델
  • Iteration Model (반복적 모델): 나눠서 정복! 구축 대상을 나누어 병렬적, 반복적으로 개발하고 통합하는 모델
  • RAD Model (RAD 모델): 초고속 개발! 2~3개월의 짧은 개발 주기로 제품을 빠르게 개발하는 모델

 

➡️ 소프트웨어 개발방법론

  • Structured Development (구조적 방법론): 전체를 기능에 따라 나누어 개발하고 통합! 하향식 접근과 나씨-슈나이더만 차트 사용
  • Information Engineering Development (정보공학 방법론): 대형 프로젝트? 걱정 마! 필요한 관리절차와 작업 기법을 체계화해서 관리
  • Object-Oriented Development (객체지향 방법론): '객체'라는 기본 단위로 시스템 분석 및 설계! 객체, 클래스, 메시지 중심으로
  • Component Based Development (컴포넌트 기반 방법론): 소프트웨어를 구성하는 컴포넌트를 조립! 확장성과 재사용성 강조해 새로운 어플리케이션을 만듦
  • Agile Development (애자일 방법론): 절차보다는 사람 중심! 변화에 유연하고 신속하게 적응하는 경량 개발 방법론. 효율과 신속성 강조
    • XP (eXtreme Programming): 소통이 중요해! 의사소통을 개선하고 즉각적인 피드백으로 SW 품질을 높이는 방법
      • 5가지 가치 - 짝테전지디소 (짝 프로그래밍, 테스트 주도 개발, 전체 팀, 지속적인 통합, 디자인 개선, 소규모 릴리즈)   
        • 짝 프로그래밍 (Pair Programming): 함께 코딩! 다른 사람과 짝을 이뤄 프로그래밍, 책임도 같이 나눠
        • 테스트 주도 개발 (Test-Driven Development): 테스트 먼저! 코딩 전에 테스트 케이스 작성해서 할 일 명확히 파악
        • 전체 팀 (Whole Team): 모두가 주인공! 개발 팀 전원이 각자의 역할과 책임을 분명히
        • 지속적인 통합 (CI, Continuous Integration): 코드 통합은 끊임없이! 모듈 단위로 작업 끝날 때마다 계속 통합
        • 디자인 개선 (Design Improvement): 프로그램을 더 간단하고 유연하게! 기능 변경 없이 시스템을 재구성
        • 소규모 릴리즈 (Small Release): 자주자주 릴리즈! 짧은 주기로 릴리즈해서 고객 요구에 빠르게 대응
      • 주요 실천 방법 
        1. 용기 (Courage): 자신감 있게 개발! 겁먹지 말고 도전
        2. 단순성 (Simplicity): 필요한 것만 딱! 불필요한 건 No
        3. 의사소통 (Communication): 개발자, 관리자, 고객 간에 톡톡 튀는 소통
        4. 피드백 (Feedback): 빠른 피드백으로 즉각 반응!
        5. 존중 (Respect): 팀원 간에 서로 존중하며 협력5가지 가치
    • SCRUM (스크럼): 매일매일 짧고 굵게! 정해진 시간과 장소에서 짧은 시간 동안 집중해서 개발하는 프로젝트 관리 방법
      • Product Backlog (프로덕트 백로그): 우선순위가 매겨진 제품 요구사항 목록
      • Sprint (스프린트): 2~4주 짧고 굵게! 반복 수행으로 품질 업그레이드
      • Scrum Meeting (스크럼 미팅): 매일 15분, To-Do 리스트 체크하는 시간
      • Scrum Master (스크럼 마스터): 스크럼 리더! 문제를 인지하고 해결하는 히어로
      • Sprint Retrospective (스프린트 회고): 스프린트 끝나면 돌아보는 시간
      • Burn Down Chart (번다운 차트): 남은 작업량 vs 시간 그래픽으로 보여주는 차트
      • Sprint Backlog (스프린트 백로그): 스프린트 동안 할 작업 목록
      • Product Owner (프로덕트 오너): 요구사항 정의하고, Product Backlog를 업데이트하는 사람
    • LEAN (린): 낭비는 그만! 불필요한 것을 제거하고 결과를 측정해 소프트웨어 품질을 높이는 방법론. 토요타의 품질기법을 소프트웨어에 적용
    • Kanban (칸반): 보이는 게 중요해! Workflow를 시각화하고 작업 중인 항목을 제한하며 작업 시간을 측정할 수 있는 작업 지시서를 적용
  • Product Line Development (제품 계열 방법론): 특정 제품에 적용할 공통된 기능 정의하여 개발! 주로 임베디드 SW에 적용

 

➡️ "비용" 산정

비용산정 모형

  • 하향식 - Delphi Method (델파이 기법): 전문가의 경험과 지식을 통해 문제 해결! 2명 이하면 전문가 판단, 여러 명이면 델파이 기법
  • LoC (Lines of Code) 모형: 코드 라인의 낙관치, 중간치, 비관치로 예측하는 방법
  • Man Month 모형: 한 사람이 1개월 동안 할 수 있는 일의 양으로 비용 산정
    • Man Month: LoC (Lines of Code) / 프로그래머의 월간 생산성
    • 프로젝트 기간: Man Month / 프로젝트 인력
  • COCOMO 모형: 보헴이 제안한 프로그램 규모에 따른 비용 산정
    • 조직형 (Organic Mode): 소규모, 5만 라인 이하
    • 반 분리형 (Semi-Detached Mode): 중간 규모, 30만 라인 이하
    • 임베디드형 (Embedded Mode): 대규모, 30만 라인 이상
  • Putnam (푸트남) 모형: 개발 주기 단계별 필요한 인력 분포를 가정한 생명주기 예측 모형, Rayleigh-Norden 곡선 활용
  • FP (기능점수) 모형: 요구 기능마다 가중치를 부여해 총합으로 비용 산정

비용산정 자동화 추정 도구

  • SLIM: Rayleigh-Norden 곡선과 Putnam 예측 모델로 만든 자동화 추정 도구! 예측과 계획을 더 스마트하게
  • ESTIMACS: 다양한 프로젝트와 개인 요소를 반영한 FP 모형 기반 자동화 추정 도구! 맞춤형 계획 세우기

 

➡️ "일정" 관리

  • CPM (Critical Path Method, 주 공정법): 여러 작업의 순서를 계산! 시작과 끝 노드를 연결해 가장 긴 경로를 찾는 기법
  • PERT: 비관치, 중간치, 낙관치로 3점 추정해서 일정 관리하는 방법
  • CCPM (Critical Chain Project Management, 중요 연쇄 프로젝트 관리): 자원 제약사항 고려해서 주 공정을 연쇄적으로 관리하는 방법
  • 간트 차트: 막대 도표로 작업 일정을 한눈에! 시간선 차트라고도 불림

 

➡️ 소프트웨어 생명주기 프로세스

  • CMMI (Capability Maturity Model Integration): 소프트웨어 개발 조직의 업무 능력과 성숙도를 평가하는 모델
    1. 초기 (Initial): 작업자 능력에 따라 성공 여부가 결정되는 단계. 모든 게 개인 능력에 달렸어요!
    2. 관리 (Managed): 특정 프로젝트 내에서 프로세스가 정의되고 수행되는 단계. 프로젝트마다 룰이 생겨요!
    3. 정의 (Defined): 조직의 표준 프로세스를 활용해 업무를 수행하는 단계. 이제 우리만의 방법이 있어요!
    4. 정량적 관리 (Quantitatively Managed): 프로젝트를 숫자로 관리하고 통제하는 단계. 데이터로 모든 걸 관리해요!
    5. 최적화 (Optimizing): 프로세스 역량을 지속적으로 개선하는 단계. 계속해서 더 나아져요!
  • SPICE: 소프트웨어의 품질과 생산성을 높이기 위해 소프트웨어 프로세스를 평가하고 개선하는 국제 표준

 

➡️ "소프트웨어 아키텍처"

소프트웨어 아키텍처 4+1 뷰 - 유논프구배 (유스케이스, 논리, 프로세스, 구현, 배치)

  • Usecase view (유스케이스 뷰): 유스케이스랑 아키텍처 도출하고 다른 뷰도 검증하는 단계
  • Logical view (논리 뷰): 시스템의 기능적 요구사항이 어떻게 제공되는지 설명하는 단계
  • Process view (프로세스 뷰): 시스템의 비기능적 속성 (자원 사용, 이벤트 처리 등)을 표현하는 단계
  • Implementation view (구현 뷰): 개발 환경에서 소프트웨어 모듈이 어떻게 구성되는지 설명하는 단계
  • Deployment view (배치 뷰): 컴포넌트가 실제 아키텍처에 어떻게 배치되는지 설명하는 단계

패턴 (중요)

  • Layers Pattern (계층화 패턴): 시스템을 여러 계층으로 나눠 구성! 각 계층은 추상화를 제공하고, 상위 계층에 서비스를 제공해요.
  • Client-Server Pattern (클라이언트-서버 패턴): 하나의 서버와 여러 클라이언트로 구성된 패턴. 서버는 중앙에서, 클라이언트는 주변에서!
  • Pipe-Filter Pattern (파이프-필터 패턴): 데이터 스트림을 생성하고 처리하는 시스템에 사용. (시스템 ↔ 시스템)
  • Broker Pattern (브로커 패턴): 분리된 컴포넌트로 이루어진 분산 시스템에서 사용. 원격 서비스 실행할 때 딱!
  • MVC Pattern (모델-뷰-컨트롤러 패턴): 모델, 뷰, 컨트롤러로 시스템을 나눠 사용자 인터페이스와 비즈니스 로직을 분리.
    • 모델 (Model): 핵심 기능 담고 데이터 저장
    • 뷰 (View): 사용자에게 정보 뿌려주기
    • 컨트롤러 (Controller): 사용자의 요청 해결하기
  • Master-Slave Pattern (마스터-슬레이브 패턴): 막대한 연산을 위해 여러 컴퓨터를 병렬로 연결해 작업! 처리된 결과물은 다시 돌려받아요.
  • Interpreter Pattern (인터프리터 패턴): 프로그램 코드 각 라인의 수행 방법을 지정하고, 기호마다 클래스를 갖도록 구성된 패턴.
  • Peer-To-Peer Pattern (피어-투-피어 패턴): 피어가 클라이언트도 되고 서버도 되는 패턴. 모두가 주인공!
  • Event-Bus Pattern (이벤트-버스 패턴): 이벤트 메시지를 발행하면 구독한 리스너들이 메시지를 받아 처리.
  • Blackboard Pattern (블랙보드 패턴): 모든 컴포넌트가 공유 데이터 저장소와 블랙보드에 접근 가능한 패턴.

 

➡️ 디자인 패턴 (중요)

목적

  • 생성 (Creational): 클래스 정의하고 객체 인스턴스 뚝딱! - 빌프팩앱싱 (Builder, Prototype, Factory Method, Abstract Factory, Singleton)
    1. Builder: 복잡한 인스턴스, 조립해서 만들기
    2. Prototype: 원형 복사, 필요한 부분만 수정
    3. Factory Method: 부모가 객체 생성 인터페이스 정의, 자식이 인스턴스 생성
    4. Abstract Factory: 클래스에 의존하지 않고, 연관된 객체들 조합
    5. Singleton: 객체 하나만 생성, 어디서든 참조 가능
  • 구조 (Structural): 큰 구조 만들려고 클래스나 객체 조합! - 브데파플프컴어 (Bridge, Decorator, Façade, Flyweight, Proxy, Composite, Adapter)
    1. Bridge: 기능과 구현 연결, 독립적 확장
    2. Decorator: 기존 클래스에 기능 추가, 객체 결합으로 동적 확장
    3. Façade: 복잡한 시스템을 단순하게, 간단한 인터페이스 제공
    4. Flyweight: 중요한 요소 공유, 클래스 경량화
    5. Proxy: 실제 객체 대신 대리 객체 사용
    6. Composite: 객체 관계를 트리 구조로 표현, 객체 속에 또 다른 객체
    7. Adapter: 기존 클래스 재사용 가능하게 중간에서 맞춤
  • 행위 (Behavioral): 클래스나 객체가 어떻게 상호작용하고 역할 나누는지! - 메인인템옵스비컴스메체 (Mediator, Interpreter, Iterator, Template Method, Observer, State, Visitor, Command, Strategy, Memento, Chain of Responsibility)
    1. Mediator: 객체 많아지면 중재자 두기
    2. Interpreter: 언어 해석과 구문 나눠 해석하는 클래스
    3. Iterator (반복자): 내부 구조 노출 없이 모든 항목 접근
    4. Template Method: 기본 작업 구조는 그대로, 세부는 서브 클래스에서
    5. Observer: 한 객체 상태 변화, 다른 객체에 알림
    6. State: 객체 상태를 캡슐화, 상태에 따라 다른 처리
    7. Visitor: 기능 분리해 메소드가 클래스 돌아다니며 작업, 구조 변경 없이 기능 확장
    8. Command: 기능 캡슐화해 재이용 또는 취소 가능, 정보 저장
    9. Strategy (전략): 알고리즘을 정의해 하나의 클래스로 캡슐화
    10. Memento: 이전 상태로 복구, 작업 취소 가능
    11. Chain of Responsibility (책임 연쇄): 한 요청을 여러 객체가 처리, 객체들이 고리로 연결

범위

  1. 클래스 (Class): 클래스 간 관련성, 컴파일 타임에 정적으로 결정
  2. 객체 (Object): 객체 간 관련성, 런타임에 동적으로 결정

 

➡️ OSI 7 계층 (중요) - 응표세전네데물 (응용, 표현, 세션, 전송, 네트워크, 데이터 링크, 물리 계층)

  • Application Layer (응용 계층): 사용자와 네트워크를 연결, 데이터 생성 (HTTP, FTP)
  • Presentation Layer (표현 계층): 데이터 형식 설정, 부호 교환, 암/복호화, 데이터 압축 (JPEG, MPEG)
  • Session Layer (세션 계층): 연결 접속 및 동기화, 대화 제어 (SSH, TLS)
  • Transport Layer (전송 계층): 신뢰성 있는 통신 보장, End-to-End 데이터 전송 (TCP, UDP)
  • Network Layer (네트워크 계층): 네트워크 연결 관리, 경로 제어, 패킷 교환 (IP, ICMP)
  • Data Link Layer (데이터 링크 계층): 인접 시스템 간 정보 전송, 연결 설정, 데이터 전송 (ETHERNET)
  • Physical Layer (물리 계층): 실제 접속과 절단, 기계적/전기적/기능적 특성 정의 (RS-232C)

 

➡️ 미들웨어 (Middleware)

  • WAS (Web Application Server): 변하는 동적 콘텐츠 처리
  • TP-Monitor: 트랜잭션 처리하고 감시
  • MOM (Message-Oriented Middleware): 메시지 전달하고 데이터 동기화
  • RPC (Remote Procedure Call): 원격 프로시저를 로컬처럼 호출
  • ORB (Object Request Broker): CORBA 표준 객체지향 미들웨어

 

➡️ 요구사항

요구사항 구분

  • 기능적 요구사항: 시스템이 제공하는 기능, 서비스 요구
  • 비기능적 요구사항: 기능 외의 시스템 구축 제약사항

요구사항 단계 - 타도분명검 (타당성 조사, 도출, 분석, 명세, 검증)

  • 타당성 조사: 시스템 구축 가능성 평가 (비용, 일정, 기술 등)
  • 요구사항 도출 (Elicitation): 요구사항을 어디서 어떻게 수집할지 결정
    • 인터뷰: 이해관계자와 직접 대화, 회의록 필수!
    • 브레인스토밍: 아이디어 막 던지기, 비판 없이 수용
      • JAD (Joint Application Development): 사용자와 개발자가 같이 프로토타입 작업
    • 델파이 기법: 전문가의 경험과 지식 활용
    • 롤 플레잉: 현실 상황 설정, 역할 연기
    • 워크숍: 단기간 집중해서 정보 획득하고 공유
    • 설문 조사: 설문지나 여론조사로 간접 정보 수집
    • 벤치마킹: 경쟁 제품, 성공 사례, 업무 절차 참조
    • 프로토타입: 기본 기능 빠르게 구현, 사용자 피드백 받기
  • 요구사항 분석 (Analysis): 요구사항 간 상충 해결, 소프트웨어 범위 파악, 정제 및 정리
  • 요구사항 명세 (Specification): 검토, 평가, 승인 가능한 문서 작성
    • 정형 명세 기법: 수학적 원리와 표기법 사용, 표현은 간결하고 명확! 이해는 좀 어려움
    • 비정형 명세 기법: 자연어 기반 서술, 이해는 쉬운데 명확성과 검증에 문제 발생 가능성
  • 요구사항 검증 (Validation/Verification): 요구사항 문서가 표준에 맞고 이해 가능, 일관성 있고 완전한지 확인
    • Walk Through (워크 스루): 작성자가 설명하고, 이해관계자들이 들어주는 방식 (2~3명)
    • Peer Review (동료 검토): 자료를 미리 배포하고, 사전 검토 후 짧은 회의로 오류 잡기
    • Inspection (인스펙션): 작성자 외 다른 전문가나 팀이 오류 찾아내기

 

➡️ UI (User Interface)

UI (User Interface)

  • CLI (Command Line Interface): 명령어로 텍스트 입력해 조작
  • GUI (Graphical User Interface): 그래픽 환경 기반, 마우스나 전자펜 이용
  • NUI (Natural User Interface): 신체 부위 이용 (터치, 음성)
  • OUI (Organic User Interface): 현실의 모든 사물이 입출력장치로 변신

UI 요구사항 구분

  • 기능적 요구사항: 시스템이 제공하는 기능, 서비스에 대한 요구
  • 비기능적 요구사항: 기능 외의 품질, 제약사항에 대한 요구
    • 기능성 (Functionality): 실제 결과와 품질 요구의 차이 분석
    • 신뢰성 (Reliability): 시스템이 정해진 시간 동안 제대로 동작하는지
    • 사용성 (Usability): 사용자와 시스템 간의 상호작용이 얼마나 쉬운지
    • 효율성 (Efficiency): 제한된 자원으로 얼마나 빨리 처리하는지
    • 유지보수성 (Maintainability): 시스템을 얼마나 쉽게 수정하고 확장할 수 있는지
    • 이식성 (Portability): 다른 플랫폼에서도 쉽게 적용할 수 있는지

 

➡️ UI 설계

UI 설계 원칙 - 직유학유 (직관성, 유효성, 학습성, 유연성)

  1. 직관성: 누구나 쉽게 이해하고 사용
  2. 유효성: 정확하고 완벽하게 사용자 목표 달성
  3. 학습성: 초보와 숙련자 모두 쉽게 배우고 사용
  4. 유연성: 사용자의 요구사항 최대한 수용, 실수 방지

UI 설계

  • Wireframe (와이어프레임): 화면 구성과 흐름을 간단히 보여주는 레이아웃 설계
  • Storyboard (스토리보드): 서비스 구축에 필요한 중요한 정보를 담은 설계 문서. 페이지와 기능을 상세히 서술
  • Prototype (프로토타입): 실제처럼 동작하는 모델을 만들어 사용자 피드백을 받기
  • 스타일 가이드: 폰트, 색상, 버튼 등 디자인 규칙을 정리한 문서
  • UI 표준: 디자인 철학과 공통 UI 요소, 배치 규칙을 정의한 문서
  • UI 지침: 서비스 구축 시 지켜야 할 세부 사항을 정리한 문서
  • Mockup (목업): 실제 화면과 비슷하게 만든 정적 모델, 기능은 구현되지 않음


➡️ UML (Unified Modeling Language)

UML 구성요소

  • Things (사물): 주제를 나타내는 요소 (추상적 개념)
  • Relationships (관계): 사물의 의미를 확장하고 사물과 사물을 연결
  • Diagrams (다이어그램): 사물과 관계를 모아 그림으로 표현

UML 다이어그램

  • 구조적 다이어그램 (정적)
    • Class (클래스 다이어그램): 클래스의 속성, 행동, 그리고 클래스 간의 관계를 보여줌. 객체 타입 정의하고 객체들 간의 관계 도식화
    • Object (객체 다이어그램): 특정 시점의 객체들 사이의 관계를 표현
    • Component (컴포넌트 다이어그램): 시스템을 구성하는 물리적 컴포넌트와 그들 간의 의존 관계를 나타냄
    • Deployment (배치 다이어그램): 컴포넌트 간의 종속성과 물리적 위치를 표현
    • Composite Structure (복합체 구조 다이어그램): 복합 구조의 내부 구조를 표현
    • Package (패키지 다이어그램): 모델 요소들을 그룹화한 패키지들 간의 관계를 표현
  • 행위 다이어그램 (동적)
    • Usecase (유스케이스): 시스템이 제공하는 기능을 사용자 입장에서 표현
      • 액터 (Actor): 시스템 밖에서 시스템과 소통하는 사람이나 시스템
      • 유스케이스 (Use case): 사용자가 보고 싶은 시스템 기능, 액터에게 시스템이 해줘야 할 것들
      • 관계 (Relation): 포함관계는 <<include>>로, 확장관계는 <<extend>>로 표시
      • UML 스테레오타입: 모델 요소의 << >> 사이에 이름을 넣어 확장하는 방법
      • 인터페이스 (Interface): 클래스나 컴포넌트가 반드시 구현해야 할 오퍼레이션 목록
    • Sequence (시퀀스): 객체 간의 동적 상호작용을 시간 순서대로 표현
    • Communication (커뮤니케이션): 객체들이 주고받는 메시지 표현
    • State (상태): 객체가 속한 클래스의 상태 변화를 표현
    • Activity (활동): 시스템이 어떤 기능을 수행하는지, 처리 로직과 조건에 따른 흐름을 순서대로 표현. 사건 발생에 따른 객체들 간의 상호작용 표현
    • Timing (타이밍): 객체 상태 변화와 시간 제약을 명확하게 표현

UML 클래스

  • 연관관계 (Association): 클래스가 개념적으로 연결되어 있는 상태. {공격수, 수비수, 골키퍼} - 축구팀
  • 집합관계 (Aggregation): 하나의 클래스가 다른 클래스를 포함하는 관계. 전체 객체가 사라져도 부분 객체는 남아있는 경우. {엔진, 바퀴, 운전대} - 🚗 차
  • 복합관계 (Composition): 전체 객체가 사라지면 부분 객체도 사라지는 관계. 부분 객체가 전체 객체에 의존적인 경우. {피스톤, 플러그} - 🏎️ 엔진
  • 일반화 (Generalization): 한 클래스가 다른 클래스보다 더 일반적일 때의 관계. 상위 개념과 하위 개념 사이의 관계. {자가용, 택시, 버스} - 🚙 차
  • 의존관계 (Dependency): 하나의 클래스가 다른 클래스를 사용하는 관계. 이 관계는 짧은 시간 동안 유지되는 경우가 많음. {수업} - ➡️ 교수
  • 상속관계 (Inheritance): 추상 클래스나 인터페이스를 상속받아 자식 클래스가 추상 메소드를 구현하는 관계. {동물} - 🐶 개

 

➡️ "데이터" 모델

데이터 모델 구성요소

  • 구조 (Structure): 데이터 간의 관계를 표현해주는 정적인 요소. 논리 데이터 모델에서 사용돼. 
  • 연산 (Operation): 실제 데이터를 처리할 때 사용하는 도구와 명세. 
  • 제약조건 (Constraint): 데이터에 대한 논리적인 제약을 설정하는 부분.

데이터베이스 모델링 - 개논물 (개념적, 논리적, 물리적)

    1. 개념적 데이터 모델링 (Conceptual Data Modeling): 현실 세계를 추상화해서 표현. 개체-관계 다이어그램(ERD) 같은 도구 사용.
      • 개체-관계 다이어그램(ERD) 기호 - 개관속속(네모 (개체), 마름모 (관계), 타원 (속성), 이중타원 (다중값 속성))
        • 개체 (Entity): □ (사각형) 시스템 내에서 독립적으로 존재하는 객체.
        • 관계 (Relationship): ◇ (마름모)  개체들 간의 연관성을 나타내는 것.
        • 속성 (Attribute): ○ (타원) 개체의 특성이나 정보를 담고 있는 것.
        • 다중값 속성 (Multivalued Attribute): ◎ (이중 타원) 하나의 개체가 여러 값을 가질 수 있는 속성.
        • 개체 타입과 속성을 연결 (Association): ㅡ (선) 
    2.  논리적 데이터 모델링 (Logical Data Modeling): 업무를 모델링 표기법으로 변환하여 이해하기 쉽게 정리. 정규화 작업 포함.
    3. 물리적 데이터 모델링 (Physical Data Modeling): 논리 모델을 DBMS에 맞게 변환하고, 실제 저장 방식과 스키마를 설계.
      • 참조 무결성 제약조건: 릴레이션 간의 참조 일관성을 유지하기 위한 규칙. 데이터의 일관성을 보장하기 위해 필요한 조건들.
        • Restricted(제한): 참조 무결성을 위배하는 연산을 거절해. 데이터 삭제 시 연결된 데이터가 있을 때 삭제를 허용하지 않음.
        • Cascade(연쇄): 참조되는 릴레이션에서 튜플 삭제 시, 이를 참조하는 다른 릴레이션의 튜플도 함께 삭제됨.
        • Nullify(널 값): 참조되는 릴레이션에서 튜플 삭제 후, 이 튜플을 참조하는 다른 릴레이션의 튜플을 NULL로 설정함.
      • 파티션(Partition) 설계: 데이터의 분할 방식. 데이터베이스 테이블을 효율적으로 관리하기 위해 데이터를 파티션으로 나누는 방법.
        • Range Partitioning(레인지 파티셔닝, 범위 분할): 연속적인 숫자나 날짜를 기준으로 데이터를 분할.
        • Composite Partitioning(컴포지트 파티셔닝, 조합 분할): 두 개 이상의 파티션 방법을 결합해 데이터 분할.
        • Hash Partitioning(해시 파티셔닝, 해시 분할): 파티션 키의 해시 함수 값을 기준으로 데이터를 분할.
        • List Partitioning(리스트 파티셔닝, 리스트 분할): 특정 목록에 따라 데이터를 명시적으로 분할.

 

➡️ "관계 데이터" 모델

관계 데이터 모델 구성요소

  • 릴레이션 (Relation): 행(Row)과 열(Column)로 구성된 테이블.
  • 튜플 (Tuple): 릴레이션의 행(Row). 하나의 데이터 레코드.
  • 속성 (Attribute): 릴레이션의 열(Column). 데이터의 필드나 속성.
  • 카디널리티 (Cardinality): 튜플의 개수. 데이터 집합에서 유니크한 값의 개수.
  • 차수 (Degree): 속성의 개수. 테이블의 열 수.
  • 스키마 (Schema): 데이터베이스의 구조와 제약조건 등의 정보가 담긴 기본적인 구조.
  • 인스턴스 (Instance): 정의된 스키마에 따라 테이블에 실제로 저장된 데이터의 집합.

관계 연산

  • 관계 대수: 데이터베이스에서 원하는 정보를 어떻게 유도할지 정하는 절차적 정형 언어. 정보 검색 절차를 구체적으로 기술해.
  • 관계 해석: 데이터베이스에서 원하는 정보가 무엇인지 정의하는 비절차적 정형 언어. 튜플 관계 해석도메인 관계 해석이 있어.
  • 관계 연산자
    • Select ( σ 조건(R) ): 릴레이션 R에서 조건에 맞는 튜플을 뽑아내. σ 학년=1(학생) — 1학년 학생들만 쏙쏙 뽑아.
    • Project ( π 속성리스트(R) ): 릴레이션 R에서 지정한 속성만으로 구성된 튜플을 뽑아. π 학번,이름(학생) — 학번과 이름만 골라서.
    • Join ( R⋈조건 S ): 공통 속성으로 R과 S의 튜플을 연결해서 새로운 튜플을 만들어. 학생⋈학번=학번성적 — 학번으로 학생과 성적을 합쳐.
    • Division ( R÷S ): 릴레이션 S의 모든 튜플과 관련 있는 R의 튜플을 뽑아. 학생÷성일 — 성적이 ‘일’인 학생들만.
  • 집합 연산자
    • 합집합 ( R ∪ S ): 두 릴레이션 R과 S를 합쳐서 새로운 릴레이션을 만들어.
    • 교집합 ( R ∩ S ) : 릴레이션 R과 S 둘 다에 속하는 튜플만 모아서 결과를 만들어.
    • 차집합 ( R - S ): R에는 있고 S에는 없는 튜플만 뽑아서 결과를 만들어.
    • 카티션 프로덕트 ( R × S ): R과 S의 모든 튜플을 연결해서 새로운 튜플을 만들어.

 

➡️ 정규화(Normalization)

  • 정규화(Normalization): 데이터 중복과 문제점 피하려고, 데이터 쪼개서 깔끔하게 만드는 작업. 중복 없애고 일관성 유지!
    1. 정규형(1NF): 데이터 원자화 — 쪼개서 한 칸에 하나만.
    2. 정규형(2NF): 부분 종속 없애기 — 테이블의 모든 속성이 기본키에 종속되도록.
    3. 정규형(3NF): 이행 종속 제거 — 비키 속성끼리 종속 관계 없애기.
    4. 보이스-코드 정규형(BCNF): 후보키 아닌 속성의 종속 제거.
    5. 정규형(4NF): 다치 종속 제거 — 다중 값 속성의 종속 없애기.
    6. 정규형(5NF): 조인 종속 제거 — 분해해도 정보 손실 없이 조인 가능하게 하기.
  • 반정규화(De-Normalization): 성능 올리고 개발 좀 더 간단하게 하려는 작업. 정규화된 데이터에 중복 추가하거나 통합해서 더 쉽게 사용할 수 있게 만듦.
  • 이상 현상(Anomaly): 정규화 부족해서 데이터 중복 생기면 조작할 때 문제 발생. 예를 들어, 정보 삽입, 삭제, 갱신할 때 이상한 일이 생김.
    1. 삽입 이상: 새 정보 넣을 때 불필요한 정보도 입력해야 하는 상황.
    2. 삭제 이상: 정보 지울 때 원치 않는 정보도 같이 삭제됨.
    3. 갱신 이상: 중복 데이터 일부만 수정해서 다른 곳과 충돌 생기는 문제.


➡️ 데이터베이스(Database)

  • 통합된 데이터 (Integrated Data): 중복 없이 깔끔하게 통합된 데이터.
  • 저장된 데이터 (Stored Data): 저장 장치에 기록된 데이터.
  • 운영 데이터 (Operational Data): 회사의 업무를 수행하는 데 필요한 데이터.
  • 공용 데이터 (Shared Data): 여러 앱이나 시스템이 함께 사용하는 데이터.

데이터베이스 암호화 알고리즘

  • 대칭키 암호화 (Symmetric Encryption): 같은 키로 암호화와 복호화를 진행. (예: ARIA, AES, SEED)
  • 비대칭키 암호화 (Asymmetric Encryption): 공개키와 비밀키를 별도로 사용. (예: RSA, ECC)
  • 해시 (Hashing): 원본 데이터를 복원할 수 없는 일방향 암호화. (예: SHA, HAS)

데이터베이스 암호화 방식

  • API 방식: 애플리케이션에서 직접 암호화 모듈을 적용해 데이터 보호.
  • Plug-in 방식: 데이터베이스 서버에 암호화 모듈을 설치하여 서버가 암호화 처리.
  • TDE (Transparent Data Encryption) 방식: DBMS에서 자동으로 데이터 암호화 및 복호화.
  • Hybrid 방식: API와 Plug-in 방식을 결합하여 DB 서버와 애플리케이션 서버가 함께 암호화 작업을 분담.

 

➡️ 빅데이터 (Big Data)

  • HDFS (하둡 분산 파일 시스템): 하둡에서 사용하는 분산 파일 저장 시스템.
    • 하둡 (Hadoop): 대량의 데이터를 처리하는 대형 컴퓨터 클러스터에서 작동하는 오픈소스 자바 프레임워크.
    • 스쿱 (Sqoop): 관계형 데이터베이스에서 하둡 분산 파일 시스템(HDFS)으로 데이터를 가져오는 기술.
    • 척와 (Chuckwa): 비정형 데이터를 수집하는 기술로, 서버에서 데이터를 수집하고 HDFS에 저장.
  • 맵 리듀스 (Map Reduce): 구글이 대량 데이터 처리를 위해 만든 소프트웨어 프레임워크.
  • 온톨로지 (Ontology): 현실 세계의 개념과 속성, 관계를 컴퓨터가 이해할 수 있도록 설명하는 방식.
  • 시맨틱 웹 (Semantic Web): 온톨로지를 이용해 정보 검색을 자동화하고, 컴퓨터가 사람 대신 정보를 이해하고 처리하는 차세대 웹.

 

➡️ 데이터 관련 용어

데이터 마이닝 (Data Mining)

  • 분류 (Classification): 과거 데이터를 바탕으로 특징을 찾아 분류 모델을 만들고 결과를 예측함.
  • 연관 (Association): 데이터 항목들 사이의 관계를 찾아내는 기법.
  • 연속 (Sequence): 시간 정보를 포함하여 연관 규칙을 찾는 기법.
  • 데이터 군집화 (Clustering): 비슷한 특성을 가진 데이터들을 그룹으로 나누는 기법.

기타 용어

  • 데이터 웨어하우스 (Data Warehouse): 방대한 양의 데이터를 효과적으로 분석하고 정보화하여 여러 사용자들이 쉽게 활용할 수 있도록 돕는 시스템. 사용자 의사결정을 지원함.
  • 데이터 마트 (Data Mart): 데이터 웨어하우스에서 정의된 접근 계층을 통해 데이터를 추출하고 사용자에게 제공하는 부분 시스템.
  • OLAP (Online Analytical Processing): 대량의 업무 데이터를 분석하고 비즈니스 인텔리전스(BI)를 지원하는 기술. 실제 사용자의 업무 환경에 영향을 미치지 않음.
  • OLTP (Online Transaction Processing): 온라인에서 실시간으로 데이터베이스의 데이터를 갱신하고 검색하는 등 트랜잭션을 처리하는 시스템. 모든 트랜잭션을 관리하고 저장함.

 

➡️ NoSQL (Not Only SQL)

  • Basically Available (기본적인 가용성): 데이터에 언제든지 접근 가능해야 함.
  • Soft-State (소프트 상태): 노드의 상태는 내부 정보가 아니라 외부에서 전송된 정보에 의해 결정됨.
  • Eventually Consistency (결과적 일관성): 일정 시간이 지나면 데이터의 일관성이 유지됨.

 

➡️ "연계 데이터"

연계 요구사항 분석 참고문서

  • 개체 정의서: 데이터베이스 개념 모델링에서 개체 타입, 속성, 식별자 등을 대충 정리한 문서.
  • 테이블 정의서: 논리와 물리 모델링 과정에서 만드는 설계 문서.
  • 인터페이스 정의서: 데이터 타입, 길이 등 송수신에 필요한 상세 정보가 담긴 문서.

연계 메커니즘

  • 직접 연계: 간단하고 비용 적고 빠름. 성능 좋지만 결합도 높고 변경에 민감함.
  • 간접 연계: 네트워크나 프로토콜 다를 때 유연하지만 복잡하고 성능 저하 및 기간 길어짐.

연계 메커니즘 관련 용어

  • 커넥션 풀 (Connection Pool): DB와 연결된 커넥션을 미리 만들어서 필요할 때 꺼내 쓰는 방식.
  • JDBC (Java Database Connectivity): 자바에서 DB에 접속할 수 있게 해주는 자바 API.
  • API (Application Programming Interface): OS나 언어 기능을 제어하여 응용 프로그램 간 데이터 주고받기.
  • WSDL (Web Services Description Language): 웹 서비스에 대한 정보(이름, 위치, 메시지 포맷 등)를 XML로 설명하는 언어.
  • SOAP (Simple Object Access Protocol): HTTP, HTTPS, SMTP로 XML 메시지를 네트워크에서 교환하는 프로토콜.
  • UDDI (Universal Description, Discovery and Integration): WSDL을 등록하고 검색할 수 있는 장소.
  • 소켓 (Socket): 네트워크에서 프로세스 간 통신의 접속점.

 


내외부 연계 모듈 구현 및 인터페이스 설계 확인

  • EAI (Enterprise Application Integration): 회사 내 다양한 플랫폼과 애플리케이션 간의 데이터 전달과 통합을 도와주는 솔루션.
    • 포인트 투 포인트 (Point-to-Point): 간단한 1:1 연결 방식. 직접 연결만 하니까 관리가 쉬워.
    • 허브 앤 스포크 (Hub & Spoke): 중앙 허브를 통해 데이터 전송. 허브가 고장 나면 전체 시스템이 멈출 수 있어.
    • 메시지 버스 (Message Bus): 미들웨어를 통해 애플리케이션을 연결. 확장성과 대량 데이터 처리에 강점.
    • 하이브리드 (Hybrid): 그룹 내에서는 허브 앤 스포크 방식, 그룹 간에는 메시지 버스 방식을 사용.
  • ESB (Enterprise Service Bus): 다양한 플랫폼과 애플리케이션을 하나의 시스템처럼 통합해서 관리하는 방식. 미들웨어를 중심으로 느슨하게 연결해 주며, EAI의 중앙 허브 방식 문제를 해결하기 위해 개발됨.

 

➡️ 인터페이스 구현

인터페이스 구현 기술 (중요)

  • JSON (JavaScript Object Notation): "속성-값 쌍"으로 구성된 데이터 오브젝트를 전달하기 위해 인간이 읽을 수 있는 텍스트 포맷. 간결하고 가독성이 높음.
  • XML (Extensible Markup Language): HTML의 단점을 보완하고, SGML의 복잡성을 줄인 특수 목적 마크업 언어. 데이터 구조를 명확히 표현.
  • AJAX (Asynchronous JavaScript and XML): 자바스크립트를 사용해 웹 서버와 클라이언트 간에 비동기적으로 XML 데이터를 교환하는 기술. 페이지 새로 고침 없이 데이터 갱신 가능.
  • REST (Representational State Transfer): 웹과 같은 분산 하이퍼미디어 환경에서 자원의 상태 정보를 HTTP 메서드로 주고받는 웹 아키텍처 스타일. 간단하고 유연한 API 설계에 유리.
  • DB Link: 데이터베이스 시스템 간 직접 연결을 통해 데이터를 연계하는 방법. 시스템 간 통합을 위한 직접적 접근.

인터페이스 구현 검증 도구 (중요)

  1. xUnit: 자바, C++, .NET 등 다양한 언어를 지원하는 단위 테스트 프레임워크. (예: JUnit, CppUnit, NUnit)
  2. STAF (Software Testing Automation Framework): 서비스 호출, 컴포넌트 재사용 등 다양한 환경을 지원하는 테스트 프레임워크.
  3. FitNesse: 웹 기반 테스트 케이스 설계, 실행, 결과 확인 등을 지원하는 프레임워크.
  4. NTAF (NHN Test Automation Framework): FitNesse와 STAF를 결합한 NHN(Naver)의 테스트 자동화 프레임워크.
  5. Selenium: 다양한 브라우저와 개발 언어를 지원하며, 테스트 스크립트 언어 학습이 필요 없는 프레임워크.
  6. Watir: 루비 기반의 웹 애플리케이션 테스트 프레임워크.

인터페이스 감시 도구

  • 스카우터 (Scouter): 애플리케이션 모니터링 및 DB Agent를 통해 오픈 소스 DB 모니터링 기능 제공.
  • 제니퍼 (Jennifer): 애플리케이션의 개발부터 안정화까지 전 생애 주기 동안 성능 모니터링 및 분석 기능 제공.

 

➡️ 트랜잭션

트랜잭션 특성 - ACID

  1. 원자성 (Atomicity): 트랜잭션은 하나의 단위로, 전부 성공하거나 전부 실패해야 함.
  2. 일관성 (Consistency): 트랜잭션 실행 후 데이터베이스는 항상 일관된 상태를 유지함.
  3. 격리성 (Isolation): 트랜잭션의 중간 결과는 다른 트랜잭션이 볼 수 없음.
    • Read Uncommitted: 다른 트랜잭션이 연산 중인 데이터를 읽을 수 있음. 가장 낮은 격리 수준, 더 많은 동시성 허용.
    • Read Committed: 다른 트랜잭션의 연산이 완료된 후에만 데이터를 읽을 수 있음. 일관성 있는 읽기 보장.
    • Repeatable Read: 트랜잭션이 종료될 때까지 해당 데이터에 대한 갱신/삭제 제한. 트랜잭션 내에서 읽은 데이터는 일관되게 유지됨.
    • Serializable Read: 데이터 영역 전체에 대한 접근 제어, 순차적으로 읽기. 가장 높은 격리 수준, 완벽한 일관성 보장.
  4. 영속성 (Durability): 성공적으로 완료된 트랜잭션의 결과는 영구적으로 저장됨.

트랜잭션 상태 변화

  • 활동 상태 (Active): 트랜잭션이 실행 중인 상태.
  • 부분 완료 상태 (Partially Committed): 마지막 명령문이 실행된 후의 상태.
  • 완료 상태 (Committed): 트랜잭션이 성공적으로 완료된 상태.
  • 실패 상태 (Failed): 트랜잭션이 정상적으로 실행될 수 없는 상태.
  • 철회 상태 (Aborted): 트랜잭션이 취소되어 데이터베이스가 트랜잭션 시작 전 상태로 복원된 상태.

트랜잭션 제어 (TCL)

  • 커밋 (Commit): 트랜잭션의 모든 변경 사항을 데이터베이스에 영구적으로 저장.
  • 롤백 (Rollback): 트랜잭션의 변경 사항을 취소하고, 트랜잭션 시작 전 상태로 되돌림.
  • 체크포인트 (Checkpoint): 롤백 시점을 설정해 데이터베이스 복구 시 사용할 수 있는 지점을 지정.

 

➡️ 병행 제어 (Concurrency Control)

  • 로킹 (Locking): 데이터에 락을 걸어 다른 트랜잭션의 접근을 막음. 데이터 일관성 보장.
  • 낙관적 검증 (Optimistic Validation): 트랜잭션 실행 후 검증하여 문제가 있으면 롤백. 효율적 처리.
  • 타임 스탬프 순서 (Timestamp Ordering): 트랜잭션에 타임 스탬프 부여, 순서에 따라 처리. 일관성 유지.

 

➡️ 회복 기법 (Recovery Techniques)

  • 지연(연기) 갱신 회복 기법 (Deferred Update): 트랜잭션 완료 후 데이터베이스에 기록. 트랜잭션이 성공적으로 완료된 후 데이터베이스에 반영.
  • 즉시(즉각) 갱신 회복 기법 (Immediate Update): 트랜잭션 수행 중 갱신 결과를 바로 데이터베이스에 반영. 실시간 업데이트, 장애 발생 시 복구 필요.
  • 체크포인트 회복 기법 (Checkpoint Recovery): 장애 발생 시 체크포인트 이후의 트랜잭션만 복원. 주기적으로 체크포인트 저장.
  • 그림자 페이징 회복 기법 (Shadow Paging Recovery): 트랜잭션 수행 시 복제본을 생성하여 장애 시 복구. 복제본을 이용한 데이터 복구.

 

➡️ DBMS - 무일회보효 (무결성, 일관성, 회복성, 보안성, 효율성)

  • 데이터 무결성 (Data Integrity): 동일 내용에 대한 중복 저장 방지.
  • 데이터 일관성 (Data Consistency): 삽입, 삭제, 갱신 후에도 데이터 값이 변함없이 유지.
  • 데이터 회복성 (Data Recovery): 장애 발생 시 특정 상태로 복구.
  • 데이터 보안성 (Data Security): 불법적인 노출, 변경, 손실로부터 보호.
  • 데이터 효율성 (Data Efficiency): 응답 시간 및 저장 공간 활용 최적화.
반응형