전체 글 4

'따닥' 으로 인한 동시성 문제 해결 해보기

개요 '따닥' 으로 발생할 수 있는 동시성 문제를 해결하는 방법을 알아보고, 몇 가지 시나리오에 대한 실험으로 이를 검증해보겠습니다. '따닥'이란? API 요청이 불필요하게 연속적으로 발생하는 상황을 이야기합니다. 네트워크 지연이나 버튼을 '따닥' 클릭하는 경우 발생할 수 있습니다. 이 문제는 머리 아픈 동시성 문제로 이어질 수 있어서 적절한 조치가 필요합니다. 이 글에서는 서버측에서 따닥으로 인한 동시성 문제를 해결하는 방법을 알아보겠습니다. 문제 정의 '따닥'이 정확히 어떤 과정으로 문제를 발생시키는지, 그리고 해결해야 할 부분은 무엇인지 살펴보겠습니다. 동시성 문제를 고려하지 않은, 곧 파산할 위기인 은행을 예로 들겠습니다. 1. 사용자의 계좌에 1000원이 있습니다. 2. 사용자가 100원 출금 ..

실험실 2024.04.09

사용자 수에 따른 규모 확장성

가상 면접 사례로 배우는 대규모 시스템 설계 기초 1장 내용을 정리한 글입니다. 개요 한 명의 사용자를 지원하는 시스템에서 출발하여 단계적으로 몇 백만 사용자를 지원하는 시스템을 설계한다. 단일 서버 모든 컴포넌트가 단 한 대의 서버에서 실행되는 간단한 시스템 웹 앱, 데이터베이스, 캐시 등이 전부 한대에서 실행된다. 사용자의 요청은 DNS를 통해 ip 주소를 얻어낸 후 전달된다. 데이터베이스 분리 웹 서버 계층과 데이터베이스 서버 계층을 독립적으로 확장할 수 있게 된다. 수직적 확장(Scale Up) vs 수평적 확장(Scale Out) 수직적 확장 CPU, RAM 등 서버 성능을 업그레이드 하는 것을 의미한다. 서버 성능을 업그레이드하는 데에는 물리적, 비용적 한계가 있다. 장애에 대한 복구, 다중화..

서재 2024.03.28

AWS API Gateway 배포 자동화 해보기

서론 API 개발 후에 매번 콘솔에서 환경 별 API Gateway에 리소스와 메서드를 배포해야 했다. 이는 귀찮을 뿐만 아니라 휴먼 에러를 발생시키기도 하는 작업이라 자동화를 고려하기 위한 실험을 진행해보았다. 어떤 작업을 해야하나? API에 대한 리소스, Method를 생성한다. (Optional) 인증이 필요하다면, Authorizer(권한 부여자) 연결 리버스 프록시 설정 {elb endpoint}/{path} 형태로 된 url에 연결 http 통합 proxy 설정 어떻게 작업할까? AWS boto3 API 문서 AWS boto3와 Python을 이용하여 리소스와 메서드를 배포하는 코드를 작성한다. 0. API Gateway 생성 환경 별 API Gateway는 미리 생성해두었다. 1. API p..

실험실 2024.03.28

로컬 테스트를 성공한 로직이 개발 서버에서 실패했다

개요 로컬 테스트를 성공한 로직이 개발 서버에서 실패했습니다. 심지어 개발 DB를 로컬 테스트에 붙여 실행해봐도 성공합니다. 이유가 무엇이었을까요? 문제 정의 문제는 DB와 관련된 로직에서 발생했습니다. 문제가 발생한 로직을 간단히 표현해 보았습니다. 1. 객체를 DB에 저장 2. DB에 저장된 객체 개수에 따른 로직 실행 // 객체 개수 오류! 객체를 DB에 저장하고 DB에 저장된 객체 개수에 따른 로직을 실행합니다. 이상할 것이 없는 로직이라 생각했고, 로컬 테스트도 잘 통과했습니다. 하지만 개발서버 테스트에서는 문제가 생겼죠. 테스트는 2번에서 구한 객체 개수가 방금 저장한 객체를 반영하지 못해 실패했습니다. 왜 이런 문제가, 그것도 개발 서버에서만 발생했던 것일까요? DB Replication (..

트러블 슈팅 2024.03.28