전체 글
-
Go: 카카오맵 API 지하철 역 주변 검색하기 (blevesearch)컴퓨터/Go language 2024. 10. 20. 20:21
현재 대한민국 철봉 지도 (https://www.k-pullup.com)검색 기능에 "수원역"처럼 역 이름으로 검색하면 검색이 안 되는 문제가 있다.인덱싱 할 때 주소를 ngram 방식으로 검색하면 쓸모없는 위치가 많이 검색된다.또한 "서울대입구역" 처럼 "서울대입구"는 대한민국 주소상 존재하지 않을 수 있다. 따라서 "서울대입구역"을 검색하면 그 주변 (ex 3km 반경)에 있는 나의 데이터들을 보여주고 싶었다. 1. 데이터 열린데이터광장 메인데이터분류,데이터검색,데이터활용data.seoul.go.kr서울시 역사마스터 정보를 보면 (최신으로 잘 업데이트되는 느낌)750개가 넘는 도시철도 역들의 좌표가 잘 나와있다. (지하철 + 고가철도 etc) (WGS84 좌표계)전국 5대 지하철을 받으려면 위 데이터..
-
Go: Fiber 서버 최적화 하기 (optimization)컴퓨터/Go language 2024. 9. 12. 21:39
Go언어 웹 프레임워크 fiber v2를 사용하면서 얻은 팁들을 정리한 글이다. GitHub - gofiber/fiber: ⚡️ Express inspired web framework written in Go⚡️ Express inspired web framework written in Go. Contribute to gofiber/fiber development by creating an account on GitHub.github.com 1. zero memory alloc []byte stringbyte 배열과 문자열 (json marshal/unmarshal 시 많은 사용)을 아래처럼 하면 allocation을 새롭게 하게 된다.string(byteArr) // var byteArr []byte..
-
Meilisearch: Rust로 작성된 ElasticSearch컴퓨터/Rust 2024. 7. 12. 16:45
[메일리서치] meili는 노르드 신화 (Norse god)에 나오는 신 이름, "사랑스러운 사람"을 뜻https://github.com/meilisearch/MeiliSearch/issues/1182 GitHub - meilisearch/meilisearch: A lightning-fast search API that fits effortlessly into your apps, websites, and workflowA lightning-fast search API that fits effortlessly into your apps, websites, and workflow - meilisearch/meilisearchgithub.com Rust언어로 작성된 오픈 소스 검색 엔진이다.이 링크에서 다른..
-
멀티스레드 Phaser - flexible 동기화 장벽컴퓨터/JAVA 2024. 6. 12. 23:57
소개java7 부터 도입된 Phaser. 멀티스레드 프로그래밍을 하다 보면 여러 스레드가 일정 시점에서 동기화되어야 하는 상황이 있었다.ex) 여러 스레드가 동시에 시작해야 하거나, 특정 작업이 완료될 때까지 기다려야 하는 경우 (Go의 sync.WaitGroup 느낌)java에서는 CyclicBarrier나 CountDownLatch를 사용할 수 있지만, 등록된 party 수를 동적으로 변경할 수 없다. Phaser그럼 Phaser는 뭔가?java.util.concurrent에 들어있고, CyclicBarrier와 CountDownLatch의 슈퍼 set 느낌이다.CyclicBarrier: 여러 스레드가 미리 정의된 지점에서 동기화되고 독립적 작업 반복 CountDownLatch: 하나 이..
-
Go: Bleve 인덱싱 한국어 주소 검색 서버 만들기 (Apache Lucene-like)컴퓨터/Go language 2024. 6. 2. 14:09
GitHub - blevesearch/bleve: A modern text/numeric/geo-spatial/vector indexing library for goA modern text/numeric/geo-spatial/vector indexing library for go - blevesearch/blevegithub.com ZincSearch (ElasticSearch-like)를 이용해 한국 주소 검색 시스템을 이용하고 있었다.웹 서버는 단일 서버로 돌리다보니 굳이 검색 서버를 따로 열어서 호출하는 것이 마음에 들진 않았다.프로젝트가 Go언어이다보니 모든 것을 Go언어로 된 것을 이용하려고 노력하다가 Bleve를 찾게 되었다. DoorDash 개발자 블로그를 읽다가 ElasticSearch를 ..
-
Spring Boot: Repository Extension 패턴 (CustomRepositoryImpl)컴퓨터/Spring Boot 2024. 5. 8. 15:12
소개프로젝트들을 보다 보면 가끔 RepositoryImpl과 같은 파일을 본 적이 있다.그냥 Repository를 다르게 구현한 것일까 하고 넘어갔다가 개발을 하다가 위 방식으로 해결했다. 문제MySQL 에서 spatial 타입을 사용 중이다.POINT 타입으로 저장되어 있기 때문에 클라이언트 JSON에서는latitude/longitude (경/위도)로 float64 (double) 타입으로 반환하고 싶었다.@Entity@Table(name = "Markers")public class Marker { @Id @Column(name = "MarkerID") private Integer markerID; @Column(columnDefinition = "geometry(Point, 43..
-
Go/Java: 금칙어 검사 함수들 벤치마크 및 향상컴퓨터/Go language 2024. 5. 2. 00:28
금지어 리스트를 .txt 에 저장하고 서버 메모리에 로딩했다. (10kb)금지어를 가장 빠르게 체크하는 방법은 무엇일까 궁금해서 벤치마크를 돌려보았다.기준: 10KB input string + 500개 금지어 리스트 1. 정규 표현식 사용성능: 14,260K ns/op메모리 사용: 4321B/op할당 횟수: 24 allocs/op아래처럼 첫 로딩에 regex로 패턴을 모두 컴파일하고, 인풋 string을 확인했다.생각보다 대용량일 수록 굉장히 느리다.func CompileBadWordsPattern() error { var pattern strings.Builder pattern.WriteString(`(`) for i, word := range badWordsList { if word == "" { ..
-
Rust: 스타크래프트1 멀티 실행기 만들기 (windows api)컴퓨터/Rust 2024. 4. 22. 14:25
GitHub - somersby10ml/sc_multiloader Contribute to somersby10ml/sc_multiloader development by creating an account on GitHub. github.com 위 프로젝트를 보고, Rust로 windows-rs API는 개발이 잘되어가는지 궁금해서 위 앱을 Rust로 만들어보았다. (CLI + GUI) windows-rs API 문서 따위 아직 없다. 그냥 알아서 필요한거 찾아서 쓰고, 없는 건 만들어 써야 한다. docs.rs의 검색 기능 때문에 원하는 구조체, 함수 등 찾기는 쉽다. https://microsoft.github.io/windows-docs-rs/ microsoft.github.io 우선 "핸들" 이라는..