본문 바로가기

항해99_10기/105일의 TIL & WIL

[기술면접 스터디] [230222] DI와 DB 인덱스

Q1. DI(Dependency Injection)에 대한 설명과 해당 기술의 장점에 대해 설명해주세요.
DI는 의존관계를 외부에서 결정하고 주입하는 것을 의미합니다. 예를 들어, 쉐프의 버거 레시피를 쉐프가 직접 선택하고 의존하는 것이 아닌, 버거 가게 사장이 결정하고 주입하는 것을 의미합니다.  

DI를 이용해 의존 관계를 분리하고 주입을 받는 방법의 구현은 여러가지 장점을 갖습니다.
먼저 DI로 구현했을때, 의존성이 줄어듭니다. 주입받는 대상이 변하더라도 클래스의 구현 자체를 수정할 일이 없거나 줄어듭니다.
둘째로 재사용성이 높은 코드가 됩니다. 쉐프 클래스 안에서만 사용하던 버거 레시피를 별도로 구분하여 구현하면, 다른 클래스에서 재사용할 수 있습니다.
셋째로 테스트하기 좋은 코드가 됩니다. 버거 레시피의 테스트를 쉐프의 테스트와 분리하여 진행할 수 있습니다.
마지막으로 가독성이 높아집니다. 버거 레시피의 기능을 쉐프로부터 분리 구현하기 때문에, 상대적으로 코드가 간결해지고, 가독성이 높아집니다. 이로 인해 유지보수에 용이해집니다.

 

 

의존관계 주입(Dependency Injection) 쉽게 이해하기

이번 글에서는 DI(의존성 주입, 의존관계 주입)의 개념을 설명한다.

tecoble.techcourse.co.kr

 

 

Q2. DB에서 인덱스를 잘 사용하면 어떤 장점이 있을까요?
인덱스는 원하는 데이터를 빠르게 찾을 수 있는 장치입니다. 책으로 비유하자면, 책의 목차와 같습니다.

DB 테이블의 데이터는 순서가 없이 쌓이게 되는데, 특정 조건의 데이터를 찾으려면 테이블의 모든 데이터에 접근하여 비교하는 과정이 필요합니다. 하지만, 인덱스가 있다면 search-key가 정렬되어 있기 때문에 검색 속도가 빠릅니다.

인덱스는 보통 B-트리 구조로 이루어져 있습니다. 인덱스가 데이터 검색에 효율적인 이유는 효율적인 단계를 거쳐 모든 요소에 접근할 수 있는 균형 잡힌 트리 구조와 트리 깊이의 대수 확장성 때문입니다.
대수확장성이란, 트리 깊이가 노드 수에 비해 매우 느리게 성장하는 것을 의미하며, 인덱스가 한 깊이씩 증가할 때마다 최대 인덱스 항목의 수는 4배씩 증가합니다.

하지만, 인덱스는 비용입니다. 먼저 인덱스 리스트, 그다음 테이블이나 컬렉션 순으로 탐색하기 때문에, 읽기비용이 증가됩니다. 테이블 규모가 클 수록 인덱싱에 필요한 메모리도 증가하게 됩니다. 또한, 책의 본문이 수정되면 목차도 함께 수정하듯, 테이블이나 컬렉션이 수정되면, 인덱스도 함께 수정되어야 합니다. B-트리의 높이를 균형있게 조절하는 비용도 들고 데이터를 분산시켜 효율적으로 조회할 수 있도록 구축하는 비용도 듭니다. 

때문에, 모든 필드에 인덱스를 다 설정하는 것은 답이 아니며, 인덱스는 규모가 큰 테이블, 삽입, 수정, 삭제 작업이 자주 발생하지 않고, where나 order by, join 등이 자주 사용되거나 데이터의 중복도가 낮은 컬럼에 사용하는 것이 좋습니다.

 

 

[DB] 11. 인덱스(Index) - (1) 개념, 장단점, B+Tree 등

[목차] 1. 인덱스(Index)란? 2. 인덱스(Index)의 장단점 3. 인덱스를 사용하면 좋은 경우 4. 인덱스의 자료 구조 1. 인덱스(Index)란? 인덱스(Index)는 데이터베이스의 테이블에 대한 검색 속도를 향상시켜

rebro.kr