데이터베이스의 특징
✅ 실시간 접근성
- 비정형적인 조회에 대해 실시간 처리에 의한 응답이 가능.
✅ 지속적인 변화
- 새로운 데이터의 삽입, 삭제, 갱신으로 항상 최신의 데이터를 유지하는 동적인 상태.
✅ 동시 공용
- 다수의 사용자가 동시에 같은 내용의 데이터 이용 가능.
✅ 내용에 의한 참조
- 데이터베이스에 있는 데이터를 참조할 때 데이터 레코드의 주소나 위치에 의해서가 아니라 사용자가 요구하는 데이터 내용으로 탐색 가능.
데이터베이스 언어
✅ DDL
- 데이터베이스의 구조를 정의, 수정, 삭제하는 언어.
- CREATE, ALTER, DROP
✅ DML
- 데이터베이스 내의 자료 검색, 삽입, 갱신, 삭제를 위한 언어.
- SELECT, INSERT, UPDATE, DELETE
✅ DCL
- 데이터에 대해 무결성 유지, 병행 수행 제어, 보호와 관리를 위한 언어.
- COMMIT, ROLLBACK, GRANT, REVOKE
SELECT 쿼리의 실행 순서
✅ FROM
- 각 테이블 확인.
✅ ON
- JOIN 조건 확인.
- WHERE보다 먼저 실행되어 해당 조건으로 필터링된 레코드들 간에 JOIN이 발생.
✅ JOIN
- JOIN이 실행되어 데이터가 SET으로 모임.
- 서브 쿼리도 함께 포함되어 임시 테이블을 만들 수 있게 도와줌.
✅ WHERE
- 데이터 SET을 형성하게 되면 WHERE 조건이 개별 행에 적용.
- WHERE절의 제약 조건은 FROM절로 가져온 테이블에 적용.
- JOIN한 결과에서 해당 조건으로 필터링이 발생.
- 그룹화 또는 집계 발생 전 필터링에 사용.
✅ GROUP BY
- WHERE의 조건 적용 후 나머지 행은 GROUP BY절에 지정된 열의 공통 값을 기준으로 그룹화.
- 쿼리에 집계 기능이 있는 경우에만 이 기능을 사용해야 함.
- 특정 컬럼을 기준으로 연산한 결과를 집계 키로 정의하여 그룹 짓는 역할.
- 집합 연산자는 COUNT, SUM, AVG, MAX, MIN 등이 있고, DISTINCT와 같이 중복 데이터를 제거함.
✅ HAVING
- GROUP BY절이 쿼리에 있을 경우 HAVING절의 제약 조건이 그룹화된 행에 적용.
- 그룹화 또는 집계 발생 후 필터링에 사용.
✅ SELECT
- SELECT에 표현된 식이 마지막으로 적용.
✅ DISTINCT
- 표현된 행에서 중복된 행 삭제.
✅ ORDER BY
- 지정된 데이터를 기준으로 오름차순 OR 내림차순 정렬.
✅ LIMIT
- 지정한 범위를 벗어나는 행 제외.
INNER JOIN vs. OUTER JOIN
✅ INNER JOIN
- 서로 연관된 내용만 검색하는 방법.
✅ OUTER JOIN
- 한 쪽에는 데이터가 있고 한 쪽에는 데이터가 없는 경우, 데이터가 있는 쪽의 내용을 전부 검색하는 방법.
DELETE vs. TRUNCATE vs. DROP
✅ DELETE
- 원하는 데이터만 골라서 지우는 방식.
- 테이블 용량은 줄지 않음.
- 삭제 후 되돌릴 수 있음.
✅ TRUNCATE
- 전체 데이터를 한 번에 삭제하는 방식.
- 테이블 용량이 줄어들고 인덱스도 삭제됨.
- 테이블은 삭제 불가.
- 삭제 후 되돌릴 수 없음.
✅ DROP
- 테이블 자체를 완전 삭제하는 방식.
- 삭제 후 되돌릴 수 없음.
INDEX의 정의 & 장단점 & 자료구조
✅ 테이블을 처음부터 끝까지 검색하는 방법인 full table scan과 달리 인덱스를 검색하여 해당 자료의 테이블에 접근하는 방법.
✅ 항상 정렬된 상태를 유지하기 때문에 원하는 값을 검색하는 것은 빠름.
✅ 새로운 값을 추가, 삭제, 수정하는 경우 실행 속도가 느림.
✅ 데이터의 저장 성능을 희생하는 대신 데이터의 검색 속도를 높이는 기능.
✅ B+Tree 인덱스 자료구조
- 자식 노드가 2개 이상인 B-Tree를 개선시킨 자료구조.
- BTree 리프 노드들을 LinkedList로 연결하여 순차 검색에 용이.
트랜잭션(transcation)
✅ 작업들을 모두 처리하거나 처리하지 못할 경우 이전 상태로 복구하여 작업의 일부만 적용되는 현상을 방지하는 기능.
✅ 하나의 트랜잭션은 commit(작업 완료)되거나 rollback(취소)됨.
✅ 4가지 주요 특성
- 원자성(Atomicity)
- 작업이 모두 반영되거나 전혀 반영되지 않아야 함.
- 일관성(Consistency)
- 실행이 완료되면 언제나 일관성 있는 상태를 유지해야 함.
- 독립성(Isolation)
- 둘 이상의 트랜잭션이 동시에 실행될 경우 서로의 연산에 끼어들 수 없음.
- 영속성(Durability)
- 완료된 결과는영구적으로 반영되어야 함.
DB LOCK
✅ 트랜잭션 처리의 순차성을 보장하기 위한 방법.
✅ 공유락(read lock)
- 트랜잭션이 읽기를 할 때 사용하는 락.
- 데이터를 읽기만 하기 때문에 같은 공유락끼리는 동시에 접근 가능.
✅ 베타락(write lock)
- 데이터를 변경할 때 사용하는 락.
- 트랜잭션이 완료될 때까지 유지됨.
- 베타락이 끝나기 전까지 어떠한 접근도 허용하지 않음.
옵티마이저(Optimizer)
✅ SQL를 가장 빠르고 효율적으로 수행할 최적의 처리 경로를 생성해주는 DBMS 내부의 핵심 엔진.
✅ 여러 실행 계획을 세우고, 최고의 효율을 갖는 실행 계획을 판별해 그 실행 계획에 따라 쿼리를 수행.
DB 튜닝
✅ 첫번째 단계 : DB 설계 튜닝(모델링 관점)
- DB 설계 단계에서 성능을 고려하여 설계.
- 데이터 모델링, 인덱스 설계.
- 데이터 파일, 테이블 스페이스 설계.
- 데이터베이스 용량 산정.
- ex. 반정규화, 분산파일배치.
✅ 두번째 단계 : DBMS 튜닝(환경 관점)
- 성능을 고려하여 메모리나 블록 크기 지정.
- CPU, 메모리 I/0 관점.
- ex. buffer 크기, cache 크기.
✅ 세번째 단계 : SQL 튜닝(애플리케이션 관점)
- SQL 작성 시 성능 고려.
- JOIN, Indexing, SQL 실행 계획.
- ex. hash, join.
RDBMS vs. NoSQL
✅ RDBMS
- 모든 데이터를 2차원 테이블 형태로 표현.
- 장점
- 스키마에 맞춰 데이터 관리하므로 데이터의 정합성 보장.
- 단점
- 시스템이 커질수록 쿼리가 복잡해지고 성능이 저하되며 scale-out이 어려움.
- 데이터 구조가 명확하고 변경될 여지가 없으며 스키마가 중요한 경우 사용하는 것을 권장.
✅ NoSQL
- 데이터 간의 관계를 정의하지 않고, 스키마가 없어 좀 더 자유롭게 데이터 관리 가능.
- 컬렉션이라는 형태로 데이터 관리.
- 장점
- 스키마 없이 key-value 형태로 데이터를 관리하므로 자유로움.
- 데이터 분산이 용이하여 성능 향상을 위한 scale-up, scale-out이 가능.
- 단점
- 데이터 중복 발생 가능.
- 중복된 데이터가 변경될 경우 모든 컬렉션을 수정해야 함.
- 스키마가 존재하지 않으므로 명확한 데이터 구조를 보장하지 않아 데이터 구조 결정이 어려움.
- 정확한 데이터 구조를 알 수 없고 데이터가 변경 또는 확장될 수 있는 경우 사용하는 것을 권장.
JDBC
✅ 자바에서 데이터베이스에 접속할 수 있도록 하는 자바 API.
✅ 데이터베이스에서 자료를 쿼리하거나 업데이트하는 방법을 제공함.
MyBatis
✅ JDBC를 좀더 편하게 사용할 수 있도록 객체를 SQL이나 저장 프로시저와 매핑 해주는 프레임워크.
✅ SQL구문을 Java 메소드와 매핑해줌.
Redis
✅ NoSQL의 종류로서, 간단한 키와 값의 쌍으로 데이터를 저장하는 구조.
✅ 메모리 기반으로 데이터베이스로, 디스크를 기반으로 하는 RDBMS보다 조회 속도 빠름.
✅ 실시간 데이터 처리 및 트랜잭션에 효과적.
✅ 사용자 세션, 캐싱, 랭킹 등 다양한 용도로 활용 가능.
캐싱(Caching)
✅ 나중에 요청 올 결과를 미리 저장해두었다가 빠르게 서비스할 수 있도록 하는 기술.
✅ 장점
- 모든 유저의 요청을 DB로 처리하지 않아도 됨.
- 사용자에게 높은 응답 속도를 제공하면서 DB 부하 감소로 성능적 이점을 취할 수 있음.
✅ 캐시 전략 패턴
- Look Aside
- 데이터를 읽을 때 캐시를 우선 확인.
- 캐시에 데이터가 있으면 캐시 데이터를 읽어서 반환.
- 데이터가 없다면 DB에 접근해서 데이터를 가져와 레디스에 저장.
- 캐시에는 찾는 데이터가 없을 때만 데이터가 캐싱되므로 지연 로딩에 해당.
- 장점) 캐시에 문제가 생길 경우 DB로 요청 위임 가능.
- 단점) 캐시와 DB의 데이터 정합성 유지가 어려움, 첫 조회 시 DB 부하 발생.
- Write Back
- 모든 데이터를 캐시에 저장.
- 캐시에 특정 시간 동안의 데이터가 저장됨.
- 캐시에 있는 데이터를 DB에 저장함.
- 장점) 쓰기 횟수 비용을 줄일 수 있음.
- 단점) 캐시의 데이터 유실 문제 발생 가능.
✅ 사용 시 주의사항
- 자주 사용되면서 변경이 되지 않는 데이터에 사용.
- 유실되어도 크게 문제가 없는 데이터에 사용.
- DB와 함께 사용할 때 데이터 정합성 문제 고려 필요.
'🎀 포트폴리오 업데이트' 카테고리의 다른 글
🗂️ 기술 면접 대비 | WEB 관련 질문 정리 (0) | 2024.07.09 |
---|---|
🗂️ 기술 면접 대비 | Spring 관련 질문 정리 (0) | 2024.07.09 |
🗂️ 기술 면접 대비 | JAVA 관련 질문 정리 (0) | 2024.07.09 |