danDevlog

기술 면접 준비 - 데이터베이스 본문

기술 면접 준비

기술 면접 준비 - 데이터베이스

단데기이 2022. 7. 25. 11:48
728x90

 

데이터베이스의 특징에 대해 설명

  1. 실시간 접근성(Real-Time Accessibility) : 비정형적인 질의(조회)에 대하여 실시간 처리에 의한 응답이 가능해야 합니다.
  2. 지속적인 변화(Continuous Evolution) : 데이터베이스의 상태는 동적입니다. 즉 새로운 데이터 삽입, 삭제, 갱신으로 항상 최신의 데이터를 유지해야 합니다.
  3. 동시 공용(Concurrent Sharing) : 데이터베이스는 서로 다른 목적을 가진 여러 응용자들을 위한 것이므로 다수의 ㅅ하용자가 동시에 같은 내용의 데이터를 이용할 수 있어야 합니다.
  4. 내용에 의한 참조(Content Reference) : 데이터베이스에 있는 데이터를 참조할 때 데이터 레코드의 주소나 위치에 의해서가 아니라 사용자가 요구하는 데이터 내용으로 찾습니다.

데이터베이스 언어(DDL, DML, DCL)에 대해 설명

  • DDL(정의어 : Data Definition Language) : 데이터베이스 구조를 정의, 수정, 삭제하는 언어입니다.
    • ex) ALTER, CREATE, DROP...
  • DML(조작어 : Data Manipulation Language) : 데이터베이스내의 자료 검색, 삽입, 갱신, 삭제를 위한 언어입니다.
    • ex) SELECT, INSERT, UPDATE, DELETE
  • DCL(제어어 : Data Control Language) : 데이터에 대해 무결성 유지, 병행 수행 제어, 보호와 관리를 위한 언어입니다.
    • ex) COMMIT, ROLLBACK, GRANT, REVOKE

SELECT 쿼리의 수행 순서?

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

  1. FROM - 각 테이블을 확인합니다.
  2. ON - JOIN 조건을 확인합니다.
  3. JOIN - JOIN이 실행되어 데이터가 SET으로 모아지게 됩니다. 서브쿼리도 함께 포함되어 임시 테이블을 만들 수 있게 도와줍니다.
  4. WHERE - 데이터셋을 형성하게 되면 WHERE의 조건이 개별 행에 적용됩니다. WHERE절의 제약 조건은 FROM절로 가져온 테이블에 적용될 수 있습니다.
  5. GROUP BY - WHERE의 조건 적용 후 나머지 행은 GROUP BY절에 지정된 열의 공통 값을 기준으로 그룹화됩니다. 쿼리에 집계 기능이 있는 경우에만 이 기능을 사용해야 합니다.
  6. HAVING - GROUP BY절이 쿼리에 있을 경우 HAVING 절의 제약조건이 그룹화된 행에 적용됩니다.
  7. SELECT - SELECT에 표현된 식이 마지막으로 적용됩니다.
  8. DISTINCT - 표현된 행에서 중복된 행은 삭제합니다.
  9. ORDER BY - 지정된 데이터를 기준으로 오름차순, 내림차순 지정합니다.
  10. LIMIT - LIMIT에서 벗어나는 행들은 제외되어 출력됩니다.

트리거(TRIGGER)에 대해 설명

  • 트리거는 특정 테이블에 대한 이벤트에 반응해 INSERT, DELETE, UPDATE와 같은 DML문이 수행되었을때, 데이터베이스에서 자동으로 동작하도록 작성된 프로그램입니다.
  • 사용자가 직접 호출하는  것이 아닌, 데이터베이스에서 자동적으로 호출한다는 것이 가장 큰 특징입니다.

INDEX에 대해 설명, 장/단점에 대해 아는대로 말해보기

  • INDEX란 테이블을 처음부터 끝까지 검색하는 방법인 FTS(Full Table Scan)과는 달리 인덱스를 검색하여 해당 자료의 테이블을 엑세스 하는 방법입니다.
    • ex) DB를 책으로 비유하면 데이터는 책의 내용일 것이고, 데이터가 저장된 레코드의 주소는 INDEX목록에 있는 페이지 번호일 것입니다.
  • 인덱스는 항상 정렬된 상태를 유지하기 때문에 원하는 값을 검색하는데 빠르지만, 새로운 값을 추가하거나 삭제, 수정하는 경우에는 쿼리문 실행 속도가 느려집니다.
  • 즉, 인덱스는 데이터의 저장 성능을 희생하고 그 대신 데이터의 검색 속도를 높이는 기능이라 할 수 있습니다.

