[Study] SNS FIFO : MessageGroupId 지정
·
SPRING/TIL
배경기존에 채점 시스템에서 SNS와 SQS를 활용한 팬아웃(Fan-out) 패턴을 통해 채점 요청을 처리하고 있었다. 초기 아키텍처는 효율적인 비용과 처리량에 중심을 둔 Standard 타입의 SNS와 SQS로 구성했다. Standard는 순서를 보장하지 않는 대신, 높은 처리량을 제공하여 만약 채점 요청이 대량으로 들어올 경우 분산 처리하는데 유리했다. 그러나 먼저 제출한 사람의 채점이 먼저 처리되어야 한다는 요구사항이 있었다. 그래서 SNS와 SQS를 모두 FIFO, 선입 선출 구조로 변경했다. 그러나 이렇게 둘 다 FIFO로 구성할 경우 전체 채점 요청이 단 하나의 파이프라인을 통해 직렬로 처리될 수밖에 없었다. 만약 트래픽이 몰린다면 전체 시스템 처리 속도가 급격히 저하되는 성능 병목 지점이 될..
HeadObject로 S3 객체 존재 여부 확인하기 (SDK 2)
·
SPRING/HOW-TO
🍒배경AWS S3는 객체를 고유한 키(Key) 값으로 관리하는 스토리지 서비스입니다. 개발을 하다보면 특정 버킷 안에 지정된 키 값을 가진 객체가 실제로 존재하는지 확인해야 하는 경우가 발생합니다. 예를 들어, 업로드가 정상적으로 완료되었는지 검증하거나 다운로드 전에 객체 존재 여부를 확인하는 경우 등이 있습니다. 이는 HeadObject를 사용하여 쉽게 확인할 수 있습니다. 객체의 실제 데이터를 가져오지 않고 해당 객체의 메타데이터(크기, 수정 시각, ETag 등)만 반환하기 때문에 가볍게 존재 여부를 확인할 수 있습니다. 🍒사전 준비🌱의존성 주입implementation platform("io.awspring.cloud:spring-cloud-aws-dependencies:3.0.1")impl..
[Study] @Modifying: 벌크 연산과 영속성 컨텍스트 관리
·
SPRING/TIL
배경기능 요구사항:제출(Submission) 하나를 대표 코드로 지정(isDefault = true)기존에 대표 코드로 지정되어 있던 것은 자동 해제(isDefault = false) 방법 1가장 나이브한 구현 방식을 생각해보자면, Submission들을 전부 로딩해서 순회하며 isDefault가 true인 것을 false로 업데이트 한 뒤, 대표로 지정하고자하는 제출을 isDefault = true로 설정하는 것이다.`List findByUserAndProblem(...)` 같은 것으로 n건을 SELECT → READ 1서비스에서 순회하며 isDefault가 true인 것만 false로 set대표로 지정할 대상 엔티티도 set(isDefault=true)커밋 시점 플러시에서 변경된 엔티티 수만큼 UPD..