본문 바로가기
CS 면접준비

DB

by 코도꼬마 2023. 9. 20.

DB

[Q] Data, Information란?

[A]
데이터(Data, 자료)는 현실 세계에서 측정하고 수집한 사실이나 값이고, 정보(Information)는 어떠한 목적이나 의도에 맞게 데이터를 가공 처리한 것입니다.
어떤 의미나 목적을 포함하지 않고 단순 수집된 원시 자료가 데이터, 어떤 목적이나 의도에 따라 데이터를 처리하고 분석하여 데이터에 의미를 부여한 것이 정보입니다.

[Q] Database란?

[A]
데이터베이스(DB)는 여러 사람이 공유하고 사용할 목적으로 관리되는 정보입니다.즉, 통합 관리되는 데이터의 저장소입니다.

[Q] DBMS(Database Management System)란?

[A]
DB를 ‘데이터의 집합’이라 한다면 DB를 관리하고 운영하는 소프트웨어를 DBMS(Database Management System)라고 합니다.
또한 응용프로그램들이 DB에 접근할 수 있는 인터페이스를 제공하고 복구기능과 보안성 기능을 제공합니다.

[Q] RDBMS(Relation DBMS)란?

[A]
관계형 데이터베이스(RDB)는 테이블, 행, 열의 정보를 구조화하는 방식입니다. RDB에는 테이블을 조인하여 정보 간 관계 또는 링크를 설정할 수 있는 기능이 있어, 여러 데이터 포인트 간의 관계를 쉽게 이해하고 정보를 얻을 수 있습니다.
잘 알려진 RDBMS의 예로는 MySQL, MariaDB, Oracle이 있습니다.

관계형 데이터베이스의 이점
관계형 데이터베이스 모델의 주요 이점은 직관적인 데이터 표현 방법을 제공하고 관련 데이터 포인트에 쉽게 액세스할 수 있다는 점입니다. 그래서 관계형 데이터베이스는 인벤토리 추적부터 트랜잭션 데이터 처리 및 애플리케이션 로깅에 이르기까지 대량의 구조화된 데이터를 관리해야 하는 조직에서 가장 많이 사용합니다.

[Q] NO-SQL(Not Only SQL)란?

[A]
관계형 데이터베이스가 아닌 모든 데이터베이스를 말합니다.
장점은 스키마가 없어서 유연하고 언제든지 저장된 데이터를 조정하고 새로운 필드 추가 가능합니다.
또한 데이터는 애플리케이션이 필요로 하는 형식으로 저장되고 데이터를 읽어오는 속도가 빠릅니다.
마지막으로 수직 및 수평 확장이 가능해서 애플리케이션이 발생시키는 모든 읽기/쓰기 요청 처리가 가능합니다.
단점은 유연성으로 인해 데이터 구조 결정을 미루게 될 수 있습니다.
데이터 중복을 계속 업데이트 해야 하고, 데이터가 여러 컬렉션에 중복되어 있기 때문에 수정 시 모든 컬렉션에서 수행해야 합니다.

[Q] SQL(Structured Query Language)란?

[A]
관계형 데이터베이스 관리 시스템(RDBMS)의 데이터를 관리하기 위해 설계된 특수 목적의 프로그래밍 언어입니다.
자료의 검색과 관리, 데이터베이스 스키마 생성과 수정, 데이터베이스 객체 접근 조정 관리가 가능합니다.

장점은 스키마가 명확하게 정의되어 있고 데이터 무결성 보장하며 각 데이터를 중복없이 한번만 저장합니다.
단점은 유연성이 떨어지고 데이터 스키마를 나중에 수정하기 어렵다는 것 입니다. 관계를 맺고 있어서 조인문이 많은 복잡한 쿼리가 만들어질 수 있고 대체로 수직적 확장만 가능하다는 것 입니다.

[Q] HAVING vs WHERE

[A]
먼저 having절과 where절의 유사점은

둘 다 데이터 세트검색을 필터링할때 사용할 수 있다는 점입니다.
having 절과 where절의 차이

having은 전체 결과, where은 개별 행

