기타/정보처리기사
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): 자주자주 릴리즈! 짧은 주기로 릴리즈해서 고객 요구에 빠르게 대응
- 주요 실천 방법
- 용기 (Courage): 자신감 있게 개발! 겁먹지 말고 도전
- 단순성 (Simplicity): 필요한 것만 딱! 불필요한 건 No
- 의사소통 (Communication): 개발자, 관리자, 고객 간에 톡톡 튀는 소통
- 피드백 (Feedback): 빠른 피드백으로 즉각 반응!
- 존중 (Respect): 팀원 간에 서로 존중하며 협력5가지 가치
- 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를 시각화하고 작업 중인 항목을 제한하며 작업 시간을 측정할 수 있는 작업 지시서를 적용
- XP (eXtreme Programming): 소통이 중요해! 의사소통을 개선하고 즉각적인 피드백으로 SW 품질을 높이는 방법
- 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): 소프트웨어 개발 조직의 업무 능력과 성숙도를 평가하는 모델
- 초기 (Initial): 작업자 능력에 따라 성공 여부가 결정되는 단계. 모든 게 개인 능력에 달렸어요!
- 관리 (Managed): 특정 프로젝트 내에서 프로세스가 정의되고 수행되는 단계. 프로젝트마다 룰이 생겨요!
- 정의 (Defined): 조직의 표준 프로세스를 활용해 업무를 수행하는 단계. 이제 우리만의 방법이 있어요!
- 정량적 관리 (Quantitatively Managed): 프로젝트를 숫자로 관리하고 통제하는 단계. 데이터로 모든 걸 관리해요!
- 최적화 (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)
- Builder: 복잡한 인스턴스, 조립해서 만들기
- Prototype: 원형 복사, 필요한 부분만 수정
- Factory Method: 부모가 객체 생성 인터페이스 정의, 자식이 인스턴스 생성
- Abstract Factory: 클래스에 의존하지 않고, 연관된 객체들 조합
- Singleton: 객체 하나만 생성, 어디서든 참조 가능
- 구조 (Structural): 큰 구조 만들려고 클래스나 객체 조합! - 브데파플프컴어 (Bridge, Decorator, Façade, Flyweight, Proxy, Composite, Adapter)
- Bridge: 기능과 구현 연결, 독립적 확장
- Decorator: 기존 클래스에 기능 추가, 객체 결합으로 동적 확장
- Façade: 복잡한 시스템을 단순하게, 간단한 인터페이스 제공
- Flyweight: 중요한 요소 공유, 클래스 경량화
- Proxy: 실제 객체 대신 대리 객체 사용
- Composite: 객체 관계를 트리 구조로 표현, 객체 속에 또 다른 객체
- Adapter: 기존 클래스 재사용 가능하게 중간에서 맞춤
- 행위 (Behavioral): 클래스나 객체가 어떻게 상호작용하고 역할 나누는지! -
메인인템옵스비컴스메체 (Mediator, Interpreter, Iterator, Template Method, Observer, State, Visitor, Command, Strategy, Memento, Chain of Responsibility)- Mediator: 객체 많아지면 중재자 두기
- Interpreter: 언어 해석과 구문 나눠 해석하는 클래스
- Iterator (반복자): 내부 구조 노출 없이 모든 항목 접근
- Template Method: 기본 작업 구조는 그대로, 세부는 서브 클래스에서
- Observer: 한 객체 상태 변화, 다른 객체에 알림
- State: 객체 상태를 캡슐화, 상태에 따라 다른 처리
- Visitor: 기능 분리해 메소드가 클래스 돌아다니며 작업, 구조 변경 없이 기능 확장
- Command: 기능 캡슐화해 재이용 또는 취소 가능, 정보 저장
- Strategy (전략): 알고리즘을 정의해 하나의 클래스로 캡슐화
- Memento: 이전 상태로 복구, 작업 취소 가능
- Chain of Responsibility (책임 연쇄): 한 요청을 여러 객체가 처리, 객체들이 고리로 연결
범위
- 클래스 (Class): 클래스 간 관련성, 컴파일 타임에 정적으로 결정
- 객체 (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 설계 원칙 - 직유학유 (직관성, 유효성, 학습성, 유연성)
- 직관성: 누구나 쉽게 이해하고 사용
- 유효성: 정확하고 완벽하게 사용자 목표 달성
- 학습성: 초보와 숙련자 모두 쉽게 배우고 사용
- 유연성: 사용자의 요구사항 최대한 수용, 실수 방지
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 (타이밍): 객체 상태 변화와 시간 제약을 명확하게 표현
- Usecase (유스케이스): 시스템이 제공하는 기능을 사용자 입장에서 표현
UML 클래스
- 연관관계 (Association): 클래스가 개념적으로 연결되어 있는 상태. {공격수, 수비수, 골키퍼} - 축구팀
- 집합관계 (Aggregation): 하나의 클래스가 다른 클래스를 포함하는 관계. 전체 객체가 사라져도 부분 객체는 남아있는 경우. {엔진, 바퀴, 운전대} - 🚗 차
- 복합관계 (Composition): 전체 객체가 사라지면 부분 객체도 사라지는 관계. 부분 객체가 전체 객체에 의존적인 경우. {피스톤, 플러그} - 🏎️ 엔진
- 일반화 (Generalization): 한 클래스가 다른 클래스보다 더 일반적일 때의 관계. 상위 개념과 하위 개념 사이의 관계. {자가용, 택시, 버스} - 🚙 차
- 의존관계 (Dependency): 하나의 클래스가 다른 클래스를 사용하는 관계. 이 관계는 짧은 시간 동안 유지되는 경우가 많음. {수업} - ➡️ 교수
- 상속관계 (Inheritance): 추상 클래스나 인터페이스를 상속받아 자식 클래스가 추상 메소드를 구현하는 관계. {동물} - 🐶 개
➡️ "데이터" 모델
데이터 모델 구성요소
- 구조 (Structure): 데이터 간의 관계를 표현해주는 정적인 요소. 논리 데이터 모델에서 사용돼.
- 연산 (Operation): 실제 데이터를 처리할 때 사용하는 도구와 명세.
- 제약조건 (Constraint): 데이터에 대한 논리적인 제약을 설정하는 부분.
데이터베이스 모델링 - 개논물 (개념적, 논리적, 물리적)
- 개념적 데이터 모델링 (Conceptual Data Modeling): 현실 세계를 추상화해서 표현. 개체-관계 다이어그램(ERD) 같은 도구 사용.
- 개체-관계 다이어그램(ERD) 기호 - 개관속속(네모 (개체), 마름모 (관계), 타원 (속성), 이중타원 (다중값 속성))
- 개체 (Entity): □ (사각형) 시스템 내에서 독립적으로 존재하는 객체.
- 관계 (Relationship): ◇ (마름모) 개체들 간의 연관성을 나타내는 것.
- 속성 (Attribute): ○ (타원) 개체의 특성이나 정보를 담고 있는 것.
- 다중값 속성 (Multivalued Attribute): ◎ (이중 타원) 하나의 개체가 여러 값을 가질 수 있는 속성.
- 개체 타입과 속성을 연결 (Association): ㅡ (선)
- 개체-관계 다이어그램(ERD) 기호 - 개관속속(네모 (개체), 마름모 (관계), 타원 (속성), 이중타원 (다중값 속성))
- 논리적 데이터 모델링 (Logical Data Modeling): 업무를 모델링 표기법으로 변환하여 이해하기 쉽게 정리. 정규화 작업 포함.
- 물리적 데이터 모델링 (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): 데이터 중복과 문제점 피하려고, 데이터 쪼개서 깔끔하게 만드는 작업. 중복 없애고 일관성 유지!
- 정규형(1NF): 데이터 원자화 — 쪼개서 한 칸에 하나만.
- 정규형(2NF): 부분 종속 없애기 — 테이블의 모든 속성이 기본키에 종속되도록.
- 정규형(3NF): 이행 종속 제거 — 비키 속성끼리 종속 관계 없애기.
- 보이스-코드 정규형(BCNF): 후보키 아닌 속성의 종속 제거.
- 정규형(4NF): 다치 종속 제거 — 다중 값 속성의 종속 없애기.
- 정규형(5NF): 조인 종속 제거 — 분해해도 정보 손실 없이 조인 가능하게 하기.
- 반정규화(De-Normalization): 성능 올리고 개발 좀 더 간단하게 하려는 작업. 정규화된 데이터에 중복 추가하거나 통합해서 더 쉽게 사용할 수 있게 만듦.
- 이상 현상(Anomaly): 정규화 부족해서 데이터 중복 생기면 조작할 때 문제 발생. 예를 들어, 정보 삽입, 삭제, 갱신할 때 이상한 일이 생김.
- 삽입 이상: 새 정보 넣을 때 불필요한 정보도 입력해야 하는 상황.
- 삭제 이상: 정보 지울 때 원치 않는 정보도 같이 삭제됨.
- 갱신 이상: 중복 데이터 일부만 수정해서 다른 곳과 충돌 생기는 문제.
➡️ 데이터베이스(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: 데이터베이스 시스템 간 직접 연결을 통해 데이터를 연계하는 방법. 시스템 간 통합을 위한 직접적 접근.
인터페이스 구현 검증 도구 (중요)
- xUnit: 자바, C++, .NET 등 다양한 언어를 지원하는 단위 테스트 프레임워크. (예: JUnit, CppUnit, NUnit)
- STAF (Software Testing Automation Framework): 서비스 호출, 컴포넌트 재사용 등 다양한 환경을 지원하는 테스트 프레임워크.
- FitNesse: 웹 기반 테스트 케이스 설계, 실행, 결과 확인 등을 지원하는 프레임워크.
- NTAF (NHN Test Automation Framework): FitNesse와 STAF를 결합한 NHN(Naver)의 테스트 자동화 프레임워크.
- Selenium: 다양한 브라우저와 개발 언어를 지원하며, 테스트 스크립트 언어 학습이 필요 없는 프레임워크.
- Watir: 루비 기반의 웹 애플리케이션 테스트 프레임워크.
인터페이스 감시 도구
- 스카우터 (Scouter): 애플리케이션 모니터링 및 DB Agent를 통해 오픈 소스 DB 모니터링 기능 제공.
- 제니퍼 (Jennifer): 애플리케이션의 개발부터 안정화까지 전 생애 주기 동안 성능 모니터링 및 분석 기능 제공.
➡️ 트랜잭션
트랜잭션 특성 - ACID
- 원자성 (Atomicity): 트랜잭션은 하나의 단위로, 전부 성공하거나 전부 실패해야 함.
- 일관성 (Consistency): 트랜잭션 실행 후 데이터베이스는 항상 일관된 상태를 유지함.
- 격리성 (Isolation): 트랜잭션의 중간 결과는 다른 트랜잭션이 볼 수 없음.
- Read Uncommitted: 다른 트랜잭션이 연산 중인 데이터를 읽을 수 있음. 가장 낮은 격리 수준, 더 많은 동시성 허용.
- Read Committed: 다른 트랜잭션의 연산이 완료된 후에만 데이터를 읽을 수 있음. 일관성 있는 읽기 보장.
- Repeatable Read: 트랜잭션이 종료될 때까지 해당 데이터에 대한 갱신/삭제 제한. 트랜잭션 내에서 읽은 데이터는 일관되게 유지됨.
- Serializable Read: 데이터 영역 전체에 대한 접근 제어, 순차적으로 읽기. 가장 높은 격리 수준, 완벽한 일관성 보장.
- 영속성 (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): 응답 시간 및 저장 공간 활용 최적화.
반응형