SpringBoot
-
기존에 동시성 이슈 문제 해결을 위해 사용한 Redisson 대신 Redis의 script를 사용해서 성능 올리기SpringBoot 2024. 3. 24. 00:21
들어가며 public void issue(long couponId, long userId) { // 캐시를 통해 쿠폰에 대한 유효성 검증 수행 CouponRedisEntity coupon = couponCacheService.getCouponCache(couponId); coupon.checkIssuableCoupon(); // 레디스 동시성 이슈 해결하기 위함 distributeLockExecutor.execute("lock_%s".formatted(couponId), 3000, 3000, () -> { couponIssueRedisService.checkCouponIssueQuantity(coupon, userId); issueRequest(couponId, userId); }); } 기존에 위 메소..
-
Mockito 에러 - UnnecessaryStubbingException 해결SpringBoot 2024. 3. 21. 19:53
문제 사용자가 게시판에 올린 미션 인증 글을 관리자가 승인을 해주는 기능을 만들었는데, 이와 관련해서 테스트 코드를 작성하고 있었습니다. 그 중에 사용자가 올린 미션 인증 글의 상태가 승인 대기중인 글이 아닐 때, 이에 맞는 오류 메시지를 반환해야 했습니다. @Test @DisplayName("미션 인증글 승인 - 승인 대기중인 글이 아닐 때, 오류 메시지를 잘 반환하는지?") void acceptMission_4() { // given Team team = TeamMock.create("팀1"); User user = UserMock.create(team, UserRole.MENTOR, passwordEncoder); Mission mission = MissionMock.create(); Mission..
-
쿠폰 발급 요청 시, 확인하는 쿠폰 정보를 Redis Cache에 담아 개선하기SpringBoot 2024. 3. 19. 23:48
들어가며 선착순 쿠폰 발급 기능 개발을 진행하고 있는데, 현재 쿠폰 발급 요청에 대한 서비스 로직에 쿠폰 발급 전에 확인하는 것 중 하나인 해당 쿠폰의 유효성 검증 부분에 개선점이 필요했습니다. Coupon coupon = couponIssueService.findCoupon(couponId); 클라이언트에서 쿠폰 발급 요청 API를 호출할 때마다, 위와 같은 방식으로 데이터베이스에 있는 couponId에 대한 쿠폰 정보를 가져와서, 쿠폰의 유효성 검증을 수행했습니다. 여기서 유효성 검증은 사용자가 쿠폰 발급을 요청한 해당 쿠폰이 발급 가능 기간에 속하는지 검증하는 단계라고 보면 됩니다. 하지만 이러한 방식은 사용자가 요청할 때마다, 데이터베이스에서 값을 조회하기 때문에 순식간에 많은 사용자가 쿠폰 발급..
-
Spring-Data-DynamoDB를 사용하여 SpringBoot와 AWS DynamoDB 연동하기SpringBoot 2024. 1. 28. 23:39
들어가며 현재 진행하고 있는 실시간 채팅방 관련 프로젝트에서 채팅방에서 나눈 이전 대화들을 저장하여 사용자가 다시 채팅방에 접속하면 이전 대화 내용들을 보여주는 기능을 추가적으로 구현해야 했다. 이를 위해서는 채팅방 메시지들을 저장하고 조회, 삭제를 수행하게 될 데이터베이스를 무엇을 사용해야 할지 선택해야 했다. 💁♂️ RDB...? 아니면 NoSQL?? 💁♂️ 기존 데이터베이스는 RDB인 MySQL을 사용하고 있었는데, 원래 사용하던 MySQL을 사용할지 아니면 채팅방 메시지 관리를 위한 추가적인 NoSQL DB를 사용할지에 대한 고민이 깊어졌다. 그러나 NoSQL이 기존의 RDB보다 더 빠른 읽기 쓰기 성능을 가지고 있기 때문에, 각 채팅방 별, 채팅 내용을 저장하고 불러오기에는 NoSQL을 추가..
-
Spring Boot JPA를 통해 Tibero6와 연동하기Tibero DB (Tmax AI Bigdata Academy) 2023. 10. 28. 11:39
벌써 교내에서 진행하는 TABA 수업의 운체, AI, DB, Tibero 시험들이 모두 끝났다.. 이제 팀별 프로젝트만을 남겨두고 있는데, 백엔드를 공부하고 있기때문에 Spring Boot와 이번 프로젝트에서 DB를 평소에 사용하던 MySQL이 아닌 Tibero6를 사용해보고 싶어 미리 기록해두려고 한다. (이러고 스프링이랑 티베로 안쓰면 ㅠㅠ) 📖 참고 Tibero6를 윈도우나 리눅스 환경에서 설치했다고 가정하고 연동했던 과정을 기록했습니다. 📒Window 환경에서 Tibero6 설치 https://codecollector.tistory.com/1613 (Tibero) - Window에 설치 및 연결해보기 🍳머리말 local환경에서 Tibero6과 TiberoStudio2를 설치하고 연결해보는 설명글입..