Having절은 WHERE절과 비슷하지만 그룹 전체 즉, 그룹을 나타내는 결과 집합의 행에만 적용된다
반면 WHERE절은 개별 행에 적용이 된다.
having은 SQL select문이 집계 값이 지정된 조건을 충족하는 행만 반환하도록 지정하는 SQL절이다.
where은 단일 테이블에서 데이터를 가져 오거나 여러 테이블과 결합하여 조건을 지정하는데 사용되는 SQL절이다.
having절은 그룹을 필터링하는 데 사용된다.
where절을 행을 필터링 하는데 사용된다.
집계 함수는 having 절과 함께 사용할 수 있다.
where절을 have절에 포함된 하위 쿼리에 있지않으면 집계함수와 함께 사용할 수 없다.
(집계함수란, COUNT, MIN, MAX, SUM, AVG등등이 있다.)
having 절은 Group By 절 뒤에 사용합니다.
Where 절은 Group By 절 앞에 사용합니다.
간단 요약
Having은 그룹화 또는 집계가 발생한 후 레코드를 필터링하는데 사용된다.
Where은 그룹화 또는 집계가 발생하기 전에 레코드를 필터링하는데 사용된다.

[Q] TRUNCATE vs DELETE vs DROP

[A]
DELETE는 WHERE절을 사용하여 테이블에 있는 데이터를 하나하나 선택하여 제거하는 방식입니다.
WHERE절을 사용하지않고 테이블의 모든 데이터를 삭제하더라도, 내부적으로는 한줄 한줄 일일히 제거하는 과정을 거쳐 처리속도가 늦습니다.
주로 원하는 데이터만 골라서 삭제할 때 사용합니다. 데이터를 삭제하더라도 데이터가 담겨있던 Storage는 Release 되지 않고 DELETE 된 데이터는 COMMIT 명령어를 사용하기 전이라면, ROLLBACK 명령어를 통해 되돌릴 수 있습니다.

TRUNCATE는 전체 데이터를 한번에 삭제하는 방식입니다.
최초 생성 되었을 당시의 Storage만 남기고, 데이터가 남겨있던 Storage는 Release 됩니다. 자동 COMMIT이 되는 명령어이기 때문에, 이미 지운 데이터는 되돌릴 수 없습니다.

DROP은 테이블 자체를 완전히 삭제하는 방식입니다. 자동 COMMIT 되는 명령어이기 때문에, 이미 지운 데이터는 되돌릴 수 없고 오라클10g부터는 테이블이 삭제되는 것이 아니라 윈도우의 휴지통 처럼 잠시 삭제 하여 테이블 이름을 BIN$..로 변경하는 것으로 알고 있습니다.

[Q] SQL Injection이란?

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

[Q] ERD(Entity Relationship Diagram)란?

[A]
ERD란 개체-관계 모델. 테이블간의 관계를 설명해주는 다이어그램이라고 볼 수 있고, 이를 통해 프로젝트에서 사용되는 DB의 구조를 한눈에 파악할 수 있습니다.

[Q] KEY의 정의와 종류

[A]
키(Key)는 데이터베이스에서 조건에 만족하는 튜플을 찾거나 구별할 수 있는 유일한 기준이 되는 속성(Attribute) 입니다.

키의 종류로는 후보키(Candidate Key), 기본키(Primary Key), 대체키(Alternate Key), 슈퍼키(Super Key), 외래키(Foreign Key)가 있습니다.

[Q] PK(Primary Key)와 FK(Foreign Key)

[A]
기본키(Primary Key)는 후보키 중에서 특별히 선정된 주키(Main Key)로 한 릴레이션에서 특정 튜플을 유일하게 구별할 수 있는 속성으로 중복된 값을 가질 수 없습니다. 후보키의 성질을 가지고 유일성과 최소성을 가집니다. 기본키는 NULL 값을 가질 수 없습니다.

외래키(Foreign Key)는 다른 릴레이션의 기본키를 참조하는 키를 의미합니다. 한 릴레이션에 속한 속성 A와 참조 릴레이션의 기본키인 B가 동일한 도메인 상에서 정의되었을 떄의 속성 A를 외래키라고 합니다. 외래키로 지정되면 참조 릴레이션의 기본키에 없는 값은 입력할 수 없습니다.

