스파이더 웹 개발

면접 예상 질문 - 데이터베이스 본문

Interview

면접 예상 질문 - 데이터베이스

스파이더웹 2022. 8. 12. 00:49
728x90
반응형

1. 데이터베이스 풀

Connection Pool

  • 애플리케이션의 스레드에서 데이터베이스에 접근하기위해 Connection이 필요
  • 데이터베이스와 Connection한 객체들을 미리 생성해 Pool에 저장해두었다가, 클라이언트의 요청이 들어올 때마다 사용/반환하는 방식

데이터베이스 접근 과정

  1. 웹 컨테이너가 실행되면 데이터베이스와 연결된 Connection 객체들을 미리 생성해 Pool에 저장
  2. 클라이언트 요청 시 Pool에서 Connection 객체를 가져와 데이터베이스 접근
  3. 요청 처리가 끝나면 사용된 Connection 객체를 다시 Pool에 반환

장점

  • 매 연결마다 Connection 객체를 생성/제거하는 비용 감소
  • 미리 생성된 Connection 객체를 사용하므로 데이터베이스 접근 시간 단축
  • Connection 수를 제한해 부하 조정

단점

  • Connection 또한 객체이므로 메모리 차지
  • Connection 개수를 잘 못 설정할 경우, 쓸모없는 Connection이 발생할 수 있음

Connection이 부족할 경우

  • 모든 Connection이 요청을 처리 중일 때, 해당 클라이언트의 요청을 대기 상태로 전환
  • Pool에 Connection 객체가 반환되면 순차적으로 요청을 처리

Thread Pool과 Connection Pool

  • WAS(Web Application Server)에서 Thread Pool과 Connection Pool의 Thread와 Connection의 수는 메모리와 직접적으로 관련이 있음
  • Connection과 Thread 수를 많이 설정하면 메모리를 많이 차지하고, 반대로 적게 설정할 경우 처리하지 못하는 대기 요청이 많아짐

2. 트랜잭션이란?

https://dyko615.tistory.com/31

@Transactional 알고 쓰자

@Transactional에 대해 알고 사용했을까..? rollback이 된다는 것 말고는 깊게 알지못하였다. 이번에 코드리뷰 멘토링을 통해 해당 내용에대해 알고써야하는것을 알게되었기에 이렇게 정리하게되었다.

dyko615.tistory.com

3. 트리거(Trigger) 란?

테이블에 대한 이벤트에 반응해 자동으로 실행되는 작업을 의미한다. 트리거는 INSERT, DELETE, UPDATE 같은 DML의 데이터 상태의 관리를 자동화하는 데 사용된다. 트리거를 사용하여 데이터 작업 제한, 작업 기록, 변경 작업 감사 등을 할 수 있다.

사용자가 직접 호출하는 것이 아닌 데이터베이스에서 자동으로 호출한다는것이 가장 큰 특징이다

4. 인덱스(index) 란?

인덱스란 테이블을 처음부터 끝까지 검색하는 방법인 FTS(Full Table Scan)과는 달리 인덱스를 검색하여 해당 자료의 테이블을 엑세스하는 방법
또는 데이터베이스에서 조회 및 검색을 더 빠르게 할 수 있는 방법/기술, 혹은 이에 쓰이는 자료구조 자체를 의미하기도 한다.

사용 이유

select 문을 사용하여 원하는 조건의 데이터 검색시 데이터양이 많다면 검색을 위한 자원의 소모가 큰데 이러한 경우에 인덱스를 사용한다
자주 조회되는 Column 에 대한 Index Table을 따로 만들어 SELECT 문이 들어왔을 때 Index 테이블에 있는 값들로 결과 값을 조회해 온다. 그래서 Index를 잘 사용한다면 "검색" 연산을 실행했을 때 성능을 올릴 수 있게 된다.


동작원리

