분류 전체보기 (1055) 썸네일형 리스트형 커넥션 풀, keep alive 및 idle connection timeout enableKeepAlive 처리하여 tcp 레이어에서 서버가 DB 연결을 끊지 않도록 설정함idleTimeout을 5분으로 늘려서 처리하여, 람다가 뜨고 커넥션 풀이 잡힌 뒤 영상 처리가 끝나기 전에 idle connection을 끊어버리지 않도록 처리함만약 너무 많은 커넥션이 걸려서 디비에 한계가 오기 시작하면, RDS Proxy등으로 DB 커넥션 요청 풀이 AWS에서 계산하는 특정 수치를 넘어설 경우, RDS Proxy에서 대기하고 관리할 수 있도록 처리하기도 함 람다는 단일 요청 처리이므로 connectionLimit, maxIdle을 1로 지정하고, 커넥션 풀을 사용하지 않음. 꼭 필요할 때만 커넥션이 잡히도록 static이 아니라 repository layer 접근 직전에 커넥션을 잡는 것도 .. [TIL] Spring Batch, Scheduling, k8s cronJob spring batch와 k8s cronJob 인프라를 통해 주기적으로 API 요청을 하고 DB 데이터들을 분석하는 기능을 만들었다. 이에 대해 간략하게 나마 정리해둔다. Spring Batch 구조크게 Job -> Step -> Tasklet/Chunk 구조로 작동한다. Job은 최상위 단위이며 하나 이상의 Step으로 구성된다. Spring Batch 라이브러리를 build에 넣고 실행하면 DB상에 Batch 관련 테이블들이 생기는데, 여기서 JOB_EXECUTION 관련된 테이블에 Job 실행 내역들이 기록된다. 실행 시마다 JobInstance가 생성된다. Step은 Job 하위에 있는 단계이다. Tasklet 기반은 파일 삭제, API 호출 등의 단일 작업 단위이며, Chunk는 DB에서 읽고 .. [TIL] Read and Write, Read Only Database 분리 | Read After Write Consistency Read After Write Consistency(쓰기 직후 읽기 일관성)1개의 DB에 부하가 몰리는 것을 방지하기 위해서 RW(Read and Write), RO(Read Only) DB를 나눠놓는다.조회만 하는 API는 RO에서 처리하도록, create, update, delete가 일어나는 API는 RW에서 처리하도록 한다.그리고 RW -> RO로 자동적으로 Sync가 되도록 한다. 이 때, sync에는 시간이 걸리기 때문에 클라이언트 측에서 write 직후 read를 하면 ro DB에서 생성된 데이터를 찾을 수 없어서 에러가 난다. • ⁃ 이를 방지하기 위해서 Read/Write Pinning | Session Pinning | Master Stickness 등의 용어로 부르는, RW 디비에 .. [TIL] Redis Replica와 Cluster 사용 상황 정리 보통 HA(High Availability)를 위해 master - slave 인스턴스를 둔다. 이 때는 클러스터 모드가 아니여도 괜찮고, AWS에서는 최소 7GB 메모리 성능으로 사용할 수 있다.클러스터 모드로 한다면, 여러 노드가 샤딩이 된다. redis key값을 기반으로 slot 개념으로 hashing 된다. 예를 들어 0 - 8196, 8197 - 16382 로 slot이 나뉘어서 key에 따라 slot이 설정되고, slot 범위에 맞게 node로 데이터가 배치된다. • 샤딩 시에도 HA를 위해서 샤딩된 각 노드에 대해 master - slave 구조를 둔다. 만약 클러스터 모드로 처리하면, key-value insert를 할 때 여러 노드에 배치되는 데이터를 한 번에 넣을 수 없다. 따라서 .. Cloud Front, Lambda Edge, 배포 방식 배경 이미지, 영상 등을 처리하는 Lambda 함수를 사용하면서 Lambda@Edge도 함께 처리했다. Lambda@Edge(이하 엣지)는 Cloud Front(CF) 뒤에 있으면서 전 세계 글로벌 엣지 위치에 실제 물리적 리소스가 존재하여 네트워크 홉에 의한 지연 시간을 최소한으로 만들어주는 서비스이다. 또한 CF의 Origin 요청/응답 타이밍에 실행되어 S3 접근 직전/직후를 제어하여 동적인 컨텐츠를 생성하는데 유리하다. ApiGateway, SQS 등 여러 요소들을 사용했으나 이번에는 CF, Edge의 기본 구성과 배포 방식에 대해 정리해놓을려고 한다. ApiGateway게이트웨이로 로 요청이 들어오면 람다가 트리거 될 수 있다. 이를 통해 람다의 함수가 실행되어 s3 등에 저장된 파일에 접근,.. [TIL] Soft Delete hibernate, @SQLRestriction 배경JPA에서 Soft delete 방식을 적용하기 위해 전체 엔티티의 상위 엔티티에 deleted_at 컬럼을 적용하고 상속받는 구조로 만든다. 그러나 이렇게 처리했을 때, 모든 엔티티들을 처리하는 쿼리문에서 deleted_at을 신경써줘야한다는 문제점이 발생한다.@Getter@Setter@MappedSuperclass@SuperBuilder@NoArgsConstructor@AllArgsConstructor@Audited@EntityListeners(AuditingEntityListener.class)public abstract class BaseEntityAbstract implements Serializable { @NotAudited @Column(name = "deleted_at") .. [비공개] Weekly Report - 25/07/14~24/07/20, 1849일차 보호되어 있는 글입니다. Querydsl MultiDataSource 설정 시 유의사항 1. DataSource 설정 방법JPA로 여러 데이터베이스를 참조해야하는 경우, JPA에서 바라보는 데이터베이스를 설정해주는 값, 그에 맞는 트랜잭션 매니저, 엔티티 매니저 설정을 아래처럼 설정해줘야한다. 예를 들어 Abc, Def 도메인에 대해 설정하는 경우 아래처럼 설정한다. @Configuration@EnableTransactionManagement@EnableJpaRepositories( basePackages = "com.project.domain.abc", entityManagerFactoryRef = "abcEntityManagerFactory", transactionManagerRef = "abcTransactionManager")public class AbcDataSou.. 이전 1 2 3 4 ··· 132 다음