전체 글124 [Spring] Redis ShedLock 이론과 구현 스케줄러로 API를 요청해 데이터를 받아오고 있었는데, 다중 서버 환경에서 스케줄러가 각 노드마다 개별 동작하여 동일한 API 요청이 서버 대수만큼 중복 발생하는 문제가 있었다. 이로 인해 다음과 같은 현상이 발생했다. 거의 동시에 응답이 왔을 때 redis에 저장되어 있는 응답의 개수가 덮어씌워져(Lost Update) Loki와의 데이터 정합성 문제가 발생API 요청 성공유무를 보여주는 화면 UI에 중복된 상태값이 표시되고, 서버 개수에 따라 관리자에게 보여지는 API 요청 개수가 달라지는 등 부정적인 사용자 경험을 유발외부 서버(PHIS)와 내부 리소스(Redis, Loki)의 불필요한 부하를 초래이러한 멀티 노드 간 중복 작업을 차단하여 파생되는 문제를 방지하기 위해 스케줄러 분산 락 매커니즘(S.. 2026. 1. 16. [Spring] TaskScheduler 이론과 구현 0. 개요외부 API에 보낸 요청의 상태를 모니터링하는 기능을 개발하던 도중, 기존의 polling 방식이 서버에 불필요한 부하를 만들고 있었음을 파악했다. Polling 했던 목적이 클라이언트(관리자)가 스케줄러를 통한 API 요청에 대한 응답이 잘 오고 있는지 확인하기 위함이었다. 요청 이후 30초안에 응답이 오지 않으면 '지연', 50초 안에 응답이 오지 않으면 '초과'임을 클라이언트에게 전달해주어야 했기에 이를 위해 최대한 빠르게 문제 상황을 전달해 주기 위해서는 짧은 주기의 polling이 요구되었다. 하지만, 이벤트 발생 시에만 클라이언트에게 정보를 전달해주면 되었기에 SSE를 고려하게 되었고, 서버 측에서 정해진 특정 시점에만 확인 후 이벤트를 발생시키면 되었기에 방법을 찾아보았다. Task.. 2026. 1. 15. [DB] MySQL 8.0 잠금 MYSQL의 내부 동작과 그 원리에 대해 궁금해져, Real MySQL 8.0 책을 읽었는데 정리를 안하니 계속 내용이 휘발되어서 내 방식으로 정리해보고자 글을 쓴다. 잠금은 동시성을 제어하기 위한 기능으로, 여러 커넥션에서 동시에 동일한 자원을 요청할 경우 순서대로 한 시점에는 하나의 커넥션만 변경할 수 있게 해주는 것이다. MySQL에서 사용하는 잠금은 크게 스토리지 엔진 레벨과 MySQL 엔진 레벨로 나눌 수 있다. - MySQL 엔진 레벨: 글로벌 락 , 테이블 락, 테이블 메타데이터 락, 네임드 락- 스토리지 엔진 레벨: 레코드 락, 갭락, 넥스트 키 락, 자동 증가 락이들에 대해 자세히 알아보자! 1. MySQL 엔진 레벨의 락 [ 글로벌 락 ]가장 범위가 큰 잠금이다. MySQL 서버 .. 2026. 1. 14. [DB] MySQL 8.0 트랜잭션과 MVCC MYSQL의 내부 동작과 그 원리에 대해 궁금해져, Real MySQL 8.0 책을 읽었는데 정리를 안하니 계속 내용이 휘발되어서 내 방식으로 정리해보고자 글을 쓴다. 트랜잭션은 데이터의 정합성을 보장하기 위한 기능이다. 1. ACID데이터 베이스는 트랜잭션의 무결성을 보장하기 위해 ACID(기능)를 만족한다. - Atomicity (원자성) : 원자성 작업으로, 전체가 Commit되거나 Rollback되어야 한다. - Consistency (일관성) & Isolation (격리성) : 서로 다른 두 개의 트랜잭션에서 동일 데이터를 조회하고 변경하는 경우에도 상호 간섭이 없어야 한다. - Durability (지속성) : 한 번 저장된 데이터는 지속적으로 유지가 되어야 한다. 트랜잭션과 관련된 더.. 2026. 1. 13. [DB] MYSQL 엔진 아키텍처 MYSQL의 내부 동작과 그 원리에 대해 궁금해져, Real MySQL 8.0 책을 읽었는데 정리를 안하니 계속 내용이 휘발되어서 내 방식으로 정리해보고자 글을 쓴다. 1. MYSQL 엔진 아키텍쳐MySQL 서버는 크게 아래 두 엔진으로 구분할 수 있다. 1. MySQL 엔진: SQL 분석과 최적화를 담당한다. SQL 파서, SQL 옵티마이저, SQL 실행기 등이 포함된다. 2. 스토리지 엔진: 디스크에 저장, 조회를 담당한다. 이때, 핸들러 API를 이용해 실제 처리(핸들러 요청)를 수행한다. 핸들러는 말 그대로 MySQL 엔진이 스토리지 엔진을 조종하기 위해 사용되는 것이다. MySQL은 아래와 같이 구성되어 있다. 프로그램은 커넥션 핸들러를 통해 DB와 연결된다. 프로그램이 SQL을 전송하면,.. 2026. 1. 12. [회고록] 2025년, 대망의 대학교 4학년과 인턴쉽 마침내 끝나긴 하나 100번쯤은 생각했던 대학교 4년이 끝났다. 사실 작년에 비해 나 자체가 정말 많이 달라졌다. 가장 크게 변화한건, 실력 뭐 그런게 아니라 나 자신이 좋아졌고, 내가 가장 열심히 몰입할 수 있는 개발이 좋아졌다. 올해 중순까지만 해도 사람이 '불안' 그 자체였다.지금까지 쌓아온 건 남들과 비슷하게 여럿 있는데 그렇게 나 자신을 잘 드러내고 있는지도 모르겠고, 성인이 되어서 지금까지 해온건 이거 하나뿐인데 내가 남들과 다르게 가지고 있는 경쟁력이 무엇이며 내가 무슨 길을 가야 하는지 몰랐다. (물론 지금도 이런 질문에 대한 답을 찾아가는 과정이긴 하지만..)더 명시적으로는 내가 어떤 걸 할 때 몰두할 수 있는지, 어떤 걸 배울때 어떻게 접근하는지, 누구와 있을때 행복한지에 대해 몰랐다.. 2026. 1. 1. 이전 1 2 3 4 ··· 21 다음