1. 문제 상황

- 결과 내용이 반복적으로 나옴

2. 원인

- 객체 간 순환 참조(circular reference)가 원인일 수 있음

- Product 객체가 Store 객체를 참조하고, Store 객체도 다시 Product 객체를 참조

3. 해결 방법

1) DTO 사용하기: 엔티티를 직접 반환하는 대신 Data Transfer Object (DTO)를 사용하여 API 응답을 구성

- DTO 클래스 정의

package com.zerobase.ecproject.dto;

import lombok.Data;

@Data
public class ProductDTO {
  private Long id;
  private String name;
  private String description;
  private Integer price;
  private String category;
  private Integer stockQuantity;
  private Long storeId;
}

- 엔티티를 DTO로 변환하는 메서드 구현 (ProductService)

  public ProductDTO convertToDTO(Product product) {
    ProductDTO dto = new ProductDTO();
    dto.setId(product.getId());
    dto.setName(product.getName());
    dto.setDescription(product.getDescription());
    dto.setPrice(product.getPrice());
    dto.setCategory(product.getCategory());
    dto.setStockQuantity(product.getStockQuantity());
    dto.setStoreId(product.getStore() != null ? product.getStore().getId() : null);
    return dto;
  }

- ProductController 수정, ProductDTO 객체를 Product 엔티티 객체로 변환, Product 엔티티를 ProductDTO 객체로 변환

@PostMapping("/{storeId}")
  public ResponseEntity<ProductDTO> createProduct(@RequestBody ProductDTO productDTO,
      @PathVariable Long storeId) {
    Product product = convertToEntity(productDTO);
    Product createdProduct = productService.createProduct(product, storeId);
    return ResponseEntity.ok(convertToDTO(createdProduct));
  }

  private Product convertToEntity(ProductDTO dto) {
    Product product = new Product();
    product.setName(dto.getName());
    product.setDescription(dto.getDescription());
    product.setPrice(dto.getPrice());
    product.setStockQuantity(dto.getStockQuantity());
    return product;
  }

  private ProductDTO convertToDTO(Product product) {
    ProductDTO dto = new ProductDTO();
    dto.setId(product.getId());
    dto.setName(product.getName());
    dto.setDescription(product.getDescription());
    dto.setPrice(product.getPrice());
    dto.setCategory(product.getCategory());
    dto.setStockQuantity(product.getStockQuantity());
    dto.setStoreId(product.getStore() != null ? product.getStore().getId() : null);
    return dto;
  }

- 문제 해결


2) Jackson 라이브러리 설정

- @JsonManagedReference와 @JsonBackReference 애노테이션을 사용하여 순환 참조를 관리

- @JsonIgnore를 사용하여 직렬화에서 특정 필드를 제외

3) Lombok의 @ToString.Exclude 사용

- @ToString 메서드에서 순환 참조가 발생하는 필드를 제외

- toString() 메서드 호출 시 순환 참조로 인한 문제를 방지

1. 암호화 알고리즘

1) 암호 알고리즘(Cryptographic Algorithm)

- 평문(Plaintext)를 암호문(Ciphertext)으로 바꾸고, 암호문을 다시 평문으로 바꿀 떄 사용되는 알고리즘

- 암호화 및 복호화 과정에 암호키(Cryptographic key) 필요

2) 공개키(Public Key, 비대칭키) 암호화 기법

- 암호키와 해독키가 서로 다른 기법으로 키 개수는 2N개가 필요

- 비대칭 암호화 기법 또는 공개키(공중키) 암호화 기법이라고도 함

- 키 분배가 비밀키 암호화 기법보다 쉽고, 암호화/복호화 속도가 느리며 알고리즘이 복잡

- RSA(Rivest Shamir Adleman): 소인수분해의 어려움에 기초를 둔 알고리즘, 전자문서에 대한 인증 및 부인 방지에 활용

- ElGama: 이산대수 문제의 어려움에 기초를 둔 알고리즘, 동일한 메시지라도 암호화가 이루어질 때마다 암호문이 변경되고 암호문의 길이가 2배로 늘어남

3) 비밀키(Private Key, 대칭키) 암호화 기법

- 동일한 키로 암호화하고 복호화는 기법으로 키 개수는 N(N-1)/2개 필요

- 대칭키 암호화 기법 또는 개인키 암호화 기법이라고도 함

- 암호화/복호화 속도가 빠르고 알고리즘이 단순

- 키 분배가 공개키 암호화 기법보다 어려움

- 스트림 방식: 평문의 길이와 동일한 스트림(Stream)을 생성하여 비트 단위로 암호화하는 대칭키 암호화 방식, 암호화 시 XOR 연산 수행

- 블록 방식: 평문을 블록 단위로 암호화하는 대칭키 암호화 방식, DES, AES, ARIA, SEED, IDEA 등

4) 해시(HASH) 암호화 방식

- 임의 길이의 메시지를 입력으로 하여 고정된 길이의 출력값으로 변환하는 기법, 해시 함수라고도 함

- 주어진 원문에서 고정된 길이의 의사난수를 생성하며, 생성된 값을 해시값이라고 함

- 디지털 서명에 이용되어 데이터 무결성을 제공

- 블록체인에서 체인 형태로 사용되어 데이터의 신뢰성 보장

5) SHA(Secure Hash Algorithm)

- 1993년에 미국 NIST에 의해 개발되었고 가장 많이 사용되고 있는 방식

- SHA-1은 DSA에서 사용하게 되어 있으며 많은 인터넷 응용에서 Default 해시 알고리즘으로 사용

6) Salt

- 시스템에서 저장되는 패스워드들은 Hash 또는 암호화 알고리즘의 결과값으로 저장됨, 이때 암호 공격을 막기 위해 똑같은 패스워드들이 다른 암호값으로 저장되도록 추가되는 값

 

2. 서버 인증 및 서버 접근 통제

1) 사용자 인증 기법

- 지식 기반 인증, 소유 기반 인증, 생체 기반 인증

2) 접근 통제(Access Control)

- 시스템의 자원 이용에 대한 불법적인 접근 방지, 크래커(Cracker)의 침입으로부터 보호

- 종류: 강제적 접근 통제, 임의적 접근 통제, 역할 기반 접근 통제

- 접근 통제 요소: 식별, 인증, 인가

- 통제 모델: 벨라파듈라 모델(BLP), SSO(Single Sign-On), Biba Integrity Model, CWM

3) 강제적 접근 통제(MAC, Mandatory Access Control)

- 중앙에서 정보를 수집하고 분류하여 보안 레벨을 결정하고 정책적으로 접근 제어를 수행하는 방식, 다단계 보안 모델이라고도 함

- 어떤 주체가 특정 개체에 접근하려 할 때 양쪽의 보안 레이블에 기초하여 높은 보안 수준을 요구하는 정보(객체)가 낮은 보안 수준으 ㅣ주체에게 노출되지 않도록 하는 접근 제어 방법

4) 임의적 접근 통제(DAC, Discretionary Access Control)

- 정보의 소유자가 보안 레벨을 결정하고 이에 대한 정보의 접근 제어를 설정하는 방식

- 주체 또는 소속 그룹의 아이디(ID)에 근거하여 객체에 대한 접근 제한을 설정

5) 역할 기반 접근 통제(RBAC, Role Based Access Control)

- 사람이 아닌 직책에 대한 권한을 부여함으로써 효율적인 권환 관리 가능

- 접근 권한은 직무에 허용된 연산을 기준으로 허용함으로 조직의 기능 변화에 따른 관리적 업무의 효율성을 높일 수 있음

 

3. 서비스 공격 유형

1) DoS(Denial of Service, 서비스 거부)

- 시스템의 자원을 부족하게 하여 원래 의도된 용도로 사용하지 못하게 하는 공격 방법

- 정보보호의 3대 목표 중 가용성(Availability)을 위협하는 행위로서 공격자가 임의로 자신의 IP 주소를 속여서 다량으로 서버에 보냄

- 스머프(Smurf): 공격 대상의 IP 주소를 근원지로 대량의 ICMP 응답 패킷을 전송하여, 서비스 거부를 유발시키는 공격 방법

- Ping Flooding: 네트워크의 정상 작동 여부를 확인하기 위해 사용하는 Ping 테스트를 공격자가 공격 대상 컴퓨터를 확인하기 위한 방법으로 사용하는 공격 방법, 특정 사이트에 매우 많은 ICMP Echo를 보내면 이에 대한 응답을 하기 위해 시스템 자원을 모두 사용해버려 시스템이 정상적으로 동작하지 못함

- Ping of Death: 비정상적인 ICMP 패킷을 전송하여 시스템 성능을 저하시키는 공격 방법

- 랜드(Land, Local Area Network Denial) Attack: 공격자가 패킷의 출발지 IP 주소나 포트(Port)를 임의로 변경하여 출발지와 목적지 주소(또는 포트)를 동일하게 함으로써 공격 대상 컴퓨터의 실행 속도가 느려지거나 동작이 마비되어 서비스 거부 상태에 빠지도록 하는 공격 방법

2) DDos(Distributed Denial of Service, 분산 서비스 거부)

- 여러 대의 공격자를 분산 배치하여 동시에 서비스 거부 공격함으로써 공격 대상이 되는 시스템이 정상적인 서비스를 할 수 없도록 방해하는 공격 방법

- 공격용 도구: Trinoo, TFN, TFN2K, Stacheldraht 등

3) 피싱(Phishing)

- 소셜 네트워크에서 진짜 웹 사이트와 거의 동일하게 꾸며진 가짜 웹사이트를 통해 개인정보를 탈취하는 수법

4) 이블 트윈 공격(evil twin Attack)

- 피싱 사기의 무선 버전, 공격자는 합법적인 제공자처럼 행세하며 노트북이나 휴대 전화로 핫스팟에 연결한 무선 사용자들의 정보 탈취

5) 파밍(Pharming)

- 도메인을 탈취하거나 악성코드를 통해 DNS의 이름을 속여 사용자가 진짜 웹 사이트로 오인하게 만들어 개인정보를 탈취하는 수법

5) 랜섬웨어(Ransomware)

- 개인과 기업, 국가적으로 큰 위협이 되고 있는 주요 사이버 범죄 중 하나로 Snake, Darkside 등 시스템을 잠그거나 데이터를 암호화해 사용할 수 없도록 하고 이를 인질로 금전을 요구하는데 사용되는 악성 프로그램

