새로운 포스트
-
Spring WebFlux
[Spring WebFlux] 5편: Reactor의 배압 제어 - request(n)에서 전략까지
-
Spring WebFlux
[Spring WebFlux] 4편: Cold/Warm/Hot Sequence
-
Spring WebFlux
[Spring WebFlux] 3편: Reactive Streams, 실무에서는 - 구현체와 오해
-
Spring WebFlux
[Spring WebFlux] 2편: Reactive Streams 스펙 - 계약과 용어
-
Spring WebFlux
[Spring WebFlux] 1편: 리액티브 프로그래밍이란 무엇인가
-
Kotlin
[Kotlin] 자바 개발자를 위한 코틀린 온보딩 (2) - 변수: val/var와 문자열 템플릿으로 이해하기
-
Kotlin
[Kotlin] 자바 개발자를 위한 코틀린 온보딩 (1) - 함수: 문과 식부터 이해하기
-
Kotlin
[Kotlin] 코틀린 함수 호출 다루기: 이름 있는 인자부터 vararg, infix까지
다른 사람들이 관심있어한 포스트
-
MySQL [MySQL] 고급 최적화 (1) - 조인은 어떻게 실행되는가: BNL, MRR & BKA 들어가며지금까지 이 시리즈에서는 MySQL 서버의 구조와 InnoDB의 내부 동작을 다뤘습니다. 서버 레이어의 커넥션 처리와 쿼리 처리 파이프라인, 그리고 버퍼 풀과 인덱스 구조, 로그 시스템까지 InnoDB의 핵심 메커니즘을 살펴봤습니다. 이번 포스트부터는 조금 다른 층위의 이야기를 다룹니다. 지금까지 살펴본 구조들이 "데이터를 어떻게 저장하고 관리하는가"에 대한 답이었다면, 이번 시리즈는 "그 저장된 데이터를 어떻게 더 빠르게 조합해서 결과를 만들어내는가", 즉 옵티마이저의 고급 최적화 기법들을 다룹니다. 첫 번째 주제는 조인(Join)입니다. 정확히는, 두 개 이상의 테이블을 연결할 때 MySQL이 실제로 어떤 알고리즘으로 실행하는가에 대한 이야기입니다. 같은 조인이라도 실행 방식에 따라 성능이 몇..
-
Techfork 하이브리드 검색 구현 구조 정리 — BM25 + kNN + RRF + 개인화 리랭킹 들어가며TechFork의 검색은 단순한 키워드 매칭이 아니라, BM25 기반 lexical search와 embedding 기반 semantic search를 결합한 하이브리드 구조로 동작합니다. 두 검색 결과를 RRF(Reciprocal Rank Fusion)로 결합하고, 로그인 사용자에게는 프로필 기반 개인화 리랭킹까지 적용합니다. 이 글에서는 검색 파이프라인의 각 단계와 후처리까지의 전체 흐름을 정리합니다.현재 검색 설정이 어떤 실험 과정을 거쳐 결정되었는지는 검색 품질을 5단계 실험으로 개선한 과정 글을 참고해주세요. 검색 품질을 5단계 실험으로 개선한 과정 — 필드 가중치부터 쿼리 구조까지들어가며TechFork는 기술 블로그 글을 수집해서 검색과 추천을 제공하는 서비스입니다. 검색은 BM25 ..
-
Techfork [26/01/28] 오늘의 개발 일지 - 웹 Apple 소셜 로그인 구현 오늘은 웹에서 Apple 소셜 로그인을 할 수 있도록 REST API 문서를 보고 구현했습니다. 애플 로그인은 카카오 로그인보다 훨씬 까다롭더군요...https://developer.apple.com/documentation/signinwithapplerestapi Sign in with Apple REST API | Apple Developer DocumentationCommunicate between your app servers and Apple’s authentication servers.developer.apple.com 웹 Apple 로그인 구현 가이드TechFork 프로젝트의 Spring Security OAuth2 기반 Apple 소셜 로그인 구현⚠️ Apple vs Kakao 핵심 차이.. -
JVM [JVM] 가비지 컬렉터의 역사 (6) - ZGC와 Generational ZGC: 서브밀리초 GC의 모든 것 이전 포스트에서 Shenandoah는 Brooks Pointer를 사용해 동시 압축을 구현했습니다.https://dmoritle.tistory.com/174 [JVM] 가비지 컬렉터의 역사 (5) - Shenandoah GC: 동시 이주 실현한 Low-Latency 가비지 컬렉터서론: 왜 Low-Latency GC가 필요해졌는가하드웨어 성장이 만든 역설1990년대부터 2000년대 초반까지 JVM 힙 메모리는 수백 MB 수준이었습니다. 그러나 메모리 가격 하락과 64비트 아키텍처의 보편화로dmoritle.tistory.com ZGC는 같은 목표를 Colored Pointer와 Load Barrier로 달성하되, 구현 전략은 정반대에 가깝습니다. 1. ZGC 개요ZGC란?ZGC(Z Garbage Colle..
-
JVM [JVM] 가비지 컬렉터의 역사 (4) - G1: 새로운 패러다임 이전 편에서 CMS의 한계를 살펴봤습니다.https://dmoritle.tistory.com/172 [JVM] 가비지 컬렉터의 역사 (3) - 동시성 컬렉터: CMS이전 편에서 병렬 컬렉터의 한계를 살펴봤습니다.https://dmoritle.tistory.com/171 [JVM] 가비지 컬렉터의 역사 (2) - 병렬 컬렉터: ParNew, Parallel Scavenge, Parallel Old이전 편에서 Serial GC의 한계를 살펴봤습니다dmoritle.tistory.com Fragmentation, Concurrent Mode Failure, 예측 불가능한 pause time... 이 문제들을 해결하기 위해 완전히 새로운 접근이 필요했습니다. 이번 편에서는 G1(Garbage-First) GC를 ..