본문 바로가기
면접대비/예상질문

백엔드 신입 면접질문 공부 (디비 DB)

by 계범 2022. 3. 21.

join에 대해 설명해주세요

더보기

두개 이상의 테이블을 서로 묶어서 하나의 결과 집합을 만들어내는 것입니다.

 

LEFT OUTER JOIN, RIGHT OUTER JOIN 은 어떤 것을 기준으로 정하나요?

더보기

결과가 왼쪽 테이블 전체 데이터 대상이면 left, 오른쪽이면 right를 사용합니다.

 

SQL Injection에 대해 설명해주세요

더보기

조작된 SQL 쿼리문을 날려 데이터베이스에 그대로 전달되어 비정상적 명령을 실행시키는 공격 기법입니다.

input값을 받을 때, 특수문자 여부를 검사.

SQL 서버 오류 발생 시, 해당 에러 메세지 감추기.

preparestatement를 사용하여 서버측의 필터링 과정을 통해서 특수문자를 제외하여 공격을 방어할 수 있습니다.

교글 참조

 

SQL과 NoSQL의 차이에 대해 설명해주세요

더보기

SQL은 관계형 데이터베이스(RDBMS)에서 데이터를 관리하기 위해 쓰는 프로그래밍 언어입니다.

RDBMS의 대표적인 특징으로는

1. 정해진 데이터 스키마에 따라 테이블에 저장됩니다.

2. 관계를 통해 여러 테이블에 분산됩니다.

즉, 정의된 구조에 따라서만 넣을 수 있습니다. 그리고 데이터의 중복을 피하기 위해 관계를 이용합니다.

 

NOSQL은 관계형 DB의 반대말로, 다른 구조의 데이터를 같은 컬렉션에 넣는게 가능해졌습니다.

하지만 데이터가 중복될 수 있으므로 그에 따른 수행처리가 더 필요할 수 있습니다.(수정 시 들어있는 모든 컬레션에서 수행)

 

ORM에 대해 설명해주세요

더보기

ORM(Object Relational Mapping)은 객체와 관계형 데이터베이스 데이터를 자동으로 매핑(연결)해주는 것을 말합니다. 객체를 구현한 클래스와 RDB의 테이블과 자동으로 매핑하는 것입니다.

 

그러나 기존에 서로 호환가능성을 생각해두고 만들어진 것이 아니기때문에 불일치가 발생하는데, 이것을 ORM을 통해 객체 간의 관계를 바탕으로 SQL문을 자동으로 생성하여 불일치를 해결해줍니다.

ORM을 사용하면 SQL문을 작성할 필요없이 객체를 통해 간접적으로 데이터베이스를 조작할 수 있게 됩니다.

 

대표적 프레임워크 : JPA/Hibernate, Django ORM

 

블로그 참조

 

정규화란 무엇인지 간단하게 설명해주세요

더보기

데이터의 중복을 줄이고, 무결성을 향상시키기위해 테이블을 분리하는 것입니다. 

 

1 정규화(1NF)

테이블 컬럼이 원자값(하나의 값)을 갖도록 테이블을 분리시킵니다.

 

 

2 정규화(2NF)

테이블의 모든 컬럼이 완전 함수적 종속을 만족해야합니다.

(기본키가 묶여있을 때, 묶여있는 키 중 하나의 키로만 다른 컬럼을 결정지을 수 없어야 한다)

 

3 정규화(3NF)

2NF 진행된 테이블에서 이행적 종속을 없애기 위해 테이블을 분리해야합니다.

(이행적 종속: A -> B, B -> C이면 A-> C)

 

BCNF 정규화

제 3 정규화를 진행한 테이블에서 모든 결정자가 후보키가 되도록 테이블을 분리하는 것입니다.

 

블로그 참조

 

반정규화에 대해 설명해주세요

더보기

반정규화는 데이터베이스의 성능 향상을 위해 데이터 중복을 허용하고 조인을 줄이는 방법입니다.

조회속도는 향상시키지만, 모델의 유연성은 낮아집니다.

 

블로그 참조

 

뷰에 대해 설명해주세요

더보기

뷰(View)는 가상의 테이블로 진짜 테이블에 링크된 개념입니다.

뷰를 통해서 보완에 도움이 되고, 복잡한 쿼리를 줄여줄 수 있지만,

정의된 뷰를 일부만 변경할 수 없고, 데이터 조작 시에 제한 사항이 많고, 뷰만의 독립적인 INDEX를 가질 수 없습니다.

 

2022.02.23 - [DB/MySQL] - [DB] View / MySQL 사용법

 

인덱스란 무엇인가요?

더보기

인덱스는 책의 목차같은 개념으로, 테이블의 검색 속도를 향상시키기 위한 자료구조입니다.

 

인덱스를 사용하면 select절 성능을 향상시키지만, 그외의 데이터 추가,수정,삭제 성능은 하락되고 데이터베이스에 추가적인 인덱스를 위한 공간이 필요합니다.(약 10%)

 

