7. SQL 응용
Chapter1. 데이터베이스 기본
1. 트랜잭션
- 개념 : 인가받지 않은 사용자로부터 데이터를 보장하기 위해 DBMS가 가져야 하는 특성이자, 데이터베이스 시스템에서 하나의 논리적 기능을 정상적으로 수행하기 위한 작업의 기본 단위
- 특성
| 특성 | 설명 | 주요기법 |
| 원자성 (Atomicity) |
- 트랜잭션을 구성하는 연산 전체가 모두 정상적으로 실행되거나 모두 최소되어야 하는 성질 | - Commit/Rollback - 회복성 보장 |
| 일관성 (Consistency) |
- 시스템이 가지고 있는 고정요소는 트랜잭션 수행 전과 트랜잭션 수행 후의 상태가 같아야 하는 성질 | - 무결성 제약조건 - 동시성 제어 |
| 격리성=고립성 (Isolation) |
- 동시에 실행되는 트랜잭션들이 서로 영향을 미치지 않아야 한다는 성질 | - 고립화 수준 |
| 영속성 (Durability) |
- 성공이 완료된 트랜잭션의 결과는 영속적으로 데이터베이스에 저장되어야 하는 성질 | - 회복 기법 |
- 상태 변화
- 활동 상태 : 초기 상태, 트랜잭션이 실행 중일 때 가지는 상태
- 부분 완료 상태 : 마지막 명령문이 실행된 후에 가지는 상태
- 완료 상태 : 트랜잭션이 성공적으로 완료된 후 가지는 상태
- 실패 상태 : 정상적인 실행이 더 이상 진행될 수 없을 때 가지는 상태
- 철회 상태 : 트랜잭션이 취소되고 데이터베이스가 트랜잭션 시작 전 상태로 환원된 상태

