시스템 설계 및 디자인 패턴 3

엔터프라이즈 아키텍처는 냉소적이어야 한다.

회사에 입사를 하고 많은 프로젝트들을 거치며 꾸준히 느끼는 바가 있는데, 기본적으로 엔터프라이즈 아키텍처는 냉소적이어야 한다는 것이다. 실제 세상에서 다양한 물리적 혹은 논리적인 이유로 시스템들은 에러를 마주하게 된다. 그 어떤 큰 기업에서 운영하는 시스템도 에러로부터 자유로울 수는 없다는 것은 확실하다. 엔터프라이즈 아키텍처는 이러한 현실에 냉소적일 수 있는 아키텍처여야만 한다. 다른 API나 모듈 또는 컴포넌트가 언제든 에러를 낼 수 있다고 의심하고, 그들이 주기적으로 에러를 낼 것이라는 가정 하에 스스로를 지킬 수 있는 방벽을 덕지덕지 세워 놓아야만 한다. 서킷브레이커 도입을 통해 장애 전파를 막고, try-catch 등을 통해 적절한 레이어에서 적절하게 에러 처리를 할 수 있도록 코드를 짜야 한다..

Rate Limiter 시스템 디자인 및 설계 방안

Token Bucket토큰 버켓의 경우 사전에 정해진 용량을 갖는다. 토큰은 주기적으로 사전에 설정된 비율로 버켓에 저장된다. 그리고 버켓이 꽉차게 되면 정해진 용량을 초과하여 토큰을 추가하지 않는다.각 API 요청은 1개의 토큰을 사용한다. 요청이 오면 버켓에 적어도 1개의 토큰이 존재하는지 확인한다. 존재하는 경우 1개의 토큰을 버켓에서 꺼내고 요청이 처리된다. 버켓이 비어있는 경우 요청들은 버려진다.   위 사진을 보면 유저마다 분당 3개의 요청량 제한이 설정되어있다.1번 유저가 10:00:00에 첫 번째 요청을 보냈을 때 토큰은 3개가 존재하므로 해당 요청은 정상 처리되며 잔여 토큰은 2개로 감소한다.10:00:10에 유저의 두 번째 요청이 오고 토큰은 2개가 존재하기 때문에 정상 처리되며 잔여 ..

데이터 관리 패턴

데이터는 중앙화된 방식과 분산 방식 이렇게 2가지 방법으로 관리할 수가 있다. 1. 중앙 데이터 관리 중앙 데이터 관리 (centralized data management) 방식은 전통적인 데이터 중심 애플리케이션에서 가장 자주 사용하는 방식이었다. 모든 데이터를 단일 중앙 집중형 데이터베이스에 저장하는 방식으로 데이터를 저장 및 처리하도록 하는 것이다. 이 방식은 DB의 정규화가 가능하며, 아주 높은 데이터 일관성을 제공하는 등의 장점이 있다. 여러 컴포넌트가 데이터베이스의 모든 테이블에 접근할 수 있기 때문에 중앙 데이터 스토어가 여러 테이블에 데이터를 빠르게 저장하고 가져올 수 있다. 반면, 데이터베이스와 애플리케이션들 간에 강한 연관성이 생기게 되기에 Cloud-Native하지 못한 방법으로 취급..