배경 및 목표

대규모 기능 개발 시 코드를 누적하여 한번에 배포하는 방식이었습니다. 롤백 시 모든 코드를 되돌려야 하여 포인트 설정이 어려웠고, 전체를 복사 후 작업하여 중복 코드가 다량 발생했습니다.

목표

  • 코드 배포와 기능 활성화를 분리해 배포 리스크를 최소화한다.
  • 문제 발생 시 엔드포인트 전환만으로 즉시 롤백 가능하게 한다.

해결 방법과 해결 후보군

후보군 비교

방식설명한계
코드 누적 후 일괄 배포기능 완성 후 한 번에롤백 어려움, 중복 코드 누적
장기 feature 브랜치브랜치에서 개발 유지머지 충돌, 배포 지연
API 버저닝 + 플래그 (채택)배포와 릴리스 분리수시 배포, 엔드포인트 전환으로 즉시 롤백

1. 배포와 릴리스 분리

문제의 근본은 코드 배포와 기능 활성화가 묶여 있다는 점이었습니다. API 엔드포인트를 버전별로 분리(/api/v1, /api/v2)하고, 서비스 레이어에서 플래그 값으로 분기 처리하는 구조를 만들었습니다.

@Service
class ResourceService {
    fun process(request: Request, isNewFeature: Boolean): Response {
        return if (isNewFeature) {
            processV2(request)  // 신규 로직
        } else {
            processV1(request)  // 기존 로직
        }
    }
}

코드는 언제든 배포할 수 있지만, 기능은 플래그를 켜야만 활성화됩니다.

2. 점진적 배포 프로세스

sequenceDiagram
    participant Dev as 개발
    participant Prod as 운영
    Note over Dev,Prod: 정규 배포 전
    Dev->>Prod: 수시 배포 (플래그 OFF)
    Note over Prod: 구버전 로직 동작
    Note over Dev,Prod: 정규 배포 시점
    Dev->>Prod: API 버전 전환 (플래그 ON)
    Note over Prod: 신규 로직 전환
    Note over Dev,Prod: 문제 발생 시
    Prod->>Prod: 엔드포인트 v1 복구 → 즉시 롤백
  • 정규 배포 전: 플래그 OFF 상태로 수시 배포. 운영에 코드가 존재하지만 동작하지 않아 배포 리스크 최소화
  • 정규 배포 시점: 클라이언트 호출을 v2로 전환하면 신규 로직 활성화
  • 문제 발생 시: 엔드포인트만 v1으로 복구하면 즉시 롤백

결과

지표결과
중복 코드80% 제거
롤백엔드포인트 전환으로 즉시
배포 방식수시 배포 가능

모니터링

  • 플래그 ON/OFF 전후 v1/v2 엔드포인트 호출 비율·에러율을 관측한다.
  • 전환 직후 신규 로직의 에러율 급증 여부를 관측한다.