Spring
-
[Spring WebFlux] 기존 웹 서버와의 차이점과 꼭 주의해야할 점 (Netty)Spring/WebFlux 2024. 11. 18. 20:03
1. Netty와 Tomcat의 차이Spring WebFlux는 논블로킹 리액티브 프로그래밍 모델을 지원하며 기본적으로 Netty를 웹 서버로 사용한다.이는 블로킹 기반 웹 서버인 Tomcat과는 스레드 관리 방식 등 다소 차이가 있기에 그 차이를 이해해야만 효율적인 reactive 프로그래밍이 가능하다.(Tomcat과 같은 서블릿 컨테이너를 활용해서도 Flux와 Mono data stream을 반환할 수 있기는 하다.) 2. 이벤트 루프를 사용하는 Netty의 특성Netty는 이벤트 루프 기반의 네트워크 애플리케이션 프레임워크로, 논블로킹 I/O 작업을 효율적으로 처리하기 위해 설계되었다.Tomcat은 스레드 풀을 두고 다수의 스레드를 만들어두고 개별 요청마다 스레드를 할당한다.반면에 Netty는 쓰..
-
[Spring WebFlux] Publisher과 SubscriberSpring/WebFlux 2024. 2. 20. 19:58
Publisher는 리액티브 프로그래밍에서 데이터 스트림을 생성하고 발행하는 주체다.Reactive Streams 사양에서는 Publisher 인터페이스를 정의하며, 이는 데이터를 생성하고 구독자(Subscriber)에게 데이터를 전달하는 메커니즘을 가진다. Publisher의 주요 특징은 다음과 같다비동기 데이터 스트림: Publisher는 비동기적으로 데이터 아이템을 발행한다. 이는 데이터를 생성하고 처리하는 작업이 호출자의 스레드와 다른 스레드에서 발생할 수 있음을 의미한다.백프레셔(backpressure) 지원: Publisher는 구독자가 처리할 수 있는 데이터의 양을 제어할 수 있는 백프레셔 메커니즘을 지원한다. 구독자는 request(n) 메서드를 통해 한 번에 처리할 아이템의 수를 요청할 ..
-
SpringBoot+Neo4j [2. 두 개의 노드 엔티티와 두 개의 관계를 가지는 GraphDB프로젝트]NOSQL/Neo4j 2021. 11. 12. 18:03
목차 SpringBoot+Neo4j A-Z [1. 하나의 노드 엔티티만을 가지는 GraphDB프로젝트]를 따라 하는 대에 무리가 없었다면, RelationShip을 가지는 엔티티의 구현 또한 식은 죽 먹기다. 본 프로젝트에서는 공식 예제에서는 다루지 않는 RelationShip을 갖는 Node에 대해 다룬다. 본 프로젝트까지 진행한다면 SpringDataNeo4J를 이용한 Node와 Relation의 CRUD를 모두 이해할 수 있을 것이다. https://github.com/alska95/Spring_Neo4j_Project 이 코드를 반드시 참고하며 읽어주길 바란다. 이전 프로젝트에서 설명이 부족했던 RelationShip에 대해 먼저 설명하겠다. RelationShip 이란? RelationShip이..
-
SpringBoot+Neo4j [API 구현]NOSQL/Neo4j 2021. 11. 12. 14:23
REST-API를 이용하여 노드 업데이트를 진행해보자. 코드 참고 : https://github.com/alska95/Spring_Neo4j_Project 기존 Spring의 사용법과 다를게 없다.우선 기존에 Spring을 사용하던것과 똑같이 컨트롤러와 서비스를 만들어 보자.기본적인 조회, 저장, 업데이트 기능을 구현했다. 그리고 서비스 클래스는 엔티티를 직접 노출시키지 않기위해 엔티티와 dto를 치환해 주는 정도의 역할 정도로 작성했다. 커낵션 Auth정보를 전달하지 않으면 다음과 같은 에러가 발생한다.org.neo4j.driver.exceptions.AuthenticationException: Unsupported authentication token, scheme='none' only allowe..
-
SpringBoot+Neo4j [1. 하나의 노드 엔티티만을 가지는 GraphDB프로젝트]NOSQL/Neo4j 2021. 11. 9. 14:57
목차 graphDB neo4j를 이해하기 위해 SpringBoot를 이용하여 기본적인 프로젝트부터 진행하기로 했다. graphDB를 이해하기 위한 이론적 요소는 개발을 진행하며 하나하나 다루도록 하겠다. 첫번째 프로젝트가 가질 데이터 구조는 다음과 같다. 해당 노드 엔티티에 대하여 CRUD를 수행할 것이다. CRUD를 수행하기 위해 기존에 사용하던 RDBMS의 쿼리와는 다른, CyperQuery를 사용하게 된다. 우선 노드와 CyperQuery가 무엇인지부터 알아보자. 노드란? 노드는 라벨과 속성(properties)으로 이루어져있다. 라벨은 테이블 이름에 대응되고, 속성은 칼럼명에 대응된다고 이해하면 편하다. 위 노드를 RDBMS모델로 표현하자면 다음과 같이 표현될 수 있을 것이다. 이외에도 노드에는 ..
-
SpringBoot+Neo4j [CRUD 기능 구현]NOSQL/Neo4j 2021. 11. 9. 14:38
Spring을 이용한 Neo4j의 CRUD Method들을 살펴보겠다. 아래 코드를 꼭 참고하며 보는 것을 추천한다. https://github.com/alska95/Spring_Neo4j_Project 앞서 언급한 것처럼 SpringDataNeo4j가 제공하는 3가지 방법을 통해 다뤄보겠다. 1.Neo4jRepository 를 이용하는 방법 2.Neo4jClient를 이용하는 방법 3.Driver을 이용하는 방법 a. Create neo4jRepository 이용 아래와 같이 neo4jRepository의 save를 이용하는 방법이 있다. save 구현 메소드는 Neo4jTemplate클래스의 saveImpl을 참고하면 되는데 복잡하다. 본 프로젝트같이 단순한 프로젝트에서는 pk가 중복되면 업데이트를 ..