6) 키 로거(Key Logger)

- 컴퓨터 사용자의 키보드 움직임을 탐지해 ID, 패스워드 등 개인의 중요한 정보를 몰래 빼가는 공격 방법

7) 백도어(Back Door)

- 프로그램이나 손상된 시스템에 허가되지 않는 접근을 할 수 있도록 정상적인 보안 절차를 우회하는 악성 소프트웨어, 트랩도어라고도 함

- 공격 도구: NetBus, Back Orifice, RootKit 등

- 탐지 방법: 무결성 검사, 열린 포트 확인, 로그 분석, SetUID 파일 검사 등

- tripwire: 크래커가 침입하여 백도어를 만들어 놓거나 설정 파일을 변경했을 때 분석하는 도구

8) TCP 세션 하이재킹

- 서버와 클라이언트 통신 시에 TCP의 3-Way Handshake 단계에서 발생하는 취약점을 이용한 공격 기법으로 서버와 클라이언트가 TCP를 이용하여 통신하고 있을 때 RST 패킷을 전송하여 일시적으로 TCP 세션을 끊고 시퀀스 번호를 새로 생성하여 세션을 탈취하고 인증을 회피하는 공격 기법

 

4. 악성 코드

1) 악성 코드 유형

- 웜(Worm): 네트워크를 통해 연속적으로 자신을 복제하여 시스템의 부하를 높여 결국 시스템을 다운시키는 바이러스의 일종

- Rogue Ware: 백신 소프트웨어를 사칭해서 이득을 얻는 악성 소프트웨어

- 반사 공격(Reflection attack): 전 세계 어느 곳으로 UDP 서비스를 이용하여 대규모 트래픽을 보낼 수 있게 됨

2) Honeypot

- 비정상적인 접근의 탐지를 위해 의도적으로 설치해둔 시스템

- 침입자를 속여 실제 공격당하는 것처럼 보여줌으로써 크래커를 추적 및 공격 기법의 정보를 수집하는 역할

- 쉽게 공격자에게 노출되어야 하며 쉽게 공격이 가능한 것처럼 취약해 보여야 함

3) 블루투스 관련 공격

- 블루버그, 블루스나프(블루스나핑), 블루재킹

 

5. 인증

1) DPI(Deep Packet Inspection)

- OSI 7계층까지 전 계층의 프로토콜과 패킷 내부의 콘텐츠를 파악하여 침입 시도, 해킹 등을 탐지하고 트래픽을 조정하기 위한 패킷 분석 기술

2) AAA(Authentication Authorization Accounting, 인증 권한 검증 계정 관리)

- 시스템의 사용자가 로그인하여 명령을 내리는 과정에 대한 시스템 동작을 인증, 권한 부여, 계정 관리로 구분

3) HSM(Hardware Security Module)

- 암호화 키를 생성하고 저장하는 역할을 하는 전용 하드웨어 장치

4) TCP Wrapper

- 어떤 외부 컴퓨터가 접속되면 접속 인가 여부를 점검해서 인가된 경우에는 접속이 허용되고, 그 반대의 경우에는 거부할 수 있는 접근 제어 유틸리티

5) SDN(Software Defined Networking)

- 네트워크를 제어부, 데이터 전달부로 분리하여 네트워크 관리자가 보다 효율적으로 네트워크를 제어, 관리할 수 있는 기술

1. 네트워크 구성

1) 성형(Star Topology)

- 중앙에 호스트 컴퓨터가 있고 이를 중심으로 터미널들이 연결되는 중앙집중식의 구성 형태

- 응답 빠르고 통신 비용 적으나 중앙 컴퓨터에 장애 발생하면 전체 시스템이 마비됨

2) 링형(Ring Topology)

- 서로 이웃한 컴퓨터와 노드끼리 연결한 네트워크 구성 형태

- 각 노드가 공평한 서비스를 받으며 전송 매체와 노드의 고장 발견이 쉬움

- 데이터가 한 방향으로 전송되기 때문에 충돌 위험이 없음

3) 버스형(Bus Topology)

- 한 개의 통신 회선에 여러 개의 노드가 연결된 형태

- 한 사이트의 고장은 나머지 사이트 간의 통신에 아무런 영향을 주지 않음

- 네트워크 트래픽이 많을 경우 네트워크 효율이 떨어짐

4) 트리형(Tree Topology)

- 하나의 노드에 여러 개의 노드를 연결한 네트워크 구성 현태로 네트워크 관리가 용이

- 각 노드가 계층적으로 구성되어 있어 계층형 또는 분산형이라고도 함

5) 망형(Mesh Topology)

- 모든 컴퓨터와 노드들이 서로 연결된 네트워크 구성 형태로 그물형이라고도 함

- 응답 시간이 빠르고 노드의 연결성이 우수함

- 일반적으로 많은 단말기로부터 많은 양의 통신을 필요로 하는 경우에 유리

- n개의 노드를 망형으로 구성 시 n(n-1)/2개의 회선이 필요

 

2. 네트워크 장비

1) 허브(Hub)

- 여러 대의 컴퓨터를 손쉽게 연결할 수 있도록 여러개의 입력과 출력 포트를 가지고 있으며, 한 포트에서 수신된 신호를 다른 모든 포트로 재전송하는 장치

2) 브리지(Bridge)

- 데이터 링크 계층에서 동작하며 같은 MAC 프로토콜을 사용하는 근거리 통신망 사이를 연결하는 통신 장치

3) 스위치(Switch)

- 브리지와 같이 두 개 이상의 LAN을 연결하여 하나의 네트워크로 만드는 장치

- 보안 및 트래픽 관리 기능도 제공할 수 있음

4) 라우터(Router)

- 네트워크 계층에서 동작하며 동일 전송 프로토콜을 사용하는 분리된 2개 이상의 네트워크를 연결해주는 통신 장치

- 네트워크상에서 가장 최적의 IP 경로를 설정하여 전송하는 장비

5) 게이트웨이(Gateway)

- 서로 다른 통신 프로토콜을 사용하는 네트워크 사이를 연결하여 데이터를 교환할 수 있도록 하는 역할

- 두 개의 서로 다른 형태의 네트워크를 상호 연결시켜주는 관문 역할을 하는 장치

- 필요한 경우 프로토콜 변환을 수행

6) VLAN(Virtual Local Area Network)

- 물리적 배치와 상관없이 논리적으로 LAN을 구성하여 Broadcast Domain을 구분할 수 있게 해주는 기술로 접속된 장비들의 성능 향상 및 보안성 증대 효과를 목표로 함

 

3. 네트워크 관련 신기술
1) RIP(Routing Information Protocol)

- 최단 경로 탐색에 Bellman-Ford 알고리즘을 사용하는 거리 벡터 라우팅 프로토콜

- 최적의 경로를 산출하기 위한 정보로서 홉(거릿값)만을 고려하므로, RIP를 선택한 경로가 최적의 경로가 아닌 경우가 많이 발생할 수 있음

- 최대 홉 카운트를 15홉 이하로 한정

- 소규모 네트워크 환경에 적합

2) OSPF(Open Shortest Path First Protocol)

- 대표적인 링크 상태(Link State) 라우팅 프로토콜로 IP 패킷에서 89번 프로토콜을 사용하여 라우팅 정보를 전송하며 안정되고 다양한 기능오로 가장 많이 사용되는 것은 IGP(Interior Gateway Protocol)

3) MQTT(Message Queuing Telemetry Transport)

- IBM이 주도하여 개발한 기술로 사물 인터넷과 같이 대역폭이 제한된 통신 환경에 최적화하여 개발된 푸시 기술 기반의 경량 메시지 전송 프로토콜

- TCP/IP 기반 네트워크에서 동작하는 발행-구독 기반의 메시징 프로토콜로 최근 IoT 환경에서 자주 사용되고 있는 프로토콜

4) 사물 인터넷(IoT, Internet of Things)

- 인터넷에 연결된 기기가 사람의 개입 없이 상호 간에 알아서 정보를 주고받아 처리

- 사물은 물론이고 현실과 가상세계의 모든 정보와 상호작용하는 개념

5) 클라우드 컴퓨팅(Cloud Computing)

- 사용자가 인터넷 등을 통해 하드웨어, 소프트웨어 등의 컴퓨팅 자원을 원격으로 필요한 만큼 빌려서 사용하는 방식의 서비스 기술로서 서비스 모델은 IaaS, PaaS, SaaS로 구분

- 가상화 기술, 서비스 프로비저닝(Provisioning) 기술 , 과금 체계 등을 필요로 함

- PaaS-TA: 국내 IT 서비스 경쟁력 강화를 목표로 개발, 인프라 제어 및 관리 환경, 실행 환경, 개발 환경, 서비스 환경, 운영환경으로 구성되어 있는 개방형 크라우드 컴퓨팅 플랫폼

6) 그리드 컴퓨팅(Grid Computing)

- 인터넷상에서 사용하지 않는 시간대의 연결된 수많은 컴퓨터를 하나의 고성능 컴퓨터처럼 활용할 수 있는 기술

7) RFID(Radio Frequency IDentificaiton)

- 전자 태그가 부착된 IC칩과 무선 통신 기술을 이용하여 다양한 개체들의 정보를 관리할 수 있는 센서 기술

8) NFC(Near Field Communication)

- RFID 기술 중 하나로, 10cm 정도로 가까운 거리에서 장치 간에 양방향 무선 통신을 가능하게 해주는 기술

- 13.56MHz의 주파수 대역을 사용하는 비접촉식 통신 기술

- 데이터 읽기와 쓰기 기능을 모두 사용 가능

9) WPAN(Wireless Personal Area Network)

- 사용자를 중심으로 작은 지역에서 주로 블루투스 헤드셋, 스마트 워치 등과 같은 개인화 장치들을 연결시키는 무선 통신 규격

10) PICONET(피코넷)

- 여러 개의 독립된 통신 장치가 UWB(Ultra Wideband) 기술 또는 블루투스 기술을 사용하여 통신망을 형성하는 무선 네트워크 기술

11) 스마트 그리드(Smart Grid)

- 전기 및 정보통신 기술을 활용하여 전력망을 지능화, 고도화함으로써 고품질의 전력 서비스를 제공하고 에너지 이용 효율을 극대화하는 전력망 시스템

