▶ 034 자료 구조
자료 구조
프로그램에서 사용하기 위한 자료를 기억장치 공간 내에 저장하는 방법과 저장된 그룹 내에 존재하는 자료 간의 관계, 처리 방법 등을 연구 분석하는 것
- 자료의 표현과 그것과 관련된 연산
- 일련의 자료들을 조직하고 구조화 하는 것
- 어떠한 자료 구조에서도 필요한 모든 연산들을 처리할 수 있음
- 자료 구조에 따라 프로그램 실행시간이 달라짐
자료 구조의 분류
선형 구조(Linear Structure)
1. 배열(Array)
동일한 자료의 데이터들이 같은 크기로 나열되어 순서를 갖고 있는 집합
- 정적인 자료 구조로 기억장소의 추가가 어려움
- 데이터 삭제 시 데이터가 저장되어 있던 기억장소는 빈 공간으로 남아있어 메모리의 낭비 발생
- 반복적인 데이터 처리 작업에 적합한 구조
- 데이터마다 동일한 이름의 변수를 사용하여 처리 간편
- 사용한 첨자의 개수에 따라 n차원 배열이라 부름
- a는 변수 이름
- '[숫자]' 는 첨자에 해당
- 하나의 사각형은 하나의 기억장소
2. 선형 리스트(Linear List)
일정한 순서에 의해 나열된 자료 구조
- 배열을 이용하는 연속 리스트와 포인터를 이용하는 연결 리스트로 구분
*포인터(Pointer) : 현재의 위치에서 다음 노드의 위치를 알려주는 요소
• 연속 리스트(Contiguous List)
배열과 같이 연속되는 기억장소에 저장되는 자료 구조
- 기억장소를 연속적으로 배정받기 때문에 기억장소 이용 효율은 밀도가 1로서 가장 좋음
*밀도가 1 : 기억장소를 빈공간없이 꽉 차게 사용한다.
- 중간에 데이터를 삽입하기 위해서는 연속된 빈 공간이 있어야 하며, 삽입, 삭제 시 자료의 이동 필요
• 연결 리스트(Linked List)
자료들을 반드시 연속적으로 배열시키지는 않고 임의의 기억공간에 기억시키되, 자료 항목의 순서에 따라 노드의 포인터 부분을 이용해 서로 연결시킨 자료구조
*노드(Node) : 자료를 저장하는 데이터 부분과 다음 노드를 가리키는 포인터인 링크 부분으로 구성
- 노드의 삽입 삭제 작업이 용이
- 기억 공간이 연속적으로 놓여 있지 않아도 저장 가능
- 연결을 위한 링크 부분이 필요해 기억 공간의 이용 효율이 좋지 않음
- 연결을 위한 포인터를 찾는 시간이 필요해 접근 속도 느림
- 중간 노드 연결이 끊어지면 그 다음 노드를 찾기 힘듦
3. 스택(Stack)
리스트의 한쪽 끝으로만 자료의 삽입, 삭제 작업이 이루어지는 자료 구조
- 가장 나중에 삽입된 자료가 가장 먼저 삭제 됨 = 후입선출(LIFO; Last In First Out) 방식
- 스택의 모든 기억 공간이 꽉 채워져 잇는 상태에서 데이터 삽입 시. 오버플로(Overflow) 발생
- 더 이상 삭제할 데이터가 없는 상태에서 데이터 삭제 시. 언더플로(Underflow) 발생
4. 큐(Queue)
리스트의 한쪽에서는 삽입 다른 한쪽에서는 삭제가 이루어지도록 구성한 자료 구조
- 가장 먼저 삽입된 자료가 가장 먼저 삭제 됨 = 선입선출(FIFO; First In First Out) 방식
- 시작과 끝을 표시하는 2개의 포인터
- 운영체제의 작업 스케줄링에 사용
비선형 구조(Non-Linear Structure)
1. 트리(Tree)
정점(Node, 노드)과 선분(Branch, 가지)을 이용하여 사이클을 이루지 않도록 구성한 그래프의 특수한 형태
- 노드 : 하나의 기억 공간
- 링크 : 노드와 노드를 연결하는 선
- 족보, 조직도 등을 표현하기에 적합
- 노드(Node) : 트리의 기본 요소 ex) A, B, C, D, E, F, G, H, I, J
- 근 노드(Root Node) : 트리의 맨 위에 있는 노드 ex) A
- 디그리(Degree, 차수) : 각 노드에서 뻗어 나온 가지의 수 ex) A=2, B=2, E=1
- 단말 노드(Terminal Node) = 잎 노드(Leaf Node) : 자식이 하나도 없는 노드 ex) F, G
- 자식 노드(Son Node) : 어떤 노드에 연결된 다음 레벨의 노드들 ex) D의 자식 노드 : H, I
- 부모 노드(Parent Node) : 어떤 노드에 연결된 이전 레벨의 노드들 ex) H,I의 부모 노드 : D
- 형제 노드(Brother Node, Sibling) : 동일한 부모를 갖는 노드들 ex) H의 형제 노드 : I
- 트리의 디그리 : 노드들의 디그리 중에서 가장 많은 수 ex) 디그리2가 최대니 앞 트리의 디그리는 2
▶ 035 데이터저장소 / 데이터베이스 / DBMS
데이터저장소
소프트웨어 개발 과정에서 다루어야 할 데이터들을 논리적인 구조로 조직화하거나, 물리적인 공간에 구축한 것을 의미
- 논리 데이터저장소와 물리 데이터저장소로 구분됨
- 논리 데이터저장소 : 데이터 및 데이터 간의 연관성, 제약조건을 식별하여 논리적인 구조로 조직화 한것
- 물리 데이터저장소 : 논리 데이터저장소에 저장된 데이터와 구조들을 하드웨어적인 저장장치에 저장한 것
- 데이터저장소의 구축 과정과 DB 구축 과정은 동일
데이터베이스 / 중요★
특정 조직의 업무를 수행하는 데 필요한 상호 관련된 데이터들의 모임으로 다음과 같이 정의 할 수 있음
- 통합된 데이터(Integrated Data) : 자료의 중복을 최소화한 데이터의 모임
- 저장된 데이터(Stored Data) : 컴퓨터가 접근할 수 있는 저장 매체에 저장된 자료
- 운영 데이터(Operational Data) : 조직의 고유한 업무를 수행하는 데 존재 가치가 확실하고 없어서는 안 될 반드시 필요한 자료
- 공용 데이터(Shared Data) : 여러 응용 시스템들이 공동으로 소유하고 유지하는 자료
DBMS(DataBase Management System)
사용자와 데이터베이스 사이에서 사용자의 요구에 따라 정보를 생성해주고, DB를 관리해 주는 소프트웨어
- 기존의 파일 시스템이 갖는 데이터의 종속성과 중복성의 문제를 해결하기 위해 제한된 시스템
- DBMS의 필수 기능 : 정의, 조작, 제어
• 정의 기능
모든 응용 프로그램들이 요구하는 데이터 구조를 지원하기 위해 DB에 저장될 데이터 형과 구조에 대한 정의, 이용 방식, 제약 조건 등을 명시하는 기능
응용 P ↔ DB
• 조작기능
데이터 검색, 갱신, 삽입 등을 체계적으로 처리하기 위해 사용자와 DB간의 인터페이스 수단을 제공하는 기능
사용자 ↔ DB
• 제어 기능
- 데
이터 무결성이 유지되도록 제어
- 보안 유지, 권한 검사- 여러 사용자가 DB를 동시에 접근해 데이터를 처리 할 때 처리 결과가 항상 정확성을 유지하도록 병형제어
DBMS의 장 단점 / 중요★
장점 | 단점 |
- 데이터의 논리적, 물리적 독립성 보장 - 데이터의 중복 피할 수 있음, 기억 공간 절약 - 저장된 자료를 공동으로 이용할 수 있음 - 데이터의 무결성 유지 - 데이터의 일관성 유지 - 보안 유지 - 데이터 표준화 가능 - 데이터 통합 관리 가능 - 항상 최신의 데이터 유지 - 데이터 실시간 처리 가능 |
- DB의 전문가 부족 - 전산화 비용 증가 - 대용량 디스크로의 집중적인 접근으로 과부하 발생 - 파일의 Backup과 Recovery가 어려움 - 시스템 복잡 |
▶ 036 데이터 입출력
데이터 입출력
소프트웨어의 기능 구현을 위해 DB에 데이터를 입력하고, DB의 데이터를 출력하는 작업
- 데이터 입출력 위해 SQL 사용
SQL(Structured Query Language)
국제 표준 데이터베이스 언어
- 관계대수와 관계해석을 기초로 함
- SQL은 데이터 정의어(DDL), 데이터 조작어(DML), 데이터 제어어(DCL)로 구분
데이터 접속(Data Mapping)
소프트웨어의 기능 구현을 위해 프로그래밍 코드와 DB의 데이터를 연결하는 것
- SQL Mapping : 프로그래밍 코드 내에 SQL을 직접 입력해 DBMS의 데이터에 접속하는 기술 (JDBC, ODBC, MyBatis 등)
- ORM(Object-Relational Mapping) : 객체지향 프로그래밍의 객체와 관계형DB의 데이터를 연결하는 기술 (JPA, Hibernate, Django 등)
트랜잭션(Transaction)
DB 상태를 변환시키는 하나의 논리적 기능을 수행하기 위한 작업의 단위, 한꺼번에 모두 수행되어야 할 일련의 연산
- 트랜잭션을 제어하기 위해 사용하는 명령어 : TCL(Transaction Control Language)
- TCL의 종류 : COMMIT, ROLLBACK, SAVEPOINT
▶ 037 절차형 SQL
절차형 SQL
C, JAVA 등의 프로그래밍 언어와 같이 연속적인 실행이나 분기, 반복 등의 제어가 가능한 SQL
- 절차형 SQL의 종류 : 프로시저, 트리거, 사용자 함수
• 프로시저(Procedure)
특정 기능을 수행하는 일종의 트랜잭션 언어, 호출을 통해 실행되어 미리 저장해 놓은 SQL 작업 수행
• 트리거(Trigger)
DB 시스템에서 데이터의 입력, 갱신, 삭제 등의 이벤트가 발생할 때마다 관련 작업이 자동으로 수행
• 사용자 정의 함수
프로시저와 유사하게 SQL을 사용해 일련의 작업을 연속적으로 처리, 종료 시 예약어 Return 사용해 처리 결과를 단일값으로 반환
절차형 SQL의 테스트와 디버깅
디버깅을 통해 기능의 적합성 여부를 검증, 실행을 통해 결과를 확인하는 테스트 과정 수행
*디버깅 : 오류 잡는 작업
쿼리 성능 최적화
데이터 입출력 애플리케이션의 성능 향상을 위해 SQL 코드를 최적화 하는 것
- 쿼리 성능 최적화 전, APM을 사용해 최적화 할 쿼리 선정
- 최적화 할 쿼리에 대해 옵티마이저가 수립한 실행 계획 검토, SQL 코드와 인덱스 재구성