RPS vs TPS

HoJeong Choi·2025년 4월 3일
0

서버 성능 측정

목록 보기
2/2

RPS 와 TPS 차이점

RPS (Requests Per Second)

  • 정의: 초당 처리할 수 있는 요청(request)의 수
  • 특징: 웹 서버나 API 서비스의 성능을 측정하는 데 주로 사용
  • 관점: 클라이언트 관점에서 서버가 얼마나 많은 요청을 처리할 수 있는지 측정
  • 사용 예: Apache, Nginx 같은 웹 서버의 성능 벤치마킹

TPS (Transactions Per Second)

  • 정의: 초당 처리할 수 있는 트랜잭션의 수
  • 특징: 데이터베이스나 결제 시스템 같은 비즈니스 로직을 포함하는 작업 단위를 측정
  • 관점: 서버나 시스템 내부에서 비즈니스 로직 단위의 처리량을 측정
  • 사용 예: 데이터베이스 시스템, 금융 거래 플랫폼

핵심 차이점

  1. 작업 단위의 복잡성:

    • RPS: 단순 요청(HTTP GET/POST 등)
    • TPS: 비즈니스 로직이 포함된 복잡한 작업 단위(여러 DB 작업을 포함한 하나의 트랜잭션)
  2. 측정 범위:

    • RPS: 네트워크 계층의 요청을 주로 측정
    • TPS: 애플리케이션 계층의 비즈니스 프로세스를 측정
  3. 활용 목적:

    • RPS: 웹 서버의 처리 용량과 성능 측정
    • TPS: 비즈니스 로직 처리 능력과 시스템 확장성 측정

일반적으로 하나의 트랜잭션은 여러 개의 요청으로 구성될 수 있기 때문에 TPS 값은 보통 RPS보다 낮은 경향이 있습니다.

단일 트랜잭션과 복잡한 트랜잭션 예시

단일 트랜잭션 예시

1. 사용자 프로필 조회 API

-- 단일 테이블 조회
SELECT * FROM users WHERE user_id = 123;
  • 특징: 하나의 요청이 하나의 간단한 DB 쿼리로 처리됨
  • RPS와 TPS 관계: 거의 1:1로 대응
  • 플로우:
    1. 클라이언트가 API 호출 (1 요청)
    2. 서버가 단일 DB 쿼리 실행 (1 트랜잭션)
    3. 결과를 클라이언트에 반환

2. 상품 가격 업데이트 API

BEGIN;
UPDATE products SET price = 29.99 WHERE product_id = 456;
COMMIT;
  • 특징: 하나의 테이블에 대한 단일 업데이트 작업
  • RPS와 TPS 관계: 1:1 대응
  • 플로우:
    1. 클라이언트가 가격 업데이트 요청 (1 요청)
    2. 서버가 하나의 트랜잭션으로 처리 (1 트랜잭션)

복잡한 트랜잭션 예시

1. 주문 처리 API

BEGIN;
-- 주문 정보 저장
INSERT INTO orders (user_id, order_date, total_amount) VALUES (123, NOW(), 129.99);
SET @order_id = LAST_INSERT_ID();

-- 주문 상품 항목 저장
INSERT INTO order_items (order_id, product_id, quantity, price) VALUES (@order_id, 456, 2, 49.99);
INSERT INTO order_items (order_id, product_id, quantity, price) VALUES (@order_id, 789, 1, 30.01);

-- 재고 업데이트
UPDATE inventory SET stock_quantity = stock_quantity - 2 WHERE product_id = 456;
UPDATE inventory SET stock_quantity = stock_quantity - 1 WHERE product_id = 789;

-- 사용자 포인트 사용 처리
UPDATE users SET reward_points = reward_points - 500 WHERE user_id = 123;

-- 결제 처리 기록
INSERT INTO payments (order_id, payment_method, amount, status) VALUES (@order_id, 'credit_card', 129.99, 'completed');

COMMIT;
  • 특징: 여러 테이블에 대한 다중 작업(삽입, 업데이트)이 하나의 논리적 단위로 처리됨
  • RPS와 TPS 관계: 1 RPS : 1 TPS이지만, 트랜잭션 내부 복잡도가 높음
  • 플로우:
    1. 클라이언트가 주문 요청 (1 요청)
    2. 서버가 여러 단계의 DB 작업을 단일 트랜잭션으로 처리 (1 트랜잭션, 7개 쿼리)

2. 계좌 이체 API

BEGIN;
-- 출금 계좌 잔액 확인
SELECT balance INTO @current_balance FROM accounts WHERE account_id = 1001 FOR UPDATE;

-- 잔액 검증
IF @current_balance < 1000 THEN
    ROLLBACK;
    SIGNAL SQLSTATE '45000' SET MESSAGE_TEXT = 'Insufficient funds';
END IF;

-- 출금 계좌에서 금액 차감
UPDATE accounts SET balance = balance - 1000 WHERE account_id = 1001;

-- 입금 계좌에 금액 추가
UPDATE accounts SET balance = balance + 1000 WHERE account_id = 2001;

-- 거래 기록 저장
INSERT INTO transactions (from_account, to_account, amount, transaction_date) 
VALUES (1001, 2001, 1000, NOW());

-- 알림 메시지 저장
INSERT INTO notifications (user_id, message, created_at) 
VALUES (
    (SELECT user_id FROM accounts WHERE account_id = 1001), 
    'Transfer of $1000 to account #2001 completed', 
    NOW()
);

COMMIT;
  • 특징: 데이터 일관성이 중요한 여러 작업이 원자적으로 처리됨
  • RPS와 TPS 관계: 1 RPS : 1 TPS이지만, 복잡한 비즈니스 로직과 다수의 DB 작업 포함
  • 플로우:
    1. 클라이언트가 이체 요청 (1 요청)
    2. 서버가 트랜잭션 내에서 여러 검증 작업 및 데이터 처리 수행 (1 트랜잭션, 여러 쿼리)

다중 트랜잭션 요청 예시 (1 RPS : 여러 TPS)

마이크로서비스 환경의 주문 처리

클라이언트 -> API 게이트웨이 -> 여러 마이크로서비스
  • 플로우:

    1. 클라이언트가 주문 생성 API 호출 (1 요청)
    2. API 게이트웨이가 요청을 여러 서비스로 라우팅
    3. 주문 서비스: 주문 정보 저장 (트랜잭션 1)
    4. 인벤토리 서비스: 재고 감소 처리 (트랜잭션 2)
    5. 결제 서비스: 결제 처리 (트랜잭션 3)
    6. 알림 서비스: 주문 확인 메일 발송 (트랜잭션 4)
  • RPS와 TPS 관계: 1 RPS : 4 TPS

  • 특징: 분산 트랜잭션으로, 각 서비스마다 독립적인 DB 트랜잭션 발생

이처럼 단일 트랜잭션과 복잡한 트랜잭션의 차이는 작업의 복잡도와 관련 데이터베이스 작업의 수에 있습니다. 복잡한 비즈니스 로직이나 분산 환경에서는 하나의 요청이 여러 트랜잭션을 발생시켜 RPS와 TPS 간의 차이가 더 명확하게 나타납니다.

0개의 댓글