반응형

web

    [번역] shared message queues와 publish-subscribe 방식에 Custom Group 방식을 더한 Kafka 소개

    전통적으로 메시지 모델은 Shared Message Queue, Publish-subscribe로 구분된다. 두 가지 모델 모두 그들만에 pros and cons를 보유하고 있다. 하지만 이 두개의 모두 최초 디자인 제한 때문에 큰 데이터를 다루기에는 부족했다. Apache Kafka는 두 모델 중 publish-subscribe 메시징 모델을 구현한 모델로 부족했던 부분을 수정하고 실시간 분석을 위한 스트리밍 데이터를 처리할 수 있도록 가능해졌다. kafka는 LinkedIn에서 2010년에 방대한 데이터 처리를 위해서 개발되었다. Apache Kafka는 전통적인 메시징 모델이 달성하지 못한 격차를 해소했다. Kafka는 두 모델의 개념을 구현하여 단점을 극복하고 동시에 두 가지 방법론을 모두 통합 ..

    Spring Boot에서 6.4 Elasticsearch 연결 및 간단 CRUD

    Elasticsearch를 Spring Boot에서 작업을 하는 간단한 정리를 해보자. 1. Library 추가Elasticsearch를 사용하기 위해서는 spring-data-elasticsearch 라이브러리가 추가되어야 한다. gradle에 추가해보자.1234567dependencies { implementation 'org.springframework.boot:spring-boot-starter-data-elasticsearch' implementation 'org.springframework.boot:spring-boot-starter-web' testImplementation 'org.springframework.boot:spring-boot-starter-test' compileOnly "o..

    Nginx, Apache 그리고 node.js 성능 관련 잡다한 정리

    Nginx과 Apache 비교 Nginx Apache 특징 - Nginx는 싱글 스레드 Event driven 방식- 미리 설정된 worker 프로세스 안에서 요청이 들어올 때 마다 요청을 분배하여 worker에게 역할을 분배- 기존에 정해놓은 리소스를 사용하기 때문에 CPU, Memory 등의 자원 사용률이 낮음 - 요청이 올 때마다 쓰레드를 생성하여 할당한다. 작업이 많아질 경우 많은 쓰레드할당이 필요하다. 그리고 쓰레드들이 작업을 진행 할 때마다 CPU를 사용하려 하기 때문에 문맥교환이 자주 발생된다. 차이점 - Apache에 경우 Blocking 방식으로 Network, DB 등 별도의 동작이 진행 될 때 Block되지만 Nginx는 Non-blocking 방식을 지원함 Non-blocking, ..

    kafka docker에 간단 설치 후 Spring boot 연동 테스트

    간단하게 Kafka 설치docker-compose.yml 생성 후 docker-compose up -d를 통해 설치12345678910111213141516version: '2'services: zookeeper: image: wurstmeister/zookeeper ports: - "2181:2181" kafka: image: wurstmeister/kafka ports: - "9092:9092" environment: KAFKA_ZOOKEEPER_CONNECT: zookeeper:2181 KAFKA_ADVERTISED_HOST_NAME: wedul.pos KAFKA_CREATE_TOPICS: "test:1:1" volumes: - /var/run/docker.sock:/var/run/docker.so..

    Kafka 요약 정리

    Topic- 메시지는 Topic에 분류된다. Partition- Topic은 partition으로 구분된다.- 파티션에 쌓이는 데이터는 로그라고 부르고 각 파티션에 나눠서 저장된다. Topic이 파티션으로 나뉘는 이유- Topic 내부에 파티션이 없을경우 메시지를 보내는 대상이 많아질경우 append 속도가 버거워진다. - 병렬로 분산저장하고자 Partition 개념 생성- 한번 생성한 파티션은 운영중에 줄일 수 없기 때문에 설계시 조심 Consumer- Topic에 있는 데이터를 읽는 대상 Consumer Group- Consumer를 여러개 묶어놓은 것. Consumer Group이 필요한 이유.- 소비를 진행 하던 Consumer가 죽어버릴 경우를 Rebalance 상황이라고 하는데 이럴경우 파티션..

    Spring Reactive Web Application

    Sprint 5에서 리액티브 프로그래밍을 지원하는 웹 애플리케이션을 만들 수 있다. 리액티브 프로그램이란? 이전시간에 정리했었지만 스프링 리액티브 프로그래밍을 들어가기 전에 간단하게 정리해 보자. 일반적으로 리액티브 프로그래밍은 비동기, evnet-driven 방식으로 non-blocking 하는 프로그래밍으로써 일반적인 시스템 보다 작은 작은 쓰레드 수가 필요하다. 그럼 왜? 비동기-논블록킹 리액티브 개발이 가능. 기존 멀티쓰레드 블로킹 방식과는 다르게 서버의 응답에 의지하지 않는 효율적 개발이 가능. 서버간에 호출이 잦은 마이크로 서비스에서 사용됨 Spring Web Reactive Module (Servlet 3.1 이상부터 지원) Spring Framework 5는 spring-web-reacti..

    Spring reactor Mono와 Flux 정리

    지금까지 Spring5에서 추가되었던 리액트 프로그램을 사용하여 간단한 프로그램을 만들어 봤지만 정확하게 Mono와 Flux에 차이와 정의를 정리하지 못한 것 같다. 이번기회에 두 개의 정확한 차이와 사용방법등을 정리해보자. 리액티브 프로그래밍 비동기 블록킹 프로세스로 동작하는 애플리케이션을 논블록킹 프로세스로 동작하기 위해서 지원하는 프로그래밍. (현재 node.js의 동작방식과 유사) 기존 Spring 블록킹 방식 웹에서 서버에 요청이 왔을때 서버는 요청에 대한 적절한 응답을 보내야 하는데 만약 작업이 오래 걸릴 경우에는 요청에 대한 응답이 모두 종료될 때까지 블록킹된다. Spring에서는 그래서 동시 요청 처리를 위해서 멀티 thread를 지원한다. 그러면 하나의 작업이 thread에서 진행되고 다..

    Kafka 정리

    카프카는 분산형 스트리밍 플랫폼으로써 다음으로 정의할 수 있다. 메시지 큐와 유사하게 스트림을 publish하고 subscribe 하는 방식이다.fault-tolerant 지속 방식으로 레코드들의 스트림들을 저장한다. 용도 시스템이나 어플리케이션에서 발생한 실시간 스트리밍 데이터를 안정적으로 데이터 파이라인 구축할 때데이터 스트림을 전송하거나 처리해야할 때 사용 구성 하나이상에 서버에 여러 cluster로 구성되어 있다.topic이라는 카테고리로 레코드 스트림들을 저장한다.각각의 레코드들은 key, value, timestamp로 구성되어 있다. 핵심 APIProducer API하나 또는 그 이상의 카프카 topic을 데이터 스트림에 발행할 수 있도록 해주는 APIConsumer API어플리케이션이 하나..

    생성한 Custom validation으로 에러메시지 출력하기

    바로 직전 https://wedul.tistory.com/562?category=595982 에서 Custom validation을 만들어서 입력된 값에 validation을 체크하는 방법을 알아봤다.그럼 이 validation체크를 통해서 front에 상황에 맞는 에러를 보내줄 수 있도록 조치를 취해보자.우선 @valid 처리를 했었던 컨트롤러에서 에러 메시지를 수집해야한다. 1. ControllerSpring에서 Validation 작업을 진행할 시 validation에 문제가 발생하면 에러 내용을 묶어서 BindingResult로 처리할 수 있도록 제공해준다. 이를 사용하기 위해서 parameter로 BindingResult값을 추가해준다.1234567891011121314/** * 회원가입 * *..

    Custom Validation 만들어서 추가하기

    Spring에서 @NotBlank, @Email등 여러 템플릿에 맞게 Validation을 넣을 수 있다.하지만 추가적으로 패스워드 규칙과 같이 별도 체크할 validator가 필요할 때 만들어서 사용해야 하는데 만들어서 지정해보는 작업을 해보자. 1. Controller요청을 받을 DTO앞에 @Valid 어노테이션을 추가해야한다.1234567891011/** * 회원가입 * * @param reqDto * @return * @throws Exception */@RequestMapping("/join")public ResponseEntity join(@Valid UserDto reqDto) throws Exception { return ResponseEntity.ok(userService.insertUs..

반응형