후보키(Candidate Key)
릴레이션을 구성하는 속성들 중에서 튜플을 유일하게 식별하기 위해 사용하는 속성들의 부분집합
기본키로 사용할 수 있는 속성
하나의 릴레이션에는 중복된 튜플들이 있을 수 없으므로 모든 릴레이션은 반드시 하나 이상의 후보키가 존재
후보키는 릴레이션에 있는 모든 튜플에 대해서 유일성과 최소성을 만족시켜야 함

더 알기
대체키(Alternate Key)는 후보키가 둘 이상일 때 기본키를 제외한 나머지 키를 의미합니다.

슈퍼키(Super Key)는 한 릴레이션 내에 있는 속성들의 집합으로 구성된 키 입니다. 릴레이션을 구성하는 모든 튜플들 중 슈퍼키로 구성된 속성의 집합과 동일한 값은 나타나지 않습니다. 릴레이션을 구성하는 모든 튜플에 대해 유일성은 만족시키지만 최소성은 만족시키지 못합니다.

[Q] 무결성의 정의와 종류

[A]
데이터 무결성은 데이터의 정확성, 일관성, 유효성이 유지되는 것을 의미합니다. 정확성이란 중복이나 누락이 없는 상태를 뜻하고, 일관성은 원인과 결과의 의미가 연속적으로 보장되어 변하지 않는 상태를 뜻합니다.

무결성의 종류로는 개체 무결성(Entity integrity), 참조 무결성(Referential integrity), 도메인 무결성(Domain integrity), Null무결성(Null integrity), 고유 무결성 (Unique integrity), 키 무결성 (Key integrity)이 있습니다.
개체 무결성(Entity integrity)은 기본 키 제약이라고도 하며, 테이블은 기본키를 지정하고 그에 따른 무결성 원칙을 지켜야 하는 제약조건 입니다.
참조 무결성(Referential integrity)은 외래 키 제약이라고도 하며, 테이블 간의 참조 관계를 선언하는 제약조건 입니다.
도메인 무결성(Domain integrity)은 테이블에 존재하는 필드의 무결성을 보장하기 위한 것으로 필드의 타입, Null 값 허용 등에 대한 사항을 정의하고 올바른 데이터가 입력되었는지 확인하는 제약조건 입니다.
Null무결성(Null integrity)은 테이블의 특정 속성 값이 Null이 될 수 없게 하는 제약조건 입니다.
고유 무결성 (Unique integrity)은 테이블의 특정 속성에 대해 각 레코드들이 갖는 값들이 서로 달라야 하는 제약조건 입니다.
키 무결성 (Key integrity)은 하나의 테이블에는 적어도 하나의 키가 존재해야 하는 제약조건 입니다.
관계 무결성 (Relationship integrity)은 테이블의 어느 한 레코드의 삽입 가능 여부 또는 한 테이블과 다른 테이블의 레코드들 사이의 관계에 대한 적절성 여부를 지정한 제약조건 입니다.

[Q] 테이블 간 관계에 대해 설명

[A]
테이블 사이의 관계는 1:1 관계, 1:N 관계, N:M 관계가 있습니다.
1:1 관계는 하나의 레코드가 다른 테이블의 레코드 한 개와 연결된 경우입니다.
1:N 관계는 하나의 레코드가 서로 다른 여러 개의 레코드와 연결된 경우입니다.
N:M 관계는 여러 개의 레코드가 다른 테이블의 여러 개의 레코드와 관계가 있는 경우입니다.

[Q] JOIN 종류 및 설명

