Producer-Consumer Pattern with RabbitMQ
📘 Backend/Java2024. 6. 25. 15:51Producer-Consumer Pattern with RabbitMQ

📚 Producer Consumer Pattern기존에 RabbitMQ의 Queue에서 대량의 데이터를 받아서 동시성을 처리할 때 사용하던 방법은,ReentrantLock의 tryLock을 이용해 명시적 Lock을 걸고 임계영역을 보호하는 방법을 사용 중 이었습니다.근데 문제는 평소 AI Engine에서 받은 MQTT 데이터의 흐름이 평상시에는 일정한 개수(1초에 200개 정도) 나오다가AI Engine에 특정 조건이 트리거 되어 특정 모드로 바뀔때 수 없이 많은 데이터가 쏟아져 나올 떄가 있으며, 그 메시지들을 그대로 Consume 해버리게 됩니다.Thread들을 충분히 나누었음에도 부하가 심해 Spring Server가 일시적으로 멈춤, 오작동하거나 API 호출이 안 먹는다거나 이슈들이 많았습니다...

Prometheus & Grafana - Metric Monitoring
💻 Server/Linux2024. 6. 21. 13:16Prometheus & Grafana - Metric Monitoring

Prometheus & Grafana - Status Monitoring각 서버들의 상태 metric들을 수집하는 Prometheus와 그 metric 데이터들을 시각화 해주는 Grafana 구축 방법을 포스팅 합니다.저는 현재 메인 서버가 있고 메인 서버에서 Prometheus를 이용해,하위 서버들의 Metric을 받아 Grafana Dashboard를 통해 서버의 Resource들을 모니터링 할 예정이고,툴 선정하기 전 가볍게 써보고 정하자는 생각으로 일단 간단하게 만들어 보았습니다.Metric 수집 대상 서버 설정Linux ServerMain Server를 설정하기 전, 메트릭 수집을 원하는 서버에 node-exporter 컨테이너를 실행시켜 주면 Sub Server는 설정 완료입니다.Linux에서..

DataBufferLimitException - Webflux 버퍼 크기 제한 초과
📘 Backend/Spring2024. 6. 18. 18:41DataBufferLimitException - Webflux 버퍼 크기 제한 초과

DataBufferLimitException - Webflux 버퍼 크기 제한 초과WebClient로 Data를 받는 작업 중, WebClient에서 허용하는 Buffer를 초과한 데이터가 들어왔을떄 발생한 에러 해결 기록입니다.아래 API 요청 코드에서 return되는 데이터 중 1개 필드의 값이 Encoding된 Streaming Frame 데이터를 받도록 되어 있었습니다.public Mono getRtspStreamFrame(final String uri) { return webClient.get().uri(uri).retrieve().bodyToMono(String.class); }서버를 실행 시킨 후, 해당 API 요청을 해보니 아래와 같은 에러가 발생했습니다.DataBufferLim..

Jenkins CI & CD
⚙️ Ops/CI & CD2024. 6. 13. 21:48Jenkins CI & CD

Jenkins CI & CD + Nginx Reverse Proxy예전에 Declaretive Pipeline 방식의 Blue/Green 무중단 배포와 FreeStyle 방식으로 구현을 했었고그 이후로 아예 안써서 거의 잊어버렸는데, 최근 다시 쓸일이 생겨 재 포스팅합니다.지난번 Nginx의 Reverse Proxy 용도는 Blue/Green 무중단 배포 시 Active/Standby Container의 트래픽 방향 전환용도 였다면이번에 Nginx를 Reverse Proxy로 사용한 이유는 Jenkins와 Product Server는 내부망에 있으므로,Proxy를 이용해 Public WebHook Trigger를 Jenkins 인스턴스에 접근시킬 목적으로 사용합니다.Docker Custom Bridge ..

비밀번호 찾기 & 재설정 구현(Google SMTP & Redis)
📘 Backend/Spring2024. 6. 3. 22:44비밀번호 찾기 & 재설정 구현(Google SMTP & Redis)

비밀번호 찾기 & 재설정 기능 구현(Google SMTP)사내 비밀번호 찾기/초기화 기능을 위해 Email 인증을 자체 SMTP 서버를 만들어서 하려다가, 귀찮아서 Google SMTP를 이용하기로 했습니다.우선 Google 계정 설정에 들어가서 아래 2개의 작업을 해줍니다.Multi Factor Authentication(2FA) 활성화App Password 생성그리고 Gmail 탭으로 들어가 Mail 설정의 Forwarding and POP/IMAP 탭에 들어가서 아래와 같이 설정합니다.Spring Boot Server 설정build.gradle 파일에 Mail 추가implementation 'org.springframework.boot:spring-boot-starter-mail'applicatio..

NVIDIA-SMI GPL-incompatible module Error
❌ Error Handling2024. 5. 29. 23:11NVIDIA-SMI GPL-incompatible module Error

NVIDIA-SMI GPL-incompatible module Error서버에서 Docker Container로 GPU를 사용하는 딥러닝 프로세스를 실행중에 강제적인 시스템 종료 시,NVIDIA Driver가 깨지는 현상이 있어서 해결한 기록을 포스팅합니다.이번에 서버 재기동이 필요하여 실수로 GPU를 사용하는 Docker Container를 내리지 않고 서버를 종료를 한건지Container 실행 시 NVIDIA Driver에 Crash가 났다는 에러가 떴습니다.그래서 dmesg | grep -i nvidia 명령을 입력해 시스템 커널 로그와 NVIDIA 에러 로그를 보니 아래와 같이,nvidia.ko 모듈이 GPL 전용 심볼을 사용하도록 되어 있었습니다.이는 NVIDIA Driver와 커널의 특정 심볼..

📘 Backend/Python2024. 5. 25. 00:24Pandas란? Numpy와의 차이점 & 행렬 히트맵 생성

PandasPandas는 파이썬에서 데이터 조작과 분석을 위한 고성능 라이브러리입니다. 주로 구조화된 데이터, 특히 표 형식의 데이터를 다루는 데 사용됩니다. Pandas는 데이터를 효율적으로 로드, 조작, 분석, 그리고 시각화할 수 있는 다양한 기능을 제공합니다.주요 기능데이터 구조Series: 1차원 배열 형태의 데이터 구조로, 인덱스를 가진다.DataFrame: 2차원 표 형태의 데이터 구조로, 여러 열을 포함하며 각 열은 Series 객체로 구성된다.데이터 입출력CSV, Excel, SQL, JSON 등 다양한 파일 형식에서 데이터를 읽고 쓸 수 있다.데이터 정제 및 조작결측치 처리: fillna(), dropna()데이터 필터링: 조건에 맞는 데이터 선택데이터 정렬: sort_values()데이..

image