소개
선택적인 캐시가 응답하지 않아도 상품 조회는 사용할 수 있어야 합니다. 실패를 관찰하고 대기를 제한하며 원본 대체 조회를 켠 후 캐시를 재개하여 적중을 확인합니다.
먼저 Add a Cache to a Product Lookup을 완료하세요. 새 VM에는 독립적인 애플리케이션, DynamoDB와 Valkey가 있습니다. Terminal과 AWS View를 사용하세요. 제공된 장애 제어는 이 실습의 캐시 프로세스만 정지하므로 장애 도구를 만들 필요가 없습니다.
자격증 관련 내용
| 자격증 | 시험 과제 | 실습 |
|---|---|---|
| Cloud Practitioner (CLF-C02) | Task 3.4 | 메모리 캐시와 원본 데이터를 구분하고 애플리케이션 동작을 관찰합니다. |

실제 캐시 타임아웃 관찰하기
타임아웃은 애플리케이션 대기 시간을 제한합니다. 정지된 프로세스는 엔드포인트가 남아 있지만 응답할 수 없습니다. 이는 캐시 미스와 다릅니다.
신원과 설정을 확인합니다.
cd /home/labex/project
aws sts \
get-caller-identity
cat app.json
ARN은 labex-ca03-operator로 끝납니다. 초기 설정은 timeout_seconds: 2, fallback_on_error: false입니다. 정상 캐시에서 두 번 요청합니다.
curl -sS http://127.0.0.1:8080/api/products/101
curl -sS http://127.0.0.1:8080/api/products/101
첫 요청은 원본, 두 번째는 캐시를 사용합니다. 준비된 장애를 활성화합니다.
curl -sS -X POST \
-H 'Content-Type: application/json' \
--data '{"action":"pause"}' \
http://127.0.0.1:8080/api/fault
HTTP 상태를 포함해 상품을 요청합니다.
curl -sS -w '\nHTTP %{http_code}\n' \
http://127.0.0.1:8080/api/products/101
의도적인 실패입니다. 약 2초 후 HTTP 503과 failure: TimeoutError가 나오지만 데이터베이스에는 상품이 남아 있습니다. 캐시 장애가 자동으로 카탈로그 장애가 되어서는 안 됩니다.
대기 제한과 원본 대체 조회
**폴백(fallback)**은 캐시 오류 후 선택하는 대체 경로입니다. 일반적인 미스는 단지 값이 없는 상황입니다.
이 제어된 실습에서는 대기를 0.2초로 제한하고 폴백을 켭니다.
jq '.timeout_seconds = 0.2 | .fallback_on_error = true' \
app.json > app.next.json
mv app.next.json app.json
캐시를 정지한 채 요청하고 경과 시간을 출력합니다.
curl -sS -w '\nHTTP %{http_code}; elapsed %{time_total}s\n' \
http://127.0.0.1:8080/api/products/101
HTTP 200, 현재 가격 20.00, served_from: source, cache_error: TimeoutError가 나옵니다. 캐시 대기는 약 0.2초입니다. 장애 중 요청마다 DynamoDB 읽기가 추가되므로 기능은 유지되지만 원본 부하가 증가합니다.
AWS View에서 타임아웃, 정지 상태와 읽기 횟수를 비교합니다. 단일 교육 환경의 시간 측정이 운영 타임아웃, 부하 용량이나 AWS 가용성 보장을 정하지는 않습니다.

캐시 복구와 적중 재확인
정상 캐시 동작과 성공적인 폴백은 서로 다른 결과입니다. 프로세스를 재개합니다.
curl -sS -X POST \
-H 'Content-Type: application/json' \
--data '{"action":"resume"}' \
http://127.0.0.1:8080/api/fault
상품을 두 번 요청합니다.
curl -sS http://127.0.0.1:8080/api/products/101
curl -sS http://127.0.0.1:8080/api/products/101
served_from: cache, cache_error: null을 관찰합니다. 기존 TTL이 만료됐다면 첫 요청은 원본에서 키를 다시 채우고 다음 요청이 적중합니다. 연속 적중에서는 원본 읽기가 늘지 않습니다.
검증을 위해 캐시를 재개하고 제한된 폴백 설정을 유지하세요. 실제 서비스에서는 캐시 오류와 추가 원본 트래픽을 모두 관찰해야 합니다. 폴백이 원본 데이터베이스 자체의 장애를 해결할 수는 없습니다.

요약
정지된 캐시의 실제 타임아웃, 대기를 제한한 원본 폴백, 복구 후 실제 적중을 확인했습니다. 미스와 오류는 다르게 처리하며 폴백은 데이터베이스 작업을 늘리는 대신 원본 응답을 유지합니다.
자세한 내용은 AWS 공식 문서를 참고하세요: 워크로드에 맞는 클라이언트 시간 초과 선택.


