전체 글 74

[DB] NOSQL 특징: 분산 확장성

수평 확장(Horizontal Scaling)과 분산 처리(Distributed Processing)는 NOSQL 데이터베이스의 중요한 특징입니다. 1. 수평 확장 (Horizontal Scaling): 데이터베이스의 성능을 향상시키기 위해 서버 또는 노드의 수를 늘리는 방식 즉, 데이터베이스에 새로운 서버 또는 노드를 추가하여 처리 능력을 확장하는 것을 의미합니다. 이렇게 분산된 노드는 동등한 역할을 수행하며 데이터를 분산 저장하고 처리합니다. 예를 들어, 하나의 NOSQL 데이터베이스를 사용하여 웹 서비스를 운영한다고 가정해봅시다. 초기에는 단일 서버만으로 웹 서비스를 처리할 수 있지만 시간이 지남에 따라 트래픽이 증가하면서 성능 문제가 발생할 수 있습니다. 이럴 때 수평 확장을 적용하여 새로운 서버..

DB 2023.07.31

[DB] 면접 예상 질문(1)

★ 데이터베이스에서 인덱스를 사용하는 이유 및 장단점에 대해 설명해주세요. 데이터베이스에서 인덱스를 사용하는 이유는 검색 성능을 향상시키기 위함입니다. 하지만 검색 성능을 실질적으로 향상시키기 위해서는 해당 쿼리가 index를 사용하는지, 카디널리티(Cardinality: 전체 행에 대한 특정 컬럼의 중복 수치를 나타내는 지표), 선택도(Selectivity) 같은 요소들이 고려된 인덱스가 생성되어야 합니다. 일반적인 경우의 장점으로는 빠른 검색 성능을 들 수 있습니다. 일반적인 경우의 단점으로는 인덱스를 구성하는 비용 즉, 추가, 수정, 삭제 연산 시에 인덱스를 형성하기 위한 추가적인 연산이 수행됩니다. 따라서, 인덱스를 생성할 때에는 트레이드 오프 관계에 놓여있는 요소들을 종합적으로 고려하여 생성해야..

DB 2023.07.31

[Spring] Spring Data JPA에서 Index 적용하기

