반응형

JAVA 151

[JPA] unique 동시성 이슈 해결 및 CountDownLatch 테스트 작성 (Feat. Unique Index)

사이드 프로젝트를 하면서 동시성 이슈를 만났다. 모바일 프론트 측에서 api 테스트를 하다가, 즐겨찾기 엔티티가 연달아 두 번 등록되는 이슈가 있었던 것이다. 그리고 즐겨찾기 엔티티는 repository에서 Optional과 같은 꼴로 반환되게 했기 때문에, 두 개 이상의 결과가 반환되면 NonUniqueResultException 가 발생한다. 이러한 동시성 이슈가 발생하는 데에는, 두 스레드가 거의 동시에 진행됐기 때문이다. 사실 트래픽이 조금이라도 많으면 이러한 동시성 이슈는 흔히 만날 수 있다. nGrinder로 save 관련 메서드에 수십개의 스레드로 테스트를 돌려보자. 아래 사진은 nGrinder로 회원가입 메서드를 수십개의 스레드로 5초동안 실행시킨 결과이다. 원래대로라면 같은 이메일, 같은..

[Spring] Elasticache Redis 캐싱과 테스트 코드를 이용한 성능 개선

해당 글에서는 aws Elasticache for Redis로 캐시 데이터를 이용한 성능 개선, Spring Boot + Lettuce Redis + JUnit5 프로덕션 + 테스트 코드에 대해 다룹니다. 사이드 프로젝트 `모카콩`의 Wiki에 작성한 글에 해당된다. 해당 프로젝트 github: https://github.com/mocacong/Mocacong-Backend GitHub - mocacong/Mocacong-Backend: 모카콩 백엔드 모카콩 백엔드. Contribute to mocacong/Mocacong-Backend development by creating an account on GitHub. github.com 들어가며 모카콩에는 수많은 카페 데이터들이 존재합니다. 전국의 카페..

[Spring] logback 로깅 전략 및 민감정보 마스킹 로그 처리를 하자

애플리케이션에서 로그는 굉장히 중요한 역할을 한다. 특히, 실제 배포된 애플리케이션에서 로그 없이 nohup.jar 파일만 참고한다면 에러 로그나 sql문 정도만 확인할 수 있을 것이다. 사용자 요청이 언제 어떻게 들어왔는지 로그를 남겨줌으로써 디버깅의 용이성 및 애플리케이션 관리를 편리하게 해보도록 하자. 코드는 여기에서도 볼 수 있다. https://github.com/mocacong/Mocacong-Backend GitHub - mocacong/Mocacong-Backend: 모카콩 백엔드 모카콩 백엔드. Contribute to mocacong/Mocacong-Backend development by creating an account on GitHub. github.com log4j2 vs lo..

[Spring] 이벤트 발행 및 @TransactionalEventListener을 이용한 의존성 줄이기

사이드 프로젝트에서 회원탈퇴 로직을 구현하는 백로그를 담당중이었다. 하지만 회원 탈퇴는 단순 memberService.delete() 메서드 (해당 프로젝트는 물리적 삭제 프로세스를 따르고 있다.)만으로 끝나는 간단한 로직이 아니었다. Member와 타 객체 간 연관관계가 꽤 많았기 때문이다. 회원은 특정 카페에 대한 리뷰를 작성할 수 있다. 회원은 특정 카페에 대해 댓글을 작성할 수 있다. 회원은 특정 카페에 대해 즐겨찾기를 등록할 수 있다. 그렇기 때문에 회원이 탈퇴하면 1. 리뷰와의 연관관계를 끊고 (리뷰 삭제는 안함) 2. 댓글과의 연관관계를 끊고 (댓글 삭제는 안함) 3. 즐겨찾기와의 연관관계를 끊고 해당 즐겨찾기 객체들을 삭제 로직을 수행해야 한다. 원래 MemberService에서는 타 서비..

[230422] Spring Camp 2023 갔다온 후기

KSUG에서 주최한 스프링캠프 2023 컨퍼런스에 다녀왔다~ https://springcamp.ksug.org/2023/ Spring Camp 2023 '스프링 캠프'는 애플리케이션 서버 개발자들과 함께 가치있는 기술에 관한 지식과 정보를 '공유'하고 참가한 사람들이 서로 '인연'을 만들고 시끌벅적하게 즐길 수 있는 '개발자들을 위한 축제' springcamp.ksug.org 다행히 중간고사가 4월 20일까지였어서, 맘편히 다녀올 수 있겠다 싶어 바로 티켓팅에 참여했다. 그리고 다행히 빠르게 결제까지 마친 덕분에! 티켓팅에 성공했다. Spring Camp는 유료 세미나이다. 가격은 33,000원. 결제까지 완료한 시점 기준으로, 오픈 42초만에 티켓이 마감됐다고 한다. 실제로 같이 가기로 한 지인은 결제..

