작성자 : 김다희
이미지를 현재 S3에 올리고 있고 S3에 올라간 이미지 경로를 받아서 데이터베이스 이미지 필드에 TEXT값으로 저장하고 있다. 그리고 이미지를 수정할 수 있는 기능을 제공한다. 이미지를 수정할 때 새로 올라간 이미지의 S3 이미지 경로를 받아서 데이터베이스 이미지 필드를 update한다. 그럼 이전 이미지는 어떻게 관리해야할까? 크게 3가지 방식이 있을 것 같다.
- 이전 이미지는 관리안함.
- 이 방식은 너무 위험한 것 같다. 이전 이미지는 영영 지울 수 없는 상태가 된다.
- 수정 요청이 오면 이미 S3에 올라간 이미지를 삭제하고 새로운 이미지를 업데이트 한다.
- 유저의 정보가 물리적으로 즉시 삭제되는건 위험한 요소들이 있다.
- 위험 요소 1 : 장애 또는 버그로 원치 않는 데이터가 삭제된다.
- 수정 요청이 오면 이미 S3에 올라간 이미지 정보를 별도의 테이블에 데이터를 저장하고, 새로운 이미지를 업데이트 한다. (소프트 딜리트)
- 데이터가 즉시 삭제되지 않기때문에 위험 요소가 줄어든다.
- 별도 테이블에 저장된 데이터는 서비스 트래픽이 많지않는 시점에 배치 처리로 지울 수 있다.
3번 방식을 채택해보자.
왜 소프트 딜리트를 해야할까?
현 시점에서는 2번을 채택해도 큰 문제는 없을 것이지만 3번 방식을 채택한다면
- 비즈니스 로직을 더 깊게 생각해볼 수 있을것 이고
- 트랜잭션을 어떻게 묶어야할지도 고민할 수 있다.
- 더 나아가 배치처리까지 해볼 수 있다.
때문에 이번 프로젝트에서는 소프트 딜리트를 채택한다.
그럼 어떻게 소프트 딜리트를 처리할 수 있을까?
현재 소프트 딜리트로 관리되어야 하는 리소스는 아래와 같다.
- series table - thumbnail field
- article table - thumbnail field