데이터베이스의 특징에 대해 설명
- 실시간 접근성 (Real - Time Accessibility) : 비정형적인 질의(조회)에 대하여 실시간 처리에 의한 응답이 가능
- 지속적인 변화 (Contiunous Evloution) : 데이터베이스의 상태는 동적입니다. 즉 새로운 데이터의 삽입(Insert), 삭제(Delete), 갱신(Update)으로 항상 최신의 데이터를 유지
- 동시 공용(Concurrent Sharing) : 데이터베이스는 서로 다른 목적을 가진 여러 응용자들을 위한 것이므로 다수의 사용자가 동시에 같은 내용의 데이터를 이용할 수 있어야 합니다.
- 내용에 의한 참조(Content Reference) : 데이터베이스에 있는 데이터를 참조할 때 데이터레코드의 주소나 위치에 의해서가 아니라 사용자가 요구하는 데이터 내용으로 찾습니다.
데이터베이스 언어(DDL, DML, DCL)에 대해 설명
- DDL(정의어 : Data Definition Language) : 데이터베이스 구조를 정의, 수정, 삭제하는 언어(alter, create, drop)
- DML(조작어 : Date Manipulation Language) : 데이터베이스 내의 자료 검색, 삽입, 갱신, 삭제를 위한 언어(select, insert, update, delete)
- DCL(제어어 : Data Control Language) : 데이터에 대해 무결설 유지, 병행 수행 제어, 보호와 관리를 위한 언어(commit, rollback, grant, revoke)
SELETE 쿼리의 수행 순서
- FROM, ON, JOIN > WHERE, GROUP BY, HAVING > SELECT > DISTINCT > ORDER BY > LIMIT
- FROM : 각 테이블 확인
- ON : JOIN 조건 확인
- JOIN : JOIN이 실행되어 데이터가 SET 으로 모아지게 된다. 서브쿼리도 함께 포함되어 임시 테이블을 만들 수 있게 도와준다.
- WHERE : 데이터셋을 형성하게 되면 WHERE의 조건이 개별 해에 적용된다. WHERE절의 제약조건은 FROM절로 가져온 테이블에 적용될 수 있다.
- GROUP BY : WHERE의 조건 적용 후 나머지 행은 GROUP BY절에 지정된 열의 공통 값을 기준으로 그룹화된다. 쿼리에 집계기능이 있는 경우에만 이 기능을 사용해야 한다.
- HAVING : GROUP BY절이 쿼리에 있을 경우 HAVING 절의 제약조건이 그룹화된 행 적용
- SELECT : SELECT에 표현된 식이 마지막으로 적용
- DISTINCT : 표현된 행에서 중복된 행은 삭제
- ORDER BY : 지정된 데이터를 기준으로 오름차순, 내림차수 지정
- LIMIT : LIMIT에서 벗어나는 행들은 제외되어 출력된다.
트리거(Trigger)에 대해 설명
- 트리거는 특정 테이블에 대한 이벤트에 반응해 INSERT, DELETE, UPDATE 같은 DML 문이 수행되었을 때, 데이터베이스에서 자동으로 동작하도록 작성된 프로그램
- 사용자가 직접 호출하는 것이 아닌, 데이터베이스에서 자동적으로 호출한다는 것이 가장 큰 특징
Index에 대해 설명, 장/단점에 대해 아는대로 말하시오
- Index란 테이블을 처음부터 끝까지 검색하는 방법인 FTS(Full Table Scan)과 달리 인덱스를 검색하여 해당 자료의 테이블을 엑세스 하는 방법
- 예를 들어, DB를 책으로 비유하면 데이터는 책의 내용일 것이고, 데이터가 저장된 레코드의 주소는 index목록에 있는 페이지 번호일 것이다.
- 인덱스는 항상 정렬된 상태를 유지하기 때문에 원하는 값을 검색하는데 빠르지만, 새로운 값을 추가하거나 삭제, 수정하는 경우에는 쿼리문 실행 속도가 느려집니다.
- 즉 인덱스는 데이터의 저장 성능을 희생하고 그 대신 데이터의 검색 속도를 높이는 기능이라 할 수 있다.
DBMS는 Index를 어떻게 관리하고 있나요? (Index 자료구조)
- B+Tree 인덱스 자료 구조
- 자식 노드가 2개 이상인 B-Tree를 개선시킨 자료구조
- BTree 리프노드들을 LinkedList로 연결하여 순차 검색을 용이하게 합니다. 해시 테이블보다 나쁜 0(log2N)의 시간복잡도를 갖지만 일반적으로 사용되는 자료 구조
- 해시 테이블
- 컬럼의 값으로 생성된 해시를 기반으로 인덱스 구현
- 시간복잡도가 0(1)이라 검색이 매우 빠릅니다.
- 부등호(<,>)와 같은 연속적인 데이터를 위한 순차 검색이 불가능하기 때문에 사용에 적합하지 않습니다.
정규화에 대해 설명
- 하나의 릴레이션에 하나의 의미만 존재하도록 릴레이션을 분해하는 과정
- 데이터의 일관성, 최소한의 데이터 중복, 최대한의 데이터 유연성을 위한 방법
- 제 1정규형 : 테이블의 컬럼이 원자 값(Atomic Value : 하나의 값)을 갖도록 분해
- 제 2정규형 : 제 1정규형을 만족하고, 기본키가 아닌 속성이 기본키에 완전 함수 종속이도록 분해
- 완전 함수 종속이란 기본키의 부분집합이 다른 값을 결정하지 않는 것 의미
- 제 3정규형 : 제2 정규형을 만족하고, 이행적 함수 종속을 없애도록 분해
- 이행적 종속이란 A → B, B → C 가 성립 할 때 A → C가 성립되는 것을 의미
- BCNF 정규형 : 제 3정규형을 만족하고, 함수 종속성 X → Y가 성립할 때 모든 결정자 X가 후보키가 되도록 분해
정규화 장점/단점
- 장점
- 데이터베이스 변경 시 이상현상이 발생하는 문제점 해결
- 데이터베이스 구조 확장 시 정규화된 데이터베이스는 그 구조를 변경하지 않아도 되거나 일부만 변경해도 된다.
- 단점
- 릴레이션의 분해로 인해 릴레이션 간의 연산(JOIN연산)이 많아진다. 이로 인해 질의에 대한 응답 시간이 느려질 수 있다
- 정규화를 수행한다는 것은 이상현상을 제거하는 것이다. 데이터의 중복 속성을 제거하고 결정자에 의해 동일한 의미의 일반 속성이 하나의 테이블로 집약되므로 한 테이블의 데이터 용량이 최소화되는 효과가 있다. 따라서 정규화된 테이블은 데이터를 처리할 때 속도가 빨라질 수 도 있고 느려질 수도 있는 특성이 있다
역정규화 하는 이유
- 정규화를 거치면 릴레이션 간의 연산(JOIN연산)이 많아지는 데, 이로 인해 성능이 저하될 우려가 있습니다.
- 역정규화를 하는 가장 큰 이유는 성능 문제가 있는(읽기 작업이 많이 필요한) DB의 전반적인 성능을 향상시키기 위함입니다.
이상 현상 종류 설명
- 이상 현상은 테이블을 설계할 때 잘못 설계하여 데이터를 삽입, 삭제, 수정할 때 생기는 논리적 오류를 말합니다.
- 삽입 이상 : 자료를 삽입할 때 특정 속성에 해당하는 값이 없어 NULL을 입력해야 하는 현상
- 갱신 이상 : 중복된 데이터 중 일부만 수정되어 데이터 모순이 일어나는 현상
- 삭제 이상 : 어떤 정보를 삭제하면, 의도하지 않은 다른 정보까지 삭제 되어버리는 현상
- 이러한 이상 현상을 예방하고 효과적인 연산을 하기 위해 데이터 정규화를 합니다.
SQL Injection이 무언인지 설명
- SQL Injection이란 공격자가 악의적인 의도를 갖는 SQL구문을 삽입하여 데이터베이스를 비정상적으로 조작하는 코드 인젝션 공격 기법
SQL Injection을 방어 및 방지하기 위한 방법에 대해 알고 있다면 설명
- 입력값을 검증하여 사용자의 입력이 쿼리에 동적으로 영향을 주는 경우 입력된 값이 개발자가 의도한 값(유효값)인지 검증합니다.
- 저장 프로시저를 사용합니다.
- 저장 프로시저란 사용하고자 하는 Query에 미리 형식을 지정하는 것을 말한다. 지정된 형식의 데이터가 아니면 Query가 실행되지 않기 때문에 보안성이 크게 향상
RDBMS와 NoSQL의 차이에 대해 설명
- RDMS는 모든 데이터를 2차원 테이블 형태로 표현
- 장점 : 스키마에 맞춰 데이터를 관리하기 때문에 데이터의 정합성을 보장
- 단점 : 시스템이 커질 수록 쿼리가 복잡해지고 성능이 저하되면 Scale-out이 어렵다(Scale-up만 가능)
- NoSQL(Not Only SQL)은 RDBMS와 반대로 데이터간의 관계를 정의하지 않고, 스키마가 없어 좀 더 자유롭게 데이터를 관리할 수 있으며, 컬렉션이라는 형태로 데이터를 관리합니다.
- 장점 : 스키마 없이 key-value 형태로 데이터를 관리해 자유롭게 데이터를 관리 할 수 있다.
- 데이터 분산이 용이하여 성능 향상을 위한 scale-up 뿐만 아닌 scale-out 또한 가능
- 단점 : 데이터 중복이 발생할 수 있고, 중복된 데이터가 변경될 경우 수정을 모든 컬렉션에서 수행 해야 한다.
- 스키마가 존재하지 않기에 명확한 데이터 구조를 보장하지 않아 데이터 구조 결정이 어려울 수 있다.
RDBMS와 NoSQL은 어느 경우 적합한가
- RDBMS는 데이터 구조가 명확하고, 변경 될 여지가 없으며 스키마가 중요한 경우 사용하는 것이 좋습니다. 또한 중복된 데이터가 없어(데이터 무결성) 변경이 용이하기 때문에 관계를 맺고 있는 데이터가 자주 변경이 이루어지는 시스템 적합
- NoSQL은 정확한 데이터 구조를 알 수 없고 데이터가 변경/확장 될 수 있는 경우 사용하는 것이 좋습니다. 또한 단점에서도 명확하듯 데이터 중복이 발생할 수 있으며 중복된 데이터가 변경될 시 모든 컬렉션에서 수정해야 하기 때문에 Update가 많이 이루어지지 않은 시스템에 좋으며, Scale-out이 가능하다는 장점을 활용해 막대한 데이터를 저장해야 해서 DB를 Scale-out 해야 되는 시스템에 적합
트랜잭션이란 무엇인지 설명
- 트랜잭션은 작업의 완전성을 보장
- 즉, 작업들을 모둔 처리하거나 처리하지 못할 경우 이전 상태로 복구하여 작업의 일부만 적용되는 현상이 발생하지 않게 만들어주는 기능
- 하나의 트랜잭션은 Commit(작업완료)되거나 Rollback(취소) 됩니다.
트랜잭션의 특성(ACID)에 대해 설명
- 원자성(Atomicity) : 작업이 모두 반영되던지 아니면 전혀 반영되지 않아야 한다.
- 일관성(Consistency) : 실행이 완료되면 언제나 일관성 있는 상태를 유지해야 한다.
- 독립성(Isolation) : 둘 이상 트랜잭션이 동시에 실행될 경우 서로의 연산에 끼어들 수 없다.
- 영속성(Durability) : 완료된 결과는 영구적으로 반영되어야 한다.
DB 락에 대해 설명
- DB Lock은 트랜잭션 처리의 순차성을 보장하기 위한 방법
- 공유락(LS, Shared Lock) Read Lock 라고도 하는 공유락은 트랜잭션이 읽기를 할 때 사용하는 락이며,
데이터를 읽기만 하기 때문에 같은 공유락 끼리는 동시에 접근이 가능합니다. - 베타락(LX, Exclusive Lock) Write Lock 이라고도 하는 베타락은 데이터를 변경할 때 사용하는 락입니다.
트랜잭션이 완료될 때 까지 유지되며, 베타락이 끝나기 전까지 어떠한 접근도 허용하지 않습니다.
Elastic Search의 키워드 검색과 RDBMS의 LIKE 검색 차이에 대해 설명
- .RDBMS는 단순 텍스트매칭에 대한 검색만을 제공해 동의어나 유의어 같은 검색은 불가능
- MySQL 최신 버전에서 n-gram 기반의 Full-Text 검색을 지원하긴 하지만, 한글 검색의 경우 아직 많이 빈약한 감이 있습니다.
- 하지만 엘라스틱 서치는 동의어나 유의어를 활용한 검색이 가능하며, 비정형 데이터의 색인과 검색이 가능하고, 역색인 지원으로 매우 빠른 검색이 가능합니다.
- Full-Text : 이미지,CSS, 글 등의 복합적으로 이뤄진 컨텐츠에서 순수하게 텍스트만 추출한 데이터를 의미, 이 과정을 보통 크롤링으로 구현함(엘라스틱 서치의 검색 엔진엔 크롤러가 빠져있어 별도로 구축해야함)
옵티마이저(Optimizer)에 대해 아는대로 말하세요
- 옵티마이저는 SQL을 가장 빠르고 효율적으로 수행할 최적의 처리 경로를 생성해주는 DBMS 내부의 핵심 엔진
- 컴퓨터의 두뇌가 CPU인 것 처럼 DBMS의 두뇌는 옵티마이저라고 할 수 있습니다. 개발자가 SQL을 작성하고 실행하면 즉시 실행되는 것이 아니라 옵티마이저라는 곳에서 "이 쿼리문을 어떻게 실행 시키겠다!" 라는 여러가지 실행 계획을 세우고, 최고의 효율을 갖는 실행계획을 판별한 후 그 실행계획에 따라 쿼리를 수행하게 되는 것입니다.
DB 튜닝(Tuning)이 무엇인지 그리고 튜닝의 3단계에 대해 설명
- DB 튜닝이란 DB의 구조나, DB 자체, 운영체제 등을 조정하여 DB 시스템의 전체적인 성능을 개선하는 작업
- 튜닝은 DB 설계 튜닝 → DBMX 튜닝 → SQL 튜닝 단계 진행
- 1단계 - DB 설계 튜닝(모델링 관점)
- DB 설계 단계에서 성능을 고려하여 설계
- 데이터모델링, 인덱스 설계
- 데이터파일, 테이블 스페이스 설계
- 데이터베이스 용량 산정
- 튜닝 사례 - 반정규화, 분산파일 배치
- 2단계 - DBMS 튜닝(환경 관점)
- 성능을 고려하여 메모리나 블록 크기 지정
- CPU, 메모리 I/O에 관한 관점
- 튜닝 사례 - Buffer 크기, Cache 크기
- 3단계 - SQL 튜닝(App 관점)
- SQL 작성 시 성능 고려
- Join, Indexing, SQL Execution Plan
- 튜닝 사례 - Hash/ Join
INNER JOIN 과 OUTER JOIN 차이 설명
- INNER JOIN은 서로 연관된 내용만 검색하는 조인 방법
- A와 B에 대해 수행하는 것은 A와 B의 교집합 말합니다.
- OUTER JOIN은 한 쪽에는 데이터가 있고 한 쪽에는 데이터가 없는 경우, 데이터가 있는 쪽의 내용을 전부 출력하는 방법
- A와 B에 대해 수행하는 것은 A와 B의 합집합을 말합나다.
GROUP BY의 역할에 대해 설명
- GROUP BY는 GROUP BY 명령어를 통해 특정 컬럼을 기준으로 연산한 결과를 집계 키로 정의하여 그룹을 짓는 역할
- 집합 연산자는 COUNT,SUM,AVG,MAX,MIN 등이 있고, DISTINCT와 같이 중복 데이터를 제거하는 특징이 있습니다.
DELETE, TRUNCATE, DROP 차이 설명
- DELETE : 데이터는 지우지만 테이블 용량은 줄어들지 않고 원하는 데이터만 골라서 지울 수 있습니다. 삭제 후 되돌릴수 있습니다.
- TRUNCATE : 전체 데이터를 한번에 삭제 하는 방식입니다. 테이블 용량이 줄어들고 인덱스 등 도 삭제되지만 테이블은 삭제할 수 없고, 삭제 후 되돌릴 수 없습니다.
- DROP은 테이블 자체를 완전히 삭제하는 방식(공간, 인덱스, 객체 모두 삭제) 입니다. 삭제 후 되돌릴 수 없습니다.
데이터베이스 클러스터링과 리플리케이션의 차이에 대해 설명
- 클러스터링이란 여러 개의 DB를 수평적인 구조로 구축하는 방식입니다. 동기 방식으로 사용
- 클러스터링 장점
- DB 간의 데이터를 동기화하여 항상 일관성있는 데이터를 얻을 수 있다
- 1개의 DB가 죽어도 다른 DB가 살아 있어 시스템을 장애 없이 운영할 수 있다.(높은 가용성)
- 기존에 하나의 DB서버에 몰리던 부하를 여러 곳으로 분산 시킬수 있다.(로드밸러싱)
- 클러스터링 단점
- 저장소 하나를 공유하면 병목현상이 발생할 수 있다.
- 병목현상 : 전체 시스템이 성능이나 용량이 하나의 구성요소로 인해 제한 받는 현상
- 서버를 동시에 운여하기 위한 비용이 많이 든다
- 저장소 하나를 공유하면 병목현상이 발생할 수 있다.
- 리플리케이션은 여러 개의 DB를 권한에 따라 수직적인 구조로 구축하는 방식. 비동기 방식으로 사용
- 리플리케이션 장점
- DB 요청의 60%~80% 정도가 읽기 작업이기 때문에 Replication만으로도 충분히 성능을 높일 수 있다.
- 비동기 방식으로 운영되어 지연 시간이 거의 없다.
- 리플리케이션 단점
- 노드들 간 데이터 동기화가 보장되지 않아 일관성 있는 데이터를 얻지 못할 수 있다.
- Master DB가 다운되면 복구 및 대처가 까다롭다.
HAVING과 WHERE의 차이 설명
- having은 그룹을 필터링 하는데 사용되고, where은 개별 행을 필터링하는데 사용됩니다.
- 집계함수(COUNT, SUM, AVG, MAX, MIN 등)는 HAVING절과 함께 사용할 수 있으나, WHERE절은 사용할 수 없습니다.(집계함수를 사용할 수 있는 GROUP BY절 보다 WHERE절이 먼저 수행)
- HAVING은 그룹화 또는 집계가 발생한 후 필터링하는 데 사용
- WHERE은 그룹화 또는 집계가 발생하기 전에 필터링하는 데 사용
JOIN에서 ON과 WHERE의 차이 설명
- ON이 WHERE 보다 먼저 실행되어 JOIN을 하기 전에 필터링을 하고 (=ON 조건으로 필터링이 된 레코드간 JOIN이 이뤄진다)
- WHERE은 JOIN을 한 후에 필터링을 합니다.(=JOIN을 한 결과에서 WHERE 조건절로 필터링이 이뤄진다)
출처
https://dev-coco.tistory.com/158
'이론 > ⭐' 카테고리의 다른 글
개발자 기술면접 질문 정리 - 네트워크 (5) | 2024.09.03 |
---|---|
개발자 기술면접 질문 정리 - 알고리즘 (0) | 2024.09.03 |
기술면접 질문 정리 - 자료구조 (6) | 2024.09.03 |
기술면접 질문 정리 - 백엔드 (2) | 2024.09.01 |
신입 개발자 기술면접 질문 정리 -자바 (0) | 2024.09.01 |