[Spring] 서버 에러 시 Slack Api Client로 슬랙에 알림 보내기

해당 글에서는 slack-api-client 라이브러리 선정 이유, @ControllerAdvice에서 슬랙 연동 방법에 대해 다룹니다. 사이드 프로젝트 `모카콩`의 Wiki에 작성한 글에 해당된다. 해당 프로젝트 github: https://github.com/mocacong/Mocacong-Backend GitHub - mocacong/Mocacong-Backend: 모카콩 백엔드 모카콩 백엔드. Contribute to mocacong/Mocacong-Backend development by creating an account on GitHub. github.com 들어가며 모카콩에서는 Slack을 통해 팀원들과 소통하고 있습니다. 개발 관련 회의나 데일리 스크럼, 이슈 등. 모카콩 관련 업무연락은..

[Spring] FeignClient를 이용한 Apple OAuth 구현 일지 (2)

해당 글에서는 Apple OAuth 연동 프로덕션 코드와 테스트 코드에 대해 다룹니다. 모카콩에서는 iOS 앱 배포를 위해 Apple OAuth를 구현했습니다. Apple OAuth 이론, FeignClient 설정과 선정 이유, 관련 프로덕션, 테스트 코드는 1편에서 볼 수 있습니다. https://kth990303.tistory.com/436 [Spring] FeignClient를 이용한 Apple OAuth 구현 일지 (1) 해당 글에서는 spring boot에서의 FeignClient 선택 이유 및 연동 프로덕션 및 테스트 코드, Apple OAuth 이론에 대해 다룹니다. 사이드 프로젝트 `모카콩`의 Wiki에 작성한 글에 해당된다. 해당 프로젝트 git kth990303.tistory.com..

[Spring] FeignClient를 이용한 Apple OAuth 구현 일지 (1)

해당 글에서는 spring boot에서의 FeignClient 선택 이유 및 연동 프로덕션 및 테스트 코드, Apple OAuth 이론에 대해 다룹니다. 사이드 프로젝트 `모카콩`의 Wiki에 작성한 글에 해당된다. 해당 프로젝트 github: https://github.com/mocacong/Mocacong-Backend GitHub - mocacong/Mocacong-Backend: 모카콩 백엔드 모카콩 백엔드. Contribute to mocacong/Mocacong-Backend development by creating an account on GitHub. github.com 들어가며 모카콩에는 iOS 앱 배포를 위해 Apple OAuth가 존재합니다. 사용자들이 Apple 계정만으로 편리하게..

[230404] 커버링 인덱스를 활용한 소규모 사이드프젝 쿼리튜닝 일지

해당 글에서는 spring data jpa에서의 left outer join, fetch join, 커버링 인덱스에 대해 다룹니다. 사이드 프로젝트 `모카콩`의 Wiki에 작성한 글에 해당된다. 해당 프로젝트 github: https://github.com/mocacong/Mocacong-Backend GitHub - mocacong/Mocacong-Backend: 모카콩 백엔드 모카콩 백엔드. Contribute to mocacong/Mocacong-Backend development by creating an account on GitHub. github.com 들어가며 모카콩에서는 카페에 대한 리뷰를 작성할 때마다 다양한 작업을 해주고 있습니다. 리뷰에는 평점, 해당 카페에 대한 스터디 타입(혼코딩..

[ERROR] 인터셉터 사용 환경에서 Swagger의 Failed to load remote configuration 해결법

해당 글에서는 Swagger와 Spring Security, 스프링 인터셉터를 함께 사용할 때 발생한 문제에 대해 다룹니다. 사이드 프로젝트 `모카콩`의 Wiki에 작성한 글에 해당된다. 해당 프로젝트 github: https://github.com/mocacong/Mocacong-Backend GitHub - mocacong/Mocacong-Backend: 모카콩 백엔드 모카콩 백엔드. Contribute to mocacong/Mocacong-Backend development by creating an account on GitHub. github.com 모카콩에서는 Swagger를 이용하여 API 문서를 자동화해주고 있습니다. 인증 관련 API를 개발하던 중 `/swagger-ui/index.htm..

반응형