[A]
Inner Join, Outer Join, Left Join, Right Join, Cross Join이 있습니다.
Inner Join은 두 테이블의 교집합, 즉 두 테이블간 JOIN 조건을 만족하는 행을 반환합니다.
OUTER JOIN은 조인 조건에서 동일한 값이 없는 행도 반환할 때 사용합니다.
Left Outer Join은 조인문의 왼쪽에 있는 테이블의 모든 결과를 가져온 후 오른쪽 테이블의 데이터를 매칭하고, 매칭되는 데이터가 없는 경우 NULL을 표시합니다.
Right Outer Join은 조인문의 오른쪽에 있는 테이블의 모든 결과를 가져온 후 왼쪽의 테이블의 데이터를 매칭하고, 매칭되는 데이터가 없는 경우 NULL을 표시합니다.
FULL OUTER JOIN은 LEFT OUTER JOIN과 RIGHT OUTER JOIN을 합친 것으로, 양쪽 모두 조건이 일치하지 않는 것들까지 모두 결합하여 출력합니다.이것 역시 매칭되는 데이터가 없는 경우 NULL을 표시합니다.
CROSS JOIN은 Cartesian Product(카디션 곱)이라고도 하며 조인되는 두 테이블에서 곱집합을 반환합니다.
SELF JOIN은 자기자신과 자기자신을 조인하는 것 입니다.

[Q] 트랜잭션(Transaction)이란?

[A]
트랜잭션(Transaction)은 데이터베이스의 상태를 변환시키는 하나의 논리적 기능을 수행하기 위한 작업의 단위 또는 한꺼번에 모두 수행되어야 할 일련의 연산들을 의미 합니다.

[Q] DBLock이란?

[A]
Lock이란 트랜잭션 처리의 순차성을 보장하기 위한 방법입니다.
Lock의 종류로는 공유(Shared) Lock과 베타(Exclusive) Lock이 있습니다. 공유락은 다른 말로 Read Lock이라고 불리며 베타락은 Write Lock이라고도 불립니다.

공유 Lock은 데이터를 읽을 때 사용되어지는 Lock입니다. 이런 공유 Lock은 공유 Lock 끼리는 동시에 접근이 가능합니다. 즉, 하나의 데이터를 읽는 것은 여러 사용자가 동시에 할 수 있다라는 것입니다. 하지만 공유 Lock이 설정된 데이터에 베타 Lock을 사용할 수는 없습니다.

베타 Lock은 데이터를 변경하고자 할 때 사용되며, 트랜잭션이 완료될 때까지 유지됩니다. 베타락은 Lock이 해제될 때까지 다른 트랜잭션(읽기 포함)은 해당 리소스에 접근할 수 없습니다. 또한 해당 Lock은 다른 트랜잭션이 수행되고 있는 데이터에 대해서는 접근하여 함께 Lock을 설정할 수 없습니다.

[Q] 교착상태(Deadlock)란?

[A]
DeadLock은 두 세션이 각각 필요한 리소스를 얻기 위해 서로 상대방이 Lock을 풀기를 기다리는 상태입니다. 서로의 세션간에 획득해야하는 리소스가 맞물리는 경우 잠금으로 인해 하나의 세션이 중지되지 않는 이상 빼도박도 못하는 대치상황이 됩니다. 예를들면 좁은 골목길에 두 차량이 대치되어 있는 상황과 같습니다.

[Q] 블로킹(Blocking) VS 교착상태(Deadlock)

[A]
Blocking은 Lock경합이 발생하여 특정 세션이 작업을 진행하지 못하고 멈춰 선 상태를 말합니다.

일반적인 블로킹은 언젠가는 (블로킹한 트랜잭션이 끝나면) 사라지게 되지만 교착상태는 서로가 서로에게 블로킹을 걸었기 때문에 상대 트랜잭션이 끝나기만을 서로 기다리며 블로킹이 계속되기 때문에 끝나지 않습니다.

[Q] 이상현상이란?

[A]
테이블 내의 데이터들이 불필요하게 중복되어 테이블을 조작할 때 발생되는 데이터 불일치 현상입니다. 테이블을 잘못 설계하여 삽입, 삭제, 갱신할 때 오류가 발생하게 되는 것 입니다.

[Q] 정규화란?

[A]
정규화(Normalization)의 기본 목표는 테이블 간에 중복된 데이타를 허용하지 않는다는 것입니다. 중복된 데이터를 허용하지 않음으로써 무결성(Integrity)를 유지할 수 있으며, DB의 저장 용량 역시 줄일 수 있습니다.

