S3에 에미지를 업로드 하고 db에서 해당 이미지 url을 저장하고 있는 상황에서 s3에 이미지 업로드 하는 로직하고 db로직을 @transaction에 같이 저장하면 안됌?
Real mysql에서 보면 트랜잭션을 분리하라는 내용에 착안한다면
댓글 18
Db작업과 관계없는 이미지업로드 시간때문에 필요이상으로 db 커넥션을 점유하게됨
백갤러 1(106.101)2024-11-04 00:39
답글
이를 분리하면 s3에서 에러가 났을때 처리를 어떻게해줘야해?
익명(222.110)2024-11-04 00:40
답글
여러가지 방법이 있음 뭐 트랜잭션아웃박스패턴처럼 쓰는 방법도 있고
백갤러 1(106.101)2024-11-04 00:46
: (. .먼저 S3에 이미지를 업로드하고, 성공하면 그 URL갖고 db실행하장 - dc App
차에코푼쌧키(host0274)2024-11-04 00:50
답글
이미지졷나큰거 생각해보면 디비터트릴것같은뎅 - dc App
차에코푼쌧키(host0274)2024-11-04 00:51
답글
비동기호 하고싶은뎅 ..
익명(222.110)2024-11-04 00:53
답글
너도 비동기화할때 ,그에따는 원자성을 보장해볼려고 고민해보셈 근데 여기선 굳이 필요한가 싶은데 좆밥이라 모르겠넹 - dc App
차에코푼쌧키(host0274)2024-11-04 01:02
답글
아 클라이언트에서 s3로 업로드하면돼
익명(222.110)2024-11-04 01:13
답글
프론트를 해본적도, 이미지를 업로드하는 작업도 안해봤지만 그거맞냐;; 뭐 여기. 고수님들이 에헴하면서 훈수두겠지.. - dc App
차에코푼쌧키(host0274)2024-11-04 01:20
1. 백겔러1 말대로 필요이상으로 db커넥션을 오래 점유하게 돼서 이용자가 많을 때 문제가 됨.
2. S3는 기본적으로 트랜잭션을 지원하지 않는 외부 서비스라서 S3에 이미지가 올라가는 동안 예외가 발생하면 DB는 롤백 되어 이미지에 대한 데이터가 없지만, S3에는 이미지가 올라가서 데이터 정합성 문제가 발생함.
익명(1.236)2024-11-04 01:19
답글
이미지를 올리는 과정을 비동기적으로 구현하고 싶다면, S3 업로드 요청을 카프카 같은 비동기 메시지 큐에 넣어두고 s3에 업로드가 완료되면 url을 db에 저장해주는 방식으로 구현하면 될듯
Db작업과 관계없는 이미지업로드 시간때문에 필요이상으로 db 커넥션을 점유하게됨
이를 분리하면 s3에서 에러가 났을때 처리를 어떻게해줘야해?
여러가지 방법이 있음 뭐 트랜잭션아웃박스패턴처럼 쓰는 방법도 있고
: (. .먼저 S3에 이미지를 업로드하고, 성공하면 그 URL갖고 db실행하장 - dc App
이미지졷나큰거 생각해보면 디비터트릴것같은뎅 - dc App
비동기호 하고싶은뎅 ..
너도 비동기화할때 ,그에따는 원자성을 보장해볼려고 고민해보셈 근데 여기선 굳이 필요한가 싶은데 좆밥이라 모르겠넹 - dc App
아 클라이언트에서 s3로 업로드하면돼
프론트를 해본적도, 이미지를 업로드하는 작업도 안해봤지만 그거맞냐;; 뭐 여기. 고수님들이 에헴하면서 훈수두겠지.. - dc App
1. 백겔러1 말대로 필요이상으로 db커넥션을 오래 점유하게 돼서 이용자가 많을 때 문제가 됨. 2. S3는 기본적으로 트랜잭션을 지원하지 않는 외부 서비스라서 S3에 이미지가 올라가는 동안 예외가 발생하면 DB는 롤백 되어 이미지에 대한 데이터가 없지만, S3에는 이미지가 올라가서 데이터 정합성 문제가 발생함.
이미지를 올리는 과정을 비동기적으로 구현하고 싶다면, S3 업로드 요청을 카프카 같은 비동기 메시지 큐에 넣어두고 s3에 업로드가 완료되면 url을 db에 저장해주는 방식으로 구현하면 될듯
님 고인물임? - dc App
오 비동기는 해결법 ㄱㅅ 카프카 할 짬 되면 해볼게
걍 동기로 할꺼면 업로드 처리하고 트랜잭션 드가면 되는거 아님? 업로드때 예외난거만 잡으면 되잖아 - dc App
transactionaleventlistener 쓰고 1.require_new로 트랜잭션 분리 하거나 @async로 다른 스레드로 트랜잭션 분리 2. 실패했을 가정으로 이벤트 리스너 속성에 after rollback을 이용해서 별도 리스너 메소드 만들어준다
이거까진 찾았었음 리스너에서도 실패할 수 있어서 로그용 테이블이랑 스케줄러를 따로 만들어줘야한데
차라리 presigned url 쓰는게 낫지 않나싶기도
클라이언트에서 올리는게 나음 presigned url ㄱㄱ