일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
1 | 2 | 3 | ||||
4 | 5 | 6 | 7 | 8 | 9 | 10 |
11 | 12 | 13 | 14 | 15 | 16 | 17 |
18 | 19 | 20 | 21 | 22 | 23 | 24 |
25 | 26 | 27 | 28 | 29 | 30 | 31 |
- 김영한
- 트랜잭션
- 데이터베이스
- B tree 데이터삽입
- 인터럽트
- 반효경
- CPU 스케줄링
- 쉬운코드
- 코딩애플
- Extendable hashing
- 네트워크
- recoverability
- 커널 동기화
- 개발남노씨
- 운영체제
- SDK
- SQL
- 시그널 핸들러
- vite
- 백엔드
- BreadcrumbsComputer-Networking_A-Top-Down-Approach
- 쉬운 코드
- 운영체제와 정보기술의 원리
- 시스템프로그래밍
- 코딩테스트 [ ALL IN ONE ]
- 갤럭시 S24
- concurrency control
- 온디바이스AI
- 프로세스 주소 공간
- Git
- Today
- Total
티끌모아 태산
면접 대비(DB) 본문
1. 데이터베이스란?
컴퓨터 상에서 즉, 전자적으로 저장되고 사용되는 관련있는 데이터들의 조직화된 집합으로 목적에 맞춰 대용량 데이터를 저장하고 관리할 수 있다..
*쿼리란 데이터베이스에 접근해서 원하는데이터를 추출하거나, 수정, 삭제하는 요청을 의미한다.
2. DBMS(database management systems)란?
사용자들이 DB를 정의하고, 만들고, 관리할 수 있도록 기능(추가, 수정, 삭제 등)을 제공하는 소프트웨어 시스템이다.
3. 메타 데이터가 무엇인가? 그리고 데이터 모델링은 무엇인가?
데이터를 설명하기 위한, 데이터의 정보를 담고 있는 데이터를 의미한다. 그리고 데이터 모델링은 복잡한 현실 세계의 데이터를 단순화 해서 컴퓨터 세계의 데이터베이스로 변환하는 과정이다.
Q. 데이터 모델링을 할 때 유의할 사항은 무엇이 있는가?
1. 데이터베이스에 같은 정보를 저장하지 않도록 중복성을 최소화 한다.
2. 데이터의 정의를 데어터의 사용 프로세스와 분리하여 유연성을 높인다.
3. 데이터 간의 상호 연관관계를 명확하게 정의하여 일관성 있게 데이터가 유지되도록한다. .
4. RDBMS(관계형 데이터베이스)란 무엇이고 릴레이션과 테이블을 설명해주세요.❗
RDBMS는 테이블을 이용해 데이터의 구조와 데이터간 종속성을 나타내는 DB로, 데이터가 2차원 테이블에 저장되고, 데이터의 개념적 모델을 릴레이션이라고 하고, 이 릴레이션을 실제로 구현한 개체를 테이블이라고 한다.
*스키마란 데이터 모델을 바탕으로 데이터베이스의 구조를 기술한 것이다.
5. 쿼리가 무엇인지 설명하고, 기본적인 동작 과정을 설명해주세요.
쿼리란 데이터베이스에 접근해서 원하는데이터를 추출하거나, 수정, 삭제하는 요청을 의미한다. 그래서 기본적인 동작과정은 다음과 같습니다.
1. 백엔드에서 데이터베이스로 요청(쿼리)를 보낸다.
2. DBMS가 이 쿼리를 받아서 무엇을 의미하는지 분석하고, 확인 후 요청을 처리한다. 이때, 요청을 처리하기 위해 그 데이터의 메타데이터를 확인한 후 처리한다.
3. 이렇게 처리한 후 결과값을 다시 백엔드에 전달한다.
6. 데이터베이스에서 NULL 의미는 무엇인가?
NULL이란 저장 공간은 주어졌는데, 값이 할당되지 않은 상태를 의미한다.
7. ⭐데이터베이스에서 Key란 무엇인지 설명하고 5가지 key에 대해서 설명해 주세요.
key란 데이터 검색이나 정렬시 튜플을 구별할 수 있는 기준이 되는 속성(attribute)입니다. 크게 5가지 키가 존재한다.
1. 수퍼 키: 테이블에서 튜플을 unique(유일성)하게 식별할 수 있는 속성들의 집합(attributes set)이다. 이렇게 유일성은 만족하지만 후보 키와 달리 최소성을 만족하지 않아도 된다.
2. 후보 키: 수퍼 키 중에서 튜플들을 unique(유일성)하게 식별함과 동시에 최소한을 속성으로만 구성된 키다. 따라서 유일성과 최소성을 모두 만족해야 한다.
*유일성: 튜플을 unique하게 식별가능. 최소성: 꼭 필요한 속성으로만 구성
3. 기본 키: 후보키 중에서 튜플들을 unique하게 식별하기 위해 선택된 main key로 각 테이블 마다 존재(1)해야하며, NULL값을 허용하지 않고(2), 유일한 값(3)이어야 한다.
4. 외래 키: 다른 테이블의 기본 키를 참조하는 키다.
5. 대체 키: 후보키 중에서 기본키를 제외한 나머지 키를 의미.
8. ⭐무결성이란 무엇인가?❗
무결성은 데이터베이스에 저장된 데이터와 실제 데이터가 일치하는 정확성과, 데이터가 일정하게 유지되는 일관성을 의미한다. 데이터베이스의 무결성으로는 기본 키가 고유한 값을 가져야 한다는 개체 무결성, 속성 값이 도메인에 속해야 한다는 도메인 무결성, 외래 키 값은 참조하는 테이블의 기본 키 값이어야 한다는 참조 무결성 있다.
9. SQL이란 무엇인지 설명해주세요
SQL(Structured Query Language)로 현업에서 쓰이는 Relational DBMS 표준언어이다. 그래서 관계형 DB를 만들려고 할때, SQL을 통해서 DB를 정의하고 해당 DB에 데이터를 CRUD한다. 즉, RDBMS라는 소프트웨어가 제공하는 SQL 통합언어를 통해 DB에 실제 데이터를 CRUD할 수 있다.
10. 초기에는 데이터베이스 Application들이 file system 위에 올려졌었다. 즉, 데이터를 저장하기 위해 file system을 사용했었는데, 이 것의 단점은 무엇일까? 그리고 그것의 해결책은 무엇인가?
1. 데이터 중복(data redundancy)과 불일치(inconsistency)
2. 데이터에 접근하는 것의 어려움
3. Security Problem (데이터 보안 문제)
위와 같은 문제점들을 해결해 준 것이 바로 DBMS다.
11. ⭐관계형 데이터베이스 설계에서 anmoaly 즉, 이상현상에 대해서 설명해 주세요.
이상현상은 불필요한 데이터 중복으로 인해, 테이블에 대한 데이터 삽입, 수정, 삭제 연산을 수행할 때 발생할 수 있는 부작용을 의미한다. 그래서 이러한 현상을 제거해 나가면서 DB를 올바르게 설계하는 과정을 정규화 과정이라고 한다. *정규화 과정: 의미적으로 관련있는 속성들끼리 테이블을 분해하는 과정.
1. 삽입 이상: 튜플 삽입 시, 특정 속성에 해당하는 값이 없어 NULL 값을 입력해야 하는 문제가 발생한다. NULL 값이 많아지면 불필요한 저장 공간을 낭비하게 된다.
2. 갱신 이상: 튜플 수정 시, 중복된 데이터의 일부만 수정되어 데이터 불일치 문제가 발생한다.
3. 삭제 이상: 튜플 삭제 시 의도하지 않은 다른 정보까지 연쇄적으로 삭제되는 현상이다.
따라서 올바르게 DB 설계하기 위한 주요 방향성은 다음과 같다.
1. 의미적으로 관련있는 속성들끼리 테이블을 구성. -> 정규화 과정!
2. 중복된 데이터를 최대한 허용하지 않는 방향으로.
3. null 값을 줄이는 방향으로
12. 관계형 데이터 베이스 설계에서 '함수 종속성'에 대해 설명해 주세요.
함수 종속성은 한 테이블에 있는 두 개의 속성들의 집합 사이의 제약을 의미한다. 이상현상을 제거해 나가면서 DB를 올바르게 구축하는 과정을 정규화 과정이라고 하는데, 이 정규화 과정을 수행할 때 참고하는 것이 함수 종속성이다. 예를 들면, X값에 따라 Y값이 유일하게 결정될 때, 혹은 X가 Y를 함수적으로 결정할 때, 이러한 제약 관계를 함수 종속성 이라고 한다.
13. 그렇다면 한 테이블에서 함수 종속성을 어떻게 파악할 수 있을까요?
1. 테이블의 스키마를 보고 의미적으로 파약해야 한다.
2. 만약, X가 Y를 함수적으로 결정할 때, X는 하나의 Y만을 결정해야지 여러 Y를 결정해서는 안됩니다.

