Image Processing - Latency Optimization (지연시간 최적화)
📘 Backend/Concurrency2023. 12. 3. 00:03Image Processing - Latency Optimization (지연시간 최적화)

📘 Image Processing 어떤 사진에 1가지 종류의 꽃이 있고, 동일한 종의 꽃이지만 색깔은 2가지(흰색, 보라색)로 나뉘는 사진이 있습니다. 이 사진은 3036 x 4048이며 대략 1200만 픽셀로 이루어져 있고, 각 픽셀의 색깔은 ARGB로 불리는 4가지 Byte로 표현됩니다. A (Alpha) : 픽셀의 투명도 값을 나타냄 R (Red) : 빨간색 G (Green) : 초록색 B (Blue) : 파란색 RGB의 조합으로 모든 색을 표현할 수 있습니다. 모든 꽃의 색깔을 보라색으로 만들기 위해 보라색으로 칠할 곳을 식별합니다. 색상 Re-Coloring 알고리즘을 Sequantial 버전으로 구현 구현을 모듈화해서 멀티스레드 작업으로 나누기 📘 Single Threading ImagePro..

Thread Blocking (Count Down Latch)
📘 Backend/Concurrency2023. 11. 28. 09:50Thread Blocking (Count Down Latch)

📘 CountDownLatch 란? CountDownLatch는 특정 스레드가 다른 스레드에서 작업이 완료될 때까지 기다릴 수 있도록 해주는 클래스이며, 스레드간 통신이 가능하고, Main Thread와 Reactive Stream의 처리를 동기화 하기 위해 사용합니다. 예를 들어 CountDownLatch(3) 이라고 가정하면 3개의 Task를 실행 시키면서 countDown()를 호출해 Count 값을 감소시킵니다. Count가 0이 되면 차단된 스레드가 해제되고 나머지 작업을 수행합니다. 즉, CountDownLatch의 수치가 0이 될때까지 해당되는 스레드를 Block 시키면서 Latch는 Await 합니다. CountDownLatch의 장점은 Thread.join()보다 유연하며, 스레드의 참조..

Spring WebClient
📘 Backend/Spring2023. 11. 27. 22:09Spring WebClient

📘 Spring WebClient란? Spring WebClient를 계속 써왔었는데, 글로 남기는걸 자꾸 미루다가 이제서야 포스팅합니다. Spring WebClient는 RestTemplate을 대체하는 HTTP Client 입니다. 기존 Sync API를 제공하며, Non-Blocking & Async 방식을 지원해서 효율적인 통신이 가능합니다. WebClient는 Builder 방식의 인터페이스를 사용하며, 외부 API로 요청을 할 때 리액티브 타입의 전송과 수신을 합니다. (Mono, Flux) 📕 WebClient의 특징 Single Thread 방식 Non-Blocking 방식 Json, Xml의 쉬운 응답 📕 제어권 반환 : Blocking & Non-Blocking Blocking Appl..

Convert RTSP Stream to HLS (FFmpeg)
📘 Backend/Streaming2023. 11. 9. 15:01Convert RTSP Stream to HLS (FFmpeg)

📘 RTSP to HLS OS환경은 Windows 기준으로 개발 하였습니다. 브라우저에서 지원이 안되는 RTSP를 FFmpeg을 이용해 HLS로 변환하여 브라우저에서 실시간 영상을 스트리밍 합니다. 😯 Windows FFmpeg Link https://ffmpeg.org/download.html 😯 설치 후 시스템 환경변수 설정 setx PATH "%PATH%;{ffpmeg 경로}" 📘 EC2 Setting 😯 RPM 기반 FFmpeg & Java 17 설치 #!/bin/bash # FFmpeg 설치 cd /usr/local/bin mkdir ffmpeg cd ffmpeg wget https://www.johnvansickle.com/ffmpeg/old-releases/ffmpeg-4.2.1-amd64-..

2023. 10. 13. 21:43Access Control System - 전체 코드 리팩터링 & 기능 테스트 / 추가

보호되어 있는 글입니다. 내용을 보시려면 비밀번호를 해주세요.

Thread.join()을 이용한 Thread 실행 순서 제어 (Race Condition)
📘 Backend/Concurrency2023. 10. 2. 16:57Thread.join()을 이용한 Thread 실행 순서 제어 (Race Condition)

📘 Thread.join()을 이용한 실행 순서 제어 다른 스레드를 시작하고 멈추는 기능 그 이상에 대해 알아보겠습니다. 특히, 신뢰하는 스레드가 예상 시간 안에 작업을 완료하게 만드는 법을 배울 겁니다. 그러려면 스레드 실행을 완전히 제어할 수 있어야 합니다. 그렇게 특정 작업들을 병렬로 실행하고 처리 속도를 높이면 안전하고 정확하게 결과를 출력할 수 있습니다. 앞서 알아본 것처럼 스레드를 실행하면 독립적으로 동작하며, 스레드의 실행 순서 역시 개발자가 제어할 수 없습니다. 하지만, join()을 이용해 특정 스레드의 작업 완료 시, 다음 스레드를 실행하게 할 수 있습니다. 동시에 시작하는 두 스레드 A,B를 예시로 들어서 예측할 수 있는 결과는 아래와 같습니다. A가 B보다 먼저 작업을 완료한다. B..

Thread Termanation - Thread Interrupt & Daemon Thread
📘 Backend/Concurrency2023. 10. 2. 15:57Thread Termanation - Thread Interrupt & Daemon Thread

📘 Thread Coordination 이번에 배워볼 건 스레드를 조정하는 방법입니다. 그 중 하나의 스레드를 다른 스레드에서 멈추게 하는 작업 (Thread Termination)이죠. 이 Thread Termination에는 몇가지 방법이 있습니다. interrupt() 를 사용하는 방법 Daemon Thread를 사용하는 방법 📌 스레드를 언제/왜 멈춰야 할까요? 스레드는 아무 동작을 안해도 메모리와 일부 커널 리소스를 사용합니다. 그리고 CPU 타임과 CPU 캐시 공간도 사용합니다. 따라서 생성한 스레드가 이미 작업을 완료했는데 어플리케이션이 동작중이라면 미사용 스레드가 잡아먹는 리소스를 정리해야 합니다. 또, 스레드가 오작동 할 시에도 스레드를 중지해야 합니다. 예를 들어 응답이 없는 서버에 계..

image