핑구

Ⅱ. 소프트웨어 개발 : 데이터 입·출력 구현 본문

CS/정보처리기사

Ⅱ. 소프트웨어 개발 : 데이터 입·출력 구현

코딩 펭귄 2022. 2. 10. 14:06

1. 자료 구조

자료 구조
프로그램에서 사용하기 위한 자료를 기억장치의 공간 내에 저장하는 방법과 자료 간의 관계, 처리 방법 등을 연구 분석하여 저장 공간의 효율성 및 실행 시간의 신속성을 높이는 것이다.

 

자료 구조의 종류

자료 구조의 종류 (출처: https://velog.io/@mrnglory/%EC%A0%95%EC%B2%98%EA%B8%B0-%EC%9A%94%EC%95%BD-%EC%9E%90%EB%A3%8C%EA%B5%AC%EC%A1%B0-%ED%8A%B8%EB%A6%AC-%EB%B3%B5%EC%9E%A1%EB%8F%84-%EC%A0%95%EB%A0%AC)

  • 선형 구조
    1. 배열
      동일한 자료형의 데이터들이 같은 크기로 나열되어 순서를 가지고 있는 집합이다.
      첨자(index)를 이용하여 데이터에 접근하고, 첨자의 개수에 따라 n차원 배열이라고 부른다.
      기억 장소의 추가가 어렵고, 데이터 삭제 시 저장되어 있던 기억 잔소는 빈 공간으로 남아 있기 때문에 메모리 낭비가 발생한다.
      반복적인 데이터 처리 작업에 적합하다.
      크기가 n인 1차원 배열 a
      크기가 nxn인 2차원 배열 a
    2. 선형 리스트
      일정한 순서에 의해 나열된 자료 구조로 배열을 이용하는 연속 리스트와 포인터를 이용하는 연결 리스트로 구분한다.
      • 연속 리스트 : 배열과 같이 연속되는 기억 장소에 저장되는 자료 구조로 삽입, 삭제 시 자료의 이동이 필요하다. 기억 장소 이용 효율이 제일 좋다.
      • 연결 리스트 : 순서에 따라 노드의 포인터 부분을 이용하여 서로 연결시킨 자료 구조로 노드의 삽입, 샂게 작업이 용이하다. 또한 기억 공간이 연속적이지 않아도 저장이 가능하다. 하지만, 접근 속도가 느리고, 중간 연결이 끊어지면 다음 노드를 찾기 힘들다.
        연결 리스트의 Node
    3. 스택(Stack)
      리스트의 한쪽 끝으로만 자료의 삽입, 삭제가 이루어지는 자료 구조이다. 
      가장 나중에 삽입된 자료가 가장 먼저 삭제되는 후입선출(LIFO : Last In First Out) 방식으로 자료를 처리한다.
      꽉 채워진 상태에서 삽입되면 오버플로가 발생하고, 비어 있는 상태에서 삭제하면 언더플로가 발생한다.
      스택 (출처: https://medium.com/@songjaeyoung92/%EC%9E%90%EB%A3%8C%EA%B5%AC%EC%A1%B0-javascript-stack-%EC%9D%B4%EB%9E%80-31f9bbb84897)
    4. 큐(Queue)
      데이터의 한쪽에서는 삽입이 이루어지고, 다른 한쪽에서는 삭제가 이루어지는 자료 구조이다. 
      먼저 삽입된 자료가 가장 먼저 삭제되는 선입선출(FIFO : First In First Out) 방식으로 자료를 처리한다.
      시작을 표시하는 프런트 포인터와 끝을 표시하는 리어 포인터가 있다.
      프런트 포인터는 가장 먼저 삽입된 자료의 기억 공간을 가리키며, 삭제 작업을 하는 경우 사용한다.
      리어 포인터는 가장 마지막에 삽입된 자료의 기억 공간을 가리키며, 삽입 작업을 하는 경우 사용한다.
      큐 (출처: https://velog.io/@jaden_94/%ED%81%90Queue)
  • 비선형 구조
    1. 트리
      정점과 선분을 이용하여 사이클을 이루지 않도록 구성한 그래프의 특수한 형태이다.
      족보 또는 조직도 표현에 적합하다.
      트리 관련 용어
      • 노드 : 트리의 기본 요소로 하나의 기억 공간을 의미한다.
      • 링크 : 노드와 노드를 연결하는 선을 말한다.
      • 근 노드(Root Node) : 트리의 맨 위에 있는 노드이다.
      • 디그리(Degree, 차수)​ : 각 노드에서 뻗어 나온 가지의 수를 말한다.
      • 단말 노드(Terminal Node), 잎 노드(Leaf Node) : 자식이 하나도 없는 노드를 말한다.
      • 자식 노드(Son Node) : 어떤 노드에 연결된 다음 레벨의 노드들을 말한다.
      • 부모 노드(Parent Node) : 어떤 노드에 연결된 이전 레벨의 노드들을 말한다.
      • 형제 노드(Brother Node, Sibling) : 동일한 부모를 갖는 노드들을 말한다.
      • 트리의 디그리 : 노드들의 디그리 중에서 가장 많은 수를 말한다.
        트리 (출처: https://songeunjung92.tistory.com/26)
    2. 그래프

 

2. 데이터베이스

데이터저장소
소프트웨어 개발 과정에서 다루어야 할 데이터들을 논리적인 구조로 조직화하거나 물리적인 공간에 구현한 것을 의미한다.

데이터베이스(DB)
특정 조직의 업무를 수행하는 데 필요한 데이터들의 모임을 의미한다.

DBMS(DataBase Management System)
데이터베이스를 관리하는 소프트웨어로 데이터의 종속성과 중복성 문제를 해결하기 위해 제안되었다.

 

데이터 저장소

  • 논리 데이터 저장소 : 데이터 및 데이터 간의 연관성, 제약 조건을 식별하여 논리적인 구조로 조직화한 것을 의미한다.
  • 물리 데이터 저장소 : 논리 데이터 저장소에 저장된 데이터와 구조들을 소프트웨어가 운용될 환경의 물리적 특성을 고려하여 하드웨어적인 저장장치에 저장한 것을 의미한다.

 

데이터베이스의 정의

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

 

DBMS의 기능

  • 정의 기능 : 데이터베이스에 저장될 데이터의 타입과 구조에 대해 명시한다.
  • 조작 기능 : 데이터의 검색, 갱신, 삽입, 삭제 등을 체계적으로 처리하기 위해 사용자와 데이터베이스 사이의 인터페이스 수단을 제공한다.
  • 제어 기능 : 데이터의 무결성이 유지되도록 하며, 허가된 데이터만 접근하도록 권한을 검사한다. 또한 여러 사용자가 동시에 접근하여 데이터를 처리하는 경우 정확성을 유지하도록 병행 제어를 할 수 있어야 한다.

 

DBMS의 장단점

장점 단점
데이터 독립성, 일관성, 무결성 유지
보안 유지
데이터 실시간 처리, 통합 관리, 표준화 가능
데이터베이스의 전문가 부족
전산화 비용 증가
파일의 백업과 회복이 어려움
시스템이 복잡합

 

3. 데이터 입·출력

데이터 입·출력
소프트웨어의 기능을 구현하기 위해 데이터베이스에 데이터를 입력, 출력하는 작업을 의미한다.

 

SQL(Structured Query Language; 구조화 질의어) : 국제 표준 데이터베이스 언어로 관계형 데이터베이스를 지원하는 언어로 채택하고 있다. 데이터 정의어(DDL), 조작어(DML), 제어어(DCL)로 구분된다.

 

데이터 접속 : 소프트웨어의 기능 구현을 위해 프로그래밍 코드와 데이터베이스의 데이터를 연결하는 것을 의미한다. 관련 기술은 다음과 같다.

  • SQL Mapping : 프로그래밍 코드 내에 SQL을 직접 입력하여 DBMS의 데이터에 접속하는 기술이다. 관련 프레임워크로는 JDBC, ODBC, MyBatis 등이 있다.
  • ORM(Object-Relational Mapping) : 객체지향 프로그래밍의 객체와 관계형 데이터베이스의 데이터를 연결하는 기술이다. 관련 프레임워크에는 JPA, Hibernate, Django 등이 있다.

 

트랜잭션(Transaction)

데이터베이스의 상태를 변화시키는 하나의 논리적 기능을 수행하기 위한 작업의 단위 또는 한꺼번에 수행되어야 할 일련의 연산을 의미한다.

트랜잭션을 제어하기 위해 사용하는 명령어를 TCL(Transaction Control Language)이라고 하며, TCL의 종류는 다음과 같다.

  • COMMIT : 트랜잭션 처리가 정상적으로 종료되어 트랜잭션이 수행한 변경 내용을 데이터베이스에 반영하는 명령어이다.
  • ROLLBACK : 트랜잭션 처리가 비정상적으로 종료되어 데이터베이스의 일관성이 깨졌을 때 트랜잭션이 행한 모든 변경 작업을 취소하고 이전 상태로 되돌리는 명령어이다.
  • SAVEPOINT : 트랜잭션 내에 ROLLBACK 할 위치인 저장점을 지정하는 명령어이다.

 

절차형 SQL

프로그래밍 언어와 같이 연속적인 실행이나 분기, 반복 등의 제어가 가능한 SQL로 단일 SQL 문장으로 처리가 어려운 연속적인 작업을 처리하는 경우 적합하다.

BEGIN ~ END 형식으로 작성되는 블록 구조로 되어 있기 때문에 기능별 모듈화가 가능하다.

절차형 SQL의 종류

  • 프로시저 (Procedure) : 특정 기능을 수행하는 일종의 트랜잭션 언어로 호출을 통해 미리 저장해 놓은 SQL 작업을 수행한다.
  • 트리거 (Trigger) : 데이터의 입력, 갱신, 삭제 등의 이벤트가 발생할 때마다 자동으로 수행된다.
  • 사용자 정의 함수 : 프로시저와 유사하게 SQL을 사용하여 일련의 작업을 연속적으로 처리하며, 종료 시 예약어 Return을 사용하여 처리 결과를 단일값으로 반환한다.