본문 바로가기
기타 CS

기술면접 준비 - 데이터베이스(2)

by 밝지 2023. 2. 22.
728x90
반응형

옵티마이저

SQL은 사용자의 요구사항만 기술할 뿐 처리과정에 대한 기술은 하지 않는다. 그러므로 사용자의 요구사항을 만족하는 결과를 추출할 수 있는 다양한 실행 방법이 존재할 수 있다. 다양한 실행 방법들 중에서 최적의 실행 방법을 결정하는 것이 바로 옵티마이저의 역할이다.

옵티마이저가 최적의 실행 방법을 결정하는 방식에 따라 규칙기반 옵티마이저(RBO, Rule Based Optimizer)와 비용기반 옵티마이저(CBO, Cost Based Optimizer)로 구분할 수 있다. 현재 대부분의 관계형 데이터베이스는 비용기반 옵티마이저만을 제공한다.






 

실행계획

실행계획(Execution Plan)이란 SQL에서 요구한 사항을 처리하기 위한 절차와 방법을 의미한다. 실행계획을 구성하는 요소에는 조인 순서(Join Order), 조인 기법(Join Method), 액세스 기법(Access Method), 최적화 정보(Optimization Information), 연산(Operation) 등이 있다.






 

절차형SQL

일반적인 개발 언어처럼 SQL에도 절차 지향적인 프로그램이 가능하도록 DBMS 벤더별로 PL(Procedural Language)/SQL(Oracle), SQL/PL(DB2), T-SQL(SQL Server) 등의 절차형 SQL을 제공하고 있다. 절차형 SQL을 이용하면 SQL문의 연속적인 실행이나 조건에 따른 분기처리를 이용하여 특정 기능을 수행하는 저장 모듈을 생성할 수 있다.

[PL/SQL]
Oracle의 PL/SQL은 Block 구조로 되어있고 Block 내에는 DML 문장과 QUERY 문장, 그리고 절차형 언어(IF, LOOP) 등을 사용할 수 있으며, 절차적 프로그래밍을 가능하게 하는 트랜잭션 언어이다. 이런 PL/SQL을 이용하여 다양한 저장 모듈(Stored Module)을 개발할 수 있다. 저장 모듈이란 PL/SQL 문장을 데이터베이스 서버에 저장하여 사용자와 애플리케이션 사이에서 공유할 수 있도록 만든 일종의 SQL 컴포넌트 프로그램이며, 독립적으로 실행되거나 다른 프로그램으로부터 실행될 수 있는 완전한 실행 프로그램이다. Oracle의 저장 모듈에는 Procedure, User Defined Function, Trigger가 있다.
PL/SQL은 block 구조로 되어 있어서 각 기능별로 모듈화가 가능하다. IF, LOOP 등의 절차형 언어를 사용하여 절차적인 프로그래밍이 가능하다. PL/SQL은 오라클에 내장되어 있으므로 오라클, PL/SQL을 지원하는 어떤 서버로도 프로그램을 옮길 수 있다. 





 

트리거

트리거란 특정한 테이블에 INSERT, UPDATE, DELETE와 같은 DML문이 수행되었을 때 데이터베이스에서 자동으로 동작하도록 작성된 프로그램이다. 사용자가 직접 호출하여 사용하는 것이 아니고 데이터베이스에서 자동으로 수행한다. 트리거는 테이블, 뷰, 데이터베이스 작업을 대상으로 정의할 수 있다. 

 

 

 

 

프로시저와 트리거의 차이점

프로시저는 begin ~ end 절 내에 commit, rollback과 같은 트랜잭션 종료 명령어를 사용할 수 있지만 데이터베이스 트리거는 begin ~ end 절 내에 사용할 수 없다.

 

 

 

 


클러스터

데이터 베이스를 여러 개의 서버로 구축하는 것입니다. 데이터베이스 클러스터는 고가용성, 병렬처리, 성능향상을 충족해야 합니다.

[고가용성]

고가용성이란 데이터베이스가 정지한 시간이 낮은 상태입니다. 데이터 베이스가 하나인 경우 SPOF(Single Poing Of Failure)가 발생할 수 있는데 이를 방지하기 위해 고가용성 클러스터를 사용합니다. 데이터베이스 장비를 2대 이상으로 구성하여 한 쪽에 장애가 발생하면 동일한 데이터를 가진 복제 데이터베이스(이중화된 데이터베이스)로 빠른 시간 내에 서비스를 재개할 수 있도록 하는 것입니다.

[병렬처리]

테이블에 데이터와 컬럼이 많아 SQL문이 복잡해지만 SQL문 처리에 시간이 많이 소요됩니다. 데이터를 DML을 고려하여 분산시키면 전체적인 성능을 향상할 수 있습니다. 데이터베이스 클러스터는 병렬처리를 할 수 있어야 합니다.

 

 

 

 

시퀀스

시퀀스는 유니크한 값을 생성해주는 오라클 객체입니다. 시퀀스를 생성하면 순차적으로 증가하는 컬럼의 값을 자동적으로 생성할 수 있습니다. 메모리에 캐시 되었을 때 시퀀스 값의 효율이 증가합니다. 

 

 

 

 

