Notice
Recent Posts
Recent Comments
Link
일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
1 | 2 | 3 | 4 | |||
5 | 6 | 7 | 8 | 9 | 10 | 11 |
12 | 13 | 14 | 15 | 16 | 17 | 18 |
19 | 20 | 21 | 22 | 23 | 24 | 25 |
26 | 27 | 28 | 29 | 30 | 31 |
Tags
- 프로그래머스
- RealmSwift
- JSONParser
- cocoapods
- Decodable
- dynamic height
- storybaord
- 정보처리기사 실기
- JSONSerialization
- parse
- Custom PageViewController
- 정보처리기사 실기 요약본
- IOS
- 티스토리챌린지
- programmers
- issecuretextentry
- Pod
- CustomCode
- JSON
- swift
- Xcode
- PageViewController
- 2018 KAKAO BLIND RECRUITMENT
- 정보처리기사
- Codable
- pbxfilesystemsynchronizedrootgroup
- pbxgroup
- 위클리챌린지
- SwiftGen
- UITableView
Archives
- Today
- Total
iOS 개발일기
[정보처리기사 실기] 08. SQL 응용 본문
데이터 정의어(DDL; Data Define Language)
- DB 구조, 데이터 형식, 접근 방식 등 DB를 구축하거나 수정할 목적으로 사용하는 언어
- 종류
- CREATE : Schema, Domain, Table, View, Index 정의
- ALTER : Table에 대한 정의를 변경하는 데 사용
- DROP : Schema, Domain, Table, View, Index 삭제
- CASCADE : 제거할 요소를 참조하는 다른 모든 개체를 함께 제거
- RESTRICT : 다른 개체가 제거할 요소를 참조 중일 때는 제거 취소
스키마(Schema)
- 데이터베이스와 구조와 제약 조건에 관한 전반적 명세를 기술한 것
- 개체(Entity), 속성(Attribute), 관계(Relationship) 및 데이터 값들이 갖는 제약 조건 등에 관해 전반적으로 정의
도메인(Domain)
- 하나의 속성이 취할 수 있는 동일한 유형의 원자값들의 집합
- 특정 속성에서 사용할 데이터의 범위를 사용자가 정의하는 자용자 정의 데이터 타입
테이블(Table)
- 데이터베이스의 설계 단계에서는 테이블을 주로 릴레이션(Relation)이라 부르고, 조작이나 검색 시에는 테이블(Table)이라 부른다.
뷰(View)
- 하나 이상의 기본 테이블로부터 유도되는 이름을 갖는 가상 테이블
- 테이블은 물리적으로 구현되어 실제로 데이터가 저장되지만, 뷰는 물리적으로 구현되지 않는다.
인덱스(Index)
- 검색 시간을 단축시키기 위해 만든 보조적인 데이터 구조
데이터 제어어(DCL, Data Control Language)
- 데이터의 보안, 무결성, 회복, 병행 제어 등을 정의하는 데 사용하는 언어
- 종류
- COMMIT : 트랜잭션 처리가 정상적으로 완료된 후, 트랜잭션이 수행한 내용을 데이터베이스에 반영
- ROLLBACK : 데이터베이스 조작 작업이 비정상적으로 종료되었을 때, 원래의 상태로 복구
- SAVEPOINT : 트랜잭션 내에 ROLLBACK 할 위치인 저장점을 지정하는 명령어
- GRANT : 데이터베이스 사용자에게 사용 권한을 부여
- REVOKE : 데이터베이스 사용자의 사용 권한을 취소
트랜잭션 제어어(TCL; Transaction Control Language)
- COMMIT, ROLLBACK, SAVEPOINT는 트랜잭션을 제어하는 용도로 사용되므로 TCL로 분류하기도 한다.
데이터 조작어(DML; Data Manipulation Language)
- 데이터베이스 사용자가 저장된 데이터를 실질적으로 관리하는데 사용되는 언어
- 종류 : SELECT(조회), INSERT(추가), DELETE(삭제), UPDATE(갱신)
그룹 함수
- GROUP BY 절에 지정된 그룹별로 속성의 값을 집계할 때 사용
- 종류
- COUNT() : 튜플의 수
- SUM() : 합계
- AVG() : 평균
- MAX() : 최대값
- MIN() : 최소값
- STDDEV() : 표준편차
- VARIANCE() : 분산
- ROLLUP(X, Y, ...) : 인수로 주어진 속성을 대상으로 그룹별 소계를 구하는 함수
- CUBE(X, Y, ...) : ROLLUP과 유사한 형태이지만, CUBE는 인수로 주어진 속성을 대상으로 모든 조합의 그룹별 소계를 구함
WINDOW 함수
- GROUP BY 절을 이용하지 않고, 함수의 인수로 지정한 속성의 값을 집계
- 종류
- ROW_NUMBER() : 윈도우별로 각 레코드에 대한 일련번호를 반환
- RANK() : 윈도우별로 순위를 반환하며, 공동 순위를 반영
- DENSE_RANK() : 윈도우별로 순위를 반환하며, 공동 순위를 무시하고 순위를 부여
JOIN
- 2개의 릴레이션에서 연관된 튜플들을 결합하여, 하나의 새로운 릴레이션을 반환
INNER JOIN
- EQUI JOIN과 NON-EQUI JOIN으로 구분
- 조건이 없는 INNER JOIN을 수행하면 CROSS JOIN과 동일한 결과를 얻을 수 있다.
- CROSS JOIN(교차 조인)
- 조인하는 두 테이블에 있는 튜플들의 순서쌍을 결과로 반환
- 교차 조인의 결과로 반환되는 테이블의 행의 수는 두 테이블의 행 수를 곱한 것과 같다.
- EQUI JOIN
- JOIN 대상 테이블에서 공통 속성을 기준으로 =(equal) 비교에 의해 같은 값을 가지는 행을 연결하여 결과를 생성
- 중복된 속성을 제거하여 같은 속성을 한 번만 표기하는 방법을 NATURAL JOIN이라고 한다.
- 연결 고리가 되는 공통 속성을 JOIN 속성이라고 한다.
- NON-EQUI JOIN
- JOIN 조건에 = 조건이 아닌 나머지 비교 연산자(>, <, <>, >=, <=) 연산자를 사용하는 JOIN 방법
OUTER JOIN
- 릴레이션에서 JOIN 조건에 만족하지 않는 튜플도 결과로 출력하기 위한 JOIN 방법
- LEFT OUTER JOIN, RIGHT OUTER JOIN, FULL OUTER JOIN
프로시저(Procedure)
- SQL을 사용하여 작성한 일련의 작업을 저장해두고 호출을 통해 원할 때마다 저장한 작업을 수행하도록 하는 절차형 SQL
- 데이터베이스에 저장되어 수행되기 때문에 저장 프로시저(Stored Procedure)라도고 불린다.
- 시스템의 일일 마감 작업, 일괄(Batch) 작업 등에 주로 사용된다.
- 구성
- DECLARE : 프로시저의 명칭, 변수, 인수, 데이터 타입을 정의하는 선언부
- BEGIN / END : 프로시저의 시작과 종료
- CONTROL : 조건문 또는 반복문이 삽입되어 순차적으로 처리
- SQL : DML, DCL이 삽입되어 데이터 관리를 위한 CRUD 작업 수행
- EXCEPTION : BEGIN - END 안의 구문 실행 시 예외가 발생하면 이를 처리하는 방법 정의
- TRANSACTION : 수행된 데이터 작업들을 DB에 적용할지 취소할지를 결정하는 처리부
트리거(Trigger)
- 데이터베이스 시스템에서 데이터의 삽입, 갱신, 삭제 등의 이벤트가 발생할 때 관련 작업이 자동으로 수행되게 하는 절차형 SQL
- 데이터베이스에 저장되며, 데이터 변경 및 무결성 유지, 로그 메시지 출력 등의 목적으로 사용
- DCL(데이터 제어어)을 사용할 수 없으며, DCL이 포함된 프로시저나 함수를 호출하는 경우에 오류 발생
- 구성
- DECLARE : 트리거의 명칭, 변수 및 상수, 데이터 타입을 정의하는 선언부
- EVENT : 트리거가 실행되는 조건 명시
- BEGIN / END : 터리거의 시작과 종료
- CONTROL : 조건문 또는 반복문이 삽입되어 순차적으로 처리
- SQL : DML문이 삽입되어 데이터 관리를 위한 CRUD 작업 수행
- EXCEPTION : BEGIN - END 안의 구문 실행 시 예외가 발생하면 이를 처리하는 방법 정의
사용자 정의 함수
- 프로시저와 유사하게 SQL을 사용하여 일련의 작업을 연속적으로 처리하지만, 종료 시 처리 결과로 단일값만을 변환하는 절차형 SQL
- 데이터베이스에 저장되어 조회, 삽입, 삭제, 갱신 등 DML 문의 호출에 의해 실행
- 예약어 RETURN을 통해 단일값을 반환하며, 출력 파라미터가 없다.
- 구성
- DECLARE : 사용자 정의 함수의 명칭, 변수 및 상수, 데이터 타입을 정의하는 선언부
- BEGIN / END : 사용자 정의 함수의 시작과 종료
- CONTROL : 조건문 또는 반복문이 삽입되어 순차적으로 처리
- SQL : SELECT 문이 삽입되어 데이터 조회 작업 수행
- EXCEPTION : BEGIN - END 안의 구문 실행 시 예외가 발생하면 이를 처리하는 방법 정의
- RETURN : 호출 프로그램에 반환할 값이나 변수 정의
제어문
- 위에서 아래로 차례대로 실행되는 절차형 SQL의 진행 순서를 변경하기 위해 사용하는 명령문
- 종류 : IF, LOOP 등
커서(Cursor)
- 쿼리문의 처리 결과가 저장되어 있는 메모리 공간을 가리키는 포인터(Pointer)
- 커서의 수행은 열기(Open), 패치(Fetch), 닫기(Close)의 세 단계로 진행
묵시적 커서(Implicit Cursor)
- DBMS에 의해 내부에서 자동으로 생성되어 사용되는 커서
- 커서의 속성을 조회하여 사용된 쿼리 정보를 열람하는 것이 가능
- 수행된 쿼리문의 정상적인 수행 여부를 확인하기 위해 사용
- 종류
- SQL%FOUND : 쿼리 수행의 결과로 패치(Fetch)된 튜플 수가 1개 이상이면 참
- SQL%NOTFOUNT : 쿼리 수행의 결과로 패치(Fetch)된 튜플 수가 0개이면 참
- SQL%ROWCOUNT : 쿼리 수행의 결과로 패치(Fetch)된 튜플 수 반환
- SQL%ISOPEN
- 커서가 열린(Open) 상태이면 참
- 묵시적 커서는 자동으로 생성된 후 자동으로 닫히기 때문에 항상 거짓
명시적 커서(Explicit Cursor)
- 사용자가 직접 정의해서 사용하는 커서
- 쿼리문의 결과에 저장하여 사용함으로써 동일한 쿼리가 반복 수행되어 데이터베이스 자원이 낭비되는 것을 방지
- 명시적 커서를 사용하기 위해서는 열기(Open) 단계 전 선언(Declare)해야 한다.
동적 SQL(Dynamic SQL)
- 다양한 조건에 따라 SQL 구문을 동적으로 변경하여 처리할 수 있는 SQL 처리 방식
- 사용자로부터 SQL 문의 일부 또는 전부를 입력받아 실행할 수 있다.
- 응용 프로그램 수행 시 SQL이 변형될 수 있으므로, 프리컴파일(Precompile) 할 때 구문 분석, 접근 권한 확인 등이 불가
- 정적 SQL에 비해 속도가 느리지만, 상황에 따라 다양한 조건을 첨가하는 등 유연한 개발 가능
SQL 테스트
- SQL이 작성 의도에 맞게 원하는 기능을 수행하는지 검증하는 과정
- 정상적으로 생성된 절차형 SQL은 디버깅을 통해 로직을 검증하고, 결과를 통해 최종적으로 확인
단문 SQL 테스트
- SQL 코드를 직접 실행한 후 결과를 확인, 간단히 테스트 가능
- DDL, DML, DCL이 포함되어 있는 SQL과 TCL을 테스트하는 것
- DDL이 작성된 개체는 DESCRIBE 명령어를 이용하여 속성, 자료형, 옵션 등 확인 가능
- DML로 변경한 데이터는 SELECT 문으로 데이터의 정상적인 변경 여부 확인 가능
- DCL로 설정된 사용자 권한은 사용자 권한 정보가 저장된 테이블을 조회하여 확인 가능
절차형 SQL 테스트
- 프로시저, 사용자 정의 함수, 트리거 등의 절차형 SQL은 디버깅을 통해 기능의 접합성 여부 검증 및 실행을 통해 결과 확인
- 많은 코드로 구성된 절차형 SQL의 특성상 오류 및 경고 메시지가 상세히 출력되지 않으므로 SHOW 명령어를 통해 오류 내용을 확인하고 문제 수정
ORM(Object-Relational Mapping)
- 객체 지향 프로그래밍의 객체(Object)와 관계형 데이터베이스의 데이터를 연결하는 기술
- 가상의 객체지향 데이터베이스를 만들어 프로그래밍 코드와 데이터 연결
- ORM으로 생성된 가상의 객체지향 데이터베이스는 프로그래밍 코드 또는 데이터베이스와 독립적으로 재사용 및 유지보수 용이
- 한계
- 프레임워크가 자동으로 SQL을 작성하기 때문에 의도대로 SQL이 작성되었는지 확인 필요
- 객체지향적인 사용을 고려하고 설계된 데이터베이스가 아닌 경우, 프로젝트가 크고 복잡해질수록 ORM 적용이 어렵다.
쿼리 성능 최적화
- 데이터 입출력 애플리케이션의 성능 향상을 위해 SQL 코드를 최적화하는 것
- 쿼리 성능을 최적화하기 전에 성능 측정 도구인 APM을 사용하여 최적화할 쿼리를 선정
- 최적화할 쿼리에 대해 옵티마이저가 수립한 실행 계획을 검토하고 SQL 코드와 인덱스 재구성
옵티마이저(Optimizer)
- 작성된 SQL이 가장 효율적으로 수행되도록 최적의 경로를 찾아주는 모듈
- 종류
- RBO(Rule Based Optimizer) : 데이터베이스 관리자(DBA)가 사전에 정의해둔 규칙에 의거하여 경로를 찾는 규칙 기반 옵티마이저
- CBO(Cost Based Optimizer) : 입출력 속도, CPU 사용량, 블록 개수, 개체의 속성, 튜플 개수 등을 종합하여 각 DBMS 마다 고유의 알고리즘에 따라 산출되는 비용으로 최적의 경로를 찾는 비용 기반 옵티마이저
'메모장 > 정보처리기사 실기' 카테고리의 다른 글
[정보처리기사 실기] 09. 소프트웨어 보안 구축 (0) | 2024.10.13 |
---|---|
[정보처리기사 실기] 07. 애플리케이션 테스트 관리 (0) | 2024.10.07 |
[정보처리기사 실기] 06. 화면 설계 (0) | 2024.10.06 |
[정보처리기사 실기] 05. 인터페이스 구현 (0) | 2024.10.06 |
[정보처리기사 실기] 04. 서버 프로그램 구현 (0) | 2024.10.06 |