1. 인덱스 테이블에서 조건에 포함된 값을 검색
2. 해당 값의 PK를 가지고 옴
3. 가지고온 PK를 원본 테이블에서 조회

DBMS에서의 Index (Index 자료구조)

일반적으로 B+Tree 자료구조로 관리한다


B+Tree 구조

B+Tree는 오직 leaf node에만 데이터를 저장하고 leaf node가 아닌 node에서는 자식 포인터만 저장한다.
그리고 leaf node끼리는 Linked list로 연결되어있다.

B+tree 사용 이유

  • 해시 테이블은 시간복잡도가 O(1)이라 검색속도가 매우빠르지만, 부등호(<,>)와 같은 연속적인 데이터를 위한 순차 검색이 불가능하기 때문에 사용에 적합하지 않다

Index 주의사항

  • 인덱스는 따로 테이블의 형태로 관리하기때문에 자원을 소모한다. 그러므로 무분별한 인덱스의 사용은 성능에 부정적인 영향을 미칠 수 있다.
  • 인덱스는 항상 정렬된 상태를 유지하기 때문에 원하는 값을 검색하는데 빠르지만, 새로운 값을 추가하거나 삭제, 수정하는 경우에는 쿼리문 실행 속도가 느려집니다.

5. 옵티마이저 란?

옵티마이저는 SQL을 가장 빠르고 효율적으로 수행할 최적의 처리경로를 생성해 주는 DBMS 내부의 핵심 엔진이다. 사용자가 SQL로 결과 집합을 요구하면, 이를 생성하는데 필요한 처리경로는 DBMS에 내장된 옵티마이저가 자동으로 생성해준다. 옵티마이저가 생성한 SQL 처리경로를 실행계획(Execution Plan)이라고 한다.

옵티마이저의 SQL 최적화 과정
1. 사용자가 요청한 쿼리 수행을 위해, 후보군이 될만한 실행계획을 찾는다.
2. 데이터 딕셔너리(Data Dictionary)에 미리 수집해 놓은 오브젝트 통계 및 시스템 통계정보를 이용해 각 실행계획의 예상 비용을 산정한다.
3. 각 실행계획을 비교하여 최저비용을 갖는 하나를 선택한다.

https://zangzangs.tistory.com/103

6. 정규화 란?

정규화(Normalization)는 불필요한 데이터를 제거하여 중복을 최소화 하게 구조화 한것을 의미한다 또한 정규화 되지않는 테이블에서 발생할 수 있는 이상현상을 방지하기 위함도 있다

제1 정규화

제 1 정규화란 테이블의 컬럼이 원자 값(하나의 값)을 갖도록 테이블을 분해 하는 것

참조&amp;amp;nbsp;https://mangkyu.tistory.com/110

위의 예시에서 추신수와 박세리는 여러개의 취미를 가지고있다. 이러한 부분으로 인하여 제 1정규화를 충족하지 못하기때문에 제 1정규화 과정을거쳐 테이블을 분해해야 한다

제 2정규화

제 2정규화란 제 1정규화를 진행한 테이블에 대해 완전 함수 종속을 만족하도록 테이블을 분해하는 것
완전 함수 종속이란? 기본키의 부분집합이 결정자가 되어서는 안된다는 것을 의미


위의 예시에서 기본키는 (학생번호, 강좌이름)으로 복합키 이다
그리고 (학생번호, 강좌이름)인 기본키는 강의실을 결정하고 있다. (학생번호, 강좌이름) → (강의실)
그런데 여기서 강의실이라는 컬럼은 기본키의 부분집합인 강좌이름에 의해 결정될 수 있다. (강좌이름) → (강의실)
또한 성적이라는 컬럼은 기본키의 부분집합인 학생번호에 의해 결정될 수 있다. (학생번호) → (성적)
그렇기 때문에 위의 테이블의 경우 다음과 같이 기존의 테이블에서 강의실을 분해하여 별도의 테이블로 관리하여
제2 정규형을 만족시킬 수 있다.