뷰는 사용자에게 접근이 허용된 자료만 제한적으로 보여주기 위해 하나 이상의 기본 테이블로부터 유도된 이름을 가지는 가상 테이블입니다. 뷰는 저장 장치 내에 물리적으로 존재하지는 않습니다. 뷰는 데이터 보정 작업, 처리 과정 시험 등 임시적인 작업을 위한 용도로 활용됩니다. 뷰는 조인문의 사용을 최소화해줍니다.

[뷰의 장점]

  • 논리적 데이터 독립성 제공
  • 접근 제어를 통한 자동 보안

[뷰의 단점]

  • 독립적인 인덱스를 가질 수 없다.
  • 뷰의 정의 변경은 불가능하다 (ALTER 불가능)
  • 뷰로 구성된 내용에 대한 삽입,삭제,갱신 연산에 제약이 있다.

 

 

 



정규화, 반정규화

정규화된 데이터베이스는 중복을 최소화하도록 설계된 데이터베이스다. 비정규화된 데이터베이스는 읽은 시간을 최적화하도록 설계된 데이터베이스다. 

[정규화 데이터베이스]

  • 같은 데이터는 데이터베이스 내에 하나만 저장한다.
  • 데이터 변경 시 이상 현상이 없고 저장 공간을 최소화한다.
  • 조인을 많이 해야하는 단점이 있다.

[비정규화 데이터베이스]

  • 시스템 성능 향상을 위해 의도적으로 정규화 원칙을 위배하는 행위
  • 조인 연산의 비용을 줄일 수 있어 데이터 조회가 빨라진다.
  • 데이터 간의 일관성이 깨질 수 있고 더 많은 저장 공간이 필요하며 데이터 갱신/사입 비용이 높다는 단점이 있다.

[비정규화 대상]

  • 자주 사용하는 테이블에 액세스하는 프로세스 수가 많고 항상 일정한 범위만 조회하는 경우
  • 테이블에 대량 데이터가 있고 대량의 범위를 자주 처리하는 경우, 성능 이슈가 있는 경우
  • 테이블에 지나치게 조인을 많이 해야하는 경우

 

 

 

 

SQL injection

SQL인젝션이란 악의적인 사용자가 보안상의 취약점을 이용하여 임의의 SQL문을 주입하고 실행되게 하여 데이터 베이스가 비정사적으로 동작하도록 조장하는 행위입니다. 


 

 

 

MySQL 특징

[장점]

  • 확장성: 다수의 서버 추가가 가능하여 확장이 쉽다.
  • 유연성: 다양한 프로그래밍 언어 및 플랫폼과 사용 가능
  • 오픈소스

[단점]

  • 초기 설정이 복잡
  • 제한된 기능



 

 

 

Redis

레디스는 NO-SQL의 하나로 캐시 방식으로 데이터를 빠르게 가져올 수 있는 DB이다. 데이터는 key-value 방식으로 저장하며 저장 가능한 데이터 타입으로는 문자열, 리스트, 해시, 셋 등 다양한 타입을 지원한다. 레디스는 시스템 메모리를 사용하는 키-값 데이터 스토어로 인메모리 상태에서 데이터를 처리함으로써 빠르고 가볍게 동작한다. 


 

 

 

카산드라 DB

아파치 카산드라는 NO-SQL의 하나로 서버 간의 대용량 데이터를 관리하기 위해 설계 되었다. 카산드라는 SQL과 비슷한 CQL(Cassandra Query Language)를 이용한다.

 

 

 

 

 

 

ORM (Object Relation Mapping)

ORM은 객체와 데이터베이스의 관계를 매핑해주는 도구이다. 프로그래밍 언어의 객체와 관계형 데이터베이스의 데이터를 자동으로 매핑해주는 도구이다. ORM을 사용하는 이유는 클래스를 이용하는 객체 지향 프로그래밍과 테이블을 이용하는 관계형 데이터베이스 간의 불일치 등 그 한계를 극복하기 위해서이다.

[ORM 사용 이유]

  • ORM을 이용하면 SQL문을 직접 작성하지 않고 엔티티를 객체로 표현할 수 있다.
  • 데이터 베이스 접근을 프로그래밍 언어의 관점에 맞출 수 있다.
  • 느슨하게 연결된 테스트에 용이한 애플리케이션을 만들 수 있다.

[ORM의 장점] 

  • 직관적인 코드 + 비즈니스 로직 집중 가능으로 가독성과 생산성이 향상된다.
  • SQL의 절차적이고 순차적인 접근이 아닌 객체 지향적인 접근으로 생산성이 증가한다.
  • 독립적으로 작성되고 객체를 재활용할 수 있기 때문에 재사용 및 유지보수의 편리성이 증가한다. 
  • DBMS에 대한 종속성이 감소한다. 

[ORM의 단점]

  • 프로젝트의 복잡성이 커지면 난이도가 높아진다.

 

 

 

728x90
반응형