Pub/Sub APIs

Pub/Sub APIs Pub/Sub 패턴의 기본 개념 Pub/Sub(Publish-Subscribe) 패턴은 메시지 기반 아키텍처의 핵심 패러다임으로, 데이터를 생성하는 발행자(Publisher)와 데이터를 소비하는 구독자(Subscriber) 사이의 느슨한 결합(loose coupling)을 제공한다. 이 패턴에서 발행자는 특정 주제(Topic)에 메시지를 발행하고, 해당 주제를 구독한 모든 구독자는 자동으로 그 메시지를 수신한다. Pub/Sub 패턴의 가장 중요한 특징은 발행자와 구독자가 서로에 대해 직접적인 지식이 필요 없다는 점이다. 발행자는 단순히 주제에 메시지를 보내고, 시스템이 해당 주제의 모든 구독자에게 메시지를 전달한다. 이러한 분리는 시스템 구성 요소 간의 의존성을 줄이고 확장성을 크게 향상시킨다. ...

February 28, 2025 · 8 min · Me

Websocket API vs. Websocket

Websocket API vs. Websocket WebSocket이란? WebSocket은 단일 TCP 연결을 통해 클라이언트와 서버 간의 양방향 통신 채널을 제공하는 통신 프로토콜이다. HTTP와 달리, 연결이 한 번 수립되면 계속 유지되며, 클라이언트와 서버가 서로 독립적으로 메시지를 주고받을 수 있다. WebSocket 프로토콜은 RFC 6455에 정의되어 있으며, ‘ws://’ 또는 암호화된 연결을 위한 ‘wss://’ URI 스키마를 사용한다. WebSocket은 HTTP 핸드셰이크를 사용하여 연결을 시작한 다음, 프로토콜을 WebSocket으로 업그레이드한다. WebSocket API란? WebSocket API는 웹 애플리케이션에서 WebSocket 프로토콜을 사용할 수 있게 해주는 인터페이스이다. 이것은 W3C에서 표준화한 웹 API로, 자바스크립트를 통해 WebSocket 프로토콜을 구현할 수 있도록 한다. ...

February 28, 2025 · 3 min · Me

Short Polling

Short Polling Short polling은 클라이언트와 서버 간의 실시간에 가까운 통신을 구현하기 위한 기본적인 기술이다. Short polling은 실시간 업데이트가 필요하지만 진정한 실시간성이 중요하지 않은 애플리케이션에서 구현이 간단하고 호환성이 좋은 솔루션이다. 그러나 사용자가 많아지거나 지연 시간이 중요한 애플리케이션에서는 Long Polling, SSE, WebSockets 같은 더 효율적인 기술의 사용을 고려해야 한다. Short Polling의 개념 Short polling은 클라이언트가 주기적으로 서버에 HTTP 요청을 보내 새로운 데이터가 있는지 확인하는 방식이다. 클라이언트는 정해진 시간 간격으로 서버에 요청을 보내고, 서버는 그 순간 가지고 있는, 클라이언트가 아직 받지 않은 데이터를 응답한다. ...

February 1, 2025 · 3 min · Me

Long Polling

Long Polling Long polling은 전통적인 short polling의 한계를 극복하기 위해 발전된 웹 통신 기법으로, 실시간에 가까운 데이터 전송을 가능하게 한다. 이 기술은 특히 웹소켓(WebSocket)이 등장하기 전에 실시간 웹 애플리케이션 구현에 널리 사용되었다. Long polling은 WebSockets의 대중화 이전에 실시간 웹 애플리케이션의 핵심 기술이었으며, 오늘날에도 특정 상황에서 유용한 접근 방식이다. 특히 WebSockets 지원이 제한된 환경이나, 단순한 실시간 요구사항을 가진 애플리케이션에서 여전히 가치 있는 솔루션이다. 최신 웹 애플리케이션에서는 WebSockets가 선호되는 경향이 있지만, Long polling은 폴백(fallback) 메커니즘으로 구현되어 WebSockets를 지원하지 않는 환경에서도 실시간에 가까운 경험을 제공할 수 있다. ...

February 1, 2025 · 6 min · Me

Octree

