본문 바로가기
면접준비

[기술 면접] 데이터베이스

by 킹명주 2022. 12. 22.

데이터베이스는 백엔드 직무의 필수 지식이다. 이번에는 데이터베이스와 ORM / JPA 프로그래밍에 관련하여 예상 질문과 실제 질문을 정리해보자!

 

👉 예상질문

Database

1. 인덱스에 대해서 설명해주세요.

더보기
추가적인 쓰기 작업과 저장 공간을 활용하여 데이터베이스 테이블의 검색 속도를 향상시키기 위한 자료구조입니다. 책의 목차와 같은 느낌으로 생각하시면 됩니다. 장점으로는 데이터들이 정렬이 되어있어 빠르게 원하는 데이터를 찾을 수 있다는 것입니다. 단점으로는 추가적인 저장 공간이 필요하기 때문에 추가 비용이 발생한다는 것입니다.

 

2. 트랜잭션에 대해서 설명해주세요.

더보기

트랜잭션이란 데이터베이스의 상태를 변화시키는 하나의 논리적인 작업 단위라고 할 수 있으며, 트랜잭션에는 여러개의 연산이 수행될 수 있습니다. 

트랜잭션은 수행중에 한 작업이라도 실패하면 전부 실패하고, 모두 성공해야 성공이라고 할 수 있습니다.

 

3. 트랜잭션의 특징에 대해서 말해주세요. (<- ACID)

더보기

첫 번째로 원자성(Atomicity)입니다. 트랜잭션이 모두 반영되던지 아니면 전혀 반영되지 않아야 합니다.

두 번째로 일관성(Consistency)입니다. 작업 처리 결과가 항상 일관성 있어야 합니다.

세 번째로 독립성(Isolation)입니다. 둘 이상의 트랜잭션이 동시에 실행되는 경우 어느 하나의 트랜잭션 실행중에 다른 트랜잭션의 연산이 끼어들 수 없습니다.

마지막으로 지속성(Durability)입니다. 트랜잭션이 성공적으로 완료되었을 경우, 결과는 영구적으로 반영되어야 합니다.

 

4. 정규화에 대해서 설명해주세요.

더보기

정규화는 데이터의 중복을 허용하지 않음으로써 무결성을 보장하도록 설계하는 것입니다.

제 1 정규화는 데이터의 컬럼이 원자값(하나의 값)을 갖도록 테이블을 분해하는 것입니다.

제 2 정규화는 제 1 정규화를 만족하고 완전 함수 종속을 만족하도록 테이블을 분해하는 것입니다.

제 3 정규화는 제 2 정규화를 만족하고 이행정 종속을 없애도록 테이블을 분해하는 것입니다.

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

 

5. (실제질문) JOIN에 대해서 설명해주세요.

더보기

JOIN은 두 개 이상의 테이블을 결합하여 데이터를 검색하는 방법입니다. 관계형 데이터베이스는 중복 데이터를 방지하기 위해 여러 테이블로 나누어 데이터를 관리합니다. 그러므로 하나의 데이터를 찾기 위해 여러 테이블을 참조해야하는 경우가 필요합니다. 이 때, JOIN을 사용하는 것입니다. JOIN의 종류는 LEFT JOIN, INNER JOIN, OUTER JOIN 등이 있습니다.

 

6. RDBMS vs NOSQL에 대해서 설명해주세요.

더보기

RDBMS는 데이터베이스를 이루는 객체들의 릴레이션을 통해서 데이터를 저장하는 데이터베이스입니다. SQL을 사용해 데이터의 저장, 질의, 수정, 삭제를 할 수 있으며 데이터를 효율적으로 보관하는 것을 목적으로 하고 구조화가 굉장히 중요합니다.

장점으로는 명확한 데이터 구조를 보장하고, 중복을 피할 수 있습니다.

 

NOSQL은 RDBMS에 비해 자유로운 형태로 데이터를 저장합니다. 또한 수평확장을 할 수 있고 분산처리를 지원합니다. 다양한 형태의 NOSQL 데이터베이스가 있고, 대표적으로 key-value store, dynamo 등이 있습니다.

둘은 대체될 수 있는 것이 아니고, 각각 필요한 시점에 적절히 선택해서 사용해야 합니다. 둘 다 같이쓰는 상호보완적인 존재가 될 수도 있습니다.

 

7. Redis에 대해서 설명해주세요.

더보기

Redis는 key-value store NOSQL DB입니다. 싱글스레드로 동작한다는 특징을 가지고 있습니다.

저는 프로젝트에서 세션을 관리할 때 사용한 경험이 있습니다.

 

8. SQL에 대해서 설명해주세요.

더보기

SQL은 RDBMS에서 데이터를 관리하고 처리하기 위해 설계된 언어입니다. SQL 문법은 크게 3가지 종류로 나누어집니다.