제 3정규화

제3 정규화란 제2 정규화를 진행한 테이블에 대해 이행적 함수 종속을 없애도록 테이블을 분해하는 것.
이행적 함수 종속은 A → B , B → C가 성립할 때 A → C가 성립되는 것을 의미한다

위의 예시에서 학생번호는 강좌이름을 결정하고, 강좌이름은 수강료를 결정하기때문에 제 3정규화를 거쳐 (학생번호, 강좌이름) / (강좌이름, 수강료) 각각 테이블을 분해해야한다

BCNF 정규화

BCNF 정규화란 제 3정규화를 진행한 테이블에 대해 모든 결정자가 후보키가 되도록 테이블을 분해하는 것

특강수강 테이블에서 기본키는 (학생번호, 특강이름)입니다. 그리고 (학생번호, 특강이름)은 교수를 결정하고 있다.
또한 여기서 교수는 특강이름을 결정하고 있다.
그런데 문제는 교수가 특강이름을 결정하는 결정자이지만, 후보키가 아니다. 그렇기 때문에 BCNF 정규화를
만족시키기 위해서 위의 테이블을 분해해야 하는데, 아래와 같이 특강신청 테이블과 특강교수 테이블로 분해할 수 있다.

7. 이상현상이란?

이상 현상은 테이블을 설계할 때 잘못 설계하여 데이터를 삽입, 삭제, 수정할 때 논리적으로 생기는 오류
이상 현상은 갱신 이상(Modification ANomaly), 삽입 이상(Insertion Anomaly), 삭제 이상(Deletion Anomaly)으로 구성된다.

1. 삽입 이상 : 자료를 삽입할 때 의도하지 않은 자료까지 삽입해야만 자료를 테이블에 추가가 가능한 현상

2. 갱신 이상 : 중복된 데이터 중 일부만 수정되어 데이터 모순이 일어나는 현상

3. 삭제 이상 : 어떤 정보를 삭제하면, 의도하지 않은 다른 정보까지 삭제되어버리는 현상


참조관련글
https://dev-coco.tistory.com/63?category=1009701

8. RDBMS 와 NoSQL 차이?

Databse란 일반적으로 컴퓨터 시스템에 전자 방식으로 저장된 구조화된 정보 또는 데이터의 체계적인 집합을 의미합니다.

DBMS란(DataBase Management System) 사용자와 데이터베이스 사이에서 사용자의 요구에 따라 정보를 생성해 주고 데이터베이스를 관리해 주는 소프트웨어입니다.

SQL이란(Strucured Query Language) 관계형 데이터베이스 관리 시스템의 데이터를 관리하기 위해 설계된 특수 목적의 프로그래밍 언어이며 관계형 데이터베이스 관리 시스템에서 자료의 검색과 관리, 데이터베이스 스키마 생성과 수정, 데이터베이스 객체 접근 조정 관리를 위해 고안되었습니다.

RDBMS

RDBMS의 저장방식은 SQL에 의해 저장되며, 정해진 스키마에 따라 데이터를 저장한다. 또한 RDBMS 관계형 데이터베이스 관리시스템을 의미하며 테이블들간의 관계를 맺고 모여있는 집합체로 이해할 수 있다.
이러한 관계를 나타내기 위해 외래키(foreign key)를 사용하여 테이블간 Join이 가능한게 RDBMS의 특징이다

RDBMS의 장점

  • 정해진 스키마에 따라 데이터를 저장하여야 하므로 명확한 데이터 구조를 보장하고 있다.
  • 또한 관계는 각 데이터를 중복없이 한 번만 저장할 수 있습니다.