정규화에 대해 설명

  • 하나의 릴레이션에 하나의 의미만 존재하도록 릴레이션을 분해하는 과정이며, 데이터의 일관성, 최소한의 데이터 중복, 최대한의 데이터 유연성을 위한 방법입니다.
  • 제 1 정규형 : 테이블의 컬럼이 원자 값을 갖도록 분해합니다.
  • 제 2 정규형 : 제 1 정규형을 만족하고, 기본키가 아닌 속성이 기본키에 완전 함수 종속이도록 분해합니다.
    • 완전 함수 종속 : 기본키의 부분집합이 다른 값을 결정하지 않는 것을 의미합니다. 
  • 제 3 정규형 : 제 2 정규형을 만족하고, 이행적 함수 종속을 없애도록 분해합니다.
    • 이행적 종속 : A -> B, B -> C 가 성립할 때 A -> C 가 성립되는 것을 의미합니다.
  • BCNF정규형 : 제 3 정규형을 만족하고, 함수 종속성이 X -> Y가 성립할 때 모든 결정자 X가 후보키가 되도록 분해합니다.

정규화에는 어떤 장점이 있고, 어떤 단점이 있는지 설명

  • 장점
    1. 데이터베이스 변경 시 이상현상이 발생하는 문제점을 해결할 수 있다.
    2. 데이터베이스 구조 확장 시 정규화된 데이터베이스는 그 구조를 변경하지 않아도 되거나 일부만 변경해도 됩니다.
  • 단점
    1. 릴레이션의 분해로 인해 릴레이션 간의 연산(JOIN 연산)이 많아집니다. 이로인해 질의에 대한 응답 시간이 느려질 수 있습니다.

역정규화를 하는 이유에 대해 아는대로 설명

  • 정규화를 거치면 릴레이션 간의 연산이 많아지는데, 이로인해 성능이 저하될 우려가 있습니다. 역정규화를 하는 가장 큰 이유는 성능 문제가 있는 (읽기작업이 많이 필요한) DB의 전반적인 성능을 향상시키기 위함입니다.

이상 현상의 종류에 대해 설명

  • 이상 현상은 테이블을 설계할 때 잘못 설계하여 데이터를 삽입, 삭제, 수정할 때 생기는 논리적 오류를 말합니다.
  • 삽입 이상 : 자료를 삽입할 때 특정 속성에 해당하는 값이 없어 NULL을 입력해야 하는 현상
  • 갱신 이상 : 중복된 데이터 중 일부만 수정되어 데이터 모순이 일어나는 현상
  • 삭제 이상 : 어떤 정보를 삭제하면, 의도하지 않은 다른 정보까지 삭제되어버리는 현상
    • 이러한 이상 현상을 예방하고 효과적인 연산을 하기 위해 데이터 정규화를 합니다.

SQL Injection이 무엇인지 설명

  • 공격자가 악의적인 의도를 갖는 SQL구문을 삽입하여 데이터베이스를 비정상적으로 조작하는 코드 인젝션 공격 기법입니다.

SQL Injection을 방어 및 방지하기 위한 방법에 대해 설명

  1. 입력값을 검증하여 사용자의 입력이 쿼리에 동적으로 영향을 주는 경우 입력된 값이 개발자가 의도한 값(유효 값) 인지 검증합니다.
  2. 저장 프로시저를 사용합니다. (사용하고자 하는 Query에 미리 형식을 지정하는 것을 말한다.)

RDBMS와 NoSQL의 차이에 대해 설명해주세요.

  RDBMS는 모든 데이터를 2차원 테이블 형태로 표현합니다.

  • 장점 : 스키마에 맞춰 데이터를 관리하기 때문에 데이터의 정합성을 보장할 수 있습니다.
  • 단점 : 시스템이 커질 수록 쿼리가 복잡해지고 성능이 저하되며 Scale-out이 어렵습니다.

  NoSQL은 RDBMS와 반대로 데이터간의 관계를 정의하지 않고, 스키마가 없어 좀 더 자유롭게 데이터를 관리할 수 있으며, 컬렉션이라는 형태로 데이터를 관리합니다.

  • 장점 : 스키마 없이 Key-Value 형태로 데이터를 관리해 자유롭게 데이터를 관리할 수 있습니다.
  • 데이터 분산이 용이하여 성능 향상을 위한 scale-up 뿐만아닌 scale-out 또한 가능합니다.
  • 단점 : 데이터 중복이 발생할 수 있고, 중복된 데이터가 변경될 경우 수정을 모든 컬렉션에서 수행해야 합니다.
  • 스키마가 존재하지 않기에 명확한 데이터 구조를 보장하지 않아 데이터 구조 결정이 어려울 수 있습니다.