- 기존의 전력망에 정보 기술을 접목하여 전력 공급자와 소비자가 쌍방향으로 실시간 정보를 교환함으로써 에너지 효율을 최적화하고 새로운 부가가치를 창출

12) 비컨(Beacon)

- 블루투스 4.0(BLE) 프로토콜 기반의 근거리 무선 통신 장치로 최대 70m 이내의 장치들과 교신할 수 있는 차세ㅐㄷ 스마트폰 근거리 통신 기술

- 저전력으로 모바일 결제 등을 가능하게 함, NFC보다 가용거리가 길고 정확성이 높음

13) 포스퀘어(Foursquare)

- 스마트폰에 탑재된 GPS를 활용해 위치 정보 수집

- 쇼핑 관광 등에 활용되는 위치 기반 소셜 네트워크 서비스

14) Zing

- 기기를 키오스크에 갖다 대면 원하는 데이터를 바로 가져올 수 있는 기술로 10cm 이내 근접 거리에서 기가급 속도로 데이터 전송이 가능한 초고속 근접 무선 통신(NFC) 기술

15) Mesh Network

- 기존 무선 랜의 한계 극복을 위해 등장

- 대규모 디바이스의 네트워크 생성에 최적화되어 차세대 이동통신, 홈네트워킹, 공공 안전 등의 특수 목적을 위한 새로운 방식의 네트워크 기술

16) Wavelength Division Multiplexing(WDM, 파장 분할 다중화)

- 레이저 빛의 다른 파장(다른 색)을 사용하여 여러 반송파 신호를 단일 광섬유에 적용하는 기술

- 파장이 서로 다른 복수의 광신호를 동시에 이용하는 것으로 광섬유를 다중화하는 방식

 

 

1. 소프트웨어 개발 방법론

1) 객체지향 방법론(Object-oriented Engineering Methodology)

- 요구분석, 설계, 구현, 테스트 및 검증 단계로 구성

- 구성 요소: 객체(Object), 클래스(Class), 메시지(Message)

- 기본 원칙: 캡슐화, 정보 은닉, 추상화, 상속, 다형성

- 시스템 분석을 위해 Usecase Diagram이 주로 사용됨

- 시스템 설계를 위해 Sequence Diagram이 주로 사용됨

2) 컴포넌트 기반 개발 방법론(CBD, Component Based Developmnet)

- 재사용이 가능한 컴포넌트의 개발 또는 상용 컴포넌트들을 조합하여 애플리케이션 개발 생산성과 품질을 높이고, 시스템 유지보수 비용을 최소화할 수 있는 개발 방법 프로세스

- 컴포넌트 단위의 개발 및 조립을 통하여 정보 시스템의 신속한 구축 ,변경, 확장의 용이성과 타 시스템과의 호환성을 달성하고자 하는 소프트웨어 공학 프로세스, 방법론 및 기술의 총체적 개념

3) CBD 방법론의 특징

- 개발 준비, 분석, 설계, 구현, 테스트, 전개, 인도 순으로 반복 점진적 개발 프로세스를 제공하고, 시스템 설계를 위해 컴포넌트 설계서가 주로 사용됨

- 컴포넌트는 데이터베이스와 소프트웨어의 모듈 단위로 재사용이 가능함

- 시스템 분석을 위해 Usecase Diagram이 주로 사용됨

- 개발 기간 단축으로 인한 생산성이 향상되며 새로운 기능 추가가 쉬워 확장석이 높음

4) 소프트웨어 재사용

- 합성 중심(Composition based): 전자칩과 같은 소프트웨어 부품, 즉 블록(모듈)을 만들어서 끼워 맞춰 소프트웨어를 완성시키는 방법으로, 블록 구성 방법이라고도 함

- 생성 중심(Generation based): 추상화 형태로 쓰여진 명세를 구체화하여 프로그램을 만드는 방법으로, 패턴 구성 방법이라고도 함

 

2. 소프트웨어 개발 방법론 활용

1) 소프트에어 개발 생명주기(SDLC, Software Development Life Cycle)

- 소프트웨어 시스템의 개발, 가동, 운용, 유지보수, 파기의 전 공정을 체계화한 개념

- 프로젝트의 비용 산정과 개발 계획을 수립할 수 있는 기본 골격이 됨

- 용어를 표준화시키고 문서화가 충실한 프로젝트 관리를 가능하게 함

- SDLC Model: 구축 및 수정 모형, 폭포수 모형, 프로토타입 모형, 나선형 모형, 애자일 모형 등

2) 프로토타입 모형(Prototyping Model)

- 실제 개발될 소프트웨어에 대한 시제품(Prototype)을 만들어 최종 결과물을 예측하는 모형

- 단계: 요구 수집, 빠른 설계, 프로토타입 구축, 고객 평가, 프로토타입 조정, 구현

- 개발 단계 안에서 유지보수가 이루어지는 것으로 볼 수 있음

3) 폭포수 모형(Waterfall Model)

- 보헴(Bohem)이 제안한 고전적 생명주기 모형으로, 선형 순차적 모형이라고도 함

- 단계: 타당성 검토, 계획, 요구사항 분석, 구현, 유지보수

- 순차적인 접근 방법을 이용하여, 단계적 정의와 산출물이 명확함

- 각 단계의 결과가 확인되어야지만 다음 단계로 넘어감

- 개발 중 발생한 요구사항은 반영하기 어려움

4) 나선형 모형(Spiral Model)

- 보헴이 제시하였으며 반복적인 작업을 수행하는 모형으로 점증적 모형, 집중적 모형이라고도 함

- 여러 번의 개발 과정을 거쳐 완벽한 최종 소프트웨어를 개발하는 점진적 모형

- 가장 큰 장점인 위험 분석 단계에서 기술과 관리의 위험 요소들을 하나씩 제거해 나감으로써 위험성 평가에 크게 의존하지 않기 때문에 이를 발견하지 않으면 문제가 발생할 수 있음

- 대규모 시스템의 소프트웨어 개발에 적합

5) 나선형 모형의 개발 단계

- 계획 수립(Planning): 위험 요소와 타당성을 분석하여 프로젝트의 추진 여부 결정

- 위험 분석(Risk Analysis): 개발 목적과 기능 선택, 제약 조건 등을 결정하고 분석

- 개발 및 검증(Development): 선택된 기능을 수행하는 프로토타입을 개발

- 고객 평가(Evaluation): 개발된 프ㅗ토타입을 사용자가 확인하고 추가 및 수정될 요구사항이 있으면 이를 반영한 개선 프로토타입을 만듦

6) CPM(Critical Path Method)

- 프로젝트 완성에 필요한 작업을 나열하고 작업에 필요한 소요 기간을 예측하는 기법

7) PERT(Program Evaluation and Review Technique)

- 소요 시간 예측이 어려운 경우 최단 시간 내에 완성할 수 있게 하는 프로젝트 방법

- 계획 공정(Network)을 작성하여 분석하므로 간트도표에 비해 작업 계획을 수립하기 쉬움

- 계획 공정의 문제점을 명확히 종합적으로 파악할 수 있음

- 관계자 전원이 참가하게 되므로 의사소통이나 정보 교환 용이

 

3. 비용 산정 모델

1) 전문가 감정 기법

- 개발 조직 내에 경험이 많은 2인 이상의 전문가에게 비용 산정을 의뢰하는 기법

2) 델파이(Delphi) 기법

- 산정 요원과 조정자에 의해 산정하는 기법

- 전문가가 독자적으로 감정할 때 발생할 수 있는 편차를 줄이기 위해 단계별로 전문가들의 견해를 조정자가 조정하여 최종 견적을 결정

- 유사한 프로젝트 경험을 가진 전문가 집단을 구성하여 규모, 공수, 비용의 산정 의견을 구함

3) LOC(Line Of Code) 기법

- 소프트웨어 각 기능 구현 시 작성될 원시 코드 라인수의 비관치, 낙관치, 기대치를 츶겅하여 예측치를 구하고 이를 이용하여 비용을 산정하는 기법

- 예측치 = a + (4 x c) + b / 6 (단, a는 낙관치, b는 비관치, c는 기대치)

4) COCOMO(COnstructive COst MOdel) 모델

- 보헴이 제안한 소스 코드의 규모에 의한 비용 예측 모델

- 같은 규모의 소프트웨어라도 그 유형에 따라 비용이 다르게 산정됨

- 산정 결과는 프로젝트를 완성하는데 필요한 MM(Man-Month)으로 나타냄

- 소프트웨어 개발 유형: Organic Mode(단순형), Semi-detached Mode(중간형), Embedded Mode(임베디드형)

5) Putnam 모델

- Rayleigh-Norden 곡선의 노력 분포도를 이용한 프로제긑 비용 산정 기법

- 소프트웨어 개발 생명주기의 전 과정 동안에 사용될 노력의 분포를 예측

- SLIM: Rayleigh-Norden 곡선과 Putnam의 모델에 기반을 둔 자동화 추정 도구

6) 기능 점수(FP: Functional Point)
- 시스템을 구현한 기술에 의존적이고 개발자에 의해 식별되는 기능에 기반하여 시스템의 크기를 측정하는 척도

- 입력, 출력, 질의, 파일, 인터페이스의 개수로 소프트웨어의 규모를 표현

- 기능 점수 비용산정 요소: 코드 라인 수, 데이터 파일 수, 문서 페이지 수, 입력 유형의 수, 출력 보고서의 수, 외부 루틴과의 인터페이스 수, 명령어(사용자 질의 수)

 

4. 소프트웨어 개발 표준

1) ISO/IEC 25000

- 9126과 14598을 통합, 2500n~2504n의 다섯 가지 분야, 확장 분야인 2505n

- 2501n(품질 모형): 품질 모델 및 품질 사용

- 2503n(품질 측정): 매트릭을 통한 측정 방법 제시

2) ISO/IEC 12207

- 소프트웨어 개발 작업에 일관적이고 체계적인 프레임워크를 제공하기 위하여 1995년에 제정된 소프트웨어 생명주기 프로세스 국제 표준

- 기본 생명주기 프로세스 구분: 획득 프로세스, 공급 프로세스, 개발 프로세스, 운영 프로세스, 유지보수

3) SPICE(Software Process Improvement and Capability dEtermination)

- 소프트웨어 품질 및 생산성 향상을 위해 소프트웨어 프로세스를 평가 및 개선하는 국제 표준