첫 번째로 DDL(데이터 정의어)입니다. 각 릴레이션을 정의하기 위해 사용하는 언어로 CREATE, ALTER, DROP이 대표 예입니다.

두 번째로 DML(데이터 조작어)입니다. 데이터 CRUD로 데이터 관리를 위한 언어입니다. SELECT, INSERT, UPDATE가 대표 예입니다.

세 번째로 DCL(데이터 제어어)입니다. 사용자의 권한을 관리하기 위한 언어입니다. GRANT, REVOKE가 대표 예입니다. 

 

9. 데이터베이스 뷰에 대해서 설명해주세요.

더보기

뷰는 기존에 생성된 테이블의 전체 데이터 중에서 일부만 접근할 수 있도록 제한하기 위한 가상 테이블입니다. 뷰의 장점은 논리적 데이터 독립성을 제공한다는 점입니다. 그러나 뷰 정의가 변경이 불가능하다는 점은 단점입니다.

 

10. 데이터베이스 무결성 중에서 하나를 설명해주세요.

더보기

개체 무결성에 대해서 설명드리겠습니다. 모든 테이블이 기본 키로 선택된 필드를 가져야 한다는 것입니다. 기본 키는 고유 값을 가져야하며 NULL 값은 허용되지 않습니다.

 

참조 무결성에 대해서 설명드리겠습니다. 테이블 간의 참조관계를 선언하는 외래 키 제약조건입니다. 외래 키는 NULL이거나 참조 릴레이션의 기본키 값과 동일해야 합니다.

 

11. 데이터베이스 키 종류에 대해서 설명해주세요.

더보기

슈퍼키, 복합 키, 후보 키, 기본 키, 대체 키, 외래 키에 대해서 알고 있습니다.

슈퍼키의 경우 유일성을 만족하는 키입니다.

복합키의 경우 2개 이상의 속성을 사용하는 키입니다.

후보키의 경우 유일성과 최소성을 만족하는 키입니다.

기본키의 경우 후보키에서 선택된 키입니다.

대체키의 경우 후보키에서 선택되지 않은 키입니다.

외래키의 경우 어떤 릴레이션(테이블)의 기본키를 참조하는 키입니다.

 

ORM/JPA

1. ORM 프로그래밍은 무엇인가요?

더보기

객체와 데이터베이스의 관계를 매핑해주어 체 지향 관점에서 데이터베이스에 접근하는 것입니다.

 

2. ORM 프로그래밍이 RDBMS와 비교했을 때 어떤 장단점을 가지고 있나요?

더보기

ORM 프로그램이은 RDBMS와 다르게 메서드, 엔티티로 데이터베이스 설계가 가능합니다. 그렇기 때문에 비즈니스 로직에 집중할 수 있습니다. 그리고 DBMS에 대해 종속적이지 않다는 장점이 있습니다.

직접 사용해보면서 느낀 단점은 신중하게 접근해야 한다는 점입니다. 프로젝트 초기 런칭 때 실수로 옵션 하나를 잘못 만져서 데이터베이스가 날아간 경험이 있습니다. 이처럼 하나의 옵션에 대해서도 데이터베이스 전체가 영향이 갈 수 있으므로 신중하게 접근해야한다는 점이 단점입니다.

 

3. JPA의 영속성 컨텍스트에 대해 설명해주세요.

더보기

영속성 컨텍스트란 엔티티를 영구 저장하는 환경을 의미합니다. 영속성 컨텍스트를 사용하는 이유는 1차 캐시, 동일성 보장 등이 있습니다.

첫 번째로 1차 캐시란 1차 캐시에 엔티티가 존재하지 않을 경우 DB에서 직접 조회하고 1차 캐시에 저장 후 반환합니다.

두 번째로 동일성 보장이란 == 연산을 활용하여 동일성 비교가 가능한 것입니다.

 

4. (실제질문) JPA를 프로젝트에서 적용한다면 그 이유는 무엇일까요?

더보기

제가 JPA를 사용하는 이유는 객체지향 프레임워크이기 때문입니다. JPA를 사용하면 비즈니스 로직이 RDBMS에 의존하는 것이 아니라, 자바 코드로 표현될 수 있기 때문입니다. 그로 인해서 생산성이 높아진다고 볼 수 있습니다.

 

5. N + 1문제는 무엇인가요?

더보기
개발자가 설계한 쿼리문을 실행했을 때 원래는 1개의 쿼리문만 실행되어야 하는데 N개의 추가 쿼리문이 발생하는 문제를 의미합니다. 주로 ManyToOne, OneToMany의 관계를 가질 때 많이 발생합니다.

 

'면접준비' 카테고리의 다른 글

[기술 면접] 스프링 / 보안  (0) 2022.12.23
[기술 면접] 자료구조  (0) 2022.12.21
[기술 면접] 운영체제  (0) 2022.12.20
[기술 면접] 네트워크  (0) 2022.12.19
[기술 면접] 객체 지향 프로그래밍  (0) 2022.12.16