분류 전체보기
-
분산 시스템의 재앙, Split Brain: 원인 분석부터 글로벌 기업의 대응 전략까지Computer Science/Software Engineering 2026. 1. 22. 18:30
오늘은 고가용성(HA, High Availability) 시스템을 설계하는 엔지니어라면 반드시 정복해야 할 숙제, Split Brain(스플릿 브레인) 현상을 심층적으로 다루어 보겠습니다. 단순히 "서버가 두 개가 된다"는 수준을 넘어, 왜 이 현상이 데이터 정합성을 파괴하는지, 그리고 글로벌 기업들은 어떤 엔지니어링 기법으로 이를 방어하고 있는지 정리했습니다.1. Split Brain: 왜 분산 시스템의 '악몽'인가?1.1 개념 정의분산 시스템에서 Split Brain은 네트워크 단절(Network Partition)로 인해 클러스터가 두 개 이상의 독립적인 그룹으로 쪼개지고, 각 그룹이 서로의 존재를 알지 못한 채 스스로를 Master(Leader)로 승격시키는 현상을 말합니다.1.2 CAP 정리와 ..
-
이벤트 응모 시스템으로 배우는 Redis 분산 락(Distributed Lock) 해결 가이드 🚀Project 2026. 1. 21. 23:14
안녕하세요! 오늘은 백엔드 개발자라면 한 번쯤은 마주하게 되는, 혹은 면접 단골 질문이기도 한 '동시성 제어'에 대해 이야기해보려 합니다.선착순 이벤트나 한정판 상품 판매 시스템을 구축할 때, 수만 명의 사용자가 동시에 '구매' 버튼을 누르면 어떤 일이 벌어질까요? 단순히 DB의 값을 업데이트하는 방식으로는 데이터의 원자성(Atomicity)을 보장하기 어렵습니다.오늘은 그 해결책 중 하나인 Redis 분산 락을 활용해 문제를 해결하는 방법을 알아보겠습니다! 👨💻1. 왜 DB 락(Lock)만으로는 부족할까? 🤔일반적으로 관계형 데이터베이스(RDBMS)가 제공하는 Pessimistic Lock(비관적 락)이나 Optimistic Lock(낙관적 락)을 떠올릴 수 있습니다. 하지만 다음과 같은 상황에..
-
서버 장애의 80%는 여기서 시작된다? 커넥션 풀(Connection Pool) 최적화 가이드 🌊Computer Science/Database 2026. 1. 20. 18:00
안녕하세요! 5년 차 주니어 개발자입니다. 오늘은 백엔드 성능의 핵심 보루, **커넥션 풀(Connection Pool, CP)**에 대해 깊이 있게 다뤄보려 합니다."사용자가 많아지면 무조건 풀 크기를 늘리면 될까?" "언제 풀이 부족하다는 걸 알 수 있을까?" 실무에서 마주하는 이 질문들에 대해 명쾌한 해답과 모니터링 노하우를 공유합니다! 🚀1. 커넥션 풀(Connection Pool)이란? 🏊♂️DB 커넥션 풀은 미리 일정한 수의 **데이터베이스 연결(Connection)**을 만들어 '풀(Pool)' 속에 보관해 두었다가, 요청이 올 때마다 빌려주고 반납받는 방식입니다.왜 직접 연결하지 않고 '풀'을 사용하나요? (Why?)DB와 매번 새로 연결하는 작업(TCP 3-way handshake ..
-
네트워크 대역폭(Bandwidth)이란?Computer Science/Network 2026. 1. 19. 13:41
오늘은 백엔드 서버를 설계하고 운영할 때 절대 간과해서는 안 될 요소, 바로 네트워크 대역폭(Bandwidth)에 대해 이야기해보려 합니다.서버 로직 최적화에는 공을 들이면서, 정작 데이터가 오가는 '길'에 대해서는 무관심하지 않으셨나요? 대역폭을 이해하면 성능 개선은 물론 인프라 비용까지 획기적으로 줄일 수 있습니다. 💸1. 대역폭(Bandwidth)이란 무엇인가?네트워크 대역폭은 단위 시간 내에 전송할 수 있는 데이터의 최대 용량을 의미합니다. 흔히 속도와 혼동하지만, 정확히는 '통로의 넓이'에 가깝습니다.핵심 개념 비교용어개념비유대역폭 (Bandwidth)이론상 최대 전송 가능량고속도로의 차선 수 (8차선 vs 2차선)처리량 (Throughput)실제로 전송된 데이터 양1시간 동안 실제 통과한 차..
-
[LeetCode] Rotate Array: 배열 회전 마스터하기 (Kotlin 풀이 및 최적화 전략)Problem Solving/LeetCode 2026. 1. 16. 23:18
오늘은 기술 면접 단골 문제인 LeetCode의 189. Rotate Array 문제를 함께 살펴보겠습니다. 배열을 다루는 기본적인 감각은 물론, 공간 복잡도 최적화 능력을 어필하기 아주 좋은 문제입니다.📌 문제 개요주어진 정수 배열 nums를 오른쪽으로 k단계만큼 회전시키는 문제입니다.Input: nums = [1,2,3,4,5,6,7], k = 3Output: [5,6,7,1,2,3,4]핵심 조건: k는 음수가 아닐 수 있으며, 배열의 길이보다 클 수 있습니다. 또한, 가능하다면 O(1) 공간 복잡도(In-place)로 해결하는 것이 권장됩니다.💡 첫 번째 접근: 임시 배열 활용하기 (Space O(n))코드 구현 (Kotlin)class Solution { fun rotate(nums: I..
-
[LeetCode] 27. Remove ElementProblem Solving/LeetCode 2025. 3. 2. 14:22
class Solution(object): def removeElement(self, nums, val): result = [] k = 0 for i in nums: if val != i: k+=1 result+=[i] nums[:] = result[:] return khttps://leetcode.com/problems/remove-element/?envType=study-plan-v2&envId=top-interview-150 주어진 배열 nums에서 val 이라는 값을 전부 제거한 뒤, val이 아닌 원소의 개수를 반환하는 문제새로운 배열을 만들..
-
[LeetCode] 88. Merge Sorted ArrayProblem Solving/LeetCode 2025. 2. 23. 16:08
오랜만에 리트코드를 풀어봤다https://leetcode.com/problems/merge-sorted-array/?envType=study-plan-v2&envId=top-interview-150오름차순으로 정렬된 두 개의 배열을 합치는 것포인터 두 개를 사용했고, 마지막 인덱스 처리하기 번거로워서 각각의 배열 양 끝에 max number 값을 넣어주었다import sysclass Solution(object): def merge(self, nums1, m, nums2, n): i = 0 j = 0 result = [] nums1+=[sys.maxsize] nums2+=[sys.maxsize] while i오랜만에 푸니까 ..
-
kubernetes componentsEtc 2023. 11. 12. 16:05
쿠버네티스는 컨테이너를 파드 내에 배치하고 노드에서 실행함으로서 워크로드를 구동한다. Node 클러스터 내 설치되는 가상 혹은 물리 머신을 의미. 과거에는 미니언즈라는 용어로 불렀다. 용어는 현재도 혼용해서 사용한다. 어플리케이션이 실행중이다가 노드가 죽을 수도 있으니, 일반적으로 클러스터에는 여러 개의 노드를 둔다. Cluster 노드(워커 머신)의 집합. 모든 클러스터는 최소 한 개 이상의 워커 노드를 가진다. 클러스터 외부에서 관점에서는 하나의 노드가 죽어도 다른 노드로 접근 가능하기 때문에, 부하 분산 및 고가용성을 보장한다. 고가용성을 보장하기 위해서는 쿠버네티스 자체적으로 다음의 일을 지속적으로 수행해야 한다. 모든 클러스터를 관리하고, 관리중인 자원의 정보를 저장하고, 노드를 모니터링 하고..