2과목 - 소프트웨어 개발
1장. 데이터 입출력 구현
34. 자료 구조
자료 구조의 정의
- 효율적인 프로그램을 작성할 때 가장 우선적인 고려사항은 공간 효율성, 시간 효율성
- 자료 구조는 자료의 표현과 그것과 관련된 연산
- 자료 구조는 일련의 자료들을 조직하고 구조화하는 것
자료 구조의 분류
- 선형 구조 (Linear Structure)
- 배열
- 선형 리스트
- 연속 리스트
- 연결 리스트
- 스택
- 큐
- 데크
- 비선형 구조 (Non-Linear Structure)
- 트리
- 그래프
배열 (Array)
- 배열은 동일한 자료형의 데이터들이 순서를 갖고 있는 집합
- 반복적인 데이터 처리 작업에 적합한 구조
선형 리스트 (Linear List)
- 연속 리스트 (Contiguous List)
- 배열처럼 연속되는 기억장소에 저장되는 자료 구조
- 기억장소 이용 효율 (밀도) = 1
- 삽입, 삭제 시 자료의 이동 필요
- 연결 리스트 (Linked List)
- 자료들을 연속적으로 배열시키지 않고 포인터를 이용하여 서로 연결
- 노드의 삽입, 삭제 작업이 용이
- 기억장소 이용 효율이 좋지 않음
스택 (Stack)
- 리스트 한쪽 끝으로만 자료의 삽입, 삭제가 이루어지는 자료 구조
- LIFO (Last In First Out)
큐 (Queue)
- 리스트 한쪽에서는 삽입, 다른 한쪼겡서는 삭제 작업이 이루어지는 자료 구조
- FIFO (First In First Out)
트리 (Tree)
- 사이클을 이루지 않도록 구성한 그래프의 특수한 형태
35. 데이터저장소 / 데이터베이스 / DBMS
데이터저장소
- 데이터저장소는 논리 데이터저장소와 물리 데이터저장소로 구분
- 논리 데이터저장소 : 데이터 간 연관성, 제약조건을 식별하여 논리적인 구조로 조직화한 것
- 물리 데이터저장소 : 논리 데이터저장소에 저장된 데이터를 하드웨어적인 저장장치에 저장한 것
데이터베이스
- 데이터베이스 정의
- 통합된 데이터 (Integrated Data) : 자료의 중복을 배제한 데이터의 모임
- 저장된 데이터 (Stored Data) : 컴퓨터가 접근할 수 있는 저장 매체에 저장된 자료
- 운영 데이터 (Operational Data) : 업무를 수행하는 데 없어서는 안 될 반드시 필요한 자료
- 공용 데이터 (Shared Data) : 여러 응용 시스템들이 공동으로 소유하는 자료
DBMS (DataBase Management System, 데이터베이스 관리 시스템)
- DBMS란 사용자 요구에 따라 정보를 생성해주고, 데이터베이스를 관리해주는 소프트웨어
- 기존의 파일 시스템이 갖는 데이터의 종속성과 중복성의 문제를 해결하기 위해 제안된 시스템
- 모든 응용 프로그램들이 데이터베이스를 공용할 수 있도록 관리
- 필수 기능
- 정의 (Definition) : 데이터베이스에 저장될 데이터 타입 및 구조에 대해 정의
- 조작 (Manipulation) : 데이터 검색, 갱신, 삽입, 삭제 기능
- 제어 (Control) : 데이터 무결성이 유지되도록 제어
DBMS의 장단점
- 장점
- 데이터의 논리적, 물리적 독립성 보장
- 데이터 중복을 피할 수 있어 메모리 절약
- 데이터 일관성 및 무결성 유지
- 저장된 자료를 공동으로 이용할 수 있고, 항상 최신 데이터 유지
- 데이터 실시간 처리 가능
- 단점
- 데이터베이스 전문가 부족
- 전산화 비용이 증가하고, 복잡한 시스템
- 파일 백업 및 리커버리가 어려움
36. 데이터 입출력
데이터 입출력의 개요
- 단순 입력과 출력뿐만 아니라 데이터를 조작하는 모든 행위 (SQL 사용)
- 데이터 접속
- 데이터 입출력을 구현하기 위해 개발 코드 내에 SQL 삽입하거나, 객체와 데이터를 연결하는 것
- 트랜잭션 (Transaction)
- 데이터베이스 조작 시 한꺼번에 모두 수행되어야 할 일련의 연산들
SQL (Structured Query Language)
- 관계대수와 관계해석을 기초로 한 혼합 데이터 언어
- 데이터 정의어 (DDL)
- 데이터 조작어 (DML)
- 데이터 제어어 (DCL)
데이터 접속 (Data Mapping)
- 데이터 접속은 소프트웨어 기능 구현을 위해 프로그래밍 코드와 데이터베이스의 데이터를 연결하는 것
- SQL Mapping
- 프로그래밍 코드 내 SQL 직저 입력
- ex) JDBC, ODBC, MyBatis
- ORM (Object-Relational Mapping)
- 객체와 데이터베이스의 데이터를 연결하는 기술
- ex) JPA, Hibernate, Django
트랜잭션 (Transaction)
- 데이터베이스의 상태를 변환시키는 하나의 논리적 기능을 수행하기 위한 작업의 단위
- TCL (Transaction Control Language)
- COMMIT : 트랜잭션 처리가 정상적으로 종료되어 변경 내용을 데이터베이스에 반영
- ROLLBACK : 트랜잭션 처리가 비정상적으로 종료되어 변경 내용을 취소하고 이전 작업으로 되돌림
- SAVEPOINT : 트랜잭션 내 ROLLBACK 할 위치인 저장점을 지정
37. 절차형 SQL
절차형 SQL의 개요
- 절차형 SQL은 C나 JAVA 등의 프로그래밍 언어처럼 연속적인 실행이나 반복 등의 제어가 가능한 SQL
- 일반적인 프로그래밍 언어에 비해 효율은 떨어지지만 단일 SQL문으로 처리하기 어려운 연속적인 작업들을 수행하는 데 적합
- DBMS 엔진에서 직접 실행되므로 입출력 패킷이 적은 편
- 블록 구조 (BEGIN ~ END)로 되어있기 때문에 기능별 모듈화 가능
- 절차형 SQL의 종류
- 프로시저 (Procedure) : 호출을 통해 미리 저장해 놓은 SQL 작어 수행
- 트리거 (Trigger) : 데이터 입력, 삭제 등의 이벤트 발생 시 관련 작업이 자동으로 수행
- 사용자 정의 함수 : 프로시저와 유사하며 예약어 RETURN을 사용하여 처리 결과 반환
절차형 SQL의 테스트와 디버깅
- 절차형 SQL은 디버깅을 통해 기능의 적합성 여부를 검증
- 테스트 전에 생성을 통해 구문 오류나 참조 오류의 존재 여부 확인
- 정상적으로 생성된 절차형 SQL은 디버깅을 통해 로직 검증
쿼리 성능 최적화
- 쿼리 성능을 최적화하기 전에 APM (성능 측정 도구)을 사용하여 최적화할 쿼리 선정