DynamoDB를 이용하다 보면 PutItem시 아래와 같은 오류를 접할 수 있다.
ClientError: An error occurred (ValidationException) when calling the PutItem operation: One or more parameter values were invalid: Missing the key PK in the item
말 그대로 PK라는 이름의 Key가 존재해야만 putItem이 가능한데, 이것이 없다는 뜻이다.
단순한 구조로 데이터 row 1개가 {key1 : value1, key2 : value2, ..., keyn : valuen}과 같이 이뤄져 있을 때, 이에 맞는 key1 ~ n 까지가 정확히 일치해야만 한다는 것이다.
Team B에서 Data Migration (RDS -> DynamoDB)작업을 했을 때, 백엔드 측에서 dynamoose 또는 AWS SDK로 테이블을 올릴 때의 PK와 SK에 대한 약속이 정확히 지켜지지 않아 위의 오류가 발생했었다.
이는 Schema를 작성한 백엔드 담당자가 데이터(Migration) 담당과의 명세에서 소문자(사실 대문자가 더 좋긴 하다)로 통일할 것으로 결정해 놓았지만, 테이블을 올리는 또 다른 담당자가 이를 대문자로 작성하여 발생한 아주 사소한 문제였다.
그러므로 Migration 담당이 데이터를 옮기려 해도, 맞는 열쇠가 없어 해당 테이블의 엔티티로 옮길 수 없었던 것이다.
임시 방편으로, 해당 오류에 따라 키를 PK로 바꾸고 (이후 sk도 SK로 변환함) 데이터를 옮기는 데에는 성공했다.
하지만, 백엔드에서 API 테스트를 하니 기존 작성된 코드에서는 모든 스키마가 pk, sk와 같이 소문자로 이뤄져있기 때문에 접근 자체가 불가능한 상황이 발생했다. (데이터만 옮겼다고 절대 끝이 아님!!!)
뭐 이런 경우, 백엔드 담당이 필요한 모든 key를 코드 상에서 대문자 (또는 이외 설정한 key 이름)로 변환해주는 방법도 있고, 테이블을 다시 올려 migration하는 방법도 있으니 적합한 방법을 사용하면 되겠다.
'Data' 카테고리의 다른 글
DynamoDB random 선택 query를 위한 table 재설계 (0) | 2024.04.04 |
---|---|
스캐터랩 RLHF로 피드백 학습시키기 정리 (0) | 2024.03.24 |
Team B Project - 비즈니스 상황에 적합한 이벤트 로그 ETL 파이프라인 (1) | 2023.11.08 |
Team B Project - Amplitude 이벤트 로그 데이터 설계 (0) | 2023.09.12 |
로그 설계 시 참고하면 좋을 내용 정리 (0) | 2023.09.12 |
댓글