💡DBMS에 대해 설명해주세요
DBMS(Database Management System)는 데이터베이스 관리 시스템의 약자로 데이터베이스를 관리하고 효율적으로 저장, 검색, 업데이트 하기 위한 소프트웨어 시스템입니다. 데이터베이스는 구조화된 정보를 저장하고, 필요한 경우 해당 정보에 접근할 수 있는 중요한 역할을 합니다. DBMS는 이러한 데이터베이스를 효과적으로 관리하고 관리자 및 응용프로그램이 데이터에 접근하고 조작할 수 있도록 도와줍니다.
💡데이터베이스의 특징에 대해 설명해주세요
1. 실시간 접근성(Real-Time Accessibility) : 비정형적인 질의(조회)에 대하여 실시간 처리에 의한 응답이 가능해야 합니다.
2. 지속적인 변화(Continuous Evloution) : 데이터베이스의 상태는 동적입니다. 즉, 새로운 데이터의 삽입, 삭제, 갱신으로 항상 최신의 데이터를 유지해야 합니다.
3. 동시공용(Concurrent Sharing) : 데이터베이스는 서로 다른 목적을 가진 여러 응용자들을 위한 것이므로 다수의 사용자가
동시에 같은 내용의 데이터를 이용할 수 있어야 합니다.
4. 내용에 의한 참조(Content Reference) : 데이터베이스에 있는 데이터를 참조할 때 데이터 레코드의 주소나 위치에 의해서가 아니라 사용자가 요구하는 데이터 내용으로 찾습니다.
💡SQL에 대해 설명해주세요
SQL(Structured Query Language)는 가장 널리 사용되는 데이터베이스 언어로, RDBMSㅇ에서 데이터를 관리하고 조작하기 위한 표준화된 언어입니다. SQL 명령어의 하위 집합으로 DDL, DML, DCL, TCL이 있습니다.
-DDL(Data Definition Langage; 데이터 정의어) : Create, Alter, Drop, Rename, Truncate
-DML(Data Manipulation Langage; 데이터 조작어) : Select, Insert, Update, Delete
-DCL(Data Control Langage; 데이터 제어어) : Grant, Revoke
-TCL(Transaction Control Langage; 트랜잭션 제어어) : Commit, Rollback, SavePoint
💡트랜잭션에 대해 설명해주세요
트랜잭션(Transaction)이란 데이터를 조작하기 위해 처리하는 일련의 작업들을 하나로 표현한 작업 단위입니다.
데이터베이스의 무결성과 일관성을 보장하며 데이터 조작의 안전성을 유지하는데 중요한 역할을 하고 다음과 같은 특징을 가지고 있습니다.
1. 원자성(Atomicity) : 모든 작업은 성공적으로 Commit되거나, 하나의 작업이라도 실패하면 Rollback 되어야 합니다.
2. 일관성(Consistency) : 트랜잭션이 시작하기 전과 끝난 후에 데이터베이스는 일관된 상태여야 합니다.
3. 고립성(Isolation) : 각 트랜잭션은 다른 트랜잭션에서 수행 중인 작업에 영향을 미치지 않고 독립적으로 실행되어야 합니다.
4. 지속성(Durability) : 트랜잭션이 성공적으로 완료되면 그 결과는 영구적으로 데이터베이스에 저장되어야 합니다.
💡DB락에 대해 설명해주세요
DB락은 데이터베이스에서 사용자 또는 프로세스 간의 충돌을 방지하기 위한 동시성 제어 메커니즘입니다.
DB 락에는 다음과 같은 유형이 있습니다.
1. 공유 락(Shared Lock; Read Lock) : 공유 락을 획득한 트랜잭션은 읽기만 가능하고 데이터를 변경할 수 없습니다.
2. 배타 락(Exclusive Lock; Write Lock) : 배타 락을 획득한 트랜잭션은 데이터를 읽거나 쓸 수 없습니다.
DB 락을 사용함으로써 데이터베이스 데이터 일관성을 유지하고 교착 상태(Deadlock)을 방지합니다.
💡데이터베이스 인덱스에 대해 설명해주세요
인덱스(Index)는 데이터베이스에서 데이터를 빠르게 검색하고 접근하기 위한 데이터 구조입니다.
태이블 내의 열에 대한 인덱스를 생성할 수 있으며, 이 인덱스는 해당 열의 값을 정렬하고, 빠른 검색을 지원합니다.
전체 테이블을 처음부터 끝까지 검색하는 대신 인덱스를 검색하여 원하는 데이터를 빠르게 찾을 수 있습니다.
쿼리의 성능이 향상되고 정렬 작업이 필요하지 않는 것이 장점이지만 추가적인 디스크 공간을 차지하고 테이블 데이터 변경될 때
인덱스도 같이 변경되어야 하기 때문에 성능 영향이 있을 수 있습니다.
💡RDBMS와 NoSQL의 차이에 대해 설명해주세요
RDBMS(관계형 데이터베이스)는 데이터를 정해진 스키마에 따라 2차원 테이블 형태로 저장하며, 데이터를 관리하기 때문에 데이터의 정합성을 보장하지만, 시스템이 커질 수록 스키마와 쿼리가 복잡해지고 성능이 저하됩니다.
NoSQL(Not Only SQL)은 데이터 간의 관계를 정의하지 않고 문서, 열 지향, 그래프, 키-값 모델의 컬렉션으로 데이터를 관리할 수 있습니다. 하지만 데이터 중복이 발생할 수 있고, 중복된 데이터가 변경될 경우 수정을 모든 컬렉션에서 수행해야 합니다.
RDBMS는 데이터 구조가 명확하고 변경될 여지가 없으며 스키마가 중요한 경우 사용하기 좋고, NoSQL은 정확한 데이터 구조를 알 수 없고 데이터가 변경/확장 될 수 있는 경우 사용하는 것이 좋습니다
💡SELECT 쿼리의 작성 순서를 알려주세요
셀프웨그해오
셀 - Select
프 - From
웨 - Where
그 - Group by
해 - Having
오 - Order By
순으로 작성해야 합니다.
💡SELECT 쿼리의 수행 순서를 알려주세요
From, On, Join -> Where, Group by, Having -> Select -> Distinct -> Order by -> Limit
1. From : 각 테이블을 확인합니다.
2. On : Join 조건을 확인합니다.
3. Join : Join이 실행되어 데이터가 Set으로 모아지게 된다. 서브쿼리도 함께 포함되어 임시 테이블을 만들 수 있게 도와줍니다.
4. Where : 데이터 셋이 형성되면 Where의 조건이 개별 행에 적용됩니다.
5. Group by : 조건이 적용된 나머지 행은 Group by 절에 지정된 열의 공통 값을 기준으로 그룹화됩니다.
6. Having : Group by절이 쿼리에 있을경우 Having 절의 제약조건이 그룹화된 행에 적용됩니다.
7. Select : Select에 표현된 식이 마지막으로 적용됩니다.
8. Distinct : 행에서 중복된 행은 삭제됩니다.
9. Order by : 지정된 데이터를 기준으로 오름차순 또는 내림차순으로 정렬합니다.
10. Limit : Limit 조건에 벗어나는 행들은 제외되어 출력됩니다.
💡Join에 대해서 설명해주세요
Join은 두 개 이상의 테이블을 연결하여 하나의 결과 집합을 만드는 데 사용되는 SQL 명령입니다.
"
SELECT customers.name, orders_order_date
FROM customers INNER JOIN orders ON customers.customer_id = orders.customer_id;
"
JOIN은 일반적으로 테이블 간의 관계를 정의하는 열(키 값)을 사용합니다. 위 예시에서 customer_id가 키 값이며 이 값을 기반으로 데이터를 연결하며, 일치하는 값을 가진 행이 연결됩니다.
JOIN는 여러 유형이 있는데 다음과 같습니다.
a INNER JOIN b : a와 b의 일치하는 행(교집합)만 반환합니다.
a LEFT (OUTER) JOIN b : 왼쪽 테이블 a의 모든 행과 일치하는 b의 행을 반환합니다.
a RIGHT (OUTER) JOIN b : 오른쪽 테이블 b의 모든 행과 일치하는 b의 행을 반환합니다.
a FULL OUTER JOIN b : 양쪽 테이블의 모든 행(합집합)을 반환합니다.
💡트리거에 대해 설명해주세요
트리거(Trigger)는 DBMS에서 발생하는 이벤트에 자동으로 반응하고 특정 작업을 수행하는 프로시저나 스크립트입니다.
💡데이터베이스에서의 이상현상에 대해 설명해주세요
데이터베이스 이상현상(Anomaly)은 데이터의 일관성이 깨지거나, 불일치 또는 모순된 데이터가 발생하는 상황을 말합니다. 세가지 종류가 있습니다.
삽입 이상 : 데이터 삽입시 필수 정보 누락으로 인해 문제가 발생하는 현상
갱신 이상 : 중복된 정보를 업데이트할 때 모순된 결과가 생기는 현상
삭제 이상 : 데이터를 삭제할 때 필요한 정보까지 함께 삭제되는 현상
💡SQL Injection에 대해 설명해주세요
악의적인 사용자가 악의적인 SQL 쿼리를 주입하여 데이터베이스에 무단 접근하거나 조작하는 공격 기술입니다.
이를 방지하기 입력 검증, 준비된 문장 사용, O RM 도구 사용 등 보안조치를 취해야 합니다.
💡Elastic Search에 대해 설명해주세요
오픈 소스 분산 검색 및 분석엔진으로, 대규모 데이터를 효과적으로 저장, 검색, 분석할 수 있는 도구입니다.
실시간 검색 능력을 통해 데이터가 색인되면 빠르게 검색 가능하며, 복잡한 쿼리, 필터링, 집계를 지원하며 다양한 응용분야에서 활용됩니다.
💡옵티마이저에 대해 설명해주세요
옵티마이저는 SQL 쿼리의 최적 실행 계획을 선택하는 역할을 하는 도구입니다. 쿼리의 조인 순서, 인덱스 사용,
필터링 방법 등을 결정하여 데이터베이스 성능을 최적화합니다.
💡몽고DB에 대해 설명해주세요
NoSQL 데이터베이스로, JSON 스타일의 문서를 사용하여 유연한 데이터 구조를 지원합니다.
💡Oracle과 MySQL의 차이에 대해 설명해주세요
1. 구조적 차이 : 오라클은 DB 서버가 통합된 하나의 스토리지를 공유하지만 MySQL은 DB 서버마다 독립적인 스토리지를 할당합니다.
2. 조인 방식의 차이 : 공통적으로 중첩 루프 조인 방식을 제공하지만 오라클은 추가로 해시 조인, 소트 머지 조인 방식을 제공합니다.
3. 확장성의 차이 : 오라클은 별도의 DBMS를 설치해 사용할 수 없지만, MySQL은 사용 가능합니다.
4. 메모리 사용율의 차이 : 오라클은 메모리 사용율이 크고 MySQL은 사용율이 낮습니다.
5. SQL 구문의 차이 :
- NULL 대체 : 오라클은 NVL, MySQL은 IFNULL을 사용
- 페이징 기법 : 오라클은 ROWNUM, MySQL은 LIMIT 사용
- 가상테이블 : 오라클은 SELECT 1 FROM DUAL, MySQL은 SELECT 1
- 현재 날짜 : 오라클은 SYSDATE, MySQL은 NOW()
- 조건식 : 오라클은 DECODE, MYSQL은 IFNULL
등이 있습니다.
💡MySQL에 대해 설명해주세요
옵티마이저는 SQL 쿼리의 최적 실행 계획을 선택하는 역할을 하는 도구입니다. 쿼리의 조인 순서, 인덱스 사용,
필터링 방법 등을 결정하여 데이터베이스 성능을 최적화합니다.
개발자 기술면접 질문 정리 - DB
'CS > 개발지식' 카테고리의 다른 글
[CS] 개발자 기술면접 질문 정리 - Java (1) | 2023.11.04 |
---|---|
[CS] 객체 지향 프로그래밍(OOP) (0) | 2023.03.23 |
[CS] 클래스, 인터페이스 (0) | 2023.03.23 |