본문 바로가기

전체 글

[Elastic] 지식 그래프란? Relation DataBase(테이블 형식의 데이터 베이스)와 다르게 지식을 그래프 형식으로 표현하여 새로운 정보 추론과 여러 가지 속성을 확장할 수 있는 새로운 종류의 그래프 데이터 베이스이다. 검색 품질을 향상 시킬 수 있다. -> 검색을 확장할 수 있다. 아이디어, 컨셉들의 관계를 그래프로 나타낸다. Entity들 사이에서 어떤 관계가 있는지 파악할 수 있다. 화살표로 연관 관계를 표현해 준다. -> 여러 가지 Entity에 형성되는 메타 데이터를 나타낼 수 있다. 이런 지식 그래프 없이 Relational Database로 Entity들의 관계를 표현하려면 무수히 많은 테이블이 필요하다. ** 지식 그래프는 Entity들을 하나씩 정리해 주고, Entity들 사이에서의 관계를 표현해 줌으로써 매.. 더보기
[Elastic] Elastic Search란? Elastic Search는 색인, 색인을 생성하고 Collection Analysis, Sorting / Ranking, 기본적인 쿼리 처리를 도와주는 기능을 한다. Elastic Search Architecture * 기본적으로 검색 엔진이지만, NoSQL과 같은 엔진으로도 활용 가능하다. * 수집 / 주석 시스템을 도와주는 Logstash(로그 스태시)쿼리 처리를 도와주는 Kibana(키바나)를 함께 사용한다. * LUCENE -> 인덱싱 서비스 위에 색인 생성 시스템, Sorting, Ranking, Analysis 서비스를 덧붙인 것이 Elastic Service이다. ** Elastic Search + Logstash + Kibana = ELK Stack DBMS와 비교 DBMS Elastic.. 더보기
[Reactor] Flux란? Flux란, Reactive Streams에서 정의한 Publisher의 구현체로 0..N 개의 데이터를 발행할 수 있다. 하나의 데이터를 전달할 때마다 onNext 이벤트 발생 Flux 내의 모든 데이터의 전달 처리가 완료되면 onComplete 이벤트 발생 Flux 내의 데이터 처리 중 에러가 발생하면 onError 이벤트 코드 @Slf4j public class FluxEx { @RestController public static class FluxExampleController { @GetMapping("/flux/ex1") public Flux fluxEx1() { return Flux.just( new Event(1, "event1"), new Event(2, "event2") ); } } @.. 더보기
[Reactor] Mono란? Mono란, Reactive Streams의 Publisher 인터페이스를 구현하는 구현체이며, 0..1 개의 데이터를 처리한다. 코드 @Slf4j public class MonoEx { @RestController @RequestMapping("/mono") public static class MonoExampleController { @GetMapping("/1") public Mono ex1() { log.info("first"); Mono mono = Mono.just("Hello WebFlux").log(); log.info("second"); return mono; } } } 위 코드는 동기적으로 실행되어, 실행 결과로 first 출력 -> Mono 로그 -> second 출력을 기대했는데 실.. 더보기
[Spring] WebFlux란? Spring5에서 새롭게 추가된 Reactive 스타일의 어플리케이션 개발을 도와주는 Reactive-Stack Web Framework 특징 클라이언트와 서버에서 Reactive 애플리케이션 개발을 위한 non-blocking Reactive Stream(Reactor)을 지원한다. 적은 양의 스레드로 동시성을 처리한다. Functional Programming AsyncRestTemplate -> WebClient DeferredResult -> Mono, Flux(Publisher) SpringMVC와 WebFlux 비교 SpringMVC 하나의 요청에 대해 하나의 스레드가 사용된다.(thread-per-request) -> 다수의 요청을 대비하여 미리 스레드 풀을 생성해 놓으며, 각 요청마다 스레.. 더보기
[JPA] 설정한 batch_size만큼 in 절이 나가지 않는 이유 @BatchSize(size = 100)으로 설정했음에도 불구하고 실제 조회 쿼리를 실행하면 아래와 같은 실행 결과가 나왔다. select emojilist0_.comment_no as comment_5_3_1_, emojilist0_.emoji_no as emoji_no1_3_1_, emojilist0_.emoji_no as emoji_no1_3_0_, emojilist0_.board_no as board_no4_3_0_, emojilist0_.comment_no as comment_5_3_0_, emojilist0_.emoji as emoji2_3_0_, emojilist0_.user_no as user_no3_3_0_ from tb_emoji emojilist0_ where emojilist0_.c.. 더보기
[Elastic] 검색 엔진이란? 검색 엔진 시스템이란 컴퓨터 시스템에 저장된 정보(문자 정보, 오디오 정보, 이미지, 3D 그래픽 등...) 찾기를 도와주도록 설계된 정보 검색 시스템이다. 검색 시스템의 사례 오프라인 - 파일 검색, 데스크탑 검색 검색 서비스 - 웹 검색, 이미지 검색, 비디오, 오디오 검색 등... 인터페이스형 - 인공지능 개인비서, 지도형(카카오 맵, 배달앱...) 추론형 - Zillow, Redfin 데이터들을 통합하여 추론을 만들어 검색을 도와준다. SQL과 비교 많은 쇼핑몰들과 여러 가지 기본 웹 사이트들은 SQL로 검색 기능을 제공하고 있다. 굳이, 검색 엔진을 도입하는 이유는? -> Scale, Speed, Usefulness 차이점 SQL Transaction을 위해서 제작된 데이터베이스이다. -> AC.. 더보기
[Spring] Reactive Web (4) CompletableFuture Java 8에서 부터 사용 가능하다. 비동기 작업 결과 Future -> 비동기 작업의 결과를 담고 있는 Object ListenableFuture -> Callback 구조로 결과 처리 CompletableFuture -> 다양한 비동기 작업을 간단하게 수행할 수 있다. Future, CompletionStage를 구현하고 있다. CompletionStage -> 완료한 결과에 의존적으로 다른 작업을 실행할 수 있는 기능을 제공한다. 별도의 스레드 풀을 가질 수 있다. 리스트의 모든 값이 완료될 때까지 기다리거나 하나의 값만 완료되길 기다릴지 선택할 수 있다. 람다 표현식, 파이프 라인닝을 활용해 Callback Hell 개선 제공 메서드 CompletableFuture.. 더보기