Add this suggestion to a batch that can be applied as a single commit.
This suggestion is invalid because no changes were made to the code.
Suggestions cannot be applied while the pull request is closed.
Suggestions cannot be applied while viewing a subset of changes.
Only one suggestion per line can be applied in a batch.
Add this suggestion to a batch that can be applied as a single commit.
Applying suggestions on deleted lines is not supported.
You must change the existing code in this line in order to create a valid suggestion.
Outdated suggestions cannot be applied.
This suggestion has been applied or marked resolved.
Suggestions cannot be applied from pending reviews.
Suggestions cannot be applied on multi-line comments.
Suggestions cannot be applied while the pull request is queued to merge.
Suggestion cannot be applied right now. Please check back later.
issue
구현 사항
상황
데이터베이스에 이미지 메타데이터(파일 이름 등) 를 저장하는 로직과 S3로 이미지 업로드 기능이 다른 트랜잭션으로 분리되어있습니다.
문제
같은 트랜잭션으로 묶이지 않아 원자성이 보장되지 않고 이로 인해 실제 S3에 있지만 데이터베이스에 없는 상황이나 실제 S3에 이미지가 없지만 데이터베이스에 있는 상황이 발생했습니다.
해결
S3에 이미지 업로드 및 삭제 요청을 할 때 에러 발생 시 재시도 로직을 추가합니다. 1초 간격 3회 재시도를 하였고 이후에도 실패 시 성공한 이미지는 다시 삭제 요청을 보냅니다. 또한 보상 트랜잭션을 통해 데이터베이스에 저장된 메타데이터도 삭제합니다.
추가로 삭제 요청도 실패할 수 있고 보생 트랜잭션이 실패할 수 있어 정합성에 오류가 있을 확률이 존재하여 1주일에 한번 스케줄링을 통해 정합성을 맞추는 로직을 동작시킵니다.
재시도 로직의 문제점