버프·디버프 중복 그룹 로직 개선
강한 효과와 긴 지속시간이 충돌할 때의 우선순위·승계 규칙 설계
실무 프로젝트 · 모바일 RTS MMORPG
30초 요약
동일 중복 그룹 내 버프·디버프가 동시에 존재할 때, 단순 덮어쓰기나 제거가 아니라 최종 수치 절대값과 남은 지속시간을 기준으로 적용/대기/승계 규칙을 나누는 개선안을 설계했다. Battle Start Status 기준 계산과 실시간 스탯 계산을 구분하고, Apply / Expire / Dispel 시점의 재평가 흐름을 정의했다.
핵심 축: 절대값 우선순위 · Standby 승계 · 재평가 시점 명세
문제 상황
수치가 높지만 지속 시간이 짧은 버프와, 수치는 낮지만 지속 시간이 긴 버프가 같은 중복 그룹에 있을 때 유저는 강한 버프가 끝난 뒤 남은 버프 효과를 기대한다. 기존 구조가 이를 자연스럽게 처리하지 못하면 버프 사용 경험이 끊기거나 손해처럼 느껴질 수 있다.
진행 내용
- 중복 그룹 우선순위 규칙 설계 (최종 수치 절대값 기준)
- Standby 상태 정의 (지속시간은 흐르되 효과 미적용)
- Apply / Expire / Dispel 재평가 흐름 명세
- Battle Start Status vs 실시간 Stat 계산 컬럼 구분
- 상태이상·디스펠·중복 그룹 테스트 세팅까지 예외 처리 정리
주요 설계 포인트
① 지속시간 아닌 절대값 기준 우선순위
- 1순위: 최종 수치 절대값이 큰 버프 → 실제 효과 적용
- 2순위: 대기(Standby)로 할당 → 지속시간은 흐르되 효과 미적용
- 강한 버프가 끝나면 자동으로 남은 Standby 버프가 활성화 → 유저 기대와 시스템이 자연스럽게 일치
② Standby 상태 신설
“대기 중이지만 시간은 소모”라는 상태를 명시적으로 정의. 유저 기대(강한 버프 끝난 뒤 남은 효과)를 시스템 규칙으로 옮긴 핵심 결정
③ Apply / Expire / Dispel 재평가 시점
- Apply (신규 부여) / Expire (자연 종료) / Dispel (디스펠) 3시점에 동일 중복 그룹 재평가
- 매 프레임이 아닌 3시점만 재평가하도록 제한 → 성능 부담 최소, 예외 케이스 최소
④ Battle Start Status vs 실시간 Stat 계산 분리
스탯 컬럼을 두 계열로 구분 → 계산 기준 명확화, 디버깅·QA 시간 단축
⑤ 성능 제약 하에 기획 목적 유지 — 프로그래머 협업 결정
모든 버프를 매 프레임 기억·재배치하면 성능 리소스가 크게 증가한다. 프로그래머와 협업해 기획 의도(유저 기대와 어긋나지 않는 승계 규칙)를 유지하면서도 성능 부담을 최소화하는 지점을 찾았다.
- 매 프레임 재평가가 아닌 3시점만 재평가 (Apply/Expire/Dispel) → 성능 부담 상수화
- 저장 정보는 절대값·남은 지속시간·계산 기준으로 최소화
- “성능 최적화를 위해 기획을 축소”가 아니라 “성능 제약 안에서 기획 목적을 지키는 규칙 설계” — 이 지점을 프로그래머와 정의하는 게 실무 결정의 핵심이었다
구현 고려사항
- 우선순위 — 최종 수치 절대값 기준으로 1순위 적용, 2순위 대기 상태 할당. 지속시간이 아니라 실효 수치 기반
- Standby 상태 — 남은 지속시간은 흐르지만 실제 효과는 적용하지 않는 대기 버프 정의. 강한 버프 종료 시 자동 활성화
- 재평가 시점 — Apply, Expire, Dispel 발생 시 동일 중복 그룹 재평가. 3시점만 재평가하면 성능 부담 최소
- 계산 기준 — Battle Start Status 기반 계산과 실시간 Stat 기반 계산을 컬럼으로 구분. 계산 시점 혼동 방지
- 예외 처리 — 상태이상, 디스펠, 중복 그룹 테스트 세팅까지 포함해 QA가 재현·검증 가능하도록 정리
- 성능 통제 — 매 프레임 재평가가 아닌 Apply/Expire/Dispel 3시점만 재평가하여 부담 상수화. 프로그래머 협업으로 기획 목적을 훼손하지 않는 최소 재평가 조건을 도출
참고 이미지

결과 · 진행 과정
결과
유저 기대와 시스템 동작이 어긋나는 지점을 절대값 우선순위 + Standby 승계로 해결. 실시간 서버 패킷 전투 환경에서 성능 부담을 상수화하면서도 유저 기대를 유지
무엇을 하려 했는가
”버프 로직 개선”이 아니라 “강한 버프가 끝난 뒤 남은 버프가 자연스럽게 이어질 거라는 유저 기대를, 시스템 규칙으로 옮기는 것”. 서버 패킷 기반 실시간 전투에서는 재평가 비용을 제한하는 것이 중요했기 때문에, 매 프레임 또는 과도한 1:n 비교 대신 Apply/Expire/Dispel 3시점 재평가로 범위를 제한했다.
어떻게 일했는가
- 유저 인지 관점부터 규칙 설계 — “덮어쓰기 vs 제거” 이분법에서 벗어나 대기(Standby) 상태 신설. 유저 기대 승계 흐름을 시스템 상태로 명시화
- 재평가 시점을 3시점으로 압축 — 프로그래머와 협의해 Apply/Expire/Dispel 3시점만 재평가. “성능을 위해 기획 축소”가 아니라 “성능 제약 안에서 기획 목적을 지키는 최소 조건”
- 기존 문서와 실제 로직 차이 확인 — 기존 기획 의도와 현재 구현 상태가 어긋난 지점을 확인하고, 프로그래머 피드백을 통해 실제 동작 기준으로 규칙을 재정리했다.
참고 자료
- 버프·디버프 중복 그룹 로직 개선안 (내부 문서, PPT)
※ 원본 문서는 내부 정보 보호를 위해 공개하지 않습니다.