분류 전체보기33 낙관적 락과 비관적 락 낙관적 락과 비관적 락은 데이터베이스 트랜잭션에서 동시성 제어를 위한 주요 기법입니다. 데이터 무결성을 유지하면서 여러 트랜잭션이 동시에 데이터에 접근할 때 발생할 수 있는 충돌을 해결할 때 사용됩니다.낙관적 락(Optimistic Lock)데이터 충돌이 적을 것으로 가정하고, 데이터를 읽을 때 락을 설정하지 않고 트랜잭션이 데이터를 수정할 때 충돌이 발생하지 않았는지 확인하는 방식입니다. 보통 version과 같은 별도의 구분 컬럼을 사용해서 데이터가 변경되었는지 확인하며, 충돌이 발생하면 데이터베이스가 아닌 애플리케이션에서 직접 롤백하거나 재시도 처리를 해야 합니다.비관적 락(Pessimistic Lock)데이터 충돌이 많을 것으로 가정하고, 트랜잭션이 시작될 때 공유락(Shared Lock, S-L.. 2025. 4. 10. 어떻게 Monolithic 아키텍처에서 MSA 아키텍처로 진화했을까? 안녕하세요 :)이제부터 어떻게 Monolithic 아키텍처에서 MSA 아키텍처로 진화했는지 한번 알아보겠습니다. 오늘 나오는 주요 토픽은 아래와 같습니다.Monolithic부터 MSA (Microservice Architecture)가 생기는 과정Event Driven ArchitectureSaga PatternCQRSAPI GatewayCircuit Breaker PatternOrchestration여기서 나오는 이야기의 순서는 실제 역사의 진행 순서는 아니라는 거를 알고 봐주시면 좋을 것 같습니다.Monolithic Architecture태초에는 당연히 모놀리식 아키텍처가 있었죠. 하나의 코드 베이스가 하나의 실행 환경에서 함께 동작하는 구조에요 배포 단위가 하나이기 때문에 확장을 하려면은 전체를 한.. 2025. 3. 24. 시스템 간 비동기 연동 방식 분리된 시스템 간의 비동기 연동은 시스템 간의 결합도를 낮출 수 있으며, 호출된 시스템의 응답을 기다리지 않으므로 더욱 빨리 사용자의 요청에 응답할 수 있다는 장점이 있습니다. 비동기 연동 방식으로 메시징 시스템 활용, 데이터베이스 활용, CDC 활용 방식이 있습니다.메시징 시스템 활용 방식은 두 시스템 사이에 메시징 시스템을 두어 비동기로 연동하는 방식입니다. 해당 방식은 한 시스템에서 메시지를 생성해서 메시징 시스템에 송신한 이후, 다른 시스템에서 메시징 시스템으로부터 메시지를 읽어와 메시지를 처리합니다. Kafka, RabbitMQ가 주로 메시징 시스테믕로 활용됩니다. 해당 방식은 처리량이 높은 것이 장점입니다. 하지만, 메시지 유실, 메시지 소비 순서, 트랜잭션에 대한 고민이 추가적으로 필요합니다.. 2025. 1. 21. 캐시 - 스탬피드 현상, Thundering Herd 문제 캐시 스탬피드 현상에 대하여 설명대규모 트래픽 환경에서 캐시를 운용하는데, Cache Aside (캐시 미스 발생 시 적재) 전략을 사용한다고 가정하겠습니다. 이때, 수많은 요청들이 동시에 캐시 미스를 확인하고 저장소에서 데이터를 가져와 캐시에 적재하는 상황이 발생할 수 있는데요. 이를 캐시 스탬피드 현상 혹은 Thundering Herd 문제라고 표현합니다. 캐시 스탬피드 현상은 원본 데이터베이스와 캐시의 성능을 저하할 수도 있습니다.이 문제는 어떻게 풀어볼 수 있을까요?해당 방식은 크게 잠금, 외부 재계산, 확률적 조기 재계산 방식으로 풀어볼 수 있습니다.잠금(Locking) 방식은 한 요청 처리 스레드가 해당 캐시 키에 대한 잠금을 획득합니다. 이로인해 다른 요청 처리 스레드들은 잠시 대기합니다. .. 2025. 1. 20. 인프라 - 로드밸런싱 로드밸런싱이란 어플리케이션을 지원하는 리소스 풀에 들어오는 네트워크 트래픽(들어오는 요청)을 균등하게 분산하는 것을 의미이를 수행하는 로드 밸런서는 애플리케이션 서버 앞단에 위치하며 클라이언트 요청을 지시하고 제어 → 이를 통해 애플리케이션의 가용성, 확장성, 보안 및 성능을 확보할 수 있다알고리즘 종류라운드 로빈(Round Robin): 모든 요청이 순서대로 처리되는 방식. 서버가 3대(A, B, C)가 존재하면 ABCABC 순서대로 전달됩니다. 모든 서버의 처리 능력이 동등하고, 요청의 고른 분산이 중요한 경우 고려해볼 수 있다. 구현이 쉬우며 고른 분산을 보장한다는 것이 장점. 하지만 서버 부하나 응답 시간을 고려하지 않고 서버의 처리 능력이 다른 경우 비효율적가중치 라운드 로빈(Weighted R.. 2025. 1. 8. [C++] 2개 이하로 다른 비트 ★★ 2개 이하로 다른 비트 난이도 ★★ 문제 내 풀이 규칙찾기 ■ 짝수 0을 포함한 2, 4, 6,... 짝수들은 비트로 표현했을 때, 가장 오른쪽 비트는 항상 0이다. 가장 오른쪽 비트는 2^0 = 1에 대응하며, 그 외 나머지 비트들은 모두 2^i으로 짝수이기 때문이다. 가장 오른쪽 비트가 1이면 + 1이 된다는 것이므로 그 비트는 무조건 홀수가 될 수 밖에 없다. 따라서 짝수인 수 2n들의 f 값은 언제나 2n + 1이다. 가장 오른쪽 비트가 0이기에 1을 더해주면 '올림'없이 총 1개의 비트만 다르게 된다. ■ 홀수 짝수와 달리 홀수를 비트로 표현하면 가장 오른쪽 비트가 무조건 1이다. 그렇기 때문에 홀수는 더했을 때의 '올림'을 생각해야 한다. 1만 더해주어도 "최소 2개의 비트"가 달라지기 때문이.. 2022. 8. 16. 이전 1 2 3 4 ··· 6 다음