- 공식 명칭은 ISO/IEC 15504

- 모델 범주: 고객-공급자 프로세스, 공학 프로세스, 지원 프로세스, 관리 프로세스, 조직 프로세스

- 레벨: 불완전 단계, 수행 단계, 관리 단계, 확립 단계, 예측 단계, 최적 단계

 

5. 테일러링과 프레임워크

1) 테일러링(Tailoring)

- 기존 개발 방법론의 절차, 기법, 산출물 등을 프로젝트 상황에 맞게 수정하는 작업

- 수행 절차: 프로젝트 특징 정의, 표준 프로세스 선정/검증, 상위 레벨 커스터마이징, 세부 커스터마이징, 테일러링 문서화

2) 라이브러리(Library)

- 단순 활용 가능한 도구들의 집합

- 프로그래머가 어떠한 기능을 수행하기 위해서 도움을 주는 또는 필요한 것을 제공해주는 역할

3) 프레임워크(Framework)

- 비슷한 유형의 응용 프로그램들을 위해 재사용이 가능한 아키텍처와 협력하는 소프트웨어 산출물의 통합된 집합

- 특정 클래스의 재사용뿐만 아니라 응용 프로그램을 위한 핵심 아키텍처를 제공하여 설계의 재사용을 지원

4) 프레임워크와 라이브러리의 차이점

- 프레임워크: 전체적인 흐름을 자체적으로 가지고 있어 프로그래머는 그 안에서 필요한 코드를 작성

- 라이브러리: 프로그래머가 전체적인 흐름을 가지고 있어 라이브러리를 자신이 원하는 기능을 구현하고 싶을 때 가져다 사용할 수 있음

5) 소프트웨어 개발 프레임워크

- 소프트웨어 개발을 도와주는 재사용이 가능한 클래스와 패턴의 집합

- 소프트웨어의 틀과 구조를 결정하고, 이를 바탕으로 개발된 개발자의 코드를 제어

6) 소프트웨어 개발 프레임워크 적용 시

- 개발 용이성: 공통 기능은 프레임워크가 제공, 패턴 기반 개발과 비즈니스 로직에만 집중한 개발이 가능

- 시스템 복잡도 감소: 시스템의 복잡한 기술은 프레임워크에 의해 숨겨짐, 미리 잘 정의된 기술 셋을 적용할 수 있음

- 이식성: 플랫폼 연동을 프레임워크가 제공, 플랫폼의 독립적인 개발이 가능

- 품질 보증: 검증된 개발 기술과 패턴에 따른 개발 가능, 개발자의 경험과 능력 차이 줄여줌

- 운영 용이성: 소프트웨어 변경 용이, 비즈니스 로직 및 아키텍처 파악 용이

- 개발 코드 최소화: 공통 컴포넌트와 서비스 활용, 반복적인 코드 개발 최소화

- 변경 용이성: 잘 구조화된 아키텍처 적용, 플랫폼에 독립적

- 설계 및 코드의 재사용성: 프레임워크의 서비스와 패턴을 재사용, 이미 개발된 컴포넌트 재사용

 

'오공완' 카테고리의 다른 글

정처기 5과목: 보안  (0) 2024.03.03
정처기 5과목: 네트워크  (0) 2024.03.02
정처기 4과목: 운영체제  (0) 2024.02.22
정처기 4과목: 프로그래밍 언어 활용  (0) 2024.02.22
정처기 3과목: 데이터베이스  (0) 2024.02.22

1. 운영체제(OS, Operating System)

1) 개념

- 컴퓨터 사용자와 컴퓨터 하드웨어 간의 인터페이스로서 동작하는 시스템 소프트웨어

- 컴퓨터를 편리하게 사용하고 하드웨어를 효율적으로 사용할 수 있도록 함

- 스스로 어떤 유용한 기능도 수행하지 않고 다른 응용 프로그램이 유용한 작업을 할 수 있도록 환경을 마련해줌

2) 기능

- 사용자와 시스템 간의 편리한 인터페이스 제공

- 자원의 효과적인 경영을 위해 스케줄링 기능 제공, 자원 보호 기능 제공

- 오류로부터 시스템 보호, 사용자들 간에 데이터 공유

3) 목적

- 처리 능력 향상, 응답 시간 단축, 신뢰도 향상, 사용 가능도 향상

4) 운영 방식

- 일괄 처리 시스템(Batch Processing System): 일정량 또는 일정 기간 동안 데이터를 한꺼번에 모아서 처리

- 다중 프로그래밍 시스템(Multi-Programming System): 자원 활용률을 극대화하기 위해 2개 이상의 프로그램을 주기억 장치에 기억시키고 CPU를 번갈아 사용하면서 처리하는 방식

- 시분할 시스템(Time Sharing System): CPU의 전체 사용 시간을 작은 작업 시간량(Time Slice)으로 나누어서 그 시간량 동안만 번갈아 가면서 CPU를 할당하여 각 작업을 처리하는 방식, 실제로 많은 사용자가 하나의 컴퓨터를 공유하고 있지만 마치 자신만이 컴퓨터 시스템을 독점하여 사용하고 있는 것처럼 느끼게 된다

- 다중 처리 시스템(Multi-Processing System): 동시에 프로그램을 수행할 수 있는 CPU를 두 개 이상 두고 각각 그 업무를 분담하여 처리할 수 있는 방식

- 실시간 처리 시스템(Real Time Processing System): 데이터 발생 즉시, 또는 데이터 처리 요구가 있는 즉시 처리하여 결과를 산출

- 다중 시스템 모드(Multi-Mode System): 일괄 처리 + 시분할 + 다중 처리 + 실시간 처리

- 분산 처리 시스템(Distributed Processing System): 여러 대의 컴퓨터로 작업을 나누어 처리하여 그 내용이나 결과를 통신망을 이용하여 상호 교환되도록 연결하는 방식

 

2. 운영체제의 구성

1) 제어 프로그램(Control Program)

- 감시 프로그램, 작업 제어 프로그램, 데이터 관리 프로그램

2) 처리 프로그램(Processing Program)

- 언어 번역 프로그램: 컴파일러, 어셈블러, 인터프리터 등

- 서비스 프로그램: 연계 편집, 유틸리티, 정렬, 병합 등

- 문제 프로그램: 특정 업무를 처리하기 위해 사용자가 작성한 프로그램

3) unmask

- 파일이나 디렉터리 생성 시 초기 접근 권한을 설정할 때 사용

- 초기 파일의 권한은 666이고 디렉터리는 777이며 여기에 unmas 값을 빼서 초기 파일 권한을 설정할 수 있음

4) 리눅스 로그파일

- utmp: 현재 로그인한 사용자 상태 정보를 담고 있는 로그파일

- wtmp: 성공한 로그인/로그아웃 정보와 시스템 boot/shutdown의 히스토리를 담고 있는 로그파일

- btmp: 실패한 로그인 정보를 담고 있는 로그파일

 

3. 프로세스(Process)

1) 정의

- 실행중인 프로그램, 실행 가능한 PCB를 가진 프로그램

- 프로세서가 할당되는 실체, 프로시저가 활동중인 것, 비동기적 행위를 일으키는 주체

2) 프로세스 제어 블록(PCB, Process Control Block)

- 운영체제가 프로세스를 관리하기 위해 프로세스에 대해 중요한 정보를 저장해 놓은 곳

- 프로세스가 생성될 때마다 고유의 PCB가 생성되며 프로세스가 소멸되면 PCB도 소멸됨

- 저장 정보: 프로세스의 현재 상태, 프로세스의 우선 순위, 프로세스에 할당된 자원에 대한 정보, CPU 레지스터 정보

3) 프로세스 상태 전이

- 준비 상태, 실행 상태, 대기 상태

4) 스레드(Thread)

- 프로세스 내에서의 작업 단위로서 시스템의 여러 자원을 할당받아 실행하는 프로그램 단위

- 하드웨어, 운영체제의 성능과 응용 프로그램의 처리율을 향상시킬 수 있음

- 한 개의 프세스는 여러 개의 스레드를 가질 수 있음

- 구분: 커널 스레드(커널 레벨에서 생성), 사용자 스레드(라이브러리에 의해 구현된 일반적인 스레드)

- 사용자 수준 스레드의 장점: 높은 이식성(커널 변경 필요 없음, 모든 운영체제 적용 가능), 오버헤드 감소(커널 도움 없이 스레드 교환 가능)

 

4. 병행 프로세스와 교착상태

1) 병행 프로세스(Concurrent Process)

- 두 개 이상의 프로세스들이 동시에 실행 상태에 있는 것

- 오류 방지 방법: 임계구역, 상호배제, 동기화 기법

2) 교착상태(Deadlock)

- 둘 이상의 프로세스들이 서로 다른 프로세스가 차지하고 있는 자원을 요구하며 무한정 기다리게 되어 해당 프로세스들의 진행이 중단되는 현상

- 발생 조건: 상호배재, 점유 및 대기, 비선점, 환형 대기

- 해결 방법: 예방, 회피, 발견, 회복

 

5. 프로세스 스케줄링(Process Scheduling)

1) 개념

- 프로세스의 생성 및 실행에 필요한 시스템의 자원을 해당 프로세스에 할당하는 작업

- 다중 프로그래밍 운영체제에서 자원의 성능을 향상시키고 효율적인 프로세서의 관리를 위해 작업 순서를 결정하는 것

- 목적: 모든 작업들에 대한 공평성 유지, 단위 시간당 처리량 최대화, 응답 시간 및 반환 시간 최소화, 운영체제의 오버헤드 최소화

- 바람직한 스케줄링 정책: CPU 이용률 극대화, 응답 시간 및 반환 시간 최소화, 대기 시간 최소화

2) 비선점(Non-Preemptive) 스케줄링

- 한 프로세스가 일단 CPU를 할당받으면 다른 프로세스가 CPU를 강제로 빼앗을 수 없고, 사용이 끝날 때까지 기다리는 방식

- 모든 프로세스들에 대한 요구를 공정히 처리하여 응답 시간의 예측이 용이

- CPU의 사용 시간이 짧은 프로세스들이 사용 시간이 긴 프로세스들로 인하여 오래 기다리는 경우가 발생할 수 있음

- FIFO(First In First Out), SJF(Shortest Job First), HRN(Highest Response-ratio Next), 우선순위(Priority)

