동기/비동기/블로킹/논블로킹
동기(Synchronous), 비동기(Asynchronous), 블로킹(Blocking), 논블로킹(Non-blocking)은 I/O와 동시성 프로그래밍에서 자주 혼용되는 개념이다. 이 네 가지는 서로 독립된 ...
동기(Synchronous), 비동기(Asynchronous), 블로킹(Blocking), 논블로킹(Non-blocking)은 I/O와 동시성 프로그래밍에서 자주 혼용되는 개념이다. 이 네 가지는 서로 독립된 ...
웹 서버가 수만 개의 동시 접속을 처리하는 방법에는 두 가지 철학이 있다. 하나는 “요청마다 사람을 붙인다”는 방식이고, 다른 하나는 “한 사람이 여러 일을 번갈아 처리한다”는 방식이다. Nginx는 후자를 극...
로그인 세션이 24시간 뒤 자동 만료되지 않는다면 어떻게 될까? 사용자가 로그아웃을 잊으면 그 세션은 영원히 메모리에 남는다. 수백만 명이 사용하는 서비스라면 Redis 메모리가 조금씩, 그러나 확실히 고갈된다...
새벽 2시, Redis 마스터 서버의 디스크가 고장났다. 복제 없이 단일 Redis만 운영 중이었다면? 캐시 데이터는 전부 날아간다. 서비스가 재개되어도 모든 캐시가 비어있으니 DB에 쿼리가 폭발적으로 몰린다....
채팅 서비스를 서버 3대로 운영한다고 가정하자. 사용자 A는 서버 1에 WebSocket으로 연결되어 있고, 사용자 B는 서버 2에 연결되어 있다. A가 B에게 메시지를 보내면 어떻게 되는가? 서버 1은 서버 ...
재고 감소 로직을 생각해보자. GET으로 재고를 읽고, 0보다 크면 DECR로 줄인다. 코드로 보면 아무 문제가 없다. 그런데 GET과 DECR 사이 0.1밀리초의 틈에 다른 요청이 끼어들면 재고가 -1이 된다...
쿠팡 블랙프라이데이 자정, 한정판 운동화 1켤레에 5만 명이 동시 접속한다. 서버 20대가 동시에 “재고 1개 남음”을 확인하고 저마다 결제를 진행한다면? 재고는 1개인데 20명에게 팔리는 참사가 벌어진다. 분...
실시간 랭킹을 구현해야 한다. MySQL로 매 요청마다 ORDER BY score DESC를 돌리면 수천 명이 동시 접속할 때 DB가 버티지 못한다. Redis Sorted Set 하나로 수백만 명의 점수를 실...
새벽 2시, 서비스가 죽었다는 알림이 온다. Redis 마스터 서버 한 대가 다운됐다. 재시작하려면 엔지니어가 일어나서 접속해야 한다. 복구까지 20분. 그 20분 동안 캐시가 없으니 DB에 쿼리가 몰리고, D...
OSI(Open Systems Interconnection) 7계층 모델은 ISO가 1984년에 제정한 네트워크 통신 표준 모델이다. 서로 다른 제조사의 네트워크 장비와 소프트웨어가 상호 운용될 수 있도록 통신...