✔️ SQL vs NoSQL
SQL(관계형 데이터베이스)이란?
- SQL을 사용하면 RDBMS(관계형 데이터베이스)에서 데이터를 저장, 수정, 삭제 및 검색할 수 있음
- 관계형 데이터베이스는 두 가지 핵심적인 특징을 가짐
- 데이터는 명확하게 정해진 데이터 스키마(구조)에 따라 테이블에 레코드로 저장되어 무결성을 보장함
데이터 스키마는 필드의 이름과 데이터 유형으로 정의되며 스키마를 준수하지 않은 레코드는 테이블에 추가할 수 없음 - 데이터는 관계를 통해 여러 테이블에 분산되어 중복 없이 하나의 데이터만을 관리할 수 있음
- 데이터는 명확하게 정해진 데이터 스키마(구조)에 따라 테이블에 레코드로 저장되어 무결성을 보장함
- 반면 덜 유연하기 때문에 데이터 스키마를 사전에 계획해야 하며 조인문이 많은 복잡한 쿼리가 만들어질 수 있음
또한 저장 방식으로 인해 일반적으로 단순히 데이터베이스 서버의 성능을 향상시키는 수직적 확장만 지원함 - 그러므로 관계를 맺고 있는 데이터가 자주 변경되는 애플리케이션의 경우나
변경될 여지가 없고, 명확한 스키마가 사용자와 데이터에게 중요한 경우 SQL 데이터베이스를 사용
저장 프로시저란?
- 일련의 쿼리를 마치 하나의 함수처럼 실행하기 위한 쿼리의 집합
- 프로시저를 만들어주면, 애플리케이션에서 여러 상황에 따라 해당 쿼리문이 필요할 때
인자 값만 전달하여 쉽게 원하는 결과물을 받아낼 수 있음

- 프로시저에는 다양한 장점이 존재
- 프로시저의 최초 실행 시 최적화 상태로 컴파일이 되며, 그 이후 프로시저 캐시에 저장되기 때문에
만약 해당 프로세스가 여러 번 사용될 때, 다시 컴파일 작업을 거치지 않고 캐시에서 가져오게 됨 - 작업이 변경될 때, 다른 작업은 건드리지 않고 프로시저 내부만 수정하면 됨
- SQL문이 서버에 이미 저장되어 있기 때문에 클라이언트와 서버 간 네트워크 상 트래픽이 감소됨
- 프로시저 내에서 참조 중인 테이블의 접근을 막을 수 있음
- 프로시저의 최초 실행 시 최적화 상태로 컴파일이 되며, 그 이후 프로시저 캐시에 저장되기 때문에
- 반면 단점도 존재
- 구문 규칙이 SQL/PSM 표준과는 호환성이 낮기 때문에 코드 자산으로의 재사용성이 나쁨
- 문자 또는 숫자 연산에서 프로그래밍 언어보다 성능이 느림
- 에러가 발생했을 때, 어디서 잘못됐는지 디버깅하는 것이 힘듦
NoSQL(비관계형 데이터베이스)이란?
- RDBMS의 반대로 스키마도 없고, 관계도 없는 비관계형 데이터베이스에 사용
- 비관계형 데이터베이스는 두 가지 핵심적인 특징을 가짐
- 문서라고 불리는 레코드가 존재하며 느슨한 스키마를 제공하므로 다른 구조의 데이터를 같은 컬렉션에 추가가 가능함
그러므로 분산된 데이터를 저장하고 조회하는데 특화되며
여러 테이블을 조인할 필요없이 이미 필요한 모든 것을 갖춘 문서를 작성할 수 있음 - 수직적 확장 뿐만 아니라 더 많은 서버를 추가하여 데이터베이스가 전체적으로 분산되도록 하는 수평적 확장도 가능함
- 문서라고 불리는 레코드가 존재하며 느슨한 스키마를 제공하므로 다른 구조의 데이터를 같은 컬렉션에 추가가 가능함
- 반면 데이터가 중복되어 서로에게 영향을 줄 위험이 존재하므로
계속 업데이트 해야하며 여러 컬렉션에 중복이 있을 경우 모든 컬렉션에서 수행해야 함 - 그러므로 정확한 데이터 구조를 알 수 없거나 변경, 확장될 수 있는 경우나
읽기는 자주 하지만 데이터 변경은 자주 없는 경우 NoSQL 데이터베이스를 사용
레디스(Redis)란?
- 빠른 오픈 소스 인 메모리 키 값 데이터 구조 스토어
- 데이터 구조는 키 값으로 이루어져 있으며 비정형 데이터를 저장하는 NoSQL 데이터베이스 관리 시스템
- String(text, binary data)를 저장
- set(String 집합)을 저장
- sorted set(set을 정렬해둔 상태)을 저장
- Hash를 저장
- List(양방향 연결 리스트도 가능)를 저장
- 하드 디스크나 SSD에 저장하는 보통 데이터베이스와 달리, 메모리(RAM)에 저장하므로 디스크 스캐닝이 필요없어 매우 빠름
- 캐싱도 가능해 실시간 채팅에 적합하며 세션 공유를 위해 세션 클러스터링에도 활용함
- 휘발성 메모리를 사용하므로 스냅샷, AOP(Append Only File)을 통해 백업 과정을 가짐
'Tech Interview > Database' 카테고리의 다른 글
[Database] 목차 (0) | 2024.01.10 |
---|---|
[Database] 트랜잭션 (0) | 2024.01.08 |
[Database] 정규화 (0) | 2024.01.03 |
[Database] 이상 (0) | 2024.01.02 |
[Database] 인덱스 (0) | 2023.12.30 |
✔️ SQL vs NoSQL
SQL(관계형 데이터베이스)이란?
- SQL을 사용하면 RDBMS(관계형 데이터베이스)에서 데이터를 저장, 수정, 삭제 및 검색할 수 있음
- 관계형 데이터베이스는 두 가지 핵심적인 특징을 가짐
- 데이터는 명확하게 정해진 데이터 스키마(구조)에 따라 테이블에 레코드로 저장되어 무결성을 보장함
데이터 스키마는 필드의 이름과 데이터 유형으로 정의되며 스키마를 준수하지 않은 레코드는 테이블에 추가할 수 없음 - 데이터는 관계를 통해 여러 테이블에 분산되어 중복 없이 하나의 데이터만을 관리할 수 있음
- 데이터는 명확하게 정해진 데이터 스키마(구조)에 따라 테이블에 레코드로 저장되어 무결성을 보장함
- 반면 덜 유연하기 때문에 데이터 스키마를 사전에 계획해야 하며 조인문이 많은 복잡한 쿼리가 만들어질 수 있음
또한 저장 방식으로 인해 일반적으로 단순히 데이터베이스 서버의 성능을 향상시키는 수직적 확장만 지원함 - 그러므로 관계를 맺고 있는 데이터가 자주 변경되는 애플리케이션의 경우나
변경될 여지가 없고, 명확한 스키마가 사용자와 데이터에게 중요한 경우 SQL 데이터베이스를 사용
저장 프로시저란?
- 일련의 쿼리를 마치 하나의 함수처럼 실행하기 위한 쿼리의 집합
- 프로시저를 만들어주면, 애플리케이션에서 여러 상황에 따라 해당 쿼리문이 필요할 때
인자 값만 전달하여 쉽게 원하는 결과물을 받아낼 수 있음