RDBMS와 NoSQL은 어느 경우에 적합한가?

  • RDBMS는 데이터 구조가 명확하고, 변경 될 여지가 없으며 스키마가 중요한 경우 사용하는 것이 좋습니다. 또한 중복된 데이터가 없어(데이터 무결성) 변경이 용이하기 때문에 관계를 맺고 있는 데이터가 자주 변경이 이루어지는 시스템에 적합합니다.
  • NoSQL은 정확한 데이터 구조를 알 수 없고 데이터가 변경/확장 될 수 있는 경우 사용하는 것이 좋습니다. 또한 단점에서도 명확하듯 데이터 중복이 발생할 수 있으며 중복된 데이터가 변경될 시 모든 컬렉션에서 수정해야 하기 때문에 Update가 많이 이루어지지 않는 시스템에 좋으며, Scale-out이 가능하다는 장점을 활용해 막대한 데이터를 저장해야 해서 DB를 Scale-out 해야 되는 시스템에 적합합니다.

트랜잭션이란 무엇인가?

  • 트랜잭션은 작업의 완전성을 보장해줍니다.
  • 즉, 작업들을 모두 처리하거나 처리하지 못할 경우 이전 상태로 복구하여 작업의 일부만 적용되는 현상이 발생하지 않게 만들어주는 기능입니다.
  • 하나의 트랜잭션은 Commit되거나 Rollback 됩니다.

트랜잭션의 특성(ACID)에 대해 설명?

  1. 원자성 : 작업이 모두 반영되던지 아니면 전혀 반영되지 않아야 합니다.
  2. 일관성 : 실행이 완료되면 언제나 일관성 있는 상태를 유지해야 합니다.
  3. 독립성 : 둘 이상 트랜잭션이 동시에 실행될 경우 서로의 연산에 끼어들 수 없습니다.
  4. 영속성 : 완료된 결과는 영구적으로 반영되어야 합니다.

Inner Join과 Outer Join의 차이를 설명

  • Inner Join은 서로 연관된 내용만 검색하는 조인 방법입니다. 
    • A와 B에 대해 수행하는 것은,  A와 B의 교집합을 말합니다. 
  • Outer Join은 한 쪽에는 데이터가 있고 한 쪽에는 데이터가 없는 경우, 데이터가 있는 쪽의 내용을 전부 출력하는 방법입니다.
    • A와 B에 대해 수행하는 것은, A와 B의 합집합을 말합니다.
    • LEFT OUTER JOIN, RIGHT OUTER JOIN, FULL OUTER JOIN이 있습니다.

GROUP BY의 역할에 대해 설명

  • GROUP BY는 GROUP BY 명령어를 통해 특정 컬럼을 기준으로 연산한 결과를 집계 키로 정의하여 그룹을 짓는 역할을 합니다. 집합 연산자는 COUNT, SUM, AVG, MAX, MIN 등이 있고, DISTINCT와 같이 중복 데이터를 제거하는 특징이 있습니다.

DELETE, TRUNCATE, DROP의 차이를 설명

  • DELETE는 데이터는 지우지만 테이블 용량은 줄어들지 않고 원하는 데이터만 골라서 지울 수 있습니다, 삭제 후 되돌릴 수 있습니다.
  • TRUNCATE는 전체 데이터를 한번에 삭제하는 방식입니다. 테이블 용량이 줄어들고 인덱스 등도 삭제되지만 테이블을 삭제할 수 없고, 삭제 후 되돌릴 수 없습니다.
  • DROP은 테이블 자체를 완전히 삭제하는 방식입니다. 삭제 후 되돌릴 수 없습니다.

ORM에 대해 설명

  • ORM은 객체와 관계형 데이터베이스 매핑의 줄임말이며, OOP에서 쓰는 객체라는 개념을 구현한 클래스와 RDB에서 쓰이는 데이터 테이블을 매핑하는 것을 의미합니다.

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 조건절로 필터링이 이뤄짐)

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

기술 면접 준비 - 자료구조  (0) 2022.07.25
기술면접 준비 - 자바  (0) 2022.07.22
Comments