데이터 파이프라인 만들기: 쓰레드 사용
데이터파이프라인
사전 준비
- 멀티 쓰레드 상황에서의 동기화 제어
- synchronized block/modifier 활용
- concurrent collection 활용
⠀
- 카프카를 이용한 메시지 처리
- 카프카 클라이언트를 이용한 컨슈머/프로듀서 연동
- topic 구성하기
- partition 과 replication 의 설정
Q1. 데이터를 가져와서 분석하는 툴을 만든다면 어떻게? 지속가능한 무중단 서버를 어떻게 구성할 것이지? 예를 들어 주기적으로 텍스트가 온다고 한다면?
- 스프링 프레임워크
- 소켓 서버
- while문으로 체크하면서 가져온다
- 그렇다면 데이터가 없을 때?
- 중단 해야 할 때면?
- sleep으로 mils만 줘도 cpu 부하가 많이 준다.
- while문으로 체크하면서 가져온다
- 데몬 형식의 프로세스 개발
Daemon 스레드
- default : false
- main 스레드가 끝나도 자신의 스레드가 할 일을 끝내고 스레드가 종료됨
- true
- main 스레드가 끝나면 종료됨
- **사용자 스레드(non-daemon 스레드)** 프로그램의 주요 작업을 수행한다.
- 작업이 완료될 때까지 실행된다.
- 모든 user 스레드가 종료되면 JVM도 종료된다.
- **데몬 스레드**
- 백그라운드에서 보조적인 작업을 수행한다.
- 모든 user 스레드가 종료되면 데몬 스레드는 자동으로 종료된다.
Queue
- take : 데이터가 있을 때까지 대기
- 단일 동작만 한다고하면 다른 작업을 하지 않아도 되기 때문에 이 방법을 쓰는게 효율적
- poll : 데이터가 없다면 null
- 단일 동작만 한다고 하면 데이터가 없을 때 무한하게 동작하기때문에 cpu가 많이 사용됨
- 각 메소드의 장단점을 적절히 활용
10분 예제 풀기
- 랜덤하게 숫자를 만드는 스레드 3개를 큐에 쌓고
- 만들어진 숫자를 큐에서 꺼내 프린트에 찍는 스레드 3개
- 풀이 : 예제풀이 깃허브 링크 -> 예제 구현에서 죽지 않게 만드려면 life 플래그를 만들어서 life를 체크하고 죽으면 살리도록 처리
서버간 통신
- 카프카를 이용
- 토픽을 사용해서 컨슘
다음 : 카프카
- 카프카 설치
- 카프카 토픽, 주키퍼
- 리더-팔로우 구조
- 각 역할
- 리더 선정 방식