- 제어(TCL) : 트랜잭션의 결과를 허용하거나 취소하는 목적으로 사용되는 언어를 지칭
- TCL 명령어 : 커밋(트랜잭션 확정), 롤백(트랜잭션 취소), 체크포인트(저장시기 설정)
- 병행 제어(일관성 주요 기법) : 다수 사용자 환경에서 여러 트랜잭션을 수행할 때, 데이터베이스 일관성 유지를 위해 상호 작용을 제어하는 기법
- 목적
- 데이터베이스의 공유를 최대화
- 시스템의 활용도 최대화
- 데이터베이스의 일관성을 유지
- 사용자에 대한 응답시간 최소화
- 기법의 종류
- 로킹 : 하나의 트랜잭션을 실행하는 동안 특정 데이터 항목에 대해서 다른 트랜잭션이 동시에 접근하지 못하도록 상호배제 기능을 제공하는 기법
- 특징 : DB, 파일 레코드 등은 로킹 단위가 될 수 있음 + 로킹 단위가 작아지면 DB 공유도 증가 + 로킹 단위가 작아지면 로킹 오버헤드 증가 + 한꺼번에 로킹할 수 있는 객체의 크기를 로킹 단위라 함
- 낙관적 검증 : 트랜잭션이 어떠한 검증도 수행하지 않고 일단 트랜잭션을 수행하고, 트랜잭션 종료 시 검증을 수행하여 DB에 반영하는 기법
- 타임 스탬프 순서 : 트랜잭션과 트랜잭션이 읽거나 갱신한 데이터에 대해 트랜잭션이 실행을 시작하기 전에 타임 스탬프를 부여하여 부여된 시간에 따라 트랜잭션 작업을 수행하는 기법
- 다중버전 동시성 제어 : 트랜잭션의 타임스탬프와 접근하려는 데이터의 타임스탬프를 비교하여 직렬 가능성이 보장되는 적절한 버전을 선택하여 접근하도록 하는 기법
- 2PC : DB 동시성 제어 기술 중 하나로, 여러 개 분산 DB 시스템에서 트랜잭션의 일관성을 유지하기 위한 기법
- 로킹 : 하나의 트랜잭션을 실행하는 동안 특정 데이터 항목에 대해서 다른 트랜잭션이 동시에 접근하지 못하도록 상호배제 기능을 제공하는 기법
- 고립화 수준 : 다른 트랜잭션이 현재의 데이터에 대한 무결성을 해치지 않기 위해 잠금을 설정하는 정도
- 종류 : Read Uncommitted, Read Committed, Repeatable Read, Serializable Read
- 회복 기법 : 트랜잭션을 수행하는 도중 장애로 인해 손상된 DB를 손상되기 이전의 정상적인 상태로 복구시키는 작업
- REDO : DB가 비정상적으로 종료되었을 때 디스크에 저장된 로그를 분석하여 트랜잭션의 시작과 완료에 대한 기록이 있는 트랜잭션들의 작업을 재작업하는 기법
- DB의 내용 자체가 손상된 경우, 가장 최근의 복제본을 적재한 후 이후 일어난 변경만을 로그를 이용하여 재실행함으로써 DB를 복원하는 기법
- UNDO : DB가 비정상적으로 종료되었을 때 디스크에 저장된 로그를 분석하여 트랜잭션의 시작은 있지만, 완료 기록이 없는 트랜잭션들이 작업한 변경 내용을 모두 취소하는 기법
- DB 내용 자체는 손상되지 않았지만, 변경 중이거나 변경된 내용에 대한 신뢰성을 잃어버린 경우, 모든 변경 내용을 취소하여 복원하는 기법
- REDO : DB가 비정상적으로 종료되었을 때 디스크에 저장된 로그를 분석하여 트랜잭션의 시작과 완료에 대한 기록이 있는 트랜잭션들의 작업을 재작업하는 기법
- 목적
- DDL : 데이터 정의어
- 대상
- 스키마 : DB의 구조, 제약조건 등 정보를 담고 있는 기본적인 구조
- 외부 스키마 : 사용자나 개발자 관점에서 필요로 하는 DB의 논리적 구조(사용자 뷰를 나타냄)
- 개념 스키마 : DB의 전체적인 논리적 구조(전체적인 뷰)
- 내부 스키마 : 물리적 저장 장치의 관점에서 보는 DB 구조
- 테이블 : 데이터를 저장하는 항목인 필드들로 구성된 데이터의 집합체
- 뷰 : 논리 테이블로서 사용자에게 테이블과 동일(사용 관점에서)
- 장점 : 논리적 독립성 제공, 데이터 조작 연산 간소화, 보안 기능
- 단점 : 뷰 자체 인덱스 불가, 뷰 변경 불가, 데이터 변경 제약 존재
- 인덱스 : 검색 연산의 최적화를 위해 DB 내 값에 대한 주소 정보로 구성된 데이터 구조
- 스키마 : DB의 구조, 제약조건 등 정보를 담고 있는 기본적인 구조
- 명령어 : CREATE, ALTER, DROP, TRUNCATE
- 테이블 관련 DDL : CREATE TABLE~, ALTER TABLE~, DROP TABLE~, TRUNCATE TABLE~
- VIEW 관련 DDL : CREATE VIEW 뷰 이름 AS 조회쿼리, REPLACE VIEW 뷰 이름 AS 조회쿼리, DROP VIEW 뷰 이름
- 대상
- DML : 데이터 조작어
- 명령어 : SELECT, INSERT, UPDATE, DELETE
- SELECT 명령어
- SELECT절, WHERE 절, GROUP BY 절, HAVING 절
- 조인(Join) : 두 개 이상의 테이블을 연결하여 데이터를 검색하는 방법
- 내부 조인 : 공통 존재 컬럼의 값이 같은 경우를 추출하는 기법
- 외부 조인 : Left Outer Join, Right Outer Join, Full Outer Join
- 교차 조인 : 조인 조건이 없는 모든 데이터 조합을 추출하는 기법
- 셀프 조인 : 자기 자신에게 별칭을 지정한 후 다시 조인하는 기법
- 서브 쿼리 : SQL 문안에 포함된 또 다른 SQL문
- Ex) SELECT MAX(가격) AS 가격 FROM 도서가격 A, (SELECT 책번호 FROM 도서 WHERE 책명='자료구조') B WHERE A.책번호 = B.책번호
- 집합 연산자 : 테이블을 집합 개념으로 보고, 두 테이블 연산에 집합 연산자를 사용하는 방식
- 유형 : UNION, UNION ALL, INTERSECT, MINUS
- DCL : 데이터 제어어
- GRANT(권한 부여) 명령어 : GRANT 권한 ON 테이블 TO 사용자
- REVOKE(권한 회수) 명령어 : REVOKE 권한 ON 테이블 FROM 사용자
Chapter2. 응용 SQL
1. 다중 행 연산자
- 개념 : 다중 행 연산자는 서브 쿼리의 결과가 여러 개의 튜플을 반환하는 다중 행 서브쿼리에서 사용되는 연산자
- 종류 : IN, ANY, ALL, EXIST
2. 집계 함수
- 개념 : 여러 행 또는 테이블 전체 행으로부터 하나의 결괏값을 반환하는 함수
- GROUP BY 구문
- NULL값을 가지는 ROW는 제외하고 산출한다
- SELECT에서 사용하는 것과 같은 ALIAS 사용이 불가
- WHERE 구문 안에 포함되지 X
- WHERE 구문은 GROUP BY보다 먼저 실행되고, 대상이 되는 단일 행을 사전에 선별하는 역할을 한다
- HAVING 구문
- 종류 : COUNT, SUM, AVG, MAX, MIN, STDDEV(표준편차), VARIANCE(분산)
Chapter3. SQL 활용 및 최적화
1. 절차형 SQL
- 개념 : 일반적인 개발 언어처럼 SQL 언어에서도 절차 지향적인 프로그램이 가능하도록 하는 트랜잭션 언어
- 종류
- 프로시저 : 일련의 쿼리들을 마치 하나의 함수처럼 실행하기 위한 쿼리의 집합
- 사용자 정의 함수 : 일련의 SQL 처리를 수행하고, 수행 결과를 단일 값으로 반환할 수 있는 절차형 SQL
- 트리거 : DB 시스템에서 삽입, 갱신, 삭제 등의 이벤트가 발생할 때마다 관련 작업이 자동으로 수행되는 절차형 SQL
8. 서버 프로그램 구현
Chapter1. 개발환경 구축
1. 개발환경 구축
- 개발환경 구성 시 구현될 시스템의 요구사항의 명확한 이해가 필요
2. 개발 도구의 분류
- 빌드 도구, 구현 도구, 테스트 도구, 형상 관리 도구
3. 개발환경 구성요소
- 하드웨어 개발환경
- 서버 하드웨어 개발환경
- 웹 서버(Web Server)
- HTTP 또는 HTTPS를 통해 웹 브라우저에서 요청하는 HTML 문서나 오브젝트를 전송해주는 서비스 프로그램
- 웹 상의 정적 콘텐츠(CSS) 처리
- WEB-WAS-DB의 3계층 구조를 실무에서 활용
- 웰 애플리케이션 서버(WAS)
- 서버 계층에서 애플리케이션이 동작할 수 있는 환경을 제공하고 안정적인 트랜잭션 처리와 관리, 다른 이기종 시스템과 애플리케이션 연동을 지원하는 서버
- 동적 컨텐츠(Servlet, JSP)를 처리하기 위해 사용
- 데이터베이스 서버
- 데이터 수집, 저장을 위한 용도로 사용하는 서버
- 파일 서버
- 파일을 저장하고 관리하기 위한 서버(HDD, SSD 등 장치가 존재)
- 웹 서버(Web Server)
- 클라이언트 개발환경
- 클라이언트 프로그램 : 설치를 통해 사용자와 커뮤니케이션하는 프로그램
- 웹 브라우저 : 웹 서비스의 형태로 서버에서 웹 애플리케이션을 응답 시 브라우저를 통해 사용자와 커뮤니케이션
- 모바일 앱
- 모바일 웹
- 서버 하드웨어 개발환경
- 소프트웨어 개발환경
| 구분 | 설명 |
| 운영체제 | 서버의 하드웨어를 사용자 관점에서 편리하고 유용하게 사용하기 위한 소프트웨어 |
| 미들웨어 | 컴퓨터와 컴퓨터 간 연결을 쉽고 안전하게 할 수 있도록 해주고, 이에 대한 관리를 도와주는 소프트웨어 |
| DBMS | 사용자와 데이터베이스 사이에서 사용자의 요구에 따라 정보를 생성해주고, 데이터베이스를 관리해주는 소프트웨어 |
- 형상 관리
- 개념 : 소프트웨어 개발을 위한 전체 과정에서 발생하는 모든 항목의 변경 사항을 관리하기 위한 활동
- 목적
- 프로젝트 생명주기 동안 제품의 무결성과 변경에 대한 추적성을 확보할 수 있다
- 프로젝트 변경이 발생되었을 때 처리하는 메커니즘을 제공
- 절차 : 형상 식별 -> 형상 통제 -> 형상 감사 -> 형상 기록
- 소프트웨어 형상 관리 도구 유형
- 공유 폴더 방식(RCS, SCCS) : 매일 개발이 완료된 파일은 약속된 위치의 공유 폴더에 복사하는 방식
- RCS 특징 : CVS와 달리 소스 파일의 수정을 한 사람만으로 제한하여 다수의 사람이 파일의 수정을 동시에 할 수 없도록 파일 잠금 방식으로 형상을 관리
- 클라이언트/서버 방식(CVS, SVN) : 중앙에 버전 관리 시스템을 항시 동작시키는 방식
- CVS 특징 : 가장 오래된 형상 관리 도구 중 하나로서 중앙 집중형 서버 저장소를 두고 클라이언트가 접속해서 버전 관리를 실행하는 형상 관리 도구(변경사항 동기화, 파일 단위 관리)
- SVN 특징 : 중앙 집중형 클라이언트-서버 방식으로 CVS의 단점을 보완해 가장 널리 사용되고 있는 형상 관리 도구
- 분산 저장소 방식(Git) : 로컬 저장소와 원격 저장소로 분리되어 분산 저장하는 방식
- Git : 로컬/원격 형상 관리, 롤백 기능 지원
- 공유 폴더 방식(RCS, SCCS) : 매일 개발이 완료된 파일은 약속된 위치의 공유 폴더에 복사하는 방식
- 백업
- 개념 : 중요한 데이터나 정보를 안전하게 보관하기 위한 데이터를 복제하는 기법
- 유형
- 전체 백업 : 백업받고자 하는 데이터 전체에 대해 백업
- 차등 백업 : 마지막 전체 백업 이후 변경된 모든 데이터를 백업
- 증분 백업 : 정해진 시간을 기준으로 그 이후에 변경된 파일만 백업
Chapter2. 모듈 구현
1. 재사용
- 개념 : 목표 시스템의 개발 시간 및 비용 절감을 위하여 검증된 기능을 파악하고 재구성하여 시스템에 응용하기 위한 최적화 작업
- 종류
- 재공학 : 기존 SW를 버리지 않고 기능을 개선시키거나 기능을 새로운 SW로 재활용하는 SW 재사용 기법
- 재개발 : 기존 시스템 내용을 참조하여 완전히 새로운 시스템을 개발, 기존 시스템에 새로운 기능 추가, 기존 시스템의 기능을 변경하는 방법
2. 모듈 구현
- 개념 : 하나의 완전한 기능을 수행할 수 있는 독립된 실체
- 특징
- 독립성이 높은 모듈일수록 모듈 수정 시에도 다른 모듈에는 영향을 거의 미치지 않고, 오류 발생 시에도 쉽게 해결 가능
- 모듈의 독립성 측정 지표 : 결합도, 응집도(결합도 낮을수록, 응집도 높을수록, 모듈의 크기 작을수록 -> 독립성 높아짐)
- 모듈화 개념 : SW 성능을 향상시키거나 복잡한 시스템의 수정, 재사용, 유지 관리 등이 용이하도록 기능 단위의 모듈로 분해하는 설계 및 구현 기법
- 기법 : 루틴, 메인 루틴, 서브 루틴
3. 소프트웨어 모듈 응집도
- 개념 : 모듈의 독립성을 나타내는 정도로, 모듈 내부 구성요소 간 연관 정도(하나의 모듈은 하나의 기능을 수행할수록 응집도 높다)
- 유형 : 기능 응집도로 갈수록 응집도 높아짐
| 유형 | 설명 |
| 우연적 응집도 | 모듈 내부의 각 구성요소가 연관이 없을 경우의 응집도 |
| 논리적 응집도 | 유사한 성격을 갖거나 특정 형태로 분류되는 처리 요소들이 한 모듈에서 처리되는 경우의 응집도 |
| 시간적 응집도 | 연관된 기능이라기보다는 특정 시간에 처리되어야 하는 활동들을 한 모듈에서 처리할 경우의 응집도 |
| 절차적 응집도 | 모듈이 다수의 관련 기능을 가질 때 모듈 안의 구성요소들이 그 기능을 순차적으로 수행할 경우의 응집도 |
| 통신적 응집도 | 동일한 입력과 출력을 사용하여 다른 기능을 수행하는 활동들이 모여 있을 경우의 응집도 |
| 순차적 응집도 | 모듈 내에서 한 활동으로부터 나온 출력값을 다른 활동이 사용할 경우의 응집도 |
| 기능 응집도 | 모듈 내부의 모든 기능이 단일한 목적을 위해 수행되는 경우의 응집도 |
4. 소프트웨어 모듈 결합도
- 개념 : 모듈 내부가 아닌 외부의 모듈과의 연관도 또는 모듈 간의 상호의존성
- 유형 : 자료 결합도로 갈수록 결합도 낮아짐
| 유형 | 설명 |
| 내용 결합도 | - 다른 모듈 내부에 있는 변수나 기능을 다른 모듈에서 사용하는 경우의 결합도 - 하나의 모듈이 직접적으로 다른 모듈의 내용을 참조할 때 두 모듈은 내용적으로 결합되어 있는 경우의 결합도 |
| 공통 결합도 | - 파라미터가 아닌 모듈 밖에 선언되어 있는 전역 변수를 참조하고, 전역 변수를 갱신하는 식으로 상호 작용하는 경우의 결합도 - 공유되는 공통 데이터 영역을 여러 모듈이 사용할 때의 결합도 |
| 외부 결합도 | - 두 개의 모듈이 외부에서 도입된 데이터 포맷, 통신 프로토콜, 또는 디바이스 인터페이스를 공유할 경우의 결합도 - 외부 모듈에서 선언한 데이터를 외부의 다른 모듈에서 참조할 때의 결합도 |
| 제어 결합도 | - 어떤 모듈이 다른 모듈의 내부 논리 조직을 제어하기 위한 목적으로 제어 신호를 이용하여 통신하는 경우의 결합도 |
| 스탬프 결합도 | - 모듈 간의 인터페이스로 배열이나 객체, 구조 등이 전달되는 경우의 결합도 - 두 모듈이 동일한 자료 구조를 조회하는 경우의 결합도이며, 자료구조의 어떠한 변화는 모든 모듈에 영향을 미치게 됨 |
| 자료 결합도 | - 모듈 간의 인터페이스로 전달되는 파라미터를 통해서만 모듈 간의 상호 작용이 일어나는 경우의 결합도 - 한 모듈의 내용을 변경하더라도 다른 모듈에는 영향을 미치지 않는 상태의 가장 바람직한 결합도 |
5. 모듈 테스트
- 화이트박스 기법을 활용
- 대표적인 도구 xUnit 활용
- 종류
- jUnit : 자바 프로그래밍 언어용 단위 테스트 도구
- CppUnit : 자바의 jUnit을 C++로 구현한 단위 테스트 도구
- HttpUnit : 웹 브라우저 없이 웹사이트 테스트를 수행하는 단위 테스트 도구
Chapter3. 배치 프로그램 구현
배치 프로그램
- 개념 : 사용자와의 상호 작용 없이 일련의 작업들을 작업 단위로 묶어 정기적으로 반복 수행하거나 정해진 규칙에 따라 일괄 처리하는 방법
- 유형 : 이벤트 배치, 온디맨드 배치, 정기 배치
- 배치 스케줄러 : 일괄 처리를 위해 주기적으로 발생하거나 반복적으로 발생하는 작업을 지원하는 도구
- 종류
- 스프링 배치 : 스프링 프레임워크의 3대 요소를 모두 사용할 수 있는 대용량 처리를 제공하는 스케줄러 배치 애플리케이션
- 쿼츠 스케줄러 : 스프링 프레임워크에 플러그인되어 수행하는 작업과 실행 스케줄을 정의하는 트리거를 분리하여 유연성을 제공하는 오픈 소스 기반 스케줄러
- 종류
'자격증 > 정보처리기사' 카테고리의 다른 글
| [정처기 개념] 10. 애플리케이션 테스트 관리 (0) | 2025.07.04 |
|---|---|
| [정처기 개념] 9. 소프트웨어 개발 보안 구축 (2) | 2025.07.04 |
| [정처기 개념] 4. 통합 구현 ~ 5. 인터페이스 구현 (0) | 2025.07.02 |
| [정처기 개념] 3. 데이터 입출력 구현 (0) | 2025.07.01 |
| [정처기 개념] 2. 화면 설계 (0) | 2025.07.01 |
