전체 글 46

[ElasticSearch] Paging

1. from 과 size 파라미터를 사용한 페이징 from : 검색 결과의 시작점. 기본값은 0 size : 한 번 검색 쿼리로 반환될 최대 문서 수. 기본값은 10 간단한 페이징을 위해 사용된다. 각 페이지마다 새로운 검색 요청을 보내야 한다.import org.elasticsearch.action.search.SearchRequest;import org.elasticsearch.action.search.SearchResponse;import org.elasticsearch.client.RestClient;import org.elasticsearch.client.RestHighLevelClient;import org.elasticsearch.index.query.QueryBuilders;import ..

Backend · Infra 2024.07.22

[Error Log] Java High Level REST Client 6.3

ES에서 Search 쿼리를 연습해보던 중기존 프로젝트에  Java Low Level REST Client 6.3이 셋팅 되어 있었지만, LowLevel에서는 Query DSL을 직접 JSON형식으로 작성하여 요청해야 하기 때무에 불편함이 있었다.  Java High Level REST Client 6.3 를 셋팅 해보고 싶다는 생각이 들어, 기존 프로젝트에서 branch를 하나 따서 High Level을 셋팅 해봤다. High Level vs Low Level  Java High Level REST Client Java Low Level REST Client REST 요청을 추상화하여 간단한 인터페이스를 제공하여 간편한 사용이 가능하다.ElasticSearch의 REST API와 직접적으로 상호작용하..

Backend · Infra 2024.07.17

[Spring] DI : Dependency Injection

