BackEnd
-
Coroutine 순차 처리BackEnd/coroutine 2025. 5. 9. 23:50
'토큰 업데이트 후 네트워크 요청', '이미지 변환 후 업로드 요청' 같이 작업 간에 선후 관계(종속성) 있는 작업들이 존재합니다. 다음은 순차처리 되지 않는 코드입니다. 토큰이 업데이트 되고 네트워크 요청을 해야하나, 병렬로 처리되어 토큰 업데이트 완료 전 네트워크 요청이 일어납니다.import kotlinx.coroutines.*fun main() = runBlocking { val updateTokenJob = launch(Dispatchers.IO) { println("[${Thread.currentThread().name}] 토큰 업데이트 시작") delay(100L) // 새로운 토큰을 가져오는데 걸리는 시간 println("[${Thread.cu..
-
CoroutineDispatcherBackEnd/coroutine 2025. 5. 6. 08:30
CoroutineDispatcher코루틴을 스레드로 보내 실행시키는 객체 CoroutineDispatcher는 코틀린 코루틴의 핵심 구성요소 중 하나로, 코루틴이 어떤 스레드나 스레드 풀에서 실행될지를 결정하는 역할을 합니다. 즉, "코루틴을 어디에서, 어떻게 실행할 것인가"를 제어하는 실행 컨텍스트의 일부입니다.SingleThreadDispatcher SingleThreadDispatcher는 오직 하나의 스레드에서만 코루틴을 실행하도록 보장하는 디스패처(Dispatcher)입니다.import kotlinx.coroutines.*val singleThreadDispatcher: CoroutineDispatcher = newSingleThreadContext("SingleThread")fun m..
-
runBlockingBackEnd/coroutine 2025. 5. 5. 10:00
runBlocking runBlocking 함수는 이 함수를 호출한 스레드를 사용해 실행되는 코루틴을 만들어냅니다. runBlocking 코루틴이 종료될 때 스레드 점유가 해제됩니다. 즉, 현재 스레드를 블로킹(중단)하여 코루틴 코드를 동기적으로 실행하는 함수입니다.runBlocking = Run(실행) + Blocking(차단) 주요 특징현재 스레드를 블로킹: runBlocking { ... } 블록 내 모든 작업이 끝날 때까지 해당 스레드를 멈춥니다.코루틴 월드로 진입: 일반 함수(main 등)에서는 launch, async 같은 코루틴 빌더를 바로 사용할 수 없습니다. runBlocking을 사용하면 코루틴 스코프가 생성되어, 그 안에서 launch, async 등 코루틴 관련 함수를 사용할 수 ..
-
Coroutine 등장 배경BackEnd/coroutine 2025. 5. 3. 22:00
Overview 인프런- 코틀린 코루틴 완전 정복 강의를 수강하고 정리합니다.강의 소스 코드 GitHub - HanseomKim/coroutinelecture: 『코틀린 코루틴 완전 정복』, 조세영, 인프런(2024) 저장소 입니다.『코틀린 코루틴 완전 정복』, 조세영, 인프런(2024) 저장소 입니다. Contribute to HanseomKim/coroutinelecture development by creating an account on GitHub.github.com 단일 스레드 애플리케이션 스레드 하나만 사용해 실행되는 애플리케이션입니다. 단일 스레드 애플리케이션의 한계 스레드는 한 번에 하나의 작업밖에 수행하지 못하기 때문에, 한 작업이 오래 걸리는 경우 문제가 됩니다. 메인 스레드 또..
-
Synonym SearchBackEnd/Elasticsearch API 2025. 4. 3. 04:00
검색 시 유사어를 활용하여 검색 결과의 범위를 확장하고 검색 경험을 향상시키는 기능입니다. 예를 들어, 사용자가 "laptop"을 검색하면 "notebook"이 포함된 문서도 찾을 수 있게 해주는 기능입니다. 동의어 구현 방법1. Synonyms API 사용 (Elasticsearch 8.13+) REST API를 통해 동의어 세트를 관리할 수 있습니다.PUT /_synonyms/my_synonyms{ "synonyms_set": [ { "id": "tech-terms", "synonyms": ["laptop, notebook, portable computer"] } ]} 그리고 분석기 설정에서 이를 참조합니다."filter": { "my_synonym_filter"..
-
Fuzzy Match QueryBackEnd/Elasticsearch API 2025. 4. 1. 04:00
검색어와 정확히 일치하지 않더라도 유사한 용어를 찾을 수 있게 해주는 기능입니다. 주로 오타, 철자 오류, 유사어 처리에 유용합니다. Fuzzy Match Query Match Query에 fuzziness 파라미터를 추가하여 사용합니다.GET /_search{ "query": { "match": { "field_name": { "query": "search_term", "fuzziness": "AUTO" } } }} 주요 파라미터fuzziness: 허용되는 최대 편집 거리입니다. "AUTO" 또는 정수 값(1, 2 등)으로 설정 가능하며, "AUTO"는 검색어 길이에 따라 자동으로 조정됩니다. (3~5글자: 1회 편집 허용, 6글자 이상: 2회..
-
Proximity SearchBackEnd/Elasticsearch API 2025. 3. 31. 05:00
구문(Phrase) 쿼리와 근접 쿼리(Proximity Search)는 검색 방식에서 중요한 차이점을 가집니다. 구문 쿼리는 검색어의 정확한 순서와 연속성을 요구합니다. 예를 들어 "New York"이라는 구문 쿼리는 두 단어가 정확히 같은 순서로 붙어있는 문서만 찾습니다. 이는 Elasticsearch에서 match_phrase 쿼리로 구현됩니다. 반면, 근접 쿼리는 더 유연한 검색을 제공합니다. 검색어들이 정확한 순서나 인접성을 갖지 않아도 되며, 지정된 거리(슬롭/slop) 내에 있으면 결과로 반환됩니다. Proximity Search match_phrase 쿼리에 slop 파라미터를 추가하여 Proximity Search를 수행합니다.GET /my_index/_search{ "query..
-
AggregationBackEnd/Elasticsearch API 2025. 3. 30. 09:00
Metric Aggregationmin: 지정된 필드의 최소값을 계산합니다.max: 지정된 필드의 최대값을 계산합니다.sum: 지정된 필드의 합계를 계산합니다.avg: 지정된 필드의 평균값을 계산합니다.stats: min, max, sum, avg, count를 한 번에 제공합니다.cardinality: 필드의 고유한(unique) 값 개수를 계산합니다. 정확한 값이 아닌 근사치(approximate count)를 제공합니다.percentiles: 백분위수를 계산합니다.geo-centroid: 위치 정보 필드의 중심점을 계산합니다.GET /index_name/_search{ "size": 0, "aggs": { "agg_name": { "avg": { "field": "fi..