RDBMS의 단점

  • 테이블 간 관계를 맺고 있어 시스템이 커질 경우 JOIN문이 많은 복잡한 쿼리가 만들어질 수 있습니다.
  • 성능 향상을 위해서는 서버의 성능을 향상 시켜야하는 Scale-up만을 지원합니다. 이로 인해 비용이 기하급수적으로 늘어날 수 있습니다.
  • 스키마로 인해 데이터가 유연하지 못합니다. 나중에 스키마가 변경 될 경우 번거롭고 어렵습니다.

NoSQL

NoSQL에서는 RDBMS와 달리 테이블간의 관계를 정의하지 않으며, 데이터 테이블은 그냥 하나의 테이블이고 테이블간의 관계를 정의하지 않기에 Join도 불가능하다
NoSQL은 점점 빅데이터의 등장으로 인해 데이터와 트래픽이 기하급수적으로 증가함에 따라 RDBMS에 단점인 성능을 향상시키기 위해서는 장비가 좋아야 하는 Scale-Up의 특징인 비용을 기하급수적으로 증가시키기 때문에 데이터 일관성은 포기하되 비용을 고려하여 여러 대의 데이터에 분산하여 저장하는 Scale-Out을 목표로 등장하였다

NoSQL 장점

  • NoSQL에서는 스키마가 없기 때문에 유연하며 자유로운 데이터 구조를 가질 수 있습니다. 언제든 저장된 데이터를 조정하고 새로운 필드를 추가할 수 있습니다.
  • 데이터 분산이 용이하며 성능 향상을 위한 Saclue-up 뿐만이 아닌 Scale-out 또한 가능합니다.

No SQL단점

  • 데이터 중복이 발생할 수 있으며 중복된 데이터가 변경 될 경우 수정을 모든 컬렉션에서 수행을 해야 합니다.
  • 스키마가 존재하지 않기에 명확한 데이터 구조를 보장하지 않으며 데이터 구조 결정가 어려울 수 있습니다.

RDBMS, NoSQL 언제 사용해야 될까요?

RDBMS는 데이터 구조가 명확하며 변경 될 여지가 없으며 명확한 스키마가 중요한 경우 사용하는 것이 좋습니다. 또한 중복된 데이터가 없어(데이터 무결성) 변경이 용이하기 때문에 관계를 맺고 있는 데이터가 자주 변경이 이루어지는 시스템에 적합합니다.

NoSQL은 정확한 데이터 구조를 알 수 없고 데이터가 변경/확장이 될 수 있는 경우에 사용하는 것이 좋습니다. 또한 단점에서도 명확하듯이 데이터 중복이 발생할 수 있으며 중복된 데이터가 변경될 시에는 모든 컬렉션에서 수정을 해야 합니다. 이러한 특징들을 기반으로 Update가 많이 이루어지지 않는 시스템이 좋으며 또한 Scale-out이 가능하다는 장점을 활용해 막대한 데이터를 저장해야 해서 Database를 Scale-Out를 해야 되는 시스템에 적합합니다.


9. ORM 이란?

Object-Relational Mapping 객체-관계 매핑

객체와 관계형 데이터베이스의 데이터를 자동으로 매핑 해주는 것을 말한다
ORM을 이용하면 SQL Query가 아닌 직관적인 코드(메소드)로서 데이터를 조작할수 있다

객체 - 관계형 테이블간의 불일치

객체와 테이블은 서로 호환가능성을 두고 만들어진 것은 아니기 때문에 ORM을 통해 객체간의 관계를 바탕으로 SQL문을 자동으로 생성하여 불일치를 해결한다 그러므로 ORM을 이용하면 따로 SQL문 작성없이 객체를 통해 간접적으로 데이터베이스를 조작할 수 있게된다

ORM 장점

객체 지향적인 코드

  • ORM을 이용하면 SQL문이 아닌 클래스의 메서드를 통해 데이터베이스를 조작할 수 있어, 개발자가 객체 모델만 이용해서 프로그래밍을 하는데 집중할 수 있게된다. 또한 각종 객체에 대한 코드를 별도로 작성하여 코드의 가독성을 높일 수 있다