2022.01.31 - [DB/MySQL] - [DB] 인덱스(index) / MySql에서 사용법

 

인덱스의 종류에는 어떤것이 있나요

더보기

클러스터링 인덱스와 비클러스터링(mysql에선 보조인덱스)가 있습니다.

 

클러스터링 인덱스는 리프 페이지에 실제 데이터가 들어잇는 형태로, 테이블 당 한 개의 클러스터링 인덱스가 생성할 수 있고 인덱스로 지정한 열에 맞춰 자동 오름차순 정렬됩니다.

 

보조 인덱스는 책 뒤에 '찾아보기'라는 페이지가 있는 것처럼 별도의 인덱스 데이터가 생성되는 형태로, 테이블 당 여러개의 보조 인덱스 생성이 가능하고, 리프 페이지가 실제 데이터가 있는 위치를 가리킵니다. 

 

mysql에서 PK를 지정하면 클러스터링 인덱스가 자동 생성되고, UK를 걸면 보조 인덱스가 생성됩니다.

 

2022.01.31 - [DB/MySQL] - [DB] 인덱스(index) / MySql에서 사용법

 

트랜잭션이란 무엇인가요?

더보기

트랜잭션은 데이터베이스의 상태를 변화시키기 위해 수행하는 작업의 단위입니다.

 

깃 참조

 

트랜잭션의 특징에 대해 설명해주세요

더보기

1. 원자성

트랜잭션은 DB에 반영되거나, 전혀 반영되지 않아야한다.

 

2. 일관성

트랜잭션의 작업 처리 결과는 항상 일관성이 있어야한다.

 

3. 격리성(독립성)

둘 이상의 트랜잭션이 동시에 실행될 때, 어떤 트랜잭션도 다른 트랜잭션의 연산에 끼어들 수 없다.

 

4. 영원성(지속성)

한번 성공적으로 적용된 트랜잭션은 영구적으로 반영되어야 한다.

 

(원일이는 영원히 격리당해!)

 

트랜잭션의 상태에 대해 설명해주세요

더보기

활동(Active) : 트랜잭션이 실행 중인 상태

실패(Failed) : 트랜잭션 실행에 오류가 발생하여 중단된 상태

철회(Aborted) : 트랜잭션이 비정상적으로 종료되어 Rollback 연산을 수행한 상태

부분 완료(Partially Committed) : 트랜잭션의 마지막 연산까지 실행했지만, Commit 연산이 실행되기 직전의 상태

완료(Committed) : 트랜잭션이 성공적으로 종료되어 Commit 연산을 실행한 후의 상태

 

블로그 참조

 

트랜잭션 격리 수준에 대해 설명해주세요

더보기

격리수준은 트랜잭션에서 일관성 없는 데이터를 허용하도록 하는 수준을 정하는 것입니다.

 

Read Uncommitted(레벨 0)

트랜잭션이 처리중이거나, 아직 Commit되지 않은 데이터를 다른 트랜잭션이 조회 가능

더티 리드(Dirty Read) 발생

 

Read Committed(레벨 1)

트랜잭션의 변경 내용이 commit 되어야 다른 트랜잭션에서 조회 가능(오라클 Default)

NON-REPETABLE READ 부정합 문제 발생

 

Repetable Read(레벨 2)

트랜잭션이 시작되기 전에 커밋된 내용에 대해서만 조회 가능(MySQL Default)

NON-REPETABLE READ 해결.

update 부정합과 Phantom Read 발생.

 

Serializable(레벨 3)

가장 단순하고 가장 엄격한 격리수준.

select작업에도 공유 잠금을 설정하게 되어 다른 트랜잭션에서 건드리지 못함.

 

깃 참조

블로그 참조

 

스토어드 프로시저와 특징

더보기

스토어드 프로시저는 SQL 쿼리문들을 하나로 묶어서 편리하게 사용하는 프로그래밍 기능입니다.(그 외에도 함수와 같은 기능을 담당할 수도 있음)

 

스토어드 프로시저의 특징은

1. 하나의 요청으로 여러 SQL문을 실행시켜 네트워크 부하를 줄일 수 있고,2. 유지관리가 간편하며3. 모듈식 프로그래밍 가능해지고,4. 보안이 강화됩니다.

 

2022.02.23 - [DB/MySQL] - [DB] 스토어드 프로시저(SP)와 스토어드 함수 / MySQL 사용법

 

트리거의 정의와 사용하는 이유

더보기

트리거는 테이블에 부착되어 테이블에 INSERT,UPDATE,DELETE 작업이 발생되면 자동으로 실행되는 코드를 뜻합니다.

 

트리거를 사용하는 이유는

1. 데이터의 무결성을 위해 사용되고

2. 업무의 규칙을 보장되고

3. 업무 처리 자동화를 위해 사용됩니다.

 

2022.02.23 - [DB/MySQL] - [DB] 트리거(Trigger) / MySQL 사용법

 

댓글