Octree Octree는 3차원 공간을 재귀적으로 분할하여 표현하는 트리 기반의 데이터 구조로, 3차원 공간을 8개의 동일한 크기의 정육면체(옥탄트)로 재귀적으로 분할하는 트리 구조이다. 각 노드는 공간의 한 영역을 나타내며, 필요에 따라 더 작은 영역으로 세분화된다. ![Octree](Octree2.png “https://ko.wikipedia.org/wiki/%ED%8C%94%EC%A7%84%ED%8A%B8%EB%A6%AC#/media/%ED%8C%8C%EC%9D%BC:Octree2.png) 특징 계층적 구조: 공간을 재귀적으로 분할하여 계층적으로 표현한다. 적응적 해상도: 필요한 영역만 세밀하게 분할하여 효율적인 공간 표현이 가능하다. 8분할: 각 노드는 최대 8개의 자식 노드를 가질 수 있다. 장점 효율적인 공간 표현: 복잡한 3차원 구조를 효율적으로 표현할 수 있다. 빠른 검색: 계층 구조를 활용하여 특정 영역의 빠른 검색이 가능하다. 메모리 효율성: 균일하지 않은 데이터 분포에 대해 메모리를 효율적으로 사용한다. 단점 구현 복잡성: 구현과 관리가 상대적으로 복잡할 수 있다. 메모리 오버헤드: 트리 구조로 인한 추가적인 메모리 사용이 발생할 수 있다. 불균형 가능성: 데이터 분포에 따라 트리가 불균형해질 수 있다. 응용 3D 컴퓨터 그래픽스: 3D 모델링, 렌더링, 충돌 감지 등에 사용된다. 로보틱스: 3D 환경 매핑 및 경로 계획에 활용된다. 게임 개발: 3D 게임 월드의 효율적인 표현과 관리에 사용된다. 과학 시뮬레이션: 대규모 3D 시뮬레이션에서 공간 데이터 관리에 활용된다. 동작 원리 초기화: 전체 3D 공간을 포함하는 루트 노드로 시작한다. 분할: 필요에 따라 각 노드를 8개의 자식 노드로 분할한다. 데이터 할당: 각 노드에 해당 영역의 데이터를 할당한다. 재귀적 분할: 특정 조건(예: 데이터 밀도, 깊이 제한)을 만족할 때까지 2-3 과정을 반복한다. 구성 요소 노드: 3D 공간의 한 영역을 나타내며, 데이터와 자식 노드에 대한 참조를 포함한다. 루트 노드: 전체 3D 공간을 나타내는 최상위 노드이다. 내부 노드: 8개의 자식 노드를 가질 수 있는 중간 노드이다. 리프 노드: 더 이상 분할되지 않는 최하위 노드로, 실제 데이터를 저장한다. 구현 방식 Octree의 기본적인 구현은 재귀적인 트리 구조를 사용한다. 다음은 Python을 사용한 간단한 Octree 구현 예시: ...

October 11, 2024 · 3 min · Me

BK-tree

BK-tree BK-Tree(Burkhard-Keller Tree)는 메트릭 공간(metric space)에서 효율적인 근사 검색을 위해 설계된 트리 기반 데이터 구조이다. 주로 레벤슈타인 거리(Levenshtein Distance)를 활용한 문자열 유사성 검색, 맞춤법 검사, DNA 시퀀스 분석에 활용된다. BK-Tree는 유사성 검색이 필요한 분야에서 여전히 유효하나, 최근에는 SymSpell 등 더 빠른 알고리즘도 등장했다. 그러나 이론적 우아함과 구현 용이성으로 교육 및 소규모 시스템에서 널리 사용된다. BK-트리의 주요 특징 메트릭 공간에서의 효율적인 검색: BK-트리는 요소 간의 거리를 기반으로 데이터를 구성하여, 특정 요소와 유사한 요소를 빠르게 찾을 수 있다. 이산 메트릭 사용: 주로 레벤슈타인 거리(편집 거리)와 같은 이산 메트릭을 사용하여 문자열 간의 유사성을 측정한다. BK-트리의 구조 및 동작 원리 노드 구성: 각 노드는 하나의 요소를 저장하며, 자식 노드는 부모 노드와의 거리(d)를 기준으로 분류된다. 삽입: 새로운 요소를 삽입할 때, 루트 노드부터 시작하여 현재 노드와의 거리를 계산한다. 계산된 거리에 해당하는 자식 노드가 없으면 해당 위치에 새로운 노드를 추가하고, 있으면 해당 자식 노드로 이동하여 동일한 과정을 반복한다. 검색: 특정 요소와 유사한 요소를 찾기 위해, 루트 노드부터 시작하여 현재 노드와의 거리를 계산한다. 이 거리가 설정한 임계값 이하인 경우 해당 노드를 결과에 추가하고, 자식 노드들 중 현재 거리와 임계값의 차이 범위 내에 있는 노드들만 재귀적으로 탐색한다. BK-트리의 예시 단어 집합 {“book”, “books”, “cake”, “boo”, “boon”, “cook”, “cape”, “cart”}가 있을 때, 레벤슈타인 거리를 사용하여 BK-트리를 구성하면 다음과 같은 구조가 될 수 있다: ...

October 11, 2024 · 4 min · Me

BSP Tree

BSP Tree (Binary Space Partitioning Tree) BSP Tree는 공간을 재귀적으로 분할하여 표현하는 트리 구조의 데이터 구조로, 유클리드 공간을 초평면(hyperplane)을 기준으로 재귀적으로 분할하여 볼록 집합으로 나누는 기법을 트리 구조로 표현한 것이다. 이 과정에서 생성되는 트리를 BSP 트리라고 한다. https://www.researchgate.net/figure/Constructing-a-bsp-tree_fig1_238973971 특징 이진 트리 구조: 각 노드는 최대 두 개의 자식 노드를 가진다. 재귀적 분할: 공간을 계속해서 두 부분으로 나누어 표현한다. 볼록 집합: 분할된 각 공간은 볼록 집합(convex set)의 형태를 가진다. 계층적 구조: 공간을 계층적으로 표현할 수 있다. 장점 효율적인 렌더링: 3D 그래픽에서 렌더링 속도를 향상시킬 수 있다. 공간 분할: 복잡한 3D 공간을 효과적으로 표현할 수 있다. 충돌 감지: 게임이나 시뮬레이션에서 충돌 감지에 유용하다. 가시성 결정: 어떤 객체가 보이는지 빠르게 결정할 수 있다. 단점 전처리 시간: 초기 트리 구성에 많은 시간이 소요될 수 있다. 메모리 사용: 복잡한 공간의 경우 많은 메모리를 사용할 수 있다. 동적 환경에서의 한계: 자주 변하는 환경에서는 효율성이 떨어질 수 있다. 응용 3D 컴퓨터 그래픽스: 렌더링 최적화에 사용된다. 컴퓨터 게임: 특히 1인칭 슈팅 게임에서 널리 사용된다. CAD 시스템: 조립식 입체 기하학(CSG)에 활용된다. 로봇 공학: 충돌 감지 등에 사용된다. 동작 원리 분할 평면 선택: 공간을 분할할 평면을 선택한다. 공간 분할: 선택된 평면을 기준으로 공간을 두 부분으로 나눈다. 재귀적 분할: 각 부분에 대해 1, 2 과정을 반복한다. 종료 조건: 정해진 깊이에 도달하거나 더 이상 분할이 필요 없을 때 종료한다. 구성 요소 노드: 공간을 표현하는 기본 단위. 분할 평면: 각 노드에서 공간을 나누는 기준이 되는 평면. 왼쪽/오른쪽 자식 노드: 분할된 공간을 표현하는 하위 노드. 리프 노드: 더 이상 분할되지 않는 최종 공간을 나타내는 노드. 구현 방식 다음은 Python을 사용한 간단한 BSP Tree 구현 예시: ...

October 11, 2024 · 3 min · Me

K-d Tree

K-d Tree K-d Tree는 k차원 공간에서 점들을 효율적으로 저장하고 검색하기 위한 이진 트리 기반의 공간 분할 데이터 구조로, K-d Tree는 k차원 공간을 재귀적으로 분할하여 표현하는 이진 트리이다. 각 노드는 k차원 공간의 한 점을 나타내며, 비단말 노드는 해당 차원을 기준으로 공간을 두 개의 하위 공간으로 분할한다. https://www.researchgate.net/figure/sualization-of-the-k-d-tree-algorithm_fig4_327289160 특징 다차원 데이터 처리: k차원 공간의 점들을 효율적으로 저장하고 검색할 수 있다. 계층적 구조: 공간을 재귀적으로 분할하여 계층적으로 표현한다. 차원 순환: 트리의 각 레벨마다 분할 기준이 되는 차원이 순환된다. 균형 구조: 중앙값을 기준으로 분할하여 균형 잡힌 트리를 구성한다. 장점 효율적인 검색: 다차원 공간에서의 근접 이웃 검색이나 범위 검색을 빠르게 수행할 수 있다. 차원 축소: 문제의 차원을 줄여 검색 시간을 단축하고 메모리 사용을 줄일 수 있다. 다양한 응용: 데이터 마이닝, 컴퓨터 그래픽스, 과학 계산 등 다양한 분야에 활용된다. 단점 고차원 데이터의 한계: 차원이 증가할수록 성능이 저하될 수 있다. 불균형 가능성: 데이터 분포에 따라 트리가 불균형해질 수 있다. 동적 데이터 처리의 어려움: 데이터 삽입/삭제 시 트리 재구성이 필요할 수 있다. 응용 최근접 이웃 검색: 머신러닝의 k-최근접 이웃(k-NN) 알고리즘에 활용된다. 범위 검색: 지리 정보 시스템(GIS)에서 특정 영역 내 객체 검색에 사용된다. 컴퓨터 비전: 이미지 처리와 특징점 매칭에 활용된다. 충돌 감지: 게임이나 시뮬레이션에서 객체 간 충돌 감지에 사용된다. 동작 원리 트리 구축: ...

October 11, 2024 · 3 min · Me

Merkle Tree

Merkle Tree 머클 트리(Merkle Tree)는 암호화된 해시 값을 기반으로 데이터 무결성을 효율적으로 검증하는 트리 구조이다. 블록체인, 분산 시스템, 파일 전송 프로토콜 등에서 널리 활용되며, 데이터 변조 탐지와 검증 효율성이 핵심 강점이다. 머클 트리는 분산 환경의 신뢰 문제를 해결하는 핵심 도구로, 블록체인의 성공을 가능케 한 기술이다. 데이터의 안전한 공유와 검증이 필요한 모든 시스템에서 그 가치를 발휘한다. 계층적 해시 구조 Leaf Node: 원본 데이터(트랜잭션, 파일 청크 등)의 해시 값으로 구성 (예: SHA-256). Non-Leaf Node: 자식 노드 두 개의 해시 값을 결합한 후 다시 해시화. Merkle Root: 최상위 노드의 해시 값으로 전체 데이터 집합을 대표. 예시: 4개 트랜잭션(A, B, C, D)의 머클 트리 구성 ...

October 11, 2024 · 3 min · Me

Quad Tree

Quad Tree Quad Tree는 2차원 공간을 재귀적으로 4개의 영역으로 분할하여 표현하는 트리 기반의 데이터 구조로, 각 노드가 정확히 4개의 자식 노드를 갖는 트리 구조이다. 2차원 공간을 표현하고 관리하는 데 효율적이며, 특히 공간 데이터를 계층적으로 구성하는 데 사용된다. https://www.researchgate.net/figure/An-Illustration-of-quad-tree-data-structure_fig1_280621405 특징 계층적 구조: 공간을 재귀적으로 4등분하여 표현한다. 적응적 분할: 필요에 따라 특정 영역을 더 세밀하게 분할할 수 있다. 공간 효율성: 데이터 분포에 따라 효율적으로 공간을 분할한다. 장점 효율적인 공간 검색: 특정 영역의 데이터를 빠르게 검색할 수 있다. 메모리 효율성: 데이터 밀도에 따라 적응적으로 메모리를 사용한다. 동적 갱신: 데이터의 삽입과 삭제가 비교적 용이하다. 단점 불균형 가능성: 데이터 분포에 따라 트리가 불균형해질 수 있다. 구현 복잡성: 기본적인 트리 구조보다 구현이 복잡할 수 있다. 메모리 오버헤드: 데이터가 적을 때는 오히려 메모리 사용이 비효율적일 수 있다. 응용 컴퓨터 그래픽스: 충돌 감지, 가시성 결정 등에 사용된다. 이미지 처리: 이미지 압축, 영역 분할 등에 활용된다. 지리 정보 시스템(GIS): 공간 데이터 인덱싱에 사용된다. 게임 개발: 게임 월드의 효율적인 관리와 렌더링에 활용된다. 동작 원리 초기화: 전체 2D 공간을 포함하는 루트 노드로 시작한다. 분할: 특정 조건(예: 데이터 수, 깊이 제한)에 따라 노드를 4개의 자식 노드로 분할한다. 데이터 할당: 각 데이터를 해당하는 영역의 노드에 할당한다. 검색: 트리를 순회하며 원하는 영역 또는 조건에 맞는 데이터를 검색한다. 구성 요소 노드: 공간의 한 영역을 나타내며, 데이터와 자식 노드에 대한 참조를 포함한다. 경계: 각 노드가 나타내는 2D 공간의 경계를 정의한다. 데이터: 각 노드에 저장되는 실제 데이터 또는 데이터에 대한 참조이다. 구현 방식 다음은 Python을 사용한 간단한 Quad Tree 구현 예시: ...

October 11, 2024 · 3 min · Me