# Part 02. Database Made by. [김민지](https://github.com/SSAFY-CS-STUDY/Tech_interview/tree/main/02.database/kmj) [박혜빈](https://github.com/SSAFY-CS-STUDY/Tech_interview/tree/main/02.database/phb) [이연주](https://github.com/SSAFY-CS-STUDY/Tech_interview/tree/main/02.database/lyj) [황성현](https://github.com/SSAFY-CS-STUDY/Tech_interview/tree/main/02.database/hsh) ## [Database](#database-답변) #### 💡 데이터베이스란 무엇인가? #### 💡 Database의 특징을 설명하시오. #### 💡 Database 설계 시, 고려할 점을 설명하시오. #### 💡 Schema가 무엇인가요? #### 💡 DBMS는 무엇인가요? #### 💡 DBMS의 속성에는 무엇이 있나요? #### 💡 데이터 모델링이 무엇인가요? #### 💡 메타데이터란 무엇인가? #### 💡 키의 종류에는 어떤게 있나요? #### 💡 무결성 제약조건에 대해 아는대로 서술하시오. #### 💡 서브쿼리가 뭐에요? #### 💡 서브쿼리의 성능은 어때요? ## [Normalization](#normalization-답변) #### 💡 정규화를 왜 진행하나요? #### 💡 정규화를 왜 진행하나요? #### 💡 제 3정규형까지설명해주세요. #### 💡 데이터의 중복을 피할수있는데 역정규화는 왜실행하나요? / 모든 테이블에 정규화를 진행하나요? #### 💡 이상현상에 대해 설명하시오. #### 💡 정규화 단계별 과정에 대해 설명하시오. ## [RDBMS/NoSQL](#rdbmsnosql-답변) #### 💡 관계형 데이터베이스의 특징 #### 💡 무결성 제약조건이란 무엇인가? #### 💡 View란 무엇인가? #### 💡 SQL과 NoSQL의 차이점에 대해 설명하시오. #### 💡 Select 쿼리 실행 순서 #### 💡 PK와 FK 설명해주세요. #### 💡 서브쿼리가 뭐에요? #### 💡 서브쿼리의 성능은 어때요? #### 💡 %LIKE%와 elasticsearch의 차이점을 설명해주세요. ## [Transaction](#transaction-답변) #### 💡 트랜잭션이란 무엇이고 특성에 대해 설명하시오. #### 💡 잠금기법(Locking)에 대해 설명하시오. #### 💡 잠금 기법의 문제점에 대해서 말하시오. #### 💡 교착상태(Deadlock)란 무엇인가? #### 💡 교착상태의 빈도를 낮추는 방법에는 무엇이 있나요? ## [Index](#index-답변) #### 💡 Index란 무엇인가? #### 💡 데이터베이스의 Index 구조에 대해 설명하시오. #### 💡 Index의 자료구조는 어떤 것을 사용하나요? #### 💡 Index를 따로 설정하지 않은 경우의 테이블은 어떤가요? #### 💡 모든 칼럼에 Index를 사용하면 좋나요? #### 💡 Index는 어디에 사용하는게 좋아요? #### 💡 Index 사용 시 장단점과 사용하면 좋은 경우와 나쁜 경우에 대해 설명하시오. ## [심화질문](#심화질문-답변) #### 💡 DB 이중화란 무엇인가? #### 💡 DB 이중화의 특징은 무엇인가요? </br></br> # Database 답변 #### 💡 데이터베이스란 무엇인가? * 일관성 있는 데이터를 여러 사람들에게 실시간으로 제공할 수 있습니다. #### 💡 Database의 특징을 설명하시오. * 데이터베이스는 서로 다른 목적을 가진 유저들이 사용 가능하며 동적으로 최신 데이터를 유지하고 실시간 처리에 응답이 가능하다는 특징을 가지고 있습니다. (중복최소화, 동시 접근, 실시간, 동적) #### 💡 Database 설계 시, 고려할 점을 설명하시오. * 데이터의 정확성과 일관성을 고려해야 합니다. * 데이터의 정확성이란 데이터의 중복이나 누락이 없는 상태를 말합니다. * 데이터의 일관성은 원인과 결과의 의미가 연속적으로 보장되어 변하지 않는 상태를 의미합니다. #### 💡 Schema가 무엇인가요? * 스키마란 데이터베이스의 구조와 제약 조건에 대한 명세를 기술한 것입니다. 그리고 그 유형은 외부 스키마와 개념 스키마와 내무 스키마로 나눌 수 있습니다. #### 💡 DBMS는 무엇인가요? * 다수의 컴퓨터 사용자들이 컴퓨터에 수록 된 수 많은 자료들을 쉽고 빠르게 추가, 수정, 삭제 할수 있도록 해주는 시스템입니다. #### 💡 DBMS의 속성에는 무엇이 있나요? * 복잡한 현실 세계의 데이터를 단순화해서 컴퓨터 세계의 데이터베이스로 변환하는 과정입니다. #### 💡 데이터 모델링이 무엇인가요? * 복잡한 현실 세계의 데이터를 단순화해서 컴퓨터 세계의 데이터베이스로 변환하는 과정입니다. * #### 💡 메타데이터란 무엇인가? * 한마디로 표현하면 데이터의 정보를 담고 있는 데이터이다. 예를 들면 이미지 파일의 크기나 날짜 데이터들을 메타데이터라고 할 수 있다. #### 💡 키의 종류에는 어떤게 있나요? * 기본키, 대체키, 슈퍼키, 후보키 * 기본키 -> 후보키 중 선정된 키 * 대체키 -> 기본키가 아닌 후보키 * 후보키 -> 튜플을 식별할 수 있는 속성의 최소 집합 * 슈퍼키 -> 튜플을 식별할 수 있는 속성의 집합 #### 💡 무결성 제약조건에 대해 아는대로 서술하시오. * 테이블에 부적절한 자료가 입력 되는 것을 방지하기 위해서 테이블을 생성할 때 각 컬럼에 대해서 정의하는 여러가지 규칙을 나타냅니다. 개체, 참조, 도메인 등의 제약조건이 존재합니다. * 무결성 제약조건이란 데이터가 정확성과 일관성을 유지하기 위해 가져야 할 조건들을 의미합니다. * 개체 무결성 : 기본키는 null값을 가질 수 없다. * 참조 무결성 : 외래키는 null값 또는 참조하는 릴레이션의 기본키 값이어야 한다. * 도메인 무결성 : 속성값이 도메인에 속한 값이어야 함을 의미합니다. * 키 무결성 : 한 릴레이션에 최소한 하나의 키가 존재해야 합니다. </br></br> # RDBMS/NoSQL 답변 #### 💡 관계형 데이터베이스의 특징 * 데이터의 성능이 일반적으로 좋아 정렬, 탐색, 분류가 빠릅니다. * 신뢰성이 높아 데이터의 무결성을 보장합니다. * 정규화에 따른 갱신 비용을 최소화합니다. #### 💡 무결성 제약조건이란 무엇인가? * 무결성 제약조건은 기본 테이블에서 일치하는 필드가 기본키(PK)이거나 고유 인덱스를 갖고 있거나 관련 필드의 데이터 형식이 같아야 한다는 것입니다. #### 💡 View란 무엇인가? * View는 직접 테이블에 접근하는 것이 아니라 테이블에서 사용자가 **필요로 하는 부분만 선택하여 만들어 놓은 데이터 집합**입니다. * 가장 큰 이유는 **사용자의 편의**와 **데이터베이스의 보안** 때문입니다. * 원본 테이블에 직접 접근하지 않아도 사용자가 임의의 뷰를 구성하여 별도의 이름을 붙이거나 접근 가능한 사람을 지정할 수 있기 때문입니다. #### 💡 SQL과 NoSQL의 차이점에 대해 설명하시오. * NoSQL이 RDB와 다른 점은 스키마가 없다는 것입니다. 즉 데이터 관계와 정해진 규격(table-column의 정의)이 없습니다. * NoSQL은 분산처리(수평적 확장)의 기능을 쉽게 제공합니다. * 하지만 NoSQL은 관계 정의가 없어 Join이 불가능합니다. 또한 트랜잭션을 지원하지 않습니다. #### 💡 Select 쿼리 실행 순서 * FROM - WHERE - GROUP BY - HAVING - SELECT - ORDER BY #### 💡 PK와 FK 설명해주세요. * Primary Key은 테이블에서 각 Row(행)을 유일하게 구분하는 Column-Key입니다. * Foreign Key는 하나의 테이블에 있는 Column(열)으로는 그 의미를 표현할 수 없는 경우, 다른 테이블의 Primary-Key Column의 값을 반드시 참조해야 하는 Key입니다. #### 💡 서브쿼리가 뭐에요? * sql문 안에 있는 sql문 입니다. #### 💡 서브쿼리의 성능은 어때요? * MySQL 5.5버전 이하에서는 최적화를 지원하지 않아 서브쿼리는 full scan하게 되어 성능이 좋지 않습니다. 5.5 이상 버전에서도 간단한 서브쿼리가 아니면 최적화가 되어 있지 않아 join문으로 변경하는 것이 성능적으로 우수합니다. #### 💡 %LIKE%와 elasticsearch의 차이점을 설명해주세요.-- 보충 필요 * 엘라스틱서치는 비정형 데이터의 색인과 검색이 가능합니다. 이런 특성은 빅테이터 처리에서 매우 중요합니다. 데이터를 CRUD하기 위해서 RESTful API라는 방식을 이용합니다. 데이터 공간을 절약할 수 있다. 컬럼을 동적으로 정의하여, 필요한 데이터만 넣게 되어 데이터 공간 및 CPU 사용량, 네트워크 트래픽도 줄일 수 있는 효과가 있습니다. * 엘라스틱서치의 단점은 실시간 처리가 불가능하다는 점입니다. </br></br> # Normalization 답변 #### 💡 정규화란 무엇인가? * 관계형 데이터베이스에서 데이터 중복을 최소화 하기 위해 데이터를 구조화하는 작업입니다. #### 💡 정규화를 왜 진행하나요? * 자료의 손실이나 불필요한 정보의 도입 없이 데이터의 일관성 및 데이터 중복을 최소화하기 위해 진행합니다. 또한 최대의 데이터 안정성 확보를 위한 안정적 자료구조로 변환하기 위해서 하나의 테이블을 둘 이상으로 분리합니다. #### 💡 제 3정규형까지설명해주세요. * 제 1정규형은 도메인 제약조건을 만족합니다. * 제 2정규형은 부분적 함속종속을 제거합니다. * 제 3정규형은 이행적 함속종속을 제거합니다. #### 💡 데이터의 중복을 피할수있는데 역정규화는 왜실행하나요? / 모든 테이블에 정규화를 진행하나요? * 함께 사용하는 테이블이 정규화로 인해 쪼개진다면 연산 할때마다 join문을 실행해야하므로 성능의 저하가 생길 수 있습니다. 이러한 경우에 역정규화를 실행합니다. #### 💡 이상현상에 대해 설명하시오. * 이상현상은 원하지 않는 값이 연쇄적으로 삭제되거나 수정 또는 삽입되는 현상입니다. 이상현상에는 갱신이상, 삽입이상, 삭제이상이 있습니다. </br></br> # Transaction 답변 #### 💡 트랜잭션이란 무엇이고 특성에 대해 설명하시오. * DB의 상태를 하나의 일관된 상태에서 또 다른 일관된 상태로 변환시켜주는 연산들의 집합입니다. #### 💡 잠금기법(Locking)에 대해 설명하시오. * locking은 트랜잭션이 DB를 다루는 동안 다른 트랜잭션이 관여하지 못하게 막는 것입니다. #### 💡 잠금 기법의 문제점에 대해서 말하시오. * 교착상태가 발생할 수 있습니다. #### 💡 교착상태(Deadlock)란 무엇인가? * 트랜잭션들이 잠금이 걸린 자원을 무기한 대기하는 현상 #### 💡 교착상태의 빈도를 낮추는 방법에는 무엇이 있나요? * 예방과 회피기법이 있습니다. 예방은 트랜잭션 전에 필요한 데이터에 Lock을 미리 걸어주는 방법입니다. 하지만 데이터 양이 많으면 데드락이 발생할 수 있습니다. 회피기법은 타임스탬프 기법을 적용하여 데이터를 시간 순서대로 제어하는 방법입니다. </br></br> # Index 답변 #### 💡 Index란 무엇인가? * 책의 목차처럼 지정한 칼럼을 정렬하여 쉽게 찾을 수 있도록 만든 테이블입니다. * 검색과 정렬 작업의 속도를 높이기 위해 사용됩니다. #### 💡 데이터베이스의 Index 구조에 대해 설명하시오. * 해쉬테이블과 B+Tree 구조가 있습니다. 하지만 데이터베이스에서 범위 연산에서 우수한 B+ Tree를 사용합니다. #### 💡 Index의 자료구조는 어떤 것을 사용하나요? * 인덱스 자료구조로 해시 테이블과 B+Tree가 있습니다. * 해시테이블은 컬럼의 값으로 생성된 해시를 기반으로 인덱스를 구현합니다. 시간복잡도가 O(1)이라 검색이 매우 빠르지만, 부등호와 같은 연속적인 데이터를 위한 순차 검색이 불가능합니다. * B+Tree는 자식 노드가 2개 이상인 B-Tree를 개선시킨 자료구조입니다. BTree의 리프노드들을 LinkedList로 연결하여 순차 검색을 용이하게 합니다. #### 💡 Index를 따로 설정하지 않은 경우의 테이블은 어떤가요? * 인덱스를 설정하지 않아도 기본적으로 PK값이 인덱스로 설정되어 있습니다. #### 💡 모든 칼럼에 Index를 사용하면 좋나요? * 양이 많은 테이블에서 일부 데이터만 불러 올 때, 풀 스캔 시 처리 성능 떨어지게됩니다. * 모든 컬럼에 인덱스를 추가해 준다면 자칫 본체보다 인덱스가 더 큰 용량을 필요로 하게 됩니다. #### 💡 Index는 어디에 사용하는게 좋아요? * 삽입, 삭제, 갱신이 거의 없고 검색을 많이 하는 테이블에 사용하는 것이 좋습니다. #### 💡 Index 사용 시 장단점과 사용하면 좋은 경우와 나쁜 경우에 대해 설명하시오. * 인덱스를 사용하면 데이터를 가져오는 작업의 성능은 향상시킬 수 있습니다. * 데이터 삽입, 변경 등이 일어날 떄 매번 인덱스가 변경되기 떄문에 성능이 떨어질 수 있습니다. # 심화질문-답변 #### 💡 DB 이중화란 무엇인가? * 물리적으로 떨어져 있는 여러 개의 데이터베이스에 대하여 로컬 데이터베이스의 변경된 내용을 원격데이터베이스에 복제하고 관리하는 것 * 목적 * 사용자는 하나의 데이터베이스에 대해서만 작업을 수행 * 데이터베이스 이중화시스템에 연결되어 있는 다른 데이터베이스에도 작업내용이 동일하게 적용 * 여러개의 데이터베이스를 동시에 관리 # 📝 * Elastic-Search * Sharding