권한마다 보안 솔루션이 다르다면? 하이브리드 환경에서 우아하게 파일 보호하기
올리브영 백오피스가 권한별 이중 보안 체계(클라우드 기반 + 에이전트 기반)를 전략 패턴과 AOP로 통합하여 수십 개 파일 다운로드 API의 암호화 로직 중복 제거
AI 요약
Context
올리브영 백오피스 시스템은 기존 에이전트 기반 보안 솔루션에서 클라우드 기반 보안 시스템으로 전환해야 했으나, 신규 시스템이 본사 구성원에게만 지원되면서 매장 구성원과 협력사까지 포함한 모든 사용자를 위해 두 가지 보안 체계를 동시에 운영해야 하는 과제에 직면했다. 시스템에는 매출 리포트, 재고 현황, 발주서 등 파일을 다운로드하는 API가 수십 개에 달했으며, 로그인한 사용자의 권한(Role)에 따라 적절한 암호화 솔루션을 동적으로 선택하여 적용해야 했다.
Technical Solution
- FileProtectionStrategy 인터페이스를 정의하고 CloudFileProtectionStrategy, AgentFileProtectionStrategy 두 가지 구현체를 작성: 각 보안 방식을 인터페이스로 추상화하여 새로운 보안 솔루션 추가 시 기존 코드 수정 없이 구현체만 추가 가능하도록 설계
- FileProtectionStrategyResolver에서 List를 생성자 주입으로 받고 애플리케이션 시작 시점에 Map으로 캐싱: Spring의 다중 빈 자동 주입 기능을 활용하여 런타임에 O(1) 시간 복잡도로 전략 조회 가능하게 구현
- @ProtectFile 어노테이션과 AOP를 조합: 개발자가 파일 다운로드 메서드에 어노테이션만 붙이면 자동으로 사용자 권한에 맞는 암호화가 적용되도록 하여 호출 누락 방지
- 로컬 개발 환경용 MockFileProtectionStrategy를 @Profile("local") 어노테이션으로 작성: macOS에서 네이티브 라이브러리를 지원하지 않는 에이전트 솔루션을 대체하여 로컬 환경에서의 개발 생산성 향상
- 기존 수십 개의 파일 다운로드 API를 목록화하고 각각의 특성을 파악한 후 체계적으로 @ProtectFile 어노테이션 적용: 공개 문서, 레거시 암호화 코드 등 특수 케이스를 사전에 식별하여 적용 오류 방지
Key Takeaway
권한 기반으로 런타임에 동적으로 전략을 선택해야 하는 상황에서는 객체 생성 시점의 복잡도보다는 이미 Spring 컨테이너가 관리하는 빈 중에서 선택하는 구조가 의존성 주입과 AOP 프록시 활용에 유리하므로, 팩토리 패턴보다는 전략 패턴이 적절한 설계 선택이다. 개발 환경의 인프라 제약(macOS 미지원 네이티브 라이브러리)으로 인한 생산성 저하는 Mock 전략 구현체로 격리하여 본 코드 흐름을 로컬에서 검증 가능하게 함으로써 해결할 수 있다.
실천 포인트
다중 권한 환경에서 권한별로 다른 외부 서비스(API, 라이브러리)를 호출해야 할 때, 전략 패턴으로 각 구현체를 Spring 빈으로 등록하고 애플리케이션 시작 시 Map으로 캐싱한 후 AOP로 어노테이션 기반 자동 적용을 하면, 코드 수정 없이 새로운 전략 추가가 가능하면서 동시에 호출 누락 위험을 제거할 수 있다.