데이터베이스 성능 최적화를 공부하다 보면 "수정(UPDATE)과 삭제(DELETE)가 잦은 컬럼에는 인덱스를 신중하게 걸어야 한다"는 조언을 자주 듣게 됩니다. 왜 그럴까요? 단순히 인덱스를 관리하는 비용 때문일까요? 오늘은 MySQL InnoDB 엔진의 내부 동작 방식을 통해, 실제 데이터는 10만 건인데 인덱스만 비대해져 성능이 갉아먹히는 이유를 '책의 색인' 비유와 함께 파헤쳐 보겠습니다.1. 핵심 개념: DB는 즉시 삭제하지 않는다 (Ghost Record)데이터베이스는 DELETE나 UPDATE 명령이 들어왔을 때, 해당 데이터를 즉시 물리적으로 지우지 않습니다. 대신 "삭제됨(Deleted Mark)" 표시만 해둡니다. 왜 바로 삭제하지 않을까?속도 때문입니다: 즉시 물리적으로 삭제하면 인덱스..
금융 서비스의 핵심은 데이터 무결성이라고 생각합니다. 단순히 잔액을 옮기는 기능을 넘어, 수천 건의 요청이 동시에 발생해도 데이터가 꼬이지 않고 네트워크 오류가 있어도 중복 거래가 발생하지 않도록 안정적인 송금 시스템을 설계·구현하며 겪은 과정을 기록합니다. 본 글에서 ‘송금’은 타행 이체가 아닌 동일 시스템 내 계좌 간 이체를 의미합니다.1. 프로젝트 목표 및 핵심 설계 프로젝트는 확장 가능하고 신뢰할 수 있는 송금 시스템을 구축을 목표로 하며 아래 4가지 원칙을 준수했습니다.데이터 정합성: 모든 금융 거래의 원자성 보장동시성 제어: 동일 계좌에 대한 경합 상황 해결멱등성 보장: 동일 요청 재시도 시 중복 처리 방지성능 최적화: 대량 거래 발생 시에도 빠른 한도 조회 및 잔액 갱신2. DB 모델링테이블..
선착순 100명에게 쿠폰을 지급하는 이벤트. 단순해 보이지만, 순간적으로 수만 명이 “광클”을 시작하면 서버는 아수라장이 된다. 이 문제를 해결하기 위해 고민했던 과정과 내가 선택한 해결책을 정리해 본다.1. 요구사항선착순으로 100명에게 할인 쿠폰을 제공한다.101개 이상이 지급되면 안 된다.순간적으로 몰리는 트래픽을 감당해야 한다.2. 동시성 제어, 어떤 도구를 쓸 것인가? 가장 먼저 떠오른 3가지 방법의 한계를 정리해 봤다.1️⃣ synchronizedsynchronized는 JVM 내부에서만 동작하는 락이다. 단일 서버에서는 동시성 문제를 막을 수 있지만, 서버가 여러 대로 확장되면 락이 공유되지 않는다. 그 결과 여러 서버에서 발급 로직이 동시에 실행되어 중복 발급(경쟁 조건)이 발생할 수 있다..
대규모 트래픽을 처리하는 게시판 서비스에서 게시글 목록 조회는 가장 빈번하게 호출되는 핵심 API입니다. 특히 페이지 번호 기반 페이징에서 offset이 커질수록 느려지는 문제는 많은 개발자가 겪는 이슈입니다. 해당 내용은 인프런 강의를 듣고 정리한 것으로, 실제 제 프로젝트에도 도움이 많이 되어 글로 남깁니다. DB는 miaradb 11입니다.1. 페이지 번호 방식의 문제점총 게시글 1000만 건, 페이지당 30개, 4페이지 조회 (offset = 90)select * from articlewhere board_id = 1order by created_at desclimit 30 offset 90;조회 속도: 13s 456msEXPLAIN: type = ALL, Extra = Using where; U..
NAT 인스턴스퍼블릭 서브넷에 배치된 EC2 인스턴스가 프라이빗 서브넷의 인터넷 요청을 대신 전달(SNAT) 하는 구조로 즉 인터넷으로 나가는 프록시 서버 역할을 하는 EC2 특징직접 관리, EC2 크기와 설정에 따라 성능이 달라진다. 비용이 매우 저렴하지만 운영 부담 존재한다. t3.micro 기준 시간당 0.013달러의 비용이 발생한다. 더 저렴한 t4g.nano은 0.0052달러이다. NAT 게이트웨이AWS에서 완전 관리형으로 제공하는 NAT 서비스로 퍼블릭 서브넷에 생성 후 Elastic ip를 연결하면 프라이빗 서브넷 인스턴스들이 외부로 나갈 수 있다. 특징관리 불필요하고 비용은 비싸지만 안정적이고 유지보수 부담이 적다. 서울 기준 NAT 게이트웨이 요금 0.059 달러의 비용이 발생한다. 24..
JWT란?JWT(json web token)는 클라이언트와 서버 간 인증 정보를 토큰 형태를 안전하게 전달하기 위한 표준이다. 기존 세선/쿠키 방식과 달리 서버는 상태를 저장하지 않고 토큰 자체만으로 정보의 유효성을 검증할 수 있어 서버 자원 소모를 줄일 수 있다. 즉 서버가 세션을 들고 있지 않아도 클라이언트가 JWT만 가지고 있다면 인증이 가능하다. 그래서 Stateless 인증 방식이라고 부른다.3가지 구성 요소구분설명Header(헤더)토큰의 타입과 해싱 알고리즘(HS256, HS512) 정보가 담김Payload(정보)유저 정보, 권한, 만료시간 등이 포함Signature(서명)위 두 정보를 서버의 비밀키로 서명하여 생성, 서버는 이 서명을 통해 토큰의 위변조 여부를 확인JWT를 관리하는 대표적인 ..
테라폼(Terraform)하시코프에서 개발한 오픈소스 코드형 인프라(IaC) 도구입니다. 코드를 사용하여 인프라를 선언적으로 정의하고 프로비저닝(구축 및 관리)할 수 있게 해 준다. 테라폼은 사용자가 원하는 인프라의 최종 상태를 HCL이라는 전용 설정 언어를 사용하여 파일(.tf)로 작성한다. 이 코드는 단순히 명령을 순차적으로 나열하는 것이 아니라 어떤 리소스가 필요하다 고 선언하는 방식이다.핵심 특징이름설명IaC(Infrastructure as Code)인프라를 수동으로 설정하는 대신 코드로 정의하고 관리하는 자동화, 일관성, 반복 가능성을 확보한다.선언적사용자는 무엇을 원하는지를 코드로 선언하면 테라폼이 어떻게 해당 상태에 도달할지(생성, 수정, 삭제)를 결정하고 실행한다.멀티 클라우드 지원AWS,..
- Total
- Today
- Yesterday
- operators
- permutations
- Lower
- If
- combinations
- Built-in Functions
- Upper
- isalpha
- function
- Python
- Method
- Lambda
- find
- bool
- counter
- zip
- isdigit
- for
- index
| 일 | 월 | 화 | 수 | 목 | 금 | 토 |
|---|---|---|---|---|---|---|
| 1 | 2 | 3 | 4 | 5 | 6 | 7 |
| 8 | 9 | 10 | 11 | 12 | 13 | 14 |
| 15 | 16 | 17 | 18 | 19 | 20 | 21 |
| 22 | 23 | 24 | 25 | 26 | 27 | 28 |