3) 선점(Preemptive) 스케줄링

- 한 프로세스가 CPU를 할당받아 실행 중이라도 우선순위가 높은 다른 프로세스가 CPU를 강제로 빼앗을 수 있는 방식

- 긴급하고 높은 우선순위의 프로세스들이 빠르게 처리될 수 있음

- 선점을 위한 시간 배당에 대한 인터럽트용 타이머 클럭(Clock)이 필요

- 온라인 응용에 적합한 스케줄링

- RR(Round Robing), SRT(Shortest Remaining Time), 다단계 큐(Multi-Level Queue), 다단계 피드백 큐(Multi-Level Feedback Queue)

 

6. 기억 장치 관리 전략

1) 반입 전략

- 보조 기억 장치에 보관 중인 프로그램이나 데이터를 주기억 장치로 언제 가져올 것인지 결정하는 전략

- 요구 반입, 예상 반입

2) 배치 전략

- 보조 기억 장치에 보관 중인 프로그램이나 데이터를 주기억 장치의 어디로 가져올 것인지 결정하는 전략

- 최초 적합(First-Fit), 최적 적합(Best-Fit), 최악 적합(Worst-Fit)

3) 기억 장치 교체 전략

- 주기억 장치의 모든 페이지 프레임이 사용중일 때 어떤 페이지 프레임을 교체할 것인지 결정하는 전략

- OPT(OPTimal Replacement), FIFO(First In First Out), LRU(Least Recently Used), LFU(Least Frequently Used), NUR(Not Used Recently), SCR(SecondChance Replacement)

 

7. 가상 기억 장치 구현 기법

1) 가상 기억 장치(Virtual Memory)

- 주기억 장치의 부족한 용량을 해결하기 위해 보조 기억 장치를 주기억 장치처럼 사용하는 기법

- 구현 방법: 페이징 기법, 세그멘테이션 기법

2) 페이징(Paging) 기법

- 페이지: 가상 기억 장치에 보관된 프로그램과 주기억 장치의 영역을 동일한 크기로 나눈 것

- 나눠진 프로그램을 동일하게 나눠진 주기억 장치의 영역에 적재시켜 실행하는 기법

- 가상 기억 장치에서 주기억 장치로 주소를 조정(매핑)하기 위해 페이지의 위치 정보를 가진 페이지 맵 테이블이 필요

3) 세그먼테이션(Segmentation) 기법

- 세그먼트: 큰 프로그램을 보다 작은 프로그램으로 분할해서 하나의 논리적 단위로 묶어서 주기억 장치에 읽어 들일 수 있는 최소 단위

- 가상 기억 장치에 보관된 프로그램을 다양한 크기로 나눈 후, 나눠진 프로그램을 주기억 자치에 적재시켜 실행하는 기법

4) 구역성(Locality)

- 프로세스가 실행되는 동안 일부 페이지만 집중적으로 참조되는 경향

- 시간 구역성, 공간 구역성

5) 워킹 셋(Working Set)

- 운영체제의 가상 기억 장치 관리에서 프로세스가 일정 시간 동안 자주 참조하는 페이지들의 집합

6) 스래싱(Thrashing)

- 하나의 프로세스가 작업 수행 과정에 수행하는 기억 장치 접근에서 지나치게 페이지 부재가 발생하여 프로세스 수행에 소요되는 시간보다 페이지 이동에 소요되는 시간이 더 커지는 현상

7) 페이지 부재(Page Fault)

- 참조할 페이지가 주기억 장치에 없는 현상

 

8. 디스크 스케줄링(Disk Scheduling)

- 사용할 데이터가 디스크의 여러 곳에 저장되어 있을 때 데이터를 액세스하기 위해 디스크 헤드의 이동 경로를 결정하는 기법

1) 디스크 스케줄링의 종류

- FCFS(First Come First Service) = FIFO

- SSTF(Shortest Seek Time First): 탐색 거리가 가장 짧은 트랙에 대한 요청을 먼저 서비스

- SCAN: 현재 헤드의 위치에서 진행 방향의 모든 요청을 서비스하면서 끝까지 이동한 후 반대 방향의 요청을 서비스하는 기법

- 그 외: C-SCAN, N-step SCAN, 에센바흐 스케줄링

 

9. 정보 관리

1) 파일 시스템(File System)

- 파일: 연관된 데이터들의 집합, 각각 고유한 이름, 주로 보조 기억 장치에 저장하여 사용

- 보조 기억 장치와 그 안에 저장된 파일을 관리하는 시스템

2) 파일 디스크립터(File Descriptor)

- 파일을 관리하기 위해 필요한 파일에 대한 정보를 갖고 있는 제어 블록

- 파일 제어 블록(FCB, File Control Block)이라고도 함

- 파일마다 독립적으로 존재하며 시스템에 따라 다른 구조를 가질 수 있음

- 대개 보조 기억 장치에 저장되어 있다가 해당 파일이 열릴 때 주기억 장치로 옮겨짐

- 파일 시스템이 관리하므로 사용자가 직접 참조할 수 없음

3) 파일 구조의 종류

- 순차 파일(Sequential File), 색인 순차 파일(Indexed Sequential FIle), 직접 파일(Direct File)

 

10. 분산 운영체제

1) 다중 처리기(Multi-processor)

- 하나의 시스템에 2개 이상의 프로세서를 가지고 동시에 여러 개의 작업을 처리하는 장치

- 상호 연결 방법: 시분할 공유 버스, 크로스바 교환 행렬, 하이퍼 큐브, 다중 포트 메모리

- 운영체제의 구조: 대칭적 처리기, 주/종 처리기, 분리 수행 처리기

- 구조: 약결합 시스템, 강결합 시스템

2) 분산 처리 시스템(Distributed Processing System)

- 여러 대의 컴퓨터들에 의해 작업한 결과를 통신망을 이용하여 상호 교환할 수 있도록 연결되어 있는 시스템으로 시스템의 점진적 확장이 용이

- 단일 시스템에 비해 처리용량, 연산 속도, 신뢰성, 사용 가능도가 향상됨

- 중앙 집중형 시스템에 비해 시스템 설계가 복잡하고 소프트웨어 개발이 어려움

3) 투명성(Transparency)

- 분산 처리 운영체제에서 구체적인 시스템 환경을 사용자가 알 수 없도록 하며, 또한 사용자들로 하여금 이에 대한 정보가 없어도 원하는 작업을 수행할 수 있도록 지원하는 개념

- 종류: 위치 투명성, 이주 투명성, 복제 투명성, 병행 투명성

4) 분산 운영체제 구조

- 성형 구조, 링형 구조, 다중 접근 버스 구조, 계층 연결, 완전 연결 구조

 

11. UNIX

1) 특징

- 시분할(Time-sharing) 시스템을 위해 설계된 대화식 운영체제

- 소스가 공개된 개방향 시스템(Open System)

- 트리 구조의 파일 시스템, 멀티유저/멀티태스킹 지원

- 하나 이상의 작업에 대하여 백그라운드에서 수행 가능

- 90% 이상이 고급 언어인 C로 구성되어 있어서 이식성이 높음

2) 구성

- 커널(Kernel): 가장 핵심적인 부분, 프로세스 관리, 메모리 관리, 파일 관리, 입출력 관리 등의 기능 수행

- 쉘(Shell): 사용자가 지정한 명령들을 해석하여 커널로 전달하는 명령어 해석기, 인터페이스 담당

- 유틸리티(Utility): 사용자의 편의를 위한 프로그램, 편집기, 컴파일러, 인터프리터 등

 

12. OSI 7계층과 오류 제어 방식

1) OSI(Open Systems Interconnection) 참조 모델

- 컴퓨터 네트워크에서 여러 시스템이 데이터를 주고 받고 서로 연동할 수 있는 표준화된 인터페이스를 제공하기 위해 프로토콜을 기능별로 나눈 것

- 목적: 시스템 간의 통신을 위한 표준 제공

2) Layer 1: 물리 계층(Physical Layer)

- 물리적인 장치와 인터페이스가 전송을 위해 필요한 기계적, 전기적, 기능적, 절차적 기능을 정의하는 계층

- 종류: RS-232C, V.24, X.21

3) Layer 2: 데이터 링크 계층(Data Link Layer)

- 인접한 두 개의 통신 시스템 간에 신뢰성 있는 효율적인 데이터를 전송하는 계층

- 링크의 설정과 유지 및 종료를 담당, 링크의 효율성을 향상

- 전송 데이터의 흐름 제어, 프레임 동기, 오류 제어 등을 수행

- 종류: HDLC, PPP, LLC, LAPB, LAPD, ADCCP

4) Layer 3: 네트워크 계층(Network Layer)

- 통신망을 통하여 패킷을 목적지까지 전달하는 계층

- 경로 설정 및 네트워크 연결 관리 수행

- 과도한 패킷 유입에 대한 폭주 제어 기능

- 종류: X.25, IP, ICMP, IGMP

5) Layer 4: 전송 계층(Transport Layer)

- 통신 종단 간(End-to-End) 신뢰성 있고 효율적인 데이터를 전송하는 계층

- 투명한 데이터 전송을 제공, 에러 제어 및 흐름 제어를 담당

- 종류: TCP, UDP

6) Layer 5: 세션 계층(Session Layer)

- 프로세스 간에 대한 연결을 확립, 관리, 단절시키는 수단 제공

- 논리적 동기 제어, 긴급 데이터 전송, 통신 시스템 간의 회화 기능 등을 제공

7) Layer 6: 표현 계층(Presentation Layer)

- 응용 간의 대화 제어(Dialogue Control)를 담당, 응용 계층과 세션 계층 사이에서 데이터 변환을 담당

- 정보의 형식 설정, 암호화, 데이터 압축, 코드 변환, 문맥 관리 등의 기능 수행

8) Layer 7: 응용 계층(Application Layer)

- 사용자에게 서비스 제공

- 응용 프로세스와 직접 관계하여 일반적인 응용 서비스 수행

- 종류: HTTP, FTP, SMTP, Telnet, DNS

9) 자동 반복 요청(ARQ, Automatic Repeat reQuest)

- 통신 경로에서 오류 발생 시 수신측은 오류의 발생을 송신측에 통보하고, 송신측은 오류가 발생한 프레임을 재전송하는 오류 제어 방식

 

13. TCP/IP 프로토콜

1) TCP/IP