Spring Data JPA에서 Index를 적용하기 @Table 어노테이션을 사용하여 테이블의 이름과 인덱스를 정의할 수 있다. @Entity @Table(name = "PRODUCT", indexes = { @Index(name = "idx__name", columnList = "name") }) public class Product { @Id @GeneratedValue(strategy = GenerationType.IDENTITY) private Long id; @Column(nullable = false) private String name; @Column(nullable = false) private String category; @Column(nullable = false) private d..

Spring 2023.07.31

[DB] 인덱스(Index)란?

인덱스(Index)란? 데이터베이스에서 특정 컬럼(또는 여러 컬럼의 조합)의 값을 빠르게 찾아내기 위한 자료구조 데이터베이스 성능을 향상시키는 데 도움을 주는 개념 주로 데이터베이스의 검색 작업을 최적화하고, 데이터를 빠르게 접근하고 필터링하는 데 사용 데이터베이스의 레코드들을 정렬된 형태로 유지하며, 검색 시 해당 값이 존재하는 위치를 빠르게 찾아냄 이를 통해 데이터베이스는 모든 레코드를 순차적으로 검색하는 것보다 빠르게 원하는 값을 찾아낼 수 있음 B-Tree 혹은 Hash Table과 같은 자료구조로 구현 주요 장점: 1. 검색 성능 향상 인덱스가 적용된 컬럼을 검색하는 쿼리는 인덱스를 사용하지 않은 경우보다 빠르게 실행됩니다. 데이터베이스가 해당 인덱스를 통해 검색 대상 값을 빠르게 찾아낼 수 있..

DB 2023.07.31

[Spring] DI/생성자 주입과 필드 주입의 차이점

의존성 주입을 위한 방법에는 생성자 주입(Constructor Injection), 세터 주입(Setter Injection), 필드 주입(Field Injection)이 있다. 저만 필드 주입의 유용성을 모르겠나요..?!! 😲😮😮😮 (유용한 경우를 댓글로 남겨주세요🤎) 생성자 주입과 필드 주입의 각각의 특징과 차이점을 (@Autowired로)예시를 통해 정리해 봅시다. 1. 생성자 주입 생성자 주입은 의존성을 클래스의 생성자를 통해 주입하는 방법입니다. 의존성이 필수적인 경우에 사용되며, 클래스의 필드를 final로 선언하여 변경이 불가능하도록 만들 수 있습니다. @Component public class ExampleService { private final SomeDependency someDepe..

Spring 2023.07.15

[Spring] 면접 예상 질문(1)

★ Spring DI/IoC는 어떻게 동작하나요? 제어의 역전(IoC - Inversion of Control)은 프로그램의 제어 흐름을 직접 제어하는 것이 아니라 외부에서 관리하는 것으로, 코드의 최종호출(객체의 생성과 의존성 주입)은 개발자가 제어하는 것이 아닌 프레임워크(스프링)의 내부에서 결정된 대로 이루어집니다. DI(의존관계 주입)은 Spring 프레임워크에서 지원하는 IoC의 형태로 클래스 사이의 의존관계를 빈 설정 정보를 바탕으로 컨테이너가 자동으로 연결해줍니다. 스프링에서는 스프링 컨테이너 ApplicationContext를 이용하여 설정 정보를 생성, 등록하고 필요한 객체를 생성자 혹은 setter를 통해 주입합니다. ★ Spring Bean이란 무엇인가요? IoC 컨테이너 안에 들어있..

Spring 2023.07.15

[Spring] ApplicationContext

ApplicationContext 스프링 프레임워크에서 제공하는 주요 인터페이스로, 스프링의 컨테이너를 구현한 클래스 스프링의 IoC(Inversion of Control)와 빈(Bean) 관리를 담당 스프링 애플리케이션을 구성하고 실행하는데 필요한 모든 기능을 제공하는 핵심적인 역할 1. 빈(Bean) 관리 빈의 등록, 생성, 소멸 등의 생명주기를 관리 개발자가 작성한 빈들을 컨테이너에 등록하면, 컨테이너는 해당 빈들을 싱글톤이든 프로토타입이든 지정된 스코프에 따라 관리한다 2. 다양한 빈 설정 방식 ApplicationContext는 XML 기반 설정부터 Java Config, 어노테이션 기반 설정까지 다양한 방식으로 빈을 설정할 수 있도록 지원한다 3. 편리한 기능 제공 ApplicationCont..

Spring 2023.07.15

[Spring] 의존성 주입(DI)의 예시

의존성 주입(DI - Dependency Injection) DI는 객체들 사이의 의존성을 객체 자체가 아닌 외부에서 주입해주는 방법 이를 통해 객체들은 직접적으로 서로를 생성하거나 참조하지 않아도 된다. 대신, Spring 컨테이너가 객체들의 의존성을 인지하고 필요한 객체를 주입해준다. 이로써 객체 간의 결합도를 낮출 수 있고, 유연하고 재사용 가능한 애플리케이션을 구축할 수 있게 된다. 개발자는 짱짱 편리! 예시를 들어보겠습니다~ 1. 의존성 주입을 사용하지 않는 경우: public class Order { private Payment payment; public Order() { // 주문 객체가 결제 객체를 직접 생성 this.payment = new Payment(); } public void ..

Spring 2023.07.15

[JAVA] 다형성을 활용한 부모 타입 변수로 자식 클래스 객체 참조하기

자바에서 다형성을 활용하여 하위 클래스의 객체를 상위 클래스 타입의 변수로 참조할 수 있죠? 아래 예시를 토대로 자세히 알아봅시다~! class Animal { public void makeSound() { System.out.println("동물이 소리를 낸다."); } } class Cat extends Animal { public void scratch() { System.out.println("할퀴기"); } } public class Main { public static void main(String[] args) { Animal animal = new Cat(); // animal.scratch(); // 컴파일 오류! ((Cat) animal).scratch(); // 형변환을 통한 scra..

JAVA 2023.07.13

[JAVA] 면접 예상 질문(1)

★ JVM의 구조와 Java의 실행방식을 설명해주세요. Java Virtual Machine, 자바 가상 머신의 약자를 따서 줄여 부르는 용어로, JVM의 역할은 자바 애플리케이션을 클래스 로더를 통해 읽어 자바 API와 함께 실행하는 것입니다. 메모리 관리(GC)을 수행하며 스택 기반의 가상머신입니다. JVM의 구조는 클래스 로더(Class Loader), 실행 엔진(Execution engine), 런타임 데이터 영역(Runtime Data Area), JNI, Native Method Library로 이루어져 있습니다. 클래스 로더: JVM 내로 클래스를 로드하고, 링크를 통해 배치하는 작업을 수행하는 모듈 실행 엔진: 클래스 파일을 실행하는 역할을 수행합니다. 바이트 코드를 실행 가능한 형태로 변..

JAVA 2023.07.13