14. 함수 종속성의 종류를 각각 설명해주세요.
1. Trivial FD: X가 Y를 결정함과 동시에 Y가 X의 부분집합 관계이다.
2. Non-Trivial FD: X가 Y를 결정하지만 Y는 X의 부분집합이 아닌 관계이다. 이때, 겹치는 요소가 있지만 Y집합이 X의 부분집합이 아니어야 한다.
3. Partial FD: X가 Y를 결정함과 동시에 X의 Proper subset인 X'도 Y를 결정할 수 있는 관계다.
*Proper subset은 X의 부분집합 이지만 X와 동일하지 않은 집합이다.
4. Full FD: Partial FD가 아닌것을 의미한다. X가 Y를 결정함과 동시에 X의 어떠한 Proper subset도 Y를 결정할 수 없는 관계다.
15. ⭐SQL과 NoSQL의 차이점을 설명해 주세요. ❗
MySQL과 같은 SQL을 사용할까? 아니면 MongoDB와 같은 NoSQL을 사용할까? 정답은 없다. 둘다 좋은 솔루션이고 어떤 데이터를 다루냐에 따라 선택을 고려해야한다.
[SQL (관계형 DB)]
SQL을 사용하면 RDBMS에서 데이터를 저장, 수정, 삭제 및 검색을 할 수 있다. 핵심적인 특징은 두 가지가 있다.
1. 데이터는 정해진 데이터 스키마에 따라 테이블에 저장된다.
2. 데이터는 관계를 통해 여러 테이블로 분산된다.
장점: 명확하게 정의된 스키마, 데이터 무결성 보장. 관계는 각 데이터를 중복없이 한번만 저장.
단점: 데이터 스키마를 사전에 계획하고 알려야 하기 때문에 덜 유연함. 대체로 수직적 확장만 가능하다.
*수직적 확장: 단순히 DB 서버의 성능을 향상시키는 것(ex. CPU 업그레이드)
: 명확한 스키마, 데이터를 관계를 통해 여러 테이블로 분산, 데이터 중복 허용x, 대부분 수직적 확장
[NoSQL(비관계형 DB)]
관계형 DB의 반대로, 스키마도 없고, 관계도 없다. 핵심적인 차이는 SQL은 정해진 스키마를 따르지 않으면 데이터 추가가 불가능했지만 NoSQL에서는 다른 구조의 데이터를 같은 컬렉션에 추가가 가능하다. 수평적 확장은 NoSQL에서만 가능.
*수평적 확장: 더 많은 서버가 추가되고 DB가 전체적으로 분산된다. (하나의 DB에서 작동하지만 여러 호스트에서 작동)
: 스키마 없다, 관계도 없다, 중복 데이터 허용, 수평적 확장
장점: 스키마가 없어서 유연하다. 데이터는 애플리케이션이 필요로 하는 형식으로 저장되어, 데이터를 읽어오는 속도가 빠르다.
단점: 데이터 중복을 계속 업데이트 해야한다. 데이터가 여러 컬렉션에 중복되어 있기 때문에 수정 시 모든 컬렉션에서 수행해야 한다.
16. SQL과 NoSQL은 각각 어떨때 사용하면 좋을까?
SQL 데이터베이스 사용이 더 좋을 때,
1. 관계를 맺고 있는 데이터가 자주 변경되는 애플리케이션의 경우 - NoSQL에서는 여러 컬렉션을 모두 수정해야 하기 때문에 비효율적이다.
2. 변경될 여지가 없고, 명확한 스키마가 사용자와 데이터에게 중요한 경우
*데이터의 구조가 명확하고, 변경될 여지가 없으며 스키마가 중요한 경우 사용하는 것이 좋다.
NoSQL 데이터베이스 사용이 더 좋을 때,
1. 정확한 데이터 구조를 알 수 없거나 변경/확장 될 수 있는 경우 즉, 비정형데이터를 저장할 때 가장 적합하다.
2. 읽기를 자주하지만, 데이터 변경은 자주 없는 경우
3. DB를 수평적으로 확장해야 하는 경우(막대한 양의 데이터를 다뤄야 하는 경우)
17. 정규화 과정을 거치는 이유가 무엇인가?
정규화 과정을 거치는 가장 큰 이유는 테이블 간 중복된 데이터를 허용하지 않으면서 무결성을 지키고 이상 현상을 방지하기 위함이다. 그리고 이 과정은 여러 단계가 있지만 일반으로 제1에서 제3 정규형까지 진행한다.
18. 정규화(Nomalization) 과정 중에서 제 1 정규화(1NF)를 설명해 주세요.
제1정규형은 테이블 속성(attribute)이 하나의 값을 갖도록 테이블을 분리시키는 것입니다. 따라서 만약, 한 속성에 두 개 이상의 값을 갖게된다면 제 1 정규형을 만족하지 못하게 됩니다.

