1️⃣ 동시 접근 제어란?멀티스레드 환경에서 여러 스레드가 동시에 같은 자원에 접근할 수 있음.문제는 동시에 읽기/쓰기가 일어나면 데이터 불일치나 경합이 발생한다는 것. 👉 이걸 막는 것이 바로 동시 접근 제어 2️⃣ 잠금을 이용한 접근 제어 (Lock-based Control) 🔒 Lock의 기본 개념Lock은 "자원에 대한 접근권을 잠그는 기법".한 스레드가 Lock을 획득하면, 다른 스레드는 그 Lock이 해제될 때까지 대기. Java에서는 synchronized 키워드나 ReentrantLock이 대표적인 방법.public class Counter { private int count = 0; private final ReentrantLock lock = new ReentrantL..
DevOps
1️⃣ 메시징 시스템의 공통 목표서비스 간 결합도 낮추기트래픽 폭주를 흡수비동기 처리와 장애 복원력 확보신뢰성 있는 전달하지만 이 공통 목표를 어떤 방식으로 구현하느냐가 Kafka, RabbitMQ, Redis Pub/Sub의 근본적 차이. 2️⃣ Kafka — “로그 스트림 기반 이벤트 플랫폼” 🧠 개념 Kafka는 단순한 메시지 큐가 아니라 분산 로그 저장소.모든 메시지는 디스크에 Append-Only로 기록되고,Consumer Group이 각자 오프셋을 관리하며 읽음. ✅ 강점- 초고속 처리량- 리플레이 가능: retention 기간 동안 재소비 가능- 확장성: Broker + Partition 기반 선형 확장- Exactly-once 처리 지원 (Kafka Streams / Transacti..
1️⃣ 타임아웃 (Timeout)외부 서버가 느려지거나 응답하지 않으면,우리 서버의 스레드는 계속 대기하게 됨. 이런 요청이 쌓이면 스레드가 고갈되어 전체 서비스가 먹통이 됨. 이를 방지하기 위한 게 바로 타임아웃 설정. 타입설명Connection Timeout서버에 연결되는 데 걸리는 시간 제한Read Timeout연결은 됐지만 응답을 읽는 시간 제한Write Timeout요청 본문 전송에 걸리는 시간 제한 외부 API의 평균 응답 시간보다 2~3배 긴 타임아웃을 설정API마다 타임아웃 값을 다르게 설정 2️⃣ 재시도 (Retry)재시도는 일시적 실패를 자동으로 복구하기 위한 메커니즘.하지만 무턱대고 다시 시도하면오히려 중복 요청과 트래픽 폭증을 일으킬 수 있음. 지수적 백오프: 매번 대기 시간을 두 ..
1️⃣ CAP 정리란?분산 시스템에서는 Consistency, Availability, Partition Tolerance 세 가지를 동시에 만족할 수 없다 즉, 3개 중 2개만 선택할 수 있다는 것이 CAP의 핵심.항목의미C (Consistency, 일관성)모든 노드가 같은 데이터를 본다A (Availability, 가용성)모든 요청에 대해 응답을 반환한다 (성공 or 실패)P (Partition Tolerance, 분할 내성)네트워크 단절이 발생해도 시스템이 계속 동작한다 2️⃣ 각 개념 자세히 보기🧩 1. Consistency (일관성)모든 노드가 같은 데이터를 보고 있어야 한다는 뜻.즉, A 노드에 쓴 직후 B 노드에서 읽어도 동일한 값이 나와야 함. 예시: 은행 계좌 잔액이 여러 DB 노드에..
데이터베이스에 수십만, 수백만 건의 데이터가 쌓이면 검색 속도가 눈에 띄게 느려짐.SELECT * FROM user WHERE name = '영식'; 이 쿼리가 1초 이상 걸린다면, 문제는 단순히 CPU나 네트워크가 아님.대부분은 인덱스가 없거나 잘못 설정된 경우임. 1️⃣ 인덱스란?데이터베이스에서 인덱스는데이터를 빠르게 찾기 위한 별도의 자료 구조. 📖 책의 모든 페이지를 앞에서부터 한 장씩 넘기며 찾는 게 Full Scan 📚 목차를 보고 바로 해당 페이지로 가는 게 Index Scan 즉, 인덱스는 검색 성능을 높이기 위한 추가 데이터 구조(B-Tree, Hash 등)로,WHERE, JOIN, ORDER BY 등에 사용됨. 2️⃣ 인덱스가 없으면 어떤 일이 생길까?테이블에 인덱스가 없으면,..
대부분의 백엔드 애플리케이션은 DB와 끊임없이 통신함.문제는, DB와의 연결(Connection)을 매번 새로 여는 것이 꽤 비싼 연산이라는 점.그래서 등장한 것이 바로 "커넥션 풀". 1️⃣ DB 연결은 왜 느릴까?DB 커넥션을 맺는 과정은 단순히 Socket.open() 한 줄이 아님.아래와 같은 과정을 거침.네트워크 연결 생성 (TCP handshake)인증 정보 전달 세션 초기화이 모든 작업이 요청마다 일어나면,매 요청이 DB 연결 시간만큼 지연됨.트래픽이 많을수록 이 비용은 기하급수적으로 늘어남. 2️⃣ 커넥션 풀(Connection Pool)이란?DB 연결을 미리 만들어두고 재사용하자. 커넥션 풀은 DB 연결 객체를 미리 일정 개수만큼 생성해두고,요청이 들어올 때마다 그 중 하나를 빌려 쓰..
Git 명령어 몇 줄 치면 끝나긴 하는데, 이게 내부적으로는 어떤 객체가 만들어지고 어떤 포인터가 움직이는 걸까요? 이번 포스팅에서는 Git이 데이터를 어떻게 저장하는지, 커밋은 어떤 구조로 이루어져 있는지, 그리고 효율적인 협업을 위한 브랜치 전략까지 Git 활용법을 다룹니다. 🧱 Git은 데이터를 어떻게 저장할까?Git은 단순히 파일 스냅샷을 저장하는 도구가 아닙니다. 내부적으로는 SHA-1 해시 기반의 객체 저장소를 구성하며, 모든 커밋, 파일, 폴더는 특정한 객체 타입으로 관리됩니다. [Git의 세 가지 객체]- Blob: 실제 파일의 내용- Tree: 디렉토리 구조 및 파일 목록 (즉, 스냅샷)- Commit: 하나의 버전 스냅샷을 나타내는 객체로, 부모 커밋과 트리 객체, 메타 데이터를 포함..
프로젝트를 진행할 때, 주로 몇 명이서 작업을 하나요? 혼자만의 프로젝트를 진행할 수도 있겠지만, 대부분은 본인을 포함한 두 명이상으로 인원이 구성될 것입니다. 그리고 여러 명이 개발로 협업을 해야 할 경우, 대부분은 git을 사용하여 진행합니다. 브랜치를 통한 효율적인 협업을 진행할 수 있다는 것이 git을 사용하는 큰 이유입니다. 저도 이전 회사에서는 commit, push, pull 등의 아주 기본적인 명령어들 밖에 사용하지 않았지만, 이직을 한 뒤에는 초면인 git 명령어들을 많이 만나게 되었고 지금은 친해지려고 노력 중에 있습니다. 그들과 절친이 될 수 있게, 이번 포스팅에서는 협업할 때 쓰이는 여러 가지 Git 명령어들에 대해 알아보겠습니다. [stash & apply] commit을 사용하지..
※ 틀린 정보가 있을 수 있으니 양해 바랍니다. 새로운 프로젝트를 시작하다 보면, 어떤 DBMS를 사용해야 할지 선택하는 순간이 옵니다. 본인에게 가장 익숙하고 쉬운 DBMS를 선택하는 것도 방법 중에 하나지만, 시작하는 프로젝트의 특징을 알고 그거에 맞는 DBMS를 선택하는 것이 프로젝트 진행에 있어서 효율적인 방법일 것입니다. 이번 포스트에서는 DBMS(Database Management System)의 종류와 특징을 알아봅시다. DBMS 분류 DBMS는 크게 RDBMS와 NoSQL로 나뉘어져 있습니다. RDBMS NoSQL 테이블 간 관계를 정의 Key-Value, Document, Wide Column, Graph 명확한 데이터 구조 보장 자유로운 데이터 구조를 가짐 정해진 스키마로 인해 데이터가..