데이터베이스
✔ 데이터베이스(DataBase)란 무엇인가요
데이터베이스는 일정한 규칙, 혹은 규약을 통해 구조화되어 저장되는 데이터의 모음이다.
DBMS(DataBase Management System)은 해당 데이터베이스를 제어, 관리하는 통합 시스템이며 특정 쿼리언어를 통해 데이터의 삽입, 삭제, 수정, 조회를 가능하게 한다.
🗝 KEY WORD |
#일정한 규칙 #데이터의 모음 #DBMS |
✔ 데이터베이스 언어에 대해 설명하시오
데이터베이스 언어에는 총 4가지가 있습니다.
DDL은 데이터 정의 언어로, CREATE/ ALTER/ DROP/ TRUNCATE가 있습니다.
DML은 데이터 조작 언어로, INSERT/ UPDATE/ DELETE/ SEARCH 가 있습니다.
DCL은 데이터 제어 언어로, GRANT/ REVOKE 가 있습니다.
TCL은 트랜잭션을 제어하는 언어로, COMMIT/ ROLLBACK/ SAVEPOINT 가 있습니다.
* COMMIT : 수정한 작업 저장
* ROLLBACK : 수정한 작업 취소
* SAVEPOINT : 특정 지점으로 되돌리기
🗝 KEY WORD |
# DDL #DML #DCL #TCL |
✔ 정규화 과정에 대해 설명하시오
정규화 과정은 자료의 중복성은 감소시키고, 릴레이션 간의 잘못된 종속 관계로 인해 생겨나는 이상 현상을 해결하거나 저장 공간을 효율적으로 사용하기 위해 릴레이션을 여러 개로 분리하는 것을 말합니다.
정규화 과정에는 총 6가지가 있습니다.
- 제 1 정규형 : 릴레이션의 모든 도메인이 원자 값(Atomic value: 하나의 값)으로만 구성되어야 한다.
- 제 2 정규형 : 제 1 정규형을 만족하고, 부분 함수의 종속성을 제거한 상태다.
- 제 3 정규형 : 제 2 정규형을 만족하고, 이행적 함수 종속을 만족하지 못한 상태다.
- 보이스/코드 정규형(BCNF) : 제 3 정규형을 만족하고, 결정자가 후보키가 아닌 함수 종속 관계를 제거하여 릴레이션의 함수 종속 관계에서 모든 결정자가 후보키인 상태다.
- 제 4 정규형
- 제 5 정규형
부분 함수 종속성 제거 : 기본키가 아닌 모든 속성이 기본키에 완전 함수 종속적인 것
이행적 함수 종속 : A-> B, B->C 가 성립할 때 A-> C가 성립되는 것
결정자 : X-> Y일 때, X는 결정자 Y는 종속자
🗝 KEY WORD |
#릴레이션 분리 #중복성 최소화 #이상 현상 해결 #제 n 정규형 |
✔ 트랜잭션(Transaction)에 대해 설명하시오
트랜잭션은 데이터베이스에서 하나의 논리적 기능을 수행하기 위한 작업의 단위를 말한다. 이에 대한 특징으로, 원자성, 일관성, 독립성, 지속성이 있으며 이를 ACID라고 말한다.
🗝 KEY WORD |
# 중앙처리장치 # 산술논리연산 #명령 수행 및 출력 |
✔ 트랜잭션의 ACID에 대해 설명하시오
- 원자성(Atomicity) : 트랜잭션과 관련된 작업이 모두 반영되거나 혹은 전혀 반영되지 않아야 한다.
- 일관성(Consistency) : '허용된 방식'으로만 데이터를 변경해야 하는 것을 의미한다.
- 독립성(Isolation) : 둘 이상 트랜잭션이 동시에 실행될 경우 서로의 연산에 끼어들 수 없다.
- 영속성(Durability) : 성공적으로 수행된 트랜잭션은 영원히 반영되어야 한다.
✔ 낙관성 동시성 제어와 비관적 동시성 제어의 차이에 대해 설명하시오
낙관성 동시성 제어 | 비관성 동시성 제어 |
사용자들이 같은 데이터를 동시에 수정 하지 않을 것이라 가정 | 사용자들이 같은 데이터를 동시에 수정 할 것이라 가정 |
잠금(Lock)을 사용하지 않는다 | 한 사용자가 데이터를 읽는 시점에 잠금(Lock)을 걸고 처리가 완료될 때 까지 유지한다 |
레코드의 버전 등을 통해 수정 시점에 변경 여부 검사 | 공유락, 베타락 등의 잠금 사용 |
시스템의 동시성을 저해 | |
크게 경합이 벌이지지 않는 쇼핑몰 업무에 적합 일관성 검사는 필요 |
데이터를 일일이 검사하지 않아도 되는 업무에 적합 |
🗝 KEY WORD |
#낙관성 동시 수정 X #비관성 동시 수정 O |
✔ 공유락과 베타락의 차이에 대해 설명하시오
DB 락에는 공유락과 베타락이 있다. 이러한 락들은 여러 개의 트랜잭션들이 하나의 데이터로 동시 접근을 하려고 할 때 제어해주는 도구이다. 공유락은 트랜잭션이 읽기를 할 때 사용하는 락으로, 데이터를 읽을 수는 있지만 쓸 수는 없는 단점이 있다. 반면, 베타락은 트랜잭션이 읽고 쓰기를 할 때 사용하는 락으로, 데이터를 읽고 쓰는 게 가능하다.
- 공유락 : 읽기 / 같은 공유락 끼리 동시 접근 가능
- 베타락 : 읽기 & 쓰기 / 베타락이 끝나기 전까지 어떠한 접근도 허용 X
🗝 KEY WORD |
#공유락 읽기만 #베타락 읽기 쓰기 둘 다 |
✔ 무결성에 대해 설명하시오
무결성이란 데이터의 정확성, 일관성, 유효성을 유지하는 것을 말하며 4가지의 종류를 들 수 있다.
- 개체 무결성 : 기본키 제약이라고 하며, 기본키로 선택된 필드는 빈 값을 허용하지 않는다.
- 참조 무결성 : 외래키 제약이라고 하며, 두 테이블의 데이터는 항상 일관된 값을 유지해야 한다.
- 고유 무결성 : 특정 속성은 모두 고유한 값을 가진다. 즉, 각 레코드들이 갖는 값들이 서로 달라야 하는 제약조건이다.
- NULL 무결성 : 테이블의 특정 속성 값이 NULL이 될 수 없다는 제약조건이다.
🗝 KEY WORD |
# 개체 #참고 #고유 #NULL #키 #관계 #도메인 |
✔ 관계형 데이터베이스(RDBMS)와 NoSQL의 차이에 대해 설명하시오
RDBMS | NoSQL |
SQL 이란 언어를 써서 조작하는 데이터베이스 | NoSQL(Not only SQL)와 같이 SQL을 사용하지 않고 스키마가 없어 좀 더 자유롭게 데이터를 관리할 수 있는 데이터베이스 |
행과 열을 가지는 표 형식의 데이터를 저장하는 형태(= 2차원 테이블 형태) | 컬렉션이란 형태로 데이터 저장 |
관계를 나타내기 위해 외래키(FK) 사용하여 테이블간 JOIN이 가능 | 테이블 간 관계를 정의하지 않으며 테이블 간 JOIN이 불가능 |
스키마에 맞춰 데이터를 관리 | 스키마 없이 Key-Value 형태로 데이터 관리 |
데이터를 중복없이 한 번만 저장 -> 데이터 무결성 성능 향상을 위해 Scale-Up 만 지원 |
데이터의 일관성은 포기하되 비용 고려한 Scale-Out 방식 |
종류 ) MySQL, PostgreSQL | 종류 ) MongoDB, Redis |
* Scale-up : 기존의 서버를 보다 높은 사양으로 업그레이드 하는 것
* Scale-out : 장비를 추가해서 확장하는 방식 / 용량 혹은 성능의 한계에 도달했을 때, 비슷한 양의 서버를 추가로 연결해 기존 서버의 부하를 분담
✔ Elastic Search와 RDBMS에서의 검색의 차이에 대해 설명하시오
RDBMS는 단순 텍스트매칭에 대한 검색만 제공하며 동의어나 유의어 같은 검색은 불가능하다. 하지만 ElasticSearch 는 Apache Lucene 기반 java 오픈 소스 분산 검색 엔진으로 n-gram 기반 full-text 검색을 지원한다. 따라서 여러 단어로 변형하거나 동의어나 유의어에 따른 검색도 가능하다.
ElasticSearch | RDBMS |
동의어 / 유의어 검색 가능 | 동의어 / 유의어 검색 불가능 |
역색인(Inverted Index) 방법으로 필요한 정보만 선택하여 포함된 위치를 검색 | 일반적인 색인 방법으로 순차탐색으로 데이터 찾는다 |
Full-Text 검색 속도 빠름 | Full-Text 검색 속도 느림 |
✔ inner join과 outer join의 차이에 대해 설명하시오
inner join 은 서로 연관된 내용만 검색하는 조인 방법이다. NULL 값은 포함되지 않는다.
outer join 은 한 쪽에는 데이터가 있고 한 쪽에는 데이터가 없는 경우, 데이터가 있는 쪽의 내용을 전부 출력하는 방법이다.NULL 값까지 포함한다. 종류에는 LEFT, RIGHT, FULL OUTER JOIN 이 있다.
🗝 KEY WORD |
# inner join 교집합 #outer join 합집합 |
✔ 커넥션 풀을 사용하는 이유에 대해 설명하시오
커넥션 풀이란 데이터베이스와 연결된 커넥션을 미리 만들어 놓고 이를 pool로 관리하는 것이다. TCP/IP 연결에 의한 3-way handshaking이 발생하여 연결에 오랜 시간이 걸리기에 초기에 생성하여 관리하며 재사용한다.
커넥션 풀을 사용하면 커넥션 수를 제한할 수 있어 과도한 접속으로 인한 서버 자원 고갈을 방지할 수 있다. 다만, 커넥션 풀에 커넥션이 부족한 상황에 요청을 하게 되면 커넥션 풀이 반환될 때까지 기다려야 하는 단점이 있다.
🗝 KEY WORD |
# 미리 커넥션 생성 후 관리 # 재사용 # 커넥션 수 제한 |
✔ DELETE, TRUNCATE, DROP의 차이에 대해 설명하시오
모두 테이블에서 데이터의 삭제와 관련된 명령어이다. 다만 아래와 같은 차이가 있다.
- DELETE : 행 단위로 데이터를 삭제하는 명령어이다. 선택적으로 원하는 행만 삭제할 수 있다. 비교적 느리다
- TRUNCATE : 테이블에서 데이터를 모두 삭제하는 명령어이다. 삭제 후 용량이 줄어들고 인덱스 등도 모두 삭제된다. 비교적 DELETE 보다 빠르다
- DROP : 테이블 자체를 삭제하는 명령이이다. 삭제 후 절대로 되돌릴 수 없다.
🗝 KEY WORD |
# 삭제 명령어 # DELETE #TRUNCATE #DROP |
✔ 클러스터링과 리플리케이션의 차이에 대해 설명하시오
클러스터링 | 리플리케이션 |
여러 개의 DB를 수평적인 구조로 구축하는 방식 | 여러 개의 DB를 권한에 따라 수직적인 구조로 구축하는 방식 |
동기 방식 | 비동기 방식 |
DB 간의 데이터를 동기화하여 항상 일관성 있는 데이터 얻음 | 노드들 간 데이터가 동기화 되지않아 일관성 있는 데이터 얻지 못함 |
로드밸런싱 효과 : 기존 하나의 DB에 몰리던 부하를 분산 | 비동기 방식으로 데이터가 동기화되어 지연 시간이 거의 없음 |
병목 현상 발생 | 충분한 성능 효과 발생 |
서버를 동시에 운영하기 위한 비용 발생 | Master DB 가 다운되면 복구 및 대처가 까다로움 |
✔ HAVING과 WHERE의 차이에 대해 설명하시오
having 은 그룹 전체에만 적용되는 반면 where은 개별 행에 적용된다.
having 은 항상 GROUP BY 뒤에 위치하는 반면 where는 FROM 뒤에 위치한다.
having 은 집계함수(COUNT, SUM, MAX,MIN) 과 함께 사용할 수 있는 반면 where 절은 불가능하다.
🗝 KEY WORD |
# group by ~ having # from ~ where |
<참고 자료>
https://product.kyobobook.co.kr/detail/S000001834833
https://dev-coco.tistory.com/158
https://mangkyu.tistory.com/93
https://cocoon1787.tistory.com/778
https://pythontoomuchinformation.tistory.com/528
https://tecoble.techcourse.co.kr/post/2021-10-12-scale-up-scale-out/
https://code-lab1.tistory.com/209
https://bin-kkwon.tistory.com/entry/DELETE-TRUNCATE-DROP%EC%9D%98-%EC%B0%A8%EC%9D%B4
'취업일지' 카테고리의 다른 글
[CS]기술 면접 질문 리스트 - 운영체제 (3) | 2023.12.27 |
---|---|
[CS]기술 면접 질문 리스트 - 네트워크 (1) | 2023.12.22 |
[CS]기술 면접 질문 리스트 - 자바 (1) | 2023.12.20 |
[CS]기술 면접 질문 리스트 - 프로그래밍 공통/기타 (2) | 2023.12.19 |