재사용, 유지보수의 용이성

  • 객체로 작성되어 있기 때문에 재활용할 수 있다. 또한 매핑하는 정보가 명확하기 때문에 ERD를 보는 의존도를 낮출 수 있다

DBMS 종속성 하락

  • 객체간의 관계를 바탕으로 SQL문을 자동으로 생성하고, 객체의 자료형 타입까지 사용할 수 있기 때문에 RDBMS의 데이터 구조와 객체지향 모델 사이의 간격을 좁힐 수 있다. 객체에만 집중할 수 있어 DBMS를 교체하는 큰 작업에도 리스크가 적고 드는 시간도 줄어든다

ORM 단점

ORM 이 모든 문제를 해결하지는 않는다

  • 프로젝트가 커질 수록 난이도가 올라가고 부족한 설계로 잘못 구현된 경우 속도 저하 및 일관성을 무너뜨리는 문제점이 생길 수 있다

프로시저가 많은 시스템에선 ORM의 객체 지향적인 장점을 활용하기 어렵다

  • 이미 프로시저가 많은 시스템에선 다시 객체로 바꿔야하며, 그 과정에서 생산성 저하나 리스크가 발생할 수 있다
  • (프로시저란? 데이터베이스에 대한 일련의 작업을 정리한 절차를 관계형 데이터베이스 관리 시스템에 저장한 것으로 영구저장모듈)

10. SELECT 쿼리의 수행 순서를 알려주세요.

FROM, ON, JOIN > WHERE, GROUP BY, HAVING > SELECT > DISTINCT > ORDER BY > LIMIT

1. FROM

- 각 테이블을 확인한다.

2. ON

- JOIN 조건을 확인한다.

3. JOIN

- JOIN이 실행되어 데이터가 SET으로 모아지게 된다. 서브쿼리도 함께 포함되어 임시 테이블을 만들 수 있게 도와준다.

2. WHERE

- 데이터셋을 형성하게 되면 WHERE의 조건이 개별 행에 적용된다. WHERE절의 제약 조건은 FROM절로 가져온 테이블에 적용될 수 있다.

3. GROUP BY

- WHERE의 조건 적용 후 나머지 행은 GROUP BY절에 지정된 열의 공통 값을 기준으로 그룹화된다. 쿼리에 집계 기능이 있는 경우에만 이 기능을 사용해야 한다.

4. HAVING

- GROUP BY절이 쿼리에 있을 경우 HAVING 절의 제약조건이 그룹화된 행에 적용된다.

5. SELECT

- SELECT에 표현된 식이 마지막으로 적용된다.

6. DISTINCT

- 표현된 행에서 중복된 행은 삭제

7.ORDER BY

- 지정된 데이터를 기준으로 오름차순, 내림차순 지정

8. LIMIT

- LIMIT에서 벗어나는 행들은 제외되어 출력된다.


ORM 참조
https://geonlee.tistory.com/207

참조
https://dev-coco.tistory.com/158#%F-%-F%--%A-%C-%A-SELECT%--%EC%BF%BC%EB%A-%AC%EC%-D%--%--%EC%--%--%ED%--%--%--%EC%--%-C%EC%--%-C%EB%A-%BC%--%EC%--%-C%EB%A-%A-%EC%A-%BC%EC%--%B-%EC%-A%---
https://fomaios.tistory.com/entry/PLSQL-%ED%8A%B8%EB%A6%AC%EA%B1%B0Trigger%EB%9E%80-feat-CRUD
https://mangkyu.tistory.com/110

728x90
반응형

'Interview' 카테고리의 다른 글

면접 예상 질문 - 운영체제  (0) 2022.09.06
면접 예상 질문 - 알고리즘  (0) 2022.08.27
면접 예상 질문 - Spring  (0) 2022.08.05
면접 예상 질문 -Java  (0) 2022.07.23
Comments