분류
-
HyperLogLog 데이터 구조컴퓨터/Go language 2024. 4. 3. 17:49
매일 접속한 unique 사용자들을 어떻게 알 수 있을까? (google analytics 무시) 수백만 명이 접속해 있다면 정확하진 않더라도 n 명 접속 중을 빠르게 표시할 수 있는 자료 구조가 있을까? 해쉬맵을 통해 모든 유저를 저장하면, 서버 메모리보다 커지지 않을까 등을 생각하다가 HyperLogLog 데이터 구조란 것을 알게 되었다. (다른 방법도 많을 것이다) https://www.youtube.com/watch?v=lJYufx0bfpw&t=479s HyperLogLog 추정치를 구하기 때문에 정확한 값을 원하면 옳지 않다. 이름이 왜 하이퍼로그로그 일까? 먼저, "LogLog"는 알고리즘이 고유한 요소들을 (유니크) 효율적으로 계산하기 위해 log 함수들을 사용함으로 셀 수 있는 요소들의 수..
-
Neo4j: 그래프 데이터베이스 시작 (Graph)컴퓨터 2024. 4. 1. 21:32
Download Neo4j Desktop Experience Neo4j 5 on your desktop. Get started with the free graph database download today and avoid the costs of self-hosted deployment. neo4j.com Neo4j Desktop 을 이용해 간단하게 서버를 열고 db를 만든다. 사실 위치 데이터만 갖고 있는 필드들이라 관계가 필요 없는데 Neo4j spatial 과 mysql spatial을 비교해보기 위해 사용하였다. 우선 MySQL에서 데이터를 불러오기 위해, json으로 필드들을 저장했다. 그리고 Neo4j 에서 DB 선택 후 우측 APOC 플러그인을 설치한다. 그리고 로컬 import 폴더에서 파..
-
Go: 백엔드 웹소켓 채팅 (fiber v2 + websocket + rabbitmq)컴퓨터/Go language 2024. 3. 31. 16:02
여러 가지 방이 있고 각 유저들이 있는 채팅 서비스를 만들고 싶었다. 우선 분산 시스템을 고려하지 않고 베이스를 만들어 준다. 싱글 서버 웹소켓이 양방향이라 (bi-directional) 선택했고, 객체를 저장하고 있으면 계속 주고받을 수 있다. 채팅 서버에서 websocket 연결 객체를 저장하고 있어야만 메시지를 전송할 수 있다. var WsRoomManager *RoomConnectionManager = NewRoomConnectionManager() type RoomConnectionManager struct { connections *haxmap.Map[string, []*websocket.Conn] // roomid and users } Concurrent Map 연결 객체들을 해쉬 맵에 저장..
-
Go: WGS84를 WCONGNAMUL로 변환 함수컴퓨터/Go language 2024. 3. 24. 19:44
Go언어 백엔드에서 카카오맵 API를 이용하다 보니, WCONGNAMUL로 전환하는 일도 꽤 생겼다.근데 외부 API를 부르자니 뭔가 싫고 공부겸 값을 찾아보기로 했다.(사실 마음 편하게 카카오 API를 이용하자: https://developers.kakao.com/docs/latest/ko/local/dev-guide#trans-coord) 우선 변환된 값들을 이용해서 python numpy의 lstsq로 linear 하게 계수를 찾아보는 방법을 택했다. numpy.linalg.lstsq — NumPy v1.26 ManualCut-off ratio for small singular values of a. For the purposes of rank determination, singular values..
-
Spring boot + Kotlin Coroutine + WebFlux + Security 5 + MySQL 기본 셋업컴퓨터/Spring Boot 2024. 3. 18. 21:31
Spring boot 2.7에서 kotlin coroutine을 써서 webflux를 사용할 것이다. (JDK 17) 시큐리티는 기본 셋업에 R2DBC MySQL을 써서 연결했다. gradle-kts 버전이다. MySQL 테이블 Geolocation Spatial 타입을 갖고 있는 간단한 table이다. CREATE TABLE Markers ( MarkerID INT AUTO_INCREMENT PRIMARY KEY, UserID INT NULL, Location POINT NOT NULL SRID 4326, -- SRID Description VARCHAR(255), CreatedAt TIMESTAMP DEFAULT CURRENT_TIMESTAMP, UpdatedAt TIMESTAMP DEFAULT CU..
-
MySQL: 주변 검색 Spatial 함수 탐구컴퓨터/MySQL 2024. 3. 6. 16:24
공간 데이터 처리 카카오맵 API를 이용하여 DB에 저장된 위치 주변 데이터들을 불러오고 싶었다. Postgres + postgis를 사용하면 ST_DWithin 이란 함수를 통해 쉽게 주변 장소들을 불러올 수 있다. https://www.ibm.com/docs/ko/db2/11.5?topic=sf-st-dwithin ST_DWithin ST_DWithin 함수는 두 Geometry가 지정된 거리 내에 있는지 판별합니다. 구문 매개변수 geometry1 geometry2와 비교할 Geometry를 나타내는 ST_Geometry 유형의 값입니다. geometry2 geometry1과 비교할 Geometry를 표시하 www.ibm.com 두 함수 모두 지리적 객체 간의 거리를 계산되는데 쓰지만 최적화가 다르..
-
Go: fiber v2 백엔드에서 토스 페이 API 사용하기컴퓨터/Go language 2024. 3. 4. 12:20
할 것 Go언어 백엔드 서버에 toss payments API를 연동해보고 싶었다. 우선 API 키를 얻어준다. @링크 API 키 | 토스페이먼츠 개발자센터 토스페이먼츠 클라이언트 키 및 시크릿 키를 발급받고 사용하는 방법을 알아봅니다. 클라이언트 키는 브라우저에서 토스페이먼츠 SDK를 연동할 때 사용합니다. 시크릿 키는 토스페이먼츠 API를 docs.tosspayments.com 테스트 키로 하면 아무리 결제해도 실제 돈은 빠지지 않는다. 이해하기 우선 토스 페이먼츠는 Basic 인증 방식을 사용하고 (Authorization: Basic blah 헤더) 시크릿 키가 ID고 비밀번호는 없는 형태고, 모든 응답/요청은 JSON 이다. @토스 페이먼츠 개발자 샌드박스 토스페이먼츠 개발자센터 토스페이먼츠 결..