- 인터넷에 연결된 서로 다른 기종의 컴퓨터 간에 데이터 송수신이 가능하도록 도와주는 표준 프로토콜

- 접속형 서비스, 전이중 전송 서비스, 신뢰성 서비스 제공

- 네트워크 환경에 따라 여러 개의 프로토콜을 허용

2) TCP(Transmission Control Protocol)

- OSI 7계층의 전송 계층 역할 수행

- 서비스 처리를 위해 Multiplexing과 De-Multiplexing 이용

- 전이중 서비스와 스트림 데이터 서비스 제공

3) IP(Internet Protocol)

- OSI 7계층의 네트워크 계층에 해당

- 비신뢰성 서비스 제공

- 신뢰성이 부족한 비연결형 서비스를 제공하기 때문에 상위 프로토콜에서 이러한 단점을 보완해야 함

4) IP 프로토콜에서 사용하는 필드

- Header Length(4bit): IP 헤더 뒷부분에 옵션 필드가 여럿 붙을 수 있어 길이는 가변적

- Total Packet Length(16bit): 전체 패킷의 길이를 바이트 단위로 표시 길이는 헤더와 데이터를 더한 것, 최대값은 65535

- Time To Live(8bit): 패킷을 전달할 수 있는 횟수 제한을 나타냄

5) 링크 계층(Link Layer)

- 프레임을 송수신

- 종류: Ethernet, IEEE 802, HDLC, X.25, RS-232C 등

6) 인터넷 계층(Internet Layer)

- 주소 지정, 경로 설정 제공, 네트워크 계층이라고도 함

- 종류: IP(데이터 체크섬은 제공하지 않고 헤더 체크섬만 제공), ICMP(수신지 도달 불가 메시지는 수신지 또는 서비스에 도달할 수 없는 호스트를 토지하는 데 사용), IGMP, ARP, RARP

7) 전송 계층(Transport Layer)

- 호스트 간 신뢰성 있는 통신 제공

- 종류: TCP(신뢰성 있는 연결 지항형 전달 서비스 제공), UDP(비연결형 및 비신뢰성 전송 서비스 제공)

8) 응용 계층(Application Layer)

- 응용 프로그램 간의 데이터 송수신 제공

- 종류: FTP, SMTP, SNMP, Telnet 등

 

14. IP 주소

1) IPv4(Internet Protocol version 4)

- 32비트 길이의 IP 주소

- 주소의 각 부분을 8비트씩 4개로 나눠서 10진수로 표현

- IP 주소 = 네트워크 주소(Netid) + 호스트 주소(Hostid)

2) 서브넷 마스크(Subnet Mask)

- 네트워크를 작은 내부 네트워크로 분리하여 효율적으로 네트워크를 관리하기 위한 수단

- 32bit 값으로 IP 주소를 네트워크와 호스트 IP 주소를 구분하는 역할

- 네트워크 ID에 해당하는 모든 비트를 1로 설정하며 호스트 ID에 해당하는 모든 비트를 0으로 설정

- CIDR 표기 형식: 10진수의 IP/네트워크 ID의 1비트의 개수

3) IPv6

- IPv4의 주소 부족 문제를 해결하기 위하여 개발됨

- 128비트 길이의 IP 주소

- 16비트씩 8개의 필드로 분리 표기

- 장점: 보안성 강화, 네트워트 기능 확장 용이, 패킷 크기 제한 없음, 멀티미디어 실시간 처리 가능, 자동으로 네트워크 환경 구성 가능

- 통신 방식: 유니캐스트(1:1), 애니캐스트(1: 가장 가까운 1), 멀티캐스트(1:N)

4) CSMA/CA

- 무선 랜에서 데이터 전송 시, 매체가 비어있음을 확인한 뒤 충돌을 회피하기 위해 임의 시간을 기다린 후 데이터를 전송하는 방법

- 네트워크에 데이터의 전송이 없는 경우라도 동시 전송에 의한 충돌에 대비하여 확인 신호 전송

5) CSMA/CD

- 전송 중에 충돌이 감지되면 패킷의 전송을 즉시 중단하고 충돌이 발생한 사실을 모든 스테이션들이 알 수 있도록 간단한 통보 신호 전송

- 스테이션의 수가 만항지면 충돌이 많아져서 효율이 떨어짐

- 어느 한 기기에 고장이 발생하여도 다른 기기의 통신에 전혀 미치지 않음

 

1. C언어

1) C언어 변수명 작성 규칙

- 영어 대소문자, 숫자, '_'를 혼용하여 사용할 수 있으며, 영문자는 대소문자를 구분한다

- 첫 글자는 숫자로 시작할 수 없고, 영문자나 '_'로 시작해야 하며, 공백을 포함할 수 없다

- 32개 예약어(Reserved Word)를 사용할 수 없다

2) 표준 라이브러리 함수

- stdio.h: C언어 표준 입출력 라이브러리

- stdlib.h: C 표준 유틸리티 함수를 모아놓은 헤더 파일

3) 구조체(Structure)

- 서로 연관된 데이터들을 모아 놓은 것

- 서로 다른 자료형의 값을 메모리 공간에 순서적으로 하나의 단위로 참조할 수 있도록 구성해 놓은 것

 

2. Java 언어의 클래스와 상속

1) 클래스

- 객체지향 기법에서 하나 이상의 유사한 객체들을 묶어서 하나의 공통된 특성을 표현한 것, 자료 추상화의 개념

- 객체(Object)를 생성하기 위한 설계 또는 틀로 구성요소

- 필드는 객체의 상태값을 저장하는 목적의 멤버 변수이며, 메소드는 객체의 행위를 구현하는 멤버 함수

- 필드, 메소드, 생성자로 클래스가 구성

- 모든 클래스에는 생성자가 반드시 존재하고 하나 이상의 생성자를 가질 수 있음, 생성자를 생략하면 컴파일 시 자동으로 기본 생성자를 바이트 코드 파일에 추가

2) main() 메소드

- 자바 프로그램 실행 시 가장 먼저 main 메소드의 명령문을 순서대로 실행, 실행의 시작이자 종료인 메소드

- main 메소드를 포함하는 클래스의 접근 지정자는 public

- public static void main(String[] args) { }

3) 상속(Inheritance)

- 부모(Super) 클래스의 속성과 메소드를 상속받는 것

- 자식 클래스는 부모 클래스의 생성자와 private 요소를 제외한 모든 멤버를 상속받는다

- 부모 클래스의 메소드와 속성을 별도의 선언 없이 블록 안에 있는 것처럼 접근하여 사용

- 자바에서는 단일 상속만 가능, 자식 클래스는 단 하나의 부모 클래스를 상속받을 수 있음

- 자바의 모든 클래스는 Object 클래스를 상속받음

- class 자식클래스명 extends 부모클래스명 { }

4) 메소드 오버라이딩(Overriding, 재정의)

- 클래스 상속 상황에서 부모 클래스의 멤버를 자식 클래스에서 상속받았지만 자식 클래스에서 해당 멤버의 내용을 수정하여 자식 클래스 객체에서 적용

- 부모 클래스로부터 자식 클래스의 메소드 멤버를 재정의하는 다형성, 부모 클래스의 정의에는 영향을 주지 않음

- static 메소드의 오버라이딩을 허용하지 않음

- 하위 클래스의 매개 변수 개수와 타입은 상위 객체와 같아야 함

5) Garbage Collector

- 개발 중 유효하지 않은 가비지 메모리가 발생할 때 JVM 가비지 컬렉터가 불필요한 메모리를 알아서 정리해줌

6) 접근 제한자

- public: 모든 접근을 허용

- private: 같은 패키지에 있는 객체와 상속 관계의 객체들만 허용

- default: 같은 패키지에 있는 객체들만 허용

- protected: 현재 객체 내에서만 허용

7) 변수명 작성 규칙

- 영어 대소문자, 숫자, '_', '$'를 혼용하여 사용할 수 있음, 첫 글자는 숫자로 시작할 수 없음

- 공백을 포함할 수 없음, 예약어를 사용할 수 없음

8) 오버로딩(Overloading)

- 한 클래스 내에서 같은 이름의 메소드를 사용하는 것

- 같은 이름의 메소드를 여러 개 정의하면서 매개 변수의 유형과 개수가 달라지도록 하는 기술

9) 삼항 연산자에 의한 조건문

- 조건식 ? 참일 떄 명령문 : 거짓일 때 명령문

10) while문

- 조건식의 결과가 참이면 while문 내의 명령을 실행하고 다시 조건식을 검사한다

- 조건의 초기값이 거짓이면 while문 내의 명령문은 한 번도 실행되지 않는다

 

3. 스크립트 언어와 파이썬

1) 스크립트 언어(Script Language)

- 소스 코드를 컴파일 과정을 거치지 않고 실행할 수 있는 프로그래밍 언어

- 스크립트 언어에 내장된 번역기에 의해 번역되어 실행

- 실행 단계에서 구문을 분석

- Scrapy: 파이썬 기반의 웹크롤러 프레임워크로서 가볍고 빠르고 확장성이 좋다

- 서버 측 언어: ASP, JSP, PHP, Python

- 클라이언트 측 언어: JavaScript, VBScript

2) 파이썬(Python)

- 고급 프로그래밍 언어

- 플랫폼에 독립적이고 인터프리터식, 객체지향적, 동적 타이핑 대화형 언어

 

1. 자료 처리

1) 정보 처리 시스템

- 정보 시스템이 사용하는 데이터를 처리하는 시스템(정보 시스템의 서브 시스템)

- 일괄 처리 시스템(일정 기간 자료 수집), 온라인 처리 시스템(발생 즉시 결과 출력), 분산 처리 시스템(네트워크로 연결)

2) 데이터베이스

- 통합된 데이터, 저장된 데이터, 운영 데이터, 공용 데이터

- 특성: 실시간 접근성, 내용에 의한 참조(주소/위치 x), 동시 공유, 계속적 변화

- 구성: DBMS, 스키마, 데이터베이스 언어, 데이터베이스 사용자

3) DBMS(데이터베이스 관리 시스템)

- 필수 기능: 정의 기능(Definition), 조작 기능(Manipulation), 제어 기능(Control)

4) 데이터웨어하우스(Data Warehouse)

- 의사결정 지원을 위한 주제 지향적, 통합적, 시계열적, 비휘발적인 데이터 집합

