기술 면접 준비1 DB편
2025. 3. 6. 22:34ㆍ뭐든, 공부한 내용 기록/오늘 나는 무얼 배웠나
1. 기본 개념 관련
Q1. RDBMS와 NoSQL의 차이점은?
A:
- RDBMS(Relational Database Management System): 관계형 데이터베이스로, 테이블 형식으로 데이터를 저장하며 SQL을 사용. 대표적으로 MySQL, PostgreSQL, MSSQL, Oracle 등이 있음. ACID(Atomicity, Consistency, Isolation, Durability) 보장.
- NoSQL(Not Only SQL): 비정형 데이터(문서, JSON, Key-Value, 그래프 등)를 저장하며 수평 확장(Scalability)에 강점. 대표적으로 MongoDB, Cassandra, Redis 등이 있음. 스키마가 유연하고, 대량의 데이터를 빠르게 처리하는 데 적합.
언제 사용?
- RDBMS: 데이터 정합성이 중요할 때(병원 시스템, 금융, ERP 등).
- NoSQL: 빠른 읽기/쓰기 성능이 중요하고, 구조가 자주 바뀌는 경우(로그 저장, 실시간 분석, 소셜 미디어).
Q2. 정규화(Normalization)란 무엇이며, 왜 필요한가?
A:
- **정규화(Normalization)**는 데이터 중복을 최소화하고, 데이터 무결성을 유지하기 위해 테이블을 분리하는 과정.
- 장점: 데이터 일관성 유지, 저장 공간 절약, 업데이트 및 삭제 이상(Anomaly) 방지.
- 단점: 너무 과도한 정규화는 JOIN 연산이 많아져 성능 저하 가능.
정규화 단계:
- 1NF: 각 컬럼이 원자값(Atomic Value)을 갖도록 분해.
- 2NF: 부분 함수 종속 제거(기본 키에 종속되지 않는 컬럼 제거).
- 3NF: 이행적 함수 종속 제거(비 기본 키가 다른 비 기본 키를 종속하면 제거).
Q3. 인덱스(INDEX)란 무엇이며, 어떻게 작동하는가?
A:
- 인덱스는 데이터 검색 속도를 높이기 위해 생성하는 자료구조.
- 일반적으로 B-Tree 인덱스가 사용되며, HASH 인덱스, FULL-TEXT 인덱스도 있음.
장점:
- WHERE, ORDER BY, JOIN 성능 향상.
- 대량 데이터 조회 시 효율적.
단점:
- INSERT, UPDATE, DELETE 시 오버헤드 발생.
- 너무 많은 인덱스는 성능 저하 유발.
실제 사용 예시:
CREATE INDEX idx_patient_name ON Patient(name);
2. SQL 및 쿼리 최적화
Q4. 성능이 느린 SQL 쿼리를 튜닝하는 방법은?
A:
- 인덱스 활용: WHERE, JOIN, ORDER BY 사용 시 적절한 인덱스 설정.
- EXPLAIN 실행 계획 분석: EXPLAIN 명령어로 실행 계획을 확인.
- JOIN 최적화: 필요 없는 JOIN 제거, 적절한 인덱스 설정.
- SELECT 최적화: SELECT * 대신 필요한 컬럼만 조회.
- 파티셔닝(Partitioning): 테이블을 물리적으로 분할하여 조회 성능 개선.
예시 - 실행 계획 분석:
EXPLAIN SELECT * FROM Patient WHERE name = '홍길동';
Q5. EXISTS와 IN의 차이점 및 성능 차이는?
A:
- EXISTS: 서브쿼리에서 한 건이라도 만족하면 즉시 종료 → 대량 데이터 처리에 유리
- IN: 서브쿼리의 결과를 모두 가져와 비교 → 소량 데이터에 유리
예제 비교:
-- IN 사용
SELECT * FROM Patient WHERE id IN (SELECT patient_id FROM Appointment);
-- EXISTS 사용
SELECT * FROM Patient p WHERE EXISTS (SELECT 1 FROM Appointment a WHERE p.id = a.patient_id);
대량의 데이터에서는 EXISTS가 더 빠를 가능성이 높음.
3. 병원 시스템 특화 질문
Q6. 병원에서 환자 정보를 저장할 때 고려해야 할 DB 설계 원칙은?
A:
- 개인정보 보호: 민감 정보(주민번호, 진료 기록 등)는 암호화 저장.
- 정규화 적용: 진료 기록, 환자 정보, 처방 내역을 각각 분리하여 관리.
- 인덱스 설정: 진료 조회, 예약 조회 속도를 위해 적절한 인덱스 추가.
- 로그 기록: 데이터 변경 사항을 Audit Log로 기록하여 추적 가능하게 함.
예제 테이블 구조:
CREATE TABLE Patient (
id INT PRIMARY KEY AUTO_INCREMENT,
name VARCHAR(50) NOT NULL,
dob DATE NOT NULL,
phone VARCHAR(20),
encrypted_ssn VARBINARY(255) -- 주민등록번호 암호화 저장
);
Q7. 병원 시스템에서 다중 사용자 동시 접근 시 발생할 수 있는 문제는?
A:
- 데드락(Deadlock): 여러 트랜잭션이 서로의 자원을 기다리면서 멈추는 현상.
- 더티 리드(Dirty Read): 트랜잭션이 커밋되지 않은 데이터를 읽는 문제.
- 팬텀 리드(Phantom Read): 트랜잭션 실행 중 다른 트랜잭션이 데이터를 추가/삭제하는 문제.
해결 방법:
- 적절한 트랜잭션 격리 수준(Isolation Level) 설정.
- 락(Locking) 최소화 및 낙관적/비관적 동시성 제어 적용.
격리 수준 설정 예제 (MySQL)
SET TRANSACTION ISOLATION LEVEL REPEATABLE READ;
4. 데이터 보안 및 규제 준수
Q8. 병원 시스템에서 환자 정보 보안을 위해 어떤 DB 기술을 적용할 수 있는가?
A:
- 데이터 암호화
- 저장 시 AES 암호화, TLS/SSL을 통한 전송 보안.
- 예시:
INSERT INTO Patient (name, encrypted_ssn) VALUES ('홍길동', AES_ENCRYPT('123456-1234567', 'secret_key'));
- 접근 제어(RBAC, Role-Based Access Control)
- 의사, 간호사, 행정 직원 등 역할(Role) 기반 권한 관리.
- 로깅 및 모니터링
- 누가 데이터를 조회/수정했는지 감사 로그(Audit Log) 기록.
'뭐든, 공부한 내용 기록 > 오늘 나는 무얼 배웠나' 카테고리의 다른 글
기술면접 준비2 MSSQL vs MySQL(특징, 차이점, 주요 명령어, 그리고 툴 사용법까지) (0) | 2025.03.06 |
---|