Python 서버 실시간 웹캠 영상 처리 방법 (ReactJS, WebRTC, FastAPI, OpenCV) - 미디어 통신 실시간 영상 합성
·
Programming/ETC
- 이번 포스팅으론 원격 환경에 위치한 웹캠 영상을 Python 서버로 받아와 영상 프레임을 처리하는 방식을 알아보겠습니다.본 기술을 익힘으로써 기대되는 응용 능력으로는,원격 모니터링 및 보안 서비스, 영상 채팅 서비스에서의 인공지능 필터링, IoT 에서의 디바이스 원격 조작 등에 사용되는 기술 원리를 이해하고 구현할 수 있는 가장 기본적인 능력을 갖출 수 있을 것입니다. - 본 게시글에서 실습할 최종 산출물은,ReactJS 에서 웹캠으로 받아온 영상을 네트워크 통신으로 Python 서버에 전송하여,해당 서버에서 간단한 영상 분석 및 합성을 하는 소프트웨어를 만들 것입니다.웹캠 디바이스 - 클라이언트 브라우저 -- [영상 데이터 네트워크 통신] -- Python 서버 - 영상 합성 - 영상 표시 (Web..
IoT MQTT(Message Queuing Telemetry Transport) 프로토콜 설명 및 실시간 통신 실습(Server Docker EMQX 클러스터링, Client Javascript & C++)
·
Programming/ETC
- 이번 포스팅에서는,IoT 에 주로 사용되는 MQTT 프로토콜에 대해 알아보고,MQTT 메시지 전달 서버(브로커)를 EMQX 기술을 사용하여 구축한 후,이를 기반으로 연결되는 클라이언트를 구축하여 테스트까지 진행해보겠습니다. 서버 역할을 하는 브로커는 EMQX 를 Docker 를 사용하여 구축하고,확장성을 위하여 클러스터링 설정 및 보안을 위해 기본 인증/인가 설정을 적용할 것입니다. 클라이언트 역할로는,엔터프라이즈급 서비스 백엔드에서 일반적으로 사용되는 Java Springboot,데이터 분석 분야에서 두각을 나타내는 Python,웹 프론트엔드 분야에서 대체 불가능한 JavaScript,그리고 IoT 단말기 부분에서 사용되는 C++ 위에서 나열한 예시를 전부 다루면 좋겠지만,본 게시글에서는 가시적인 ..
IoT(Internet of Things, 사물 인터넷) 설명 및 기술 로드맵
·
Programming/ETC
- 이번 포스팅으론 IoT 에 대해 알아보겠습니다.IoT 개념과 더불어 IoT 를 개발하기 위해 필요한 기술 및 로드맵까지 정리합니다. - IoT 는 단일 기술이 아닌 여러 기술들 융복합 기술입니다.특정 분야의 개발자시라면 해당 분야의 기술 습득은 패스할 수 있으며,아직 개발 경험이 없으시다면 웹 개발 부분으로 먼저 접근하시는 것을 추천드립니다. (IoT란?)Internet of Things (사물인터넷) = "사물(Things)" + "인터넷 연결(Internet)" 말 그대로 일상 속 사물들이 정보 단말로서 인터넷에 연결되어 데이터를 주고받고 동작하는 기술입니다. 예를 들어,스마트 에어컨이 자동으로 온도를 조절하거나,스마트워치가 심박수를 측정하고 서버에 저장하거나,집 앞에 사람이 오면 자동으로 조명이..
[Java] TLV(Tag-Length-Value) 설명 및 해석 함수 구현
·
Programming/ETC
- TLV는 "Tag-Length-Value"의 약자로,데이터의 구조를 세 가지 구성 요소로 구분하는 형식입니다.이 형식은 주로 통신 프로토콜에서 데이터를 효율적으로 전송하고,각 데이터의 의미를 명확히 하기 위해 사용됩니다. Tag: 데이터 항목의 종류나 속성을 나타내는 식별자입니다. Length: 데이터 값의 길이를 나타내며, 몇 바이트로 이루어졌는지를 표현합니다. Value: 실제 데이터 값 자체입니다.예를 들어, 특정 메시지가 Tag=01, Length=04, Value=1234로 구성되어 있다면, Tag는 데이터의 종류를, Length는 값이 4바이트라는 것을, Value는 실제 데이터가 "1234"임을 의미합니다. TLV 구조는 특히 비동기 데이터 처리나 다양한 데이터 유형을 처리할 때 유용합니..
[Java] JVM Garbage Collector 정리
·
Programming/ETC
- 이번 포스팅에선 JVM 성능 튜닝의 가장 대표적인 GC 튜닝을 알아보기 전에,JVM Garbage Collector 에 대한 개념을 이해하는 글을 정리하겠습니다. [자바 메모리 공간] - 자바는 가상 머신인 JVM으로 돌아가는 프로그램이니만큼, 직접 메모리를 할당하고 제거하는 C와는 다른 메모리 공간 할당 정책을 사용합니다. C의 경우는 C언어 메모리 레이아웃이라고 하여, C 프로그램만의 메모리 사용 공간이 있다면, 자바의 경우에는 자바 가상 머신이 관리하는 메모리 공간이 있습니다. - 이는, 프로그램이 메모리 공간을 효율적으로 사용 및 관리하기 위한 논리적 구조이지, 물리적으로 나뉘어진 구조가 아님을 명심하세요. 메모리라는 것도, 전기가 흐르는 흐름을 전자적으로 제어하는 전자 회로의 일종의 묶음일 ..
[Java] 자바 Thread Dump 개인정리
·
Programming/ETC
- 이번 포스팅은 개인정리글입니다.언제나 그렇듯, 개인 정리글은 설명을 위한 글이 아니라 가독성이 떨어질 수 있습니다.- JVM 최적화를 위해 필요한 지식 중 하나. [Thread] - 자바는 JVM을 사용하기에, 가장 단순한 형태의 프로그램도, 수개의 쓰레드로 이루어져 있습니다. 내 코드가 만들어낸 스레드와 더불어 JVM 자체 쓰레드 역시 존재합니다.(스레드 경합)- 공유 자원에 대해서, 여러 스레드가 동시에 요구를 할 때 일어나는 현상으로, 서로 다른 쓰레드 간에 자원을 가져가기 위한 경합이 자주 발생합니다. - 경합이 심해지면, 어느 쓰레드가 자원을 소유하지 못하고 멈춰버리는 '데드락'이 걸리기도 합니다. - 경합은, 어느 자원에 있어서, 한 스레드가 그것을 사용함에 있어서 잠궈놓은 '락'에 대해,..
[Java] JNI 정리 및 개발 방식 정리
·
Programming/ETC
[JNI]- Java Native Interface의 약자로,자바로, C와 C++의 코드를 실행시키는 인터페이스를 말합니다.(꼭 C C++에 국한된 것은 아니지만, 실질적으로 사용되는 것이 C/ C++입니다.) (기본 설명)- SW 프로그램 구동 원리를 이해해야 합니다. - '소스 코드는 텍스트일 뿐이다.'텍스트인 소스 코드를 개발자가 작성하여, 컴퓨터에게 일을 시키기 위해서는 이를 컴퓨터가 이해할수 있는 명령 체계로 변환을 시켜야 합니다. 이것이 바로 컴파일링 입니다. 각 프로그래밍 언어별로, 문법이 서로 다르고,이 다른 문법을 해석하여, 컴퓨터가 이해하고 실행할수 있는 형식으로 변화시켜 주는 것이 바로 각 언어의 컴파일러의 역할입니다. 당연히 다른 언어는 다른 문법체계를 가지고, 다른 컴파일러를 가지..
[Java] 자바를 사용한 병렬 프로그래밍 정리와 synchronized, volatile 설명
·
Programming/ETC
[자바 병렬 프로그래밍]- 병렬 프로그래밍이라는 것은, 개발자가 소스코드를 작성할 때, 위에서 아래로 차례대로 흐르는 방식의 코드 흐름을 작성하는 것만이 아닌,(일반적으로 hello world를 찍을 때도 사용되는 것이 바로 이 일직선의 코드 흐름입니다.) 한 코드 내에, '동시적'으로 실행되는 코드와 로직의 흐름을 만들어 내는 것입니다. - 여기선 자바를 중점으로 한 병렬 프로그램에 대해 정리할 것입니다. 어렵지 않으니 차근차근 알아보죠.먼저, 필요 지식에 대해 설명하겠습니다. (Thread)- 한 OS에서 동시에 실행되는 프로그램을 프로세스라는 단위로 부릅니다. 멀티 프로세싱이라는 것은, OS가 작동 시키는 프로세스의 갯수가 복수개라는 뜻이죠. (만일 윈도우 같은 OS를 사용할 때, 한번에 하나의 작..
Docker 컨테이너 안에서 Docker 사용하기 (Windows, Linux, MacOS)
·
Programming/ETC
- 이번 포스팅에서는 도커 컨테이너 안에서 도커를 사용하는 방식을 알아보겠습니다. 실습으로 만들어볼 Docker 컨테이너 구조는,ubuntu 22.04 OS 환경의 컨테이너 안에 docker 를 설치하겠습니다. - 먼저, 도커 안의 도커와 도커 밖의 도커를 동일하게 사용하는 방식입니다.이 방식은, 도커 컨테이너 안에서 도커를 사용할 때, 해당 컨테이너를 실행시키는 주체가 되는 도커를 그대로 사용하는 방식으로, 컨테이너 내부에서 도커 명령어를 사용하면 컨테이너 밖에서 생성한 도커 이미지, 컨테이너 등에 그대로 접근이 가능합니다. 도커를 공유하므로 성능상 우위를 지니겠지만 보안적으로 주의가 필요한 방식입니다. 도커 환경이 세팅되었다는 가정 하에,windowsdocker run --privileged -v /..
서버 모니터링 시스템 Docker 로 구성하기(Grafana, Prometheus, Loki, Promtail, Springboot)
·
Programming/ETC
- 백엔드 서버를 개발해서 실행시키는 시점에 개발은 운영의 범위로 넘어가게 됩니다.운영에서 중요한 것은, 우리가 밥을 먹을 때나 잠을 잘 때나, 잠시 휴식을 취할때 상관 없이 에러가 발생할 가능성이 있는 서비스가 정상 동작하도록 감시하고, 만약 문제가 발생하면 신속하게 대응하는 것입니다. 단순히 서비스를 개발해서 네트워크상 오픈해두는 것으로 그치는 것이 아니라 주기적으로 상태를 확인해줘야만 합니다. 이때, 런타임 에러가 발생하거나 서버 컴퓨터에 장애가 발생한다면 바로 관련자에게 에러 발생 로그를 발송하여 에러 상황을 알린다던지, 언제 어디서든 서버 상태를 파악하고, 이전 로그를 확인 가능한 기능이 있다면 운영에 큰 도움이 되겠죠? 이러한 기능을 제공해주는 것이 바로 서버 모니터링 시스템입니다. - 이번 ..