- OLAP(On-Line Analytical Processing): 대용량 데이터를 고속으로 처리하며 쉽고 다양한 관점에서 추출, 분석할 수 있도록 지원하는 데이터 분석 기술

- 연산 종류: Roll-Up, Drill-Down, Dicing, Slicing

 

2. 데이터베이스의 구성, 모델

1) 스키마(Schema)

- 데이터베이스의 구조(개체, 속성, 관계)에 대한 정의

- 3계층: 외부 스키마, 개념 스키마, 내부 스키마

- 개념 스키마: 데이터베이스 전체를 정의한 것으로 데이터 개체, 관계, 제약조건, 접근 권한, 무결성 규칙 등을 명세, 범기관적 입장에서 데이터베이스를 정의

- 언어: 데이터 정의어(DDL, Data Definition Languague), 데이터 조작어(DML, Data Manipulation Language), 데이터 제어어(DCL, Data Control Language)

- 사용자: 데이터베이스 관리자(DBA, Database Administrator), 응용 프로그래머, 일반 사용자

2) 데이터 모델

- 구성 요소: 데이터 구조(Structure), 연산(Operations), 제약조건(Constraints)

- 구분: 개념적 모델(E-R 다이어그램), 논리적 모델(계층형, 네트워크형, 관계형, 객체지향형)

3) E-R 다이어그램

- 정보 공학 방법론에서 데이터베이스 설계의 표현으로 사용하는 모델링 언어로 P.Chen이 처음 제안

- 사각형(개체), 마름모(관계), 타원(속성), 실선(개체 입과 속성을 연결), 2중 타원(다중값 속성)

 

3. 관계형 데이터베이스 모델

1) 모델 구조

- 튜플(Tuple): 테이블의 행(Row), 파일 구조의 레코드(Record), 카디널리티(튜플의 수)

- 속성(Attribute): 테이블의 열(Column), 파일 구조의 항목(Item)/필드(Field), 차수(속성의 수)

- 도메인(Domain): 하나의 속성이 가질 수 있는 원자값들의 집합

2) 릴레이션의 특징

- 튜플의 유일성, 튜플의 무순서성(순서 없음), 속성의 원자성, 속성의 무순서성(순서 의미 없음)

 

4. 키의 종류와 무결성

1) 슈퍼키(Super Key)

- 두 개 이상의 속성으로 구성된 키 또는 혼합키

- 모든 튜플에 대해 유일성은 만족하지만 최소성은 만족하지 않음

2) 후보키(Candidate Key)

- 모든 튜플을 유일하게 식별할 수 있는 하나 또는 몇 개의 속성 집합

- 모든 튜플에 대해 유일성과 최소성 모두 만족

- 슈퍼키에서 구해진 속성, 속성 집합 중 가장 적은 속성 집합(최소성)이 후보키가 됨

3) 기본키(Primary Key)

- 후보키 중에서 대표로 선정된 키, Null 값을 가질 수 없음, 후보키 중 가장 적합한 속성 또는 속성 집합을 선택

4) 외래키(Foriegn Key)

- 다른 테이블의 기본키로 사용되는 속성

5) 무결성

- 개체 무결성(키본키는 Null 값이나 중복값을 가질 수 없음), 참조 무결성, 도메인 무결성

 

5. 데이터베이스 설계 단계

1) 요구조건 분석

- 사용자로부터 요구조건 수집과 명세서 작성

2) 개념적 설계

- 목표 DBMS에 독립적인 개념 스키마 설계

- 개념 스키마 모델링(E-R 다이어그램 작성)과 트랜잭션 모델링 병행 수행

3) 논리적 설계

- 목표 DBMS에 종속적인 논리적 스키마 설계, 스키마의 평가 및 정제

- 논리적 데이터 모델로 변환 및 트랜잭션 인터페이스 설계

4) 물리적 설계

- 목표 DBMS에 종속적인 물리적 구조 설계

- 저장 레코드 양식 설계, 레코드 집중의 분석/설계, 액세스 경로 인덱싱, 클러스터링, 해싱 등의 설계

- 접근 경로 설계 및 트랜잭션 세부 설계

5) 데이터베이스 구현

- 목표 DBMS의 DDL로 스키마를 작성

- 데이터베이스에 등록 후 트랜잭션을 작성

 

6. 데이터베이스 정규화(Normalization)

1) 개념

- 종속성 이론을 이용하여 잘못 설계된 관계형 스키마를 더 작은 속성의 세트로 쪼개어 바람직한 스키마로 만들어 가는 과정

- 좋은 데이터베이스 스키마를 생성하고 불필요한 데이터의 중복을 방지

2) 목적

- 데이터 구조의 안정성 최대화, 중복 데이터의 최소화, 수정 및 삭제 시 이상 현상 최소화, 테이블 불일치 위험 간소화

3) 이상 현상(Anomaly)

- 릴레이션 조작 시 데이터들이 불필요하게 중복되어 예기치 않게 발생하는 곤란한 현상

- 종류: 삽입 이상, 삭제 이상, 갱신 이상

4) 함수적 종속

- 개체 내에 존재하는 속성 간의 관계를 종속적인 관계로 정리하는 방법

- 데이터 속성들의 의미와 속성 간의 상호 관계로부터 도출되는 제약조건

- 기준값을 결정자, 종속되는 값을 종속자라고 함

5) 부분 함수적 종속

- 복합 속성 (A, B)에 대하여 A → C가 성립할 때

6) 이행 함수적 종속

- 속성 X, Y, Z가 주어졌을 때 X → Y, Y → Z하면 X → Z가 성립됨

 

7. 정규화 과정

1) 1NF, 1정규형

- 도메인이 원자값만으로 되어 있는 릴레이션

2) 2NF, 2정규형

- 부분적 함수 종속 제거

3) 3NF, 3정규형

- 이행적 함수 종속 제거

4) BCNF, 보이스/코드 정규형

- 결정자이면서 후보키가 아닌 함수 종속 제거

5) 4NF, 4정규형

- 다치 종속 제거

6) 5NF, 조인 종속성 제거

- 조인 종속성 제거

 

8. 관계 대수와 연산자

1) 관계 대수(Relational Algebra)
- 원하는 정보와 그 정보를 어떻게 유도하는가를 기술하는 절차적인 방법

- 주어진 릴레이션 조작을 위한 연산의 집합

2) 관계 해석 자유 변수

- ∀: for all(모든 것에 대하여), 전칭 정량자(Universal quantifier)

- ∃: "There exists", "For Some", 존재 정량자(Existential quantifier)

3) 순수 관계 연산자의 종류

- Select(선택): 튜플 집합을 검색, 수평적 연산, 시그마

- Project(추출): 속성 집합을 검색, 수직적 연산, 파이

- Join(결합): 두 릴레이션의 공통 속성을 연결

- Division(나누기): 두 릴레이션에서 특정 속성을 제외한 속성만 검색

 

9. SQL, DDL, DCL, View

1) SQL(Structed Query Language)

- 관계형 데이터베이스의 표준 질의어

- 종류: DDL, DML, DCL

2) DDL(Data Definition Language, 데이터 정의어)

- 데이터 베이스의 정의/변경/삭제에 사용되는 언어

- 논리적 데이터 구조와 물리적 데이터 구조 간의 사상을 정의

- 종류: CREATE, ALTER, DROP

3) DCL(Data Control Language)

- 데이터 제어 정의 및 기술에 사용되는 언어

- 무결성을 유지하고 데이터 복구 및 병행 제어

- 종류: COMMIT, ROLLBACK, GRANT, REVOKE

4) 뷰(View)

- 사용자에게 접근이 허용된 자료만을 제한적으로 보여주기 위해 기본 테이블에서 유도되는 가상 테이블

- 생성 시 CREATE문, 검색 시 SELECT문 사용

- 정의 변경 시 ALTER문을 사용할 수 없고 DROP문을 이용

- 뷰를 이용한 또 다른 뷰 생성 가능, 하나의 뷰 제거 시 그 뷰를 기초로 정의된 다른 뷰도 함께 삭제됨

5) 시스템 카탈로그(System Catalog)

- 시스템 자신이 필요로 하는 여러 가지 객체에 관한 정보를 포함하고 있는 시스템 데이터베이스

- 데이터 사전, 메타 데이터라고도 함

 

10. 데이터베이스 조작

1) DML(Data Manipulation Language, 데이터 조작어)

- 데이터의 검색/삽입/삭제/변경에 사용되는 언어

- 사용자와 DBMS 간의 인터페이스를 제공

- 종류: SELECT(검색), INSERT(삽입), DELETE(삭제), UPDATE(내용 변경)

- BETWEEN: 구간값 조건식, ex) WHERE 점수 BETWEEN 80 AND 85;

 

11. 트랜잭션(Transaction)

- 하나의 논리적 기능을 수행하기 위한 작업 단위

- 데이터베이스에서 일어나는 연산의 집합

1) 특성

- 원자성(Automicity): 완전하게 수행이 완료되지 않으면 전혀 수행되지 않아야 한다

- 일관성(Consistency): 시스템의 고정 요소는 트랜잭션 수행 전후가 같아야 한다

- 격리성(Isolation, 고립성): 트랜잭션 실행 시 다른 트랜잭션의 간섭을 받지 않아야 한다

- 영속성(Durability, 지속성): 트랜잭션의 완료 결과가 데이터베이스에 영구히 기억된다

2) CRUD Matrix

- 데이터베이스에 영향을 주는 생성(Create), 읽기(Read), 갱신(Update), 삭제(Delete) 연산으로 프로세스와 테이블 간에 매트릭스를 만들어서 트랜잭션을 분석하는 도구

3) 즉각 갱신법

- 데이터를 갱신하면 트랜잭션이 완료되기 전에 실제 데이터베이스에 반영하는 방법

- 회복 작업을 위해서 갱신 내용을 별도 Log로 기록해야 한다

- Redo, Undo 모두 사용 가능

4) 연산
- Commit: 트랜잭션 실행이 성공적으로 종료되었음을 선언

- Rollback: 트랜잭션 실행이 실패하였음을 선언

- Recovery: 트랜잭션을 수행하는 도중 장애로 인해 손상된 데이터베이스를 손상되기 이전의 정상적인 상태로 복구시키는 작업

5) 상태

- 활동, 부분 완료, 완료, 실패, 철회

 

