Jude Tech Blog

스레드 로컬을 코루틴 환경에서 적절하게 사용하는 방법

스레드 로컬과 코루틴 코틀린에서 코루틴은 비동기 프로그래밍을 단순화 해주는 도구입니다. 하지만 코루틴은 스레드 기반의 동작과는 조금 다르게 동작하기 때문에, 기존 자바 개발 환경에서 익숙하게 사용하던 스레드 로컬 같은 기능이 코루틴 환경에서는 제대로 동작하지 않을 수 있습니다. 이번 글에서는 스레드 로컬이 어떻게 코루틴 친화적인 방식으로 사용할 수...

다중 서버 환경에서 동시성 문제를 해결하기 위한 분산락 사용하기 대작전 (with Redis)

다중 서버 환경에서 발생하는 동시성 문제 최근 많은 서비스들은 고가용성을 위해 다중 서버 환경으로 운영되고 있습니다. 그렇다면, 이러한 다중 서버 환경에서 동시성을 어떻게 안정적으로 제어할 수 있을까요? 이번 글에서는 예시 상황을 통해 문제를 해결하는 과정을 보여드리겠습니다. 예를 들어, 돈을 미리 충전해 놓고 충전한 금액을 사용하는 선불전자지급...

예외 처리를 잘 하는 방법에 대해 알아보자

예외 처리의 중요성 서비스를 운영하다 보면 예외가 발생하는 상황을 마주하게 됩니다. 이때 예외를 어떻게 처리하느냐에 따라 사용자에게는 적절한 에러 메시지를 제공할 수 있고, 개발자에게는 문제를 빠르게 파악하고 조치할 수 있는 단서를 제공할 수 있습니다. 결과적으로 이는 서비스의 안정성을 높이는 데 큰 도움이 됩니다. 그렇다면 예외 처리를 어떻게 잘...

적절한 로컬 캐시 사용을 고려하자

캐시란? 캐시는 데이터를 빠르게 접근할 수 있는 고속 저장소로서, 자주 사용되거나 조회가 많은 데이터를 캐시에 저장하면, 데이터베이스를 직접 조회하는 것보다 훨씬 빠르게 데이터를 가져올 수 있습니다. 이를 통해 성능을 향상시키고, 요청에 대한 응답 시간을 최적화할 수 있습니다. 로컬 캐시 vs 글로벌 캐시 캐시는 크게 데이터 저장 위치에 따라,...

코틀린 코루틴의 구현 방식, 그 내부로 들어가 보자

이전에, 코틀린의 중단(suspend) 함수가 어떻게 중단되고 재개될 수 있는지를 살펴보면서, 이러한 동작이 Continuation 객체와 밀접한 관계가 있다는 점을 확인했습니다. (제목은 코틀린 중단(suspend) 동작으로 하겠습니다. 근데 이제 Continuation 객체를 곁들인) 이번에는 코루틴이 내부적으로 어떤 방식으로 구현되고 동작하는지...

2024년 회고: 개발자로서 첫 발을 내딛다

개발자라는 꿈을 이루다 2024년은 그동안 꿈꿔왔던 개발자라는 꿈을 이루고, 첫 발을 내디딘 해였습니다. 쏘카에 입사하며 이제는 돈을 받으며 일을 하는 개발자가 되었습니다. 마치 야구선수가 프로팀에 입단하여 프로 선수가 되는 것처럼, 저도 이제 쏘카에 입사하여 프로 개발자가 되었다고 생각합니다. 그만큼 프로의식을 가지고 책임감을 가지며 개발을 해야 ...

스프링에서 재시도를 처리하는 몇 가지 방법 (@Retryable, RetryTemplate)

재시도 처리가 필요한 상황 서비스를 운영하면 외부 서버와 통신할 일이 빈번하고, 특히 MSA 구조를 채택한 시스템에서는 서버 간의 통신이 더욱 잦아졌습니다. 이러한 서비스 간 통신에서 주의해야 될 점은 장애가 전파될 수 있다는 점입니다. 예를 들어, A 서비스가 B 서비스를 호출하는 상황에서 B 서비스에 장애가 발생하면, 그 장애가 A 서비스로 전...

© Jude. Some rights reserved.