데이터 파이프라인 만들기: 쓰레드 사용

데이터파이프라인

사전 준비

  • 멀티 쓰레드 상황에서의 동기화 제어
    • synchronized block/modifier 활용
    • concurrent collection 활용

  • 카프카를 이용한 메시지 처리
    • 카프카 클라이언트를 이용한 컨슈머/프로듀서 연동
    • topic 구성하기
      • partition 과 replication 의 설정

Q1. 데이터를 가져와서 분석하는 툴을 만든다면 어떻게? 지속가능한 무중단 서버를 어떻게 구성할 것이지? 예를 들어 주기적으로 텍스트가 온다고 한다면?

  • 스프링 프레임워크
  • 소켓 서버
    • while문으로 체크하면서 가져온다
      • 그렇다면 데이터가 없을 때?
      • 중단 해야 할 때면?
      • sleep으로 mils만 줘도 cpu 부하가 많이 준다.
  • 데몬 형식의 프로세스 개발

Daemon 스레드

  • default : false
    • main 스레드가 끝나도 자신의 스레드가 할 일을 끝내고 스레드가 종료됨
  • true
    • main 스레드가 끝나면 종료됨
  • **사용자 스레드(non-daemon 스레드)** 프로그램의 주요 작업을 수행한다.
    • 작업이 완료될 때까지 실행된다.
    • 모든 user 스레드가 종료되면 JVM도 종료된다.
  • **데몬 스레드**
    • 백그라운드에서 보조적인 작업을 수행한다.
    • 모든 user 스레드가 종료되면 데몬 스레드는 자동으로 종료된다.

Queue

  • take : 데이터가 있을 때까지 대기
    • 단일 동작만 한다고하면 다른 작업을 하지 않아도 되기 때문에 이 방법을 쓰는게 효율적
  • poll : 데이터가 없다면 null
    • 단일 동작만 한다고 하면 데이터가 없을 때 무한하게 동작하기때문에 cpu가 많이 사용됨
  • 각 메소드의 장단점을 적절히 활용

10분 예제 풀기

  1. 랜덤하게 숫자를 만드는 스레드 3개를 큐에 쌓고
  2. 만들어진 숫자를 큐에서 꺼내 프린트에 찍는 스레드 3개
    • 풀이 : 예제풀이 깃허브 링크 -> 예제 구현에서 죽지 않게 만드려면 life 플래그를 만들어서 life를 체크하고 죽으면 살리도록 처리

서버간 통신

  • 카프카를 이용
  • 토픽을 사용해서 컨슘

다음 : 카프카

  1. 카프카 설치
  2. 카프카 토픽, 주키퍼
    • 리더-팔로우 구조
    • 각 역할
    • 리더 선정 방식

results matching ""

    No results matching ""