제1 정규화란 테이블의 컬럼이 원자값(Atomic Value, 하나의 값)을 갖도록 테이블을 분해하는 것입니다.
제2 정규화란 제1 정규화를 진행한 테이블에 대해 완전 함수 종속을 만족하도록 테이블을 분해하는 것입니다. 여기서 완전 함수 종속이라는 것은 기본키의 부분집합이 결정자가 되어선 안된다는 것을 의미합니다.
제3 정규화란 제2 정규화를 진행한 테이블에 대해 이행적 종속을 없애도록 테이블을 분해하는 것입니다. 여기서 이행적 종속이라는 것은 A -> B, B -> C가 성립할 때 A -> C가 성립되는 것을 의미합니다.
BCNF 정규화란 제3 정규화를 진행한 테이블에 대해 모든 결정자가 후보키가 되도록 테이블을 분해하는 것입니다.

[Q] 비정규화(역정규화 , 반정규화)란?

[A]
비정규화는 정규화된 테이블을 읽기성능 향상을 위해 테이블을 다시 합치는 것이고,
역정규화는 정규화된 테이블을 비정규화 상태로 만들기 위한 방법 중 하나로 비정규화가 더 포괄적인 의미를 담고 있습니다.

[Q] 인덱스(Index)란?

[A]
인덱스란 추가적인 쓰기 작업과 저장 공간을 활용하여 데이터베이스 테이블의 검색 속도를 향상시키기 위한 자료구조입니다. 예를들어 책에서 원하는 내용을 찾는다고 하면, 책의 모든 페이지를 찾아 보는 것은 시간이 오래 걸리기 때문에 색인을 활용하는데, 데이터베이스의 index는 책의 색인과 같습니다. 데이터베이스에서도 테이블의 모든 데이터를 검색하면 시간이 오래 걸리기 때문에 데이터와 데이터의 위치를 포함한 자료구조를 생성하여 빠르게 조회할 수 있도록 할 수 있습니다.

[Q] 뷰(View)란?

[A]
뷰는 사용자에게 접근이 허용되는 자료만을 제한적으로 보여주기 위해 하나 이상의 기본 테이블로부터 유도된 이름을 가지는 가상 테이블입니다.

[Q] 트리거(Trigger)란?

[A]
트리거는 테이블에 대한 이벤트에 반응해 자동으로 실행되는 작업을 의미합니다. 트리거는 INSERT, DELETE, UPDATE 같은 DML(데이터 조작 언어)의 데이터 상태 관리를 자동화하는데 사용됩니다.
트리거(Trigger)는 말 그대로 방아쇠로 방아쇠를 당기면 총에서 총알이 발사되듯, 트리거가 실행되면 일련의 작업을 수행하게 됩니다.

[Q] ORM(Object Relation Mapping)이란?

[A]
Object Relational Mapping(객체-관계-매핑)의 약자로 객체와 데이터베이스의 관계를 매핑해주는 도구입니다. ORM은 프로그래밍 언어의 객체와 관계형 데이터베이스의 데이터를 자동으로 매핑(연결)해주는 도구입니다.

[Q] Mybatis vs JPA

[A]
JPA는 객체 중심의 개발방식을 지원하여 개발자가 직접 SQ을 작성하지 않고도 객체를 관리할 수 있고,
Mybatis는 SQL을 직접 작성할 수 있어 개발자가 더욱 자유롭게 데이터베이스를 다룰 수 있다는 장점이 있습니다.

[Q] JDBC (Java Database Connectivity) vs ODBC (Open Database Connectivity)

[A]
Java에서 DB에 접근하여 데이터 조회, 삽입, 수정, 삭제를 가능하게 하는 것을 말합니다. 다시말해 Java가 Database를 사용할 수 있도록 연결해주는 응용프로그램 인터페이스인 Java API 입니다.
ODBC는 데이터베이스를 액세스하기 위한 표준 개방형 응용 프로그램 인터페이스를 말합니다.

'CS 면접준비' 카테고리의 다른 글

DataStructure  (0) 2023.10.01
Network  (1) 2023.10.01
SPRING  (0) 2023.09.13
JAVA  (1) 2023.09.12
Sevlet  (0) 2023.08.27