반응형
분산락 적용 계기...현재 우리 서비스의 주 기능인 출발 알림 시간, 도착 예정 시간 목록 기능은 외부 API를 사용하고 있다.현재 사용하는 외부 API는 호출 횟수에 따라 정지, 과금 될 수 있어 정확한 호출 횟수가 필요하다.그렇기 때문에 API 호출 시 마다 호출 횟수를 카운팅해 DB에 저장하고 이를 관리자 페이지에서 확인하고 있다. 현재 우리 서비스의 핵심 기능(출발 알림, 도착 예정 시간 조회)들은 외부 API를 사용해 기능이 구현되어 있고외부 API를 자주 호출하면서 데이터 업데이트가 매우 빈번하게 발생한다.이로 인해 동시성 문제가 발생할 확률이 높았다. 따라서 외부 API 호출 카운팅에 대해 다음과 같은 요구사항이 필요했다. 외부 API 호출 성공 시 호출 횟수를 카운팅해야 함동시 요청 상황에..
강결합 되어 있던 외부 API...현재 진행하고 있는 약속 관리 프로젝트 '오디'는 약속에 참여한 참여자들 별로 도착 예정 시간 (ETA) 목록을 주고약속 장소에 늦지 않으려면 언제 출발해야할지를 알려주는 출발 알림 기능을 제공하고 있다.해당 기능을 구현하기 위해 참여자의 출발지 위, 경도와 약속 장소 위,경도를 받아 '오디세이'라는 외부 API를 사용해 소요 시간을 계산하고 있었다. 문제 상황하지만 여기서 문제가 발생한다.우아한테크코스에서는 각 프로젝트 팀들이 만든 서비스를 체험하기 위한 ‘런칭 페스티벌 행사’가 있다.이 날 너무 많은 약속방을 만들고 참가하는 바람에 Odsay API의 일 제한량인 1,000건을 초과해버렸다.이게 끝이면 좋겠지만 오디세이 API는 일 제한량을 초과할 경우 3일간 이용할..
테스트 코드로 Redis를 테스트하고 싶은데 어떻게 테스트할 수 있을까?꼭 로컬에서 Redis를 실행시켜놔야지만 테스트가 가능할까? Redis도 H2처럼 Embedde로 테스트할 수 잇는 Embedded Redis 라이브러리가 있긴하다.하지만 최근 커밋이 너무 오래된걸 봐선 관리가 되지 않고 있다.kstyrc/embedded-redis : 6년 전ozimov/embedded-redis : 4년 전사용해보진 않았지만 많은 오류들이 발견되어 개선하지 않고 있다 알고 있다. 우리에겐 TestContainers로 테스트시에만 Redis 컨테이너를 테스트할 수 있는 방법이 있다.TestContainers란?우선 테스트 컨테이너에 대해 간단히 설명하고 넘어가보려 한다.https://testcontainers.com..
시스템 계정과 일반 계정SYSTEM_USER 권한을 가지고 있느냐 없느냐에 따라 시스템 계정과 일반 계정으로 구분된다.시스템 계정은 DB 서버 관리자(DBA)를 위한 계정이고 일반 계정은 개발자를 위한 계정이다.시스템 계정은 다음과 같이 DBMS 관리와 관련된 중요 작업을 수행할 수 있는 권한이 있다.데이터베이스 관리 작업일반 계정 관리다른 세션 또는 그 세션에서 실행 중인 쿼리 강제 종료참고로 MySQL 서버에는 다음과 같이 내장된 계정들이 있다.SELECT user, host, account_locked FROM mysql.user WHERE user LIKE 'mysql.%';root@localhost를 제외한 위 3개의 계정은 내부적으로 다음과 같은 목적으로 사용된다. mysql.infoschem..
시스템 변수 (글로벌, 세션)시스템 변수는 MySQL 서버의 설정과 동작을 제어하는 변수들이다.MySQL 서버는 이러한 값이 설정된 파일 my.cnf(또는 my.ini)을 읽어 작동 방식, 메모리, 성능, 보안 등을 초기화한다. 시스템 변수 값을 확인하려면 다음과 같이 MySQL 서버에서 조회할 수 있다.SHOW VARIABLES; 시스템 변수(설정) 값이 어떻게 MySQL 서버와 클라이언트에 영향을 미치는지 판단하기 위해선다음과 같이 글로벌, 세션 변수를 구분할 수 있어야한다.GLOBAL 변수 : MySQL 서버에서 단 하나의 값을 가지며, 시스템에 영향을 미치는 변수이다.SESSION 변수 : 각 세션에만 적용되는 값으로 커넥션 단위로 값을 변경할 수 있다. 이제 시스템 변수에 대해 알아보자.시스템 ..
다음과 같은 Server - DB 아키텍처가 있다고 가정해보자.Source / Replica 구조의 Replication 통해 가용성과 읽기/쓰기 작업의 부하 분산을 확보했다.Replication에 대해 알아보고 싶다면 아래 포스팅을 참고하자.2024.11.09 - [◼ CS 기초 지식/[데이터베이스]] - [MySQL] DB 레플리케이션에 대해 알아보자. 하지만 데이터는 지속적으로 축적될 것이고 10억건의 데이터가 쌓였을 때도 문제가 없을까?인덱싱을 적절히 적용한다 하더라도 인덱스도 디스크 용량을 먹고 디스크 용량에도 제한이 있다.Scale Up에도 한계가 있는 것이다. 이 문제를 해결할 수 있는 파티셔닝과 샤딩에 대해 한번 알아보자.Partitioning (파티셔닝)테이블을 더 작은 테이블들로 쪼개는..