Consul KV 스토어에 키/값 데이터 저장하고 조회하기

Consul KV 스토어에 키/값 데이터 저장하고 조회하기

Consul에는 분산 키/값(KV) 스토어가 내장돼 있어서, 애플리케이션 설정 같은 운영 데이터를 중앙에서 동적으로 관리할 수 있어요. 서비스 간에 공유해야 하는 작은 설정값들을 Consul 한곳에 모아두면, 각 서버에 흩어진 설정 파일을 일일이 고치지 않아도 되죠. 이번에는 consul kv CLI로 KV 스토어에 데이터를 넣고, 조회하고, 지우는 과정을 하나씩 따라가 볼게요.

CLI 명령은 consul kv로 시작하고, HTTP API로는 /kv 엔드포인트를 사용해요.

출처: Store and access key/value data - HashiCorp Developer

본문

KV 스토어의 키는 redis/config/minconns처럼 슬래시(/)로 계층을 표현하는 것이 일반적이에요. 같은 프리픽스를 공유하는 키들을 묶어서 폴더처럼 다룰 수 있기 때문에, 설정 항목을 주제별로 정리하기 편하답니다.

KV 스토어에 데이터 추가하기

값을 새로 넣거나 기존 값을 갱신할 때는 consul kv put 명령을 사용해요. 명령 다음에 오는 첫 번째 항목이 키, 두 번째 항목이 값이에요.

$ consul kv put redis/config/minconns 1
Success! Data written to: redis/config/minconns

다음 예시에서는 키가 redis/config/maxconns이고 값이 25로 설정돼요.

$ consul kv put redis/config/maxconns 25
Success! Data written to: redis/config/maxconns

다음 예시에서는 명령에 flags 값 42가 포함돼 있어요. 키는 64비트 정수 플래그 값을 지원하는데, 이 값은 Consul 내부에서 사용되지 않고 클라이언트가 KV 쌍에 메타데이터를 붙이는 용도로 쓸 수 있어요.

$ consul kv put -flags=42 redis/config/users/admin zaphod
Success! Data written to: redis/config/users/admin

KV 스토어에서 데이터 조회하기

특정 키의 값을 조회할 때는 consul kv get 명령을 사용해요.

$ consul kv get redis/config/minconns
1

flags로 붙여둔 메타데이터까지 함께 보려면 -detailed 명령줄 플래그를 사용해요.

$ consul kv get -detailed redis/config/users/admin
CreateIndex      14
Flags            42
Key              redis/config/users/admin
LockIndex        0
ModifyIndex      14
Session          -
Value            zaphod

스토어에 있는 모든 키를 나열하려면 recurse 옵션을 사용해요. 결과는 사전식(lexicographical) 순서로 반환돼요.

$ consul kv get -recurse
redis/config/maxconns:25
redis/config/minconns:1
redis/config/users/admin:zaphod

데이터 삭제하기

특정 키의 값을 지우려면 consul kv delete 명령을 사용해요.

$ consul kv delete redis/config/minconns
Success! Deleted key: redis/config/minconns

KV 스토어의 키는 평면(flat) 구조로 저장되지만, 같은 프리픽스를 공유하는 키들을 -recurse 플래그로 폴더나 하위 폴더처럼 묶어서 한 번에 다룰 수 있어요.

다음 예시는 -recurse 옵션으로 redis 프리픽스를 가진 모든 키를 삭제해요.

$ consul kv delete -recurse redis
Success! Deleted keys with prefix: redis

⚠️ 보안 경고: 기본적으로 Consul은 v1.22.0부터 키에 경로 이스케이프(path escapes), 디렉터리 이스케이프, 앞쪽 공백, 뒤쪽 공백을 허용하지 않아요. 이런 형식의 기존 키가 있어서 그대로 쓰고 싶다면, Consul 에이전트 구성의 disable_kv_key_validation 파라미터를 true로 설정하면 돼요. 레거시 호환을 위해 비활성화할 특별한 이유가 없다면, 검증되는(validated) 키를 쓰는 것을 강력히 권장해요.

더 알아보기