2026.04.10E·90Node.js 네이티브 TypeScript 지원: 이제 ts-node/tsx 없이 실행한다
Node.js 22.6.0에 실험적으로 추가되고 최신 버전에 점차 내장되고 있는 네이티브 TypeScript 실행 기능(--experimental-strip-types)에 대한 나의 이해와 실제 사용 소감.
Node.jsTypeScriptRuntime
→2026.03.11B·08WebSocket 실전 패턴: 실시간 알림을 직접 구현하며 배운 것들
실시간 알림을 구현하려고 WebSocket을 공부했다. HTTP 폴링부터 Supabase Realtime까지, 실시간 통신의 선택지와 실전 패턴을 정리했다.
WebSocketRealtimeSupabase Realtime
→2026.03.10F·187API 버저닝 전략: URL vs Header vs Content Negotiation
API는 한번 공개하면 마음대로 바꾸지 못한다. 클라이언트를 깨트리지 않으면서 API를 진화시키는 버저닝 전략 4가지를 비교하고, GitHub·Stripe·Twilio의 실제 선택을 분석한다.
API DesignRESTVersioning
→2026.03.06B·06REST API 설계: 내 API를 3개월 후의 내가 이해할 수 있을까?
3개월 전에 만든 내 API를 보고 이게 뭔지 몰랐다. 일관된 REST API를 설계하기 위한 네이밍, 버전 관리, 페이지네이션 패턴을 정리했다.
REST APIAPI DesignBackend
→2026.02.15F·185API 보안 실제: Rate Limiting, API Key 관리, IP 제한
공개 API를 운영하다 보면 예상치 못한 대량 요청에 시달릴 수 있다. Rate Limiting과 API Key 관리로 API를 보호하는 방법을 정리했다.
API SecurityRate LimitingAPI Key
→2025.12.07G·29내 ID가 왜 달라요? (auth.uid() vs user_id)
로그인한 유저 ID를 가져오려고 했는데 `auth.uid()`가 에러를 뱉거나 엉뚱한 값을 줍니다. RLS(Row Level Security)에서 `auth.uid()`를 올바르게 사용하는 법과 `security definer` 함수의 비밀.
SupabaseAuthPostgres
→2025.12.06G·28JOIN을 했는데 데이터가 안 와요 (Foreign Key와 Supabase)
게시글(Post)을 가져올 때 작성자(User) 정보도 같이 보고 싶은데 `null`만 뜹니다. Foreign Key 설정부터 `select(*, users(*))` 문법, 그리고 M:N 관계, Inner Join, Count까지 완벽하게 파헤칩니다.
SupabaseSQLDatabase
→2025.12.05G·27Supabase 데이터가 안 보여요 (RLS의 배신)
DB에 데이터가 분명히 있는데, 프론트엔드에서는 빈 배열(`[]`)만 옵니다. Supabase 초보자가 가장 많이 겪는 RLS(Row Level Security) 정책 위반 문제와 해결법을 정리해봤습니다.
SupabaseRLSDatabase
→2025.09.10B·02ACID: 데이터베이스의 절대 약속
은행이 NoSQL 대신 RDBMS를 쓰는 이유. All or Nothing(원자성)부터 트랜잭션 격리 수준(Isolation Levels), 데드락(Deadlock), 그리고 시니어 개발자가 되는 관점까지 완벽 정리.
CSBackendDatabase
→2025.09.05B·01Redis: 캐시 그 이상의 전략 (Cache-Aside부터 Eviction까지)
Redis를 그냥 '빠른 저장소'로만 쓰고 계신가요? Look-aside, Write-Through 전략의 장단점과 LRU 알고리즘, 그리고 데이터가 날아가지 않게 하는 RDB/AOF 지속성 설정을 정리합니다.
CSBackendRedis
→2025.08.29I·15기능 테스트는 했는데 왜 서버가 터질까: 부하 테스트 입문
기능 테스트는 통과했는데 트래픽이 몰리니 서버가 뻗었다는 사례는 흔하다. '나 혼자 100번' 테스트와 '100명이 동시에 1번' 테스트는 완전히 다른 이야기다. k6로 부하 테스트를 시작하고 병목을 찾아 해결하는 과정을 정리해본다.
Load TestingPerformancek6
→2025.08.20A·03DB를 바꾸려다 지옥을 맛봤다: 헥사고날 아키텍처 생존기
서비스 초기, MongoDB를 쓰다가 RDB로 마이그레이션 해야 할 순간이 왔습니다. 하지만 비즈니스 로직과 DB 코드가 뒤엉켜 있어 지옥을 경험했죠. 헥사고날 아키텍처(포트와 어댑터)를 도입하여 비즈니스 로직을 순수하게 지켜내고, 기술 부채로부터 탈출한 경험을 공유합니다.
ArchitectureHexagonal ArchitectureClean Code
→2025.08.20B·03내 서버를 내가 DDOS 칠 뻔했다 (Rate Limiting 완벽 가이드)
Rate Limiter 없이 API를 공개하면 사용자 자신이 DDOS 공격자가 될 수 있다. Token Bucket, Leaky Bucket, Sliding Window 등 핵심 알고리즘을 비교하고, Redis와 Lua Script를 사용해 분산 환경에서도 완벽하게 동작하는 Rate Limiter를 구현하는 방법을 정리해본다.
System DesignSecurityNginx
→2025.08.20E·01REST API가 느리다고 느껴질 때: gRPC 찍먹하기 (Protocol Buffers, HTTP/2)
JSON은 무겁고 REST는 수다스럽습니다. 마이크로서비스 간 통신 속도를 극한으로 끌어올리기 위해 구글이 만든 gRPC의 세계로 초대합니다. Protocol Buffers의 직렬화 마법, HTTP/2의 멀티플렉싱 성능, 그리고 4가지 스트리밍 통신 패턴(Unary, Server/Client/Bi-directional Streaming)을 실제 코드 예제와 함께 다뤄봤습니다. 브라우저에서의 제약사항(gRPC-Web)과 로드밸런싱 이슈도 다룹니다.
gRPCBackendMicroservices
→2025.07.20A·02모놀리식 vs 마이크로서비스: 아키텍처 전쟁의 끝은? (완벽 가이드)
현대 소프트웨어 아키텍처 가이드. DDD, 콘웨이의 법칙, SAGA 패턴, CQRS, 모듈러 모놀리스, 그리고 실제 마이그레이션 전략(Strangler Fig)까지.
ArchitectureMSABackend
→2025.07.15Y·06내 DB가 점 하나(') 때문에 털렸다 (SQL Injection)
SQL Injection으로 관리자 권한을 탈취당하고 데이터를 날린 경험담. 왜 Prepared Statement가 유일한 해결책인지, ORM은 정말 안전한지 파헤쳐봤습니다.
SecurityDatabaseBackend
→2025.07.10D·02SQL vs NoSQL: 데이터베이스 전쟁의 승자는? (완벽 가이드)
RDBMS와 NoSQL의 아키텍처(B-Tree vs LSM), CAP 이론, ACID 트랜잭션 격리 수준, 그리고 샤딩 전략과 NewSQL까지.
DatabaseSQLNoSQL
→2025.07.06B·01코드 한 줄이 DB를 죽인다: N+1 문제 완전 정복
기능 하나를 추가했을 뿐인데, DB CPU가 100%를 찍는 상황이 있다. 원인은 ORM의 '지연 로딩'이 만든 N+1 문제다. 1000번의 쿼리를 1번으로 줄인 최적화 과정과, 주니어 개발자가 흔히 저지르는 ORM 실수들을 정리해본다.
DatabaseORMPerformance
→2025.06.12S·07MSA의 문지기, API Gateway: 구현부터 모니터링까지
마이크로서비스 아키텍처(MSA)에서 API Gateway가 필수적인 이유를 '호텔 프론트 데스크' 비유로 설명합니다. Kong, Nginx, AWS API Gateway 비교 및 Rate Limiting, GraphQL 통합, Observability까지 심층 분석.
MSAAPI GatewayBackend
→2025.06.10S·06DB 샤딩(Sharding): 10억 건 데이터를 처리하는 유일한 방법
테이블 하나에 10억 개의 행이 쌓이면 인덱스도 소용없습니다. 수직 파티셔닝(Vertical)과 수평 샤딩(Horizontal)의 차이, 일관된 해싱(Consistent Hashing), 그리고 샤딩의 치명적 단점인 JOIN 문제를 분석합니다.
System DesignDatabaseBackend
→2025.06.02S·05로드 밸런서: 서버가 100만 명을 버티는 기술 (L4 vs L7 완벽 분석)
트래픽 폭주로 서버가 죽는 것을 막으려면? L4(전송 계층)와 L7(응용 계층)의 차이, 라운드 로빈부터 IP 해시까지의 알고리즘, 그리고 Nginx 실제 설정법을 다룹니다.
System DesignNetworkInfrastructure
→2025.05.27F·118솔팅(Salting) & 페퍼(Pepper): 비밀번호를 요리하는 법
단순히 해시(Hash)만 하면 1초 만에 뚫립니다. 레인보우 테이블 공격을 막기 위해 소금(Salt)과 후추(Pepper)를 치는 원리.
CSSecurityHash
→2025.05.25E·01클린 아키텍처(Clean Architecture): 변하지 않는 핵심을 지켜라
로버트 C. 마틴(Uncle Bob)이 제안한 클린 아키텍처의 핵심은 무엇일까요? 양파 껍질 같은 계층 구조와 의존성 규칙(Dependency Rule)을 통해 프레임워크와 UI로부터 독립적인 소프트웨어를 만드는 방법을 정리합니다.
Software ArchitectureClean CodeDesign Patterns
→2025.05.24S·02서킷 브레이커(Circuit Breaker): 분산 시스템의 두꺼비집
집에 누전이 발생하면 두꺼비집이 내려가 전체 정전을 막습니다. 마이크로서비스에서도 한 서비스의 장애가 전체로 전파되는 것을 막기 위해 서킷 브레이커 패턴과 벌크헤드(Bulkhead) 패턴이 필수적입니다.
System DesignMicroservicesResilience
→2025.05.20F·110CORS: 프론트엔드 개발자의 영원한 숙적
빨간색 에러 메시지를 보고 당황하셨나요? 브라우저가 당신을 괴롭히는 게 아니라 보호하고 있는 겁니다.
CSNetworkWeb
→2025.05.20S·01캐싱 전략(Caching Strategies): 성능 최적화의 꽃
캐시를 어디에, 어떻게 배치해야 할까? Cache-Aside, Read-Through, Write-Back 등 5가지 핵심 패턴과 캐시 스탬피드(Thundering Herd) 현상을 막는 방법을 상세히 다뤄봤습니다.
System DesignBackendPerformance
→2025.05.17F·106GraphQL vs REST: 뷔페 먹을래? 정식 먹을래?
페이스북은 왜 REST API를 버렸을까? 원하는 데이터만 쏙쏙 골라 담는 GraphQL의 매력과 치명적인 단점 (캐싱, N+1 문제) 분석.
CSWebAPI
→2025.05.16D·01DB 인덱스(Index)의 원리: B-Tree를 모르면 쿼리를 튜닝할 수 없다
개발자가 꼭 알아야 할 데이터베이스 인덱스의 핵심 원리. Balanced Tree 구조가 왜 검색 속도를 획기적으로 높이는지, Hash Index와는 무엇이 다른지, 그리고 개발자가 흔히 저지르는 인덱스 실수들을 파헤칩니다.
DatabaseSQLOptimization
→2025.05.10W·01쿠키(Cookie) vs 세션(Session): 상태 관리의 양대 산맥 (대규모 업데이트)
HTTP는 기억상실증 환자입니다. 서버가 클라이언트를 기억하게 만드는 두 가지 방법론의 차이와 현대의 JWT 인증 방식 비교.
WebHTTPAuth
→2025.04.12F·75큐(Queue): 공평함의 미학 (완전정복)
맛집 줄 서기부터 롤(LoL) 매칭, 그리고 백엔드의 핵심인 메시지 큐(Kafka)까지. 선형 큐의 문제점, 원형 큐(Ring Buffer) 구현, 그리고 스레드 안전한 Blocking Queue까지 파헤칩니다.
CSDataStructureQueue
→2025.01.25F·06스택(Stack)과 큐(Queue): 개발자가 줄을 서는 방법
프링글스 통(Stack)과 맛집 대기 줄(Queue). 가장 기초적인 자료구조지만, 이걸 모르면 재귀 함수도 메시지 큐도 이해할 수 없습니다.
CSDataStructureStack
→