S3에 업로드된 사진, 트랜잭션 롤백 안 된다

Alex·2024년 11월 15일
1

Plaything

목록 보기
16/118

Plaything에서는 프로필 사진을 세개까지 올릴 수 있다.

프로필 사진을 올릴 때 트랜잭션을 걸어서 롤백을 하게끔 했다.
그런데, 롤백은 외부 API에 대해서는 처리를 해주지 못한다.

외부 API로 알림을 보내거나, S3에 사진을 업로드하면
이건 내가 직접 지워주어야 한다.

코드를 봐보자

이 작업을 보면 범위가 상당히 넓은데다
중간에 S3와 같은 외부 API 연동이 있다. 트랜잭션이 길어질 수밖에 없는 것.

그렇다고 무턱대고 트랜잭션을 분리하면 S3에 사진은 업로드 됐는데, 그 이후에 예외가 터져서 롤백이 되버리고 S3에는 사진이 남는 문제가 생긴다.

트랜잭션을 분리해보자

우선, 이 코드를

이렇게 정리했다.
DB에 저장하는 부분에만 롤백을 위해서 트랜잭션을 걸어두었다.

롤백은 잘 돼?

의도적으로 체크 예외를 터뜨려서 롤백이 되는지 확인해보자.
DB에서는 정상적으로 롤백이 돼서 데이터가들어가지 않았다.


하지만, S3에는 사진이 올라갔다..!

S3에 사진을 저장하고서, 그 링크를 DB에 저장해주어야 하기 때문에
순서를 바꾸는 걸로 해결할 수는 없다.

그래서, 내가 직접 S3에 올라간 사진을 삭제해줘야 한다.

롤백 코드를 추가해주자.

이렇게 예외가 터지면
DB에는 저장되지 않고 롤백이 된다.

S3에도 사진이 남아있지 않았다(저장이 됐지만 지워버린 것)

profile
답을 찾기 위해서 노력하는 사람

0개의 댓글