2025/02 3

[MSA] 분산 환경에서의 트랜잭션 처리 - 분산 트랜잭션과 보상 트랜잭션

서론 단일 서버와 DB 로 구성되는 Monolithic 서버에서는 하나의 API 로직 내부에서 특정 부분에서 실패가 발생 한다면, DB 의 rollback 을 이용해서 commit 전에 작업하던 모든 데이터를 처리하기 전 상태로 돌려놓을수가 있다.   하지만 서비스의 규모가 커지다 보면 성능이나 관리적 이슈로 인해 MSA(Micro Service Achitecture)로 넘어가게 되는데, MSA 에서는 API 서버와 DB가 서비스별로 나누어져 있다. 서버와 DB 가 나누어져 있기 때문에 Monolithic 에서처럼 DB rollback 만으로는 실패한 트랜잭션의 원복이 어렵게 된다. 이렇게 여러 리소스가 나누어져 있을 때의 트랜잭션을 "분산 트랜잭션" 이라고 하고, 분산 트랜잭션에서 실패가 발생했을 때 ..

개발자의 길 2025.02.13

[Database] MySQL 에서 Index 를 설계하고 추가하는 방법

이전에 올렸던 미니 e-commerce 프로젝트에서 제공하는 API 의 조회성능을 올려서 서비스를 좀더 향상시키고자 한다. 바로 이전 포스트에서 Redis 를 활용한 원격 캐싱 서버를 활용해 조회 성능을 높였는데, DB 인덱스를 추가하는 방법으로도 조회 성능을 높일 수 있다.  현재 서비스를 상용으로 올려서 운영중인 프로젝트가 아니기 때문에, 어떤 쿼리가 가장 많이 수행되고 있는지는 정확한 파악이 어렵다. 하지만 비즈니스적으로 자주 조회될 쿼리가 무엇인지는 추측이 가능하고, 테스트 코드를 실행시켰을 때 어떤 쿼리가 수행되는지 정도는 파악이 가능하다.  현재 제공하는 기능에서 사용하는 쿼리와 적용해볼 인덱스, 그리고 성능 향상점은 아래에 적어 놓았다.  테스트 데이터랜덤 값으로 생성한 100만개의 데이터..

개발자의 길 2025.02.12

[Cache] 백엔드 서버 입장에서의 캐싱 전략과 활용 방안에 대해

캐시 캐시는 데이터를 임시로 저장해 두는 임시 저장 장소를 의미한다. 모든 저장 장치는 각자 저장 속도나 읽기 속도가 다른데, 주로 좀더 빠른 저장이나 읽기 속도를 가졌지만 좀더 용량이 적거나 저장 시간이 적은 저장 장치를 캐시 역할로 둔다. 임시적으로 데이터를 저장해 두고 빠르게 읽기/쓰기를 하기 위해 캐시를 이용한다.  간단하게 예를 들자면 우리 컴퓨터의 SSD 와 RAM 메모리가 있다. 같은 가격대비 읽기쓰기 속도는 RAM 메모리가 더 빠르지만, 용량은 SSD 가 더 크고, RAM 메모리는 컴퓨터를 재부팅 시에 데이터가 휘발된다는 점이 있다.컴퓨터에서 엑셀을 실행시키고 스프레드시트를 작성하고, 읽는 과정에서 실시간으로 작업중인 데이터가 있다고 치자. 이 상황에서 데이터를 하나씩 읽고 작성할 때 마다..

개발자의 길 2025.02.04
반응형