19. 정규화(Normalization) 과정 중에서 제 2 정규화(2NF)를 설명해 주세요.
제2정규형은 제 1 정규형을 만족하고, 테이블의 모든 속성이 완전 함수적 종속(Fully FD)을 만족하도록 데이블을 분해시킨다. 조금 쉽게 말하면, 테이블에서 기본키가 복합키(키1, 키2)로 묶여있을 때, 두 키 중 하나의 키만으로 다른 속성을 결정지으면 안된다.
20. 정규화(Normalization)과정 중에서 제 3정규화(3NF)를 설명해 주세요.
제3정규형은 제2정규형이 진행된 테이블에서, 이행적 종속을 없애기 위해 테이블을 분리하는 것이다.
*이행적 종속: A -> B, B-> C, A->C가 성립된다.
21. 조인(JOIN)이란 무엇인가?
JOIN은 두 개 이상의 테이블이나 데이터베이스를 연결하여 데이터를 검색하는 방법이다. 대표적으로 6지 종류가 있습니다. 이해를 돕기위해 하나의 테이블을 하나의 벤다이어 그램으로 가정하겠습니다.
1. INNER JOIN: 교집합으로, 기준 테이블과 join 테이블의 중복된 값을 보여준다. 즉, 공통 속성을 가진 데이터를 검색하기 위한 연산.