DI로 하는 일은 프로그램의 부분적인 전환을 쉽게 만드는 것객체 간의 의존 관계를 스프링 컨테이너가 관리해주는 디자인 패턴.객체가 직접 필요로 하는 의존 객체를 생성하거나 관리하는 것이 아니라, 외부에서 필요한 객체를 주입받아 사용하는 방식 DI의 D는 의존을 의미하며, I는 주입을 의미한다.   예)주문 서비스가 있을 때, 주문 서비스는 결제 서비스에 의존적일 수 있다. 이 때 DI를 사용하면 주문 서비스는 직접 결제 서비스를 생성하거나 관리하지 않고, 외부에서 주입받아 사용한다.  public class OrderService { private PaymentService paymentService; // 생성자를 통한 주입 (Constructor Injection) public Ord..

Backend · Infra 2024.07.15

[Java] 추상 클래스와 인터페이스의 차이

추상클래스와 인터페이스는 모두 추상화를 통해 다형성을 구현하는 방법을 제공하지만각각의 특징에 따른 차이점이 존재한다. 여기서 다형성이란,객체에 여러가지 타입을 대입할 수 있다는 것을 의미한다. ↔ 단형성은 하나의 객체에 하나의 타입만 대응 가능하다.추상 클래스 Abstract Classabstract class Animal { String name; Animal(String name) { this.name = name; } abstract void makeSound(); // 추상 메서드 void eat() { System.out.println(name + " is eating."); // 일반 메서드 }} abstract 키워드를 사용하여 정의한..

Backend · Infra 2024.07.12

Error 와 Exception

Error와  Exception은 둘 다 프로그램 실행 중 발생할 수 있는 문제를 나타내지만,그 의미와 처리는 다르다.   Error보통 JVM(Java Virtual Machine) 수준에서 발생하는 심각한 문제로, 애플리케이션 코드에서 직접 처리하기 어려운 경우가 많다.  OutOfMemoryErrorJVM에 메모리가 부족할 때 발생 StackOverflowError너무 많은 메서드 호출로 인해 호출 스택이 오버플로우될 때 발생 NoClassDefFoundEerror필요한 클래스를 찾을 수 없을 때 발생 원인 시스템 레벨에서 발생하는 문제, 메모리 부족, 스택 오버플로우 등과 같은 문제로 인해 발생하게 된다. 처리 Error는 프로그램이 정상적으로 계속 실행되기 어려운 상황이기 때문에 일반적으로 이런..

Backend · Infra 2024.07.11

[ElasticSearch] nested Type

ElasticSearch에서 nested 타입은 중첩된 문서 구조를 지원하는 방법이다.일반적인 Object가 아닌 중첩된 객체 배열을 색인하고 검색하는 데 사용된다. 예제{ "title": "Book", "authors": [ { "name": "Author A", "age": 30 }, { "name": "Author B", "age": 35 } ]} authors 필드는 중첩된 객체 배열이다. 각 author은 name 과 age를 가지고 있다. 위 데이터를 ES에 인덱싱하기 위해 매핑을 설정한다.PUT /books{ "mappings": { "properties": { "title": { "type": "text" }, ..

Backend · Infra 2024.07.10

[ElasticSearch] Query

ElasticSearch강력한 검색 및 분석 기능을 제공하는 분산 검색 엔진데이터를 검색하기 위해 JSON 기반의 쿼리를 사용한다.Query DSL(Domain Specific Language) 가 사용 된다. Logstash과 Beats는 데이터를 수집, 집계 및 풍부화 하고 ElasticSearch에 저장하는 것을 용이하게 함.Kibana를 사용하면 대화형으로 데이터 탐색, 시각화, 스택관리, 공유, 모니터링 할 수 있다.ElasticSearch 는 모든 유형의 데이터에 대한 실시간 검색 및 분석을 제공한다.구조화하거나 구조화되지 않은 텍스트, 숫자, 지리공간 등 빠른 검색을 지원하는 방식으로 저장하고 인덱싱할 수 있음._Search API1. 정확한 값 검색숫자,날짜, IP, 문자열 등의 정확한 값..

Backend · Infra 2024.07.09

싱글톤 패턴 Singleton Pattern

소프트웨어 디자인 패턴 중 하나로, 특정 클래스의 인스턴스가 오직 하나만 생성되도록 보장하는 패턴.전역적으로 접근 가능한 유일한 객체를 제공하며, 주로 설정 클래스나 로깅 클래스 등에서 사용된다. 주요 목적시스템 내에서 해당 클래스의 인스턴스가 한 번만 생성되고, 동일한 인스턴스가 여러 곳에서 사용될 수 있도록 하는 것  싱글턴 패턴의 주요 특징1. 유일한 인스턴스 보장   클래스의 인스턴스가 하나만 존재하도록 보장한다.2. 전역 접근   생성된 인스턴스에 전역적으로 접근할 수 있도록 한다.3. 메모리 절약   하나의 인스턴스만 생성되기 때문에 메모리 낭비를 줄일 수 있다.4. 인스턴스 수명 관리   인스턴스가 언제 생성되고, 파괴될지 제어 할 수 있다. class Singleton: _instance ..

Backend · Infra 2024.07.09

MSA (Microservice Architecture)

마이크로서비스 아키텍처는 소프트웨어 시스템을 작고 독립적인 서비스들로 분리하여 개발하고 배포하는 아키텍처 스타일 입니다.기존 모노리틱 아키텍처와 달리, MSA는 각 서비스가 특정 비즈니스 기능을 담당하여 독립적으로 실행될 수 있도록 설계되었습니다.독립적인 서비스각 서비스는 자체적 데이터베이스와 통신 인터페이스를 가짐특정 비즈니스 기능을 수행함서비스 간의 결합도를 낮춤개발과 배포의 독립성을 높임분산형 데이터 관리독립적 DB를 가지기 때문에, 데이터 관리는 분산되어 있음서비스 간 일관성 유지를 신경 써야 하지만, 해결하기 위한 패턴과 도구들이 발전하고 있음경량화된 통신 프로토콜서비스 간 통신은 주로 HTTP RESTful API를 통하여 이루어짐서비스 간 유연하고 간단한 통신을 가능하게 함개별적 배포 & 확..

Backend · Infra 2024.07.03

RESTful API 개요

RESTful API란?RESTful API는 REST(Representational State Transfer) 원칙을 따르는 웹 API를 의미합니다. 이는 두 컴퓨터 시스템이 인터넷을 통해 정보를 안전하게 교환하기 위한 인터페이스로 활용됩니다.REST의 핵심 개념REST는 API 설계 및 작동 방식에 대한 일련의 원칙을 정의하는 소프트웨어 아키텍처 스타일입니다. 주로 HTTP 프로토콜을 기반으로 하며, 클라이언트와 서버 간 상호작용을 단순화하고, 자원의 표현 방식을 규정합니다.REST의 주요 원칙1. 자원(Resource)모든 자원은 고유한 식별자(URI)를 가짐URI를 통해 자원을 식별하고 상호작용 가능2. 표현(Representation)자원은 JSON, XML 등 다양한 표현 방식으로 제공 가능..

Computer Science 2024.07.03