- 프로시저에는 다양한 장점이 존재
- 프로시저의 최초 실행 시 최적화 상태로 컴파일이 되며, 그 이후 프로시저 캐시에 저장되기 때문에
만약 해당 프로세스가 여러 번 사용될 때, 다시 컴파일 작업을 거치지 않고 캐시에서 가져오게 됨 - 작업이 변경될 때, 다른 작업은 건드리지 않고 프로시저 내부만 수정하면 됨
- SQL문이 서버에 이미 저장되어 있기 때문에 클라이언트와 서버 간 네트워크 상 트래픽이 감소됨
- 프로시저 내에서 참조 중인 테이블의 접근을 막을 수 있음
- 프로시저의 최초 실행 시 최적화 상태로 컴파일이 되며, 그 이후 프로시저 캐시에 저장되기 때문에
- 반면 단점도 존재
- 구문 규칙이 SQL/PSM 표준과는 호환성이 낮기 때문에 코드 자산으로의 재사용성이 나쁨
- 문자 또는 숫자 연산에서 프로그래밍 언어보다 성능이 느림
- 에러가 발생했을 때, 어디서 잘못됐는지 디버깅하는 것이 힘듦
NoSQL(비관계형 데이터베이스)이란?
- RDBMS의 반대로 스키마도 없고, 관계도 없는 비관계형 데이터베이스에 사용
- 비관계형 데이터베이스는 두 가지 핵심적인 특징을 가짐
- 문서라고 불리는 레코드가 존재하며 느슨한 스키마를 제공하므로 다른 구조의 데이터를 같은 컬렉션에 추가가 가능함
그러므로 분산된 데이터를 저장하고 조회하는데 특화되며
여러 테이블을 조인할 필요없이 이미 필요한 모든 것을 갖춘 문서를 작성할 수 있음 - 수직적 확장 뿐만 아니라 더 많은 서버를 추가하여 데이터베이스가 전체적으로 분산되도록 하는 수평적 확장도 가능함
- 문서라고 불리는 레코드가 존재하며 느슨한 스키마를 제공하므로 다른 구조의 데이터를 같은 컬렉션에 추가가 가능함
- 반면 데이터가 중복되어 서로에게 영향을 줄 위험이 존재하므로
계속 업데이트 해야하며 여러 컬렉션에 중복이 있을 경우 모든 컬렉션에서 수행해야 함 - 그러므로 정확한 데이터 구조를 알 수 없거나 변경, 확장될 수 있는 경우나
읽기는 자주 하지만 데이터 변경은 자주 없는 경우 NoSQL 데이터베이스를 사용
레디스(Redis)란?
- 빠른 오픈 소스 인 메모리 키 값 데이터 구조 스토어
- 데이터 구조는 키 값으로 이루어져 있으며 비정형 데이터를 저장하는 NoSQL 데이터베이스 관리 시스템
- String(text, binary data)를 저장
- set(String 집합)을 저장
- sorted set(set을 정렬해둔 상태)을 저장
- Hash를 저장
- List(양방향 연결 리스트도 가능)를 저장
- 하드 디스크나 SSD에 저장하는 보통 데이터베이스와 달리, 메모리(RAM)에 저장하므로 디스크 스캐닝이 필요없어 매우 빠름
- 캐싱도 가능해 실시간 채팅에 적합하며 세션 공유를 위해 세션 클러스터링에도 활용함
- 휘발성 메모리를 사용하므로 스냅샷, AOP(Append Only File)을 통해 백업 과정을 가짐
'Tech Interview > Database' 카테고리의 다른 글
[Database] 목차 (0) | 2024.01.10 |
---|---|
[Database] 트랜잭션 (0) | 2024.01.08 |
[Database] 정규화 (0) | 2024.01.03 |
[Database] 이상 (0) | 2024.01.02 |
[Database] 인덱스 (0) | 2023.12.30 |