전체 글

SpringBoot

Spring Author Auditing 오류

Async Annotation을 사용하여 여러 multipartfile을 s3에 업로드하는 기능을 포함하고 있는 Company Entity 생성 함수를 비동기로 실행하도록 하였습니다. @Async override fun companySignup(req: CompanySignupRequest, emailCheckCode: String, companyIntroduction: CompanyIntroductionRequest) { if (checkEmail(req.companyContact.email, emailCheckCode)) { ... } 그러나 test하던 중 API 자체는 200이 떴으나, 입력 값이 제대로 들어가지 않음을 확인할 수 있었습니다. (정확히 서술하자면, Company는 User를 상속받..

SpringBoot

Spring Async 사용 시 Security Context 전파 오류

문제 상황 Async 메서드를 통한 파일 처리(S3 upload)에서 SecurtyContext.getCredentials 작동하지 않음. 원인 @Async 선언으로 비동기 작업을 수행하는 메서드는 쓰레드가 변경되기에 threadHolder에 저장한 값을 조회하여 사용하는 SecurityContext를 활용할 수 없어 이러한 문제가 발생했습니다. 해결 비동기 함수에 진입 전에 조회하여 파라미터로 전달함으로써 사용하도록 수정했습니다.

Database

조인 쿼리 변환

조인 Factorization 옵티마이저가 SQL을 재작성하는 것을 이야기한다. 불필요하게 2번 테이블을 스캔하는 쿼리문을 1번만 스캔하도록 재작성하는 것 등이 포함된다. 조건절 Pullup 쿼리 블록 안으로 밀어 넣어있는 조건들을 밖으로 빼내어 내오는 것을 이야기하며, 이를 다시 다른 쿼리 블록에 Pushdown할 때 사용한다. 조건절 Move Around 쿼리 블록 안, 또는 밖에 있는 조건들을 다른 쿼리문으로 이동시킬 때 발생한다. 조건절 Transitive 조건절 이행이란, A = B 이고, B = C이면 A = C이다. 라는 추론을 통해 새로운 조건절을 내부적으로 생성해주는 쿼리 변환이다. 예를 들어 부서 d, 사원 e 테이블이 있을 때 where d.부서id = :deptid and e.부서i..

DevOps/AWS

Amazon OpenSearch Service

OpenSearch란 Apache 2.0 라이선스 하에 제공되는 분산형 커뮤니티 기반 100% 오픈 소스 검색 및 분석 제품군으로, 실시간 애플리케이션 모니터링, 로그 분석 및 웹 사이트 검색과 같이 다양한 사례에 적용할 수 있다. OpenSearch와 Amazon OpenSearch Service 관련 Amazon OpenSearch Service는 OpenSearch 클러스터 운영에 대한 심층적인 전문성을 쌓을 필요 없이 OpenSearch 클러스터를 실행하고 확장할 수 있는 AWS 관리형 서비스이다. OpenSearch 지원은 버전 1.0부터 시작되었으며, Amazon Elasticsearch Service 에서 Amazon OpenSearch Service로 이름이 바뀌었다. (Amazon Ope..

DevOps/AWS

Amazon Kinesis

Amazon Kinesis란? aws에서 제공하는 완전관리형 실시간 스트리밍 데이터 처리 서비스이며, 기능에 따라 다음과 같이 나누어진다. Kinesis Video Streams Kinesis Data Streams Kinesis Data Firehose Kinesis Data Analytics Kinesis Video Streams 라이브 비디오를 디바이스에서 aws로 스트리밍하고 저장할 수 있는 완전 관리형 서비스이다. 또한 비디오 처리를 위한 자체 애플리케이션을 빌드하거나 배치 중심 비디오 분석을 수행할 수 있다. Kinesis Data Analytics를 활용하여 SQL 질의를 통해 스트리밍 데이터의 유입 데이터 필터링, 변환 및 요약 등의 기능을 수행할 수 있다. Kinesis Video Str..

SpringBoot

UserDetailsService를 통해 받아온 UserDetails를 활용한 LazyLoading 구현 (OpenEntityManagerInView)

문제 상황 @GetMapping("/test") fun getTest( @AuthenticationPrincipal user: User? ): StudentInfoResponse { return (user as Student).toStudentInfoResponse() } @AuthenticationPrincipal 어노테이션을 이용하여, 로그인시 userDetailsService에서 가져온 userDetails 정보를 getMyInfo 함수에서 사용하고자 했습니다. @Where(clause = "user_is_delete = false") @SQLDelete(sql = "UPDATE `user` SET user_is_delete = true where id = ?") @Table(name = "user..

xlwdn98767
개발 조무사 IT 개발 블로그