Parameter Store는 구성 데이터 관리 및 암호 관리를 위한 안전하고 확장 가능한 계층적 저장소를 제공한다. 이를 통해 애플리케이션 코드와 설정 데이터를 완벽히 분리하여 관리할 수 있다.
INFO, DEBUG와 같은 런타임 로그 레벨 설정이 여기에 해당한다.,)로 구분된 문자열 배열이다. 허용된 IP 화이트리스트(10.0.1.5,10.0.1.10), 서비스가 참조해야 할 다중 서브넷 ID 목록 등을 관리할 때 유용하며, 애플리케이션에서 파싱하기 용이한 구조를 가진다.단순한 키-값 쌍을 넘어, 유닉스 파일 시스템과 유사한 경로 구조를 통해 수만 개의 파라미터를 체계적으로 관리할 수 있다.
/prod/backend/order-service/db-url/prod/backend/payment-service/api-key/dev/infra/common/vpc-id/dev/*)에 대해서만 접근을 허용하는 등 매우 세밀한 보안 정책 수립이 가능해진다. 또한 환경별(dev/stage/prod)로 동일한 이름의 파라미터를 유지하면서 값만 다르게 설정할 수 있어 배포 파이프라인 관리가 수월해진다.SecureString의 경우 누가 언제 값을 변경했는지에 대한 감사 로그도 함께 관리할 수 있다.백엔드 인프라 설계 시 가장 자주 고민하게 되는 지점이다. 서비스의 규모와 예산, 보안 요구사항에 따라 선택이 달라진다.
| 구분 | Parameter Store (SSM) | Secrets Manager |
|---|---|---|
| 주 목적 | 일반적인 구성 설정 및 가벼운 보안 값 관리 | 고도의 보안이 필요한 민감 정보 전문 관리 |
| 비용 | 표준 파라미터 기준 무료 (데이터 추가 시 비용 발생) | 보안 정보당 월 $0.40 + API 호출당 비용 발생 |
| 자동 교체 | 지원하지 않음 (수동 변경 필요) | 기본 지원 (RDS, Redshift 등 암호 자동 로테이션) |
| 복잡성 | 구조가 단순하여 도입 및 러닝커브가 매우 낮음 | 로테이션 람다 함수 등 설정할 요소가 상대적으로 많음 |
| 데이터 크기 | 표준 최대 4KB, 고급 최대 8KB | 최대 64KB까지 지원 |
애플리케이션 코드는 하나지만 배포되는 환경은 다양하다. Parameter Store를 사용하면 배포 시점에 환경 변수를 주입받는 대신, 런타임에 AWS에서 직접 값을 읽어온다.
APP_PROFILE 환경 변수를 읽어 /prod/myapp/ 또는 /dev/myapp/ 경로 아래의 모든 설정을 한꺼번에 로드하여 DB 접속 정보나 캐시 서버 주소를 동적으로 결정한다.새로운 기능을 배포한 후, 특정 로직의 활성화 여부를 결정하는 스위치 역할을 한다.
feature.new-payment.enabled 값을 false로 두었다가 운영 중에 모니터링하며 true로 변경한다. 이 과정에서 서버 재시작이나 코드 재배포가 전혀 필요 없어 운영 리스크를 최소화한다.운영 중에 갑작스러운 장애가 발생했을 때 상세 로그가 필요할 수 있다.
INFO로 운영하다가, 특정 이슈 분석이 필요할 때 파라미터 값을 DEBUG로 변경한다. 애플리케이션 내에 파라미터 변경을 감지하는 로직(예: Spring Cloud Bus 등)이 있다면 실시간으로 로그 출력이 변경되어 장애 대응 속도가 빨라진다.spring-cloud-starter-aws-parameter-store-config 라이브러리를 사용하면 외부 설정 소스로 자동 등록된다. bootstrap.yml이나 application.yml에 경로를 지정해두면 @Value("${db-url}") 처럼 익숙한 방식으로 데이터를 사용할 수 있으며, 프로퍼티 우선순위 전략을 통해 로컬 설정과 클라우드 설정을 유연하게 교체할 수 있다.Resource: "arn:aws:ssm:*:*:parameter/prod/*"와 같이 와일드카드를 활용해 특정 환경의 파라미터만 접근 가능하도록 제한하는 것이 중요하다.GetParameter로 가져오는 것은 네트워크 오버헤드와 비용을 발생시킨다. GetParametersByPath API를 사용하여 특정 접두사(예: /prod/service-a/) 아래의 모든 설정을 한 번의 호출로 가져오는 방식을 권장한다. 또한 빈번한 조회가 발생하는 서비스라면 메모리 내에 짧은 TTL을 가진 캐시를 두어 AWS API 호출 횟수를 조절하는 것이 성능상 유리하다.