2. LEFT OUTER JOIN: 왼쪽 테이블 기준으로 JOIN한다고 가정했을 때, 왼쪽 테이블의 모든 데이터를 결과 테이블에 조회한다.

3. RIGHT OUTER JOIN: LEFT OUTER JOIN과는 반대로 오른쪽 테이블 기준으로 JOIN하는 것을 의미합니다. 오른쪽 테이블의 모든 데이터를 결과 테이블에 조회 한다.

4. FULL OUTER JOIN: 합집합을 의미한다. 즉 테이블 A와 B의 모든 데이터가 검색된다. 이때, 양쪽 테이블에서 조건을 만족하지 않는 데이터가 있더라도 모두 포함해서 조회한다.

5. CROSS JOIN: 모든 경우의 수를 전부 표현해 주는 방식입니다. 예를들어, A의 속성이 3개, B의 속성이 4개라고 했을 때, 총 3*4로 12개의 데이터가 검색된다.

6. SELF JOIN: 자기자신과 자기자신을 JOIN하는 방식이다. 즉, 하나의 테이블을 여러번 복사해서 JOIN한다고 생각하면 됩니다.

22. ⭐DB INDEX란 무엇이고 특징을 설명해 주세요.❗
인덱스란 RDBMS에서 특정 조건을 만족하는 튜플들을 더 빠르게 조회하거나 또는 더 빠르게 정렬과 그룹핑을 하기 위해 사용하는 기술로써 해당 테이블의 튜플을 처음부터 끝까지 Full Scan 하지 않아도 된다.
23. ⭐INDEX는 막 만들어도 좋은가? INDEX를 사용하기 좋은 경우는? 또는 Full-Scan이 더 좋은 경우는 언제인가? 마지막으로 FULL-SCAN을 사용할 지 인덱스를 사용하지 누가 결정하나요?
테이블에 삽입, 수정, 삭제 연상을 수행할 때마다, 인덱스 변경도 함께 일어난다. 그리고 INDEX를 만들때 마다 추가적인 저장 공간을 차지하게 된다. 이러한 요인들 때문에 막 만들게 되면 overhead가 발생한다. 따라서 불필요한 INDEX는 피하는 것이 좋다. 결국, 사용하는 쿼리에 맞춰숴 적절하게 INDEX를 걸어줘야 쿼리가 빠르게 처리될 수 있다.
INDEX는 어디에 사용하는것이 좋은가?
1. 삽입, 수정, 삭제 연산이 거의 없고 검색을 많이 하는 테이블에 사용하는 것이 좋다.
2. 트래픽이 적은 상황에서 사용하는게 좋다.
또한, FULL-SCAN이 더 좋은 경우는
1. 테이블에 데이터가 조금있을 때 (몇 십 ~ 몇 백 정도)
2. 만약 데이터가 엄청 많을 때는, 조회하려는 데이터가 테이블의 상당 부분을 차지할 때!
그럼 FULL-SCAN을 할 지 인덱스를 사용하지 누가 결정하나요? RDBMS의 optimizer가 결정한다. 또한, 이미 데이터가 몇 백만건 이상 있는 테이블에 인덱스를 생성하는 경우, 시간이 몇 분이상 소요될 수 있고, DB성능에 안좋은 영향을 미칠 수 있다. 따라서 트래픽이 적은 상황에서 INDEX를 사용하는 것이 좋다.
24. ❗INDEX의 자료구조는 어떤것을 사용하나요?
인덱스 자료구조는 대표적으로 해시 테이블과 B+Tree가 있습니다. 해시 인덱스는 해시 테이블을 사용하여 구현하며, 시간 복잡도가 O(1)이라 검색이 매우 빠르다는 장점이 있습니다. 하지만 equality 비교만 가능하고, range 비교는 불가능(순차 검색이 불가) 하다는 단점이 있다.
B+Tree는 자식 노드가 2개 이상인 B-Tree를 개선시킨 자료구조입니다. B-Tree의 leaf node들을 LinkedList로 연결하여 순차 검색을 용이하게 한다.
따라서 보통은 DB에서 범위 연산이 우수한 B + Tree를 사용한다.
25. ⭐트랜잭션(Transaction)이란 무엇인가?❗
트랜잭션은 데이터베이스의 상태를 변화시키기 위해 수행하는 작업의 단위로 ACID라는 특징이 있습니다.
A: 원자성(Atomicity)으로 트랜잭션이 DB에 완전히 반영되거나 아예 실행되지 않아야 한다.
C: 일관성(Consistency)으로 트랜잭션의 작업 처리 결과는 항상 일관성이 있어야 한다.
I: 독립성(Isolation)으로 둘 이상의 트랜잭션이 동시에 수행되고 있을 때 각각의 트랜잭션은 서로 간섭 없이 독립적으로 수행되어야 한다.
D: 지속성(Durability)는 트랜잭션이 성공적으로 완료되었으면, 결과는 영구적으로 반영되어야 한다
26. ⭐트랜잭션의 상태를 각각 설명해 주세요.
트랜잭션의 상태는 크게 Active, Failed, Partially Committed, Committed, Aborted가 있습니다.
Active: 트랜잭션이 시작되었지만, 완료되지 않은 상태
Failed: 트랜잭션이 실패하여, 계속될 수 없는 상태.
Partially Committed: 마지막 작업이 수행되었지만 아직 확인되지 않은 상태
Aborted: 트랜잭션이 롤백 되고, 데이터베이스가 이전 상태로 복원된 상태
Committed: 트랜잭션이 정상적으로 완료된 상태
27. Commit과 Rollback이란?
COMMIT: 트랜잭션이 정상적으로 종료되어, DB에 변경 사항을 반영하는 명령어
ROLLBACK: 트랜잭션이 비정상적으로 종료되어 트랜잭션이 수행한 변경 사항을 취소하고, DB를 이전상태로 되돌리는 명렁어.
28. ⭐데이터베이스를 설계할 때 가장 중요한 것이 무엇이라고 생각하나요?❗
무결성을 보장해야 한다고 생각합니다. 무결성을 보장하는 방법으로는
1. 데이터를 조작하는 프로그램 내에서 데이터 삽입, 수정, 삭제 시 무결성 조건을 검증하는 것.
2. 트리거 이벤트 시 저장 SQL을 실행하고, 무결성 조건을 실행한다.
3. DB 제약조건 기능을 선언한다.
29. ⭐데이터베이스에서 '락(LOCK)'이란 무엇인가?❗
락은 트랜잭션이 처리되는 순서를 보장해 무결성을 유지하는 방법이다. 락에는 공유 락과 베타 락이 있습니다. 공유 락은 데이터를 읽기 위한 락으로, 데이터가 변경되지 않습니다. 따라서 특정 트랜잭션을 수행 중일 때 같은 공유 락을 가진 다른 트랜잭션이 동시에 접근할 수 있다.
반면에, 베타 락은 데이터를 수정하는 락으로 하나의 트랜잭션을 수행 중일 때 다른 트랜잭션이 접근할 수 없다. 그리고 이와 같이 락을 이용할 때, 트랜잭셕이 교착 상태에 빠질 수 있다.
30. ⭐데이터베이스의 '교착 상태'를 설명해 보세요.❗
DB의 교착 상태는 하나의 트랜잭션이 처리 중인 데이터에 대해 락을 가지고 있는 상태에서 다른 트랜잭션이 처리 중인 데이터에 대해 락을 요청하면서 무한 대기 상태에 빠지는 현상이다.
교착 상태를 해결하는 방법으로는 예방 기법과 회피 기법이 있습니다. 예방 기법은 트랜잭션을 수행하기 전에 미리 락을 획득하는 방식이고, 회피 기법은 트랜잭션이 들어온 순서에 따라 락을 획득하거나 트랜잭션을 종료하는 방식이다.
31. 인덱스를 사용 중일 때, 데이터를 삭제하면 발생할 수 있는 문제는 무엇인가요?
데이터 삭제가 잦은 경우 저장 공간을 낭비할 수 있다는 문제점이 있다. 인덱스는 DB의 검색 효율을 높이기 위해 인덱스 테이블을 사용한다. 삭제 연산이 일어나면 DB에서는 해당 튜플이 삭제되지만, 인덱스 테이블에서는 해당 튜플을 '사용하지 않음'으로 처리하고 실제로 데이터는 삭제되지 않는다. 그렇기 때문에, 잦은 데이터 삭제가 일어나면 인덱스 테이블에 불필요한 데이터가 남아 저장 공간을 낭비하게 된다.
32. 인덱스를 구현하는 방식에는 무엇이 있나요?
인덱스를 구현하는 방식으로는 해시 테이블을 사용하는 방식과 B+-Tree를 이용하는 방식이 있다. 해시 테이블은 해시 함수를 사용해 데이터의 검색 성능을 높이지만, 등호 연산만 가능하다는 단점이 있다. 반면에 B+-Tree는 트리 구조로 인덱스 테이블을 구성하며, 데이터를 범위로 검색할 수 있어서 시간 면에서 효율적이다.
33. 데이터베이스에서 View란 무엇인가?❗
View는 직접 원본 테이블에 접근하는 것이 아니라 테이블에서 사용자가 필요로 하는 부분만 선택하여 만들어 놓은 데이터 집합이다. 뷰를 활용하는 가장 큰 이유는 DB의 보안으로 view에 나타나지 않은 데이터를 간편히 보호할 수 있다.
34. ⭐내부 조인과 외부 조인의 차이점을 설명해 주세요.
내부 조인은 2개 이상의 테이블에서 공통 속성을 지닌 데이터를 검색하기 위한 연산이다. 반면에, 외부 조인은 테이블에서 JOIN 조건에 해당하는 속성 값이 없는 데이터까지 모두 조회하는 연산이다. 이때, 존재하지 않는 데이터에 대해서는 NULL 값으로 표기한다.
35. 트리거에 대해 설명하고, 트리거를 쓰는 이유에 대해서 설명해 보세요.
트리거는 특정 테이블에 대한 연산(INSERT, UPDATE, DELETE)이 수행되었을 때, DB에서 자동으로 이에 대한 응답을 수행하도록 정의된 저장 프로시저입니다. 사용자가 직접 호출 하는 것이 아닌, DB에서 자동으로 호출한다는 것이 큰 특징이다.
1. 업무 규칙을 보장
2. 업무 처리 자동화
3. 데이터 무결성 강화
위 세 가지를 위해서 트리거를 사용한다.
36. HAVING과 WHERE의 차이를 설명해 주세요.
having은 그룹을 필터링 하는데 사용되고, where은 개별 행을 필터링하는데 사용됩니다. 그리고 집계 함수(COUNT, SUM, AVG, MAX, MIN)는 having절과 함께 사용할 수 있으나, where절은 사용할 수 없다. (집계함수를 사용할 수 있는 GROUP BY절보다 WHERE절이 먼저 수행된다.)
37. 옵티마이저(Optimizer)에 대해 아는대로 말해 주세요.
옵티마이저는 SQL을 가장 빠르고 효율적으로 수행할 최적의 처리 경로를 생성해주는 DBMS 내부의 핵심 엔진입니다. 예를들어, 컴퓨터의 두뇌가 CPU인 것처럼 DBMS의 두뇌는 옵티마이저라고 할 수 있습니다.
개발자가 SQL를 작성하고 실행하면 즉시 실행되는 것이 아니라 옵티마이저라는 곳에서 "이 쿼리문을 어떻게 실행시키겠다!" 라는 여러가지 실행 계획을 세우고, 최고의 효율을 갖는 실행계획을 판별한 후 그 실행계획에 따라 쿼리를 수행하게 된다.
38. 역정규화를 하는 이유에 대해 아는대로 설명해 주세요.
정규화 과정을 거치면 릴레이션의 분해로 인해 릴레이션 간의 JOIN 연산이 많아져, 성능이 낮아질 우려가 있습니다. 따라서 성능 문제가 있는, 예를들어 읽기 작업이 많이 필요한 DB의 전반적인 성능을 향상시키기 위해 사용한다.
'취업 준비' 카테고리의 다른 글
면접 대비(자료구조 및 알고리즘) (0) | 2024.04.22 |
---|---|
면접 대비(운영체제) (0) | 2024.04.15 |
면접 대비(네트워크) (0) | 2024.04.15 |