DI(Dependency Injection)에 대한 설명과 해당 기술의 장점에 대해 설명해주세요.

DI(Dependency Injection)란 스프링이 다른 프레임워크와 차별화되어 제공하는 의존 관계 주입으로, 객체를 직접 생성하는 게 아니라 외부에서 생성한 후 주입 시켜주는 방식입니다. DI(의존성 주입)를 통해서 모듈 간의 결합도가 낮아지고 유연성이 높아진다는 장점이 있습니다.

의존성을 주입하는 방법에는 생성자 주입, Setter 주입, 필드 주입 등이 있는데 Spring에서는 생성자 주입을 권장하고 있습니다. 생성자 주입은 생성자의 호출 시점에 1회 호출 되는 것이 보장되기 때문에 주입받은 객체가 변하지 않거나, 반드시 객체의 주입이 필요한 경우 강제로 주입하기 위해 사용할 수 있다는 장점이 있습니다. 스프링은 애플리케이션 실행 시점에서 필요한 객체(bean)을 DI 컨테이너에서 생성합니다. 그리고 의존성이 있는 두 객체를 연결하기 위해 한 객체를 다른 객체로 주입시킵니다. 이러한 개념은 제어의 역전(Inversion of Control, IOC)라고 불립니다. 왜냐하면, 어떠한 객체를 사용할지에 대한 책임을 개발자가 아닌 프레임워크가 가지는 동시에 개발자는 수동적으로 주입받는 객체를 사용하기 때문입니다.

 

 

DB에서 인덱스를 잘 사용하면 어떤 장점이 있을까요?

인덱스는 데이터베이스에서 테이블의 검색 성능을 높여주는 방법으로 select where 쿼리 처럼 특정 데이터를 찾을 때 빠른 속도로 검색할 수 있습니다. 인덱스를 생성하면 특정 칼럼(속성)값을 기준으로 정렬하여 데이터의 물리적 위치주소와 함께 별도 파일에 저장합니다. 테이블의 데이트는 순서없이 쌓이게 되므로 특정 조건의 데이터를 찾으려면 테이블의 모든 데이터에 접근하여 비교하는 과정이 필요하지만 인덱스를 사용하면 search-key가 정렬되어 있기 때문에 조건 검색 시 속도가 빠릅니다. 
 
대량의 데이터를 가지고 있고 특정 조건의 데이터를 찾을 때는 인덱스를 활용하여 빠르게 데이터를 가져올 수 있습니다.
 
인덱스의 단점은 추가 저장공간이 필요하다는 점입니다. 데이터가 변경이 있는 경우 인덱스도 수정되어 성능 저하가 일어날 수 있습니다.
인덱스는 where 절에서 '자주 조회'하고 '수정 빈도가' 낮고 '데이터 중복'이 적은 칼럼을 선택하는 것이 좋습니다. 데이터의 양이 많을수록 인덱스 성능 효율이 커진다고 할 수 있습니다. 
한 테이블에 인덱스가 너무 많은면 데이터 수정시 소요시간이 커지고, 데이터 중복이 높은 값은 인덱스를 생성하는 것이 크게 의미가 없습니다. 인덱스의 장점보다 저장 공간을 차지하고 데이터 수정에 대한 성능 저하가 더 크기 때문입니다. 

 

+ Recent posts