1. SQL과 NoSQL의 차이에 대해서 설명해주세요.
- SQL: 관계형 데이터베이스 관리 시스템(RDBMS)으로, 데이터를 테이블 형태로 저장한다. 각 테이블은 행과 열로 구성되어 있으며, 행은 데이터 레코드를, 열은 데이터 속성을 나타낸다.
- NoSQL: 비관계형 데이터베이스로, 다양한 데이터 모델을 지원하며, 스키마가 필요로 하지 않는다. 주로 대규모 데이터와 비정형 데이터를 처리하기 위해 설계되었다.
- SQL 사용 예시
- 은행 시스템: 트랜잭션의 무결성과 일관성이 중요하므로 SQL 데이터베이스가 적합함.
- ERP 시스템: 정형 데이터와 복잡한 쿼리가 필요하므로 SQL 데이터베이스가 적합함.
- NoSQL 사용 예시
- 소셜 미디어 플랫폼: 사용자 생성 컨텐츠, 관계 데이터, 실시간 처리 등을 효율적으로 처리하기 위해 NoSQL 데이터베이스가 적합함.
- 로그 수집 및 분석 시스템: 대규모 로그 데이터를 실시간으로 수집하고 분석하기 위해 NoSQL 데이터베이스가 적합함.
- SQL과 NoSQL의 차이
특징 | SQL | NoSQL |
데이터 모델 | 관계형 (테이블 기반) | 비관계형 (문서, 키-값, 컬럼, 그래프 등) |
스키마 | 고정 스키마 (사전 정의 필요) | 유연한 스키마 (스키마리스) |
확장성 | 수직적 확장 (더 강력한 서버 필요) | 수평적 확장 (서버 추가) |
Query | SQL | 데이터베이스마다 다름 (예: MongoDB의 경우 MQL) |
트랜잭션 지원 | ACID (높은 트랜잭션 무결성) | BASE (궁극적 일관성) |
사용 사례 | 복잡한 쿼리, 트랜잭션 필요 시, 고정된 스키마 필요 시 | 대규모 데이터, 비정형 데이터, 유연한 스키마 필요 시 |
피드백 내용: SQL과 NoSQL의 차이에 대해서 설명할 때 특정 상황에서 어떤 데이터베이스가 유리한지, 왜 그런지를 묶어서 설명하면 좋다. SQL과 NoSQL에 대해서는 설명할 수 있었지만 사용하는 예시를 말했을 때 이러한 데이터베이스를 왜 쓰는지를 설명하지 못했다. 그런 부분도 같이 공부하면 좋을 것 같다.
밑에서부터는 시간이 되어서 물어보지 않으셨던 질문들이지만 SQL공부가 부족해서 어차피 잘 대답하지 못했을 것 같으므로 따로 정리를 하였다.
2. JOIN의 종류와 차이에 대해서 설명해주세요.
JOIN: 두 개 이상의 테이블을 연결하여 데이터를 조회하는 데 사용하며, 여러 테이블 간의 관계를 기반으로 데이터를 결합할 수 있다.
- INNER JOIN: 두 테이블에서 일치하는 행을 반환하며, 일치하지 않는 행은 결과에 포함되지 않는다. 두 테이블에서 공통적으로 일치하는 데이터를 조회할 때 사용한다.
- OUTER JOIN: LEFT OUTER JOIN, RIGHT OUTER JOIN, FULL OUTER JOIN
- LEFT OUTER JOIN: 왼쪽 테이블의 모든 행과 오른쪽 테이블에서 일치하는 행을 반환한다. 일치하지 않는 오른쪽 테이블의 값은 NULL로 표시된다. 왼쪽 테이블의 모든 데이터를 유지하면서, 오른쪽 테이블과의 일치 여부를 확인할 때 사용한다.
- RIGHT OUTER JOIN: 오른쪽 테이블의 모든 행과 왼쪽 테이블에서 일치하는 행을 반환한다. 일치하지 않는 왼쪽 테이블의 값은 NULL로 표시된다. 오른쪽 테이블의 모든 데이터를 유지하면서, 왼쪽 테이블과의 일치 여부를 확인할 때 사용한다.
- FULL OUTER JOIN: 두 테이블의 모든 행을 반환하며, 일치하지 않는 행은 NULL로 표시된다. 두 테이블의 모든 데이터를 결합하고, 각 테이블의 일치 여부를 확인할 때 사용한다.
- CROSS JOIN: 두 테이블의 모든 행의 조합을 반환한다. 각 테이블의 모든 행이 서로 조합되어 결과에 포함된다. 모든 가능한 조합을 생성해야 할 때 사용한다.
- SELF JOIN: 같은 테이블을 두 번 조인하여, 테이블 내에서 일치하는 행을 반환한다. 같은 테이블 내에서의 비교나 관련 데이터를 조회할 때 사용한다.
3. 데이터베이스 인덱싱 과정에 대해서 설명해주세요.
데이터베이스 인덱싱이란?
검색 성능을 향상시키기 위한 기술로, 특정 열 또는 열 조합에 대해 인덱스를 생성하여 데이터 조회 속도를 높인다.
인덱스를 사용하면 검색 속도 향상, 정렬 속도 향상, 고유성 보장같은 장점이 있지만 데이터 변경시 인덱스가 갱신되어야 하므로 추가적인 오버헤드가 발생하고, 인덱스 저장을 위해 추가적인 디스크 공간이 필요해진다.
인덱싱 과정
- 인덱스 생성: 인덱스를 생성하면 데이터베이스는 지정된 열에 대한 인덱스를 구성한다.
- 인덱스 구조: 인덱스는 일반적으로 B-트리 또는 해시 테이블과 같은 자료 구조로 구현되는데 B-트리 구조는 정렬된 상태로 데이터를 저장하여 범위 검색에 유리하고 해시 테이블은 특정 값 검색에서 빠르다.
- 인덱스 갱신: 데이터베이스에 데이터가 삽입, 업데이트, 삭제될 때마다 인덱스도 함께 갱신된다.
- 인덱스 사용: 데이터베이스는 쿼리를 실행할 때, 최적의 실행 계획을 수립하기 위해 인덱스를 사용하며, 쿼리에서 특정 열에 대해 검색 조건이 있을 경우 인덱스를 활용하여 검색 속도를 높인다.
4. 서브 쿼리와 조인의 차이점에 대해서 설명해주세요.
- 서브 쿼리(Subquery): 서브쿼리는 하나의 SQL 쿼리 내에 포함된 또 다른 쿼리로 주로 DML 구문 내에서 사용되며, 다른 쿼리의 결과를 참조하는 데 사용한다.
- 조인(JOIN): 두 개 이상의 테이블을 연결하여 데이터를 조회하는 데 사용하며, 여러 테이블 간의 관계를 기반으로 데이터를 결합할 수 있다.
- 서브쿼리와 조인은 구문 구조, 용도, 성능에서 차이가 발생하는데
서브쿼리는 하나의 쿼리 내에 또 다른 쿼리를 포함하여 사용하고, 특정 값을 계산하거나 필터링 하는데 주로 사용된다.
조인은 여러 테이블을 하나의 쿼리 내에서 결합하고, 관련된 데이터를 여러 테이블에서 동시에 조회할 때 사용된다.
서브쿼리는 종종 별도의 쿼리로 처리되기 때문에 대규모 데이터셋에서 성능 저하가 발생할 수 있으며, 조인은 데이터베이스 엔인지 여러 테이블을 동시에 처리하므로 일반적으로 서브쿼리보다 성능이 좋다. - 서브쿼리의 사용: 단일 값 반환, 계층적 데이터 또는 중텁된 데이터 처리, 독립적인 쿼리일 때
- 조인의 사용: 다중 테이블 결합, 관련된 데이터 조회, 대규모 데이터셋
'etc' 카테고리의 다른 글
5분 보드를 이용해서 취업 준비하기 (1) | 2024.09.23 |
---|---|
Django 기초 주차 돌아보기 (0) | 2024.09.02 |
기술면접 관련 내용 정리 - 1 (0) | 2024.08.08 |
AI 웹 개발 부트캠프 스타터 노트 (0) | 2024.06.24 |