12. 병행 제어(Concurrency Control)

- 동시에 수행되는 트랜잭션들을 일관성 있게 처리하기 위해 제어하는 것

1) 목적

- 데이터베이스 공유를 최대화, 데이터베이스 일관성 최대화, 시스템 활용도 최대화, 응답시간 최소화

2) 타임 스탬프

- 트랜잭션이 DBMS로부터 유일한 타임스탬프(시간 허가 인증 도장)를 부여받는다

- 동시성 제어를 위한 직렬화 기법으로 트랜잭션 간의 순서를 미리 정하는 방법

3) 로킹(Locking)

- 하나의 트랜잭션이 데이터를 액세스하는 동안 다른 트랜잭션이 그 데이터 항목을 액세스할 수 없도록 하는 병행 제어 기법

- 2단계 로킹: 직렬성은 보장하지만 교착상태 예방은 불가능, 확장 단계와 축소 단계, 각 트랜잭션의 로크 요청과 해제 요청을 2단계로 실시

 

13. 보안, 분산 데이터베이스

1) 암호화 기법

- 비밀키(Private Key, 대칭키): 동일한 키로 데이터를 암호화하고 복호화, 속도가 빠름

- 공개키(Public Key, 비대칭키): 각기 다른 키로 데이터를 암호화하고 복호화, 키가 공개되어도 됨, 속도가 느림

2) 권한 부여 기법

- GRANT: 데이터 베이스 사용자에게 사용 권한 부여

- REVOKE: 권환 취소

- 트리거(Trigger): 연쇄 반응, 일정 작업을 수행할 때 이에 부수적으로 자동 처리되도록 하는 것

3) 분산 데이터베이스

- 네트워크를 통하여 연결된 여러 개의 컴퓨터에 데이터가 분산된 데이터베이스

- 목표: 위치 투명성, 중복 투명성, 병행 투명성, 장애 투명성

- 구성 요소: 분산 처리기, 분산 데이터베이스, 통신 네트워크

 

 

 

1. 자료 구조

1) 분류

- 선형구조: 리스트(선형/연결), 스택, 큐, 데크

- 비선형 구조: 트리, 그래프

2) 활용

- 정렬, 검색, 인덱스, 파일 편성

- 인덱스: 인덱스 생성 시 CREATE, 삭제 시 DROP 문을 사용

 

2. 선형 자료 구조

1) 리스트

- 선형 리스트: 데이터 항목을 추가/삭제하는 것이 불편, 연속적인 기억 공간

- 연결 리스트: 노드 포인터로 연결하여 삽입/삭제 용이, 연속적이지 않아도 됨, 기억 공간 많이 소요

2) 스택

- 한쪽 끝에서만 삽입/삭제, 후입선출(LIFO, Last In First Out)

- 스택 가드: 메모리상에서 프로그램의 복귀 주소와 변수 사이에 특정 값을 저장해 두었다가 그 값이 변경되었을 경우 오버플로우 상태로 가정하여 프로그램 실행을 중단하는 기술

- 응용 분야: 인터럽트 처리, 수식의 계산, 0-주소 지정 방식, 재귀호출, 후위 표현의 연산, 깊이 우선 탐색

3) 큐

- 한쪽 끝에서 삽입, 다른 쪽 끝에서 삭제

- 선입선출(FIFO, First In First Out)

- 응용 분야: 운영체제의 작업 스케줄링 등

4) 데크

- 양쪽 끝에서 삽입/삭제, 두 개의 포인터 사용, 스택+큐 형태

- 입력 제한 데크를 Scroll, 출력 제한 데크를 Shelf라고 함

 

3. 트리

- 그래프의 특수한 형태로써 노드와 가지를 이용하여 사이클을 이루지 않도록 구성한 자료 구조

1) 이진 트리의 구조

- 이진 트리: 차수(degree)가 2 이하인 노드들로만 구성된 트리

- 차수: 어떤 노드에 연결된 자식 노드의 수

- 정이진 트리(Full Binary Tree): 모두 2개씩 채워짐

- 완전 이진 트리(Complete Binary Tree): 정이진 트리에서 마지막 레벨에서 왼쪽 부터 단말 노드를 채우는 트리

- 사향 이진 트리(Skewed Binary Tree): 근노드로부터 한쪽 방향으로 기울어진 트리

2) 이진 트리의 운행법

- 전위(Preorder) 운행: Root - Left - Right

- 중위(Inorder) 운행: Left - Root - Right

- 후위(Postorder) 운행: Left - Right - Root

3) 수식의 표기법

- 전위(Prefix) 표기법: + A B

- 중위(Infix) 표기법: A + B

- 후위(Postfix) 표기법: A B +

 

4. 그래프

- 정점(Vertex)과 간선(Edge)의 집합으로 이루어지는 자료구조

- 표현 방법: 인접 행렬(Adjacency Matrix)

- n개 노드 무방향 그래프 최대 간선 수: n(n-1)/2

- 제어 흐름 그래프에서 순환 복잡도: V(G) = E(화살표 수) - N(노드 수) + 2

 

5. 내부 정렬

1) 삽입 정렬(Insertion Sort)

- 정렬된 파일에 새로운 하나의 레코드를 순서에 따라 삽입시켜 정렬

2) 버블 정렬(Bubble Sort)

- 인접한 데이터를 비교하면서 그 크기에 따라 데이터의 위치를 바꾸어 정렬하는 방법

3) 선택 정렬(Selection Sort)

- n개의 레코드 중에서 최소값(또는 최대값)을 찾아 1st 레코드 위치에 놓고, 나머지 (n-1) 개의 레코드 중에서 최소값(또는 최대값)을 찾아 2nd 레코드 위치에 놓는 방법을 반복하여 정렬하는 방법

4) 병합(합병) 정렬(2-Way Merge Sort)

- 두 개의 키들을 한 쌍으로 하여 각 쌍에 대해 순서를 정함

5) 퀵 정렬(Quick Sort)

- 분할 정복에 기반한 알고리즘

- 레코드드의 많은 자료 이동을 없애고 하나의 파일을 부분적으로 나누어 가면서 정렬하는 방법

- 키를 기준으로 작은 값은 왼쪽에 큰 값은 오른쪽에 모이도록 서로 교환시키는 부분 교환 정렬법

6) 힙 정렬(Heap Sort)

- 완전이진 트리 이용

- 정렬한 입력 레코드들로 힙을 구성하고 가장 큰 키값을 갖는 루트 노드를 제거하는 과정을 반복하여 정렬하는 기법

 

6. 검색

1) 이분 검색(Binary Search, 이진 검색)

- 자료가 순차적으로 정렬되어 있어야 함

- 탐색 효율이 좋고 시간이 적게 소요

- 비료를 거듭할 때마다 데이터 수가 절반으로 줄어듦

2) 선형 검색(Linear Search)

- 첫번째 레코드부터 순차적으로 비교하는 가장 간단한 방법, 데이터 정렬 필요 없음

- n개의 입력 자료에 대해 평균적으로 (n+1)/2번 비교해야 하므로 비효율적

3) 피보나치 검색(Fibonacci Search)

- 이진 검색과 비슷, 비교 대상 기준을 피보나치 수열로 결정

4) 그 외: 블록 검색(Block Search), 이진 트리 검색(Binary Tree Search)

 

7. 해싱

1) 정의

- 해싱 함수 이용, 해시 테이블 내의 홈주소를 계산하여 주어진 레코드에 접근

- 직접 접근 파일 구성 시 사용

- 속도 가장 빠르나 충돌 시 오버플로 부담 가중, 많은 기억 공간 요함

2) 종류

- 제산 방법(Division Method): 키값을 양의 정수인 소수로 나누어 나머지를 홈주소로 취함

- 중간 제곱 방법(Mid-Square Method): 키값을 제곱하고 그 중간 부분의 값을 주소로 계산

- 중첩 방법(Folding Method): 키를 여러 부분으로 나누고 각 부분의 값을 더하거나 배타적 논리합(XOR) 연산을 통하여 나온 결과

- 기수 변환 방법(Radix Conversion Method): 어떤 진법으로 표현된 주어진 레코드 키값을 다른 진법으로 간주하고 키값을 변환

- 계수 분석 방법(Digit Analysis Method): 키를 구성하는 자릿수들의 분포를 조사하여 비교적 고른 분포를 보이는 자릿수들을 필요한 만큼 택함

3) 오버플로 해결 방법

- 선형 개방 주소법(Linear Open Addressing): 저장 데이터 적을 떄 유리

- 폐쇄 주소 방법(Closed Addressing): 버킷 내에

연결리스트 할당

- 재해싱: 새로운 해시 함수 적용

4) 관련 용어

- 동의어(Synonym): 동일한 홈주소로 인하여 충돌이 일어난 레코드들의 집합

- 슬롯(Slot): 한 개의 레코드를 저장할 수 있는 공간, 슬롯이 모여 버킷 형성

- 충돌(Collision): 2개의 상이한 레코드가 똑같은 버킷으로 해싱되는 것

 

8. 인덱스 구조와 파일 편성

1) 인덱스

- 데이터 베이스의 물리적 구조와 밀접한 관계

- 구성 방법: B 트리(Balanced Tree), B+ 트리, 트라이(Trie 색인)

2) 파일 편성 방법

- 순차 파일(Sequential File)

- 색인 순차 파일(ISAM: Indexed Sequential Access Method): 기본 영역, 색인 영역(트랙/실린더/마스터 인덱스), 오버플로 영역

- VSAM 파일(Virtual Storage Access Method File)

- 직접 파일(Direct File)

- 역파일(Inverted File)

3) 정적 인덱싱과 동적 인덱싱

- 정적 인덱싱: 색인 순차 파일 방식이 대표적, 인덱스 구조가 정적으로 변하지 않음

- 동적 인덱싱: 가상 기억 접근 방식이 대표적, 미리 빈 공간 준비, 레코드가 가득 차면 동적으로 분열

 

 

 

 

 

 

 

'오공완' 카테고리의 다른 글

정처기 4과목: 프로그래밍 언어 활용  (0) 2024.02.22
정처기 3과목: 데이터베이스  (0) 2024.02.22
자바스크립트: 문서 객체 모델(DOM)  (0) 2024.02.20
스프링 부트3 시작하기  (0) 2024.02.05
231121 오공완  (0) 2023.11.21

+ Recent posts