From 6f82d72766b97a6b98cdb0f0d1f169cfd8e250f1 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=EC=9D=B4=EC=A4=80=EA=B5=AC?= Date: Mon, 7 Sep 2026 09:50:30 +0900 Subject: [PATCH 01/98] =?UTF-8?q?wip:=20Wishlist=20CRUD=20=EA=B5=AC?= =?UTF-8?q?=ED=98=84=20=EC=A4=91?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .DS_Store | Bin 0 -> 6148 bytes src/.DS_Store | Bin 0 -> 6148 bytes src/main/.DS_Store | Bin 0 -> 6148 bytes src/main/java/.DS_Store | Bin 0 -> 6148 bytes src/main/java/com/.DS_Store | Bin 0 -> 6148 bytes src/main/java/com/dropit/.DS_Store | Bin 0 -> 6148 bytes src/main/java/com/dropit/wishlist/.DS_Store | Bin 0 -> 6148 bytes .../dto/response/WishlistResponse.java | 24 +++++++++ .../com/dropit/wishlist/entity/Wishlist.java | 49 ++++++++++++++++++ .../repository/WishlistRepository.java | 16 ++++++ src/test/java/com/.DS_Store | Bin 0 -> 6148 bytes src/test/java/com/dropit/.DS_Store | Bin 0 -> 6148 bytes 12 files changed, 89 insertions(+) create mode 100644 .DS_Store create mode 100644 src/.DS_Store create mode 100644 src/main/.DS_Store create mode 100644 src/main/java/.DS_Store create mode 100644 src/main/java/com/.DS_Store create mode 100644 src/main/java/com/dropit/.DS_Store create mode 100644 src/main/java/com/dropit/wishlist/.DS_Store create mode 100644 src/main/java/com/dropit/wishlist/dto/response/WishlistResponse.java create mode 100644 src/main/java/com/dropit/wishlist/entity/Wishlist.java create mode 100644 src/main/java/com/dropit/wishlist/repository/WishlistRepository.java create mode 100644 src/test/java/com/.DS_Store create mode 100644 src/test/java/com/dropit/.DS_Store diff --git a/.DS_Store b/.DS_Store new file mode 100644 index 0000000000000000000000000000000000000000..fdc925309d47c1c24a536a9709bb321f385a9f07 GIT binary patch literal 6148 zcmeHK%Wl&^6upzAjYB|W0a7fX<5<=&6Q@(JkFWNi9C}bA~szH6QU6jSx5qVH;`QrqF50nX)q2L2dfH^RJY~YbIRdWf)TR6dC)m-sk`8(G;hw)`F=6WFS3O`N5A=tILh+z_y_BBdt2Lm zt8Wdh_wGktxVe`vv#FQ96}4BK$9`4z{MS)f%tm*f@g(=6Buu3s3PMocy@`^57gN4W zf=p^%)nN^+!ECg%S{+O#yY|83hwEK?^<;mH^8TasdSKnX|KRZD>{EP_@H4C&!Eo}+ zxTUcI;kn-PshcJ-PlO{CyJ8ufIWhhCV0vbzUnoq@j`3|t zC*~+LxpBZa&~%`ysv~j#KfnC_-xQgealkn6Upc^fNAA%SThe#y#^%IbYa@L?5+Qh{ nLMcI}uVYydSMdD{Ke0CY5#3ekcve*~lrCNmEFQwM$nl!dhY literal 0 HcmV?d00001 diff --git a/src/.DS_Store b/src/.DS_Store new file mode 100644 index 0000000000000000000000000000000000000000..1319f909edc06d90120c490a8a6b0f83328d0f26 GIT binary patch literal 6148 zcmeHK!A{#i5S;}B4hSiSB5}0DHKK_~sj6Pw00*uZ!GTu6Zlc!0cv0*$hbWTI@G)HZ z5`G8X>`ssp+7nWRq8(}W&CbrOHBZ`I4-u)(u-7806Oj*P^wu%_MR=X{l`M&86{vWR z<4pfdGM!+~8#-|eI0oJ~1AKNpx~7;?%ID7SH>~YG88Jn?#3iHRM$Y*|a+9S+*=#q+-2yUz8k zrCs4(GO{T+g*zB8_56tjd8YGU@Nv9HCH1MGa*mICtj+QvaqonW_M7>Tdgk~**-jRa z0XZA~#sb#nN^%T12HwU1-wy$lF%+yUnyUkYX#s#9+(uxVUw>f04qzx)S%e3oY%0*E zDrqs4bPmd5hTWfcRh*W#jZ4uRo$b&Lgd^9fzkFzdF#d)eg#m_j- z^hJ{C1bu#>$iL43uU(ZcDW+?RpRM0M#x@>}n2F5el5x>@>wKT|v$PmCn-8k8R9*hC z;;neA-uLL29!JA?I4aul;Ea1;wa${69Ve%0Z``S^9q4=*r+IH+64GuDA?M%HysO7; zJ<7X<$&KuQ=X-vqR-a6^TdhX0y}L7Q1d}gYP1swXr&Hhiw7$7_(z(ih=laG{ukc?Q z`RH&4w=m}OxsC>Trt_chalB6h>QOw_!IUgpkciuO>uE2;o2pGX)Ia2+fl&Nyd7zKuK$;ZV;&e zPqZA%e_(+2E-Si1iNRU4uz$yx+4<0-3$al_GJ3MR{1!Y#;b>f~zROHDx3->l@=npY z^&eE?k2~YZsM#4_)6<1gQ82eV!DZM_+NI4C6^}b%+#l+Mu-8Y(%~crpRMJ$FxHrQKg_GT4#dRVW*uJ6xg1!rq}_vpO+7!6|eVu+XcCbeu>oWm;& zTg|gSj3X7_!!wVbM=>%3%m6d6x(wJ8&nd2MiCh^ozzqD70XiRCD4}ODHK>mc47vpX z=HS)>TmSq6U2*_Di>X0)Akw4)O{%mlhP1tdH0hZ4YV!Z literal 0 HcmV?d00001 diff --git a/src/main/java/com/.DS_Store b/src/main/java/com/.DS_Store new file mode 100644 index 0000000000000000000000000000000000000000..61d40a31233ea1f6eb8c417d1f69ee01a435b884 GIT binary patch literal 6148 zcmeHK!AiqG5S?vnn^J@x6nYGJE!xtmh?iLF!K)EHsMN+34aRIqQ*$VVob`wN5`RZ$ zb~i$)-bAF#!0emM&Lr8lVJ8CsqBr&10CfPcPzeiF9KI2nCtZ?)@e~n-x<>%XX(;c! zPKFHKfhRJl&8^%|3buMM-<@V6K2uA6kzHuz0WEe!FSS1Ah2t%$fgUFX@PfjC$ zqHzir|igPBI14#G4a!aP}+4n?S^ z$VCL~jNh&uPPI zrezN(IL6aN4#Px-sB=JTRspNP)mDJtU55giQBLE^`+I`EPd}8YNjMbIlq5|q;2o~; zZc|_LC`MGDMySnIenJym3EGDkGY3ja>5$%|Hm9Hx_cKOajk`mq@RbyTovd@koeFmw zyeaM%V^^5x6=ofG#IuT^!I1I_`+J4GM;T%!xOi6D^Bv}a`nqTB^zS{xBAb}+=9h4i z#97{IeG|1UXM3ma*4jl$STzf8M68x4SDg3N5ks=! literal 0 HcmV?d00001 diff --git a/src/main/java/com/dropit/wishlist/.DS_Store b/src/main/java/com/dropit/wishlist/.DS_Store new file mode 100644 index 0000000000000000000000000000000000000000..5008bcc747ea26c24df86a5f7194eb0ccc92d45e GIT binary patch literal 6148 zcmeHK!AiqG5Z!HSyQK&{DD)WcTC}BA5ic>;gI6PZP^pOt8jRV}rUog6ob`wN5`RZ$ zcDG`w-bAF#!0emM&Lr8lVJE{F_3LYgGD*EC35O~n3PK3EJdct*_lqOVtr$4|D=B(KP2*5y*1iXKLUyd8i;{EW#9wA_gI1e literal 0 HcmV?d00001 diff --git a/src/main/java/com/dropit/wishlist/dto/response/WishlistResponse.java b/src/main/java/com/dropit/wishlist/dto/response/WishlistResponse.java new file mode 100644 index 0000000..cc53801 --- /dev/null +++ b/src/main/java/com/dropit/wishlist/dto/response/WishlistResponse.java @@ -0,0 +1,24 @@ +package com.dropit.wishlist.dto.response; + +import com.dropit.wishlist.entity.Wishlist; +import lombok.Getter; + +import java.time.LocalDateTime; + +@Getter +public class WishlistResponse { + + private final Long id; + private final Long productId; + private final String productName; + private final String productImageUrl; + private final LocalDateTime createdAt; + + public WishlistResponse(Wishlist wishlist) { + this.id = wishlist.getId(); + this.productId = wishlist.getProduct().getId(); + this.productName = wishlist.getProduct().getName(); + this.productImageUrl = wishlist.getProduct().getImageUrl(); + this.createdAt = wishlist.getCreatedAt(); + } +} diff --git a/src/main/java/com/dropit/wishlist/entity/Wishlist.java b/src/main/java/com/dropit/wishlist/entity/Wishlist.java new file mode 100644 index 0000000..4889e85 --- /dev/null +++ b/src/main/java/com/dropit/wishlist/entity/Wishlist.java @@ -0,0 +1,49 @@ +package com.dropit.wishlist.entity; + +import com.dropit.global.entity.BaseEntity; +import com.dropit.product.entity.Product; +import com.dropit.user.entity.User; +import jakarta.persistence.Entity; +import jakarta.persistence.FetchType; +import jakarta.persistence.GeneratedValue; +import jakarta.persistence.GenerationType; +import jakarta.persistence.Id; +import jakarta.persistence.JoinColumn; +import jakarta.persistence.ManyToOne; +import jakarta.persistence.Table; +import jakarta.persistence.UniqueConstraint; +import lombok.AccessLevel; +import lombok.Getter; +import lombok.NoArgsConstructor; + +@Getter +@Entity +@Table( + name = "wishlists", + uniqueConstraints = { + @UniqueConstraint( + name = "uk_wishlist_user_product", + columnNames = {"user_id", "product_id"} + ) + } +) +@NoArgsConstructor(access = AccessLevel.PROTECTED) +public class Wishlist extends BaseEntity { + + @Id + @GeneratedValue(strategy = GenerationType.IDENTITY) + private Long id; + + @ManyToOne(fetch = FetchType.LAZY, optional = false) + @JoinColumn(name = "user_id", nullable = false) + private User user; + + @ManyToOne(fetch = FetchType.LAZY, optional = false) + @JoinColumn(name = "product_id", nullable = false) + private Product product; + + public Wishlist(User user, Product product) { + this.user = user; + this.product = product; + } +} diff --git a/src/main/java/com/dropit/wishlist/repository/WishlistRepository.java b/src/main/java/com/dropit/wishlist/repository/WishlistRepository.java new file mode 100644 index 0000000..70ee6c6 --- /dev/null +++ b/src/main/java/com/dropit/wishlist/repository/WishlistRepository.java @@ -0,0 +1,16 @@ +package com.dropit.wishlist.repository; + +import com.dropit.wishlist.entity.Wishlist; +import org.springframework.data.jpa.repository.JpaRepository; + +import java.util.List; +import java.util.Optional; + +public interface WishlistRepository extends JpaRepository { + + boolean existsByUser_IdAndProduct_Id(Long userId, Long productId); + + Optional findByUser_IdAndProduct_Id(Long userId, Long productId); + + List findAllByUser_Id(Long userId); +} diff --git a/src/test/java/com/.DS_Store b/src/test/java/com/.DS_Store new file mode 100644 index 0000000000000000000000000000000000000000..61d40a31233ea1f6eb8c417d1f69ee01a435b884 GIT binary patch literal 6148 zcmeHK!AiqG5S?vnn^J@x6nYGJE!xtmh?iLF!K)EHsMN+34aRIqQ*$VVob`wN5`RZ$ zb~i$)-bAF#!0emM&Lr8lVJ8CsqBr&10CfPcPzeiF9KI2nCtZ?)@e~n-x<>%XX(;c! zPKFHKfhRJl&8^%|3buMM-<@V6K2uA6kzHuz0WEe!FSS1Ah2t%$fgUFX@PfjC$ zqHzir|igPBI14#G4a!aP}+4n?S^ zrqN2DVnvvUvUB3(Kju661Qn${3xfIBFdmGbbdlJ zJQDS16vLLIwSrDztDseMMDI|)pt#)woow{5L+5BkQ37w-_7z_@e7E6OV&oV_+p}}N z;n~I5cz!9(F}}L(O`m@6oh+-F-P1lNGnrTQVDLqBw!H0~uHW@{{a4XjwT$Yxo>$|z ze8JkOQZl(L$H}uiTTc5oAE}~_^CByCK%QoBdHFmqQnehbd68B+HZlgk=l7=l{nctT z93BRv`=j+?uzGMjK>7IIdfoGH-MRbl>GZw)P^gcX0YqRA*0N{u5_laqI9NnwAyvUl zanv5xC Date: Mon, 7 Sep 2026 10:17:13 +0900 Subject: [PATCH 02/98] =?UTF-8?q?feat(product):=20Drop=20=EC=97=B0?= =?UTF-8?q?=EA=B2=B0=20=EC=83=81=ED=92=88=20=EC=82=AD=EC=A0=9C=20=EC=A0=9C?= =?UTF-8?q?=ED=95=9C?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../drop/repository/DropRepository.java | 2 ++ .../product/exception/ProductErrorCode.java | 3 +- .../product/service/ProductService.java | 6 ++++ .../controller/ProductControllerTest.java | 16 ++++++++++ .../product/service/ProductServiceTest.java | 29 +++++++++++++++++++ 5 files changed, 55 insertions(+), 1 deletion(-) diff --git a/src/main/java/com/dropit/drop/repository/DropRepository.java b/src/main/java/com/dropit/drop/repository/DropRepository.java index 828f9d2..2efb341 100644 --- a/src/main/java/com/dropit/drop/repository/DropRepository.java +++ b/src/main/java/com/dropit/drop/repository/DropRepository.java @@ -7,6 +7,8 @@ public interface DropRepository extends JpaRepository, DropRepositoryCustom { + boolean existsByProductId(Long productId); + Page findAllByVisibleTrue(Pageable pageable); Page findAllByProductSellerIdAndVisibleTrue( diff --git a/src/main/java/com/dropit/product/exception/ProductErrorCode.java b/src/main/java/com/dropit/product/exception/ProductErrorCode.java index ca63a44..db809ab 100644 --- a/src/main/java/com/dropit/product/exception/ProductErrorCode.java +++ b/src/main/java/com/dropit/product/exception/ProductErrorCode.java @@ -10,7 +10,8 @@ public enum ProductErrorCode implements ErrorCode { SELLER_NOT_FOUND(HttpStatus.NOT_FOUND, "존재하지 않는 판매자입니다."), SELLER_ROLE_REQUIRED(HttpStatus.FORBIDDEN, "판매자만 상품을 등록할 수 있습니다."), PRODUCT_NOT_FOUND(HttpStatus.NOT_FOUND, "존재하지 않는 상품입니다."), - PRODUCT_OWNER_REQUIRED(HttpStatus.FORBIDDEN, "상품 소유자만 변경할 수 있습니다."); + PRODUCT_OWNER_REQUIRED(HttpStatus.FORBIDDEN, "상품 소유자만 변경할 수 있습니다."), + PRODUCT_IN_USE_BY_DROP(HttpStatus.CONFLICT, "판매 일정에서 사용 중인 상품은 삭제할 수 없습니다."); private final HttpStatus status; private final String message; diff --git a/src/main/java/com/dropit/product/service/ProductService.java b/src/main/java/com/dropit/product/service/ProductService.java index 659ee8b..f29eee0 100644 --- a/src/main/java/com/dropit/product/service/ProductService.java +++ b/src/main/java/com/dropit/product/service/ProductService.java @@ -1,5 +1,6 @@ package com.dropit.product.service; +import com.dropit.drop.repository.DropRepository; import com.dropit.global.exception.ServiceException; import com.dropit.product.dto.request.ProductCreateRequest; import com.dropit.product.dto.request.ProductUpdateRequest; @@ -22,6 +23,7 @@ public class ProductService { private final ProductRepository productRepository; private final UserRepository userRepository; + private final DropRepository dropRepository; @Transactional public Long create(Long sellerId, ProductCreateRequest request) { @@ -103,6 +105,10 @@ public void delete(Long sellerId, Long productId) { throw new ServiceException(ProductErrorCode.PRODUCT_OWNER_REQUIRED); } + if (dropRepository.existsByProductId(productId)) { + throw new ServiceException(ProductErrorCode.PRODUCT_IN_USE_BY_DROP); + } + productRepository.delete(product); } } diff --git a/src/test/java/com/dropit/product/controller/ProductControllerTest.java b/src/test/java/com/dropit/product/controller/ProductControllerTest.java index 976f2d8..38070e8 100644 --- a/src/test/java/com/dropit/product/controller/ProductControllerTest.java +++ b/src/test/java/com/dropit/product/controller/ProductControllerTest.java @@ -35,6 +35,7 @@ import static org.mockito.ArgumentMatchers.any; import static org.mockito.ArgumentMatchers.eq; import static org.mockito.Mockito.mock; +import static org.mockito.Mockito.doThrow; import static org.mockito.Mockito.verify; import static org.mockito.Mockito.verifyNoInteractions; import static org.mockito.Mockito.when; @@ -371,6 +372,21 @@ void deleteProduct() throws Exception { verify(productService).delete(sellerId, productId); } + @Test + @DisplayName("Drop에서 사용 중인 상품을 삭제하면 409 오류 응답을 반환한다") + void rejectDeletingProductUsedByDrop() throws Exception { + doThrow(new ServiceException(ProductErrorCode.PRODUCT_IN_USE_BY_DROP)) + .when(productService).delete(1L, 100L); + + mockMvc.perform(delete("/products/{productId}", 100L)) + .andExpect(status().isConflict()) + .andExpect(jsonPath("$.code").value("PRODUCT_IN_USE_BY_DROP")) + .andExpect(jsonPath("$.message") + .value("판매 일정에서 사용 중인 상품은 삭제할 수 없습니다.")); + + verify(productService).delete(1L, 100L); + } + private void authenticate(Long userId) { JwtAuthenticationToken authentication = new JwtAuthenticationToken( new AuthUser(userId), diff --git a/src/test/java/com/dropit/product/service/ProductServiceTest.java b/src/test/java/com/dropit/product/service/ProductServiceTest.java index cb4e2ad..118052a 100644 --- a/src/test/java/com/dropit/product/service/ProductServiceTest.java +++ b/src/test/java/com/dropit/product/service/ProductServiceTest.java @@ -1,5 +1,6 @@ package com.dropit.product.service; +import com.dropit.drop.repository.DropRepository; import com.dropit.global.exception.ServiceException; import com.dropit.product.dto.request.ProductCreateRequest; import com.dropit.product.dto.request.ProductUpdateRequest; @@ -44,6 +45,9 @@ class ProductServiceTest { @Mock private UserRepository userRepository; + @Mock + private DropRepository dropRepository; + @InjectMocks private ProductService productService; @@ -304,12 +308,36 @@ void deleteProduct() { ); ReflectionTestUtils.setField(product, "id", productId); when(productRepository.findById(productId)).thenReturn(Optional.of(product)); + when(dropRepository.existsByProductId(productId)).thenReturn(false); productService.delete(sellerId, productId); + verify(dropRepository).existsByProductId(productId); verify(productRepository).delete(product); } + @Test + @DisplayName("Drop에서 사용 중인 상품은 삭제할 수 없다") + void rejectDeletingProductUsedByDrop() { + Long sellerId = 1L; + Long productId = 100L; + User seller = createUser(UserRole.SELLER); + ReflectionTestUtils.setField(seller, "id", sellerId); + + Product product = new Product(seller, "Product", null, null); + ReflectionTestUtils.setField(product, "id", productId); + when(productRepository.findById(productId)).thenReturn(Optional.of(product)); + when(dropRepository.existsByProductId(productId)).thenReturn(true); + + assertServiceException( + ProductErrorCode.PRODUCT_IN_USE_BY_DROP, + () -> productService.delete(sellerId, productId) + ); + + verify(dropRepository).existsByProductId(productId); + verify(productRepository, never()).delete(any(Product.class)); + } + @Test @DisplayName("존재하지 않는 상품은 삭제할 수 없다") void rejectDeletingMissingProduct() { @@ -347,6 +375,7 @@ void rejectDeletingAnotherSellersProduct() { () -> productService.delete(otherSellerId, productId) ); + verify(dropRepository, never()).existsByProductId(productId); verify(productRepository, never()).delete(any(Product.class)); } From 2aff7ddf674179b9c4d08313a6e50e754c220cb8 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=EC=9D=B4=EC=A4=80=EA=B5=AC?= Date: Thu, 10 Sep 2026 03:10:14 +0900 Subject: [PATCH 03/98] =?UTF-8?q?feat:=20Wishlist=20CRUD=20=EB=B0=8F=20?= =?UTF-8?q?=ED=85=8C=EC=8A=A4=ED=8A=B8=20=EA=B5=AC=ED=98=84?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../controller/WishlistController.java | 53 +++++ .../wishlist/exception/WishlistErrorCode.java | 28 +++ .../wishlist/service/WishlistService.java | 83 ++++++++ .../controller/WishlistControllerTest.java | 80 ++++++++ .../wishlist/service/WishlistServiceTest.java | 186 ++++++++++++++++++ 5 files changed, 430 insertions(+) create mode 100644 src/main/java/com/dropit/wishlist/controller/WishlistController.java create mode 100644 src/main/java/com/dropit/wishlist/exception/WishlistErrorCode.java create mode 100644 src/main/java/com/dropit/wishlist/service/WishlistService.java create mode 100644 src/test/java/com/dropit/wishlist/controller/WishlistControllerTest.java create mode 100644 src/test/java/com/dropit/wishlist/service/WishlistServiceTest.java diff --git a/src/main/java/com/dropit/wishlist/controller/WishlistController.java b/src/main/java/com/dropit/wishlist/controller/WishlistController.java new file mode 100644 index 0000000..c2f323d --- /dev/null +++ b/src/main/java/com/dropit/wishlist/controller/WishlistController.java @@ -0,0 +1,53 @@ +package com.dropit.wishlist.controller; + +import com.dropit.global.security.principal.CurrentUserId; +import com.dropit.wishlist.dto.response.WishlistResponse; +import com.dropit.wishlist.service.WishlistService; +import lombok.RequiredArgsConstructor; +import org.springframework.http.ResponseEntity; +import org.springframework.web.bind.annotation.DeleteMapping; +import org.springframework.web.bind.annotation.GetMapping; +import org.springframework.web.bind.annotation.PathVariable; +import org.springframework.web.bind.annotation.PostMapping; +import org.springframework.web.bind.annotation.RequestMapping; +import org.springframework.web.bind.annotation.RestController; + +import java.util.List; + +@RestController +@RequiredArgsConstructor +@RequestMapping("/wishlists") +public class WishlistController { + + private final WishlistService wishlistService; + + @PostMapping("/{productId}") + public ResponseEntity add( + @CurrentUserId Long userId, + @PathVariable Long productId + ) { + WishlistResponse response = + wishlistService.add(userId, productId); + + return ResponseEntity.ok(response); + } + + @GetMapping("/me") + public ResponseEntity> getMine( + @CurrentUserId Long userId + ) { + return ResponseEntity.ok( + wishlistService.getMine(userId) + ); + } + + @DeleteMapping("/{productId}") + public ResponseEntity delete( + @CurrentUserId Long userId, + @PathVariable Long productId + ) { + wishlistService.delete(userId, productId); + + return ResponseEntity.noContent().build(); + } +} \ No newline at end of file diff --git a/src/main/java/com/dropit/wishlist/exception/WishlistErrorCode.java b/src/main/java/com/dropit/wishlist/exception/WishlistErrorCode.java new file mode 100644 index 0000000..74290e8 --- /dev/null +++ b/src/main/java/com/dropit/wishlist/exception/WishlistErrorCode.java @@ -0,0 +1,28 @@ +package com.dropit.wishlist.exception; + + +import com.dropit.global.exception.ErrorCode; +import lombok.RequiredArgsConstructor; +import org.springframework.http.HttpStatus; + +@RequiredArgsConstructor +public enum WishlistErrorCode implements ErrorCode { + + USER_NOT_FOUND(HttpStatus.NOT_FOUND, "존재하지 않는 사용자입니다."), + PRODUCT_NOT_FOUND(HttpStatus.NOT_FOUND, "존재하지 않는 상품입니다."), + WISHLIST_NOT_FOUND(HttpStatus.NOT_FOUND, "존재하지 않는 찜입니다."), + WISHLIST_ALREADY_EXISTS(HttpStatus.CONFLICT, "이미 찜한 상품입니다."); + + private final HttpStatus status; + private final String message; + + @Override + public HttpStatus status() { + return status; + } + + @Override + public String message() { + return message; + } +} diff --git a/src/main/java/com/dropit/wishlist/service/WishlistService.java b/src/main/java/com/dropit/wishlist/service/WishlistService.java new file mode 100644 index 0000000..2caae7b --- /dev/null +++ b/src/main/java/com/dropit/wishlist/service/WishlistService.java @@ -0,0 +1,83 @@ +package com.dropit.wishlist.service; + +import com.dropit.global.exception.ServiceException; +import com.dropit.product.entity.Product; +import com.dropit.product.repository.ProductRepository; +import com.dropit.user.entity.User; +import com.dropit.user.repository.UserRepository; +import com.dropit.wishlist.dto.response.WishlistResponse; +import com.dropit.wishlist.entity.Wishlist; +import com.dropit.wishlist.exception.WishlistErrorCode; +import com.dropit.wishlist.repository.WishlistRepository; +import lombok.RequiredArgsConstructor; +import org.springframework.stereotype.Service; +import org.springframework.transaction.annotation.Transactional; + +import java.util.List; + +@Service +@RequiredArgsConstructor +@Transactional(readOnly = true) +public class WishlistService { + + private final WishlistRepository wishlistRepository; + private final UserRepository userRepository; + private final ProductRepository productRepository; + + @Transactional + public WishlistResponse add(Long userId, Long productId) { + User user = findUser(userId); + Product product = findProduct(productId); + + if (wishlistRepository.existsByUser_IdAndProduct_Id(userId, productId)) { + throw new ServiceException( + WishlistErrorCode.WISHLIST_ALREADY_EXISTS + ); + } + + Wishlist wishlist = new Wishlist(user, product); + Wishlist savedWishlist = wishlistRepository.save(wishlist); + + return new WishlistResponse(savedWishlist); + } + + public List getMine(Long userId) { + findUser(userId); + + return wishlistRepository.findAllByUser_Id(userId) + .stream() + .map(WishlistResponse::new) + .toList(); + } + + @Transactional + public void delete(Long userId, Long productId) { + Wishlist wishlist = + wishlistRepository.findByUser_IdAndProduct_Id(userId, productId) + .orElseThrow(() -> + new ServiceException( + WishlistErrorCode.WISHLIST_NOT_FOUND + ) + ); + + wishlistRepository.delete(wishlist); + } + + private User findUser(Long userId) { + return userRepository.findById(userId) + .orElseThrow(() -> + new ServiceException( + WishlistErrorCode.USER_NOT_FOUND + ) + ); + } + + private Product findProduct(Long productId) { + return productRepository.findById(productId) + .orElseThrow(() -> + new ServiceException( + WishlistErrorCode.PRODUCT_NOT_FOUND + ) + ); + } +} \ No newline at end of file diff --git a/src/test/java/com/dropit/wishlist/controller/WishlistControllerTest.java b/src/test/java/com/dropit/wishlist/controller/WishlistControllerTest.java new file mode 100644 index 0000000..a1c2f8d --- /dev/null +++ b/src/test/java/com/dropit/wishlist/controller/WishlistControllerTest.java @@ -0,0 +1,80 @@ +package com.dropit.wishlist.controller; + +import com.dropit.global.exception.GlobalExceptionHandler; +import com.dropit.global.security.authentication.JwtAuthenticationToken; +import com.dropit.global.security.principal.AuthUser; +import com.dropit.wishlist.service.WishlistService; +import org.junit.jupiter.api.AfterEach; +import org.junit.jupiter.api.BeforeEach; +import org.junit.jupiter.api.DisplayName; +import org.junit.jupiter.api.Test; +import org.springframework.security.core.context.SecurityContextHolder; +import org.springframework.security.web.method.annotation.AuthenticationPrincipalArgumentResolver; +import org.springframework.test.web.servlet.MockMvc; +import org.springframework.test.web.servlet.setup.MockMvcBuilders; + +import java.util.List; + +import static org.mockito.Mockito.mock; +import static org.mockito.Mockito.verify; +import static org.mockito.Mockito.when; +import static org.springframework.test.web.servlet.request.MockMvcRequestBuilders.delete; +import static org.springframework.test.web.servlet.request.MockMvcRequestBuilders.get; +import static org.springframework.test.web.servlet.request.MockMvcRequestBuilders.post; +import static org.springframework.test.web.servlet.result.MockMvcResultMatchers.status; + +class WishlistControllerTest { + + private MockMvc mockMvc; + private WishlistService wishlistService; + + @BeforeEach + void setUp() { + wishlistService = mock(WishlistService.class); + + mockMvc = MockMvcBuilders + .standaloneSetup(new WishlistController(wishlistService)) + .setControllerAdvice(new GlobalExceptionHandler()) + .setCustomArgumentResolvers(new AuthenticationPrincipalArgumentResolver()) + .build(); + + SecurityContextHolder.getContext().setAuthentication( + new JwtAuthenticationToken(new AuthUser(1L), List.of()) + ); + } + + @AfterEach + void tearDown() { + SecurityContextHolder.clearContext(); + } + + @Test + @DisplayName("현재 사용자가 상품을 찜한다") + void addWishlist() throws Exception { + mockMvc.perform(post("/wishlists/{productId}", 10L)) + .andExpect(status().isOk()); + + verify(wishlistService).add(1L, 10L); + } + + @Test + @DisplayName("현재 사용자의 찜 목록을 조회한다") + void getMine() throws Exception { + when(wishlistService.getMine(1L)) + .thenReturn(List.of()); + + mockMvc.perform(get("/wishlists/me")) + .andExpect(status().isOk()); + + verify(wishlistService).getMine(1L); + } + + @Test + @DisplayName("현재 사용자가 찜한 상품을 삭제한다") + void deleteWishlist() throws Exception { + mockMvc.perform(delete("/wishlists/{productId}", 10L)) + .andExpect(status().isNoContent()); + + verify(wishlistService).delete(1L, 10L); + } +} diff --git a/src/test/java/com/dropit/wishlist/service/WishlistServiceTest.java b/src/test/java/com/dropit/wishlist/service/WishlistServiceTest.java new file mode 100644 index 0000000..927992f --- /dev/null +++ b/src/test/java/com/dropit/wishlist/service/WishlistServiceTest.java @@ -0,0 +1,186 @@ +package com.dropit.wishlist.service; + +import com.dropit.global.exception.ServiceException; +import com.dropit.product.entity.Product; +import com.dropit.product.repository.ProductRepository; +import com.dropit.user.entity.User; +import com.dropit.user.entity.UserRole; +import com.dropit.user.repository.UserRepository; +import com.dropit.wishlist.dto.response.WishlistResponse; +import com.dropit.wishlist.entity.Wishlist; +import com.dropit.wishlist.exception.WishlistErrorCode; +import com.dropit.wishlist.repository.WishlistRepository; +import org.junit.jupiter.api.DisplayName; +import org.junit.jupiter.api.Test; +import org.junit.jupiter.api.extension.ExtendWith; +import org.mockito.InjectMocks; +import org.mockito.Mock; +import org.mockito.junit.jupiter.MockitoExtension; +import org.springframework.test.util.ReflectionTestUtils; + +import java.util.List; +import java.util.Optional; + +import static org.junit.jupiter.api.Assertions.assertEquals; +import static org.junit.jupiter.api.Assertions.assertThrows; +import static org.mockito.ArgumentMatchers.any; +import static org.mockito.Mockito.never; +import static org.mockito.Mockito.verify; +import static org.mockito.Mockito.when; + +@ExtendWith(MockitoExtension.class) +class WishlistServiceTest { + + @Mock + private WishlistRepository wishlistRepository; + + @Mock + private UserRepository userRepository; + + @Mock + private ProductRepository productRepository; + + @InjectMocks + private WishlistService wishlistService; + + @Test + @DisplayName("상품을 찜 목록에 추가한다") + void addWishlist() { + User user = createUser(1L); + Product product = createProduct(10L); + + when(userRepository.findById(1L)) + .thenReturn(Optional.of(user)); + when(productRepository.findById(10L)) + .thenReturn(Optional.of(product)); + when(wishlistRepository.existsByUser_IdAndProduct_Id(1L, 10L)) + .thenReturn(false); + when(wishlistRepository.save(any(Wishlist.class))) + .thenAnswer(invocation -> { + Wishlist wishlist = invocation.getArgument(0); + ReflectionTestUtils.setField(wishlist, "id", 100L); + return wishlist; + }); + + WishlistResponse response = wishlistService.add(1L, 10L); + + assertEquals(100L, response.getId()); + assertEquals(10L, response.getProductId()); + + verify(wishlistRepository).save(any(Wishlist.class)); + } + + @Test + @DisplayName("이미 찜한 상품은 다시 추가할 수 없다") + void rejectDuplicateWishlist() { + User user = createUser(1L); + Product product = createProduct(10L); + + when(userRepository.findById(1L)) + .thenReturn(Optional.of(user)); + when(productRepository.findById(10L)) + .thenReturn(Optional.of(product)); + when(wishlistRepository.existsByUser_IdAndProduct_Id(1L, 10L)) + .thenReturn(true); + + ServiceException exception = assertThrows( + ServiceException.class, + () -> wishlistService.add(1L, 10L) + ); + + assertEquals( + WishlistErrorCode.WISHLIST_ALREADY_EXISTS, + exception.getErrorCode() + ); + + verify(wishlistRepository, never()) + .save(any(Wishlist.class)); + } + + @Test + @DisplayName("내 찜 목록을 조회한다") + void getMine() { + User user = createUser(1L); + Product product = createProduct(10L); + + Wishlist wishlist = new Wishlist(user, product); + ReflectionTestUtils.setField(wishlist, "id", 100L); + + when(userRepository.findById(1L)) + .thenReturn(Optional.of(user)); + when(wishlistRepository.findAllByUser_Id(1L)) + .thenReturn(List.of(wishlist)); + + List responses = wishlistService.getMine(1L); + + assertEquals(1, responses.size()); + assertEquals(100L, responses.getFirst().getId()); + assertEquals(10L, responses.getFirst().getProductId()); + } + + @Test + @DisplayName("찜한 상품을 삭제한다") + void deleteWishlist() { + User user = createUser(1L); + Product product = createProduct(10L); + Wishlist wishlist = new Wishlist(user, product); + + when(wishlistRepository.findByUser_IdAndProduct_Id(1L, 10L)) + .thenReturn(Optional.of(wishlist)); + + wishlistService.delete(1L, 10L); + + verify(wishlistRepository).delete(wishlist); + } + + @Test + @DisplayName("존재하지 않는 찜은 삭제할 수 없다") + void rejectDeleteMissingWishlist() { + when(wishlistRepository.findByUser_IdAndProduct_Id(1L, 10L)) + .thenReturn(Optional.empty()); + + ServiceException exception = assertThrows( + ServiceException.class, + () -> wishlistService.delete(1L, 10L) + ); + + assertEquals( + WishlistErrorCode.WISHLIST_NOT_FOUND, + exception.getErrorCode() + ); + + verify(wishlistRepository, never()) + .delete(any(Wishlist.class)); + } + + private User createUser(Long id) { + User user = new User( + "user@example.com", + "password", + "user", + UserRole.USER + ); + + ReflectionTestUtils.setField(user, "id", id); + return user; + } + + private Product createProduct(Long id) { + User seller = new User( + "seller@example.com", + "password", + "seller", + UserRole.SELLER + ); + + Product product = new Product( + seller, + "Limited Product", + "description", + "image.jpg" + ); + + ReflectionTestUtils.setField(product, "id", id); + return product; + } +} From 200459254398eecb8d065d3e13b2ce724211daec Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=EC=9D=B4=EC=A4=80=EA=B5=AC?= Date: Thu, 10 Sep 2026 03:40:08 +0900 Subject: [PATCH 04/98] =?UTF-8?q?feat:=20Notification=20=EA=B8=B0=EB=B3=B8?= =?UTF-8?q?=20=EA=B8=B0=EB=8A=A5=20=EA=B5=AC=ED=98=84?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../controller/NotificationController.java | 41 ++++ .../dto/response/NotificationResponse.java | 24 +++ .../notification/entity/Notification.java | 51 +++++ .../exception/NotificationErrorCode.java | 25 +++ .../repository/NotificationRepository.java | 14 ++ .../service/NotificationService.java | 78 ++++++++ .../NotificationControllerTest.java | 129 +++++++++++++ .../service/NotificationServiceTest.java | 175 ++++++++++++++++++ 8 files changed, 537 insertions(+) create mode 100644 src/main/java/com/dropit/notification/controller/NotificationController.java create mode 100644 src/main/java/com/dropit/notification/dto/response/NotificationResponse.java create mode 100644 src/main/java/com/dropit/notification/entity/Notification.java create mode 100644 src/main/java/com/dropit/notification/exception/NotificationErrorCode.java create mode 100644 src/main/java/com/dropit/notification/repository/NotificationRepository.java create mode 100644 src/main/java/com/dropit/notification/service/NotificationService.java create mode 100644 src/test/java/com/dropit/notification/controller/NotificationControllerTest.java create mode 100644 src/test/java/com/dropit/notification/service/NotificationServiceTest.java diff --git a/src/main/java/com/dropit/notification/controller/NotificationController.java b/src/main/java/com/dropit/notification/controller/NotificationController.java new file mode 100644 index 0000000..4a76695 --- /dev/null +++ b/src/main/java/com/dropit/notification/controller/NotificationController.java @@ -0,0 +1,41 @@ +package com.dropit.notification.controller; + +import com.dropit.global.security.principal.CurrentUserId; +import com.dropit.notification.dto.response.NotificationResponse; +import com.dropit.notification.service.NotificationService; +import lombok.RequiredArgsConstructor; +import org.springframework.http.ResponseEntity; +import org.springframework.web.bind.annotation.GetMapping; +import org.springframework.web.bind.annotation.PatchMapping; +import org.springframework.web.bind.annotation.PathVariable; +import org.springframework.web.bind.annotation.RequestMapping; +import org.springframework.web.bind.annotation.RestController; + +import java.util.List; + +@RestController +@RequiredArgsConstructor +@RequestMapping("/notifications") +public class NotificationController { + + private final NotificationService notificationService; + + @GetMapping("/me") + public ResponseEntity> getMine( + @CurrentUserId Long userId + ) { + return ResponseEntity.ok( + notificationService.getMine(userId) + ); + } + + @PatchMapping("/{notificationId}/read") + public ResponseEntity markAsRead( + @CurrentUserId Long userId, + @PathVariable Long notificationId + ) { + return ResponseEntity.ok( + notificationService.markAsRead(userId, notificationId) + ); + } +} diff --git a/src/main/java/com/dropit/notification/dto/response/NotificationResponse.java b/src/main/java/com/dropit/notification/dto/response/NotificationResponse.java new file mode 100644 index 0000000..148770e --- /dev/null +++ b/src/main/java/com/dropit/notification/dto/response/NotificationResponse.java @@ -0,0 +1,24 @@ +package com.dropit.notification.dto.response; + +import com.dropit.notification.entity.Notification; +import lombok.Getter; + +import java.time.LocalDateTime; + +@Getter +public class NotificationResponse { + + private final Long id; + private final String title; + private final String message; + private final boolean read; + private final LocalDateTime createdAt; + + public NotificationResponse(Notification notification) { + this.id = notification.getId(); + this.title = notification.getTitle(); + this.message = notification.getMessage(); + this.read = notification.isRead(); + this.createdAt = notification.getCreatedAt(); + } +} diff --git a/src/main/java/com/dropit/notification/entity/Notification.java b/src/main/java/com/dropit/notification/entity/Notification.java new file mode 100644 index 0000000..7dc68b8 --- /dev/null +++ b/src/main/java/com/dropit/notification/entity/Notification.java @@ -0,0 +1,51 @@ +package com.dropit.notification.entity; + +import com.dropit.global.entity.BaseEntity; +import com.dropit.user.entity.User; +import jakarta.persistence.Column; +import jakarta.persistence.Entity; +import jakarta.persistence.FetchType; +import jakarta.persistence.GeneratedValue; +import jakarta.persistence.GenerationType; +import jakarta.persistence.Id; +import jakarta.persistence.JoinColumn; +import jakarta.persistence.ManyToOne; +import jakarta.persistence.Table; +import lombok.AccessLevel; +import lombok.Getter; +import lombok.NoArgsConstructor; + +@Getter +@Entity +@Table(name = "notifications") +@NoArgsConstructor(access = AccessLevel.PROTECTED) +public class Notification extends BaseEntity { + + @Id + @GeneratedValue(strategy = GenerationType.IDENTITY) + private Long id; + + @ManyToOne(fetch = FetchType.LAZY, optional = false) + @JoinColumn(name = "user_id", nullable = false) + private User user; + + @Column(nullable = false, length = 100) + private String title; + + @Column(nullable = false, length = 500) + private String message; + + @Column(nullable = false) + private boolean read; + + public Notification(User user, String title, String message) { + this.user = user; + this.title = title; + this.message = message; + this.read = false; + } + + public void markAsRead() { + this.read = true; + } +} diff --git a/src/main/java/com/dropit/notification/exception/NotificationErrorCode.java b/src/main/java/com/dropit/notification/exception/NotificationErrorCode.java new file mode 100644 index 0000000..dc8aef4 --- /dev/null +++ b/src/main/java/com/dropit/notification/exception/NotificationErrorCode.java @@ -0,0 +1,25 @@ +package com.dropit.notification.exception; + +import com.dropit.global.exception.ErrorCode; +import lombok.RequiredArgsConstructor; +import org.springframework.http.HttpStatus; + +@RequiredArgsConstructor +public enum NotificationErrorCode implements ErrorCode { + + USER_NOT_FOUND(HttpStatus.NOT_FOUND, "존재하지 않는 사용자입니다."), + NOTIFICATION_NOT_FOUND(HttpStatus.NOT_FOUND, "존재하지 않는 알림입니다."); + + private final HttpStatus status; + private final String message; + + @Override + public HttpStatus status() { + return status; + } + + @Override + public String message() { + return message; + } +} diff --git a/src/main/java/com/dropit/notification/repository/NotificationRepository.java b/src/main/java/com/dropit/notification/repository/NotificationRepository.java new file mode 100644 index 0000000..58e9caf --- /dev/null +++ b/src/main/java/com/dropit/notification/repository/NotificationRepository.java @@ -0,0 +1,14 @@ +package com.dropit.notification.repository; + +import com.dropit.notification.entity.Notification; +import org.springframework.data.jpa.repository.JpaRepository; + +import java.util.List; +import java.util.Optional; + +public interface NotificationRepository extends JpaRepository { + + List findAllByUser_IdOrderByCreatedAtDesc(Long userId); + + Optional findByIdAndUser_Id(Long notificationId, Long userId); +} diff --git a/src/main/java/com/dropit/notification/service/NotificationService.java b/src/main/java/com/dropit/notification/service/NotificationService.java new file mode 100644 index 0000000..4487603 --- /dev/null +++ b/src/main/java/com/dropit/notification/service/NotificationService.java @@ -0,0 +1,78 @@ +package com.dropit.notification.service; + +import com.dropit.global.exception.ServiceException; +import com.dropit.notification.dto.response.NotificationResponse; +import com.dropit.notification.entity.Notification; +import com.dropit.notification.exception.NotificationErrorCode; +import com.dropit.notification.repository.NotificationRepository; +import com.dropit.user.entity.User; +import com.dropit.user.repository.UserRepository; +import lombok.RequiredArgsConstructor; +import org.springframework.stereotype.Service; +import org.springframework.transaction.annotation.Transactional; + +import java.util.List; + +@Service +@RequiredArgsConstructor +@Transactional(readOnly = true) +public class NotificationService { + + private final NotificationRepository notificationRepository; + private final UserRepository userRepository; + + @Transactional + public NotificationResponse create( + Long userId, + String title, + String message + ) { + User user = findUser(userId); + + Notification notification = + new Notification(user, title, message); + + Notification savedNotification = + notificationRepository.save(notification); + + return new NotificationResponse(savedNotification); + } + + public List getMine(Long userId) { + findUser(userId); + + return notificationRepository + .findAllByUser_IdOrderByCreatedAtDesc(userId) + .stream() + .map(NotificationResponse::new) + .toList(); + } + + @Transactional + public NotificationResponse markAsRead( + Long userId, + Long notificationId + ) { + Notification notification = + notificationRepository + .findByIdAndUser_Id(notificationId, userId) + .orElseThrow(() -> + new ServiceException( + NotificationErrorCode.NOTIFICATION_NOT_FOUND + ) + ); + + notification.markAsRead(); + + return new NotificationResponse(notification); + } + + private User findUser(Long userId) { + return userRepository.findById(userId) + .orElseThrow(() -> + new ServiceException( + NotificationErrorCode.USER_NOT_FOUND + ) + ); + } +} diff --git a/src/test/java/com/dropit/notification/controller/NotificationControllerTest.java b/src/test/java/com/dropit/notification/controller/NotificationControllerTest.java new file mode 100644 index 0000000..3f6f5e7 --- /dev/null +++ b/src/test/java/com/dropit/notification/controller/NotificationControllerTest.java @@ -0,0 +1,129 @@ +package com.dropit.notification.controller; + +import com.dropit.global.exception.GlobalExceptionHandler; +import com.dropit.global.security.authentication.JwtAuthenticationToken; +import com.dropit.global.security.principal.AuthUser; +import com.dropit.notification.dto.response.NotificationResponse; +import com.dropit.notification.entity.Notification; +import com.dropit.notification.service.NotificationService; +import com.dropit.user.entity.User; +import com.dropit.user.entity.UserRole; +import org.junit.jupiter.api.AfterEach; +import org.junit.jupiter.api.BeforeEach; +import org.junit.jupiter.api.DisplayName; +import org.junit.jupiter.api.Test; +import org.springframework.security.core.context.SecurityContextHolder; +import org.springframework.security.web.method.annotation.AuthenticationPrincipalArgumentResolver; +import org.springframework.test.util.ReflectionTestUtils; +import org.springframework.test.web.servlet.MockMvc; +import org.springframework.test.web.servlet.setup.MockMvcBuilders; + +import java.util.List; + +import static org.mockito.Mockito.mock; +import static org.mockito.Mockito.verify; +import static org.mockito.Mockito.when; +import static org.springframework.test.web.servlet.request.MockMvcRequestBuilders.get; +import static org.springframework.test.web.servlet.request.MockMvcRequestBuilders.patch; +import static org.springframework.test.web.servlet.result.MockMvcResultMatchers.jsonPath; +import static org.springframework.test.web.servlet.result.MockMvcResultMatchers.status; + +class NotificationControllerTest { + + private MockMvc mockMvc; + private NotificationService notificationService; + + @BeforeEach + void setUp() { + notificationService = mock(NotificationService.class); + + mockMvc = MockMvcBuilders + .standaloneSetup( + new NotificationController(notificationService) + ) + .setControllerAdvice(new GlobalExceptionHandler()) + .setCustomArgumentResolvers( + new AuthenticationPrincipalArgumentResolver() + ) + .build(); + + SecurityContextHolder.getContext().setAuthentication( + new JwtAuthenticationToken( + new AuthUser(1L), + List.of() + ) + ); + } + + @AfterEach + void tearDown() { + SecurityContextHolder.clearContext(); + } + + @Test + @DisplayName("현재 사용자의 알림 목록을 조회한다") + void getMine() throws Exception { + NotificationResponse response = + createResponse(100L, false); + + when(notificationService.getMine(1L)) + .thenReturn(List.of(response)); + + mockMvc.perform(get("/notifications/me")) + .andExpect(status().isOk()) + .andExpect(jsonPath("$[0].id").value(100L)) + .andExpect(jsonPath("$[0].read").value(false)); + + verify(notificationService).getMine(1L); + } + + @Test + @DisplayName("현재 사용자의 알림을 읽음 처리한다") + void markAsRead() throws Exception { + NotificationResponse response = + createResponse(100L, true); + + when(notificationService.markAsRead(1L, 100L)) + .thenReturn(response); + + mockMvc.perform( + patch( + "/notifications/{notificationId}/read", + 100L + ) + ) + .andExpect(status().isOk()) + .andExpect(jsonPath("$.id").value(100L)) + .andExpect(jsonPath("$.read").value(true)); + + verify(notificationService) + .markAsRead(1L, 100L); + } + + private NotificationResponse createResponse( + Long notificationId, + boolean read + ) { + User user = new User( + "user@example.com", + "password", + "user", + UserRole.USER + ); + ReflectionTestUtils.setField(user, "id", 1L); + + Notification notification = + new Notification(user, "알림", "내용"); + ReflectionTestUtils.setField( + notification, + "id", + notificationId + ); + + if (read) { + notification.markAsRead(); + } + + return new NotificationResponse(notification); + } +} diff --git a/src/test/java/com/dropit/notification/service/NotificationServiceTest.java b/src/test/java/com/dropit/notification/service/NotificationServiceTest.java new file mode 100644 index 0000000..b740a01 --- /dev/null +++ b/src/test/java/com/dropit/notification/service/NotificationServiceTest.java @@ -0,0 +1,175 @@ +package com.dropit.notification.service; + +import com.dropit.global.exception.ServiceException; +import com.dropit.notification.dto.response.NotificationResponse; +import com.dropit.notification.entity.Notification; +import com.dropit.notification.exception.NotificationErrorCode; +import com.dropit.notification.repository.NotificationRepository; +import com.dropit.user.entity.User; +import com.dropit.user.entity.UserRole; +import com.dropit.user.repository.UserRepository; +import org.junit.jupiter.api.DisplayName; +import org.junit.jupiter.api.Test; +import org.junit.jupiter.api.extension.ExtendWith; +import org.mockito.InjectMocks; +import org.mockito.Mock; +import org.mockito.junit.jupiter.MockitoExtension; +import org.springframework.test.util.ReflectionTestUtils; + +import java.util.List; +import java.util.Optional; + +import static org.junit.jupiter.api.Assertions.assertEquals; +import static org.junit.jupiter.api.Assertions.assertFalse; +import static org.junit.jupiter.api.Assertions.assertThrows; +import static org.junit.jupiter.api.Assertions.assertTrue; +import static org.mockito.ArgumentMatchers.any; +import static org.mockito.Mockito.never; +import static org.mockito.Mockito.verify; +import static org.mockito.Mockito.when; + +@ExtendWith(MockitoExtension.class) +class NotificationServiceTest { + + @Mock + private NotificationRepository notificationRepository; + + @Mock + private UserRepository userRepository; + + @InjectMocks + private NotificationService notificationService; + + @Test + @DisplayName("알림을 생성한다") + void createNotification() { + User user = createUser(1L); + + when(userRepository.findById(1L)) + .thenReturn(Optional.of(user)); + + when(notificationRepository.save(any(Notification.class))) + .thenAnswer(invocation -> { + Notification notification = invocation.getArgument(0); + ReflectionTestUtils.setField(notification, "id", 100L); + return notification; + }); + + NotificationResponse response = + notificationService.create( + 1L, + "판매 시작 임박", + "찜한 상품의 판매 시작이 임박했습니다." + ); + + assertEquals(100L, response.getId()); + assertEquals("판매 시작 임박", response.getTitle()); + assertEquals( + "찜한 상품의 판매 시작이 임박했습니다.", + response.getMessage() + ); + assertFalse(response.isRead()); + + verify(notificationRepository).save(any(Notification.class)); + } + + @Test + @DisplayName("존재하지 않는 사용자에게 알림을 생성할 수 없다") + void rejectCreateWhenUserNotFound() { + when(userRepository.findById(1L)) + .thenReturn(Optional.empty()); + + ServiceException exception = assertThrows( + ServiceException.class, + () -> notificationService.create( + 1L, + "알림", + "내용" + ) + ); + + assertEquals( + NotificationErrorCode.USER_NOT_FOUND, + exception.getErrorCode() + ); + verify(notificationRepository, never()) + .save(any(Notification.class)); + } + + @Test + @DisplayName("현재 사용자의 알림 목록을 조회한다") + void getMine() { + User user = createUser(1L); + + Notification first = + new Notification(user, "첫 번째 알림", "첫 번째 내용"); + Notification second = + new Notification(user, "두 번째 알림", "두 번째 내용"); + + ReflectionTestUtils.setField(first, "id", 100L); + ReflectionTestUtils.setField(second, "id", 101L); + + when(userRepository.findById(1L)) + .thenReturn(Optional.of(user)); + + when(notificationRepository + .findAllByUser_IdOrderByCreatedAtDesc(1L)) + .thenReturn(List.of(second, first)); + + List responses = + notificationService.getMine(1L); + + assertEquals(2, responses.size()); + assertEquals(101L, responses.get(0).getId()); + assertEquals(100L, responses.get(1).getId()); + } + + @Test + @DisplayName("현재 사용자의 알림을 읽음 처리한다") + void markAsRead() { + User user = createUser(1L); + Notification notification = + new Notification(user, "알림", "내용"); + + ReflectionTestUtils.setField(notification, "id", 100L); + + when(notificationRepository + .findByIdAndUser_Id(100L, 1L)) + .thenReturn(Optional.of(notification)); + + NotificationResponse response = + notificationService.markAsRead(1L, 100L); + + assertTrue(response.isRead()); + assertTrue(notification.isRead()); + } + + @Test + @DisplayName("본인의 알림이 아니면 읽음 처리할 수 없다") + void rejectMarkAsReadForAnotherUsersNotification() { + when(notificationRepository + .findByIdAndUser_Id(100L, 1L)) + .thenReturn(Optional.empty()); + + ServiceException exception = assertThrows( + ServiceException.class, + () -> notificationService.markAsRead(1L, 100L) + ); + + assertEquals( + NotificationErrorCode.NOTIFICATION_NOT_FOUND, + exception.getErrorCode() + ); + } + + private User createUser(Long id) { + User user = new User( + "user@example.com", + "password", + "user", + UserRole.USER + ); + ReflectionTestUtils.setField(user, "id", id); + return user; + } +} From 7a39ce8005096357cf6855da8f40cb5acb455e46 Mon Sep 17 00:00:00 2001 From: gustavors88 Date: Thu, 10 Sep 2026 08:22:55 +0900 Subject: [PATCH 05/98] =?UTF-8?q?feat(auth):=20=ED=9A=8C=EC=9B=90=EA=B0=80?= =?UTF-8?q?=EC=9E=85=20=EC=8B=9C=20USER=20=EB=B0=8F=20SELLER=20=EC=97=AD?= =?UTF-8?q?=ED=95=A0=20=EC=84=A0=ED=83=9D=20=EA=B8=B0=EB=8A=A5=20=EC=B6=94?= =?UTF-8?q?=EA=B0=80?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../dropit/auth/dto/request/SignupRequest.java | 4 +++- .../com/dropit/auth/dto/request/SignupRole.java | 15 +++++++++++++++ .../java/com/dropit/auth/service/AuthService.java | 6 +++++- 3 files changed, 23 insertions(+), 2 deletions(-) create mode 100644 src/main/java/com/dropit/auth/dto/request/SignupRole.java diff --git a/src/main/java/com/dropit/auth/dto/request/SignupRequest.java b/src/main/java/com/dropit/auth/dto/request/SignupRequest.java index 7e5c49f..da8d1b6 100644 --- a/src/main/java/com/dropit/auth/dto/request/SignupRequest.java +++ b/src/main/java/com/dropit/auth/dto/request/SignupRequest.java @@ -16,6 +16,8 @@ public record SignupRequest( @NotBlank(message = "사용자 이름은 필수입니다.") @Size(min = 1, max = 100, message = "사용자 이름은 1자 이상 100자 이하여야 합니다.") - String username + String username, + + SignupRole role ) { } \ No newline at end of file diff --git a/src/main/java/com/dropit/auth/dto/request/SignupRole.java b/src/main/java/com/dropit/auth/dto/request/SignupRole.java new file mode 100644 index 0000000..b958b28 --- /dev/null +++ b/src/main/java/com/dropit/auth/dto/request/SignupRole.java @@ -0,0 +1,15 @@ +package com.dropit.auth.dto.request; + +import com.dropit.user.entity.UserRole; + +public enum SignupRole { + USER, + SELLER; + + public UserRole toUserRole() { + return switch (this) { + case USER -> UserRole.USER; + case SELLER -> UserRole.SELLER; + }; + } +} \ No newline at end of file diff --git a/src/main/java/com/dropit/auth/service/AuthService.java b/src/main/java/com/dropit/auth/service/AuthService.java index c4da670..bf80476 100644 --- a/src/main/java/com/dropit/auth/service/AuthService.java +++ b/src/main/java/com/dropit/auth/service/AuthService.java @@ -41,11 +41,15 @@ public void signup(SignupRequest request) { ); } + UserRole role = request.role() == null + ? UserRole.USER + : request.role().toUserRole(); + User user = new User( request.email(), passwordEncoder.encode(request.password()), request.username(), - UserRole.USER + role ); userRepository.save(user); From 37bb36abf3a29b18a1b6f715767b9ca8401c2f16 Mon Sep 17 00:00:00 2001 From: Hyiyek Date: Thu, 10 Sep 2026 10:25:28 +0900 Subject: [PATCH 06/98] =?UTF-8?q?feat(concurrency):=20=EC=83=81=ED=92=88?= =?UTF-8?q?=20=EC=82=AD=EC=A0=9C=EC=99=80=20Drop=20=EC=83=9D=EC=84=B1=20?= =?UTF-8?q?=EA=B2=BD=EC=9F=81=20=EC=83=81=ED=83=9C=20=EC=A0=9C=EC=96=B4?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../com/dropit/drop/service/DropService.java | 2 +- .../product/repository/ProductRepository.java | 10 +++++ .../product/service/ProductService.java | 41 ++++++++++++++----- .../dropit/drop/service/DropServiceTest.java | 6 +-- .../controller/ProductControllerTest.java | 1 + .../product/service/ProductServiceTest.java | 8 ++-- 6 files changed, 50 insertions(+), 18 deletions(-) diff --git a/src/main/java/com/dropit/drop/service/DropService.java b/src/main/java/com/dropit/drop/service/DropService.java index fc4f494..6b6298a 100644 --- a/src/main/java/com/dropit/drop/service/DropService.java +++ b/src/main/java/com/dropit/drop/service/DropService.java @@ -30,7 +30,7 @@ public class DropService { @Transactional public Long save(Long userId, DropCreateRequest request) { - Product product = productRepository.findById(request.productId()) + Product product = productRepository.findByIdForUpdate(request.productId()) .orElseThrow(() -> new ServiceException(ProductErrorCode.PRODUCT_NOT_FOUND)); if (!Objects.equals(product.getSeller().getId(), userId)) { diff --git a/src/main/java/com/dropit/product/repository/ProductRepository.java b/src/main/java/com/dropit/product/repository/ProductRepository.java index 5b13567..94947f6 100644 --- a/src/main/java/com/dropit/product/repository/ProductRepository.java +++ b/src/main/java/com/dropit/product/repository/ProductRepository.java @@ -4,8 +4,18 @@ import org.springframework.data.domain.Page; import org.springframework.data.domain.Pageable; import org.springframework.data.jpa.repository.JpaRepository; +import org.springframework.data.jpa.repository.Lock; +import org.springframework.data.jpa.repository.Query; +import org.springframework.data.repository.query.Param; + +import jakarta.persistence.LockModeType; +import java.util.Optional; public interface ProductRepository extends JpaRepository { Page findAllBySellerId(Long sellerId, Pageable pageable); + + @Lock(LockModeType.PESSIMISTIC_WRITE) + @Query("select p from Product p where p.id = :productId") + Optional findByIdForUpdate(@Param("productId") Long productId); } diff --git a/src/main/java/com/dropit/product/service/ProductService.java b/src/main/java/com/dropit/product/service/ProductService.java index 684b6b4..28a3c24 100644 --- a/src/main/java/com/dropit/product/service/ProductService.java +++ b/src/main/java/com/dropit/product/service/ProductService.java @@ -144,7 +144,14 @@ public ProductResponse uploadImage( @Transactional public void delete(Long sellerId, Long productId) { - Product product = findOwnedProduct(sellerId, productId); + Product product = findOwnedProductForUpdate(sellerId, productId); + + if (dropRepository.existsByProductId(productId)) { + throw new ServiceException( + ProductErrorCode.PRODUCT_IN_USE_BY_DROP + ); + } + String imageKey = product.getImageUrl(); productRepository.delete(product); @@ -163,6 +170,28 @@ private Product findOwnedProduct( ) ); + validateOwner(sellerId, product); + + return product; + } + + private Product findOwnedProductForUpdate( + Long sellerId, + Long productId + ) { + Product product = productRepository.findByIdForUpdate(productId) + .orElseThrow(() -> + new ServiceException( + ProductErrorCode.PRODUCT_NOT_FOUND + ) + ); + + validateOwner(sellerId, product); + + return product; + } + + private void validateOwner(Long sellerId, Product product) { if (!product.getSeller().getId().equals(sellerId)) { throw new ServiceException( ProductErrorCode.PRODUCT_OWNER_REQUIRED @@ -174,14 +203,6 @@ private Product findOwnedProduct( ProductErrorCode.SELLER_ROLE_REQUIRED ); } - - if (dropRepository.existsByProductId(productId)) { - throw new ServiceException(ProductErrorCode.PRODUCT_IN_USE_BY_DROP); - } - - productRepository.delete(product); - - return product; } private ProductResponse toResponse(Product product) { @@ -237,4 +258,4 @@ public void afterCommit() { } ); } -} \ No newline at end of file +} diff --git a/src/test/java/com/dropit/drop/service/DropServiceTest.java b/src/test/java/com/dropit/drop/service/DropServiceTest.java index 5744354..ad4c4c2 100644 --- a/src/test/java/com/dropit/drop/service/DropServiceTest.java +++ b/src/test/java/com/dropit/drop/service/DropServiceTest.java @@ -54,7 +54,7 @@ class DropServiceTest { void saveDropOwnedBySeller() { Product product = saveProduct(1L, 10L); DropCreateRequest request = saveRequest(); - when(productRepository.findById(10L)).thenReturn(Optional.of(product)); + when(productRepository.findByIdForUpdate(10L)).thenReturn(Optional.of(product)); when(dropRepository.save(any(Drop.class))).thenAnswer(invocation -> { Drop drop = invocation.getArgument(0); ReflectionTestUtils.setField(drop, "id", 100L); @@ -77,7 +77,7 @@ void saveDropOwnedBySeller() { @Test @DisplayName("존재하지 않는 상품으로 드랍을 생성할 수 없다") void rejectMissingProduct() { - when(productRepository.findById(10L)).thenReturn(Optional.empty()); + when(productRepository.findByIdForUpdate(10L)).thenReturn(Optional.empty()); ServiceException exception = assertThrows( ServiceException.class, @@ -92,7 +92,7 @@ void rejectMissingProduct() { @DisplayName("다른 판매자의 상품으로 드랍을 생성할 수 없다") void rejectCreatingDropForAnotherSellersProduct() { Product product = saveProduct(1L, 10L); - when(productRepository.findById(10L)).thenReturn(Optional.of(product)); + when(productRepository.findByIdForUpdate(10L)).thenReturn(Optional.of(product)); ServiceException exception = assertThrows( ServiceException.class, diff --git a/src/test/java/com/dropit/product/controller/ProductControllerTest.java b/src/test/java/com/dropit/product/controller/ProductControllerTest.java index f69a48b..2221cde 100644 --- a/src/test/java/com/dropit/product/controller/ProductControllerTest.java +++ b/src/test/java/com/dropit/product/controller/ProductControllerTest.java @@ -387,6 +387,7 @@ void rejectDeletingProductUsedByDrop() throws Exception { .value("판매 일정에서 사용 중인 상품은 삭제할 수 없습니다.")); verify(productService).delete(1L, 100L); + } @Test @DisplayName("판매자는 상품 이미지를 업로드하면 200 상태와 서명된 이미지 URL을 반환한다") diff --git a/src/test/java/com/dropit/product/service/ProductServiceTest.java b/src/test/java/com/dropit/product/service/ProductServiceTest.java index 17e07d8..abd0af1 100644 --- a/src/test/java/com/dropit/product/service/ProductServiceTest.java +++ b/src/test/java/com/dropit/product/service/ProductServiceTest.java @@ -371,7 +371,7 @@ void deleteProduct() { null ); ReflectionTestUtils.setField(product, "id", productId); - when(productRepository.findById(productId)).thenReturn(Optional.of(product)); + when(productRepository.findByIdForUpdate(productId)).thenReturn(Optional.of(product)); when(dropRepository.existsByProductId(productId)).thenReturn(false); productService.delete(sellerId, productId); @@ -390,7 +390,7 @@ void rejectDeletingProductUsedByDrop() { Product product = new Product(seller, "Product", null, null); ReflectionTestUtils.setField(product, "id", productId); - when(productRepository.findById(productId)).thenReturn(Optional.of(product)); + when(productRepository.findByIdForUpdate(productId)).thenReturn(Optional.of(product)); when(dropRepository.existsByProductId(productId)).thenReturn(true); assertServiceException( @@ -406,7 +406,7 @@ void rejectDeletingProductUsedByDrop() { @DisplayName("존재하지 않는 상품은 삭제할 수 없다") void rejectDeletingMissingProduct() { Long productId = 999L; - when(productRepository.findById(productId)).thenReturn(Optional.empty()); + when(productRepository.findByIdForUpdate(productId)).thenReturn(Optional.empty()); assertServiceException( ProductErrorCode.PRODUCT_NOT_FOUND, @@ -432,7 +432,7 @@ void rejectDeletingAnotherSellersProduct() { null ); ReflectionTestUtils.setField(product, "id", productId); - when(productRepository.findById(productId)).thenReturn(Optional.of(product)); + when(productRepository.findByIdForUpdate(productId)).thenReturn(Optional.of(product)); assertServiceException( ProductErrorCode.PRODUCT_OWNER_REQUIRED, From 6ab3aaadb3286b68ce67a9c06594dcb0bc5dc498 Mon Sep 17 00:00:00 2001 From: Hyiyek Date: Thu, 10 Sep 2026 10:47:31 +0900 Subject: [PATCH 07/98] =?UTF-8?q?test(concurrency):=20=EB=8F=99=EC=8B=9C?= =?UTF-8?q?=EC=84=B1=20=EA=B2=80=EC=A6=9D=20=EA=B2=B0=EA=B3=BC=EC=99=80=20?= =?UTF-8?q?=EB=B9=84=EA=B5=90=20=EC=9D=B4=EB=AF=B8=EC=A7=80=20=EC=B6=94?= =?UTF-8?q?=EA=B0=80?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../2026-09-10-product-drop-concurrency.md | 68 +++++ ...-product-drop-concurrency-before-after.png | Bin 0 -> 82194 bytes .../ProductDropConcurrencyTest.java | 274 ++++++++++++++++++ 3 files changed, 342 insertions(+) create mode 100644 performance/results/2026-09-10-product-drop-concurrency.md create mode 100644 performance/results/images/2026-09-10-product-drop-concurrency-before-after.png create mode 100644 src/test/java/com/dropit/product/concurrency/ProductDropConcurrencyTest.java diff --git a/performance/results/2026-09-10-product-drop-concurrency.md b/performance/results/2026-09-10-product-drop-concurrency.md new file mode 100644 index 0000000..591a7f7 --- /dev/null +++ b/performance/results/2026-09-10-product-drop-concurrency.md @@ -0,0 +1,68 @@ +# Product 삭제와 Drop 생성 동시성 제어 + +## 문제 상황 + +판매자가 상품을 삭제하는 순간 다른 요청에서 같은 상품의 Drop을 생성하면, +상품 삭제의 Drop 존재 확인과 실제 DELETE 사이에 Drop INSERT가 들어올 수 있다. + +```text +상품 삭제 요청: Product 조회 → Drop 존재 확인(false) → 상품 DELETE +Drop 생성 요청: └→ Drop INSERT +``` + +이 경우 DB 외래키가 데이터 무결성은 지키지만 상품 삭제 요청에는 +의도한 `409 Conflict` 대신 `DataIntegrityViolationException`이 발생할 수 있다. + +## 테스트 조건 + +| 항목 | 조건 | +|---|---| +| 대상 기능 | 동일 Product 삭제와 Drop 생성 | +| 동시 실행 수 | 매회 2개 요청 | +| 반복 횟수 | 100회 | +| 동시 실행 도구 | `ExecutorService`, `CountDownLatch` | +| 데이터베이스 | MySQL 8.4.11, InnoDB | +| 트랜잭션 격리 수준 | `REPEATABLE_READ` | + +## Before / After 비교 + +![Product 삭제와 Drop 생성 동시성 Before After 비교](images/2026-09-10-product-drop-concurrency-before-after.png) + +| 측정 항목 | Before: 락 미적용 | After: 비관적 락 적용 | +|---|---:|---:| +| 반복 횟수 | 100회 | 100회 | +| Drop 생성 성공 | 100회 | 49회 | +| 상품 삭제 성공 | 0회 | 51회 | +| `404 PRODUCT_NOT_FOUND` | 0회 | 51회 | +| `409 PRODUCT_IN_USE_BY_DROP` | 0회 | 49회 | +| 예상 밖 DB 예외 | **100회** | **0회** | +| 고아 Drop | 0개 | 0개 | +| 총 실행 시간 | 8,478ms | 7,366ms | + +## Before 분석 + +- 100회 모두 Drop 생성이 먼저 완료됐다. +- 상품 삭제는 100회 모두 외래키 제약으로 실패했다. +- DB가 고아 Drop은 방지했지만 도메인에서 정의한 `409 Conflict`로 처리하지 못했다. +- 현재 문제는 데이터 손실보다 예상 가능한 경쟁 상황이 서버 오류로 노출되는 것이다. + +## 개선 기준 + +- Product를 기준으로 상품 삭제와 Drop 생성이 동일한 잠금 순서를 사용한다. +- 먼저 처리된 요청에 따라 `404 Not Found` 또는 `409 Conflict`로 종료한다. +- `DataIntegrityViolationException`과 고아 Drop을 모두 0회로 만든다. +- 같은 조건으로 100회 재측정해 Before와 After를 비교한다. + +## 적용 내용 + +- `ProductRepository.findByIdForUpdate`에 `PESSIMISTIC_WRITE` 잠금을 적용했다. +- Product 삭제와 Drop 생성이 모두 같은 Product 행을 잠근 뒤 작업하게 했다. +- 먼저 Product를 삭제하면 뒤의 Drop 생성은 `404 PRODUCT_NOT_FOUND`로 종료된다. +- 먼저 Drop을 생성하면 뒤의 Product 삭제는 `409 PRODUCT_IN_USE_BY_DROP`으로 종료된다. + +## After 분석 + +- 100회 모두 두 요청 중 하나만 성공하고 나머지 하나는 정상적인 도메인 충돌로 종료됐다. +- 예상 밖 `DataIntegrityViolationException`이 100회에서 0회로 감소했다. +- Before와 After 모두 고아 Drop은 0개로 DB 무결성을 유지했다. +- 총 실행 시간은 실행 환경에 따라 달라질 수 있으므로 성능 향상 근거가 아니라 정확성 검증 참고값으로만 사용한다. diff --git a/performance/results/images/2026-09-10-product-drop-concurrency-before-after.png b/performance/results/images/2026-09-10-product-drop-concurrency-before-after.png new file mode 100644 index 0000000000000000000000000000000000000000..775788c6167e31c622e8ac56a60f10a5c400a351 GIT binary patch literal 82194 zcmeEtS5#9`8zpuT5k)`&0hOY3rAk+kBE8o@r1#!y6a@sN6Ob;wC-fGYLg+SU{*(>Lu3i7{B@ywH zkJtWtsml2Oum1lU5E1=9um;0&AUT~Bfzkn4~gs~Kf0m_qU zL+|Rn*?o|SxXYI~h=@K?XcTx?Ap5!I$XuWDpBx{j3A^BOTN^#LQYT?vLBWCgdPx>l z{b~)Kvn=7OV}+`^GBUv)SBXB>-u!S$_RFEc^~riaiA3)4I(45OIA_<|9iq-J2}}|f zA9L6R)+bz;I5;@$>ylBy$*7LK1cyVqS83>O=kDz2RFTRUS*C(<0V1NdZ$wlv`4D*f zO!Gw?J5x9b5z%Ykv_{Vg(MIX;RR8VYT?SaK#Kgp1@5@AwZw6dP{;Ob7 zLz`2u$!e44W@)79BL-2c!RneKERw?h0eD48bB0fF{sg(t?FR=33g5!R!%6LI%i}o= zvo*Rh`3p6xOJB&JT)*7;%`c+5x;hPkC<}>pqbgb#&?TYj)GxNoV1xIVm6a=;2wcXI z-H(0ZpDr$Pv?}uS`SVw*k*9z63-pmj57v*O$w`Pl_R_bgsmjV)%F5=SaYsg`H_26S zTH4qMT504#(-Cm?c*V7`C-+0XevM)e2@RFYs(yS;>YVEC!{fa?Y{fFN-=LO_lUpzQ zL$a2laJ54srw!FK(aW2+;+r3kl8`)Tdj`qSoSofGCFbE&iqyD!|30tvq$^lvCeg!# z{k<6D*BLH558X^~64dzT{ag4<7&7pt#I7ji3(j?VC&dHA{jN^j`QoMt%P zpq1E>T*ENkfG_nNKkcW}52qFT@~@CV8m7c36}@^!hEYF!AmA{ywzkZzZMPPI-vL%@d**G0Tn_XBl# z+dVc$SW1#(3+n28I^mw)C-2@#Tib-J?9$w$F8Jeie0mxf7>HY4%~b_2fjixoh zEiJ7h(PE2FVAprvil{1&qd3`Hq!+Pv1e<``f4Dn3E``|b=GS+3fTpr-TqAm&Ejx#} z?lA4YGH&5%%EVj8LnG)BiN6tfME#;(C4`2q{?25B+txDo%uuOVWV&d=nJ^*m92Zt; zd1vT5?DgLjCtenXG+Ii^)G@oR?59r|p-tZG(1-VS=Fqfn6zIi$|2?bD=JDV6dVDwL ze&M2TaY5=g7nvmlc#GWP#ju#?EE;{u9qvbmqu$=TgRSz~_Dwz)F9Y>&5q-?R*P<5b zbHuPE;;5i_k(l}Hh z@%m+=DDkhB5ufvGQRjl$%&%UxVX@1j$w%ORVqT}lI^ScklyC0FmrRZnNV21$y+l=C zzkYq?tI;L+;mzIk0Z5X7m4@?@cW)BPcWiPobg>4R&K4!1977hCeIPVAIM~!gm=LIj z5V3h&3MU@fO-*T01b(}mr2->m21vhstfqks2{AF==6zBp6L`nng9Fs8qc);c<)?37 z(un+DRlK){ZnIM!gr~R&V~-cH*XicFPxR6C<2@ai#fKm1pvt$Ct`!@KA5EYcuaPXM z>-FIiI!Z*!NGL9|&bDO4N*GMRH=SLM{xlvv=k^K8$jC4j1`oZ%nMJf&JqnP%jpX1emwWi}g^W7!0=^RM5OECnc1!`_Xi>)%1D@=vQ*= zAaRt^8=0=@6I}zHMegzSGSd_9mks7k{)D12Tg4y0k`Azozw~2SZhLrmMYq7flPI19 zSv>#r>CL@+_nZT##jPeyERKgIMH8|UkkhPG0{Pl&NHSX$WG>{rf1Uzh^N9gz4wp3c4x?64>rdx*Vp6a{=#>*_fIYMNBGX0=s{X|2IulQ@Wm9v z(h)u$h~W{9X@{Any}z?r77YyrjE`S9&JI-(Yt*`(5ytnlht4;SJ$4~S(A_nr_Qm;m z5!2(g70a>gNveadA4y+3gu(w)X3uFmriyk@CTpZY;md_=lf_~ zKgBCVk5ixA&{E^GSCPR*#;2uChX_YRMs963%5WRj%`WT+0$K8DA>atdL99)7-Fixz)8jw}|Ck2JyYU z0Qw?W+Lte1##5OGl2GPDYot5wa4IT(3*4Vi?ui6RF7CVEiMJ(_a+C{NSLeM^9o>3HV)dj&LZ$5Yz(w-{-G2d&$*KU` zl|uER)wqx>^8xjkQiZ!;=ul*u&!NI)9TXNaOwZWZPKV&M%iM-Ohvx?a>6;*asi>C5 z#^Q72DIJFL?fX{Yl~q-N8kL}BG`kJr|X^L;EEB9}?0?$adh8SdhE5pw3#CotRh<7?@adbn$KfeE+0K zPyYtdYwx#2?5w-(d#FU?7?K<>ublBD@B(7C3k$WpD(6=&H`kqi+j|w#s1;9*CUIxBky-i9Q z7vE9yI^$`ueuUWB9c{7Twb`sgO`Gb;>b;L_Yg7i!UNvuqm16TaRc<@BJ!4@p@7g8p z!|s3E@~Msk-7LRsSi5+dCBcUJpy{Q%6+2&_H*I=Uf3c1lK1OHG|q zYts=AM~70Waioj;bnR*;lZzxcwvW7&t4Pdmx;ont38f%O72lC`3VrypIDKdr^!*!T zY5D$-%G}qQ9z2Cp1K=Op7fW?p#w>|SWl zEim8z`iVHtD27nu(Lsam*qkbphIiDX8dNakU+zUm*KCQa)UWMo2J2y_t)M{zSFt{9SZtM1Ccde` zLoY54vK;G9zcT9Z#dT;B${tBA;erb#Wm~G#sWshLWEZ@q>biST%i9}uChKUG_F-vMM z*VeH4ozpS)Cu3gF?ezSI9I`^75ZDZtIehpK1*xm9K8z=oC%wIoa@^@!`JR#RdT5_{+NUTs|fd?xlJjFpHe@&2XaY|pIq zu;|A(-Rqq5cef8{Jqqa|I#uRt_2D9cOm)7aMk`<6!%C`6PlE8lN=&PrvALW#?=;{| zh~u}RmZKr5;hs1yt|>!NSkjRC3SvG>?_i=BTdRI>2`&4l=}HIrgwM8TVdKZd)&0Ap z%q^y*idb^~(lL7jg34QA-Vtey9VQ`25)?a|@0=W#)|n05E9O*StL$LRBM%hKAw@ z6>5PzHx6xI2&nN;|HNWFCW_IT)>WW%=*uD9DDT~yb?i~aah+8pY6#s8YCupXRVAB*lJNP7=2%3(iaUVILehA!s$ev8*hJHfZ#5UH{V* z=<3tiV(91Xu2#GUTHC3jaKAw*&!TrfnNoUE^=i|H9hw{yt2`x|(K<=?afyR{*P{)H zK2pgIodlX+#WE)nl66wZuip%d6r`omnBCv$Ar1B+)_CQz8M;@qRj_SrUN|gio4|y& zaaH+IC~@if^{z-b=+L~3AwHRnJ{L|G8L@I6qey*8I3oc2?*(c2^TkS`M{{VBwKbeS zVRxggU~kju`f_k^Fd3b=s#Q0!y!_rLe0@hQqzf)7qkonVye!tyfjXk|+CQ!{UIZ|r z(sKGYOLEm5qO&s}CatJ-N&x^;sz|l{aQXX;w0od9h9zeJUBMU_pJ>SOVxgqrkSBDZB&87adhc%`@C%Zrm>rhI87g5vD zRGZ`7J8mdjYau!EN0qgYMr~>~#T-SOLPEh;Fo;(oAsGn7Cc>`h`o-Q>qKlk=%n5E) z9JaHH?!n|(Vs^CWpY@G59(|=D`_rgAr2H*yN`yoA1*a-mq8QBUm&+dG)2E=uS9#&d zpP)_u4l_1FViXjH3BA_Ru(GXG)3 z_+EU^Xyn(ge=5xedaX<-$=nXl7bCl!la@M-Dm*%pGNo>H%a!X{SWQ>@@8uqB3>bnP z3uR+XQ6K&stgM_~m+gxA{id-alA2s_#l+m)+T2_Z5C)g<^;3?uBK~tJ$7A;u`gy*F zEbi~P1S788_cYS4vaEDp6s4o1LmLF%T0%L`Zi5y&0By+KFC$q}P#X04roMwjZ-USV zoj~2rtG1WXp6ssn>(_JshzF7~aivC|eUuYl$yGc}Z6X>^+}@6$i(*DY1Ea%IdxMSR-;MNK~8 zB8_`D4v&6=_laXaJK}eYee9A(Z;WDM&9%MQ<Q5-O;UtdN-@0efBJlesVgx6224p zkhwq)2WZLuwC2<3+q9EDA1*dSQHSdig?u5qV{|ttNcwseA{i!V1idM>!^}ymi=mkr zPY}Eo8$on(JqesiFHKgzUoFoWL+Bo~FMc79%T5Atj{Z-@lP1>^6X`n>mG)&rEAY6) zg0B7&c1-bi3wwK(8k>>rOJXRGyK3J6k7M#|fLX<8yioD2_uab>YXPpkrJ20Yt6r^; z69h;X?cPyN`cQ{T4NJ?X0Xl5-tR_qkaYtqG+DgSd_ z-8jKuEsl`G9Qr`K5*8aB9mD^tvXW1mBT>j~uCunzVgKOZa2=9`sM;{SwJ?CP9=Am= z>v1z zKig(Be<;VqhLX(Q((=V3lsUwI-W$Kv3J48~o&>I>jJ&+$mMa%@A__Z(>@Qxd5L)w` z1Ho?6Kc~1A@WN%{4?vsbo}t$dY|x7F(Mt^tz6gkV`TB<$!&H=qT|z|sae-RFxO zh0S0v-+0*RA8gec$(6UTt^8?1Hzwzu9c(^D8Q?}Ta%h&-SgX9&roU+G_?)hf?p$?v z*4Bc>*4Ve+0WJ4rX%_(N-DTyPgJk!yVl0c>&@j`R-QWiy*^F`@;c#>cb=ewaTb@+K zb+FW0^=l#BMK1}OI5l)6-GsH#j>NszLU<2@M1xq9lcO4A&;b_ZVyCsnQHIeY4L>M) z5XYvfA$zGrk8irkD-iNgM1PDUFJjYjxG;oG=DBWWXH}TYGv$X*_j<@vGO}`|Ea0_A8}6%m5Vbx_h)Kp~cagE?9G#be-t6 zuq2T@>A!9EY9-g4BT);d9V@HkQ?88|n!N%DLr#NTZm+rUZ?}^LZGLoLqGJ$MEshuS zsaD#67pHStbpH6_U!iEGjhxZC%|Sy;tw^zkS-YxHsIv5XI=npj3(Y7yAbhi(T7?T4 zeoju>5>npRIHasj)Y*MLt%~Q?5`QOU07i_BNf#Z2ijzWj95o3#{s7wFtiI&$60Ho| zB=nfHujd3jKY4!6!JUIdCNv3WUfo}rFvK0_)=pGf7gnBk@m5_c%|1y}rXP<+cdMNa zY#LzcCTa%X8RluTOV2;a^ADgCV1Y~y*j3y}Ojj{NRGm4&$aC%6E^kT^Th3aIL%YaeNc<#v4y%hSn z1|~QM!Zg#&*Xn>A!5A%j>p?fNDfbdlRR7%;ImGUwT&i$APDe`$(=K*DHS^#M6a) z(l4*pMJ`3@^9`U~c7vd|?L9rqlYvFffgn+;%gbdy3H+n>qT0l$k*V=ZKzt?yh)cdMCb+&ZEPHSwZ9gmviYV2ncibP?9s|B&r#FH zM1AG!M!F7m{Xy|#Q*cF$p^-sB(q+coc{kc~z9-3a&p`1fJ-f?2ekYR|3k(+L-=DBn z-q8!(&AFdEvekoeh@_W*UCa)n$kGA-a`pPP8`rO2yLR2m(wc^v`XMz<()WjpeJ0xZ zADX~AX%}ep4-NUEV-nfpdnwe=G1rF4QQOdof3s29+GBKs6b%hc*pf25-H(rtZw!%w z$@kK(v!0!uZ9EO1Z1(XR?Os&Rw4>hoMgrw3@n)JkAH~Jx z(*B{kLQyH(Bn!9&TTUf|1cZ_#tjN(NO^A|PONWz$)&Jzw?s$dOIq=%<^2Sg>IG>+? zYS6|ak2_Mgc}h48KD0k=g?NKclB>uZQ4#nidmA8_`23F%mLi$Q-@iX(?-S*O_UW9w zmY297dQx(7a$~abXuCCdfI$Lwa*QjAjD)JFII1{0T3Y5K5QvOVpE5E&B_>);i&ldh zvg$mBg4gHd=moE%Zdou~3kVn>@3=2bQldo_Veh1a0t4SCKz&bEQ!5qJ)w9&l&YVg7 zE0YZx_IS}TNI=^7x4f6Q^6eHc?sA6gG^2S0uVr+&l~j zZN3*Tcz8Nv(B-x`a*zrLeN;W^@TCVBgWi3 z_pNu#6)skmNuEk6_Ks|2MPJ>A{)Kxcx!q!pV3vCG^JkXK zZ3^s~gu__d8CiPwHOZ1<4s!)M#;-%4JumAl_QcCU=~R99?<Q3 z+}+#~n)-)~IIdqm9lEf!Ee9h>!ZQy<3_47!P)FJT7SPJsaY?d+9pA~950x()F4C(z z2Q}`3nwi0cn1qCu*JueWF;#D3%Bjt_?BQX_^Mq_bXD@aq8rUxs!(M-=F}!#*fqEiy zC%JZ!+puXv(D9q`mMR$SG^P7NE%^k52`(uZk+xa4(U)=*cgU^r0^{a)Y$!7|g^foK zALbV)6*ecex3%4zyGuod(8(`Jb?V>v#cXqWoNZe_POaXNpO*FP@rzRZ0i!KStxH?u zjgpg3uBQrDy83RLUc5P}iy}!V#-F3T1{(@8X?_C6-F;&&nzBeBy}bGFEY2(yU8oy- z3h^-=#_1?Y9M|4ZhCvvhe5p7Lvuf9VM-O8VGt|7+Dv|aZn$)4+6O|)f zo!)~PKZV!j?G|B|mnv1<-~M;;9#BJ)`3oFU(cOz@k&GSvw$s(xxI|IwzGPkx2SoW5G zkquuSNbnh}baD<1TTQ$dW;+6_ocauPA)<>uoxHU^hTv?6H4KOFAw$hGPNaV0jl ze+DJtq+7&;#YIPOy;r0e)vR|7N=O*!73yKrurt>F@%BKtM7w0Fa9?3_EXNLg%S^2@ zkcj9jw4FL9=I8gsL^l6OSC=D|#lx-OqGaQYz`FC2+K`a4Il3hzG>wh0gyicBUVX}# zMQ+&sTolq(%a+5z(My?S1#PbXYLVJ@dmactKt9xj%qS`=dkoj3LqFTNy1KgC8H{F| z)c~G+E`DuwRVncm&u9>(=?e*1J=#MVTW7+4Ag;{@CVkaj!{U(}c>{7i>R#k!`0*Y| z!ijdHV2k}GeQG_KUZbx)N}w+WRtW(7ZEC=IkO0|rbp&Bp;hp1q;*1?%;^X1r`;Cc= zh`4o!7--~YyQ7Qv;7E+aWTVT`r@7X~2H*Pqht3;ws`5P}X;m9*%Mz9=UjS(_>Rbs- z16l1#H4-jXtrJp(WWFwh!$!pp|DDt#f$`!m-WK!@5_1sO9V-tp!FCtvFfjYYrB2P{4dRDfXM3o>n2BZH&E-!RB-j5LZ=(g z@^!vT!00vGwM1b%dhopC)%7_Xu0*cyIA)|xa7RY^V4mGT?R462@qTfXX>de}{ZKh- zt|Z{`P5B2(-1GwhPFh-2GIwnIt?|$%M=`M}F%d0Hi9z_$Q{v35tl)_66hGGIO^l4j za!l4-G563N5|34I>8#6L!wGUd^7*9!8TF!mhipwN@ak&!&))ob%G4FGqf;zKxyfgC z`=IrT_OeC464^|1gWFLqeiom+)PG(BN{(C}x0JLrDTCM|n43+jUjPPuzm__*`PRzH ziUPr-ZTLolAQC#+XoF&dcbnC8SsUAC=j0S*Wto^;1Ei@9w4xhiD_)i}?KeF7-8PDu zDr$j^Vt-uz%LwJeha*icFgGcrDZ;RMDr1kRPGg3+w4%?;bA~0S6<>}u6?0nH8e}g3 za>v$Wxt#rvvA>tZ@)RDiW;eKcduMmZtGOo^`*@TnuD>1uZ1K^CUeVzRhKMLz=4$D? z!na<`S(C^a4P4J@6>SYA$-H?$lv@3lxg2&uO|Q_{JnoxpylU}1<3N@A!f@~^?MzL| zOzwd;hp6j<#w{}(x$-VjLo3_yl8c#FAc1-)PZC8%Ec&9x05Kn2Gj3WDpZglj0S16= zQY+7))^c^-kHdihw?Beb?45E|+j8dW*SY)m@6WFsAHAr=>z)KQW_QCmS+hgI%DudA z&L)kltg4hI3}2kIvI8}cPN3GKQFxSOVZg@TJ{O711Hx5ao{hPA5;yYSO|I{+Rr~Gj zK8QpD5ms)8o}Z1)8|*~aBdi;c#nGi%0NLPoQW-CB$jUISI51;T%9|q~0{Tvvo!Di6 zf(FlDu0@5^GTG{50|9l6oTSbVAP4+?y-vYZQ62`FBGF)j zEquv%L$g>#8rRkc67b*W58^eRLnjDrTy-iAJH~;^3^VZjePu8e)qC%JU3VU9R>tTK zFIu$ZME%>NVR^Lzaw%m7Y{98>nORTVD<9`bJH#W_NiHIyp&OTVo@!Q=$0+my$z8Ml zmnvj>x=HS{3Y>D27C!wqRRpGK|3p9vka$@4M|U-H`S2YZC|K8q^YI@m%1CIDw;B4E za(XHmL)8PdkDf8Gobnjv(3F}P?xPBK?3iMnQp|u{(Q{bSq=oWk0iY$p)Ly7r@;#=n zxAfPqU)M>KOZ_l!a(v|B&nHkadHa9vF@L~JGZJgp`YtZz4fM--09{c}ma=9`RHb*< zC<`Ny*2>*7#N0$9quGah!gb%{Ut}9HH7f2SiWPd z(c3kS{aZvtljBKHlwOLszmVrboUs?kz%8LaScaK@RoO9 zHb>GRAp_DD$?U=Skg3l%_SZ+V<{QQf1fd+MY4o_G7!5EqurHHEp69`SSa}YZZqErR*VrldoZ`52Ilv-12ZDiK)7SHz=|ZQ| zFq|a|9vTuteYCay&dgCoIM{fAU_#6^+2}sszsP=vjlS6$eoGERlm5yrjm;&M{5xl6 zQBm^3iMsXvX5eR34~ZLo*>g=HMn7hXWesN{LOX(F##{6(kzx=jNLPx_nU92QmFPg& z5IyQ_YioNX;#94-p_MoAoWai2*0ji6juA0^>1~cHlk{f_G8&i5HHZpd>PN?Vy9S&@F4~Ov+Gq`ws)IVzzsz-GD>pz z0dn6aU5>(m_2vR?)wRpX6* z2lGA;eB8HwWK0wyiHJp=!I_FlNa_rf2Mv)d2x!yOg+a zV1$>CPbFzd;MJ>aGt~5<1$W0$3n)XN25J;d@u-?~01Fb$Q96K~Z_SM@ElYi{g@6S< z*ckPipP(R4dMqqF0Y>c4!+Bu|4hkte$hV^`k}?X;Cj@mIJD3O>nbBi~%7GEjjasFZ znzC#wb0Z@i2E<$8xy|>kW_T!{ynM_m!$n)E0Tv_1w*|QH*r@#72x-M;q?GO9db+yc zS(r8~>zrAs^%v6Ds~%_`tyaZA?-A$(If!dc!328|L7ThI8rQ3=@EtIngIDzHJ?x%k z3;y#!VG@|s@6XduO*qUnOzw;&a&K+HE_N5t^F`X+j||IPwX&{PjfyirBKmmyqh?E6 z5m?|g!40+BOeIsL^FR@8YD8%u^#*}P0{j!)WJuHz{l*`^ZCr(RXa_5>^X%o4#)(U9 z(bIJ(CuQmQFHOS1;*zak8vUnegk1huT3Zv2aqjr`R7L%xHjf9XAA#WxsfW@mI|oul zx;TtZINxJYZn3zSBOoAProjt#oR6P1$-DpXa_$IV-)lBRf4s^DOl1DW-!jmDwtgd| z0JJVQs}SJh+Xisv7`Fxl;X8Cf@a=RHn`9sc$|JUqyIjU}i?1JSr7?#s##$hA2lSkG zdi|g94*vfAU1V>j(q2kBmS0=VSpc`PVyjn^uT)a_)_e0SA*Kk`(}GCFx^Dh1beuic zOVXQxoi})%EP;W6QX*N+YwwSM=0o*Z=aDoDW!$CM6OK@;Z=zz2K!l8?%64>f(_Um% zix^rb0Kq@joiB&1S3?~=e1`kUObq;kpNZl<6O)rUQ$)vU3>2!a0lH*`zNFmgS9cz(u8tIX&+nGSMHuEN$xx&-WpmO0Y4%xdVBz71 zb3QF|#7zJ<6U(gSmV|GTfK6HGKxVx(DS?SN)aG=Zc_8hXa5?O>ml-W3%0&LY^YDj^{}CZ4Ic>08m8Mm@mRsM?x_RX2i3 zhUVeJ?Cv+fdZLgd4Ey_gXK-*=y&+k!Bz=L}_x}rI;4Pn3YT}<}|RsdRW zDV-U??Gv9vlJ|h^yTf4vCE(iF#Mx#iAK7U2+YFWKUuLJgTp$Tby;gWPaJD+AAk9~i z^6*=9(V6vCMVwF`7cglQGNIR|{x$DdHHpBAN~{&e>*J)K59qx>UG>ZGT)tE z0lKs9aMfF6Wa-V82NMU_wXp)jEWMoblRe<^;uGK*!Tj%m%Eg^P*u={OV;If|Fag}!ndS%GIdW80eQ-vbF^-_?*N6Bo zwf_1Q5b$|wO022w+>St zerFkPX!CEm#H5GHX|KvXcFix}S;3a*&U*td+CPNWn%qSQs5S4ug6^H zq5qYRwuDWwvNF-vl=b!XfN#<*DRExxR;`r%v}+~@tZL%?d!~8sWwP@DxT_Ybh)jI3 zR#YMH>voH(QxHgXKrpyzl?|Xz57od!5uNeXQGi;20R&Fb}9e?hOF4^t?} z1o*+lTW&ee&2J6fb^J5uUC^p*`Il~4n082J2vbK8BbAD@ocq^CCo{vNIPC7|vW0k0pJ zz2~OGrkni)%9H^-sP;aYoRvIF74jILJ@f;I1R5Lt05`zV+XtxiKR^6S4(*bYAJQ^k zi~>_6b{EZ?r}W4Tzm&QrxYcyAJvcm!?ZIlF`U%TZ^#C(JP!|iOhOZYgjk9WIu87?@ zW9(SxHgNLXS+%oGW_+rs5Kgi*pr5BzWp6OSQWD*nqEXS1^>JzZaI?kH9V`0Vijvg0f9EHt$^V_77-<3N44iCW zbgZ$sC<9g<39nP0Cftx5kZJ+N%4e%m1ni-@#T@D@oL$CdbsshtGCuokjeG0^(WP*K z`5X3^vzfergI=?Kg1eJUPc9`XY5265u>0E3VO!UpOavBKMESre3RRikqoXAnWeUO7 zoItqFEI|uq-gf)XS_UI+h=}sT6BBV@tO_RESeu{sS)R@U&Kq(6(^FhU1wfR5$9Hs; zwY2<>Ktz1{)C5S##KiY$lkULq&ZYC%VU%q#HjzictqXb}H4k=RwI3GkhJLEYO-d%usJ8ETP?G947EJk#>{P$JoO%xm}0QkR{6rsr%oWe+p&8~>oV zXeBaWQH;LZayiNzsCwxvLKz=5KG@rjHCXw*$>(0uM!hD8g7mw`a}`iIz+(gCef|>K z7$?*0VM)sWo{V{KSzAbwd4(v7ynKnRKu6Z`KG?C3-`Zix;NO3j$KdP#dj)*+|EE{) z-?lOi*OUI|^F*&39)9}2b+YZ>`6N>vP*Z^0rq2KDXC61#r#C;PgRWoO9Um*wt& zBM)J+@B96`R0-cs9N=g@lT>NLO|Trb^R#YyP$)44wF#|W3=xj=z6jOuSL9*3_}D`K z`PpJwUzzjIcW!jNjm_L4*3Ff>J5xn`{PTG9bM?l@R?aONKK1(qt-`Q;C7)?O(ApGY|tuF?}P`P8%~?@I`GHeD5;`qG1!5j*4#3~_6lxIMj4vGuIYOIwdvHm zzRL?6<=;G&o8T~n%Sn|Dsd?44)ij|@OUBI*ED~whbh6!gkN^Y(9nUX_i0ZOvBX`=h zIjLJC#d=)HRq)5AhmoHrxQ(pdrf`>6YQmVS%`I$+)7iR&qBXqMxyiOJWtr>f>)Pt_ zvlA73b_1_CZqLHwcc?*X_2C=i_lVoNacLiEOS^Gy? z(oYM|fW%ZP`K*7Y@uC-t8JO(NwhkOhoe+5W8zaAX_9(i6CbND=e%EGq;Urle1B&qR zC}0Mm%G?f{DOE+<`35BcLDyX}c_Y9%iYp!cbYgx&Y;0`yUY0tZmO8b;2?KlDTV#(! zFy&4gh6Z}fCnd`!MRW3Tz4RQTr$*7xNDx3#kFJ&ycsJ9h`3vLj$81#3-?!Sg#-%vL zFPRU$m3OHKax08yH*lS-%!y2IY&zQZ8V${fy@1H-0M5I)Ld*ATlMTNN)*^NpA?8gm z-|2lBbp6!W|6mS<)Y3y7`cwd+Z#*dfX^GM7Y>~ibqsv7>G1KE0D-9|$~Hkzt(zJt}1>mt|r?Z}#3j@g_og zv%g2}S?A7R7`XF$KBh)gB~=@~%MR;eDhG2Obt6_s?PJM$8f8H6mY^c@cq2N7{6cM#)=Z&c^bKvSQKQ4W?xQ zoHUrOG*0>5$nWkj_3VhV~9#gPi;nymtUNb)o`LBB4~yfnbTgH`0|t8 zx^q%-kHXm0^hbQcTh95%@ks2(@k$-2S_$roY;blfbL;i_wXNe7^r!h{!{)PE$HlQa zb?N-IcD2pcoSYmhQ_By4g_Tf7%t?`G6zTl)@ypf(NWRUX1u3{1dV1~pHF?1Xzw=^_ zzF3$1?XO?eEs($jQOF7R| zuke-A?YZ?}by=0)=@BmQbTSL_t-T^)%hwkVTwA+; z7A;j!a(#u1u}~q#*?F@6kWOmNk?GB77HU=l1>CfAb5E)`dQ25ny1l(6G1YwG`frEZ ze%Q~Q^BXoEGKhE_5r(V6@}6%xpDlXr^)njKrQ+s;bu7y6Ud?d)Bs$zqN+WJW2p1tk zRXQZ`hvhuhvZB2i8xD6o-7QfF`4#Z$mALnla6`^SegXY4iNr|o^2vhW9G%AC4sU#u z_u1g==Dgmh+5&-%ho>9E-Gbr%yH>-XZ7*y;Z}47Qz-_R%-2{g^m_w;7r)#SXl#=6ohQOo92_mLlDU^xUy2E_}9)qZO_fjKT zOh2B>F4-RJetT;0D(QzV`(ALo?Q?*ne{FrU*TqS9pO5`!TCxY7*TqiH$`i5SdDF}X z4&t(cT+rqs1X28a*78vJyai&UMEAYE2oCdrm)8VrZ|SyUFe;M#;m)k%k(1}UFA)*d zb#?D!(n*NFhK9!5F_or3E)P{RDEXhw*UukY?Cy@s3rdl zWt-~tu+UI@2-15`x~g1P|K#`tTIaOYSs)L3Q+1!!aG6_Hwr0QQe745>xwN;+pgWRF z6RkTi6?s-w`TY{i(`4c`h5eT8`H%(-yj<4Me_>eMUrArK|45(T;p_FWz#lJH( zv76$a?sMy-s-K64uaX{k;}5eQ-!!AN@9%+gf&Y9yQi5I^L^&QDE*Z$ovy{2J9XYxk z)vh|iJ|GXn*EE$wo{`?Z-Q{C$1b)hG$kfbMbC=ln`P4vETW5^D9`h+g1o4tzMXPRV**;MWCnGSz5FA z*?5nKgaIrt=-)6tR=0?FdnZE`B@4=PcvjIWrOtke~U|Fer`lVS}Z z2YwV3SQ*(WXn7GUu8Q%B64GX*@0fve>~ei{J6cEqSNA8 zcJ^Tj&9vY4`Y7$QC-={Ahw^u?qNC-8RIO%U^~7_B=c8xgB6mmvRBEJia!IXCYsw<< zSrAxibIIa?cTTYp^OS8Df1$>B1i4KRbW_@W5m* zYi&(5>AJf1hE!mAjt^JDuCbg@xhK zw34Uph5A`BQS`O=-5C4Yi(R>i_i5F5$6YKp@Y~l}&rgG90TvHAkZ}c0@_}51L|9meLmx^`pK9y@TS*deHv6Yp>ZZ=xp=jVN&OqN0FupGtCb1QFM z=`hY~7>&G0(65S`4m&+QVJC3*&luEfi4hL*%b;;EiX^OAUL2KR7K5=T>@|jsPP^N? z#F1ZL@C$H74Iq@lLjifBA}lt0vUcfZHdLIkJG2}pNQF(n~lTv*P~+}jMBFVJ1wn-W64TNID{+hO-(I-=h>`n zoGB?JH5#99H-SQ{QjDC-Ydyg#!9CXP^Xww3B)#ZQf_BTL9@2=v!ref+id> z*wcEnUzgVBFR`(*7bu1%sK!1}N<_)+aK<;)0jW*wy0YBycQA<0_#8u?Mt^%aVxTRP z2aBwhfJ`Z;G_D@@?4@5a2)`Z6^H<|(^#007rs|Zn;HIeW!5A)h4f*lok3YnpCnnn4 zgM`X;AF#(XYgO%z7fVH-vLOVwBsihX>?|y~?*=b(CXaNPBnVIQshJD7l&X<#ixR&B0>rEU#P$X%a{~@`$Ma#$c*{t>?iZW=lLNInmV~J2KLi zZ&=c;?I6r$fEvbjAf@IfLNOg0VUfkUe7bOJGWrgJvsRJ!wVb`@HX5uoTb+r^$Z2^K zwUEMp;n)2nM1+VaQ;J9)U#Q9Ea?;*t!95e6-c)IGW=`2nA;|x7caO~Xcz=|TWr07x z!WPGA2#C%n%u>?rO2Wg#@a9Ahx1;Z(7G@uQ_+Cc<9PKC5{|Mk{78Yr(mBsnBgHFuO z;GT0%SUAJ940NkGOG-w@Vbbe(Zd9b4oB?`)B1@Zsof}U|_{Gc+z{kac*CW&Gp4upT zdbSNea7b_REIJMUwD0i&T_@#TU&j3D)6b_DF>H+o) zr!hTxbN5TY$p*ccpWnq!7?3=&m70(KCO*Dd=dvi<$1qJhT2c)VLV`nz=_QT>|KHh{ zKL=QFPH)f7!(vMScBwmeM7ggKibGm$@5hq%bzopWyGy_b?Ji^|e3ACZ)YSBalg5SB z9_HUOfPewdphm->(9-3Cac2oR!2&50(fsU-MZ z(6)v}Dmv3-P1;ztHmkn%85ht5`5ZKCUJo3Wzh#$qVVB?AH46m@Y9ADsU}Zzu2OhiS z4dwv;Sn1?h|If%_c=)ivyoUhri?y}2!oxvr;g7C5&0Jtbj~JT&R39Bz>63YTSZV6< z)m?_4?(+-aean7zKl}WE^}ArT_Q}PdBM6xYB_C-6;L^PW@Rvl$J07EVGlA?iO`doo zeD!B%pPmF(0ecnE(T)K_Zv7gU)jw~_PeF7vc^&}BTxvpeL zEP0<)?NFxeoJ(^)eFq{wZR(bf!la zn_DX}k8chbHaSfE$eldPnWM9971m@B^J~0VsVip=>t1y7IGJ_d_7J{Uh4t=f{~fE*>YC z;o1Ay`@XO1y081OiebZ)&q;V*!eGNnvKD7bj>(ODa=18~Ud;#yx<}ir_9s7-e^tdc zRC6=lNv*S*{Q|2A@bVt~{#>eEe13xSUGH`_^3*RC#b-TMSz?z^5;+j};;P4{FsOvX z5Tb}hea~#BYkviZX6TwwFnc5ynjFjt`T;u9bfZK5*xhRE511&(cAMAR332y73d~)cm2DY| z^Ur(1Gn5Wat=@5(KEe%mpq215$2XD=S4B(F}>H#d2p<3SYILeGiy)UIT?-;*0tp)$5~8KGK1_+IxS7 z7i{(vI3j57@%Z?7p=N>NlHFrr?7*hZ#zbM($EvIf|LBcROS1I5!kaHbk9Ny%)ZsA_Ws@>!4N zzM-bnFN%`&`v$(Yb8_S_hDH?^Rc{oy+=>5mC)y^y6gvQ{D~C_Oq|aJc1e4B4JOda5RooBqZ^l zdkO-kuL2U4P3>l>YMj)Q0-dT96MW_sz@46--fZ&Ta6MUWcbo^+oK+erFNPc5vezZs zyt+GJR7XupI#T&6qLzP*>-zq5m4ogv2+=1TM8C~x88x`Cd0gs-hK-;%&__GN4*Mw@ z-KUb^O=RFrwT76J@np5=x&o*7@4wd6z<=Q^@{ab8E~&4-Nh1((>vEtZt+m`3Dje?R zR|b2Ei_5Vch^O^QJVK;^T6=%KKK5PPPlqr~d#a%dzquJfsAiXavgxnGw{pTKV2MMf z%!v78cf@?_{5M{Kq$|cf|3#~J@l5I3z-3;tJIz$(f$WUIxaI@3PD13k@|c*?@o^rr z$de}^kl`{w@vHTHuy?RP<{FH+=@Emxy~G4!yPUBNK93feXR2&|I_)y4J($j?DjR<9 zDuP|Vu1Y2^{#KEi&JQW$T!lw04EryL3VrQN#o62i!Bp`+yTFueB{Oe}dL7wZIjCq` z0+Cd->_y^$~BO`o!8x%FK*}C2zqRUh>sa{^mzKNFb&8 zIwW4U>HQxxnz4c*bRKqlxguG}{o5iuH8*ZnuF0DUp>2Gn_o@a=eH9E{`F#=208R&O zn66hYlwh@&oj&UD1Y^VKQJ3|IPbZ)j>x|uI@jzfP9uj*gQx&%tHOsYs{qhq6YSHDh zt(y~$;$IQ0?w7Sqpgv9~X0UHmpnI?2v#1w#6<}s$z44_W*Ud4E@Str<5%8&UYFtOs zE|V(A==rpKZBj96Lbz@Xpor6RPcy;U)q?AT>X&-Cr1>~DEMA!@Trna-ZSfPMT9t`) zE~XdCQs{cc)E5{NttwGx$}5ri(7SNQzUJ=CKiN!_0hwTe-;CFvw(FJ&=@A4SH{sC7!Hni3ebgK*S2B z-Ug~T;^f@et!ln)@>$v2*<}HjJ!vcLlSBgkQJSAIk>`=&;i{C2pd2zny4z$M?9*p? zfZp!v<8p(r<}w_u{W6=2kfkRPHAtPQ7F<_{Yd5=_=bBBQ|xCr$nm} zWDQ3EF7e%1-r71AW-8GMF}beCSD5s? z88r<5NW2K=9_zk=krg-DNKht4b{(geb(<7bXy>%uRO*=Nld|^XRwJGAO{WhF3Gq5w zZ(M3!OK++LJM*1egiu-fGjDI53hmY2SQx<3a~19@Z`wdW%;V&Hu?RL5BbvF#nVHR< z7VA2eWnIa_S}V>BAd4#O!2=bkq01Ba1xXscerNkz%XPMqQHFnkv6_j=uJ@bbjR%t~ zI`%I`+-U?b+pP(2CB0?IU4}+Sfp9FL+eI@~ETGY@`$d zi+b*_qkC(NQUfmb4~d9~pd3>U?=mdy&7)BqGE*_HS>l-Q8HEP()=fy>*zO+c(d_lC^Ft19OfK~(CuTz#%*`B*hfXE%HG5t z!_@YBd% z`Hh6ofCNZ%w#F@v771@grNUI3;`E;!9sb!nnD|KdY>pVV^6ALPOGM|uOy~3GoHOi* zUwhDOXd?9KlPi~3ucV3z8`XLX2N&zXk71MI9stuB*>CC>8nh@I)%vf` zRDn$oaQAODwR7Ihm24$#i#l8Et#1+hh$>e*y%{vR6Fi2(j$Q~BTCT;53fJ6Meffa( zAn+$$jgg`JnqB?nemFI2Lch>0=*UGS7?VU`S|tu9d7aa_F=zVZV-hEDc7neIpP!sH z<4!OjWdYPMSP_9DRPJ{2vhNoq6#b$FV+W0)n7DpGJGpVRzj0OR^H}Ui*U%8i>k{&6 zlr$M&_vI|zx`#(c0bWORi%_jk{K;h!RYFKvW)!>`5v&zCuah3r$7mZ*snH`i$-ipuACzm04?=rMU6n117cSIPb+;dvzwaPlNaA{^206gIgN(` z-o;L*m~yOGGfVbE(Rh6M)q32%_ugu2JIo`+z+X9~$^^aXbSvtKdKpe#VJ(qF^nJnN zm%oXv@JW+W*tKD!7GMiPlwMnkn-oN(@JXI^!zYKDG+JwvjcCMuMD4ND)=M|q4Pff@ zm+$2(#Z60lp_c~}J3FaO_j}-Gksxm@Bf#$=p<^s`o=!VjH=unEmFWio1U+3K*~YKf z1mMXN5)#6!`^+eUWd&?FRprn5fl?lc3=a>#edqSk;l9(^=H~n3J+RiVv7RuGHctGWMn>j`S1iO4;UOV9 zP5vH$JHFI~YBbzZ*}SQ=3h-d0kAxtR2W{u->qzkr-YxFi;uQBEsn+>+m$iCt{ITks zH8-&{GqF>D7O<_UwEj0U0bCIX`jsAy;W%%Kc(Ty*6xp;RO@oeN!fNG+wdv9g!aAxF z;HbZ->1^;OQxwIw%J`>WIE=yd4k(mo$yH;cd!NWY^#U2%jCi9ZhyF2kX(IKe@<4K- zjdQ;GMzC7`CHl`={z)9W&hlCDP5vD*o2i`0MZ;j9sB5qCwM(Q(SgrznJ0svSkEjKy zKnRDhwQX+@0i@Qd1tYivR+ZQO%|TltOqe)j#$!301&__iKU!ln-+>okeFKK|I`vY< z*1CUcn*;*H{Z~V!o>-6n9+bBnV~O_y@JqBBIV+Si@zP_QCNbTC<~%A*!#A{{&IP0u z)7TcmI!Jta!0)-%BWI|s7JPRX4KqDTUW|77U9oEDs3p1-yv!mKi zorCi}yZ=y=qdD?`nndx+h1A`##+uqC@za$^yTJqz7mtLCYD}< zqEtoV5@hKC1i#l$tQ4!DjatQsH2QX2j-XVHA7;dTXqxK_X^k&N3Fdn|F;OWPC(e6w z&K-E$T;U-Fh4011R*zEWSrtp?tlR0??4VKeT6O-> z%y}E|c>=PrlZ}nB9DfX$FWC2C#p%ZPIb)jt#k~d$>I>v9*WGN@d!XFOK~k-=ts8Tn zEM>MhgM+?!Sk1~lP$*QZSVR*{06r~Uz}5>8h+x#LZAgTF_JC7xwR3Q4r4M^%u<2)~ zkFf!W>n3LQ=Afp-%t*D@e;8 zoue#_2Ao1r?;8J}8m-QZc1OkwTx{%Jz4B2^H~?U#mrB2h+5!7aYpM+Rdu3j~uCdZbapWmEV@sOnr%0}NTE(hA&+LY!n z;oi@;BUJ8>!mBY#0{~2Q`SW9t>NzjX{R`n-^{!5EyZ#T7_&41AjQ_5^2mIwAQ3s$v zje{=#!o%mq zI11j=0Hm2LeN2E1kW>2hCLgD}Zwi;0&WBvn#rlMfaCFKHQqzj6$Z!gfn9rJ=aGIfg7>T^Fd^u6i z%W43UUa-D5HQ|wjwDlm1q=r8#QH`rVT8wV(@W!;r%pjQD$gkM&o>EB}bq$7#uW9&qXvc3pOIrZ@T?ub`rUx9qQ9nLq^f4I@ZLImmm=Ngd&3nI0AjwlXm6iA7{tS1+$wZ+R{LXN&UG;>^5jY@_XiU3 z5}pG!jhQD<(_|L_@W%vQNTvYWXg8-*^o~y2Q71`bZB3V@z!Kl*1_ody>TlaM?!~(N zyloz;^-N9VX)0NkjUvbkRCVe-qaU-RaD(5)7c;cmRp|gMrsfJ>%;W%t5hU;i=ieXT z_Sduc-y^9A=Fk5g-Q|^j_wUm$M}a%?KM(%@BcPK1fAnlrBJ1(8-ju2rS2_Sg>811C z3kzqOCf2Cbv*{}kxrvQ17iU8;lrhu`gZK4Uja#Jk>^1t2^gJS}U2XV)!)T-Jc;b4U z&h&E`_}|^fE!ybUKhh**4{t;0urT6bR>)%97kb@}O9d+d`BR=<2gZUq&4H+h_;I1jq5c2$$K-@f(nxzED7J%X5N z?M=Fokd;kG5N~i)ve(%RSzRNj9Ga=~m8zf3u}|mUNm&#gz;3|`H8}Fl4(6PEXR3C( za;ky9Y<~Kyc(&PeF{nej18RKh*QYptsLN>n@a9jvS9d|OQ$0CVu=2flYpb|7?%uV9 zUmvdzju$Ir{D@C8-0p~QQHMJi)|NU&J_2-Xl915bg@t=~czELep3Q#eOGjI9at^64 zUkY-KA)_!=EHaPDF51D8TKn#x3h_|C2q2*(BhpV0x8>9>3;P8b?B zW?RzU1O-mn8a)o0_qe5sI3EtWvAaJ>63h?sDjjE~ph>TL`SEWP$(=p`=;xi5tT&lQ zT5xRDbfmv3G`Rcq+A_5v>oYci#KG%dAK%v&FX59=D$aeI<&Xg^6wl` zaJ`})1e!iNY3dRKZcgpz3qn!xY+mIy&~HCNT{kpMho5NJtm|lx8rG>w>YdN-M4LcV zBkdrgU8xmBbE2dk374OX$qo`ot{L}#F>r~3YwR3Izm_RD4up(;foQIp$Bs?!o$Z|* zmFNh$^dl3U6dn{$dY;Y92UJ5V{05_S2o^6jg-nrMO`<~dN8iD)Yk|=taR2kppuRFK z*WA_2>~|Dxuj9CT2r8yo{G(mZI?wrOCP!uNC|SF@a;_;{c=a~eqD(Wl9|~(q53c>{oPfKISy)f=Kp?89pF8s_VJ0R|K7RV-k97^$U%p&u zbvWK(I$-8;b6qbsN=G=E>V$wVqSNFnA-#Nwy@ehyA!ySV6*e`h-qewr;x?#0+zE%oQ$8EG#-`EGl~&vfAgEm29en&vQL~F|CQecx zGXT<}gFtmyTAG8^pY#D&Y~S9jP_?{!E3k|M%#yvNWW|;1eYfvF8!Z??T)pX_l=6@i zdWfbmmyQglYLvKL$8A5oK`p!(Ux{$-F1H$9ex!yPdQ)9&{_flIl2p*=YjyRM)06lg z-#G1?i7F`Y%g6+fC%hML{*(WVP)Ui})HM5%V7X@g8}C1F(2^hZ4MGebe^Kw!Qhm@E zO30C{H^FYWwI8OpH%2>B_V8xbN;4rul3-E6;mW+vdQ`#E9 zJvC1)uWIk6fqsvS!XH9+`WYnwpDpn<(m@|Dlvcgn2)lHO;Ce zPj0BrpmNd5pg=Nj_>w`?wi?P=FwFP?qM66iZ;m>5NY}S%ZfEK;N)nP6D*QTO@cKr* zH!>pdTTYS5TQNtuDR=bD>t^o@idPLy^C|Ao(OvG4P`Q~8;SmtceM2!NB{eluH8oOH z$`o+ldz)!j01|c}7LYxj3plhpsZ9izMTt&vR{ReOxWksWtM$R*scmQQAkdOwx6V~) zX~ls-`5(`qYvkK0g7i~Bv z<_HvKKsS8rJPa(*a$?T&G}K+r*CDcE=ox+k?h3YCd5y#ulJS%c?KYevv;{t1Zy=0ewZ_IsYvYviKhsOHKNAm#F zRZr*hK1{{AhrO03 zp;TMovb+Au^WxC_7@K{(qiyiR>@BFW zj$mDzL*UE~20jth?8q=aT?y_BoJ;lbP_T-K(HFEoveVJ5c*|schX@kL!<5YS;5<7z zIi~K^dv*1-52n0WYmi5U#{OycZXjfyn6}9PapZu*zM)M&;cDw-k7f|&?~2KljiM1O z)Z*_=Q0W}y;Svzo?Tku~jC6G0IdXHBKf$lYY$Q;LPB*-HTyuUr=(Z7`znWWlRip4) zZ7n|f+m8~5R4A)?VsBPU3y+(r<4M@@7R=Jv$p@KZ+Zx8f~boN@8$KE4c?;{+~;H6nBGi;rDY|pbrE^;MzJ0yo^{YZfogcE=`?eu zl}sUSJ0h82W@e~TWs8VVUbENM-Zsba;a!pw?AjWPb7#BGt%a#e1sz>MR5X-f7U9%? zPCgJlIE=Q=gW~*Vkeo_N#d$`CdWqWF6v>Eo?nxzP1N&57KZ|bUw=b_hZ`f?K&6$mD z*;$(%?KHiXtWlz>w@)g zHUpOkTN`WLq~x)DO{ayTTR_pI8UFy-_11c}zrwV-ZwafG*M^n5G0 zp~erDgbtY;S4BlOa1XuDJcl^0z--WR=-!{NI8=Cl2ESg1S?=$VLSO*O36B|#nlNIusY0dD6vDM1T0)t9q)r8IVBi(pdbHjwXb+}>=7=PyvTu_2I ziqVYT!2Z~srhuZ8{4<8aEt+a|p#_exklb(k(%UI+yW5Gi3`eBZntev{5h@GIXSsVH z=R*9{!N(;Web*mij56#6tf%VDM|V5xeaw;AB^JjRC^CawT%#a_uq}ZVNNG zu7>6!<_z;?uJMz;!Js=D`L6c?ngeW4g%uW1YTott#k#kc*2{~Hn)e1$1ItJ79Eeo zq7Pt8p#jyzI`p&9u~8d`yfV||W4KUpBPF+rsP22Ah1*y8RqBry3hL8{?h;?omeYc} zk8N#`GvP%42)nk7QF(wB^mO%8{CK*@@^EazRT;(oeJngVEIeGl-n%!EV1hA{!uK+M zsUpEK1~>YVE~T`Y$9nVIq+50`RLJXn1yTsa20+xTxG6i9O(GZ>OcoMEzME^S+zBE%eU!os^e}|_(0gjAg7PK9|f9(}&sPu4mfoQ2y zf$0`YD&I5wk03sWGAhMf9?X8YIyeC*zSwJ>9Ipn^1;g2K!i_xn!yO#@5N)KA_N+xow7^}T*HDka!JfU6t=1KHS5>NLjGB-{@CA{2{ysd4bo0)4_ zh40h%{QLyHY7zZ%dKNbKs`KaK%`OIrc#0QUeY*>k%?Tfxgza^c@)B>7wDFX2j70*W!|Am^>y=jx4x)%Ny42qpKai z;fk_h9F4Wq4=LlslV=azpW2W`P_NkJ+deOpOCLt8^-yyM@FB=7YwVl6pFigjfT8DQ z-tj)uF_k-(BYE|`)N!GGE#x~gQ@X~ImiZfd4bot*A5kQt;V;-#D^}}INJI>Eka;cR zSYIBnP(WyWZ=nosSsKtuh6}eD_fU@&o7OE8MJ``eP!n|Yc0aHyICXtl*sWjY5`D0L zgr4y^S<2%iXG0AY9Pic+vnG1bieW&UIMHOf?u`Un@TS-?3`Bh{oqy?SvO-RUS{0jnb02uHU^EvVy`4Q=|CZDaPIvgDxmB1;k z3ZLtYWir~Ce3j;wBTNnBi(OSd6TMg;{N7ahb+?z(L7}FKhXVue{OU>eeS%*ro(GZuP{&`qxB$d`VaLVDjJFsdBz{+qKv5T=G_+Y z=Ef5NUw9VR4_M2HU+|tdX4PcvcI}E$F{T8#w_^9kf)2dbH|GY zI%)MM-7k0dZjyf1XX_3+`8DER9^*leR+Ik>NBd-k1!q}6?fzP|^uM02WO^b1L zla!EX@bv}qy(X6(C-|$ShKAVh2fRW;-qR`O!I4uQRwI=rb*gpFlMf$0l#-VA_V#K% z-#zV#Kmh}$JA{`z1WzCklXq68YNe)~0KjOPs#qI{V@67;SG%ouu~fe4iePw3O$;sF z94qXuPIsK7t2y49YkXbrk>Fqn(|(J-XUMFmqGoz<&HNTWuIK#nyf(WJ+e4?k&hg@F z86U@b9A=2k zqIxaJ*i;AH%ubd(zc=>k5+d_E#*P@z5y~@9td=wQKC0i`uvsA7U+_ON*eJp<} z6OThlDF_ljVDqeYFt|cSpOjQ*Gcll%7inH*!szZUBrTof?fo`0a{&(zJKyBh=#AN$ zuG-;u>`17ll`Utv-gEy1C-pl$pswK*YqaCEvXc6{^zPN!$zRFtI?khPs(Y(cD`;2J z_Hp^#$ML$90XMQbFuyPgS!uQxP1h9=Dv^;Prye+o$8wsOw6enEJC7-(w~|C{CeoKf zn2lX4{7Ll)l`Ra}F=s0~(ELF1ZyW$T`zzI@rg|`uf0j@pW2EA^xr+sM91-7l=fBS9 zlvO@=9IsV|hMMmKvNE1G>_bzUl;l%3p1u*(8tmX0NX88s7I(K>^UTBmRw_qIO+m4| zy6U>A{rh-_J@PW~jZuyszcoZba&7P$5c?lNIcb+y6yBV}!OMYl(|()U8SiBTt^3>W11HV}_?ad|sJ=BB z5j61jhbb&>$S99IibEc@7EYuI6K@pjW_Qe1D}1;cj7+ zMYDg}TO-t8kFC-j3DHiR4>6n${CP(1* z6)(YLg@DduaC6Qtd$=f)+k1y`5h*>oO&4q2xQb2htZQ|M4WX6%KfT-+?Pz)i^t)?BBq93T!1^0tD>W zuLleGovk0DH_ArHw}|b#6ZnsAw(_x4G6)7%nJiSUMrhQ#kHZWwLnT%H)0kVgu@w(N z^ia_E!`Xbw{p(u#y!s5S7>~`Ee7%8j%V$R|c+Yro?C=XdB4YfLjXi^%+1Tr)p_p|y zmzmmH9|DhUHWYRtV?9gP#?H{&DW{~cW+en;Hde?41L1l_YnAQlbpl5Hy!9d-hY<|cevw!fRlA~)@dTuZW|9aP+9=pl~jPOZ%#2E=RK}Kt5?-Ujt8`I zll~|!7^|~6s3P}ZS_oka?=$<9N8{@~H@&E0Qyfwptncq7yo{R|jeRl9zfXMYK2kZC z8Mktsv<__X#R3Q=Xc7@OF>U=sXHoXa1E9;%A zHeV9GNvhif&SMqG@*isJtrhC=Z{HC}pyJP=ay;G{JjUI7GSc9MN)tY|n&OID8w62p zRYZ6n0a-bSqd|Cu2qnjDkT%X$!QOO6ew2EGFOjL73UXD$o#_=E1_q$sXouO*<1NYkpZ z2%k~}0+yYTH@l>vA^YU45&+PWIB}ij z`Z24`5EW2bXO=6hKm<9#IvwpQ6&a=`^n*yPW$po z>&;_Iev`m;8Ta#*Xm(q>JFr)?>nL|xP0Ci}#0X4hYw%2_#396xPLri(Ho)4vQ!(kh z{nTfs5hz$6mt=yjgw)$2`RYxsB`IZcE-t8*e=g8()`S;W@d?I65MOozN}>kzT0B_j zivCC~B#X1w%y@Y@Uso3M^PoL!jfyXhQi$h>mPBsYurc&#Jy&~cJDdV$dP1U=piz%#`;rZ(6!8FWA9yTT3#06V=hOT$^Dt6Ie*WMmD zmnnRN>rT*e3)P5rAT9(Ab1x_3sC8~?)?RKeWcpYNX;^d2YW!pzjDJPoc@ytzinK02 zJh z!HSNSFM_sXT$N?Rqr>;;NtCFmC8?5As%*xzEAxB8#WyleeNTSwvgW@Y6hNaqWUfTMdP`)SQ(#Ha^2WCp&#x$q0$^Yq zgbTnfrH%3TGu8J~7tFWR#eDY83b^I&yleD0^F5n^f@ZUz*!G9nFqeV_qyFC-8PX&2 z*du)igkA=41Nk*IYcMS%PW|^n{vs@Fn*m4C(sPMI7!Y24LAdv8mSu$$7guK*t7~hQ z1_vLbYB=~Ee1+WP$1FobK-0Rqk-eqYK8Ia~#Yy0G@gH7!z6_jS8x()^Xl`?kdNcZ~ z8)9@`B!6%=kvmszhPSdZ)OE)&$LIJOOQ+Q9+2qp%NBKaOK0>8rXz|loqNqFb0c);T zpx|Wim0Q!=_fMi~ewf>IDp^4T&uP=E41_#gE1Jv??(>iH-?>G6iQeLvCA&u^i2k`a zOVo)Nv(gX@pwNSDN_z(x-!ldY&m8u|b8D=Tl$h(J=5iszhtRRe%&ItRZNQOgU?Xv# z{mL#mu()OCVkun9C{ydijZ~?z7N2N!0JHP?N_*KL4L4~0 z_WPZAbXeDKB8aSYGA_XDSKGe-@%Hv1+Q#cP4sJxfb|EJkdy&mh?IlYM@_i9hm2H1} zn9?RzaWyomxuT-=^DXh6XWgpT=;Kws8I@#?sTW=J&aJi!oIDS2=VL)}7c@PzGJ{MhJ9_DH_)VLPL@ep#A?2EaNJA zqnHK_Q=5Gcw$7t$&Xxc(EVZzfDjaMx-Uq@x`&6O$_D~Ac6#5~B_4@i>u{Y?ZARz41 z=zqC&=9aKAVVV`E(goaem_s3&!0~(5ZFW_3gKtL;%>?==&XpZ^MK<2*5B_Tv=Lz`M zCWE^Dt)BEdIS?*-#;aG*3G_Vr-7W4E+P_q*koC79kc+j}gXB=o&JvM;#LjCFlaY7R=dV zpY1g|YQUkNRS&!vLjf&-44lCNyzF0_pTI)~?i-~KKVOI3#bLg_(*Bp058{T%a{hr! zae(K(8iR$T9nRcV`Y)S*{P{oFd}~P9!v_#LgYfH&LDygQsqbXha$lpfIDCtiSS5US zuk{KfCk#gXg6&`F0MG|4O6|lM%KmFNWDS2;pbInzke3|^ee~go{mBA2JLH>d_njgX z5v&hJ{PGUIK`!Tios>lH+mHV}L2Xh0rB?ZG9x1UFQ_)<4Ka$jglV2;_pTp-hVv}qMu@|lJ8+yGh1fuE8 zaCg4DFEhRGq6WMN+%QPhgFQO$y>@7kb9@}@o|{i$a+B_%GLrtK`_3Z#0uZ+iF3r>m>|$oM_y$zY;?PQ z`&L=M@kqH->hLFT3d%oBbr!y{cop|c7_}CcmcQqS6TJKZtimgdXSW#$_5AlJ9&UtPa%=IT*YtcUA$(VY#B6s2tO& zQ2?wsoI7UB&xz8y;`^ujwyzDP=Zi^U~exnUY-tlI5O5~l~~^`cmgcL-M2)&*XCLWjhe1s zyK(#DI~$W2@pOZ&Bn@vjTSwDa-dmjw{s-HKg1v@K-V-@*QjdHSXw;?zVmos#7}0^db?&spZYCpk5&6WtAI>cvIND1L!gb+U|h@=<(t4Ciipf zNuokZlR#8b`Mcx#FLL>yX92{<^&n{JgC7%T3L@>jBdBP@wgzuTgcIf|(@xb|17*2= za5CtC%!$3|_F4ocTh$!$5=tE!cob3psHGGQg)RXg>H8L?PGHd8o|%IorMZEb5JEyU zOH!tc#OhN{7zsL+)2O(7oqtGx`9U%-LrDpHTxt}is z_D=$Wh}H`-GeNuQx_8~vV;eO9ir4v`?6!lf)(8vARd_HqI;tpLhtF_( z`Rk6221kOIZY6=WickorR-_$lRmlP6^BI|;`tseI5Zz+nPoTVIs8=EHrE>~6=Z%^T zDhjd{PwdOg3ojB4waC^+83b{<|KTPyIXLewDKMuh_bo6H6{;@MYm7nO;Ld(N;tiIx z_l}wwrRM+nIWo%0uN9a)c0}~8-!MO?%a{KWkHzBMB!a_rFPp{I$9g@AlQ1FS;q}f- zZ$5nd`#A%%s3@Xsam;deuhDkeix(d?9)xk3hq-M}*IN|J%Tx7*wlIq75`A zU(e)eihXIPP|f<`nMTjb&mld%lX`ON)-9(~?7`s_E3hb} z;&zH;3xoz@B|Fj)o}vN*^zM*^f<0g!2uNY(-szI!VqU-f{KzdmHtmLS>^ppoAW99@JGsn59j7}m4H|8Ymz)-Q#q#p%^ilpay3ZC@ zqZd`3il~;);72&0#y1DNES`ogb>v)o^~^Bq{bdj@n27!h7lhW@@|YwipNeiAhe+v; z*-T5i_>4dHy|8USm1*7sf&}GE{;Nm=aCrmd0-*8{pjpc3-`GFk#$gX%))NiNgozrh zJkaz$nZG~_c)|jpfZ|y%xnAwNCeV)a!qrXOeR0Mu7{O`Sv@u>6p^F2eGOi?_wIf{B z07keh`(YA)QE@G7Z>MzhGLMr)PtBrrKob0I$gyG2WYDxzGr}HtTw7TQATC6F*IRzf z1|Lxi#{&PH{8yr}XUBM5Y#c`7Clf+7kG4DAWt5;7zJ|@OA_&$>#QhJSl<}HZ+Y5TW zo0p@ePMy0Hsn{gD6%e#;N@3SC|-=bA-X%c&(9HqSNWiJy$} zl-Djj*z|1n7X0jJHOk{+#0ot_BtQZE(Q1NBYsO^RYejXoQai9l|CT4pj9EB zjmvI#`O-%Pm@xi3K5Inm3JGlWE`!m)7Dg=K6f{g_Q}Q#nOs>#f+4u8tW7DNS+5qCk zyX*Cp_k`*+D%%1~l!UC!#Eu~|u_fSZAR+nvXgL`*Wu zRP6?QQ>N$7I63Fr#^X-0=Z`T|Ea-kpooHm*@WO`7zT|$*b)KLCs7Ug;;gQ!XJvj+= z!nq1NZLd$;pI>|RXRN@j=RyazeCKXidv7ENiEf7@4ZeW>oJr`J4Ijrknj- zmVe}o1jDkt-{oq_t(J2R{AlSy3JH;=tf$I*ScRG`paufaWeW-hXr zk{CT3QgbIz_s_=0^~>#?J7hOPgDz-jS*VT}=?={% z0aZOof9Ex@Fm{INTAQ=xesdd zjn_f<@!OJ;GC%ckI~_2V(h7REBjc|vx8O8_zN@Dr6JlazjftQyYoc?zu!sFv>09W#2L=zik|zO_OdrFi zv{7YEiEv2p`p^TeBj5MHcZd>_sD-_#Yev*I`5nA{!G<|1j-|uDPOze6*Ix@Nv<~7i z$u&i^$<3TTuV39wYg$ahmrYpgfB(6St5=ilv|wf=z9tHO2*=0ASKO!u)A_SH?2Yu@ z&j(tL%-cdfW5Bq;B0#^UZf#d#*1erd#zM88IIcc z9IPbAdVy(GGApGBcePH=$ZPCY{t>4Zi0KK;H$-CCfwn z3n$`0!;6s6P!L<*CLkaNC6pL~Z}EuB{lne;zYUA=!<8gRAJE(bi`{;}v%otg)(74| z5^;1a#GlhW z1KXL1NXpzDS@Q1^U$sGH4Tv_i%T2NmSH6qbN7p4B93&iTS)V81Irzf966Iq4x&^$$AyDTVP!$Hs&wV@bWx@5xEN{%wkn zAl)%cDkarh$&W;Rt7Rtcaa%?e8{~!3;qyBR41BK!t(9y}x|$eq^D+g7-0seymThDuA9mtBbFZ%#KV^=cBv>K_bTsui4&Lu3g-6^86%ZqPAG^6uyT z*Y+b5>mT++4Umx|#e-if*5L9r3?y=xLb4#D%_$H8*Sc{SA*%dGwyB7YL4|M*Lx0jJ zs>alfg@+iz6(Zx<1iHRuy^K65(Ohv(%zKRpl#1n0`?Iv%Wt$)<>b@se%g_2|l8b%% zI(?FBqQqJ{vF8>SQ=W$*7`eMwrQexLE3Bz_9bLFZx17R2^W`7rOATIepARTUi-$8D z2!W?}RH{h8;ND)chqA&dZZPNH3@LE*7e3g%kT;%|f;2K5I2-?k@|Jl(0m46t5#*)B z|8&6!mo;Q#IN9+Zyx_-=9_XL4FqOi}>yQ{_Xj%_Cm7MbhBsx2fq#5M1EN|&#fQlIs z*sKrz-;-VAyC8iBRSP$a@$Pbuoj?1V>~f#wyFLa$2Y$g7NLzsDqRn->#*Dw2|L&H; zGJWPkw8W1?Bs$nN8^rvT4g?Uok%&gsJ*t?^e?oBiY63`%z!6JXqt1tx_=a(al)zEw zALxns97Jp$rvnnF>4_f7ptWxVT42)Nyumi z;@17U5k8}#`hNfqfJ3Crt;A=}c<@xK*5uZ(hn~z$Qh5qchzBPL3{#>))=kCWUmL1b znKljI<{&-@_=%B7Puw48daHkd09MMmrss@^^PiRaiHmG7s6#|tszxIaW7w1T_Re^G zOdpZ>^R+`FnHXR&F-h{H5tj?FytBj@Di6Qc%epTkW{;^VkYJC&uam0z4Z|;~Qu4Jw zP9nx6CZkDqdkZ zSg}nfK}=ngJa8$tHG%z4K=aYPc>%)c8aSGjWj3D5G10SHB#4PWdUKZS&uyFj{=Di} z`V0~RvmaUW)%ERMT&H2|>;8E_Q3yqUJ32^6D{{O(BP17)KEjE3+6GXH=s6+Riqz!f zC=tS=vxV^Wx+g+8zrlZ}qoel$7gup%;ccZal922UMno^o&2JF7@OUyus7LeIXu)1_GAFIEor9U&tKzFdRg*|9N06{#g8nHxC_{IyLE3xc}ewX zm)ga#REDsDm_v$NKmZf!&Z)xfFk6=@uM_HCSm;WT{$Z4Wg;wj>U-LvsbmF?{wlJ~b zSc-N32`B`epqm?bdq<*2ST)NJHizHWlUd5K>mlQ@j?BZQu6R*+poTgX#*`e$F!H!8 zwD{dgOvahYD~CU9|H3(oa#Ss4AOg8|qW}*AkpW1ET9H$G>?93lWYizs*0`qPaD``O zE?e=b^iv``wL~oT(2s%j{FX@_tK1IC`S@lTubf6m_Gx2mO*;*KWF^lVT-=+4AKv4zwoEv$cx6d& z6-pdpVuziDO7s0TzHAg~cZV?>O01MmpMLga7BdfT{Qg$3Q^cRGQLqL*|F>^fuU`GU zJnE{RXD(eJE{G9ub&P@e(etWz(roLM4W|s_P$a_zhg%SQbcVcv`2!AO)+7SrAe>ER z{GGjFn^u+GWXek7saxB|F~v)++jCmAtI5ntECq)90XdihUX)E_c(T{aob?I62&p)u z;FUGvTnKzVum(Gsum9KJP`b&6j|CmJ@=~*wmixv$S8qG}C*{SaYKaZjXZe!P^}8Wa zn6gy|Keh4xS#|0%Z|+S?SHOm%2(ITUD36~kisnkEq@{J;O2Z5>fZzch-%1#5jpi$i zr^t3yin;mtcDB;j;!tGFni<9RIi1CX%zb8^PPNh5uV0JWoQkBaZynYf>n2QQdeCI5 zks`7}Ex6o#?JU(Zm<{yj2l+odcRC*=CXyt;EwZOrE2Rr{}|j!S&7ixn1k z1NdB5oWWcz&|HIR)a=5!%Y}CPWFQU6(do`qWG3cN1V_3E|G6t8bGAk!O&hB*;mnlQ;3Rzu56gjT#RQI;-LN$*rHQOK5a&sf_ zkM15RvQqN$N#0nuBlRaS?Mt^==#IE1w#q+LdHDMqM{<27YPaLV=dKJDORc-|8^_8r zRnmXh%zS!6#ywl=;pc%+_L=WqI_$3?PP<)vDq#Fk$%T`i*|(7;LKPJi3B!v86&eY{ ztVlhNVOoY41fFS0lJy7e;LGbA2pmx>L{-g#3?%N8Y6|d~GPts~$;KSP4 zxb3PW2E>#sJJ=pxqC3CRTED!oo$0TE6m}k~9P=k3CZ1ozm%{HH<|{E7`V>$c(F=(# zHq%Xc#sfP!n0NeTmD0T$RgSajeIwP^uU%JRjZw;xc>*A0%zg}HK+UagJ{qoz>oe~^ zPfZ<>b%x`&(ikLXaB*-wb1nj+!q7s=akl03S&P7KbolQKHcy8B!BMh3y6#-L4Xo+& z01QSmeXNzH7bXISCTSX3?@(U6$bqaID|Qv96LuI_3{`P-eC+sm;uia|BIP3ACOwDE zoafBUTeRs31fiIeJ5NI7Fb{4|EOdOi2#(2W#M8le4Y|Sz60Wi8uXY(7F`Dej04_}U1>v1Gj0CUk#~juB)xXk*xdSP4&{m86m6Z@6Zn>0D zzDZ31*&C_x@%s`n(a~3iFeAg0RVBEt=4rC-Y(+uH!tCBsqZe|%-TD1}U_zhik6(lS z6}`1SEE+tr#rMz#@f`IIlT9Yb**VhMzTanv_Jo`UztioDd%b%n8zYdRf+x#ggyZxU znHA0bTq8-znOMS1=S})#T`!Y;rhGN?(+Asn1j%S|FsyIE5T81QpUuk546Pw3+gvNj z19O<#(Vhh(mW`hS%@Yw}xWe6r`0J_mg+=1~!)v_*u9os>XMqx|EAns#i<&hyqvdh4 z+~3@HQAH@|)poW9kg*X{%HQMS3c%uhO9JgoHjg=tFJ~xYApMm+fxm8`N)Pwz(J46- zGqbaFz0I3*ulwXS1K9d37Rkt{Ml>`ua8nHftTCG_!30s%1j^AI9HDaka58=<(2|v1 z9OWWzX|-)EfhWYu!JE`Fo9F=?-FAhJgEX-%B+tb1%J3JPy>M801+iyBF6;f6W#d@q z^>w>NwkxI`S)#?};_#$UVvZEHb~J+=QV7m0zKygg)33!Yk5oj(O!GOvvW1IQ7i+W6 z;IsrZOXN0`q>b)u8Sb8q&$XWx<>D$b@J*4YJH+j%fzt=X+45UEYIxZsLyP!X*NbY4 z2`b&F(0P>Txg)19ca?#V+7qIVhlitim)P%=%>Ot&`!JMwx-I5@Mq!cCgX@ryxv$VG zHZ4b0X0i=RHYB}J_ya3q52;+Nvr%)(zQy1JlaYK;PeKyXWQTpE?d~Oa75(R7c5WUT zL)!$WHt8r&yjXl!)@2mH_N=q%cFgD3pWVDKh^4k(E^>}59Oo-N)E}&*LCn4t8|u=0 z?D*E)=4tHW_4gaT99K7IR%|^PWa4

1g}%c=;C?#qe3z1O+R$Ygh8UG#>4*m}-qR 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 YW1;B9^C;_6{}h#>zUghW?!&160xBySrvLx| literal 0 HcmV?d00001 diff --git a/src/test/java/com/dropit/product/concurrency/ProductDropConcurrencyTest.java b/src/test/java/com/dropit/product/concurrency/ProductDropConcurrencyTest.java new file mode 100644 index 0000000..bbbdf12 --- /dev/null +++ b/src/test/java/com/dropit/product/concurrency/ProductDropConcurrencyTest.java @@ -0,0 +1,274 @@ +package com.dropit.product.concurrency; + +import com.dropit.drop.dto.request.DropCreateRequest; +import com.dropit.drop.repository.DropRepository; +import com.dropit.drop.service.DropService; +import com.dropit.global.exception.ServiceException; +import com.dropit.global.storage.S3ImageService; +import com.dropit.product.entity.Product; +import com.dropit.product.exception.ProductErrorCode; +import com.dropit.product.repository.ProductRepository; +import com.dropit.product.service.ProductService; +import com.dropit.user.entity.User; +import com.dropit.user.entity.UserRole; +import com.dropit.user.repository.UserRepository; +import org.junit.jupiter.api.AfterEach; +import org.junit.jupiter.api.DisplayName; +import org.junit.jupiter.api.Test; +import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.boot.test.context.SpringBootTest; +import org.springframework.test.context.bean.override.mockito.MockitoBean; + +import java.math.BigDecimal; +import java.time.LocalDateTime; +import java.util.Map; +import java.util.concurrent.ConcurrentHashMap; +import java.util.concurrent.CountDownLatch; +import java.util.concurrent.ExecutorService; +import java.util.concurrent.Executors; +import java.util.concurrent.Future; +import java.util.concurrent.TimeUnit; +import java.util.concurrent.atomic.AtomicInteger; + +import static org.junit.jupiter.api.Assertions.assertEquals; +import static org.junit.jupiter.api.Assertions.assertTrue; + +@SpringBootTest +class ProductDropConcurrencyTest { + + private static final int REPEAT_COUNT = 100; + + @Autowired + private ProductService productService; + + @Autowired + private DropService dropService; + + @Autowired + private UserRepository userRepository; + + @Autowired + private ProductRepository productRepository; + + @Autowired + private DropRepository dropRepository; + + @MockitoBean + private S3ImageService s3ImageService; + + @AfterEach + void cleanUp() { + dropRepository.deleteAllInBatch(); + productRepository.deleteAllInBatch(); + userRepository.deleteAllInBatch(); + } + + @Test + @DisplayName("비관적 락으로 상품 삭제와 Drop 생성을 순차 처리한다") + void controlProductDeleteAndDropCreateWithPessimisticLock() throws Exception { + User seller = userRepository.saveAndFlush(new User( + "concurrency-seller@dropit.test", + "encoded-password", + "concurrency-seller", + UserRole.SELLER + )); + + AtomicInteger deleteSuccess = new AtomicInteger(); + AtomicInteger createSuccess = new AtomicInteger(); + AtomicInteger expectedConflict = new AtomicInteger(); + AtomicInteger unexpectedFailure = new AtomicInteger(); + AtomicInteger orphanDrop = new AtomicInteger(); + Map expectedTypes = new ConcurrentHashMap<>(); + Map unexpectedTypes = new ConcurrentHashMap<>(); + + long startedAt = System.nanoTime(); + + try (ExecutorService executor = Executors.newFixedThreadPool(2)) { + for (int attempt = 0; attempt < REPEAT_COUNT; attempt++) { + Product product = productRepository.saveAndFlush(new Product( + seller, + "Concurrency Product " + attempt, + "Before lock measurement", + null + )); + + CountDownLatch ready = new CountDownLatch(2); + CountDownLatch start = new CountDownLatch(1); + + Future deleteFuture = executor.submit(() -> { + awaitStart(ready, start); + return executeDelete(seller.getId(), product.getId()); + }); + + Future createFuture = executor.submit(() -> { + awaitStart(ready, start); + return executeCreate(seller.getId(), product.getId()); + }); + + assertTrue(ready.await(5, TimeUnit.SECONDS)); + start.countDown(); + + countResult( + deleteFuture.get(10, TimeUnit.SECONDS), + deleteSuccess, + expectedConflict, + unexpectedFailure, + expectedTypes, + unexpectedTypes + ); + countResult( + createFuture.get(10, TimeUnit.SECONDS), + createSuccess, + expectedConflict, + unexpectedFailure, + expectedTypes, + unexpectedTypes + ); + + boolean productExists = productRepository.existsById(product.getId()); + boolean dropExists = dropRepository.existsByProductId(product.getId()); + + if (!productExists && dropExists) { + orphanDrop.incrementAndGet(); + } + + dropRepository.deleteAllInBatch(); + productRepository.deleteById(product.getId()); + productRepository.flush(); + } + } + + long elapsedMillis = TimeUnit.NANOSECONDS.toMillis( + System.nanoTime() - startedAt + ); + + System.out.printf( + "CONCURRENCY_AFTER repeat=%d deleteSuccess=%d createSuccess=%d " + + "expectedConflict=%d unexpectedFailure=%d orphanDrop=%d " + + "elapsedMs=%d expectedTypes=%s unexpectedTypes=%s%n", + REPEAT_COUNT, + deleteSuccess.get(), + createSuccess.get(), + expectedConflict.get(), + unexpectedFailure.get(), + orphanDrop.get(), + elapsedMillis, + expectedTypes, + unexpectedTypes + ); + + assertEquals(REPEAT_COUNT, deleteSuccess.get() + createSuccess.get()); + assertEquals(REPEAT_COUNT, expectedConflict.get()); + assertEquals(0, unexpectedFailure.get()); + assertEquals(REPEAT_COUNT * 2, + deleteSuccess.get() + + createSuccess.get() + + expectedConflict.get() + + unexpectedFailure.get()); + assertEquals(0, orphanDrop.get()); + } + + private OperationResult executeDelete(Long sellerId, Long productId) { + try { + productService.delete(sellerId, productId); + return OperationResult.success(); + } catch (RuntimeException exception) { + return classify(exception); + } + } + + private OperationResult executeCreate(Long sellerId, Long productId) { + try { + dropService.save(sellerId, createRequest(productId)); + return OperationResult.success(); + } catch (RuntimeException exception) { + return classify(exception); + } + } + + private OperationResult classify(RuntimeException exception) { + if (exception instanceof ServiceException serviceException + && (serviceException.getErrorCode() == ProductErrorCode.PRODUCT_NOT_FOUND + || serviceException.getErrorCode() == ProductErrorCode.PRODUCT_IN_USE_BY_DROP)) { + return OperationResult.expectedConflict( + serviceException.getErrorCode().code() + ); + } + + return OperationResult.unexpected(exception.getClass().getSimpleName()); + } + + private void countResult( + OperationResult result, + AtomicInteger success, + AtomicInteger expectedConflict, + AtomicInteger unexpectedFailure, + Map expectedTypes, + Map unexpectedTypes + ) { + if (result.status() == ResultStatus.SUCCESS) { + success.incrementAndGet(); + return; + } + + if (result.status() == ResultStatus.EXPECTED_CONFLICT) { + expectedConflict.incrementAndGet(); + expectedTypes.computeIfAbsent( + result.exceptionType(), + key -> new AtomicInteger() + ).incrementAndGet(); + return; + } + + unexpectedFailure.incrementAndGet(); + unexpectedTypes.computeIfAbsent( + result.exceptionType(), + key -> new AtomicInteger() + ).incrementAndGet(); + } + + private void awaitStart( + CountDownLatch ready, + CountDownLatch start + ) throws InterruptedException { + ready.countDown(); + start.await(); + } + + private DropCreateRequest createRequest(Long productId) { + LocalDateTime openAt = LocalDateTime.now().plusDays(1); + + return new DropCreateRequest( + productId, + new BigDecimal("59000"), + 100, + 0, + 1, + openAt, + openAt.plusDays(1) + ); + } + + private enum ResultStatus { + SUCCESS, + EXPECTED_CONFLICT, + UNEXPECTED_FAILURE + } + + private record OperationResult( + ResultStatus status, + String exceptionType + ) { + private static OperationResult success() { + return new OperationResult(ResultStatus.SUCCESS, null); + } + + private static OperationResult expectedConflict(String errorCode) { + return new OperationResult(ResultStatus.EXPECTED_CONFLICT, errorCode); + } + + private static OperationResult unexpected(String exceptionType) { + return new OperationResult(ResultStatus.UNEXPECTED_FAILURE, exceptionType); + } + } +} From 7060b463b1eee1a5c5f837b0ac9da95f486ad9cc Mon Sep 17 00:00:00 2001 From: Sooyoung Yoon Date: Thu, 10 Sep 2026 10:19:31 +0900 Subject: [PATCH 08/98] =?UTF-8?q?fix(drop):=20=ED=8C=90=EB=A7=A4=20?= =?UTF-8?q?=EC=A0=95=EC=B1=85=20=EC=9C=A0=ED=9A=A8=EC=84=B1=20=EA=B2=80?= =?UTF-8?q?=EC=A6=9D=20=EB=B3=B4=EC=99=84?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../java/com/dropit/drop/entity/Drop.java | 35 ++++++++-- .../dropit/drop/exception/DropErrorCode.java | 1 + .../java/com/dropit/drop/entity/DropTest.java | 64 +++++++++++++++++++ 3 files changed, 96 insertions(+), 4 deletions(-) diff --git a/src/main/java/com/dropit/drop/entity/Drop.java b/src/main/java/com/dropit/drop/entity/Drop.java index 35d05cf..37f9c7e 100644 --- a/src/main/java/com/dropit/drop/entity/Drop.java +++ b/src/main/java/com/dropit/drop/entity/Drop.java @@ -59,6 +59,7 @@ public Drop( LocalDateTime openAt, LocalDateTime closeAt ) { + validateSalesValues(price, initialQuantity, discountRate, purchaseLimit); validatePeriod(openAt, closeAt); this.product = product; @@ -91,25 +92,48 @@ public void update( int updatedInitialQuantity = initialQuantity != null ? initialQuantity : this.initialQuantity; LocalDateTime updatedOpenAt = openAt != null ? openAt : this.openAt; LocalDateTime updatedCloseAt = closeAt != null ? closeAt : this.closeAt; + int updatedDiscountRate = discountRate != null ? discountRate : this.discountRate; + int updatedPurchaseLimit = purchaseLimit != null ? purchaseLimit : this.purchaseLimit; + BigDecimal updatedPrice = price != null ? price : this.price; + + validateSalesValues(updatedPrice, updatedInitialQuantity, updatedDiscountRate, updatedPurchaseLimit); validatePeriod(updatedOpenAt, updatedCloseAt); if (this.remainingQuantity == this.initialQuantity) { this.remainingQuantity = updatedInitialQuantity; } this.initialQuantity = updatedInitialQuantity; - this.price = price != null ? price : this.price; - this.discountRate = discountRate != null ? discountRate : this.discountRate; - this.purchaseLimit = purchaseLimit != null ? purchaseLimit : this.purchaseLimit; + this.price = updatedPrice; + this.discountRate = updatedDiscountRate; + this.purchaseLimit = updatedPurchaseLimit; this.openAt = updatedOpenAt; this.closeAt = updatedCloseAt; } private static void validatePeriod(LocalDateTime openAt, LocalDateTime closeAt) { - if (!openAt.isBefore(closeAt)) { + if (openAt == null || closeAt == null || !openAt.isBefore(closeAt)) { throw new ServiceException(DropErrorCode.INVALID_DROP_PERIOD); } } + private static void validateSalesValues( + BigDecimal price, + int initialQuantity, + int discountRate, + int purchaseLimit + ) { + if (price == null + || price.signum() <= 0 + || price.scale() > 0 + || price.precision() - price.scale() > 13 + || initialQuantity <= 0 + || discountRate < 0 + || discountRate > 100 + || purchaseLimit < 0) { + throw new ServiceException(DropErrorCode.INVALID_DROP_VALUE); + } + } + public void ensureEditable(LocalDateTime now) { if (!now.isBefore(openAt)) { throw new ServiceException(DropErrorCode.DROP_ALREADY_STARTED); @@ -121,6 +145,9 @@ public void changeVisibility(boolean visible) { } public void decreaseStock(int quantity, LocalDateTime now) { + if (quantity <= 0) { + throw new ServiceException(DropErrorCode.INVALID_DROP_VALUE); + } if (!visible || currentStatus(now) != DropStatus.OPEN) { throw new ServiceException(DropErrorCode.DROP_NOT_OPEN); } diff --git a/src/main/java/com/dropit/drop/exception/DropErrorCode.java b/src/main/java/com/dropit/drop/exception/DropErrorCode.java index f0f4e45..6dc449d 100644 --- a/src/main/java/com/dropit/drop/exception/DropErrorCode.java +++ b/src/main/java/com/dropit/drop/exception/DropErrorCode.java @@ -11,6 +11,7 @@ public enum DropErrorCode implements ErrorCode { DROP_OWNER_REQUIRED(HttpStatus.FORBIDDEN, "해당 드랍은 판매자만 관리할 수 있습니다."), DROP_NOT_OPEN(HttpStatus.CONFLICT, "현재 주문할 수 없는 드랍입니다."), INSUFFICIENT_STOCK(HttpStatus.CONFLICT, "드랍 재고가 부족합니다."), + INVALID_DROP_VALUE(HttpStatus.BAD_REQUEST, "드랍 판매 값이 올바르지 않습니다."), INVALID_DROP_PERIOD(HttpStatus.BAD_REQUEST, "판매 종료 시각은 시작 시각보다 늦어야 합니다."), DROP_ALREADY_STARTED(HttpStatus.CONFLICT, "이미 판매가 시작된 드랍입니다."); diff --git a/src/test/java/com/dropit/drop/entity/DropTest.java b/src/test/java/com/dropit/drop/entity/DropTest.java index 082f76a..d4962f4 100644 --- a/src/test/java/com/dropit/drop/entity/DropTest.java +++ b/src/test/java/com/dropit/drop/entity/DropTest.java @@ -11,6 +11,7 @@ import static org.junit.jupiter.api.Assertions.assertEquals; import static org.junit.jupiter.api.Assertions.assertThrows; +import static org.junit.jupiter.api.Assertions.assertAll; import static org.mockito.Mockito.mock; class DropTest { @@ -38,6 +39,69 @@ void acceptZeroPurchaseLimitAsUnlimited() { assertEquals(0, drop.getPurchaseLimit()); } + @Test + @DisplayName("드랍 생성 시 숫자 판매 정책의 유효 범위를 검증한다") + void rejectInvalidSalesValuesOnCreate() { + LocalDateTime openAt = LocalDateTime.now().plusDays(1); + + assertAll( + () -> assertThrows(ServiceException.class, + () -> new Drop(product, BigDecimal.ZERO, 10, 20, 0, openAt, openAt.plusDays(1))), + () -> assertThrows(ServiceException.class, + () -> new Drop(product, new BigDecimal("59000"), 0, 20, 0, openAt, openAt.plusDays(1))), + () -> assertThrows(ServiceException.class, + () -> new Drop(product, new BigDecimal("59000"), 10, 101, 0, openAt, openAt.plusDays(1))), + () -> assertThrows(ServiceException.class, + () -> new Drop(product, new BigDecimal("59000"), 10, 20, -1, openAt, openAt.plusDays(1))), + () -> assertThrows(ServiceException.class, + () -> new Drop(product, new BigDecimal("59000.50"), 10, 20, 0, openAt, openAt.plusDays(1))), + () -> assertThrows(ServiceException.class, + () -> new Drop(product, new BigDecimal("10000000000000"), 10, 20, 0, openAt, openAt.plusDays(1))) + ); + } + + @Test + @DisplayName("드랍 수정은 최종 값 전체를 검증하고 실패 시 기존 값을 보존한다") + void preserveAllValuesWhenUpdateIsInvalid() { + LocalDateTime openAt = LocalDateTime.now().plusDays(1); + LocalDateTime closeAt = openAt.plusDays(1); + Drop drop = new Drop(product, new BigDecimal("59000"), 10, 20, 2, openAt, closeAt); + + assertThrows( + ServiceException.class, + () -> drop.update( + new BigDecimal("49000"), + 20, + 101, + 3, + openAt, + closeAt + ) + ); + + assertAll( + () -> assertEquals(new BigDecimal("59000"), drop.getPrice()), + () -> assertEquals(10, drop.getInitialQuantity()), + () -> assertEquals(10, drop.getRemainingQuantity()), + () -> assertEquals(20, drop.getDiscountRate()), + () -> assertEquals(2, drop.getPurchaseLimit()), + () -> assertEquals(openAt, drop.getOpenAt()), + () -> assertEquals(closeAt, drop.getCloseAt()) + ); + } + + @Test + @DisplayName("재고 차감 수량은 양수만 허용한다") + void rejectNonPositiveDecreaseQuantity() { + LocalDateTime now = LocalDateTime.of(2026, 9, 2, 12, 0); + Drop drop = new Drop(product, new BigDecimal("59000"), 10, 20, 0, now.minusHours(1), now.plusHours(1)); + drop.changeVisibility(true); + + assertThrows(ServiceException.class, () -> drop.decreaseStock(0, now)); + assertThrows(ServiceException.class, () -> drop.decreaseStock(-1, now)); + assertEquals(10, drop.getRemainingQuantity()); + } + @Test @DisplayName("드랍은 생성 시 기본적으로 비공개 상태이다") void defaultVisibilityIsFalse() { From 849b6714c3f4ebb34e8a2d10e766cd9dd85f989c Mon Sep 17 00:00:00 2001 From: Sooyoung Yoon Date: Thu, 10 Sep 2026 10:19:41 +0900 Subject: [PATCH 09/98] =?UTF-8?q?fix(order):=20=EB=8F=99=EC=8B=9C=20?= =?UTF-8?q?=EC=A3=BC=EB=AC=B8=20=EC=9E=AC=EA=B3=A0=20=EC=9E=A0=EA=B8=88=20?= =?UTF-8?q?=EC=B2=98=EB=A6=AC?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../drop/repository/DropRepository.java | 11 + .../dropit/order/service/OrderService.java | 2 +- .../service/OrderServiceConcurrencyTest.java | 254 ++++++++++++++++++ .../order/service/OrderServiceTest.java | 4 +- 4 files changed, 268 insertions(+), 3 deletions(-) create mode 100644 src/test/java/com/dropit/order/service/OrderServiceConcurrencyTest.java diff --git a/src/main/java/com/dropit/drop/repository/DropRepository.java b/src/main/java/com/dropit/drop/repository/DropRepository.java index 2efb341..4305ba6 100644 --- a/src/main/java/com/dropit/drop/repository/DropRepository.java +++ b/src/main/java/com/dropit/drop/repository/DropRepository.java @@ -3,8 +3,15 @@ import com.dropit.drop.entity.Drop; import org.springframework.data.domain.Page; import org.springframework.data.domain.Pageable; +import org.springframework.data.jpa.repository.Lock; +import org.springframework.data.jpa.repository.Query; +import org.springframework.data.repository.query.Param; import org.springframework.data.jpa.repository.JpaRepository; +import jakarta.persistence.LockModeType; + +import java.util.Optional; + public interface DropRepository extends JpaRepository, DropRepositoryCustom { boolean existsByProductId(Long productId); @@ -20,4 +27,8 @@ Page findAllByProductSellerId( Long sellerId, Pageable pageable ); + + @Lock(LockModeType.PESSIMISTIC_WRITE) + @Query("select d from Drop d where d.id = :dropId") + Optional findByIdForUpdate(@Param("dropId") Long dropId); } diff --git a/src/main/java/com/dropit/order/service/OrderService.java b/src/main/java/com/dropit/order/service/OrderService.java index 9e17ef2..52f41a5 100644 --- a/src/main/java/com/dropit/order/service/OrderService.java +++ b/src/main/java/com/dropit/order/service/OrderService.java @@ -40,7 +40,7 @@ public OrderResponse create(Long userId, OrderCreateRequest request) { .orElseThrow(() -> new ServiceException(UserErrorCode.USER_NOT_FOUND)); OrderItemCreateRequest itemRequest = request.items().getFirst(); - Drop drop = dropRepository.findById(itemRequest.dropId()) + Drop drop = dropRepository.findByIdForUpdate(itemRequest.dropId()) .orElseThrow(() -> new ServiceException(DropErrorCode.DROP_NOT_FOUND)); LocalDateTime now = LocalDateTime.now(); validatePurchaseLimit(userId, drop, itemRequest.quantity()); diff --git a/src/test/java/com/dropit/order/service/OrderServiceConcurrencyTest.java b/src/test/java/com/dropit/order/service/OrderServiceConcurrencyTest.java new file mode 100644 index 0000000..200b3c5 --- /dev/null +++ b/src/test/java/com/dropit/order/service/OrderServiceConcurrencyTest.java @@ -0,0 +1,254 @@ +package com.dropit.order.service; + +import com.dropit.drop.entity.Drop; +import com.dropit.drop.repository.DropRepository; +import com.dropit.global.config.QuerydslConfig; +import com.dropit.order.dto.request.OrderCreateRequest; +import com.dropit.order.dto.request.OrderItemCreateRequest; +import com.dropit.order.entity.OrderItem; +import com.dropit.order.repository.OrderItemRepository; +import com.dropit.order.repository.OrderRepository; +import com.dropit.product.entity.Product; +import com.dropit.product.repository.ProductRepository; +import com.dropit.user.entity.User; +import com.dropit.user.entity.UserRole; +import com.dropit.user.repository.UserRepository; +import org.junit.jupiter.api.AfterEach; +import org.junit.jupiter.api.BeforeEach; +import org.junit.jupiter.api.DisplayName; +import org.junit.jupiter.api.Test; +import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.boot.jdbc.test.autoconfigure.AutoConfigureTestDatabase; +import org.springframework.boot.data.jpa.test.autoconfigure.DataJpaTest; +import org.springframework.context.annotation.Import; +import org.springframework.jdbc.core.JdbcTemplate; +import org.springframework.test.context.DynamicPropertyRegistry; +import org.springframework.test.context.DynamicPropertySource; +import org.springframework.transaction.annotation.Propagation; +import org.springframework.transaction.annotation.Transactional; +import org.testcontainers.containers.MySQLContainer; + +import java.math.BigDecimal; +import java.time.LocalDateTime; +import java.util.ArrayList; +import java.util.List; +import java.util.concurrent.CountDownLatch; +import java.util.concurrent.ExecutionException; +import java.util.concurrent.ExecutorService; +import java.util.concurrent.Executors; +import java.util.concurrent.Future; +import java.util.concurrent.TimeUnit; + +import static org.junit.jupiter.api.Assertions.assertEquals; +import static org.junit.jupiter.api.Assertions.assertThrows; +import static org.junit.jupiter.api.Assertions.assertTrue; + +@DataJpaTest(properties = { + "spring.jpa.hibernate.ddl-auto=create-drop", + "spring.jpa.open-in-view=false" +}) +@AutoConfigureTestDatabase(replace = AutoConfigureTestDatabase.Replace.NONE) +@Import({OrderService.class, QuerydslConfig.class}) +@Transactional(propagation = Propagation.NOT_SUPPORTED) +class OrderServiceConcurrencyTest { + + private static final String TRIGGER_NAME = "fail_order_item_insert_for_test"; + private static final MySQLContainer MYSQL = new MySQLContainer<>("mysql:8.4") + .withDatabaseName("dropit_test") + .withUsername("test") + .withPassword("test") + .withCommand("mysqld", "--log-bin-trust-function-creators=1"); + + static { + MYSQL.start(); + } + + @Autowired private OrderService orderService; + @Autowired private UserRepository userRepository; + @Autowired private ProductRepository productRepository; + @Autowired private DropRepository dropRepository; + @Autowired private OrderRepository orderRepository; + @Autowired private OrderItemRepository orderItemRepository; + @Autowired private JdbcTemplate jdbcTemplate; + + @DynamicPropertySource + static void registerDatasourceProperties(DynamicPropertyRegistry registry) { + registry.add("spring.datasource.url", MYSQL::getJdbcUrl); + registry.add("spring.datasource.username", MYSQL::getUsername); + registry.add("spring.datasource.password", MYSQL::getPassword); + } + + @BeforeEach + void cleanDatabase() { + orderItemRepository.deleteAllInBatch(); + orderRepository.deleteAllInBatch(); + dropRepository.deleteAllInBatch(); + productRepository.deleteAllInBatch(); + userRepository.deleteAllInBatch(); + } + + @AfterEach + void removeFailureTrigger() { + jdbcTemplate.execute("DROP TRIGGER IF EXISTS " + TRIGGER_NAME); + } + + @Test + @DisplayName("재고 100개에 200명이 동시에 주문해도 100건만 확정된다") + void preventOversellingWithConcurrentOrders() throws Exception { + Fixture fixture = createFixture(100, 200); + + CallResult result = placeConcurrentOrders(fixture, 1, 32); + + assertEquals(100, result.successes()); + assertEquals(100, result.rejections()); + assertEquals(100, orderRepository.count()); + assertEquals(100, totalOrderedQuantity()); + assertEquals(0, remainingQuantity(fixture.drop())); + } + + @Test + @DisplayName("재고 10개에 수량 3 주문을 경합하면 3건만 확정되고 1개가 남는다") + void preserveRemainingStockWhenConcurrentQuantityExceedsStock() throws Exception { + Fixture fixture = createFixture(10, 4); + + CallResult result = placeConcurrentOrders(fixture, 3, 4); + + assertEquals(3, result.successes()); + assertEquals(1, result.rejections()); + assertEquals(3, orderRepository.count()); + assertEquals(9, totalOrderedQuantity()); + assertEquals(1, remainingQuantity(fixture.drop())); + } + + @Test + @DisplayName("주문 항목 저장에 실패하면 재고와 주문 데이터가 함께 rollback된다") + void rollbackStockWhenOrderItemSaveFails() { + Fixture fixture = createFixture(10, 1); + jdbcTemplate.execute(""" + CREATE TRIGGER fail_order_item_insert_for_test + BEFORE INSERT ON order_items + FOR EACH ROW + SIGNAL SQLSTATE '45000' SET MESSAGE_TEXT = 'forced test failure' + """); + + assertThrows( + RuntimeException.class, + () -> orderService.create( + fixture.buyers().getFirst().getId(), + orderRequest(fixture.drop().getId(), 1) + ) + ); + + assertEquals(10, remainingQuantity(fixture.drop())); + assertEquals(0, orderRepository.count()); + assertEquals(0, orderItemRepository.count()); + } + + private CallResult placeConcurrentOrders(Fixture fixture, int quantity, int workerCount) throws Exception { + ExecutorService executor = Executors.newFixedThreadPool(workerCount); + CountDownLatch workersReady = new CountDownLatch(workerCount); + CountDownLatch startSignal = new CountDownLatch(1); + List> futures = new ArrayList<>(); + + try { + for (int worker = 0; worker < workerCount; worker++) { + int workerIndex = worker; + futures.add(executor.submit(() -> { + workersReady.countDown(); + assertTrue(startSignal.await(10, TimeUnit.SECONDS)); + + int successes = 0; + int rejections = 0; + for (int index = workerIndex; index < fixture.buyers().size(); index += workerCount) { + try { + orderService.create( + fixture.buyers().get(index).getId(), + orderRequest(fixture.drop().getId(), quantity) + ); + successes++; + } catch (com.dropit.global.exception.ServiceException exception) { + rejections++; + } + } + return new CallResult(successes, rejections); + })); + } + + assertTrue(workersReady.await(10, TimeUnit.SECONDS)); + startSignal.countDown(); + + int successes = 0; + int rejections = 0; + for (Future future : futures) { + CallResult result = get(future); + successes += result.successes(); + rejections += result.rejections(); + } + return new CallResult(successes, rejections); + } finally { + executor.shutdownNow(); + assertTrue(executor.awaitTermination(10, TimeUnit.SECONDS)); + } + } + + private CallResult get(Future future) throws Exception { + try { + return future.get(60, TimeUnit.SECONDS); + } catch (ExecutionException exception) { + throw new AssertionError("동시 주문 작업이 예외로 종료되었습니다.", exception.getCause()); + } + } + + private Fixture createFixture(int stock, int buyerCount) { + User seller = userRepository.saveAndFlush( + new User("seller@example.com", "password", "seller", UserRole.SELLER) + ); + Product product = productRepository.saveAndFlush( + new Product(seller, "Limited Hoodie", "description", null) + ); + LocalDateTime openAt = LocalDateTime.now().minusMinutes(1); + Drop drop = new Drop( + product, + new BigDecimal("59000"), + stock, + 20, + 0, + openAt, + openAt.plusHours(1) + ); + drop.changeVisibility(true); + drop = dropRepository.saveAndFlush(drop); + + List buyers = new ArrayList<>(); + for (int index = 0; index < buyerCount; index++) { + buyers.add(new User( + "buyer" + index + "@example.com", + "password", + "buyer" + index, + UserRole.USER + )); + } + buyers = userRepository.saveAllAndFlush(buyers); + return new Fixture(drop, buyers); + } + + private OrderCreateRequest orderRequest(Long dropId, int quantity) { + return new OrderCreateRequest(List.of(new OrderItemCreateRequest(dropId, quantity))); + } + + private int remainingQuantity(Drop drop) { + return dropRepository.findById(drop.getId()).orElseThrow().getRemainingQuantity(); + } + + private long totalOrderedQuantity() { + return orderItemRepository.findAll().stream() + .mapToLong(OrderItem::getQuantity) + .sum(); + } + + private record Fixture(Drop drop, List buyers) { + } + + private record CallResult(int successes, int rejections) { + } +} diff --git a/src/test/java/com/dropit/order/service/OrderServiceTest.java b/src/test/java/com/dropit/order/service/OrderServiceTest.java index 5c8fd89..12cc5b5 100644 --- a/src/test/java/com/dropit/order/service/OrderServiceTest.java +++ b/src/test/java/com/dropit/order/service/OrderServiceTest.java @@ -55,7 +55,7 @@ void createOrder() { OrderCreateRequest request = new OrderCreateRequest(List.of(new OrderItemCreateRequest(100L, 2))); when(userRepository.findById(1L)).thenReturn(Optional.of(buyer)); - when(dropRepository.findById(100L)).thenReturn(Optional.of(drop)); + when(dropRepository.findByIdForUpdate(100L)).thenReturn(Optional.of(drop)); when(orderItemRepository.sumQuantityByUserAndDropAndStatus(1L, 100L, OrderStatus.ORDERED)) .thenReturn(0L); when(orderRepository.save(any(Order.class))).thenAnswer(invocation -> { @@ -86,7 +86,7 @@ void rejectPurchaseLimitExceeded() { OrderCreateRequest request = new OrderCreateRequest(List.of(new OrderItemCreateRequest(100L, 2))); when(userRepository.findById(1L)).thenReturn(Optional.of(buyer)); - when(dropRepository.findById(100L)).thenReturn(Optional.of(drop)); + when(dropRepository.findByIdForUpdate(100L)).thenReturn(Optional.of(drop)); when(orderItemRepository.sumQuantityByUserAndDropAndStatus(1L, 100L, OrderStatus.ORDERED)) .thenReturn(1L); From 710b69d596a0bade5cbce26957b882a3a6300725 Mon Sep 17 00:00:00 2001 From: Sooyoung Yoon Date: Thu, 10 Sep 2026 11:19:13 +0900 Subject: [PATCH 10/98] =?UTF-8?q?test(concurrency):=20Testcontainers?= =?UTF-8?q?=EB=A1=9C=20=EA=B2=BD=ED=95=A9=20=ED=85=8C=EC=8A=A4=ED=8A=B8=20?= =?UTF-8?q?=ED=99=98=EA=B2=BD=20=EA=B2=A9=EB=A6=AC?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../service/OrderServiceConcurrencyTest.java | 4 +-- .../ProductDropConcurrencyTest.java | 30 +++++++++++++++++-- 2 files changed, 30 insertions(+), 4 deletions(-) diff --git a/src/test/java/com/dropit/order/service/OrderServiceConcurrencyTest.java b/src/test/java/com/dropit/order/service/OrderServiceConcurrencyTest.java index 200b3c5..3de7a11 100644 --- a/src/test/java/com/dropit/order/service/OrderServiceConcurrencyTest.java +++ b/src/test/java/com/dropit/order/service/OrderServiceConcurrencyTest.java @@ -26,7 +26,7 @@ import org.springframework.test.context.DynamicPropertySource; import org.springframework.transaction.annotation.Propagation; import org.springframework.transaction.annotation.Transactional; -import org.testcontainers.containers.MySQLContainer; +import org.testcontainers.mysql.MySQLContainer; import java.math.BigDecimal; import java.time.LocalDateTime; @@ -53,7 +53,7 @@ class OrderServiceConcurrencyTest { private static final String TRIGGER_NAME = "fail_order_item_insert_for_test"; - private static final MySQLContainer MYSQL = new MySQLContainer<>("mysql:8.4") + private static final MySQLContainer MYSQL = new MySQLContainer("mysql:8.4") .withDatabaseName("dropit_test") .withUsername("test") .withPassword("test") diff --git a/src/test/java/com/dropit/product/concurrency/ProductDropConcurrencyTest.java b/src/test/java/com/dropit/product/concurrency/ProductDropConcurrencyTest.java index bbbdf12..2ac1322 100644 --- a/src/test/java/com/dropit/product/concurrency/ProductDropConcurrencyTest.java +++ b/src/test/java/com/dropit/product/concurrency/ProductDropConcurrencyTest.java @@ -3,6 +3,7 @@ import com.dropit.drop.dto.request.DropCreateRequest; import com.dropit.drop.repository.DropRepository; import com.dropit.drop.service.DropService; +import com.dropit.global.config.QuerydslConfig; import com.dropit.global.exception.ServiceException; import com.dropit.global.storage.S3ImageService; import com.dropit.product.entity.Product; @@ -16,8 +17,15 @@ import org.junit.jupiter.api.DisplayName; import org.junit.jupiter.api.Test; import org.springframework.beans.factory.annotation.Autowired; -import org.springframework.boot.test.context.SpringBootTest; +import org.springframework.boot.data.jpa.test.autoconfigure.DataJpaTest; +import org.springframework.boot.jdbc.test.autoconfigure.AutoConfigureTestDatabase; +import org.springframework.context.annotation.Import; +import org.springframework.test.context.DynamicPropertyRegistry; +import org.springframework.test.context.DynamicPropertySource; import org.springframework.test.context.bean.override.mockito.MockitoBean; +import org.springframework.transaction.annotation.Propagation; +import org.springframework.transaction.annotation.Transactional; +import org.testcontainers.mysql.MySQLContainer; import java.math.BigDecimal; import java.time.LocalDateTime; @@ -33,10 +41,21 @@ import static org.junit.jupiter.api.Assertions.assertEquals; import static org.junit.jupiter.api.Assertions.assertTrue; -@SpringBootTest +@DataJpaTest(properties = { + "spring.jpa.hibernate.ddl-auto=create-drop", + "spring.jpa.open-in-view=false" +}) +@AutoConfigureTestDatabase(replace = AutoConfigureTestDatabase.Replace.NONE) +@Import({ProductService.class, DropService.class, QuerydslConfig.class}) +@Transactional(propagation = Propagation.NOT_SUPPORTED) class ProductDropConcurrencyTest { private static final int REPEAT_COUNT = 100; + private static final MySQLContainer MYSQL = new MySQLContainer("mysql:8.4"); + + static { + MYSQL.start(); + } @Autowired private ProductService productService; @@ -56,6 +75,13 @@ class ProductDropConcurrencyTest { @MockitoBean private S3ImageService s3ImageService; + @DynamicPropertySource + static void registerDatasourceProperties(DynamicPropertyRegistry registry) { + registry.add("spring.datasource.url", MYSQL::getJdbcUrl); + registry.add("spring.datasource.username", MYSQL::getUsername); + registry.add("spring.datasource.password", MYSQL::getPassword); + } + @AfterEach void cleanUp() { dropRepository.deleteAllInBatch(); From 51376718888fc200b33142ec5ee2291b6b32f509 Mon Sep 17 00:00:00 2001 From: Sooyoung Yoon Date: Thu, 10 Sep 2026 11:46:46 +0900 Subject: [PATCH 11/98] =?UTF-8?q?test(drop):=20=ED=8C=90=EB=A7=A4=20?= =?UTF-8?q?=EA=B0=92=20=EA=B2=BD=EA=B3=84=20=EB=B0=8F=20=EB=B6=80=EB=B6=84?= =?UTF-8?q?=20=EC=88=98=EC=A0=95=20=EA=B2=80=EC=A6=9D=20=EB=B3=B4=EA=B0=95?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../java/com/dropit/drop/entity/DropTest.java | 122 +++++++++++++----- 1 file changed, 93 insertions(+), 29 deletions(-) diff --git a/src/test/java/com/dropit/drop/entity/DropTest.java b/src/test/java/com/dropit/drop/entity/DropTest.java index d4962f4..8a7d9db 100644 --- a/src/test/java/com/dropit/drop/entity/DropTest.java +++ b/src/test/java/com/dropit/drop/entity/DropTest.java @@ -5,13 +5,12 @@ import com.dropit.product.entity.Product; import org.junit.jupiter.api.DisplayName; import org.junit.jupiter.api.Test; +import org.junit.jupiter.api.function.Executable; import java.math.BigDecimal; import java.time.LocalDateTime; -import static org.junit.jupiter.api.Assertions.assertEquals; -import static org.junit.jupiter.api.Assertions.assertThrows; -import static org.junit.jupiter.api.Assertions.assertAll; +import static org.junit.jupiter.api.Assertions.*; import static org.mockito.Mockito.mock; class DropTest { @@ -45,18 +44,30 @@ void rejectInvalidSalesValuesOnCreate() { LocalDateTime openAt = LocalDateTime.now().plusDays(1); assertAll( - () -> assertThrows(ServiceException.class, - () -> new Drop(product, BigDecimal.ZERO, 10, 20, 0, openAt, openAt.plusDays(1))), - () -> assertThrows(ServiceException.class, - () -> new Drop(product, new BigDecimal("59000"), 0, 20, 0, openAt, openAt.plusDays(1))), - () -> assertThrows(ServiceException.class, - () -> new Drop(product, new BigDecimal("59000"), 10, 101, 0, openAt, openAt.plusDays(1))), - () -> assertThrows(ServiceException.class, - () -> new Drop(product, new BigDecimal("59000"), 10, 20, -1, openAt, openAt.plusDays(1))), - () -> assertThrows(ServiceException.class, - () -> new Drop(product, new BigDecimal("59000.50"), 10, 20, 0, openAt, openAt.plusDays(1))), - () -> assertThrows(ServiceException.class, - () -> new Drop(product, new BigDecimal("10000000000000"), 10, 20, 0, openAt, openAt.plusDays(1))) + () -> assertInvalidSalesValue(() -> new Drop(product, null, 10, 20, 0, openAt, openAt.plusDays(1))), + () -> assertInvalidSalesValue(() -> new Drop(product, new BigDecimal("-1"), 10, 20, 0, openAt, openAt.plusDays(1))), + () -> assertInvalidSalesValue(() -> new Drop(product, BigDecimal.ZERO, 10, 20, 0, openAt, openAt.plusDays(1))), + () -> assertInvalidSalesValue(() -> new Drop(product, new BigDecimal("59000"), 0, 20, 0, openAt, openAt.plusDays(1))), + () -> assertInvalidSalesValue(() -> new Drop(product, new BigDecimal("59000"), 10, -1, 0, openAt, openAt.plusDays(1))), + () -> assertInvalidSalesValue(() -> new Drop(product, new BigDecimal("59000"), 10, 101, 0, openAt, openAt.plusDays(1))), + () -> assertInvalidSalesValue(() -> new Drop(product, new BigDecimal("59000"), 10, 20, -1, openAt, openAt.plusDays(1))), + () -> assertInvalidSalesValue(() -> new Drop(product, new BigDecimal("59000.50"), 10, 20, 0, openAt, openAt.plusDays(1))), + () -> assertInvalidSalesValue(() -> new Drop(product, new BigDecimal("10000000000000"), 10, 20, 0, openAt, openAt.plusDays(1))) + ); + } + + @Test + @DisplayName("할인율 0과 100, 최대 가격은 유효한 판매 값으로 허용한다") + void acceptSalesValueBoundariesOnCreate() { + LocalDateTime openAt = LocalDateTime.now().plusDays(1); + + Drop noDiscount = new Drop(product, new BigDecimal("9999999999999"), 10, 0, 0, openAt, openAt.plusDays(1)); + Drop fullDiscount = new Drop(product, new BigDecimal("59000"), 10, 100, 0, openAt, openAt.plusDays(1)); + + assertAll( + () -> assertEquals(new BigDecimal("9999999999999"), noDiscount.getPrice()), + () -> assertEquals(0, noDiscount.getDiscountRate()), + () -> assertEquals(100, fullDiscount.getDiscountRate()) ); } @@ -67,7 +78,7 @@ void preserveAllValuesWhenUpdateIsInvalid() { LocalDateTime closeAt = openAt.plusDays(1); Drop drop = new Drop(product, new BigDecimal("59000"), 10, 20, 2, openAt, closeAt); - assertThrows( + ServiceException exception = assertThrows( ServiceException.class, () -> drop.update( new BigDecimal("49000"), @@ -79,15 +90,37 @@ void preserveAllValuesWhenUpdateIsInvalid() { ) ); - assertAll( - () -> assertEquals(new BigDecimal("59000"), drop.getPrice()), - () -> assertEquals(10, drop.getInitialQuantity()), - () -> assertEquals(10, drop.getRemainingQuantity()), - () -> assertEquals(20, drop.getDiscountRate()), - () -> assertEquals(2, drop.getPurchaseLimit()), - () -> assertEquals(openAt, drop.getOpenAt()), - () -> assertEquals(closeAt, drop.getCloseAt()) + assertEquals(DropErrorCode.INVALID_DROP_VALUE, exception.getErrorCode()); + assertDropValues(drop, new BigDecimal("59000"), 10, 10, 20, 2, openAt, closeAt); + } + + @Test + @DisplayName("모든 값이 null인 부분 수정은 기존 값을 유지한다") + void preserveAllValuesWhenUpdateIsEmpty() { + LocalDateTime openAt = LocalDateTime.now().plusDays(1); + LocalDateTime closeAt = openAt.plusDays(1); + Drop drop = new Drop(product, new BigDecimal("59000"), 10, 20, 2, openAt, closeAt); + + drop.update(null, null, null, null, null, null); + + assertDropValues(drop, new BigDecimal("59000"), 10, 10, 20, 2, openAt, closeAt); + } + + @Test + @DisplayName("부분 수정으로 판매 기간이 역전되면 INVALID_DROP_PERIOD를 반환하고 기존 기간을 보존한다") + void rejectReversedPeriodOnPartialUpdate() { + LocalDateTime openAt = LocalDateTime.now().plusDays(1); + LocalDateTime closeAt = openAt.plusDays(1); + Drop drop = new Drop(product, new BigDecimal("59000"), 10, 20, 2, openAt, closeAt); + + ServiceException exception = assertThrows( + ServiceException.class, + () -> drop.update(null, null, null, null, closeAt.plusDays(1), null) ); + + assertEquals(DropErrorCode.INVALID_DROP_PERIOD, exception.getErrorCode()); + assertEquals(openAt, drop.getOpenAt()); + assertEquals(closeAt, drop.getCloseAt()); } @Test @@ -108,7 +141,7 @@ void defaultVisibilityIsFalse() { LocalDateTime openAt = LocalDateTime.now().plusDays(1); Drop drop = new Drop(product, new BigDecimal("59000"), 10, 20, 0, openAt, openAt.plusDays(1)); - assertEquals(false, drop.isVisible()); + assertFalse(drop.isVisible()); } @Test @@ -119,7 +152,7 @@ void changeVisibility() { drop.changeVisibility(true); - assertEquals(true, drop.isVisible()); + assertTrue(drop.isVisible()); } @Test @@ -127,14 +160,45 @@ void changeVisibility() { void rejectInvalidDropPeriodWithDropErrorCode() { LocalDateTime openAt = LocalDateTime.now().plusDays(1); - ServiceException exception = assertThrows( - ServiceException.class, - () -> new Drop(product, new BigDecimal("59000"), 10, 20, 2, openAt, openAt) + assertAll( + () -> assertInvalidDropPeriod(() -> new Drop(product, new BigDecimal("59000"), 10, 20, 2, openAt, openAt)), + () -> assertInvalidDropPeriod(() -> new Drop(product, new BigDecimal("59000"), 10, 20, 2, openAt.plusDays(1), openAt)), + () -> assertInvalidDropPeriod(() -> new Drop(product, new BigDecimal("59000"), 10, 20, 2, null, openAt)), + () -> assertInvalidDropPeriod(() -> new Drop(product, new BigDecimal("59000"), 10, 20, 2, openAt, null)) ); + } + private void assertInvalidSalesValue(Executable executable) { + ServiceException exception = assertThrows(ServiceException.class, executable); + assertEquals(DropErrorCode.INVALID_DROP_VALUE, exception.getErrorCode()); + } + + private void assertInvalidDropPeriod(Executable executable) { + ServiceException exception = assertThrows(ServiceException.class, executable); assertEquals(DropErrorCode.INVALID_DROP_PERIOD, exception.getErrorCode()); } + private void assertDropValues( + Drop drop, + BigDecimal price, + int initialQuantity, + int remainingQuantity, + int discountRate, + int purchaseLimit, + LocalDateTime openAt, + LocalDateTime closeAt + ) { + assertAll( + () -> assertEquals(price, drop.getPrice()), + () -> assertEquals(initialQuantity, drop.getInitialQuantity()), + () -> assertEquals(remainingQuantity, drop.getRemainingQuantity()), + () -> assertEquals(discountRate, drop.getDiscountRate()), + () -> assertEquals(purchaseLimit, drop.getPurchaseLimit()), + () -> assertEquals(openAt, drop.getOpenAt()), + () -> assertEquals(closeAt, drop.getCloseAt()) + ); + } + @Test @DisplayName("판매 중인 공개 드랍의 재고를 차감하고 취소 시 복구할 수 있다") void decreaseAndRestoreStock() { From 2805892022863bb84a1a5060ccb09149b3950cd5 Mon Sep 17 00:00:00 2001 From: gustavors88 Date: Thu, 10 Sep 2026 11:55:24 +0900 Subject: [PATCH 12/98] =?UTF-8?q?feat(s3-images):=20=ED=8C=90=EB=A7=A4?= =?UTF-8?q?=EC=9E=90=20=ED=94=84=EB=A1=9C=ED=95=84=20=EB=B0=8F=20=EC=83=81?= =?UTF-8?q?=ED=92=88=20=EC=9D=B4=EB=AF=B8=EC=A7=80=20=EC=82=AD=EC=A0=9C=20?= =?UTF-8?q?=EA=B8=B0=EB=8A=A5=20=EC=B6=94=EA=B0=80"?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../dropit/product/controller/ProductController.java | 10 +++++++++- .../com/dropit/product/service/ProductService.java | 9 +++++++++ .../controller/SellerProfileController.java | 7 +++++++ .../sellerprofile/service/SellerProfileService.java | 9 +++++++++ 4 files changed, 34 insertions(+), 1 deletion(-) diff --git a/src/main/java/com/dropit/product/controller/ProductController.java b/src/main/java/com/dropit/product/controller/ProductController.java index 3cfc494..59280b6 100644 --- a/src/main/java/com/dropit/product/controller/ProductController.java +++ b/src/main/java/com/dropit/product/controller/ProductController.java @@ -100,5 +100,13 @@ public ResponseEntity uploadImage( return ResponseEntity.ok(response); } - + @DeleteMapping("/products/{productId}/image") + @PreAuthorize("hasRole('SELLER')") + public ResponseEntity deleteImage( + @CurrentUserId Long sellerId, + @PathVariable Long productId + ) { + productService.deleteImage(sellerId, productId); + return ResponseEntity.noContent().build(); + } } diff --git a/src/main/java/com/dropit/product/service/ProductService.java b/src/main/java/com/dropit/product/service/ProductService.java index 28a3c24..92bed48 100644 --- a/src/main/java/com/dropit/product/service/ProductService.java +++ b/src/main/java/com/dropit/product/service/ProductService.java @@ -159,6 +159,15 @@ public void delete(Long sellerId, Long productId) { deleteImageAfterCommit(imageKey); } + @Transactional + public void deleteImage(Long sellerId, Long productId) { + Product product = findOwnedProduct(sellerId, productId); + + String imageKey = product.getImageUrl(); + product.changeImage(null); + deleteImageAfterCommit(imageKey); + } + private Product findOwnedProduct( Long sellerId, Long productId diff --git a/src/main/java/com/dropit/sellerprofile/controller/SellerProfileController.java b/src/main/java/com/dropit/sellerprofile/controller/SellerProfileController.java index 238449d..aa57b21 100644 --- a/src/main/java/com/dropit/sellerprofile/controller/SellerProfileController.java +++ b/src/main/java/com/dropit/sellerprofile/controller/SellerProfileController.java @@ -53,6 +53,13 @@ public ResponseEntity getMine( return ResponseEntity.ok(response); } + @DeleteMapping("/me/image") + @PreAuthorize("hasRole('SELLER')") + public ResponseEntity deleteImage(@CurrentUserId Long userId) { + sellerProfileService.deleteImage(userId); + return ResponseEntity.noContent().build(); + } + @GetMapping("/{sellerProfileId}") public ResponseEntity getById( @PathVariable Long sellerProfileId diff --git a/src/main/java/com/dropit/sellerprofile/service/SellerProfileService.java b/src/main/java/com/dropit/sellerprofile/service/SellerProfileService.java index d8aab91..e37693c 100644 --- a/src/main/java/com/dropit/sellerprofile/service/SellerProfileService.java +++ b/src/main/java/com/dropit/sellerprofile/service/SellerProfileService.java @@ -141,6 +141,15 @@ public void delete(Long userId) { deleteImageAfterCommit(imageKey); } + @Transactional + public void deleteImage(Long userId) { + SellerProfile sellerProfile = findByUserId(userId); + + String imageKey = sellerProfile.getImageUrl(); + sellerProfile.changeImage(null); + deleteImageAfterCommit(imageKey); + } + private User findUser(Long userId) { return userRepository.findById(userId) .orElseThrow(() -> From 1aa86bdcbdc3eb5608c44b977fab6c5d440d551b Mon Sep 17 00:00:00 2001 From: "coderabbitai[bot]" <136622811+coderabbitai[bot]@users.noreply.github.com> Date: Thu, 10 Sep 2026 03:14:59 +0000 Subject: [PATCH 13/98] fix(drop): preserve sold quantity when updating initial stock --- .../java/com/dropit/drop/entity/Drop.java | 8 ++-- .../java/com/dropit/drop/entity/DropTest.java | 41 +++++++++++++++++++ .../service/OrderServiceConcurrencyTest.java | 3 +- 3 files changed, 48 insertions(+), 4 deletions(-) diff --git a/src/main/java/com/dropit/drop/entity/Drop.java b/src/main/java/com/dropit/drop/entity/Drop.java index 37f9c7e..26587de 100644 --- a/src/main/java/com/dropit/drop/entity/Drop.java +++ b/src/main/java/com/dropit/drop/entity/Drop.java @@ -95,13 +95,15 @@ public void update( int updatedDiscountRate = discountRate != null ? discountRate : this.discountRate; int updatedPurchaseLimit = purchaseLimit != null ? purchaseLimit : this.purchaseLimit; BigDecimal updatedPrice = price != null ? price : this.price; + int soldQuantity = this.initialQuantity - this.remainingQuantity; validateSalesValues(updatedPrice, updatedInitialQuantity, updatedDiscountRate, updatedPurchaseLimit); + if (updatedInitialQuantity < soldQuantity) { + throw new ServiceException(DropErrorCode.INVALID_DROP_VALUE); + } validatePeriod(updatedOpenAt, updatedCloseAt); - if (this.remainingQuantity == this.initialQuantity) { - this.remainingQuantity = updatedInitialQuantity; - } + this.remainingQuantity = updatedInitialQuantity - soldQuantity; this.initialQuantity = updatedInitialQuantity; this.price = updatedPrice; this.discountRate = updatedDiscountRate; diff --git a/src/test/java/com/dropit/drop/entity/DropTest.java b/src/test/java/com/dropit/drop/entity/DropTest.java index 8a7d9db..f536a82 100644 --- a/src/test/java/com/dropit/drop/entity/DropTest.java +++ b/src/test/java/com/dropit/drop/entity/DropTest.java @@ -106,6 +106,47 @@ void preserveAllValuesWhenUpdateIsEmpty() { assertDropValues(drop, new BigDecimal("59000"), 10, 10, 20, 2, openAt, closeAt); } + @Test + @DisplayName("판매 후 초기 재고를 변경해도 판매 수량을 보존한다") + void preserveSoldQuantityWhenInitialQuantityChanges() { + LocalDateTime now = LocalDateTime.of(2026, 9, 2, 12, 0); + Drop drop = new Drop(product, new BigDecimal("59000"), 10, 20, 2, now.minusHours(1), now.plusHours(1)); + drop.changeVisibility(true); + drop.decreaseStock(4, now); + + drop.update(null, 8, null, null, null, null); + assertAll( + () -> assertEquals(8, drop.getInitialQuantity()), + () -> assertEquals(4, drop.getRemainingQuantity()) + ); + + drop.update(null, 12, null, null, null, null); + assertAll( + () -> assertEquals(12, drop.getInitialQuantity()), + () -> assertEquals(8, drop.getRemainingQuantity()) + ); + } + + @Test + @DisplayName("판매 수량보다 초기 재고를 작게 변경할 수 없다") + void rejectInitialQuantityBelowSoldQuantity() { + LocalDateTime now = LocalDateTime.of(2026, 9, 2, 12, 0); + Drop drop = new Drop(product, new BigDecimal("59000"), 10, 20, 2, now.minusHours(1), now.plusHours(1)); + drop.changeVisibility(true); + drop.decreaseStock(4, now); + + ServiceException exception = assertThrows( + ServiceException.class, + () -> drop.update(null, 3, null, null, null, null) + ); + + assertEquals(DropErrorCode.INVALID_DROP_VALUE, exception.getErrorCode()); + assertAll( + () -> assertEquals(10, drop.getInitialQuantity()), + () -> assertEquals(6, drop.getRemainingQuantity()) + ); + } + @Test @DisplayName("부분 수정으로 판매 기간이 역전되면 INVALID_DROP_PERIOD를 반환하고 기존 기간을 보존한다") void rejectReversedPeriodOnPartialUpdate() { diff --git a/src/test/java/com/dropit/order/service/OrderServiceConcurrencyTest.java b/src/test/java/com/dropit/order/service/OrderServiceConcurrencyTest.java index 3de7a11..8e35790 100644 --- a/src/test/java/com/dropit/order/service/OrderServiceConcurrencyTest.java +++ b/src/test/java/com/dropit/order/service/OrderServiceConcurrencyTest.java @@ -45,7 +45,8 @@ @DataJpaTest(properties = { "spring.jpa.hibernate.ddl-auto=create-drop", - "spring.jpa.open-in-view=false" + "spring.jpa.open-in-view=false", + "spring.datasource.hikari.maximum-pool-size=32" }) @AutoConfigureTestDatabase(replace = AutoConfigureTestDatabase.Replace.NONE) @Import({OrderService.class, QuerydslConfig.class}) From 17fb84011716b18e24c8eaee1d70946fecf6c4f5 Mon Sep 17 00:00:00 2001 From: Sooyoung Yoon Date: Thu, 10 Sep 2026 12:30:21 +0900 Subject: [PATCH 14/98] =?UTF-8?q?fix(order):=20=ED=8C=90=EB=A7=A4=20?= =?UTF-8?q?=ED=9B=84=20=EC=9E=AC=EA=B3=A0=20=EC=A0=95=ED=95=A9=EC=84=B1?= =?UTF-8?q?=EA=B3=BC=20=EB=8F=99=EC=8B=9C=EC=84=B1=20=ED=85=8C=EC=8A=A4?= =?UTF-8?q?=ED=8A=B8=20=EB=B3=B4=EA=B0=95?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../java/com/dropit/drop/entity/Drop.java | 6 ++-- .../java/com/dropit/drop/entity/DropTest.java | 32 +++++++++++++++++++ .../service/OrderServiceConcurrencyTest.java | 3 +- 3 files changed, 38 insertions(+), 3 deletions(-) diff --git a/src/main/java/com/dropit/drop/entity/Drop.java b/src/main/java/com/dropit/drop/entity/Drop.java index 37f9c7e..057cbbb 100644 --- a/src/main/java/com/dropit/drop/entity/Drop.java +++ b/src/main/java/com/dropit/drop/entity/Drop.java @@ -99,9 +99,11 @@ public void update( validateSalesValues(updatedPrice, updatedInitialQuantity, updatedDiscountRate, updatedPurchaseLimit); validatePeriod(updatedOpenAt, updatedCloseAt); - if (this.remainingQuantity == this.initialQuantity) { - this.remainingQuantity = updatedInitialQuantity; + int soldQuantity = this.initialQuantity - this.remainingQuantity; + if (updatedInitialQuantity < soldQuantity) { + throw new ServiceException(DropErrorCode.INVALID_DROP_VALUE); } + this.remainingQuantity = updatedInitialQuantity - soldQuantity; this.initialQuantity = updatedInitialQuantity; this.price = updatedPrice; this.discountRate = updatedDiscountRate; diff --git a/src/test/java/com/dropit/drop/entity/DropTest.java b/src/test/java/com/dropit/drop/entity/DropTest.java index 8a7d9db..f0a3808 100644 --- a/src/test/java/com/dropit/drop/entity/DropTest.java +++ b/src/test/java/com/dropit/drop/entity/DropTest.java @@ -106,6 +106,38 @@ void preserveAllValuesWhenUpdateIsEmpty() { assertDropValues(drop, new BigDecimal("59000"), 10, 10, 20, 2, openAt, closeAt); } + @Test + @DisplayName("판매 후 초기 재고를 변경하면 판매 수량을 보존한 잔여 재고로 계산한다") + void recalculateRemainingQuantityAfterInitialQuantityUpdate() { + LocalDateTime now = LocalDateTime.of(2026, 9, 2, 12, 0); + Drop drop = new Drop(product, new BigDecimal("59000"), 10, 20, 0, now.minusHours(1), now.plusHours(1)); + drop.changeVisibility(true); + drop.decreaseStock(2, now); + + drop.update(null, 5, null, null, null, null); + + assertEquals(5, drop.getInitialQuantity()); + assertEquals(3, drop.getRemainingQuantity()); + } + + @Test + @DisplayName("판매 수량보다 작은 초기 재고로 수정할 수 없다") + void rejectInitialQuantityBelowSoldQuantity() { + LocalDateTime now = LocalDateTime.of(2026, 9, 2, 12, 0); + Drop drop = new Drop(product, new BigDecimal("59000"), 10, 20, 0, now.minusHours(1), now.plusHours(1)); + drop.changeVisibility(true); + drop.decreaseStock(6, now); + + ServiceException exception = assertThrows( + ServiceException.class, + () -> drop.update(null, 5, null, null, null, null) + ); + + assertEquals(DropErrorCode.INVALID_DROP_VALUE, exception.getErrorCode()); + assertEquals(10, drop.getInitialQuantity()); + assertEquals(4, drop.getRemainingQuantity()); + } + @Test @DisplayName("부분 수정으로 판매 기간이 역전되면 INVALID_DROP_PERIOD를 반환하고 기존 기간을 보존한다") void rejectReversedPeriodOnPartialUpdate() { diff --git a/src/test/java/com/dropit/order/service/OrderServiceConcurrencyTest.java b/src/test/java/com/dropit/order/service/OrderServiceConcurrencyTest.java index 3de7a11..8e35790 100644 --- a/src/test/java/com/dropit/order/service/OrderServiceConcurrencyTest.java +++ b/src/test/java/com/dropit/order/service/OrderServiceConcurrencyTest.java @@ -45,7 +45,8 @@ @DataJpaTest(properties = { "spring.jpa.hibernate.ddl-auto=create-drop", - "spring.jpa.open-in-view=false" + "spring.jpa.open-in-view=false", + "spring.datasource.hikari.maximum-pool-size=32" }) @AutoConfigureTestDatabase(replace = AutoConfigureTestDatabase.Replace.NONE) @Import({OrderService.class, QuerydslConfig.class}) From 633dfb1102be32dab9df06e6acba8ae8e4f50e22 Mon Sep 17 00:00:00 2001 From: Sooyoung Yoon Date: Thu, 10 Sep 2026 13:21:03 +0900 Subject: [PATCH 15/98] =?UTF-8?q?feat(order):=20=EC=82=AC=EC=9A=A9?= =?UTF-8?q?=EC=9E=90=EB=B3=84=20=EA=B5=AC=EB=A7=A4=EB=9F=89=20=EC=B9=B4?= =?UTF-8?q?=EC=9A=B4=ED=84=B0=EB=A5=BC=20=EC=B6=94=EA=B0=80?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../dropit/order/entity/DropUserPurchase.java | 44 ++++++++++++++ .../DropUserPurchaseRepository.java | 60 +++++++++++++++++++ 2 files changed, 104 insertions(+) create mode 100644 src/main/java/com/dropit/order/entity/DropUserPurchase.java create mode 100644 src/main/java/com/dropit/order/repository/DropUserPurchaseRepository.java diff --git a/src/main/java/com/dropit/order/entity/DropUserPurchase.java b/src/main/java/com/dropit/order/entity/DropUserPurchase.java new file mode 100644 index 0000000..f512a98 --- /dev/null +++ b/src/main/java/com/dropit/order/entity/DropUserPurchase.java @@ -0,0 +1,44 @@ +package com.dropit.order.entity; + +import com.dropit.global.entity.BaseEntity; +import jakarta.persistence.Column; +import jakarta.persistence.Entity; +import jakarta.persistence.GeneratedValue; +import jakarta.persistence.GenerationType; +import jakarta.persistence.Id; +import jakarta.persistence.Table; +import jakarta.persistence.UniqueConstraint; +import lombok.AccessLevel; +import lombok.Getter; +import lombok.NoArgsConstructor; + +@Getter +@Entity +@Table( + name = "drop_user_purchases", + uniqueConstraints = @UniqueConstraint( + name = "uk_drop_user_purchases_drop_user", + columnNames = {"drop_id", "user_id"} + ) +) +@NoArgsConstructor(access = AccessLevel.PROTECTED) +public class DropUserPurchase extends BaseEntity { + + @Id + @GeneratedValue(strategy = GenerationType.IDENTITY) + private Long id; + + @Column(name = "drop_id", nullable = false) + private Long dropId; + + @Column(name = "user_id", nullable = false) + private Long userId; + + @Column(name = "confirmed_quantity", nullable = false) + private int confirmedQuantity; + + public DropUserPurchase(Long dropId, Long userId) { + this.dropId = dropId; + this.userId = userId; + } +} diff --git a/src/main/java/com/dropit/order/repository/DropUserPurchaseRepository.java b/src/main/java/com/dropit/order/repository/DropUserPurchaseRepository.java new file mode 100644 index 0000000..b8fcbbc --- /dev/null +++ b/src/main/java/com/dropit/order/repository/DropUserPurchaseRepository.java @@ -0,0 +1,60 @@ +package com.dropit.order.repository; + +import com.dropit.order.entity.DropUserPurchase; +import org.springframework.data.jpa.repository.JpaRepository; +import org.springframework.data.jpa.repository.Modifying; +import org.springframework.data.jpa.repository.Query; +import org.springframework.data.repository.query.Param; + +import java.util.Optional; + +public interface DropUserPurchaseRepository extends JpaRepository { + + Optional findByDropIdAndUserId(Long dropId, Long userId); + + @Modifying + @Query(value = """ + INSERT IGNORE INTO drop_user_purchases ( + drop_id, + user_id, + confirmed_quantity, + created_at, + updated_at + ) VALUES (:dropId, :userId, 0, CURRENT_TIMESTAMP, CURRENT_TIMESTAMP) + """, nativeQuery = true) + int createCounterIfAbsent( + @Param("dropId") Long dropId, + @Param("userId") Long userId + ); + + @Modifying + @Query(value = """ + UPDATE drop_user_purchases + SET confirmed_quantity = confirmed_quantity + :quantity, + updated_at = CURRENT_TIMESTAMP + WHERE drop_id = :dropId + AND user_id = :userId + AND (:purchaseLimit = 0 OR confirmed_quantity + :quantity <= :purchaseLimit) + """, nativeQuery = true) + int increaseWithinLimit( + @Param("dropId") Long dropId, + @Param("userId") Long userId, + @Param("quantity") int quantity, + @Param("purchaseLimit") int purchaseLimit + ); + + @Modifying + @Query(value = """ + UPDATE drop_user_purchases + SET confirmed_quantity = confirmed_quantity - :quantity, + updated_at = CURRENT_TIMESTAMP + WHERE drop_id = :dropId + AND user_id = :userId + AND confirmed_quantity >= :quantity + """, nativeQuery = true) + int decreaseConfirmedQuantity( + @Param("dropId") Long dropId, + @Param("userId") Long userId, + @Param("quantity") int quantity + ); +} From 274625d2bb367183a80b403ab597f8ce7dd30253 Mon Sep 17 00:00:00 2001 From: Sooyoung Yoon Date: Thu, 10 Sep 2026 13:19:52 +0900 Subject: [PATCH 16/98] =?UTF-8?q?feat(order):=20=EA=B5=AC=EB=A7=A4=20?= =?UTF-8?q?=EC=B9=B4=EC=9A=B4=ED=84=B0=EB=A5=BC=20=EC=A3=BC=EB=AC=B8=20?= =?UTF-8?q?=ED=9D=90=EB=A6=84=EC=97=90=20=EC=97=B0=EA=B2=B0?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../order/repository/OrderItemRepository.java | 16 ---------- .../order/repository/OrderRepository.java | 11 +++++++ .../dropit/order/service/OrderService.java | 32 +++++++++++-------- 3 files changed, 30 insertions(+), 29 deletions(-) diff --git a/src/main/java/com/dropit/order/repository/OrderItemRepository.java b/src/main/java/com/dropit/order/repository/OrderItemRepository.java index 19b7442..8fd03db 100644 --- a/src/main/java/com/dropit/order/repository/OrderItemRepository.java +++ b/src/main/java/com/dropit/order/repository/OrderItemRepository.java @@ -1,27 +1,11 @@ package com.dropit.order.repository; import com.dropit.order.entity.OrderItem; -import com.dropit.order.entity.OrderStatus; import org.springframework.data.jpa.repository.JpaRepository; -import org.springframework.data.jpa.repository.Query; -import org.springframework.data.repository.query.Param; import java.util.List; public interface OrderItemRepository extends JpaRepository { List findAllByOrder_IdOrderByIdAsc(Long orderId); - - @Query(""" - select coalesce(sum(oi.quantity), 0) - from OrderItem oi - where oi.order.user.id = :userId - and oi.drop.id = :dropId - and oi.order.status = :status - """) - long sumQuantityByUserAndDropAndStatus( - @Param("userId") Long userId, - @Param("dropId") Long dropId, - @Param("status") OrderStatus status - ); } diff --git a/src/main/java/com/dropit/order/repository/OrderRepository.java b/src/main/java/com/dropit/order/repository/OrderRepository.java index 52b3dfd..f34ed9a 100644 --- a/src/main/java/com/dropit/order/repository/OrderRepository.java +++ b/src/main/java/com/dropit/order/repository/OrderRepository.java @@ -1,7 +1,11 @@ package com.dropit.order.repository; import com.dropit.order.entity.Order; +import jakarta.persistence.LockModeType; +import org.springframework.data.jpa.repository.Lock; import org.springframework.data.jpa.repository.JpaRepository; +import org.springframework.data.jpa.repository.Query; +import org.springframework.data.repository.query.Param; import java.util.List; import java.util.Optional; @@ -11,4 +15,11 @@ public interface OrderRepository extends JpaRepository { List findAllByUser_IdOrderByCreatedAtDesc(Long userId); Optional findByIdAndUser_Id(Long orderId, Long userId); + + @Lock(LockModeType.PESSIMISTIC_WRITE) + @Query("select o from Order o where o.id = :orderId and o.user.id = :userId") + Optional findByIdAndUser_IdForUpdate( + @Param("orderId") Long orderId, + @Param("userId") Long userId + ); } diff --git a/src/main/java/com/dropit/order/service/OrderService.java b/src/main/java/com/dropit/order/service/OrderService.java index 52f41a5..460df70 100644 --- a/src/main/java/com/dropit/order/service/OrderService.java +++ b/src/main/java/com/dropit/order/service/OrderService.java @@ -10,8 +10,8 @@ import com.dropit.order.dto.response.OrderSummaryResponse; import com.dropit.order.entity.Order; import com.dropit.order.entity.OrderItem; -import com.dropit.order.entity.OrderStatus; import com.dropit.order.exception.OrderErrorCode; +import com.dropit.order.repository.DropUserPurchaseRepository; import com.dropit.order.repository.OrderItemRepository; import com.dropit.order.repository.OrderRepository; import com.dropit.user.entity.User; @@ -33,6 +33,7 @@ public class OrderService { private final DropRepository dropRepository; private final OrderRepository orderRepository; private final OrderItemRepository orderItemRepository; + private final DropUserPurchaseRepository dropUserPurchaseRepository; @Transactional public OrderResponse create(Long userId, OrderCreateRequest request) { @@ -43,7 +44,7 @@ public OrderResponse create(Long userId, OrderCreateRequest request) { Drop drop = dropRepository.findByIdForUpdate(itemRequest.dropId()) .orElseThrow(() -> new ServiceException(DropErrorCode.DROP_NOT_FOUND)); LocalDateTime now = LocalDateTime.now(); - validatePurchaseLimit(userId, drop, itemRequest.quantity()); + reservePurchaseLimit(userId, drop, itemRequest.quantity()); drop.decreaseStock(itemRequest.quantity(), now); BigDecimal totalPrice = OrderItem.calculateItemTotalPrice( drop.getPrice(), @@ -76,27 +77,32 @@ public OrderResponse getMyOrder(Long userId, Long orderId) { @Transactional public void cancel(Long userId, Long orderId) { - Order order = orderRepository.findByIdAndUser_Id(orderId, userId) + Order order = orderRepository.findByIdAndUser_IdForUpdate(orderId, userId) .orElseThrow(() -> new ServiceException(OrderErrorCode.ORDER_NOT_FOUND)); List orderItems = orderItemRepository.findAllByOrder_IdOrderByIdAsc(orderId); order.cancel(); for (OrderItem orderItem : orderItems) { - orderItem.getDrop().restoreStock(orderItem.getQuantity()); + Drop drop = dropRepository.findByIdForUpdate(orderItem.getDrop().getId()) + .orElseThrow(() -> new ServiceException(DropErrorCode.DROP_NOT_FOUND)); + drop.restoreStock(orderItem.getQuantity()); + dropUserPurchaseRepository.decreaseConfirmedQuantity( + drop.getId(), + userId, + orderItem.getQuantity() + ); } } - private void validatePurchaseLimit(Long userId, Drop drop, int quantity) { - if (drop.getPurchaseLimit() == 0) { - return; - } - - long purchasedQuantity = orderItemRepository.sumQuantityByUserAndDropAndStatus( - userId, + private void reservePurchaseLimit(Long userId, Drop drop, int quantity) { + dropUserPurchaseRepository.createCounterIfAbsent(drop.getId(), userId); + int increasedCount = dropUserPurchaseRepository.increaseWithinLimit( drop.getId(), - OrderStatus.ORDERED + userId, + quantity, + drop.getPurchaseLimit() ); - if (purchasedQuantity + quantity > drop.getPurchaseLimit()) { + if (increasedCount == 0) { throw new ServiceException(OrderErrorCode.PURCHASE_LIMIT_EXCEEDED); } } From d18cd906ddbc0e6d5f71dcddbff060e65a90fee4 Mon Sep 17 00:00:00 2001 From: Sooyoung Yoon Date: Thu, 10 Sep 2026 13:19:55 +0900 Subject: [PATCH 17/98] =?UTF-8?q?test(order):=20=EC=82=AC=EC=9A=A9?= =?UTF-8?q?=EC=9E=90=20=EA=B5=AC=EB=A7=A4=20=ED=95=9C=EB=8F=84=20=EA=B2=BD?= =?UTF-8?q?=ED=95=A9=EC=9D=84=20=EA=B2=80=EC=A6=9D?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../service/OrderServiceConcurrencyTest.java | 66 ++++++++++++++++++- .../order/service/OrderServiceTest.java | 12 ++-- 2 files changed, 72 insertions(+), 6 deletions(-) diff --git a/src/test/java/com/dropit/order/service/OrderServiceConcurrencyTest.java b/src/test/java/com/dropit/order/service/OrderServiceConcurrencyTest.java index 8e35790..5184699 100644 --- a/src/test/java/com/dropit/order/service/OrderServiceConcurrencyTest.java +++ b/src/test/java/com/dropit/order/service/OrderServiceConcurrencyTest.java @@ -5,7 +5,9 @@ import com.dropit.global.config.QuerydslConfig; import com.dropit.order.dto.request.OrderCreateRequest; import com.dropit.order.dto.request.OrderItemCreateRequest; +import com.dropit.order.entity.DropUserPurchase; import com.dropit.order.entity.OrderItem; +import com.dropit.order.repository.DropUserPurchaseRepository; import com.dropit.order.repository.OrderItemRepository; import com.dropit.order.repository.OrderRepository; import com.dropit.product.entity.Product; @@ -70,6 +72,7 @@ class OrderServiceConcurrencyTest { @Autowired private DropRepository dropRepository; @Autowired private OrderRepository orderRepository; @Autowired private OrderItemRepository orderItemRepository; + @Autowired private DropUserPurchaseRepository dropUserPurchaseRepository; @Autowired private JdbcTemplate jdbcTemplate; @DynamicPropertySource @@ -83,6 +86,7 @@ static void registerDatasourceProperties(DynamicPropertyRegistry registry) { void cleanDatabase() { orderItemRepository.deleteAllInBatch(); orderRepository.deleteAllInBatch(); + dropUserPurchaseRepository.deleteAllInBatch(); dropRepository.deleteAllInBatch(); productRepository.deleteAllInBatch(); userRepository.deleteAllInBatch(); @@ -121,6 +125,24 @@ void preserveRemainingStockWhenConcurrentQuantityExceedsStock() throws Exception assertEquals(1, remainingQuantity(fixture.drop())); } + @Test + @DisplayName("동일 사용자의 동시 주문은 구매 한도를 초과하지 않는다") + void enforcePurchaseLimitForSameUser() throws Exception { + Fixture fixture = createFixture(100, 1, 3); + + CallResult result = placeConcurrentOrdersForSameBuyer(fixture, 1, 20); + + assertEquals(3, result.successes()); + assertEquals(17, result.rejections()); + assertEquals(3, totalOrderedQuantity()); + assertEquals(97, remainingQuantity(fixture.drop())); + DropUserPurchase purchase = dropUserPurchaseRepository.findByDropIdAndUserId( + fixture.drop().getId(), + fixture.buyers().getFirst().getId() + ).orElseThrow(); + assertEquals(3, purchase.getConfirmedQuantity()); + } + @Test @DisplayName("주문 항목 저장에 실패하면 재고와 주문 데이터가 함께 rollback된다") void rollbackStockWhenOrderItemSaveFails() { @@ -141,6 +163,7 @@ void rollbackStockWhenOrderItemSaveFails() { ); assertEquals(10, remainingQuantity(fixture.drop())); + assertEquals(0, dropUserPurchaseRepository.count()); assertEquals(0, orderRepository.count()); assertEquals(0, orderItemRepository.count()); } @@ -192,6 +215,43 @@ private CallResult placeConcurrentOrders(Fixture fixture, int quantity, int work } } + private CallResult placeConcurrentOrdersForSameBuyer( + Fixture fixture, + int quantity, + int requestCount + ) throws Exception { + try (ExecutorService executor = Executors.newFixedThreadPool(requestCount)) { + CountDownLatch ready = new CountDownLatch(requestCount); + CountDownLatch start = new CountDownLatch(1); + List> futures = new ArrayList<>(); + Long buyerId = fixture.buyers().getFirst().getId(); + + for (int index = 0; index < requestCount; index++) { + futures.add(executor.submit(() -> { + ready.countDown(); + assertTrue(start.await(10, TimeUnit.SECONDS)); + try { + orderService.create(buyerId, orderRequest(fixture.drop().getId(), quantity)); + return true; + } catch (com.dropit.global.exception.ServiceException exception) { + return false; + } + })); + } + + assertTrue(ready.await(10, TimeUnit.SECONDS)); + start.countDown(); + + int successes = 0; + for (Future future : futures) { + if (future.get(60, TimeUnit.SECONDS)) { + successes++; + } + } + return new CallResult(successes, requestCount - successes); + } + } + private CallResult get(Future future) throws Exception { try { return future.get(60, TimeUnit.SECONDS); @@ -201,6 +261,10 @@ private CallResult get(Future future) throws Exception { } private Fixture createFixture(int stock, int buyerCount) { + return createFixture(stock, buyerCount, 0); + } + + private Fixture createFixture(int stock, int buyerCount, int purchaseLimit) { User seller = userRepository.saveAndFlush( new User("seller@example.com", "password", "seller", UserRole.SELLER) ); @@ -213,7 +277,7 @@ private Fixture createFixture(int stock, int buyerCount) { new BigDecimal("59000"), stock, 20, - 0, + purchaseLimit, openAt, openAt.plusHours(1) ); diff --git a/src/test/java/com/dropit/order/service/OrderServiceTest.java b/src/test/java/com/dropit/order/service/OrderServiceTest.java index 12cc5b5..4303696 100644 --- a/src/test/java/com/dropit/order/service/OrderServiceTest.java +++ b/src/test/java/com/dropit/order/service/OrderServiceTest.java @@ -11,6 +11,7 @@ import com.dropit.order.entity.OrderItem; import com.dropit.order.entity.OrderStatus; import com.dropit.order.exception.OrderErrorCode; +import com.dropit.order.repository.DropUserPurchaseRepository; import com.dropit.order.repository.OrderItemRepository; import com.dropit.order.repository.OrderRepository; import com.dropit.product.entity.Product; @@ -45,6 +46,7 @@ class OrderServiceTest { @Mock private DropRepository dropRepository; @Mock private OrderRepository orderRepository; @Mock private OrderItemRepository orderItemRepository; + @Mock private DropUserPurchaseRepository dropUserPurchaseRepository; @InjectMocks private OrderService orderService; @Test @@ -56,8 +58,7 @@ void createOrder() { when(userRepository.findById(1L)).thenReturn(Optional.of(buyer)); when(dropRepository.findByIdForUpdate(100L)).thenReturn(Optional.of(drop)); - when(orderItemRepository.sumQuantityByUserAndDropAndStatus(1L, 100L, OrderStatus.ORDERED)) - .thenReturn(0L); + when(dropUserPurchaseRepository.increaseWithinLimit(100L, 1L, 2, 2)).thenReturn(1); when(orderRepository.save(any(Order.class))).thenAnswer(invocation -> { Order order = invocation.getArgument(0); ReflectionTestUtils.setField(order, "id", 1000L); @@ -87,8 +88,7 @@ void rejectPurchaseLimitExceeded() { when(userRepository.findById(1L)).thenReturn(Optional.of(buyer)); when(dropRepository.findByIdForUpdate(100L)).thenReturn(Optional.of(drop)); - when(orderItemRepository.sumQuantityByUserAndDropAndStatus(1L, 100L, OrderStatus.ORDERED)) - .thenReturn(1L); + when(dropUserPurchaseRepository.increaseWithinLimit(100L, 1L, 2, 2)).thenReturn(0); ServiceException exception = assertThrows( ServiceException.class, @@ -158,8 +158,10 @@ void cancelOrder() { ReflectionTestUtils.setField(order, "id", 1000L); OrderItem orderItem = new OrderItem(order, drop, "Limited Hoodie", new BigDecimal("59000"), 20, 2); - when(orderRepository.findByIdAndUser_Id(1000L, 1L)).thenReturn(Optional.of(order)); + when(orderRepository.findByIdAndUser_IdForUpdate(1000L, 1L)).thenReturn(Optional.of(order)); when(orderItemRepository.findAllByOrder_IdOrderByIdAsc(1000L)).thenReturn(List.of(orderItem)); + when(dropRepository.findByIdForUpdate(100L)).thenReturn(Optional.of(drop)); + when(dropUserPurchaseRepository.decreaseConfirmedQuantity(100L, 1L, 2)).thenReturn(1); orderService.cancel(1L, 1000L); From 99162ec2b513ef5862260bc88ef4e4c01cd21874 Mon Sep 17 00:00:00 2001 From: Sooyoung Yoon Date: Thu, 10 Sep 2026 14:40:15 +0900 Subject: [PATCH 18/98] =?UTF-8?q?fix(order):=20=EA=B5=AC=EB=A7=A4=20?= =?UTF-8?q?=EC=B9=B4=EC=9A=B4=ED=84=B0=20=EC=B0=A8=EA=B0=90=20=EC=8B=A4?= =?UTF-8?q?=ED=8C=A8=20=EC=8B=9C=20=EC=A3=BC=EB=AC=B8=20=EC=B7=A8=EC=86=8C?= =?UTF-8?q?=20=EB=A1=A4=EB=B0=B1?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../dropit/order/service/OrderService.java | 7 +++++- .../order/service/OrderServiceTest.java | 24 +++++++++++++++++++ 2 files changed, 30 insertions(+), 1 deletion(-) diff --git a/src/main/java/com/dropit/order/service/OrderService.java b/src/main/java/com/dropit/order/service/OrderService.java index 460df70..ea10dc2 100644 --- a/src/main/java/com/dropit/order/service/OrderService.java +++ b/src/main/java/com/dropit/order/service/OrderService.java @@ -3,6 +3,7 @@ import com.dropit.drop.entity.Drop; import com.dropit.drop.exception.DropErrorCode; import com.dropit.drop.repository.DropRepository; +import com.dropit.global.exception.CommonErrorCode; import com.dropit.global.exception.ServiceException; import com.dropit.order.dto.request.OrderCreateRequest; import com.dropit.order.dto.request.OrderItemCreateRequest; @@ -86,11 +87,15 @@ public void cancel(Long userId, Long orderId) { Drop drop = dropRepository.findByIdForUpdate(orderItem.getDrop().getId()) .orElseThrow(() -> new ServiceException(DropErrorCode.DROP_NOT_FOUND)); drop.restoreStock(orderItem.getQuantity()); - dropUserPurchaseRepository.decreaseConfirmedQuantity( + int decreasedCount = dropUserPurchaseRepository.decreaseConfirmedQuantity( drop.getId(), userId, orderItem.getQuantity() ); + if (decreasedCount != 1) { + // 구매 수량 카운터가 정상적으로 차감되지 않으면 취소 전체를 롤백한다. + throw new ServiceException(CommonErrorCode.INTERNAL_SERVER_ERROR); + } } } diff --git a/src/test/java/com/dropit/order/service/OrderServiceTest.java b/src/test/java/com/dropit/order/service/OrderServiceTest.java index 4303696..e7ebc67 100644 --- a/src/test/java/com/dropit/order/service/OrderServiceTest.java +++ b/src/test/java/com/dropit/order/service/OrderServiceTest.java @@ -2,6 +2,7 @@ import com.dropit.drop.entity.Drop; import com.dropit.drop.repository.DropRepository; +import com.dropit.global.exception.CommonErrorCode; import com.dropit.global.exception.ServiceException; import com.dropit.order.dto.request.OrderCreateRequest; import com.dropit.order.dto.request.OrderItemCreateRequest; @@ -169,6 +170,29 @@ void cancelOrder() { assertEquals(10, drop.getRemainingQuantity()); } + @Test + @DisplayName("구매 수량 카운터를 복구하지 못하면 취소를 실패한다") + void failToCancelWhenPurchaseCounterIsNotDecreased() { + User buyer = createUser(1L, UserRole.USER); + Drop drop = createOpenDrop(10L, 100L, 10, 20, 2); + drop.decreaseStock(2, LocalDateTime.now()); + Order order = new Order(buyer, new BigDecimal("94400")); + ReflectionTestUtils.setField(order, "id", 1000L); + OrderItem orderItem = new OrderItem(order, drop, "Limited Hoodie", new BigDecimal("59000"), 20, 2); + + when(orderRepository.findByIdAndUser_IdForUpdate(1000L, 1L)).thenReturn(Optional.of(order)); + when(orderItemRepository.findAllByOrder_IdOrderByIdAsc(1000L)).thenReturn(List.of(orderItem)); + when(dropRepository.findByIdForUpdate(100L)).thenReturn(Optional.of(drop)); + when(dropUserPurchaseRepository.decreaseConfirmedQuantity(100L, 1L, 2)).thenReturn(0); + + ServiceException exception = assertThrows( + ServiceException.class, + () -> orderService.cancel(1L, 1000L) + ); + + assertEquals(CommonErrorCode.INTERNAL_SERVER_ERROR, exception.getErrorCode()); + } + private User createUser(Long id, UserRole role) { User user = new User("user@example.com", "password", "user", role); ReflectionTestUtils.setField(user, "id", id); From 8147b778231bffb1b1220190132a9c220de2d286 Mon Sep 17 00:00:00 2001 From: Sooyoung Yoon Date: Thu, 10 Sep 2026 14:44:58 +0900 Subject: [PATCH 19/98] =?UTF-8?q?test(order):=20=EA=B5=AC=EB=A7=A4=20?= =?UTF-8?q?=EC=A0=9C=ED=95=9C=20=EC=98=88=EC=99=B8=EC=99=80=20=EC=B9=B4?= =?UTF-8?q?=EC=9A=B4=ED=84=B0=20=ED=98=B8=EC=B6=9C=20=EA=B2=80=EC=A6=9D=20?= =?UTF-8?q?=EC=B6=94=EA=B0=80?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../dropit/order/service/OrderServiceConcurrencyTest.java | 4 ++++ .../java/com/dropit/order/service/OrderServiceTest.java | 8 ++++---- 2 files changed, 8 insertions(+), 4 deletions(-) diff --git a/src/test/java/com/dropit/order/service/OrderServiceConcurrencyTest.java b/src/test/java/com/dropit/order/service/OrderServiceConcurrencyTest.java index 5184699..2d686e8 100644 --- a/src/test/java/com/dropit/order/service/OrderServiceConcurrencyTest.java +++ b/src/test/java/com/dropit/order/service/OrderServiceConcurrencyTest.java @@ -7,6 +7,7 @@ import com.dropit.order.dto.request.OrderItemCreateRequest; import com.dropit.order.entity.DropUserPurchase; import com.dropit.order.entity.OrderItem; +import com.dropit.order.exception.OrderErrorCode; import com.dropit.order.repository.DropUserPurchaseRepository; import com.dropit.order.repository.OrderItemRepository; import com.dropit.order.repository.OrderRepository; @@ -234,6 +235,9 @@ private CallResult placeConcurrentOrdersForSameBuyer( orderService.create(buyerId, orderRequest(fixture.drop().getId(), quantity)); return true; } catch (com.dropit.global.exception.ServiceException exception) { + if (exception.getErrorCode() != OrderErrorCode.PURCHASE_LIMIT_EXCEEDED) { + throw exception; + } return false; } })); diff --git a/src/test/java/com/dropit/order/service/OrderServiceTest.java b/src/test/java/com/dropit/order/service/OrderServiceTest.java index e7ebc67..574b7b4 100644 --- a/src/test/java/com/dropit/order/service/OrderServiceTest.java +++ b/src/test/java/com/dropit/order/service/OrderServiceTest.java @@ -22,7 +22,6 @@ import org.junit.jupiter.api.DisplayName; import org.junit.jupiter.api.Test; import org.junit.jupiter.api.extension.ExtendWith; -import org.mockito.ArgumentCaptor; import org.mockito.InjectMocks; import org.mockito.Mock; import org.mockito.junit.jupiter.MockitoExtension; @@ -36,9 +35,7 @@ import static org.junit.jupiter.api.Assertions.assertEquals; import static org.junit.jupiter.api.Assertions.assertThrows; import static org.mockito.ArgumentMatchers.any; -import static org.mockito.Mockito.never; -import static org.mockito.Mockito.verify; -import static org.mockito.Mockito.when; +import static org.mockito.Mockito.*; @ExtendWith(MockitoExtension.class) class OrderServiceTest { @@ -78,6 +75,8 @@ void createOrder() { assertEquals(new BigDecimal("59000"), response.items().getFirst().unitPrice()); assertEquals(20, response.items().getFirst().discountRate()); assertEquals(new BigDecimal("94400"), response.items().getFirst().itemTotalPrice()); + verify(dropUserPurchaseRepository, times(1)).createCounterIfAbsent(100L, 1L); + verify(dropUserPurchaseRepository, times(1)).increaseWithinLimit(100L, 1L, 2, 2); } @Test @@ -168,6 +167,7 @@ void cancelOrder() { assertEquals(OrderStatus.CANCELED, order.getStatus()); assertEquals(10, drop.getRemainingQuantity()); + verify(dropUserPurchaseRepository, times(1)).decreaseConfirmedQuantity(100L, 1L, 2); } @Test From f0b8259c13a856490bedfa3b0cbb07dfe5126679 Mon Sep 17 00:00:00 2001 From: Sooyoung Yoon Date: Thu, 10 Sep 2026 16:44:43 +0900 Subject: [PATCH 20/98] =?UTF-8?q?chore(docs):=20RestDocs=20=EC=84=A4?= =?UTF-8?q?=EC=A0=95=20=EC=B6=94=EA=B0=80?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- build.gradle | 22 ++++++++++++++++++++++ 1 file changed, 22 insertions(+) diff --git a/build.gradle b/build.gradle index 4c6b2bd..2b535db 100644 --- a/build.gradle +++ b/build.gradle @@ -2,6 +2,7 @@ plugins { id 'java' id 'org.springframework.boot' version '4.1.1' id 'io.spring.dependency-management' version '1.1.7' + id 'com.epages.restdocs-api-spec' version '0.20.1' } group = 'com.dropit' @@ -9,6 +10,7 @@ version = '0.0.1-SNAPSHOT' description = 'dropit-server' def querydslVersion = '7.5' +def restdocsApiSpecVersion = '0.20.1' java { toolchain { @@ -51,6 +53,10 @@ dependencies { testImplementation 'org.springframework.boot:spring-boot-starter-actuator-test' testImplementation 'org.testcontainers:testcontainers-mysql' + testImplementation platform('org.springframework.restdocs:spring-restdocs-bom:4.0.1') + testImplementation 'org.springframework.restdocs:spring-restdocs-mockmvc' + testImplementation "com.epages:restdocs-api-spec-mockmvc:${restdocsApiSpecVersion}" + testCompileOnly 'org.projectlombok:lombok' testRuntimeOnly 'org.junit.platform:junit-platform-launcher' testAnnotationProcessor 'org.projectlombok:lombok' @@ -58,6 +64,22 @@ dependencies { tasks.named('test') { useJUnitPlatform() + outputs.dir(file('build/generated-snippets')) +} + +openapi3 { + server = 'http://localhost:8080' + title = 'DROPIT API' + description = 'DROPIT API 문서입니다.' + version = project.version.toString() + format = 'yaml' + outputDirectory = 'build/api-spec' +} + +afterEvaluate { + tasks.named('openapi3') { + dependsOn(tasks.named('test')) + } } tasks.register('dbUp', Exec) { From f55c9ead1a34610405d732e1a6b0000003343ec4 Mon Sep 17 00:00:00 2001 From: Sooyoung Yoon Date: Thu, 10 Sep 2026 15:29:48 +0900 Subject: [PATCH 21/98] =?UTF-8?q?chore(docs):=20Swagger=20UI=EB=A1=9C=20Op?= =?UTF-8?q?enAPI=20=EB=AC=B8=EC=84=9C=20=EC=A0=9C=EA=B3=B5?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- build.gradle | 19 +++++++++++++++ .../global/security/SecurityConfig.java | 2 +- .../resources/static/swagger-ui/index.html | 24 +++++++++++++++++++ 3 files changed, 44 insertions(+), 1 deletion(-) create mode 100644 src/main/resources/static/swagger-ui/index.html diff --git a/build.gradle b/build.gradle index 2b535db..8e0549e 100644 --- a/build.gradle +++ b/build.gradle @@ -30,6 +30,7 @@ dependencies { implementation "io.github.openfeign.querydsl:querydsl-jpa:${querydslVersion}" implementation 'org.springframework.boot:spring-boot-starter-security' implementation 'org.springframework.boot:spring-boot-starter-actuator' + implementation 'org.webjars:swagger-ui:5.32.11' implementation platform('io.awspring.cloud:spring-cloud-aws-dependencies:4.1.0') implementation 'io.awspring.cloud:spring-cloud-aws-starter-parameter-store' @@ -82,6 +83,24 @@ afterEvaluate { } } +def copyOpenApiToResources = tasks.register('copyOpenApiToResources', Copy) { + dependsOn(tasks.named('openapi3')) + from(layout.buildDirectory.file('api-spec/openapi3.yaml')) + into(layout.buildDirectory.dir('resources/main/static/openapi')) +} + +tasks.named('bootRun') { + dependsOn(copyOpenApiToResources) +} + +tasks.named('resolveMainClassName') { + dependsOn(copyOpenApiToResources) +} + +tasks.named('bootJar') { + dependsOn(copyOpenApiToResources) +} + tasks.register('dbUp', Exec) { group = 'development' description = '로컬 DB 컨테이너를 실행합니다.' diff --git a/src/main/java/com/dropit/global/security/SecurityConfig.java b/src/main/java/com/dropit/global/security/SecurityConfig.java index d95a3d0..9475e2b 100644 --- a/src/main/java/com/dropit/global/security/SecurityConfig.java +++ b/src/main/java/com/dropit/global/security/SecurityConfig.java @@ -51,6 +51,7 @@ public SecurityFilterChain securityFilterChain(HttpSecurity http) throws Excepti ) .authorizeHttpRequests(auth -> auth .requestMatchers(HttpMethod.GET, "/actuator/health").permitAll() + .requestMatchers(HttpMethod.GET, "/swagger-ui/**", "/openapi/**", "/webjars/**").permitAll() .requestMatchers(HttpMethod.POST, "/auth/signup", "/auth/login", "/auth/reissue").permitAll() .anyRequest().authenticated() ) @@ -67,4 +68,3 @@ public FilterRegistrationBean jwtFilterRegistration(JwtFilter filter) return registration; } } - diff --git a/src/main/resources/static/swagger-ui/index.html b/src/main/resources/static/swagger-ui/index.html new file mode 100644 index 0000000..146b8b1 --- /dev/null +++ b/src/main/resources/static/swagger-ui/index.html @@ -0,0 +1,24 @@ + + + + + + DROPIT API + + + +

+ + + + From 83bbcabbfa0a07296baa51f4d2c00deeb9c761b4 Mon Sep 17 00:00:00 2001 From: Sooyoung Yoon Date: Thu, 10 Sep 2026 16:48:26 +0900 Subject: [PATCH 22/98] =?UTF-8?q?chore(docs):=20=EB=B9=88=20OpenAPI=20?= =?UTF-8?q?=EB=AA=85=EC=84=B8=EB=8A=94=20=ED=8C=A8=ED=82=A4=EC=A7=95=20?= =?UTF-8?q?=EB=B0=A9=EC=A7=80?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- build.gradle | 25 ++++++++++++++++++++++++- 1 file changed, 24 insertions(+), 1 deletion(-) diff --git a/build.gradle b/build.gradle index 8e0549e..ba18326 100644 --- a/build.gradle +++ b/build.gradle @@ -83,8 +83,31 @@ afterEvaluate { } } -def copyOpenApiToResources = tasks.register('copyOpenApiToResources', Copy) { +def validateOpenApiSpec = tasks.register('validateOpenApiSpec') { + group = 'documentation' + description = '생성된 OpenAPI 명세가 하나 이상의 API 경로를 포함하는지 검증합니다.' dependsOn(tasks.named('openapi3')) + doLast { + File specFile = layout.buildDirectory.file('api-spec/openapi3.yaml').get().asFile + if (!specFile.isFile() || specFile.length() == 0) { + throw new GradleException( + "OpenAPI 명세가 생성되지 않았습니다: ${specFile}. ./gradlew openapi3을 실행해 문서화 테스트를 먼저 수행하세요." + ) + } + + String spec = specFile.getText('UTF-8') + boolean hasPathsSection = spec.readLines().any { it.trim() == 'paths:' } + boolean hasDocumentedPath = spec.readLines().any { it ==~ /^\s{2,}\/\S+:\s*$/ } + if (!hasPathsSection || !hasDocumentedPath) { + throw new GradleException( + "OpenAPI 명세에 문서화된 API 경로가 없습니다: ${specFile}. -x test를 사용하지 말고 ./gradlew openapi3을 실행하세요." + ) + } + } +} + +def copyOpenApiToResources = tasks.register('copyOpenApiToResources', Copy) { + dependsOn(validateOpenApiSpec) from(layout.buildDirectory.file('api-spec/openapi3.yaml')) into(layout.buildDirectory.dir('resources/main/static/openapi')) } From 8a71ba0c038b0c872d444e7d6a0f7405c984f369 Mon Sep 17 00:00:00 2001 From: Sooyoung Yoon Date: Thu, 10 Sep 2026 17:03:09 +0900 Subject: [PATCH 23/98] =?UTF-8?q?chore(security):=20Basic=20Auth=EB=A5=BC?= =?UTF-8?q?=20swagger-ui,=20openapi=20=EA=B2=BD=EB=A1=9C=20=EB=93=B1?= =?UTF-8?q?=EC=97=90=20=EC=A0=81=EC=9A=A9?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .env.example | 4 +- README.md | 14 +- .../global/security/SecurityConfig.java | 54 ++++++- src/main/resources/application.properties | 6 +- .../global/security/SecurityConfigTest.java | 139 ++++++++++++++++++ src/test/resources/application.properties | 2 + 6 files changed, 214 insertions(+), 5 deletions(-) create mode 100644 src/test/java/com/dropit/global/security/SecurityConfigTest.java create mode 100644 src/test/resources/application.properties diff --git a/.env.example b/.env.example index e45095b..c6d2413 100644 --- a/.env.example +++ b/.env.example @@ -9,4 +9,6 @@ REDIS_PORT= JWT_SECRET= AWS_S3_BUCKET= AWS_ACCESS_KEY_ID= -AWS_SECRET_ACCESS_KEY= \ No newline at end of file +AWS_SECRET_ACCESS_KEY= +DOCS_AUTH_USERNAME= +DOCS_AUTH_PASSWORD= diff --git a/README.md b/README.md index 6f841a2..80bcdd8 100644 --- a/README.md +++ b/README.md @@ -102,9 +102,19 @@ src/main/java/com/dropit ## API 문서 - +Spring REST Docs를 사용하고, 서버 실행 시 테스트 스니펫을 OpenAPI 3.0.1 명세로 변환합니다. +Swagger UI는 이 명세 파일을 읽어 화면에 보여주는 역할만 하므로, 별도의 어노테이션 기반 API 명세가 생기지 않습니다. -_링크 추가 예정_ +브라우저에서 http://localhost:8080/swagger-ui/index.html를 열면 API 문서를 확인할 수 있습니다. +원본 명세는 http://localhost:8080/openapi/openapi3.yaml 경로에서도 직접 확인할 수 있습니다. + +Swagger UI와 OpenAPI YAML은 HTTP Basic Auth로 보호됩니다. +로컬에서는 `.env.local`에 다음 두 값을 설정합니다. + +```properties +DOCS_AUTH_USERNAME= +DOCS_AUTH_PASSWORD= +``` 인증이 필요한 API는 다음 헤더를 전달합니다. diff --git a/src/main/java/com/dropit/global/security/SecurityConfig.java b/src/main/java/com/dropit/global/security/SecurityConfig.java index 9475e2b..1820a6b 100644 --- a/src/main/java/com/dropit/global/security/SecurityConfig.java +++ b/src/main/java/com/dropit/global/security/SecurityConfig.java @@ -3,19 +3,26 @@ import com.dropit.global.security.jwt.JwtErrorCode; import com.dropit.global.security.jwt.JwtFilter; import lombok.RequiredArgsConstructor; +import org.springframework.beans.factory.annotation.Value; import org.springframework.boot.web.servlet.FilterRegistrationBean; import org.springframework.context.annotation.Bean; import org.springframework.context.annotation.Configuration; +import org.springframework.core.annotation.Order; import org.springframework.http.HttpMethod; +import org.springframework.security.config.Customizer; import org.springframework.security.config.annotation.method.configuration.EnableMethodSecurity; import org.springframework.security.config.annotation.web.builders.HttpSecurity; import org.springframework.security.config.annotation.web.configuration.EnableWebSecurity; import org.springframework.security.config.annotation.web.configurers.AbstractHttpConfigurer; import org.springframework.security.config.http.SessionCreationPolicy; +import org.springframework.security.core.userdetails.User; +import org.springframework.security.core.userdetails.UserDetailsService; import org.springframework.security.crypto.bcrypt.BCryptPasswordEncoder; import org.springframework.security.crypto.password.PasswordEncoder; +import org.springframework.security.provisioning.InMemoryUserDetailsManager; import org.springframework.security.web.SecurityFilterChain; import org.springframework.security.web.authentication.AnonymousAuthenticationFilter; +import org.springframework.util.StringUtils; @Configuration @RequiredArgsConstructor @@ -31,6 +38,43 @@ public PasswordEncoder passwordEncoder() { return new BCryptPasswordEncoder(); } + @Bean + public UserDetailsService documentationUserDetailsService( + @Value("${docs.auth.username:}") String username, + @Value("${docs.auth.password:}") String password, + PasswordEncoder passwordEncoder + ) { + validateDocumentationCredentials(username, password); + + return new InMemoryUserDetailsManager( + User.withUsername(username) + .password(passwordEncoder.encode(password)) + .roles("DOCS") + .build() + ); + } + + @Bean + @Order(1) + public SecurityFilterChain documentationSecurityFilterChain( + HttpSecurity http, + UserDetailsService documentationUserDetailsService + ) throws Exception { + return http + .securityMatcher("/swagger-ui/**", "/openapi/**", "/webjars/**") + .csrf(AbstractHttpConfigurer::disable) + .sessionManagement(session -> session + .sessionCreationPolicy(SessionCreationPolicy.STATELESS) + ) + .requestCache(AbstractHttpConfigurer::disable) + .formLogin(AbstractHttpConfigurer::disable) + .httpBasic(Customizer.withDefaults()) + .logout(AbstractHttpConfigurer::disable) + .userDetailsService(documentationUserDetailsService) + .authorizeHttpRequests(auth -> auth.anyRequest().authenticated()) + .build(); + } + @Bean public SecurityFilterChain securityFilterChain(HttpSecurity http) throws Exception { return http @@ -51,7 +95,6 @@ public SecurityFilterChain securityFilterChain(HttpSecurity http) throws Excepti ) .authorizeHttpRequests(auth -> auth .requestMatchers(HttpMethod.GET, "/actuator/health").permitAll() - .requestMatchers(HttpMethod.GET, "/swagger-ui/**", "/openapi/**", "/webjars/**").permitAll() .requestMatchers(HttpMethod.POST, "/auth/signup", "/auth/login", "/auth/reissue").permitAll() .anyRequest().authenticated() ) @@ -60,6 +103,15 @@ public SecurityFilterChain securityFilterChain(HttpSecurity http) throws Excepti .build(); } + private void validateDocumentationCredentials(String username, String password) { + if (!StringUtils.hasText(username) || !StringUtils.hasText(password)) { + throw new IllegalStateException( + "Swagger UI Basic Auth credentials are required. " + + "Set DOCS_AUTH_USERNAME and DOCS_AUTH_PASSWORD." + ); + } + } + // JwtFilter가 Spring Security 체인에서만 실행되도록 자동 등록을 막는다. (서블릿 컨테이너 중복 등록 방지) @Bean public FilterRegistrationBean jwtFilterRegistration(JwtFilter filter) { diff --git a/src/main/resources/application.properties b/src/main/resources/application.properties index d2acfc8..3c01b90 100644 --- a/src/main/resources/application.properties +++ b/src/main/resources/application.properties @@ -13,6 +13,10 @@ jwt.secret=${JWT_SECRET} jwt.expire.access=30m jwt.expire.refresh=14d +# Swagger UI Basic Auth credentials (local .env.local or prod Parameter Store) +docs.auth.username=${DOCS_AUTH_USERNAME:} +docs.auth.password=${DOCS_AUTH_PASSWORD:} + management.endpoints.web.exposure.include=health # AWS @@ -21,4 +25,4 @@ spring.cloud.aws.s3.bucket=${AWS_S3_BUCKET} # Multipart upload limits spring.servlet.multipart.max-file-size=10MB -spring.servlet.multipart.max-request-size=10MB \ No newline at end of file +spring.servlet.multipart.max-request-size=10MB diff --git a/src/test/java/com/dropit/global/security/SecurityConfigTest.java b/src/test/java/com/dropit/global/security/SecurityConfigTest.java new file mode 100644 index 0000000..9cae1d6 --- /dev/null +++ b/src/test/java/com/dropit/global/security/SecurityConfigTest.java @@ -0,0 +1,139 @@ +package com.dropit.global.security; + +import com.dropit.global.security.jwt.JwtFilter; +import jakarta.servlet.http.HttpServletResponse; +import org.junit.jupiter.api.BeforeEach; +import org.junit.jupiter.api.Test; +import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.context.annotation.Bean; +import org.springframework.context.annotation.Configuration; +import org.springframework.context.annotation.Import; +import org.springframework.security.config.annotation.web.configuration.EnableWebSecurity; +import org.springframework.security.core.userdetails.UserDetails; +import org.springframework.security.core.userdetails.UserDetailsService; +import org.springframework.security.crypto.password.PasswordEncoder; +import org.springframework.security.test.web.servlet.setup.SecurityMockMvcConfigurers; +import org.springframework.test.context.ContextConfiguration; +import org.springframework.test.context.TestPropertySource; +import org.springframework.test.context.junit.jupiter.SpringExtension; +import org.springframework.test.context.web.WebAppConfiguration; +import org.springframework.web.bind.annotation.GetMapping; +import org.springframework.web.bind.annotation.RestController; +import org.springframework.web.context.WebApplicationContext; +import org.springframework.test.web.servlet.MockMvc; +import org.springframework.test.web.servlet.setup.MockMvcBuilders; +import org.springframework.web.servlet.config.annotation.EnableWebMvc; +import org.junit.jupiter.api.extension.ExtendWith; + +import static org.mockito.Mockito.mock; +import static org.springframework.security.test.web.servlet.request.SecurityMockMvcRequestPostProcessors.httpBasic; +import static org.springframework.test.web.servlet.request.MockMvcRequestBuilders.get; +import static org.springframework.test.web.servlet.result.MockMvcResultMatchers.status; + +import static org.junit.jupiter.api.Assertions.assertThrows; +import static org.junit.jupiter.api.Assertions.assertTrue; + +@ExtendWith(SpringExtension.class) +@ContextConfiguration(classes = SecurityConfigTest.TestConfig.class) +@WebAppConfiguration +@TestPropertySource(properties = { + "docs.auth.username=docs", + "docs.auth.password=secret" +}) +class SecurityConfigTest { + + @Autowired + private SecurityConfig securityConfig; + + @Autowired + private PasswordEncoder passwordEncoder; + + @Autowired + private WebApplicationContext webApplicationContext; + + private MockMvc mockMvc; + + @BeforeEach + void setUpMockMvc() { + mockMvc = MockMvcBuilders + .webAppContextSetup(webApplicationContext) + .apply(SecurityMockMvcConfigurers.springSecurity()) + .build(); + } + + @Test + void documentationPasswordIsStoredAsBcryptHash() { + UserDetailsService userDetailsService = securityConfig.documentationUserDetailsService( + "docs", + "secret", + passwordEncoder + ); + + UserDetails user = userDetailsService.loadUserByUsername("docs"); + + assertTrue(passwordEncoder.matches("secret", user.getPassword())); + } + + @Test + void documentationCredentialsAreRequired() { + SecurityConfig standaloneSecurityConfig = new SecurityConfig(null, null); + + assertThrows( + IllegalStateException.class, + () -> standaloneSecurityConfig.documentationUserDetailsService( + "", + "secret", + passwordEncoder + ) + ); + } + + @Test + void documentationWithoutCredentialsReturnsUnauthorized() throws Exception { + mockMvc.perform(get("/openapi/test")) + .andExpect(status().isUnauthorized()); + } + + @Test + void documentationWithValidCredentialsReturnsOk() throws Exception { + mockMvc.perform(get("/openapi/test").with(httpBasic("docs", "secret"))) + .andExpect(status().isOk()); + } + + @Test + void documentationWithInvalidCredentialsReturnsUnauthorized() throws Exception { + mockMvc.perform(get("/openapi/test").with(httpBasic("docs", "wrong"))) + .andExpect(status().isUnauthorized()); + } + + @Configuration(proxyBeanMethods = false) + @EnableWebSecurity + @EnableWebMvc + @Import(SecurityConfig.class) + static class TestConfig { + + @Bean + JwtFilter jwtFilter() { + return mock(JwtFilter.class); + } + + @Bean + SecurityErrorResponseSender errorResponseSender() { + return mock(SecurityErrorResponseSender.class); + } + + @Bean + DocumentationTestController documentationTestController() { + return new DocumentationTestController(); + } + } + + @RestController + static class DocumentationTestController { + + @GetMapping("/openapi/test") + void getDocumentation(HttpServletResponse response) throws Exception { + response.setStatus(HttpServletResponse.SC_OK); + } + } +} diff --git a/src/test/resources/application.properties b/src/test/resources/application.properties new file mode 100644 index 0000000..ffaf438 --- /dev/null +++ b/src/test/resources/application.properties @@ -0,0 +1,2 @@ +DOCS_AUTH_USERNAME=test-docs +DOCS_AUTH_PASSWORD=test-docs-password From bb514b2b79285c18dd16de8df3754c8719b1fff4 Mon Sep 17 00:00:00 2001 From: Sooyoung Yoon Date: Thu, 10 Sep 2026 17:20:18 +0900 Subject: [PATCH 24/98] =?UTF-8?q?test(docs):=20=EB=8F=84=EB=A9=94=EC=9D=B8?= =?UTF-8?q?=EB=B3=84=20API=20DocumentationTest=20=EC=83=9D=EC=84=B1?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../controller/AuthDocumentationTest.java | 87 +++++++++ .../DocumentationTestSupport.java | 70 +++++++ .../controller/DropDocumentationTest.java | 178 ++++++++++++++++++ .../NotificationDocumentationTest.java | 84 +++++++++ .../controller/OrderDocumentationTest.java | 115 +++++++++++ .../controller/ProductDocumentationTest.java | 171 +++++++++++++++++ .../SellerProfileDocumentationTest.java | 138 ++++++++++++++ .../controller/UserDocumentationTest.java | 108 +++++++++++ .../controller/WishlistDocumentationTest.java | 98 ++++++++++ 9 files changed, 1049 insertions(+) create mode 100644 src/test/java/com/dropit/auth/controller/AuthDocumentationTest.java create mode 100644 src/test/java/com/dropit/documentation/DocumentationTestSupport.java create mode 100644 src/test/java/com/dropit/drop/controller/DropDocumentationTest.java create mode 100644 src/test/java/com/dropit/notification/controller/NotificationDocumentationTest.java create mode 100644 src/test/java/com/dropit/order/controller/OrderDocumentationTest.java create mode 100644 src/test/java/com/dropit/product/controller/ProductDocumentationTest.java create mode 100644 src/test/java/com/dropit/sellerprofile/controller/SellerProfileDocumentationTest.java create mode 100644 src/test/java/com/dropit/user/controller/UserDocumentationTest.java create mode 100644 src/test/java/com/dropit/wishlist/controller/WishlistDocumentationTest.java diff --git a/src/test/java/com/dropit/auth/controller/AuthDocumentationTest.java b/src/test/java/com/dropit/auth/controller/AuthDocumentationTest.java new file mode 100644 index 0000000..3561f0a --- /dev/null +++ b/src/test/java/com/dropit/auth/controller/AuthDocumentationTest.java @@ -0,0 +1,87 @@ +package com.dropit.auth.controller; + +import com.dropit.auth.dto.response.TokenResponse; +import com.dropit.auth.service.AuthService; +import com.dropit.documentation.DocumentationTestSupport; +import org.junit.jupiter.api.BeforeEach; +import org.junit.jupiter.api.Test; +import org.junit.jupiter.api.extension.ExtendWith; +import org.springframework.http.MediaType; +import org.springframework.restdocs.RestDocumentationContextProvider; +import org.springframework.restdocs.RestDocumentationExtension; + +import static com.epages.restdocs.apispec.MockMvcRestDocumentationWrapper.document; +import static com.epages.restdocs.apispec.ResourceDocumentation.resource; +import static com.epages.restdocs.apispec.ResourceSnippetParameters.builder; +import static org.springframework.restdocs.payload.JsonFieldType.STRING; +import static org.springframework.restdocs.payload.PayloadDocumentation.fieldWithPath; +import static org.springframework.test.web.servlet.request.MockMvcRequestBuilders.post; +import static org.springframework.test.web.servlet.result.MockMvcResultMatchers.status; +import static org.mockito.ArgumentMatchers.any; +import static org.mockito.Mockito.mock; +import static org.mockito.Mockito.when; + +@ExtendWith(RestDocumentationExtension.class) +class AuthDocumentationTest extends DocumentationTestSupport { + + private AuthService authService; + + @BeforeEach + void setUp(RestDocumentationContextProvider restDocumentation) { + authService = mock(AuthService.class); + configure(restDocumentation, new AuthController(authService)); + } + + @Test + void signup() throws Exception { + mockMvc.perform(post("/auth/signup") + .contentType(MediaType.APPLICATION_JSON) + .content(""" + {"email":"user@example.com","password":"password123","username":"user","role":"USER"} + """)) + .andExpect(status().isCreated()) + .andDo(document("auth-signup", resource(builder() + .tag("Auth").summary("회원가입").description("사용자 계정을 생성합니다.") + .requestFields( + fieldWithPath("email").description("이메일 주소"), + fieldWithPath("password").description("8자 이상의 비밀번호"), + fieldWithPath("username").description("사용자 이름"), + fieldWithPath("role").description("사용자 역할 (USER 또는 SELLER)") + ).build()))); + } + + @Test + void login() throws Exception { + when(authService.login(any())).thenReturn(new TokenResponse("access-token", "refresh-token")); + mockMvc.perform(post("/auth/login") + .contentType(MediaType.APPLICATION_JSON) + .content("{\"email\":\"user@example.com\",\"password\":\"password123\"}")) + .andExpect(status().isOk()) + .andDo(document("auth-login", resource(builder() + .tag("Auth").summary("로그인").description("이메일과 비밀번호로 로그인합니다.") + .requestFields( + fieldWithPath("email").description("이메일 주소"), + fieldWithPath("password").description("비밀번호") + ) + .responseFields( + fieldWithPath("accessToken").type(STRING).description("접근 토큰"), + fieldWithPath("refreshToken").type(STRING).description("갱신 토큰") + ).build()))); + } + + @Test + void reissue() throws Exception { + when(authService.reissue(any())).thenReturn(new TokenResponse("new-access-token", "new-refresh-token")); + mockMvc.perform(post("/auth/reissue") + .contentType(MediaType.APPLICATION_JSON) + .content("{\"refreshToken\":\"refresh-token\"}")) + .andExpect(status().isOk()) + .andDo(document("auth-reissue", resource(builder() + .tag("Auth").summary("토큰 재발급").description("Refresh Token으로 토큰을 재발급합니다.") + .requestFields(fieldWithPath("refreshToken").description("갱신 토큰")) + .responseFields( + fieldWithPath("accessToken").type(STRING).description("접근 토큰"), + fieldWithPath("refreshToken").type(STRING).description("갱신 토큰") + ).build()))); + } +} diff --git a/src/test/java/com/dropit/documentation/DocumentationTestSupport.java b/src/test/java/com/dropit/documentation/DocumentationTestSupport.java new file mode 100644 index 0000000..728f5f1 --- /dev/null +++ b/src/test/java/com/dropit/documentation/DocumentationTestSupport.java @@ -0,0 +1,70 @@ +package com.dropit.documentation; + +import com.dropit.global.exception.GlobalExceptionHandler; +import com.dropit.global.security.authentication.JwtAuthenticationToken; +import com.dropit.global.security.principal.AuthUser; +import org.springframework.restdocs.RestDocumentationContextProvider; +import org.junit.jupiter.api.AfterEach; +import org.springframework.security.core.context.SecurityContextHolder; +import org.springframework.security.web.method.annotation.AuthenticationPrincipalArgumentResolver; +import org.springframework.test.web.servlet.MockMvc; +import org.springframework.test.web.servlet.request.MockHttpServletRequestBuilder; +import org.springframework.test.web.servlet.request.RequestPostProcessor; +import org.springframework.test.web.servlet.setup.MockMvcBuilders; +import org.springframework.web.method.support.HandlerMethodArgumentResolver; + +import java.util.ArrayList; +import java.util.Arrays; +import java.util.List; + +import static org.springframework.restdocs.mockmvc.MockMvcRestDocumentation.documentationConfiguration; + +/** Common MockMvc wiring for isolated REST Docs contract tests. */ +public abstract class DocumentationTestSupport { + + protected static final String DOCUMENTATION_ACCESS_TOKEN = + "Bearer eyJhbGciOiJIUzI1NiJ9.eyJzdWIiOiIxIiwidHlwZSI6IkFDQ0VTUyJ9.signature"; + + protected MockMvc mockMvc; + + protected void configure( + RestDocumentationContextProvider restDocumentation, + Object controller, + HandlerMethodArgumentResolver... additionalResolvers + ) { + List resolvers = new ArrayList<>(); + resolvers.add(new AuthenticationPrincipalArgumentResolver()); + resolvers.addAll(Arrays.asList(additionalResolvers)); + + mockMvc = MockMvcBuilders + .standaloneSetup(controller) + .setControllerAdvice(new GlobalExceptionHandler()) + .setCustomArgumentResolvers(resolvers.toArray(HandlerMethodArgumentResolver[]::new)) + .apply(documentationConfiguration(restDocumentation)) + .build(); + + authenticate(1L); + } + + protected void authenticate(Long userId) { + SecurityContextHolder.getContext().setAuthentication( + new JwtAuthenticationToken(new AuthUser(userId), List.of()) + ); + } + + protected RequestPostProcessor bearerToken() { + return request -> { + request.addHeader("Authorization", DOCUMENTATION_ACCESS_TOKEN); + return request; + }; + } + + protected MockHttpServletRequestBuilder authenticated(MockHttpServletRequestBuilder request) { + return request.with(bearerToken()); + } + + @AfterEach + protected void clearAuthentication() { + SecurityContextHolder.clearContext(); + } +} diff --git a/src/test/java/com/dropit/drop/controller/DropDocumentationTest.java b/src/test/java/com/dropit/drop/controller/DropDocumentationTest.java new file mode 100644 index 0000000..d4e0082 --- /dev/null +++ b/src/test/java/com/dropit/drop/controller/DropDocumentationTest.java @@ -0,0 +1,178 @@ +package com.dropit.drop.controller; + +import com.dropit.documentation.DocumentationTestSupport; +import com.dropit.drop.dto.response.DropResponse; +import com.dropit.drop.entity.Drop; +import com.dropit.drop.service.DropService; +import com.dropit.product.entity.Product; +import com.dropit.user.entity.User; +import com.dropit.user.entity.UserRole; +import org.junit.jupiter.api.BeforeEach; +import org.junit.jupiter.api.Test; +import org.junit.jupiter.api.extension.ExtendWith; +import org.springframework.data.domain.PageImpl; +import org.springframework.data.domain.PageRequest; +import org.springframework.data.web.PageableHandlerMethodArgumentResolver; +import org.springframework.http.MediaType; +import org.springframework.restdocs.RestDocumentationContextProvider; +import org.springframework.restdocs.RestDocumentationExtension; +import org.springframework.test.util.ReflectionTestUtils; + +import java.math.BigDecimal; +import java.time.LocalDateTime; +import java.util.List; + +import static com.epages.restdocs.apispec.MockMvcRestDocumentationWrapper.document; +import static com.epages.restdocs.apispec.ResourceDocumentation.resource; +import static com.epages.restdocs.apispec.ResourceSnippetParameters.builder; +import static org.springframework.restdocs.payload.JsonFieldType.NUMBER; +import static org.springframework.restdocs.payload.JsonFieldType.STRING; +import static org.springframework.restdocs.payload.JsonFieldType.BOOLEAN; +import static org.springframework.restdocs.payload.PayloadDocumentation.fieldWithPath; +import static org.mockito.ArgumentMatchers.any; +import static org.mockito.ArgumentMatchers.eq; +import static org.mockito.Mockito.mock; +import static org.mockito.Mockito.when; +import static org.springframework.test.web.servlet.request.MockMvcRequestBuilders.delete; +import static org.springframework.test.web.servlet.request.MockMvcRequestBuilders.get; +import static org.springframework.test.web.servlet.request.MockMvcRequestBuilders.patch; +import static org.springframework.test.web.servlet.request.MockMvcRequestBuilders.post; +import static org.springframework.test.web.servlet.result.MockMvcResultMatchers.status; + +@ExtendWith(RestDocumentationExtension.class) +class DropDocumentationTest extends DocumentationTestSupport { + + private DropService dropService; + + @BeforeEach + void setUp(RestDocumentationContextProvider restDocumentation) { + dropService = mock(DropService.class); + configure(restDocumentation, new DropController(dropService), new PageableHandlerMethodArgumentResolver()); + } + + @Test + void create() throws Exception { + when(dropService.save(eq(1L), any())).thenReturn(100L); + mockMvc.perform(authenticated(post("/drops").contentType(MediaType.APPLICATION_JSON) + .content("{\"productId\":10,\"price\":59000,\"initialQuantity\":100,\"discountRate\":20,\"purchaseLimit\":2,\"openAt\":\"2030-01-01T10:00:00\",\"closeAt\":\"2030-01-02T10:00:00\"}"))) + .andExpect(status().isCreated()) + .andDo(document("drops-create", resource(builder() + .tag("Drops").summary("드랍 생성") + .requestFields( + fieldWithPath("productId").type(NUMBER).description("상품 ID"), + fieldWithPath("price").type(NUMBER).description("판매 가격"), + fieldWithPath("initialQuantity").type(NUMBER).description("초기 수량"), + fieldWithPath("discountRate").type(NUMBER).description("할인율"), + fieldWithPath("purchaseLimit").type(NUMBER).description("구매 제한 수량"), + fieldWithPath("openAt").type(STRING).description("판매 시작 시각"), + fieldWithPath("closeAt").type(STRING).description("판매 종료 시각") + ).build()))); + } + + @Test + void getAll() throws Exception { + when(dropService.getAll(any(), any())).thenReturn(new PageImpl<>(List.of(dropResponse()), PageRequest.of(0, 20), 1)); + mockMvc.perform(get("/drops").param("keyword", "hoodie").param("status", "OPEN").param("page", "0").param("size", "20")) + .andExpect(status().isOk()) + .andDo(document("drops-get-all", resource(builder() + .tag("Drops").summary("드랍 목록 조회").description("검색 조건과 페이징 조건으로 드랍을 조회합니다.").build()))); + } + + @Test + void getOne() throws Exception { + when(dropService.getOne(100L)).thenReturn(dropResponse()); + mockMvc.perform(get("/drops/{dropId}", 100L)) + .andExpect(status().isOk()) + .andDo(document("drops-get", resource(builder() + .tag("Drops").summary("드랍 단건 조회").responseFields(dropFields()).build()))); + } + + @Test + void getPublicDropsBySeller() throws Exception { + when(dropService.getPublicDropsBySeller(eq(1L), any())).thenReturn(new PageImpl<>(List.of(dropResponse()), PageRequest.of(0, 20), 1)); + mockMvc.perform(get("/creators/{sellerId}/drops", 1L).param("page", "0").param("size", "20")) + .andExpect(status().isOk()) + .andDo(document("drops-get-by-creator", resource(builder() + .tag("Drops").summary("판매자 공개 드랍 목록 조회").build()))); + } + + @Test + void getDropsForSellerManagement() throws Exception { + when(dropService.getDropsForSellerManagement(eq(1L), any())).thenReturn(new PageImpl<>(List.of(dropResponse()), PageRequest.of(0, 20), 1)); + mockMvc.perform(authenticated(get("/users/me/drops")).param("page", "0").param("size", "20")) + .andExpect(status().isOk()) + .andDo(document("drops-get-my-drops", resource(builder() + .tag("Drops").summary("내 드랍 목록 조회").build()))); + } + + @Test + void update() throws Exception { + when(dropService.update(eq(1L), eq(100L), any())).thenReturn(dropResponse()); + mockMvc.perform(authenticated(patch("/drops/{dropId}", 100L).contentType(MediaType.APPLICATION_JSON) + .content("{\"price\":60000,\"initialQuantity\":120,\"discountRate\":10,\"purchaseLimit\":3,\"openAt\":\"2030-01-01T10:00:00\",\"closeAt\":\"2030-01-02T10:00:00\"}"))) + .andExpect(status().isOk()) + .andDo(document("drops-update", resource(builder() + .tag("Drops").summary("드랍 수정") + .requestFields( + fieldWithPath("price").optional().type(NUMBER).description("판매 가격"), + fieldWithPath("initialQuantity").optional().type(NUMBER).description("초기 수량"), + fieldWithPath("discountRate").optional().type(NUMBER).description("할인율"), + fieldWithPath("purchaseLimit").optional().type(NUMBER).description("구매 제한 수량"), + fieldWithPath("openAt").optional().type(STRING).description("판매 시작 시각"), + fieldWithPath("closeAt").optional().type(STRING).description("판매 종료 시각") + ).responseFields(dropFields()).build()))); + } + + @Test + void changeVisibility() throws Exception { + when(dropService.changeVisibility(eq(1L), eq(100L), any())).thenReturn(dropResponse()); + mockMvc.perform(authenticated(patch("/drops/{dropId}/visibility", 100L).contentType(MediaType.APPLICATION_JSON) + .content("{\"visible\":true}"))) + .andExpect(status().isOk()) + .andDo(document("drops-change-visibility", resource(builder() + .tag("Drops").summary("드랍 공개 여부 변경") + .requestFields(fieldWithPath("visible").type(BOOLEAN).description("공개 여부")) + .responseFields(dropFields()).build()))); + } + + @Test + void deleteDrop() throws Exception { + mockMvc.perform(authenticated(delete("/drops/{dropId}", 100L))) + .andExpect(status().isNoContent()) + .andDo(document("drops-delete", resource(builder() + .tag("Drops").summary("드랍 삭제").build()))); + } + + private DropResponse dropResponse() { + User seller = new User("seller@example.com", "encoded-password", "seller", UserRole.SELLER); + ReflectionTestUtils.setField(seller, "id", 1L); + Product product = new Product(seller, "Limited Hoodie", "Limited edition hoodie", "products/10/image.jpg"); + ReflectionTestUtils.setField(product, "id", 10L); + Drop drop = new Drop(product, new BigDecimal("59000"), 100, 20, 2, + LocalDateTime.of(2030, 1, 1, 10, 0), LocalDateTime.of(2030, 1, 2, 10, 0)); + ReflectionTestUtils.setField(drop, "id", 100L); + drop.changeVisibility(true); + return DropResponse.from(drop); + } + + private org.springframework.restdocs.payload.FieldDescriptor[] dropFields() { + return new org.springframework.restdocs.payload.FieldDescriptor[]{ + fieldWithPath("id").type(NUMBER).description("드랍 ID"), + fieldWithPath("sellerId").type(NUMBER).description("판매자 ID"), + fieldWithPath("sellerName").type(STRING).description("판매자 이름"), + fieldWithPath("productId").type(NUMBER).description("상품 ID"), + fieldWithPath("productName").type(STRING).description("상품명"), + fieldWithPath("imageUrl").type(STRING).optional().description("상품 이미지 URL"), + fieldWithPath("price").type(NUMBER).description("판매 가격"), + fieldWithPath("discountRate").type(NUMBER).description("할인율"), + fieldWithPath("initialQuantity").type(NUMBER).description("초기 수량"), + fieldWithPath("remainingQuantity").type(NUMBER).description("잔여 수량"), + fieldWithPath("soldQuantity").type(NUMBER).description("판매 수량"), + fieldWithPath("purchaseLimit").type(NUMBER).description("구매 제한 수량"), + fieldWithPath("visible").type(BOOLEAN).description("공개 여부"), + fieldWithPath("openAt").type(STRING).description("판매 시작 시각"), + fieldWithPath("closeAt").type(STRING).description("판매 종료 시각"), + fieldWithPath("status").type(STRING).description("드랍 상태") + }; + } +} diff --git a/src/test/java/com/dropit/notification/controller/NotificationDocumentationTest.java b/src/test/java/com/dropit/notification/controller/NotificationDocumentationTest.java new file mode 100644 index 0000000..33e208b --- /dev/null +++ b/src/test/java/com/dropit/notification/controller/NotificationDocumentationTest.java @@ -0,0 +1,84 @@ +package com.dropit.notification.controller; + +import com.dropit.documentation.DocumentationTestSupport; +import com.dropit.notification.dto.response.NotificationResponse; +import com.dropit.notification.entity.Notification; +import com.dropit.notification.service.NotificationService; +import com.dropit.user.entity.User; +import com.dropit.user.entity.UserRole; +import org.junit.jupiter.api.BeforeEach; +import org.junit.jupiter.api.Test; +import org.junit.jupiter.api.extension.ExtendWith; +import org.springframework.restdocs.RestDocumentationContextProvider; +import org.springframework.restdocs.RestDocumentationExtension; +import org.springframework.test.util.ReflectionTestUtils; + +import java.util.List; + +import static com.epages.restdocs.apispec.MockMvcRestDocumentationWrapper.document; +import static com.epages.restdocs.apispec.ResourceDocumentation.resource; +import static com.epages.restdocs.apispec.ResourceSnippetParameters.builder; +import static org.springframework.restdocs.payload.JsonFieldType.ARRAY; +import static org.springframework.restdocs.payload.JsonFieldType.BOOLEAN; +import static org.springframework.restdocs.payload.JsonFieldType.NUMBER; +import static org.springframework.restdocs.payload.JsonFieldType.STRING; +import static org.springframework.restdocs.payload.PayloadDocumentation.fieldWithPath; +import static org.mockito.Mockito.mock; +import static org.mockito.Mockito.when; +import static org.springframework.test.web.servlet.request.MockMvcRequestBuilders.get; +import static org.springframework.test.web.servlet.request.MockMvcRequestBuilders.patch; +import static org.springframework.test.web.servlet.result.MockMvcResultMatchers.status; + +@ExtendWith(RestDocumentationExtension.class) +class NotificationDocumentationTest extends DocumentationTestSupport { + + private NotificationService notificationService; + + @BeforeEach + void setUp(RestDocumentationContextProvider restDocumentation) { + notificationService = mock(NotificationService.class); + configure(restDocumentation, new NotificationController(notificationService)); + } + + @Test + void getMine() throws Exception { + when(notificationService.getMine(1L)).thenReturn(List.of(response(false))); + mockMvc.perform(authenticated(get("/notifications/me"))) + .andExpect(status().isOk()) + .andDo(document("notifications-get-me", resource(builder() + .tag("Notifications").summary("내 알림 목록 조회") + .responseFields( + fieldWithPath("[]").type(ARRAY).description("알림 목록"), + fieldWithPath("[].id").type(NUMBER).description("알림 ID"), + fieldWithPath("[].title").type(STRING).description("알림 제목"), + fieldWithPath("[].message").type(STRING).description("알림 내용"), + fieldWithPath("[].read").type(BOOLEAN).description("읽음 여부"), + fieldWithPath("[].createdAt").type(STRING).optional().description("생성 시각") + ).build()))); + } + + @Test + void markAsRead() throws Exception { + when(notificationService.markAsRead(1L, 100L)).thenReturn(response(true)); + mockMvc.perform(authenticated(patch("/notifications/{notificationId}/read", 100L))) + .andExpect(status().isOk()) + .andDo(document("notifications-mark-read", resource(builder() + .tag("Notifications").summary("알림 읽음 처리") + .responseFields( + fieldWithPath("id").type(NUMBER).description("알림 ID"), + fieldWithPath("title").type(STRING).description("알림 제목"), + fieldWithPath("message").type(STRING).description("알림 내용"), + fieldWithPath("read").type(BOOLEAN).description("읽음 여부"), + fieldWithPath("createdAt").type(STRING).optional().description("생성 시각") + ).build()))); + } + + private NotificationResponse response(boolean read) { + User user = new User("user@example.com", "encoded-password", "user", UserRole.USER); + ReflectionTestUtils.setField(user, "id", 1L); + Notification notification = new Notification(user, "주문 알림", "주문 상태가 변경되었습니다."); + ReflectionTestUtils.setField(notification, "id", 100L); + if (read) notification.markAsRead(); + return new NotificationResponse(notification); + } +} diff --git a/src/test/java/com/dropit/order/controller/OrderDocumentationTest.java b/src/test/java/com/dropit/order/controller/OrderDocumentationTest.java new file mode 100644 index 0000000..a1b31c9 --- /dev/null +++ b/src/test/java/com/dropit/order/controller/OrderDocumentationTest.java @@ -0,0 +1,115 @@ +package com.dropit.order.controller; + +import com.dropit.documentation.DocumentationTestSupport; +import com.dropit.order.dto.response.OrderItemResponse; +import com.dropit.order.dto.response.OrderResponse; +import com.dropit.order.dto.response.OrderSummaryResponse; +import com.dropit.order.entity.OrderStatus; +import com.dropit.order.service.OrderService; +import org.junit.jupiter.api.BeforeEach; +import org.junit.jupiter.api.Test; +import org.junit.jupiter.api.extension.ExtendWith; +import org.springframework.http.MediaType; +import org.springframework.restdocs.RestDocumentationContextProvider; +import org.springframework.restdocs.RestDocumentationExtension; + +import java.math.BigDecimal; +import java.util.List; + +import static com.epages.restdocs.apispec.MockMvcRestDocumentationWrapper.document; +import static com.epages.restdocs.apispec.ResourceDocumentation.resource; +import static com.epages.restdocs.apispec.ResourceSnippetParameters.builder; +import static org.springframework.restdocs.payload.JsonFieldType.ARRAY; +import static org.springframework.restdocs.payload.JsonFieldType.NUMBER; +import static org.springframework.restdocs.payload.JsonFieldType.STRING; +import static org.springframework.restdocs.payload.PayloadDocumentation.fieldWithPath; +import static org.mockito.ArgumentMatchers.any; +import static org.mockito.ArgumentMatchers.eq; +import static org.mockito.Mockito.mock; +import static org.mockito.Mockito.when; +import static org.springframework.test.web.servlet.request.MockMvcRequestBuilders.get; +import static org.springframework.test.web.servlet.request.MockMvcRequestBuilders.post; +import static org.springframework.test.web.servlet.result.MockMvcResultMatchers.status; + +@ExtendWith(RestDocumentationExtension.class) +class OrderDocumentationTest extends DocumentationTestSupport { + + private OrderService orderService; + + @BeforeEach + void setUp(RestDocumentationContextProvider restDocumentation) { + orderService = mock(OrderService.class); + configure(restDocumentation, new OrderController(orderService)); + } + + @Test + void create() throws Exception { + OrderResponse response = orderResponse(); + when(orderService.create(eq(1L), any())).thenReturn(response); + mockMvc.perform(authenticated(post("/orders").contentType(MediaType.APPLICATION_JSON) + .content("{\"items\":[{\"dropId\":100,\"quantity\":2}]}"))) + .andExpect(status().isCreated()) + .andDo(document("orders-create", resource(builder() + .tag("Orders").summary("주문 생성").description("한 개의 드랍을 대상으로 주문을 생성합니다.") + .requestFields( + fieldWithPath("items").type(ARRAY).description("주문 항목 목록 (현재 한 항목만 허용)"), + fieldWithPath("items[].dropId").type(NUMBER).description("주문할 드랍 ID"), + fieldWithPath("items[].quantity").type(NUMBER).description("주문 수량") + ).responseFields(orderFields()).build()))); + } + + @Test + void getMyOrders() throws Exception { + when(orderService.getMyOrders(1L)).thenReturn(List.of(new OrderSummaryResponse(1000L, OrderStatus.ORDERED, new BigDecimal("94400"), null))); + mockMvc.perform(authenticated(get("/orders/me"))) + .andExpect(status().isOk()) + .andDo(document("orders-get-me", resource(builder() + .tag("Orders").summary("내 주문 목록 조회") + .responseFields( + fieldWithPath("[]").type(ARRAY).description("주문 요약 목록"), + fieldWithPath("[].id").type(NUMBER).description("주문 ID"), + fieldWithPath("[].status").type(STRING).description("주문 상태"), + fieldWithPath("[].totalPrice").type(NUMBER).description("총 주문 금액"), + fieldWithPath("[].createdAt").type(STRING).optional().description("주문 생성 시각") + ).build()))); + } + + @Test + void getMyOrder() throws Exception { + when(orderService.getMyOrder(1L, 1000L)).thenReturn(orderResponse()); + mockMvc.perform(authenticated(get("/orders/{orderId}", 1000L))) + .andExpect(status().isOk()) + .andDo(document("orders-get", resource(builder() + .tag("Orders").summary("내 주문 상세 조회").responseFields(orderFields()).build()))); + } + + @Test + void cancel() throws Exception { + mockMvc.perform(authenticated(post("/orders/{orderId}/cancel", 1000L))) + .andExpect(status().isNoContent()) + .andDo(document("orders-cancel", resource(builder() + .tag("Orders").summary("주문 취소").description("현재 사용자의 주문을 취소합니다.").build()))); + } + + private OrderResponse orderResponse() { + return new OrderResponse(1000L, OrderStatus.ORDERED, new BigDecimal("94400"), null, + List.of(new OrderItemResponse(2000L, 100L, "Limited Hoodie", new BigDecimal("59000"), 20, 2, new BigDecimal("94400")))); + } + + private org.springframework.restdocs.payload.FieldDescriptor[] orderFields() { + return new org.springframework.restdocs.payload.FieldDescriptor[]{ + fieldWithPath("id").type(NUMBER).description("주문 ID"), + fieldWithPath("status").type(STRING).description("주문 상태"), + fieldWithPath("totalPrice").type(NUMBER).description("총 주문 금액"), + fieldWithPath("createdAt").type(STRING).optional().description("주문 생성 시각"), + fieldWithPath("items").type(ARRAY).description("주문 항목 목록"), + fieldWithPath("items[].id").type(NUMBER).description("주문 항목 ID"), + fieldWithPath("items[].dropId").type(NUMBER).description("주문한 드랍 ID"), + fieldWithPath("items[].productName").type(STRING).description("주문 당시 상품명"), + fieldWithPath("items[].unitPrice").type(NUMBER).description("주문 당시 단가"), + fieldWithPath("items[].discountRate").type(NUMBER).description("주문 당시 할인율"), + fieldWithPath("items[].quantity").type(NUMBER).description("주문 수량"), + fieldWithPath("items[].itemTotalPrice").type(NUMBER).description("주문 항목 금액") + }; + } +} diff --git a/src/test/java/com/dropit/product/controller/ProductDocumentationTest.java b/src/test/java/com/dropit/product/controller/ProductDocumentationTest.java new file mode 100644 index 0000000..e63bc4f --- /dev/null +++ b/src/test/java/com/dropit/product/controller/ProductDocumentationTest.java @@ -0,0 +1,171 @@ +package com.dropit.product.controller; + +import com.dropit.documentation.DocumentationTestSupport; +import com.dropit.product.dto.response.ProductResponse; +import com.dropit.product.entity.Product; +import com.dropit.product.service.ProductService; +import com.dropit.user.entity.User; +import com.dropit.user.entity.UserRole; +import org.junit.jupiter.api.BeforeEach; +import org.junit.jupiter.api.Test; +import org.junit.jupiter.api.extension.ExtendWith; +import org.springframework.data.domain.PageImpl; +import org.springframework.data.domain.PageRequest; +import org.springframework.data.web.PageableHandlerMethodArgumentResolver; +import org.springframework.http.MediaType; +import org.springframework.mock.web.MockMultipartFile; +import org.springframework.restdocs.RestDocumentationContextProvider; +import org.springframework.restdocs.RestDocumentationExtension; +import org.springframework.test.util.ReflectionTestUtils; + +import java.util.List; + +import static com.epages.restdocs.apispec.MockMvcRestDocumentationWrapper.document; +import static com.epages.restdocs.apispec.ResourceDocumentation.resource; +import static com.epages.restdocs.apispec.ResourceSnippetParameters.builder; +import static org.springframework.restdocs.payload.JsonFieldType.NUMBER; +import static org.springframework.restdocs.payload.JsonFieldType.STRING; +import static org.springframework.restdocs.payload.PayloadDocumentation.fieldWithPath; +import static org.mockito.ArgumentMatchers.any; +import static org.mockito.ArgumentMatchers.eq; +import static org.mockito.Mockito.mock; +import static org.mockito.Mockito.when; +import static org.springframework.test.web.servlet.request.MockMvcRequestBuilders.delete; +import static org.springframework.test.web.servlet.request.MockMvcRequestBuilders.get; +import static org.springframework.test.web.servlet.request.MockMvcRequestBuilders.multipart; +import static org.springframework.test.web.servlet.request.MockMvcRequestBuilders.post; +import static org.springframework.test.web.servlet.request.MockMvcRequestBuilders.put; +import static org.springframework.test.web.servlet.result.MockMvcResultMatchers.status; + +@ExtendWith(RestDocumentationExtension.class) +class ProductDocumentationTest extends DocumentationTestSupport { + + private ProductService productService; + + @BeforeEach + void setUp(RestDocumentationContextProvider restDocumentation) { + productService = mock(ProductService.class); + configure(restDocumentation, new ProductController(productService), new PageableHandlerMethodArgumentResolver()); + } + + @Test + void create() throws Exception { + when(productService.create(eq(1L), any())).thenReturn(100L); + mockMvc.perform(authenticated(post("/products").contentType(MediaType.APPLICATION_JSON) + .content("{\"name\":\"Limited Hoodie\",\"description\":\"Limited edition hoodie\"}"))) + .andExpect(status().isCreated()) + .andDo(document("products-create", resource(builder() + .tag("Products").summary("상품 생성") + .requestFields(fieldWithPath("name").description("상품명"), fieldWithPath("description").optional().description("상품 설명")) + .build()))); + } + + @Test + void getProduct() throws Exception { + when(productService.getProduct(100L)).thenReturn(productResponse()); + mockMvc.perform(get("/products/{productId}", 100L)) + .andExpect(status().isOk()) + .andDo(document("products-get", resource(builder() + .tag("Products").summary("상품 단건 조회").responseFields(productFields()).build()))); + } + + @Test + void getProducts() throws Exception { + when(productService.getProducts(any())).thenReturn(new PageImpl<>(List.of(productResponse()), PageRequest.of(0, 20), 1)); + mockMvc.perform(get("/products").param("page", "0").param("size", "20")) + .andExpect(status().isOk()) + .andDo(document("products-get-all", resource(builder() + .tag("Products").summary("상품 목록 조회").description("상품 목록을 페이징하여 조회합니다.").responseFields(pageFields()).build()))); + } + + @Test + void getProductsBySeller() throws Exception { + when(productService.getProductsBySeller(eq(1L), any())).thenReturn(new PageImpl<>(List.of(productResponse()), PageRequest.of(0, 20), 1)); + mockMvc.perform(get("/sellers/{sellerId}/products", 1L).param("page", "0").param("size", "20")) + .andExpect(status().isOk()) + .andDo(document("products-get-by-seller", resource(builder() + .tag("Products").summary("판매자 상품 목록 조회").responseFields(pageFields()).build()))); + } + + @Test + void update() throws Exception { + when(productService.update(eq(1L), eq(100L), any())).thenReturn(productResponse()); + mockMvc.perform(authenticated(put("/products/{productId}", 100L).contentType(MediaType.APPLICATION_JSON) + .content("{\"name\":\"Updated Hoodie\",\"description\":\"Updated description\"}"))) + .andExpect(status().isOk()) + .andDo(document("products-update", resource(builder() + .tag("Products").summary("상품 수정") + .requestFields(fieldWithPath("name").description("상품명"), fieldWithPath("description").optional().description("상품 설명")) + .responseFields(productFields()).build()))); + } + + @Test + void deleteProduct() throws Exception { + mockMvc.perform(authenticated(delete("/products/{productId}", 100L))) + .andExpect(status().isNoContent()) + .andDo(document("products-delete", resource(builder() + .tag("Products").summary("상품 삭제").build()))); + } + + @Test + void uploadImage() throws Exception { + when(productService.uploadImage(eq(1L), eq(100L), any())).thenReturn(productResponse()); + MockMultipartFile file = new MockMultipartFile("file", "product.jpg", "image/jpeg", "image".getBytes()); + mockMvc.perform(multipart("/products/{productId}/image", 100L).file(file).with(bearerToken()).with(request -> { + request.setMethod("PUT"); + return request; + })) + .andExpect(status().isOk()) + .andDo(document("products-upload-image", resource(builder() + .tag("Products").summary("상품 이미지 업로드").responseFields(productFields()).build()))); + } + + private ProductResponse productResponse() { + User seller = new User("seller@example.com", "encoded-password", "seller", UserRole.SELLER); + ReflectionTestUtils.setField(seller, "id", 1L); + Product product = new Product(seller, "Limited Hoodie", "Limited edition hoodie", null); + ReflectionTestUtils.setField(product, "id", 100L); + return new ProductResponse(product, "https://cdn.example.com/product.jpg"); + } + + private org.springframework.restdocs.payload.FieldDescriptor[] productFields() { + return new org.springframework.restdocs.payload.FieldDescriptor[]{ + fieldWithPath("id").type(NUMBER).description("상품 ID"), + fieldWithPath("sellerId").type(NUMBER).description("판매자 ID"), + fieldWithPath("sellerName").type(STRING).description("판매자 이름"), + fieldWithPath("name").type(STRING).description("상품명"), + fieldWithPath("description").type(STRING).optional().description("상품 설명"), + fieldWithPath("imageUrl").type(STRING).optional().description("상품 이미지 URL"), + fieldWithPath("createdAt").type(STRING).optional().description("생성 시각"), + fieldWithPath("updatedAt").type(STRING).optional().description("수정 시각") + }; + } + + private org.springframework.restdocs.payload.FieldDescriptor[] pageFields() { + return new org.springframework.restdocs.payload.FieldDescriptor[]{ + fieldWithPath("content").description("상품 목록"), + fieldWithPath("content[].id").type(NUMBER).description("상품 ID"), + fieldWithPath("content[].sellerId").type(NUMBER).description("판매자 ID"), + fieldWithPath("content[].sellerName").type(STRING).description("판매자 이름"), + fieldWithPath("content[].name").type(STRING).description("상품명"), + fieldWithPath("content[].description").type(STRING).optional().description("상품 설명"), + fieldWithPath("content[].imageUrl").type(STRING).optional().description("상품 이미지 URL"), + fieldWithPath("content[].createdAt").type(STRING).optional().description("생성 시각"), + fieldWithPath("content[].updatedAt").type(STRING).optional().description("수정 시각"), + fieldWithPath("pageable").description("페이징 정보"), + fieldWithPath("pageable.*").ignored(), + fieldWithPath("pageable.sort").ignored(), + fieldWithPath("pageable.sort.*").ignored(), + fieldWithPath("last").description("마지막 페이지 여부"), + fieldWithPath("totalElements").description("전체 요소 수"), + fieldWithPath("totalPages").description("전체 페이지 수"), + fieldWithPath("size").description("페이지 크기"), + fieldWithPath("number").description("현재 페이지 번호"), + fieldWithPath("sort").description("정렬 정보"), + fieldWithPath("sort.*").ignored(), + fieldWithPath("first").description("첫 페이지 여부"), + fieldWithPath("numberOfElements").description("현재 페이지 요소 수"), + fieldWithPath("empty").description("빈 페이지 여부") + }; + } +} diff --git a/src/test/java/com/dropit/sellerprofile/controller/SellerProfileDocumentationTest.java b/src/test/java/com/dropit/sellerprofile/controller/SellerProfileDocumentationTest.java new file mode 100644 index 0000000..fc9a27b --- /dev/null +++ b/src/test/java/com/dropit/sellerprofile/controller/SellerProfileDocumentationTest.java @@ -0,0 +1,138 @@ +package com.dropit.sellerprofile.controller; + +import com.dropit.documentation.DocumentationTestSupport; +import com.dropit.global.storage.S3ImageService; +import com.dropit.sellerprofile.dto.response.SellerProfileResponse; +import com.dropit.sellerprofile.entity.SellerProfile; +import com.dropit.sellerprofile.service.SellerProfileService; +import com.dropit.user.entity.User; +import com.dropit.user.entity.UserRole; +import org.junit.jupiter.api.BeforeEach; +import org.junit.jupiter.api.Test; +import org.junit.jupiter.api.extension.ExtendWith; +import org.springframework.http.MediaType; +import org.springframework.mock.web.MockMultipartFile; +import org.springframework.restdocs.RestDocumentationContextProvider; +import org.springframework.restdocs.RestDocumentationExtension; +import org.springframework.test.util.ReflectionTestUtils; + +import static com.epages.restdocs.apispec.MockMvcRestDocumentationWrapper.document; +import static com.epages.restdocs.apispec.ResourceDocumentation.resource; +import static com.epages.restdocs.apispec.ResourceSnippetParameters.builder; +import com.epages.restdocs.apispec.Schema; +import static org.springframework.restdocs.payload.JsonFieldType.NUMBER; +import static org.springframework.restdocs.payload.JsonFieldType.STRING; +import static org.springframework.restdocs.payload.PayloadDocumentation.fieldWithPath; +import static org.mockito.ArgumentMatchers.any; +import static org.mockito.ArgumentMatchers.eq; +import static org.mockito.Mockito.mock; +import static org.mockito.Mockito.when; +import static org.springframework.test.web.servlet.request.MockMvcRequestBuilders.delete; +import static org.springframework.test.web.servlet.request.MockMvcRequestBuilders.get; +import static org.springframework.test.web.servlet.request.MockMvcRequestBuilders.multipart; +import static org.springframework.test.web.servlet.request.MockMvcRequestBuilders.patch; +import static org.springframework.test.web.servlet.request.MockMvcRequestBuilders.post; +import static org.springframework.test.web.servlet.request.MockMvcRequestBuilders.put; +import static org.springframework.test.web.servlet.result.MockMvcResultMatchers.status; + +@ExtendWith(RestDocumentationExtension.class) +class SellerProfileDocumentationTest extends DocumentationTestSupport { + + private SellerProfileService sellerProfileService; + + @BeforeEach + void setUp(RestDocumentationContextProvider restDocumentation) { + sellerProfileService = mock(SellerProfileService.class); + configure(restDocumentation, new SellerProfileController(sellerProfileService)); + } + + @Test + void create() throws Exception { + when(sellerProfileService.create(eq(1L), any())).thenReturn(response()); + mockMvc.perform(authenticated(post("/seller-profiles") + .contentType(MediaType.APPLICATION_JSON) + .content("{\"description\":\"소개\",\"instagramUrl\":\"https://instagram.com/seller\",\"youtubeUrl\":\"https://youtube.com/@seller\"}"))) + .andExpect(status().isCreated()) + .andDo(document("seller-profiles-create", resource(builder() + .tag("Seller Profiles").summary("판매자 프로필 생성").description("로그인한 판매자의 프로필을 생성합니다.") + .requestFields( + fieldWithPath("description").optional().description("판매자 소개"), + fieldWithPath("instagramUrl").optional().description("인스타그램 URL"), + fieldWithPath("youtubeUrl").optional().description("유튜브 URL") + ).responseFields(profileFields()).build()))); + } + + @Test + void getMine() throws Exception { + when(sellerProfileService.getMine(1L)).thenReturn(response()); + mockMvc.perform(authenticated(get("/seller-profiles/me"))) + .andExpect(status().isOk()) + .andDo(document("seller-profiles-get-me", resource(builder() + .tag("Seller Profiles").summary("내 판매자 프로필 조회").responseSchema(new Schema("SellerProfile")).responseFields(profileFields()).build()))); + } + + @Test + void getById() throws Exception { + when(sellerProfileService.getById(10L)).thenReturn(response()); + mockMvc.perform(get("/seller-profiles/{sellerProfileId}", 10L)) + .andExpect(status().isOk()) + .andDo(document("seller-profiles-get", resource(builder() + .tag("Seller Profiles").summary("판매자 프로필 조회").responseFields(profileFields()).build()))); + } + + @Test + void update() throws Exception { + when(sellerProfileService.update(eq(1L), any())).thenReturn(response()); + mockMvc.perform(authenticated(patch("/seller-profiles/me") + .contentType(MediaType.APPLICATION_JSON) + .content("{\"description\":\"수정된 소개\",\"instagramUrl\":\"https://instagram.com/new\",\"youtubeUrl\":\"https://youtube.com/@new\"}"))) + .andExpect(status().isOk()) + .andDo(document("seller-profiles-update", resource(builder() + .tag("Seller Profiles").summary("판매자 프로필 수정") + .requestFields( + fieldWithPath("description").optional().description("판매자 소개"), + fieldWithPath("instagramUrl").optional().description("인스타그램 URL"), + fieldWithPath("youtubeUrl").optional().description("유튜브 URL") + ).responseFields(profileFields()).build()))); + } + + @Test + void uploadImage() throws Exception { + when(sellerProfileService.uploadImage(eq(1L), any())).thenReturn(response()); + MockMultipartFile file = new MockMultipartFile("file", "profile.jpg", "image/jpeg", "image".getBytes()); + mockMvc.perform(multipart("/seller-profiles/me/image").file(file).with(bearerToken()).with(request -> { + request.setMethod("PUT"); + return request; + })) + .andExpect(status().isOk()) + .andDo(document("seller-profiles-upload-image", resource(builder() + .tag("Seller Profiles").summary("판매자 프로필 이미지 업로드").description("프로필 이미지를 업로드합니다.").responseFields(profileFields()).build()))); + } + + @Test + void deleteProfile() throws Exception { + mockMvc.perform(authenticated(delete("/seller-profiles/me"))) + .andExpect(status().isNoContent()) + .andDo(document("seller-profiles-delete", resource(builder() + .tag("Seller Profiles").summary("판매자 프로필 삭제").build()))); + } + + private SellerProfileResponse response() { + User seller = new User("seller@example.com", "encoded-password", "seller", UserRole.SELLER); + ReflectionTestUtils.setField(seller, "id", 1L); + SellerProfile profile = new SellerProfile(seller, "소개", null, "https://instagram.com/seller", "https://youtube.com/@seller"); + ReflectionTestUtils.setField(profile, "id", 10L); + return SellerProfileResponse.from(profile, "https://cdn.example.com/profile.jpg"); + } + + private org.springframework.restdocs.payload.FieldDescriptor[] profileFields() { + return new org.springframework.restdocs.payload.FieldDescriptor[]{ + fieldWithPath("id").type(NUMBER).description("판매자 프로필 ID"), + fieldWithPath("userId").type(NUMBER).description("사용자 ID"), + fieldWithPath("description").type(STRING).optional().description("판매자 소개"), + fieldWithPath("imageUrl").type(STRING).optional().description("프로필 이미지 URL"), + fieldWithPath("instagramUrl").type(STRING).optional().description("인스타그램 URL"), + fieldWithPath("youtubeUrl").type(STRING).optional().description("유튜브 URL") + }; + } +} diff --git a/src/test/java/com/dropit/user/controller/UserDocumentationTest.java b/src/test/java/com/dropit/user/controller/UserDocumentationTest.java new file mode 100644 index 0000000..d545210 --- /dev/null +++ b/src/test/java/com/dropit/user/controller/UserDocumentationTest.java @@ -0,0 +1,108 @@ +package com.dropit.user.controller; + +import com.dropit.documentation.DocumentationTestSupport; +import com.dropit.user.entity.User; +import com.dropit.user.entity.UserRole; +import com.dropit.user.service.UserService; +import org.junit.jupiter.api.BeforeEach; +import org.junit.jupiter.api.Test; +import org.junit.jupiter.api.extension.ExtendWith; +import org.springframework.http.MediaType; +import org.springframework.restdocs.RestDocumentationContextProvider; +import org.springframework.restdocs.RestDocumentationExtension; +import org.springframework.test.util.ReflectionTestUtils; + +import static com.epages.restdocs.apispec.MockMvcRestDocumentationWrapper.document; +import static com.epages.restdocs.apispec.ResourceDocumentation.resource; +import static com.epages.restdocs.apispec.ResourceSnippetParameters.builder; +import static org.springframework.restdocs.payload.JsonFieldType.NUMBER; +import static org.springframework.restdocs.payload.JsonFieldType.STRING; +import static org.springframework.restdocs.payload.PayloadDocumentation.fieldWithPath; +import static org.mockito.ArgumentMatchers.any; +import static org.mockito.Mockito.mock; +import static org.mockito.Mockito.when; +import static org.springframework.test.web.servlet.request.MockMvcRequestBuilders.delete; +import static org.springframework.test.web.servlet.request.MockMvcRequestBuilders.get; +import static org.springframework.test.web.servlet.request.MockMvcRequestBuilders.patch; +import static org.springframework.test.web.servlet.result.MockMvcResultMatchers.status; + +@ExtendWith(RestDocumentationExtension.class) +class UserDocumentationTest extends DocumentationTestSupport { + + private UserService userService; + + @BeforeEach + void setUp(RestDocumentationContextProvider restDocumentation) { + userService = mock(UserService.class); + configure(restDocumentation, new UserController(userService)); + } + + @Test + void getMyInfo() throws Exception { + when(userService.findUser(1L)).thenReturn(user()); + mockMvc.perform(authenticated(get("/users/me"))) + .andExpect(status().isOk()) + .andDo(document("users-get-me", resource(builder() + .tag("Users").summary("내 정보 조회").description("현재 로그인한 사용자의 정보를 조회합니다.") + .build()))); + } + + @Test + void updateMyProfile() throws Exception { + when(userService.updateProfile(org.mockito.ArgumentMatchers.eq(1L), any())).thenReturn(user()); + mockMvc.perform(authenticated(patch("/users/me") + .contentType(MediaType.APPLICATION_JSON) + .content("{\"email\":\"new@example.com\",\"username\":\"new-user\"}"))) + .andExpect(status().isOk()) + .andDo(document("users-update-me", resource(builder() + .tag("Users").summary("내 정보 수정").description("현재 로그인한 사용자의 이메일과 이름을 수정합니다.") + .requestFields( + fieldWithPath("email").optional().description("변경할 이메일 주소"), + fieldWithPath("username").optional().description("변경할 사용자 이름") + ) + .responseFields( + fieldWithPath("id").type(NUMBER).description("사용자 ID"), + fieldWithPath("email").type(STRING).description("이메일 주소"), + fieldWithPath("username").type(STRING).description("사용자 이름"), + fieldWithPath("role").type(STRING).description("사용자 역할"), + fieldWithPath("createdAt").type(STRING).optional().description("가입 시각"), + fieldWithPath("updatedAt").type(STRING).optional().description("수정 시각") + ).build()))); + } + + @Test + void updateMyPassword() throws Exception { + mockMvc.perform(authenticated(patch("/users/me/password") + .contentType(MediaType.APPLICATION_JSON) + .content("{\"currentPassword\":\"old-password\",\"newPassword\":\"new-password\"}"))) + .andExpect(status().isNoContent()) + .andDo(document("users-update-password", resource(builder() + .tag("Users").summary("비밀번호 변경").description("현재 비밀번호를 확인하고 새 비밀번호로 변경합니다.") + .requestFields( + fieldWithPath("currentPassword").description("현재 비밀번호"), + fieldWithPath("newPassword").description("새 비밀번호 (8자 이상)") + ).build()))); + } + + @Test + void deleteMyAccount() throws Exception { + mockMvc.perform(authenticated(delete("/users/me"))) + .andExpect(status().isNoContent()) + .andDo(document("users-delete-me", resource(builder() + .tag("Users").summary("내 계정 삭제").description("현재 로그인한 사용자의 계정을 삭제합니다.").build()))); + } + + @Test + void deleteUserByAdmin() throws Exception { + mockMvc.perform(authenticated(delete("/users/{userId}", 2L))) + .andExpect(status().isNoContent()) + .andDo(document("users-delete-by-admin", resource(builder() + .tag("Users").summary("사용자 삭제").description("관리자가 지정한 사용자를 삭제합니다.").build()))); + } + + private User user() { + User user = new User("user@example.com", "encoded-password", "user", UserRole.USER); + ReflectionTestUtils.setField(user, "id", 1L); + return user; + } +} diff --git a/src/test/java/com/dropit/wishlist/controller/WishlistDocumentationTest.java b/src/test/java/com/dropit/wishlist/controller/WishlistDocumentationTest.java new file mode 100644 index 0000000..659263f --- /dev/null +++ b/src/test/java/com/dropit/wishlist/controller/WishlistDocumentationTest.java @@ -0,0 +1,98 @@ +package com.dropit.wishlist.controller; + +import com.dropit.documentation.DocumentationTestSupport; +import com.dropit.product.entity.Product; +import com.dropit.user.entity.User; +import com.dropit.user.entity.UserRole; +import com.dropit.wishlist.dto.response.WishlistResponse; +import com.dropit.wishlist.entity.Wishlist; +import com.dropit.wishlist.service.WishlistService; +import org.junit.jupiter.api.BeforeEach; +import org.junit.jupiter.api.Test; +import org.junit.jupiter.api.extension.ExtendWith; +import org.springframework.restdocs.RestDocumentationContextProvider; +import org.springframework.restdocs.RestDocumentationExtension; +import org.springframework.test.util.ReflectionTestUtils; + +import java.util.List; + +import static com.epages.restdocs.apispec.MockMvcRestDocumentationWrapper.document; +import static com.epages.restdocs.apispec.ResourceDocumentation.resource; +import static com.epages.restdocs.apispec.ResourceSnippetParameters.builder; +import static org.springframework.restdocs.payload.JsonFieldType.ARRAY; +import static org.springframework.restdocs.payload.JsonFieldType.NUMBER; +import static org.springframework.restdocs.payload.JsonFieldType.STRING; +import static org.springframework.restdocs.payload.PayloadDocumentation.fieldWithPath; +import static org.mockito.ArgumentMatchers.eq; +import static org.mockito.Mockito.mock; +import static org.mockito.Mockito.when; +import static org.springframework.test.web.servlet.request.MockMvcRequestBuilders.delete; +import static org.springframework.test.web.servlet.request.MockMvcRequestBuilders.get; +import static org.springframework.test.web.servlet.request.MockMvcRequestBuilders.post; +import static org.springframework.test.web.servlet.result.MockMvcResultMatchers.status; + +@ExtendWith(RestDocumentationExtension.class) +class WishlistDocumentationTest extends DocumentationTestSupport { + + private WishlistService wishlistService; + + @BeforeEach + void setUp(RestDocumentationContextProvider restDocumentation) { + wishlistService = mock(WishlistService.class); + configure(restDocumentation, new WishlistController(wishlistService)); + } + + @Test + void add() throws Exception { + when(wishlistService.add(1L, 10L)).thenReturn(response()); + mockMvc.perform(authenticated(post("/wishlists/{productId}", 10L))) + .andExpect(status().isOk()) + .andDo(document("wishlists-add", resource(builder() + .tag("Wishlists").summary("상품 찜하기").responseFields(wishlistFields()).build()))); + } + + @Test + void getMine() throws Exception { + when(wishlistService.getMine(1L)).thenReturn(List.of(response())); + mockMvc.perform(authenticated(get("/wishlists/me"))) + .andExpect(status().isOk()) + .andDo(document("wishlists-get-me", resource(builder() + .tag("Wishlists").summary("내 찜 목록 조회") + .responseFields( + fieldWithPath("[]").type(ARRAY).description("찜 목록"), + fieldWithPath("[].id").type(NUMBER).description("찜 ID"), + fieldWithPath("[].productId").type(NUMBER).description("상품 ID"), + fieldWithPath("[].productName").type(STRING).description("상품명"), + fieldWithPath("[].productImageUrl").type(STRING).optional().description("상품 이미지 URL"), + fieldWithPath("[].createdAt").type(STRING).optional().description("찜 생성 시각") + ).build()))); + } + + @Test + void deleteWishlist() throws Exception { + mockMvc.perform(authenticated(delete("/wishlists/{productId}", 10L))) + .andExpect(status().isNoContent()) + .andDo(document("wishlists-delete", resource(builder() + .tag("Wishlists").summary("상품 찜 삭제").build()))); + } + + private WishlistResponse response() { + User user = new User("user@example.com", "encoded-password", "user", UserRole.USER); + ReflectionTestUtils.setField(user, "id", 1L); + Product product = new Product(user, "Limited Hoodie", "Limited edition hoodie", "products/10/image.jpg"); + ReflectionTestUtils.setField(product, "id", 10L); + Wishlist wishlist = new Wishlist(user, product); + ReflectionTestUtils.setField(wishlist, "id", 100L); + return new WishlistResponse(wishlist); + } + + private org.springframework.restdocs.payload.FieldDescriptor[] wishlistFields() { + return new org.springframework.restdocs.payload.FieldDescriptor[]{ + fieldWithPath("id").type(NUMBER).description("찜 ID"), + fieldWithPath("productId").type(NUMBER).description("상품 ID"), + fieldWithPath("productName").type(STRING).description("상품명"), + fieldWithPath("productImageUrl").type(STRING).optional().description("상품 이미지 URL"), + fieldWithPath("createdAt").type(STRING).optional().description("찜 생성 시각") + }; + } +} From faefd7a8460efbc84a6205a20813a502038d2c5b Mon Sep 17 00:00:00 2001 From: Sooyoung Yoon Date: Thu, 10 Sep 2026 17:20:34 +0900 Subject: [PATCH 25/98] =?UTF-8?q?test(docs):=20DocumentTest=EC=97=90=20aut?= =?UTF-8?q?horization=20Header=20=EB=B3=B4=EC=99=84?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../DocumentationTestSupport.java | 5 +++ .../controller/DropDocumentationTest.java | 36 +++++++++++++------ .../NotificationDocumentationTest.java | 4 +-- .../controller/OrderDocumentationTest.java | 8 ++--- .../controller/ProductDocumentationTest.java | 35 ++++++++++++------ .../SellerProfileDocumentationTest.java | 21 ++++++----- .../controller/UserDocumentationTest.java | 10 +++--- .../controller/WishlistDocumentationTest.java | 6 ++-- 8 files changed, 81 insertions(+), 44 deletions(-) diff --git a/src/test/java/com/dropit/documentation/DocumentationTestSupport.java b/src/test/java/com/dropit/documentation/DocumentationTestSupport.java index 728f5f1..13fbd3a 100644 --- a/src/test/java/com/dropit/documentation/DocumentationTestSupport.java +++ b/src/test/java/com/dropit/documentation/DocumentationTestSupport.java @@ -18,6 +18,7 @@ import java.util.List; import static org.springframework.restdocs.mockmvc.MockMvcRestDocumentation.documentationConfiguration; +import static org.springframework.restdocs.headers.HeaderDocumentation.headerWithName; /** Common MockMvc wiring for isolated REST Docs contract tests. */ public abstract class DocumentationTestSupport { @@ -59,6 +60,10 @@ protected RequestPostProcessor bearerToken() { }; } + protected org.springframework.restdocs.headers.HeaderDescriptor authorizationHeader() { + return headerWithName("Authorization").description("Bearer access token"); + } + protected MockHttpServletRequestBuilder authenticated(MockHttpServletRequestBuilder request) { return request.with(bearerToken()); } diff --git a/src/test/java/com/dropit/drop/controller/DropDocumentationTest.java b/src/test/java/com/dropit/drop/controller/DropDocumentationTest.java index d4e0082..8634719 100644 --- a/src/test/java/com/dropit/drop/controller/DropDocumentationTest.java +++ b/src/test/java/com/dropit/drop/controller/DropDocumentationTest.java @@ -29,6 +29,7 @@ import static org.springframework.restdocs.payload.JsonFieldType.STRING; import static org.springframework.restdocs.payload.JsonFieldType.BOOLEAN; import static org.springframework.restdocs.payload.PayloadDocumentation.fieldWithPath; +import static org.springframework.restdocs.request.RequestDocumentation.parameterWithName; import static org.mockito.ArgumentMatchers.any; import static org.mockito.ArgumentMatchers.eq; import static org.mockito.Mockito.mock; @@ -57,7 +58,7 @@ void create() throws Exception { .content("{\"productId\":10,\"price\":59000,\"initialQuantity\":100,\"discountRate\":20,\"purchaseLimit\":2,\"openAt\":\"2030-01-01T10:00:00\",\"closeAt\":\"2030-01-02T10:00:00\"}"))) .andExpect(status().isCreated()) .andDo(document("drops-create", resource(builder() - .tag("Drops").summary("드랍 생성") + .tag("Drops").summary("드랍 생성").requestHeaders(authorizationHeader()) .requestFields( fieldWithPath("productId").type(NUMBER).description("상품 ID"), fieldWithPath("price").type(NUMBER).description("판매 가격"), @@ -72,28 +73,39 @@ void create() throws Exception { @Test void getAll() throws Exception { when(dropService.getAll(any(), any())).thenReturn(new PageImpl<>(List.of(dropResponse()), PageRequest.of(0, 20), 1)); - mockMvc.perform(get("/drops").param("keyword", "hoodie").param("status", "OPEN").param("page", "0").param("size", "20")) + mockMvc.perform(authenticated(get("/drops").param("keyword", "hoodie").param("status", "OPEN").param("page", "0").param("size", "20"))) .andExpect(status().isOk()) .andDo(document("drops-get-all", resource(builder() - .tag("Drops").summary("드랍 목록 조회").description("검색 조건과 페이징 조건으로 드랍을 조회합니다.").build()))); + .tag("Drops").summary("드랍 목록 조회").description("검색 조건과 페이징 조건으로 드랍을 조회합니다.") + .requestHeaders(authorizationHeader()) + .queryParameters( + parameterWithName("keyword").optional().description("상품명 검색어"), + parameterWithName("status").optional().description("드랍 상태"), + parameterWithName("sortType").optional().description("정렬 기준"), + parameterWithName("page").description("페이지 번호"), + parameterWithName("size").description("페이지 크기"), + parameterWithName("sort").optional().description("정렬 조건") + ).build()))); } @Test void getOne() throws Exception { when(dropService.getOne(100L)).thenReturn(dropResponse()); - mockMvc.perform(get("/drops/{dropId}", 100L)) + mockMvc.perform(authenticated(get("/drops/{dropId}", 100L))) .andExpect(status().isOk()) .andDo(document("drops-get", resource(builder() - .tag("Drops").summary("드랍 단건 조회").responseFields(dropFields()).build()))); + .tag("Drops").summary("드랍 단건 조회").requestHeaders(authorizationHeader()).responseFields(dropFields()).build()))); } @Test void getPublicDropsBySeller() throws Exception { when(dropService.getPublicDropsBySeller(eq(1L), any())).thenReturn(new PageImpl<>(List.of(dropResponse()), PageRequest.of(0, 20), 1)); - mockMvc.perform(get("/creators/{sellerId}/drops", 1L).param("page", "0").param("size", "20")) + mockMvc.perform(authenticated(get("/creators/{sellerId}/drops", 1L).param("page", "0").param("size", "20"))) .andExpect(status().isOk()) .andDo(document("drops-get-by-creator", resource(builder() - .tag("Drops").summary("판매자 공개 드랍 목록 조회").build()))); + .tag("Drops").summary("판매자 공개 드랍 목록 조회").requestHeaders(authorizationHeader()) + .queryParameters(parameterWithName("page").description("페이지 번호"), parameterWithName("size").description("페이지 크기"), parameterWithName("sort").optional().description("정렬 조건")) + .build()))); } @Test @@ -102,7 +114,9 @@ void getDropsForSellerManagement() throws Exception { mockMvc.perform(authenticated(get("/users/me/drops")).param("page", "0").param("size", "20")) .andExpect(status().isOk()) .andDo(document("drops-get-my-drops", resource(builder() - .tag("Drops").summary("내 드랍 목록 조회").build()))); + .tag("Drops").summary("내 드랍 목록 조회").requestHeaders(authorizationHeader()) + .queryParameters(parameterWithName("page").description("페이지 번호"), parameterWithName("size").description("페이지 크기"), parameterWithName("sort").optional().description("정렬 조건")) + .build()))); } @Test @@ -112,7 +126,7 @@ void update() throws Exception { .content("{\"price\":60000,\"initialQuantity\":120,\"discountRate\":10,\"purchaseLimit\":3,\"openAt\":\"2030-01-01T10:00:00\",\"closeAt\":\"2030-01-02T10:00:00\"}"))) .andExpect(status().isOk()) .andDo(document("drops-update", resource(builder() - .tag("Drops").summary("드랍 수정") + .tag("Drops").summary("드랍 수정").requestHeaders(authorizationHeader()) .requestFields( fieldWithPath("price").optional().type(NUMBER).description("판매 가격"), fieldWithPath("initialQuantity").optional().type(NUMBER).description("초기 수량"), @@ -130,7 +144,7 @@ void changeVisibility() throws Exception { .content("{\"visible\":true}"))) .andExpect(status().isOk()) .andDo(document("drops-change-visibility", resource(builder() - .tag("Drops").summary("드랍 공개 여부 변경") + .tag("Drops").summary("드랍 공개 여부 변경").requestHeaders(authorizationHeader()) .requestFields(fieldWithPath("visible").type(BOOLEAN).description("공개 여부")) .responseFields(dropFields()).build()))); } @@ -140,7 +154,7 @@ void deleteDrop() throws Exception { mockMvc.perform(authenticated(delete("/drops/{dropId}", 100L))) .andExpect(status().isNoContent()) .andDo(document("drops-delete", resource(builder() - .tag("Drops").summary("드랍 삭제").build()))); + .tag("Drops").summary("드랍 삭제").requestHeaders(authorizationHeader()).build()))); } private DropResponse dropResponse() { diff --git a/src/test/java/com/dropit/notification/controller/NotificationDocumentationTest.java b/src/test/java/com/dropit/notification/controller/NotificationDocumentationTest.java index 33e208b..3601385 100644 --- a/src/test/java/com/dropit/notification/controller/NotificationDocumentationTest.java +++ b/src/test/java/com/dropit/notification/controller/NotificationDocumentationTest.java @@ -46,7 +46,7 @@ void getMine() throws Exception { mockMvc.perform(authenticated(get("/notifications/me"))) .andExpect(status().isOk()) .andDo(document("notifications-get-me", resource(builder() - .tag("Notifications").summary("내 알림 목록 조회") + .tag("Notifications").summary("내 알림 목록 조회").requestHeaders(authorizationHeader()) .responseFields( fieldWithPath("[]").type(ARRAY).description("알림 목록"), fieldWithPath("[].id").type(NUMBER).description("알림 ID"), @@ -63,7 +63,7 @@ void markAsRead() throws Exception { mockMvc.perform(authenticated(patch("/notifications/{notificationId}/read", 100L))) .andExpect(status().isOk()) .andDo(document("notifications-mark-read", resource(builder() - .tag("Notifications").summary("알림 읽음 처리") + .tag("Notifications").summary("알림 읽음 처리").requestHeaders(authorizationHeader()) .responseFields( fieldWithPath("id").type(NUMBER).description("알림 ID"), fieldWithPath("title").type(STRING).description("알림 제목"), diff --git a/src/test/java/com/dropit/order/controller/OrderDocumentationTest.java b/src/test/java/com/dropit/order/controller/OrderDocumentationTest.java index a1b31c9..d48dded 100644 --- a/src/test/java/com/dropit/order/controller/OrderDocumentationTest.java +++ b/src/test/java/com/dropit/order/controller/OrderDocumentationTest.java @@ -50,7 +50,7 @@ void create() throws Exception { .content("{\"items\":[{\"dropId\":100,\"quantity\":2}]}"))) .andExpect(status().isCreated()) .andDo(document("orders-create", resource(builder() - .tag("Orders").summary("주문 생성").description("한 개의 드랍을 대상으로 주문을 생성합니다.") + .tag("Orders").summary("주문 생성").description("한 개의 드랍을 대상으로 주문을 생성합니다.").requestHeaders(authorizationHeader()) .requestFields( fieldWithPath("items").type(ARRAY).description("주문 항목 목록 (현재 한 항목만 허용)"), fieldWithPath("items[].dropId").type(NUMBER).description("주문할 드랍 ID"), @@ -64,7 +64,7 @@ void getMyOrders() throws Exception { mockMvc.perform(authenticated(get("/orders/me"))) .andExpect(status().isOk()) .andDo(document("orders-get-me", resource(builder() - .tag("Orders").summary("내 주문 목록 조회") + .tag("Orders").summary("내 주문 목록 조회").requestHeaders(authorizationHeader()) .responseFields( fieldWithPath("[]").type(ARRAY).description("주문 요약 목록"), fieldWithPath("[].id").type(NUMBER).description("주문 ID"), @@ -80,7 +80,7 @@ void getMyOrder() throws Exception { mockMvc.perform(authenticated(get("/orders/{orderId}", 1000L))) .andExpect(status().isOk()) .andDo(document("orders-get", resource(builder() - .tag("Orders").summary("내 주문 상세 조회").responseFields(orderFields()).build()))); + .tag("Orders").summary("내 주문 상세 조회").requestHeaders(authorizationHeader()).responseFields(orderFields()).build()))); } @Test @@ -88,7 +88,7 @@ void cancel() throws Exception { mockMvc.perform(authenticated(post("/orders/{orderId}/cancel", 1000L))) .andExpect(status().isNoContent()) .andDo(document("orders-cancel", resource(builder() - .tag("Orders").summary("주문 취소").description("현재 사용자의 주문을 취소합니다.").build()))); + .tag("Orders").summary("주문 취소").description("현재 사용자의 주문을 취소합니다.").requestHeaders(authorizationHeader()).build()))); } private OrderResponse orderResponse() { diff --git a/src/test/java/com/dropit/product/controller/ProductDocumentationTest.java b/src/test/java/com/dropit/product/controller/ProductDocumentationTest.java index e63bc4f..573bbe1 100644 --- a/src/test/java/com/dropit/product/controller/ProductDocumentationTest.java +++ b/src/test/java/com/dropit/product/controller/ProductDocumentationTest.java @@ -1,6 +1,7 @@ package com.dropit.product.controller; import com.dropit.documentation.DocumentationTestSupport; +import com.epages.restdocs.apispec.Schema; import com.dropit.product.dto.response.ProductResponse; import com.dropit.product.entity.Product; import com.dropit.product.service.ProductService; @@ -26,6 +27,9 @@ import static org.springframework.restdocs.payload.JsonFieldType.NUMBER; import static org.springframework.restdocs.payload.JsonFieldType.STRING; import static org.springframework.restdocs.payload.PayloadDocumentation.fieldWithPath; +import static org.springframework.restdocs.request.RequestDocumentation.parameterWithName; +import static org.springframework.restdocs.request.RequestDocumentation.partWithName; +import static org.springframework.restdocs.request.RequestDocumentation.requestParts; import static org.mockito.ArgumentMatchers.any; import static org.mockito.ArgumentMatchers.eq; import static org.mockito.Mockito.mock; @@ -55,7 +59,7 @@ void create() throws Exception { .content("{\"name\":\"Limited Hoodie\",\"description\":\"Limited edition hoodie\"}"))) .andExpect(status().isCreated()) .andDo(document("products-create", resource(builder() - .tag("Products").summary("상품 생성") + .tag("Products").summary("상품 생성").requestHeaders(authorizationHeader()) .requestFields(fieldWithPath("name").description("상품명"), fieldWithPath("description").optional().description("상품 설명")) .build()))); } @@ -63,28 +67,34 @@ void create() throws Exception { @Test void getProduct() throws Exception { when(productService.getProduct(100L)).thenReturn(productResponse()); - mockMvc.perform(get("/products/{productId}", 100L)) + mockMvc.perform(authenticated(get("/products/{productId}", 100L))) .andExpect(status().isOk()) .andDo(document("products-get", resource(builder() - .tag("Products").summary("상품 단건 조회").responseFields(productFields()).build()))); + .tag("Products").summary("상품 단건 조회").requestHeaders(authorizationHeader()) + .responseFields(productFields()).build()))); } @Test void getProducts() throws Exception { when(productService.getProducts(any())).thenReturn(new PageImpl<>(List.of(productResponse()), PageRequest.of(0, 20), 1)); - mockMvc.perform(get("/products").param("page", "0").param("size", "20")) + mockMvc.perform(authenticated(get("/products").param("page", "0").param("size", "20"))) .andExpect(status().isOk()) .andDo(document("products-get-all", resource(builder() - .tag("Products").summary("상품 목록 조회").description("상품 목록을 페이징하여 조회합니다.").responseFields(pageFields()).build()))); + .tag("Products").summary("상품 목록 조회").description("상품 목록을 페이징하여 조회합니다.") + .requestHeaders(authorizationHeader()) + .queryParameters(parameterWithName("page").description("페이지 번호"), parameterWithName("size").description("페이지 크기"), parameterWithName("sort").optional().description("정렬 조건")) + .responseFields(pageFields()).build()))); } @Test void getProductsBySeller() throws Exception { when(productService.getProductsBySeller(eq(1L), any())).thenReturn(new PageImpl<>(List.of(productResponse()), PageRequest.of(0, 20), 1)); - mockMvc.perform(get("/sellers/{sellerId}/products", 1L).param("page", "0").param("size", "20")) + mockMvc.perform(authenticated(get("/sellers/{sellerId}/products", 1L).param("page", "0").param("size", "20"))) .andExpect(status().isOk()) .andDo(document("products-get-by-seller", resource(builder() - .tag("Products").summary("판매자 상품 목록 조회").responseFields(pageFields()).build()))); + .tag("Products").summary("판매자 상품 목록 조회").requestHeaders(authorizationHeader()) + .queryParameters(parameterWithName("page").description("페이지 번호"), parameterWithName("size").description("페이지 크기"), parameterWithName("sort").optional().description("정렬 조건")) + .responseFields(pageFields()).build()))); } @Test @@ -94,7 +104,7 @@ void update() throws Exception { .content("{\"name\":\"Updated Hoodie\",\"description\":\"Updated description\"}"))) .andExpect(status().isOk()) .andDo(document("products-update", resource(builder() - .tag("Products").summary("상품 수정") + .tag("Products").summary("상품 수정").requestHeaders(authorizationHeader()) .requestFields(fieldWithPath("name").description("상품명"), fieldWithPath("description").optional().description("상품 설명")) .responseFields(productFields()).build()))); } @@ -104,20 +114,23 @@ void deleteProduct() throws Exception { mockMvc.perform(authenticated(delete("/products/{productId}", 100L))) .andExpect(status().isNoContent()) .andDo(document("products-delete", resource(builder() - .tag("Products").summary("상품 삭제").build()))); + .tag("Products").summary("상품 삭제").requestHeaders(authorizationHeader()).build()))); } @Test void uploadImage() throws Exception { when(productService.uploadImage(eq(1L), eq(100L), any())).thenReturn(productResponse()); MockMultipartFile file = new MockMultipartFile("file", "product.jpg", "image/jpeg", "image".getBytes()); - mockMvc.perform(multipart("/products/{productId}/image", 100L).file(file).with(bearerToken()).with(request -> { + mockMvc.perform(multipart("/products/{productId}/image", 100L).file(file).content(" ").with(bearerToken()).with(request -> { request.setMethod("PUT"); return request; })) .andExpect(status().isOk()) .andDo(document("products-upload-image", resource(builder() - .tag("Products").summary("상품 이미지 업로드").responseFields(productFields()).build()))); + .tag("Products").summary("상품 이미지 업로드").requestHeaders(authorizationHeader()) + .requestSchema(new Schema("MultipartImage")) + .responseFields(productFields()).build()), + requestParts(partWithName("file").description("업로드할 이미지 파일")))); } private ProductResponse productResponse() { diff --git a/src/test/java/com/dropit/sellerprofile/controller/SellerProfileDocumentationTest.java b/src/test/java/com/dropit/sellerprofile/controller/SellerProfileDocumentationTest.java index fc9a27b..fc6595a 100644 --- a/src/test/java/com/dropit/sellerprofile/controller/SellerProfileDocumentationTest.java +++ b/src/test/java/com/dropit/sellerprofile/controller/SellerProfileDocumentationTest.java @@ -23,6 +23,8 @@ import static org.springframework.restdocs.payload.JsonFieldType.NUMBER; import static org.springframework.restdocs.payload.JsonFieldType.STRING; import static org.springframework.restdocs.payload.PayloadDocumentation.fieldWithPath; +import static org.springframework.restdocs.request.RequestDocumentation.partWithName; +import static org.springframework.restdocs.request.RequestDocumentation.requestParts; import static org.mockito.ArgumentMatchers.any; import static org.mockito.ArgumentMatchers.eq; import static org.mockito.Mockito.mock; @@ -54,7 +56,7 @@ void create() throws Exception { .content("{\"description\":\"소개\",\"instagramUrl\":\"https://instagram.com/seller\",\"youtubeUrl\":\"https://youtube.com/@seller\"}"))) .andExpect(status().isCreated()) .andDo(document("seller-profiles-create", resource(builder() - .tag("Seller Profiles").summary("판매자 프로필 생성").description("로그인한 판매자의 프로필을 생성합니다.") + .tag("Seller Profiles").summary("판매자 프로필 생성").description("로그인한 판매자의 프로필을 생성합니다.").requestHeaders(authorizationHeader()) .requestFields( fieldWithPath("description").optional().description("판매자 소개"), fieldWithPath("instagramUrl").optional().description("인스타그램 URL"), @@ -68,16 +70,16 @@ void getMine() throws Exception { mockMvc.perform(authenticated(get("/seller-profiles/me"))) .andExpect(status().isOk()) .andDo(document("seller-profiles-get-me", resource(builder() - .tag("Seller Profiles").summary("내 판매자 프로필 조회").responseSchema(new Schema("SellerProfile")).responseFields(profileFields()).build()))); + .tag("Seller Profiles").summary("내 판매자 프로필 조회").requestHeaders(authorizationHeader()).responseSchema(new Schema("SellerProfile")).responseFields(profileFields()).build()))); } @Test void getById() throws Exception { when(sellerProfileService.getById(10L)).thenReturn(response()); - mockMvc.perform(get("/seller-profiles/{sellerProfileId}", 10L)) + mockMvc.perform(authenticated(get("/seller-profiles/{sellerProfileId}", 10L))) .andExpect(status().isOk()) .andDo(document("seller-profiles-get", resource(builder() - .tag("Seller Profiles").summary("판매자 프로필 조회").responseFields(profileFields()).build()))); + .tag("Seller Profiles").summary("판매자 프로필 조회").requestHeaders(authorizationHeader()).responseFields(profileFields()).build()))); } @Test @@ -88,7 +90,7 @@ void update() throws Exception { .content("{\"description\":\"수정된 소개\",\"instagramUrl\":\"https://instagram.com/new\",\"youtubeUrl\":\"https://youtube.com/@new\"}"))) .andExpect(status().isOk()) .andDo(document("seller-profiles-update", resource(builder() - .tag("Seller Profiles").summary("판매자 프로필 수정") + .tag("Seller Profiles").summary("판매자 프로필 수정").requestHeaders(authorizationHeader()) .requestFields( fieldWithPath("description").optional().description("판매자 소개"), fieldWithPath("instagramUrl").optional().description("인스타그램 URL"), @@ -100,13 +102,16 @@ void update() throws Exception { void uploadImage() throws Exception { when(sellerProfileService.uploadImage(eq(1L), any())).thenReturn(response()); MockMultipartFile file = new MockMultipartFile("file", "profile.jpg", "image/jpeg", "image".getBytes()); - mockMvc.perform(multipart("/seller-profiles/me/image").file(file).with(bearerToken()).with(request -> { + mockMvc.perform(multipart("/seller-profiles/me/image").file(file).content(" ").with(bearerToken()).with(request -> { request.setMethod("PUT"); return request; })) .andExpect(status().isOk()) .andDo(document("seller-profiles-upload-image", resource(builder() - .tag("Seller Profiles").summary("판매자 프로필 이미지 업로드").description("프로필 이미지를 업로드합니다.").responseFields(profileFields()).build()))); + .tag("Seller Profiles").summary("판매자 프로필 이미지 업로드").description("프로필 이미지를 업로드합니다.").requestHeaders(authorizationHeader()) + .requestSchema(new Schema("MultipartImage")) + .responseFields(profileFields()).build()), + requestParts(partWithName("file").description("업로드할 이미지 파일")))); } @Test @@ -114,7 +119,7 @@ void deleteProfile() throws Exception { mockMvc.perform(authenticated(delete("/seller-profiles/me"))) .andExpect(status().isNoContent()) .andDo(document("seller-profiles-delete", resource(builder() - .tag("Seller Profiles").summary("판매자 프로필 삭제").build()))); + .tag("Seller Profiles").summary("판매자 프로필 삭제").requestHeaders(authorizationHeader()).build()))); } private SellerProfileResponse response() { diff --git a/src/test/java/com/dropit/user/controller/UserDocumentationTest.java b/src/test/java/com/dropit/user/controller/UserDocumentationTest.java index d545210..cf2ac51 100644 --- a/src/test/java/com/dropit/user/controller/UserDocumentationTest.java +++ b/src/test/java/com/dropit/user/controller/UserDocumentationTest.java @@ -43,7 +43,7 @@ void getMyInfo() throws Exception { mockMvc.perform(authenticated(get("/users/me"))) .andExpect(status().isOk()) .andDo(document("users-get-me", resource(builder() - .tag("Users").summary("내 정보 조회").description("현재 로그인한 사용자의 정보를 조회합니다.") + .tag("Users").summary("내 정보 조회").description("현재 로그인한 사용자의 정보를 조회합니다.").requestHeaders(authorizationHeader()) .build()))); } @@ -55,7 +55,7 @@ void updateMyProfile() throws Exception { .content("{\"email\":\"new@example.com\",\"username\":\"new-user\"}"))) .andExpect(status().isOk()) .andDo(document("users-update-me", resource(builder() - .tag("Users").summary("내 정보 수정").description("현재 로그인한 사용자의 이메일과 이름을 수정합니다.") + .tag("Users").summary("내 정보 수정").description("현재 로그인한 사용자의 이메일과 이름을 수정합니다.").requestHeaders(authorizationHeader()) .requestFields( fieldWithPath("email").optional().description("변경할 이메일 주소"), fieldWithPath("username").optional().description("변경할 사용자 이름") @@ -77,7 +77,7 @@ void updateMyPassword() throws Exception { .content("{\"currentPassword\":\"old-password\",\"newPassword\":\"new-password\"}"))) .andExpect(status().isNoContent()) .andDo(document("users-update-password", resource(builder() - .tag("Users").summary("비밀번호 변경").description("현재 비밀번호를 확인하고 새 비밀번호로 변경합니다.") + .tag("Users").summary("비밀번호 변경").description("현재 비밀번호를 확인하고 새 비밀번호로 변경합니다.").requestHeaders(authorizationHeader()) .requestFields( fieldWithPath("currentPassword").description("현재 비밀번호"), fieldWithPath("newPassword").description("새 비밀번호 (8자 이상)") @@ -89,7 +89,7 @@ void deleteMyAccount() throws Exception { mockMvc.perform(authenticated(delete("/users/me"))) .andExpect(status().isNoContent()) .andDo(document("users-delete-me", resource(builder() - .tag("Users").summary("내 계정 삭제").description("현재 로그인한 사용자의 계정을 삭제합니다.").build()))); + .tag("Users").summary("내 계정 삭제").description("현재 로그인한 사용자의 계정을 삭제합니다.").requestHeaders(authorizationHeader()).build()))); } @Test @@ -97,7 +97,7 @@ void deleteUserByAdmin() throws Exception { mockMvc.perform(authenticated(delete("/users/{userId}", 2L))) .andExpect(status().isNoContent()) .andDo(document("users-delete-by-admin", resource(builder() - .tag("Users").summary("사용자 삭제").description("관리자가 지정한 사용자를 삭제합니다.").build()))); + .tag("Users").summary("사용자 삭제").description("관리자가 지정한 사용자를 삭제합니다.").requestHeaders(authorizationHeader()).build()))); } private User user() { diff --git a/src/test/java/com/dropit/wishlist/controller/WishlistDocumentationTest.java b/src/test/java/com/dropit/wishlist/controller/WishlistDocumentationTest.java index 659263f..b378533 100644 --- a/src/test/java/com/dropit/wishlist/controller/WishlistDocumentationTest.java +++ b/src/test/java/com/dropit/wishlist/controller/WishlistDocumentationTest.java @@ -48,7 +48,7 @@ void add() throws Exception { mockMvc.perform(authenticated(post("/wishlists/{productId}", 10L))) .andExpect(status().isOk()) .andDo(document("wishlists-add", resource(builder() - .tag("Wishlists").summary("상품 찜하기").responseFields(wishlistFields()).build()))); + .tag("Wishlists").summary("상품 찜하기").requestHeaders(authorizationHeader()).responseFields(wishlistFields()).build()))); } @Test @@ -57,7 +57,7 @@ void getMine() throws Exception { mockMvc.perform(authenticated(get("/wishlists/me"))) .andExpect(status().isOk()) .andDo(document("wishlists-get-me", resource(builder() - .tag("Wishlists").summary("내 찜 목록 조회") + .tag("Wishlists").summary("내 찜 목록 조회").requestHeaders(authorizationHeader()) .responseFields( fieldWithPath("[]").type(ARRAY).description("찜 목록"), fieldWithPath("[].id").type(NUMBER).description("찜 ID"), @@ -73,7 +73,7 @@ void deleteWishlist() throws Exception { mockMvc.perform(authenticated(delete("/wishlists/{productId}", 10L))) .andExpect(status().isNoContent()) .andDo(document("wishlists-delete", resource(builder() - .tag("Wishlists").summary("상품 찜 삭제").build()))); + .tag("Wishlists").summary("상품 찜 삭제").requestHeaders(authorizationHeader()).build()))); } private WishlistResponse response() { From 3288f3308fdcf6449414055942712c352867dabc Mon Sep 17 00:00:00 2001 From: Sooyoung Yoon Date: Thu, 10 Sep 2026 17:29:39 +0900 Subject: [PATCH 26/98] =?UTF-8?q?chore(gradle):=20openAPI=20=EB=AA=85?= =?UTF-8?q?=EC=84=B8=20=EC=83=9D=EC=84=B1=20=ED=83=9C=EC=8A=A4=ED=81=AC=20?= =?UTF-8?q?=EC=B6=94=EA=B0=80?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- build.gradle | 6 ++++++ 1 file changed, 6 insertions(+) diff --git a/build.gradle b/build.gradle index ba18326..148c682 100644 --- a/build.gradle +++ b/build.gradle @@ -124,6 +124,12 @@ tasks.named('bootJar') { dependsOn(copyOpenApiToResources) } +tasks.register('openApiDocs') { + group = 'development' + description = 'OpenAPI 명세를 생성하고 검증한 뒤 정적 리소스로 복사합니다.' + dependsOn(copyOpenApiToResources) +} + tasks.register('dbUp', Exec) { group = 'development' description = '로컬 DB 컨테이너를 실행합니다.' From 342d6cd541f5a73633eb9b75e14712fd3d936581 Mon Sep 17 00:00:00 2001 From: Sooyoung Yoon Date: Thu, 10 Sep 2026 18:14:16 +0900 Subject: [PATCH 27/98] =?UTF-8?q?chore(docs):=20=EC=8A=A4=ED=82=A4?= =?UTF-8?q?=EB=A7=88=20=EC=9D=B4=EB=A6=84=20=EB=AA=85=EC=8B=9C?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- README.md | 6 ++++- build.gradle | 27 +++++++++++++++++++ .../controller/AuthDocumentationTest.java | 8 ++++-- .../controller/DropDocumentationTest.java | 14 +++++++--- .../NotificationDocumentationTest.java | 3 +++ .../controller/OrderDocumentationTest.java | 7 +++-- .../controller/ProductDocumentationTest.java | 7 +++++ .../SellerProfileDocumentationTest.java | 12 +++++---- .../controller/UserDocumentationTest.java | 6 ++++- .../controller/WishlistDocumentationTest.java | 4 ++- 10 files changed, 78 insertions(+), 16 deletions(-) diff --git a/README.md b/README.md index 80bcdd8..9ea9333 100644 --- a/README.md +++ b/README.md @@ -102,9 +102,13 @@ src/main/java/com/dropit ## API 문서 -Spring REST Docs를 사용하고, 서버 실행 시 테스트 스니펫을 OpenAPI 3.0.1 명세로 변환합니다. +Spring REST Docs를 사용하고, 테스트 스니펫을 OpenAPI 3.0.1 명세로 변환합니다. Swagger UI는 이 명세 파일을 읽어 화면에 보여주는 역할만 하므로, 별도의 어노테이션 기반 API 명세가 생기지 않습니다. +`bootRun`과 `bootJar`는 테스트와 OpenAPI 생성 작업을 먼저 실행한 뒤 생성된 YAML을 애플리케이션 정적 리소스에 포함합니다. +명세와 Swagger UI 리소스를 단독으로 준비하려면 `./gradlew openApiDocs`를 실행합니다. +명세만 생성하려면 `./gradlew openapi3`를 실행하며, 결과는 `build/api-spec/openapi3.yaml`에 저장됩니다. (생성물은 빌드 디렉터리에만 남으며 저장소에는 커밋하지 않습니다.) + 브라우저에서 http://localhost:8080/swagger-ui/index.html를 열면 API 문서를 확인할 수 있습니다. 원본 명세는 http://localhost:8080/openapi/openapi3.yaml 경로에서도 직접 확인할 수 있습니다. diff --git a/build.gradle b/build.gradle index 148c682..ff5baee 100644 --- a/build.gradle +++ b/build.gradle @@ -80,6 +80,33 @@ openapi3 { afterEvaluate { tasks.named('openapi3') { dependsOn(tasks.named('test')) + doLast { + File specFile = layout.buildDirectory.file('api-spec/openapi3.yaml').get().asFile + String spec = specFile.getText('UTF-8') + + // restdocs-api-spec models a primitive JSON response as an empty object because + // its field-descriptor schema generator only supports object/array roots. Keep + // the endpoint contract accurate for the two Long response endpoints. + [ + [path: '/drops', method: 'post', status: '201'], + [path: '/products', method: 'post', status: '201'] + ].each { endpoint -> + String pattern = /(?s)( ${endpoint.path}:.*? ${endpoint.method}:.*?responses:\n "${endpoint.status}":.*?application\/json:\n schema:\n) [$]ref: "[^"]+"\n/ + spec = spec.replaceFirst(pattern, '$1 type: integer\n format: int64\n') + } + + // Primitive response correction leaves the generator's orphaned hash schema behind. + // Remove only those generated hash components; domain schema names come from tests. + spec = spec.replaceAll(/(?ms)^ [A-Za-z0-9]+-\d+:\n.*?(?=^ [A-Za-z0-9]+:|^ securitySchemes:)/, '') + + String multipartSchema = /(?s)( MultipartImage:\n)(?: title: MultipartImage\n)? type: object\n/ + spec = spec.replaceFirst( + multipartSchema, + '$1 required:\n - file\n type: object\n properties:\n file:\n type: string\n format: binary\n' + ) + + specFile.setText(spec, 'UTF-8') + } } } diff --git a/src/test/java/com/dropit/auth/controller/AuthDocumentationTest.java b/src/test/java/com/dropit/auth/controller/AuthDocumentationTest.java index 3561f0a..3916164 100644 --- a/src/test/java/com/dropit/auth/controller/AuthDocumentationTest.java +++ b/src/test/java/com/dropit/auth/controller/AuthDocumentationTest.java @@ -3,6 +3,7 @@ import com.dropit.auth.dto.response.TokenResponse; import com.dropit.auth.service.AuthService; import com.dropit.documentation.DocumentationTestSupport; +import com.epages.restdocs.apispec.Schema; import org.junit.jupiter.api.BeforeEach; import org.junit.jupiter.api.Test; import org.junit.jupiter.api.extension.ExtendWith; @@ -42,6 +43,7 @@ void signup() throws Exception { .andExpect(status().isCreated()) .andDo(document("auth-signup", resource(builder() .tag("Auth").summary("회원가입").description("사용자 계정을 생성합니다.") + .requestSchema(new Schema("SignupRequest")) .requestFields( fieldWithPath("email").description("이메일 주소"), fieldWithPath("password").description("8자 이상의 비밀번호"), @@ -59,6 +61,7 @@ void login() throws Exception { .andExpect(status().isOk()) .andDo(document("auth-login", resource(builder() .tag("Auth").summary("로그인").description("이메일과 비밀번호로 로그인합니다.") + .requestSchema(new Schema("LoginRequest")) .requestFields( fieldWithPath("email").description("이메일 주소"), fieldWithPath("password").description("비밀번호") @@ -66,7 +69,7 @@ void login() throws Exception { .responseFields( fieldWithPath("accessToken").type(STRING).description("접근 토큰"), fieldWithPath("refreshToken").type(STRING).description("갱신 토큰") - ).build()))); + ).responseSchema(new Schema("AuthTokenResponse")).build()))); } @Test @@ -78,10 +81,11 @@ void reissue() throws Exception { .andExpect(status().isOk()) .andDo(document("auth-reissue", resource(builder() .tag("Auth").summary("토큰 재발급").description("Refresh Token으로 토큰을 재발급합니다.") + .requestSchema(new Schema("ReissueRequest")) .requestFields(fieldWithPath("refreshToken").description("갱신 토큰")) .responseFields( fieldWithPath("accessToken").type(STRING).description("접근 토큰"), fieldWithPath("refreshToken").type(STRING).description("갱신 토큰") - ).build()))); + ).responseSchema(new Schema("AuthTokenResponse")).build()))); } } diff --git a/src/test/java/com/dropit/drop/controller/DropDocumentationTest.java b/src/test/java/com/dropit/drop/controller/DropDocumentationTest.java index 8634719..e39a388 100644 --- a/src/test/java/com/dropit/drop/controller/DropDocumentationTest.java +++ b/src/test/java/com/dropit/drop/controller/DropDocumentationTest.java @@ -1,6 +1,7 @@ package com.dropit.drop.controller; import com.dropit.documentation.DocumentationTestSupport; +import com.epages.restdocs.apispec.Schema; import com.dropit.drop.dto.response.DropResponse; import com.dropit.drop.entity.Drop; import com.dropit.drop.service.DropService; @@ -59,6 +60,7 @@ void create() throws Exception { .andExpect(status().isCreated()) .andDo(document("drops-create", resource(builder() .tag("Drops").summary("드랍 생성").requestHeaders(authorizationHeader()) + .requestSchema(new Schema("DropCreateRequest")) .requestFields( fieldWithPath("productId").type(NUMBER).description("상품 ID"), fieldWithPath("price").type(NUMBER).description("판매 가격"), @@ -85,7 +87,7 @@ void getAll() throws Exception { parameterWithName("page").description("페이지 번호"), parameterWithName("size").description("페이지 크기"), parameterWithName("sort").optional().description("정렬 조건") - ).build()))); + ).responseSchema(new Schema("DropPageResponse")).build()))); } @Test @@ -94,7 +96,7 @@ void getOne() throws Exception { mockMvc.perform(authenticated(get("/drops/{dropId}", 100L))) .andExpect(status().isOk()) .andDo(document("drops-get", resource(builder() - .tag("Drops").summary("드랍 단건 조회").requestHeaders(authorizationHeader()).responseFields(dropFields()).build()))); + .tag("Drops").summary("드랍 단건 조회").requestHeaders(authorizationHeader()).responseSchema(new Schema("DropResponse")).responseFields(dropFields()).build()))); } @Test @@ -105,6 +107,7 @@ void getPublicDropsBySeller() throws Exception { .andDo(document("drops-get-by-creator", resource(builder() .tag("Drops").summary("판매자 공개 드랍 목록 조회").requestHeaders(authorizationHeader()) .queryParameters(parameterWithName("page").description("페이지 번호"), parameterWithName("size").description("페이지 크기"), parameterWithName("sort").optional().description("정렬 조건")) + .responseSchema(new Schema("DropPageResponse")) .build()))); } @@ -116,6 +119,7 @@ void getDropsForSellerManagement() throws Exception { .andDo(document("drops-get-my-drops", resource(builder() .tag("Drops").summary("내 드랍 목록 조회").requestHeaders(authorizationHeader()) .queryParameters(parameterWithName("page").description("페이지 번호"), parameterWithName("size").description("페이지 크기"), parameterWithName("sort").optional().description("정렬 조건")) + .responseSchema(new Schema("DropPageResponse")) .build()))); } @@ -127,6 +131,7 @@ void update() throws Exception { .andExpect(status().isOk()) .andDo(document("drops-update", resource(builder() .tag("Drops").summary("드랍 수정").requestHeaders(authorizationHeader()) + .requestSchema(new Schema("DropUpdateRequest")) .requestFields( fieldWithPath("price").optional().type(NUMBER).description("판매 가격"), fieldWithPath("initialQuantity").optional().type(NUMBER).description("초기 수량"), @@ -134,7 +139,7 @@ void update() throws Exception { fieldWithPath("purchaseLimit").optional().type(NUMBER).description("구매 제한 수량"), fieldWithPath("openAt").optional().type(STRING).description("판매 시작 시각"), fieldWithPath("closeAt").optional().type(STRING).description("판매 종료 시각") - ).responseFields(dropFields()).build()))); + ).responseSchema(new Schema("DropResponse")).responseFields(dropFields()).build()))); } @Test @@ -145,8 +150,9 @@ void changeVisibility() throws Exception { .andExpect(status().isOk()) .andDo(document("drops-change-visibility", resource(builder() .tag("Drops").summary("드랍 공개 여부 변경").requestHeaders(authorizationHeader()) + .requestSchema(new Schema("DropVisibilityUpdateRequest")) .requestFields(fieldWithPath("visible").type(BOOLEAN).description("공개 여부")) - .responseFields(dropFields()).build()))); + .responseSchema(new Schema("DropResponse")).responseFields(dropFields()).build()))); } @Test diff --git a/src/test/java/com/dropit/notification/controller/NotificationDocumentationTest.java b/src/test/java/com/dropit/notification/controller/NotificationDocumentationTest.java index 3601385..0aa7619 100644 --- a/src/test/java/com/dropit/notification/controller/NotificationDocumentationTest.java +++ b/src/test/java/com/dropit/notification/controller/NotificationDocumentationTest.java @@ -1,6 +1,7 @@ package com.dropit.notification.controller; import com.dropit.documentation.DocumentationTestSupport; +import com.epages.restdocs.apispec.Schema; import com.dropit.notification.dto.response.NotificationResponse; import com.dropit.notification.entity.Notification; import com.dropit.notification.service.NotificationService; @@ -47,6 +48,7 @@ void getMine() throws Exception { .andExpect(status().isOk()) .andDo(document("notifications-get-me", resource(builder() .tag("Notifications").summary("내 알림 목록 조회").requestHeaders(authorizationHeader()) + .responseSchema(new Schema("NotificationList")) .responseFields( fieldWithPath("[]").type(ARRAY).description("알림 목록"), fieldWithPath("[].id").type(NUMBER).description("알림 ID"), @@ -64,6 +66,7 @@ void markAsRead() throws Exception { .andExpect(status().isOk()) .andDo(document("notifications-mark-read", resource(builder() .tag("Notifications").summary("알림 읽음 처리").requestHeaders(authorizationHeader()) + .responseSchema(new Schema("NotificationResponse")) .responseFields( fieldWithPath("id").type(NUMBER).description("알림 ID"), fieldWithPath("title").type(STRING).description("알림 제목"), diff --git a/src/test/java/com/dropit/order/controller/OrderDocumentationTest.java b/src/test/java/com/dropit/order/controller/OrderDocumentationTest.java index d48dded..ff22e92 100644 --- a/src/test/java/com/dropit/order/controller/OrderDocumentationTest.java +++ b/src/test/java/com/dropit/order/controller/OrderDocumentationTest.java @@ -1,6 +1,7 @@ package com.dropit.order.controller; import com.dropit.documentation.DocumentationTestSupport; +import com.epages.restdocs.apispec.Schema; import com.dropit.order.dto.response.OrderItemResponse; import com.dropit.order.dto.response.OrderResponse; import com.dropit.order.dto.response.OrderSummaryResponse; @@ -51,11 +52,12 @@ void create() throws Exception { .andExpect(status().isCreated()) .andDo(document("orders-create", resource(builder() .tag("Orders").summary("주문 생성").description("한 개의 드랍을 대상으로 주문을 생성합니다.").requestHeaders(authorizationHeader()) + .requestSchema(new Schema("OrderCreateRequest")) .requestFields( fieldWithPath("items").type(ARRAY).description("주문 항목 목록 (현재 한 항목만 허용)"), fieldWithPath("items[].dropId").type(NUMBER).description("주문할 드랍 ID"), fieldWithPath("items[].quantity").type(NUMBER).description("주문 수량") - ).responseFields(orderFields()).build()))); + ).responseSchema(new Schema("OrderResponse")).responseFields(orderFields()).build()))); } @Test @@ -65,6 +67,7 @@ void getMyOrders() throws Exception { .andExpect(status().isOk()) .andDo(document("orders-get-me", resource(builder() .tag("Orders").summary("내 주문 목록 조회").requestHeaders(authorizationHeader()) + .responseSchema(new Schema("OrderSummaryList")) .responseFields( fieldWithPath("[]").type(ARRAY).description("주문 요약 목록"), fieldWithPath("[].id").type(NUMBER).description("주문 ID"), @@ -80,7 +83,7 @@ void getMyOrder() throws Exception { mockMvc.perform(authenticated(get("/orders/{orderId}", 1000L))) .andExpect(status().isOk()) .andDo(document("orders-get", resource(builder() - .tag("Orders").summary("내 주문 상세 조회").requestHeaders(authorizationHeader()).responseFields(orderFields()).build()))); + .tag("Orders").summary("내 주문 상세 조회").requestHeaders(authorizationHeader()).responseSchema(new Schema("OrderResponse")).responseFields(orderFields()).build()))); } @Test diff --git a/src/test/java/com/dropit/product/controller/ProductDocumentationTest.java b/src/test/java/com/dropit/product/controller/ProductDocumentationTest.java index 573bbe1..c7e338e 100644 --- a/src/test/java/com/dropit/product/controller/ProductDocumentationTest.java +++ b/src/test/java/com/dropit/product/controller/ProductDocumentationTest.java @@ -60,6 +60,7 @@ void create() throws Exception { .andExpect(status().isCreated()) .andDo(document("products-create", resource(builder() .tag("Products").summary("상품 생성").requestHeaders(authorizationHeader()) + .requestSchema(new Schema("ProductCreateRequest")) .requestFields(fieldWithPath("name").description("상품명"), fieldWithPath("description").optional().description("상품 설명")) .build()))); } @@ -71,6 +72,7 @@ void getProduct() throws Exception { .andExpect(status().isOk()) .andDo(document("products-get", resource(builder() .tag("Products").summary("상품 단건 조회").requestHeaders(authorizationHeader()) + .responseSchema(new Schema("ProductResponse")) .responseFields(productFields()).build()))); } @@ -83,6 +85,7 @@ void getProducts() throws Exception { .tag("Products").summary("상품 목록 조회").description("상품 목록을 페이징하여 조회합니다.") .requestHeaders(authorizationHeader()) .queryParameters(parameterWithName("page").description("페이지 번호"), parameterWithName("size").description("페이지 크기"), parameterWithName("sort").optional().description("정렬 조건")) + .responseSchema(new Schema("ProductPageResponse")) .responseFields(pageFields()).build()))); } @@ -94,6 +97,7 @@ void getProductsBySeller() throws Exception { .andDo(document("products-get-by-seller", resource(builder() .tag("Products").summary("판매자 상품 목록 조회").requestHeaders(authorizationHeader()) .queryParameters(parameterWithName("page").description("페이지 번호"), parameterWithName("size").description("페이지 크기"), parameterWithName("sort").optional().description("정렬 조건")) + .responseSchema(new Schema("ProductPageResponse")) .responseFields(pageFields()).build()))); } @@ -105,7 +109,9 @@ void update() throws Exception { .andExpect(status().isOk()) .andDo(document("products-update", resource(builder() .tag("Products").summary("상품 수정").requestHeaders(authorizationHeader()) + .requestSchema(new Schema("ProductUpdateRequest")) .requestFields(fieldWithPath("name").description("상품명"), fieldWithPath("description").optional().description("상품 설명")) + .responseSchema(new Schema("ProductResponse")) .responseFields(productFields()).build()))); } @@ -129,6 +135,7 @@ void uploadImage() throws Exception { .andDo(document("products-upload-image", resource(builder() .tag("Products").summary("상품 이미지 업로드").requestHeaders(authorizationHeader()) .requestSchema(new Schema("MultipartImage")) + .responseSchema(new Schema("ProductResponse")) .responseFields(productFields()).build()), requestParts(partWithName("file").description("업로드할 이미지 파일")))); } diff --git a/src/test/java/com/dropit/sellerprofile/controller/SellerProfileDocumentationTest.java b/src/test/java/com/dropit/sellerprofile/controller/SellerProfileDocumentationTest.java index fc6595a..5535c7f 100644 --- a/src/test/java/com/dropit/sellerprofile/controller/SellerProfileDocumentationTest.java +++ b/src/test/java/com/dropit/sellerprofile/controller/SellerProfileDocumentationTest.java @@ -57,11 +57,12 @@ void create() throws Exception { .andExpect(status().isCreated()) .andDo(document("seller-profiles-create", resource(builder() .tag("Seller Profiles").summary("판매자 프로필 생성").description("로그인한 판매자의 프로필을 생성합니다.").requestHeaders(authorizationHeader()) + .requestSchema(new Schema("SellerProfileCreateRequest")) .requestFields( fieldWithPath("description").optional().description("판매자 소개"), fieldWithPath("instagramUrl").optional().description("인스타그램 URL"), fieldWithPath("youtubeUrl").optional().description("유튜브 URL") - ).responseFields(profileFields()).build()))); + ).responseSchema(new Schema("SellerProfileResponse")).responseFields(profileFields()).build()))); } @Test @@ -70,7 +71,7 @@ void getMine() throws Exception { mockMvc.perform(authenticated(get("/seller-profiles/me"))) .andExpect(status().isOk()) .andDo(document("seller-profiles-get-me", resource(builder() - .tag("Seller Profiles").summary("내 판매자 프로필 조회").requestHeaders(authorizationHeader()).responseSchema(new Schema("SellerProfile")).responseFields(profileFields()).build()))); + .tag("Seller Profiles").summary("내 판매자 프로필 조회").requestHeaders(authorizationHeader()).responseSchema(new Schema("SellerProfileResponse")).responseFields(profileFields()).build()))); } @Test @@ -79,7 +80,7 @@ void getById() throws Exception { mockMvc.perform(authenticated(get("/seller-profiles/{sellerProfileId}", 10L))) .andExpect(status().isOk()) .andDo(document("seller-profiles-get", resource(builder() - .tag("Seller Profiles").summary("판매자 프로필 조회").requestHeaders(authorizationHeader()).responseFields(profileFields()).build()))); + .tag("Seller Profiles").summary("판매자 프로필 조회").requestHeaders(authorizationHeader()).responseSchema(new Schema("SellerProfileResponse")).responseFields(profileFields()).build()))); } @Test @@ -91,11 +92,12 @@ void update() throws Exception { .andExpect(status().isOk()) .andDo(document("seller-profiles-update", resource(builder() .tag("Seller Profiles").summary("판매자 프로필 수정").requestHeaders(authorizationHeader()) + .requestSchema(new Schema("SellerProfileUpdateRequest")) .requestFields( fieldWithPath("description").optional().description("판매자 소개"), fieldWithPath("instagramUrl").optional().description("인스타그램 URL"), fieldWithPath("youtubeUrl").optional().description("유튜브 URL") - ).responseFields(profileFields()).build()))); + ).responseSchema(new Schema("SellerProfileResponse")).responseFields(profileFields()).build()))); } @Test @@ -110,7 +112,7 @@ void uploadImage() throws Exception { .andDo(document("seller-profiles-upload-image", resource(builder() .tag("Seller Profiles").summary("판매자 프로필 이미지 업로드").description("프로필 이미지를 업로드합니다.").requestHeaders(authorizationHeader()) .requestSchema(new Schema("MultipartImage")) - .responseFields(profileFields()).build()), + .responseSchema(new Schema("SellerProfileResponse")).responseFields(profileFields()).build()), requestParts(partWithName("file").description("업로드할 이미지 파일")))); } diff --git a/src/test/java/com/dropit/user/controller/UserDocumentationTest.java b/src/test/java/com/dropit/user/controller/UserDocumentationTest.java index cf2ac51..59b03a1 100644 --- a/src/test/java/com/dropit/user/controller/UserDocumentationTest.java +++ b/src/test/java/com/dropit/user/controller/UserDocumentationTest.java @@ -1,6 +1,7 @@ package com.dropit.user.controller; import com.dropit.documentation.DocumentationTestSupport; +import com.epages.restdocs.apispec.Schema; import com.dropit.user.entity.User; import com.dropit.user.entity.UserRole; import com.dropit.user.service.UserService; @@ -44,6 +45,7 @@ void getMyInfo() throws Exception { .andExpect(status().isOk()) .andDo(document("users-get-me", resource(builder() .tag("Users").summary("내 정보 조회").description("현재 로그인한 사용자의 정보를 조회합니다.").requestHeaders(authorizationHeader()) + .responseSchema(new Schema("UserResponse")) .build()))); } @@ -56,6 +58,7 @@ void updateMyProfile() throws Exception { .andExpect(status().isOk()) .andDo(document("users-update-me", resource(builder() .tag("Users").summary("내 정보 수정").description("현재 로그인한 사용자의 이메일과 이름을 수정합니다.").requestHeaders(authorizationHeader()) + .requestSchema(new Schema("UserUpdateRequest")) .requestFields( fieldWithPath("email").optional().description("변경할 이메일 주소"), fieldWithPath("username").optional().description("변경할 사용자 이름") @@ -67,7 +70,7 @@ void updateMyProfile() throws Exception { fieldWithPath("role").type(STRING).description("사용자 역할"), fieldWithPath("createdAt").type(STRING).optional().description("가입 시각"), fieldWithPath("updatedAt").type(STRING).optional().description("수정 시각") - ).build()))); + ).responseSchema(new Schema("UserResponse")).build()))); } @Test @@ -78,6 +81,7 @@ void updateMyPassword() throws Exception { .andExpect(status().isNoContent()) .andDo(document("users-update-password", resource(builder() .tag("Users").summary("비밀번호 변경").description("현재 비밀번호를 확인하고 새 비밀번호로 변경합니다.").requestHeaders(authorizationHeader()) + .requestSchema(new Schema("PasswordUpdateRequest")) .requestFields( fieldWithPath("currentPassword").description("현재 비밀번호"), fieldWithPath("newPassword").description("새 비밀번호 (8자 이상)") diff --git a/src/test/java/com/dropit/wishlist/controller/WishlistDocumentationTest.java b/src/test/java/com/dropit/wishlist/controller/WishlistDocumentationTest.java index b378533..3389b03 100644 --- a/src/test/java/com/dropit/wishlist/controller/WishlistDocumentationTest.java +++ b/src/test/java/com/dropit/wishlist/controller/WishlistDocumentationTest.java @@ -1,6 +1,7 @@ package com.dropit.wishlist.controller; import com.dropit.documentation.DocumentationTestSupport; +import com.epages.restdocs.apispec.Schema; import com.dropit.product.entity.Product; import com.dropit.user.entity.User; import com.dropit.user.entity.UserRole; @@ -48,7 +49,7 @@ void add() throws Exception { mockMvc.perform(authenticated(post("/wishlists/{productId}", 10L))) .andExpect(status().isOk()) .andDo(document("wishlists-add", resource(builder() - .tag("Wishlists").summary("상품 찜하기").requestHeaders(authorizationHeader()).responseFields(wishlistFields()).build()))); + .tag("Wishlists").summary("상품 찜하기").requestHeaders(authorizationHeader()).responseSchema(new Schema("WishlistResponse")).responseFields(wishlistFields()).build()))); } @Test @@ -58,6 +59,7 @@ void getMine() throws Exception { .andExpect(status().isOk()) .andDo(document("wishlists-get-me", resource(builder() .tag("Wishlists").summary("내 찜 목록 조회").requestHeaders(authorizationHeader()) + .responseSchema(new Schema("WishlistList")) .responseFields( fieldWithPath("[]").type(ARRAY).description("찜 목록"), fieldWithPath("[].id").type(NUMBER).description("찜 ID"), From a284e01934fd29aca6900703eee83fd35f36c65e Mon Sep 17 00:00:00 2001 From: Hyiyek Date: Thu, 10 Sep 2026 19:50:43 +0900 Subject: [PATCH 28/98] =?UTF-8?q?perf(drop):=20=EB=8C=80=EA=B7=9C=EB=AA=A8?= =?UTF-8?q?=20=EB=AA=A9=EB=A1=9D=20=EC=A1=B0=ED=9A=8C=20=EC=BF=BC=EB=A6=AC?= =?UTF-8?q?=20=EC=84=B1=EB=8A=A5=20=EA=B0=9C=EC=84=A0?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- performance/build-million-report.py | 130 ++++++++ performance/compose.performance.yml | 36 +++ performance/data/drop-index-after-explain.sql | 33 ++ .../data/drop-index-before-explain.sql | 33 ++ .../data/drop-index-optimized-explain.sql | 14 + performance/data/drop-index-seed.sql | 173 ++++++++++ performance/drop-index.env.example | 10 + .../dashboards/drop-million-comparison.json | 298 ++++++++++++++++++ .../provisioning/dashboards/dashboards.yml | 11 + .../provisioning/datasources/influxdb.yml | 14 + performance/k6/drop-list-index.js | 62 ++++ performance/results/drop-million-report.zip | Bin 0 -> 705872 bytes .../results/drop-million-report/PR-review.md | 88 ++++++ .../drop-million-report/comparison.png | Bin 0 -> 75972 bytes .../drop-index-after-explain.sql | 33 ++ .../drop-index-before-explain.sql | 33 ++ .../drop-index-optimized-explain.sql | 14 + .../drop-million-report/drop-index-seed.sql | 173 ++++++++++ .../drop-million-report/drop-list-index.js | 62 ++++ .../drop-million-after-explain.txt | 4 + .../drop-million-after.json | 237 ++++++++++++++ .../drop-million-before-explain.txt | 4 + .../drop-million-before.json | 237 ++++++++++++++ .../drop-million-optimized-explain.txt | 4 + .../drop-million-optimized.json | 237 ++++++++++++++ .../results/drop-million-report/grafana.png | Bin 0 -> 276724 bytes .../results/drop-million-report/report.html | 1 + .../raw/drop-million-after-explain.txt | 4 + .../results/raw/drop-million-after.json | 237 ++++++++++++++ .../raw/drop-million-before-explain.txt | 4 + .../results/raw/drop-million-before.json | 237 ++++++++++++++ .../raw/drop-million-optimized-explain.txt | 4 + .../results/raw/drop-million-optimized.json | 237 ++++++++++++++ performance/start-drop-index-test.ps1 | 151 +++++++++ .../java/com/dropit/drop/entity/Drop.java | 8 +- .../repository/DropRepositoryCustomImpl.java | 32 +- .../repository/DropSearchIntegrationTest.java | 76 +++++ 37 files changed, 2922 insertions(+), 9 deletions(-) create mode 100644 performance/build-million-report.py create mode 100644 performance/compose.performance.yml create mode 100644 performance/data/drop-index-after-explain.sql create mode 100644 performance/data/drop-index-before-explain.sql create mode 100644 performance/data/drop-index-optimized-explain.sql create mode 100644 performance/data/drop-index-seed.sql create mode 100644 performance/drop-index.env.example create mode 100644 performance/grafana/dashboards/drop-million-comparison.json create mode 100644 performance/grafana/provisioning/dashboards/dashboards.yml create mode 100644 performance/grafana/provisioning/datasources/influxdb.yml create mode 100644 performance/k6/drop-list-index.js create mode 100644 performance/results/drop-million-report.zip create mode 100644 performance/results/drop-million-report/PR-review.md create mode 100644 performance/results/drop-million-report/comparison.png create mode 100644 performance/results/drop-million-report/drop-index-after-explain.sql create mode 100644 performance/results/drop-million-report/drop-index-before-explain.sql create mode 100644 performance/results/drop-million-report/drop-index-optimized-explain.sql create mode 100644 performance/results/drop-million-report/drop-index-seed.sql create mode 100644 performance/results/drop-million-report/drop-list-index.js create mode 100644 performance/results/drop-million-report/drop-million-after-explain.txt create mode 100644 performance/results/drop-million-report/drop-million-after.json create mode 100644 performance/results/drop-million-report/drop-million-before-explain.txt create mode 100644 performance/results/drop-million-report/drop-million-before.json create mode 100644 performance/results/drop-million-report/drop-million-optimized-explain.txt create mode 100644 performance/results/drop-million-report/drop-million-optimized.json create mode 100644 performance/results/drop-million-report/grafana.png create mode 100644 performance/results/drop-million-report/report.html create mode 100644 performance/results/raw/drop-million-after-explain.txt create mode 100644 performance/results/raw/drop-million-after.json create mode 100644 performance/results/raw/drop-million-before-explain.txt create mode 100644 performance/results/raw/drop-million-before.json create mode 100644 performance/results/raw/drop-million-optimized-explain.txt create mode 100644 performance/results/raw/drop-million-optimized.json create mode 100644 performance/start-drop-index-test.ps1 create mode 100644 src/test/java/com/dropit/drop/repository/DropSearchIntegrationTest.java diff --git a/performance/build-million-report.py b/performance/build-million-report.py new file mode 100644 index 0000000..9a601c2 --- /dev/null +++ b/performance/build-million-report.py @@ -0,0 +1,130 @@ +"""저장된 k6 원본으로 PR 문서, 비교 이미지, HTML, ZIP을 생성한다.""" +from pathlib import Path +import json, html, base64, zipfile, shutil +from PIL import Image, ImageDraw, ImageFont + +root = Path(__file__).resolve().parent +out = root / 'results' / 'drop-million-report' +out.mkdir(exist_ok=True) +phases = [('before','Before'), ('after','인덱스'), ('optimized','인덱스 + 쿼리 개선')] +data = [json.loads((root/'results'/'raw'/f'drop-million-{p}.json').read_text(encoding='utf-8-sig'))['metrics'] for p,_ in phases] +def val(d,metric,key): return d.get(metric,{}).get('values',{}).get(key,0) +rows = [] +for label,metric,key,unit in [('완료 HTTP 요청','http_reqs','count','건'),('평균 응답 시간','http_req_duration','avg','ms'),('p95 응답 시간','http_req_duration','p(95)','ms'),('HTTP 실패율','http_req_failed','rate','%'),('시작하지 못한 요청','dropped_iterations','count','건')]: + values=[val(d,metric,key)*(100 if unit=='%' else 1) for d in data] + rows.append([label]+[f'{v:,.2f} {unit}' if unit!='건' else f'{v:,.0f}건' for v in values]) +table='| 지표 | Before | 인덱스 | 인덱스 + 쿼리 개선 |\n|---|---:|---:|---:|\n'+'\n'.join('| '+' | '.join(r)+' |' for r in rows) +image=Image.new('RGB',(1600,750),'#f4f7fb'); draw=ImageDraw.Draw(image) +font=lambda size,bold=False: ImageFont.truetype('C:/Windows/Fonts/malgunbd.ttf' if bold else 'C:/Windows/Fonts/malgun.ttf',size) +draw.text((55,35),'Drop 100만 건 · 조회 성능 개선',font=font(43,True),fill='#172b4d') +draw.text((55,100),'상품 10만 건 | 공개 판매 중 50만 건 | 동일 k6 부하 · 단계별 1회',font=font(24),fill='#526174') +xs=[55,580,900,1190]; widths=[510,310,280,350] +for j,t in enumerate(['지표','Before','인덱스','인덱스 + 쿼리 개선']): draw.text((xs[j],170),t,font=font(25,True),fill='#16385b') +for i,row in enumerate(rows): + y=225+i*73 + draw.rounded_rectangle((40,y-8,1560,y+53),radius=8,fill='white') + for j,t in enumerate(row): draw.text((xs[j],y),t,font=font(24,j==0),fill='#193c32' if j==3 else '#26364b') +draw.text((55,640),'변경: ID 20개 선조회 → 상세 조인 / 검색어 없는 count 조인 제거',font=font(24,True),fill='#172b4d') +draw.text((55,686),'단일 로컬 실험 · 실패/시간 초과 포함 · 운영 수용량이나 반복 검증 결과가 아님',font=font(21),fill='#536477') +image.save(out/'comparison.png') +md=f'''# Drop 100만 건 조회 성능 개선 + +## 🛠️ 주요 변경 사항 + +- 판매 중 Drop 첫 페이지를 마감 임박순으로 조회할 때 대량 조인·정렬이 발생하는 문제를 개선했습니다. +- 복합 인덱스를 적용한 뒤 효과를 확인하고, ID 선조회 및 조건부 count 조인 제거를 추가했습니다. +- 기존 Page 응답, 전체 개수, 검색·정렬 계약을 유지합니다. + +## ✨ Before / After + +{table} + +![성능 비교](comparison.png) + +HTTP 완료 수에는 오류 응답·시간 초과도 포함됩니다. 시작하지 못한 요청은 k6의 dropped_iterations이며 서버가 거절한 요청 수와 다릅니다. p95는 실패 요청을 포함하며 Before의 약 60초는 클라이언트 시간 초과의 영향을 받습니다. + +## 실험 조건 + +- API: `GET /drops?status=OPEN&sortType=CLOSING_SOON&page=0&size=20` +- 상품 100,000건, Drop 1,000,000건, 공개 판매 중 500,000건. 판매자는 한 명인 집중 시나리오이며 실제 운영 규모라는 가정은 아닙니다. +- Docker MySQL 8.4, Spring 서버, Docker k6·InfluxDB·Grafana를 같은 Windows PC에서 실행했습니다. +- 75초 동안 10→20→50→100→200→0 RPS, 최대 500 VU, 종료 대기 30초. 단계별 1회 측정했습니다. +- 모든 단계에서 서버를 같은 설정으로 실행하고 API 사전 호출 후 측정했습니다. DB 버퍼 캐시는 초기화하지 않았습니다. +- 요청량·데이터·페이지 크기·인증·연결 풀 설정은 동일합니다. 인덱스 단계에서는 통계를 갱신했습니다. + +## 원인과 변경 코드 + +기존에는 상품·판매자를 조인한 결과에서 조건에 맞는 50만 건을 정렬했습니다. 인덱스를 추가해도 진단 실행 계획은 기존 외래키 조회를 선택했습니다. + +```java +// Before: 조인한 전체 후보를 정렬하고 페이지 조회 +selectFrom(drop).join(drop.product, product).fetchJoin() + .join(product.seller, user).fetchJoin() + .where(conditions).orderBy(order).offset(offset).limit(size); + +// After: 필요한 ID만 선조회하고 그 ID에 한해 상세 조인 +select(drop.id).from(drop).where(conditions) + .orderBy(order).offset(offset).limit(size); +selectFrom(drop).join(drop.product, product).fetchJoin() + .join(product.seller, user).fetchJoin() + .where(drop.id.in(ids)).orderBy(order); +``` + +위 코드는 흐름을 설명하는 발췌이며 실제 구현은 `DropRepositoryCustomImpl`입니다. 키워드가 있으면 ID·count 쿼리에도 상품·판매자 조인을 유지합니다. 키워드가 없으면 필수 FK 관계를 전제로 count 조인을 생략합니다. 상세 조회에서 정렬을 다시 지정해 IN 조건으로 순서가 바뀌지 않게 했습니다. + +인덱스: `(visible, close_at, id DESC, open_at, remaining_quantity, product_id)`. + +## SQL 진단 + +| 단계 | 목록 또는 ID 쿼리 | count | +|---|---:|---:| +| Before | 2,683ms | 1,916ms | +| 인덱스 | 3,293ms | 2,362ms | +| 쿼리 개선 | ID 20개 3.26ms | 714ms | + +진단용 SQL은 Drop 컬럼만 선택하므로 실제 API의 fetch join 전체 투영과 같지 않습니다. 최종 ID 쿼리 시간에는 후속 상세 쿼리가 포함되지 않습니다. 이 값들을 API 개선율로 환산하지 않았으며 API 비교는 위 k6 표를 사용합니다. + +## ⚠️ 주의 사항 및 남은 한계 + +- 정확한 totalElements를 유지하므로 최종 count도 인덱스 후보 약 80만 건을 읽습니다. 인덱스만으로 목표 부하를 모두 처리한다고 주장하지 않습니다. +- 단일 실행이라 반복 편차·통계적 유의성을 확인하지 않았습니다. 키워드 검색, 뒷페이지, 여러 판매자 분포의 성능은 이번 측정 범위 밖입니다. +- ID 선조회로 쿼리는 2회에서 3회로 증가합니다. 기존 read-only 트랜잭션 및 MySQL REPEATABLE READ 안에서 페이지와 상세를 읽습니다. +- 재고 컬럼을 포함하는 인덱스는 재고 변경 시 유지 비용이 있습니다. 재고 쓰기 부하 영향은 별도 검증이 필요합니다. +- Before/인덱스 단계의 시간 초과에서 기존 k6 JSON 검증이 null body 예외를 냈습니다. HTTP 지표는 저장됐으며 checks를 정확성 근거로 사용하지 않았습니다. +- 다음 후보: 정확한 전체 개수가 불필요한 경우 별도 Slice API, 검색어별 실행 계획 개선. API 계약 변경은 팀 합의 후 진행합니다. + +## 🧪 테스트 결과 + +- [x] Drop 테스트 43개 통과, 실패 0개, 오류 0개 +- [x] MySQL 통합 테스트 2개 포함: 키워드 검색 페이징·빈 페이지·전체 개수와 기본 조회의 기존 조인 쿼리 결과 일치 +- [x] k6 세 단계 원본 결과 저장 +- [ ] 최종 p95 2초 목표 미달 + +## 💡 관련 이슈 + +- 이슈 번호 미확인. 실제 번호를 확인한 뒤 연결합니다. + +## GitHub에 이미지 올리기 + +PR 편집기에 `comparison.png`와 `grafana.png`를 드래그하면 GitHub 이미지 주소가 생성됩니다. 본문 이미지 경로를 해당 주소로 바꾸면 됩니다. 로컬 C: 경로는 GitHub에서 표시되지 않습니다. +''' +if (out/'grafana.png').exists(): md += '\n![Grafana 측정 화면](grafana.png)\n' +(out/'PR-review.md').write_text(md,encoding='utf-8') +for p,_ in phases: + shutil.copy2(root/'results'/'raw'/f'drop-million-{p}.json',out/f'drop-million-{p}.json') + shutil.copy2(root/'results'/'raw'/f'drop-million-{p}-explain.txt',out/f'drop-million-{p}-explain.txt') +for name in ['drop-index-seed.sql','drop-index-before-explain.sql','drop-index-after-explain.sql','drop-index-optimized-explain.sql']: + shutil.copy2(root/'data'/name,out/name) +shutil.copy2(root/'k6'/'drop-list-index.js',out/'drop-list-index.js') +# HTML은 외부 라이브러리 없이 표와 문서를 한 파일로 보관한다. +png=base64.b64encode((out/'comparison.png').read_bytes()).decode() +body='Drop 성능 비교' +body+=f'

Drop 100만 건 조회 성능 개선

상품 10만 건 · 공개 판매 중 Drop 50만 건 · 단계별 1회 측정

' +body+='

Before / After

' +body+=''.join(''+''.join('' for c in r)+'' for r in rows)+'
지표Before인덱스쿼리 개선
'+html.escape(c)+'
' +body+='

무엇을 바꿨나?

인덱스만 추가했을 때는 기존 조인 순서와 대량 정렬이 남았습니다. 필요한 ID 20개를 먼저 고르고 상세 정보를 조인하도록 바꾸고, 검색어가 없는 전체 개수 조회에서 상품·판매자 조인을 제거했습니다.

검증과 한계

Drop 테스트 43개 통과. 기존 Page 계약을 유지합니다. 최종 HTTP 실패율은 0%지만 p95는 23.46초로 목표 2초에 미달했습니다. 정확한 전체 개수 계산 비용이 남습니다. 단일 로컬 측정이며 시간 초과를 포함하므로 운영 수용량으로 해석할 수 없습니다.

요청 조건: /drops?status=OPEN&sortType=CLOSING_SOON&page=0&size=20
75초 동안 10→200→0 RPS, 최대 500 VU. HTTP 요청 수에는 실패가 포함되며, 미시작 요청은 dropped_iterations입니다.

' +if (out/'grafana.png').exists(): body+='' +(out/'report.html').write_text(body,encoding='utf-8') +with zipfile.ZipFile(root/'results'/'drop-million-report.zip','w',zipfile.ZIP_DEFLATED) as z: + for f in out.iterdir(): z.write(f,f.name) +print(out) diff --git a/performance/compose.performance.yml b/performance/compose.performance.yml new file mode 100644 index 0000000..2c99920 --- /dev/null +++ b/performance/compose.performance.yml @@ -0,0 +1,36 @@ +name: dropit-performance + +services: + influxdb: + image: influxdb:1.8-alpine + environment: + INFLUXDB_DB: k6 + ports: + - "127.0.0.1:8086:8086" + volumes: + - influxdb-data:/var/lib/influxdb + healthcheck: + test: ["CMD", "wget", "--spider", "-q", "http://localhost:8086/ping"] + interval: 5s + timeout: 3s + retries: 10 + + grafana: + image: grafana/grafana:latest + environment: + GF_AUTH_ANONYMOUS_ENABLED: "true" + GF_AUTH_ANONYMOUS_ORG_ROLE: Viewer + GF_USERS_DEFAULT_THEME: light + ports: + - "127.0.0.1:3000:3000" + volumes: + - grafana-data:/var/lib/grafana + - ./grafana/provisioning:/etc/grafana/provisioning:ro + - ./grafana/dashboards:/var/lib/grafana/dashboards:ro + depends_on: + influxdb: + condition: service_healthy + +volumes: + influxdb-data: + grafana-data: diff --git a/performance/data/drop-index-after-explain.sql b/performance/data/drop-index-after-explain.sql new file mode 100644 index 0000000..1c3bfc8 --- /dev/null +++ b/performance/data/drop-index-after-explain.sql @@ -0,0 +1,33 @@ +EXPLAIN ANALYZE +SELECT + d.id, + d.product_id, + d.price, + d.initial_quantity, + d.remaining_quantity, + d.discount_rate, + d.purchase_limit, + d.visible, + d.open_at, + d.close_at, + d.created_at, + d.updated_at +FROM drops d +INNER JOIN products p ON p.id = d.product_id +INNER JOIN users u ON u.id = p.seller_id +WHERE d.visible = b'1' + AND d.open_at <= NOW() + AND d.close_at > NOW() + AND d.remaining_quantity > 0 +ORDER BY d.close_at ASC, d.id DESC +LIMIT 20; + +EXPLAIN ANALYZE +SELECT COUNT(d.id) +FROM drops d +INNER JOIN products p ON p.id = d.product_id +INNER JOIN users u ON u.id = p.seller_id +WHERE d.visible = b'1' + AND d.open_at <= NOW() + AND d.close_at > NOW() + AND d.remaining_quantity > 0; diff --git a/performance/data/drop-index-before-explain.sql b/performance/data/drop-index-before-explain.sql new file mode 100644 index 0000000..1c3bfc8 --- /dev/null +++ b/performance/data/drop-index-before-explain.sql @@ -0,0 +1,33 @@ +EXPLAIN ANALYZE +SELECT + d.id, + d.product_id, + d.price, + d.initial_quantity, + d.remaining_quantity, + d.discount_rate, + d.purchase_limit, + d.visible, + d.open_at, + d.close_at, + d.created_at, + d.updated_at +FROM drops d +INNER JOIN products p ON p.id = d.product_id +INNER JOIN users u ON u.id = p.seller_id +WHERE d.visible = b'1' + AND d.open_at <= NOW() + AND d.close_at > NOW() + AND d.remaining_quantity > 0 +ORDER BY d.close_at ASC, d.id DESC +LIMIT 20; + +EXPLAIN ANALYZE +SELECT COUNT(d.id) +FROM drops d +INNER JOIN products p ON p.id = d.product_id +INNER JOIN users u ON u.id = p.seller_id +WHERE d.visible = b'1' + AND d.open_at <= NOW() + AND d.close_at > NOW() + AND d.remaining_quantity > 0; diff --git a/performance/data/drop-index-optimized-explain.sql b/performance/data/drop-index-optimized-explain.sql new file mode 100644 index 0000000..10f5ce4 --- /dev/null +++ b/performance/data/drop-index-optimized-explain.sql @@ -0,0 +1,14 @@ +-- ID 선조회: 조인 없이 정렬된 인덱스에서 페이지를 찾는다. +EXPLAIN ANALYZE +SELECT d.id FROM drops d +WHERE d.visible = b'1' AND d.open_at <= NOW() + AND d.close_at > NOW() AND d.remaining_quantity > 0 +ORDER BY d.close_at ASC, d.id DESC LIMIT 20; + +-- count: 키워드가 없는 경우 필수 FK 조인을 생략한다. +EXPLAIN ANALYZE +SELECT COUNT(d.id) FROM drops d +WHERE d.visible = b'1' AND d.open_at <= NOW() + AND d.close_at > NOW() AND d.remaining_quantity > 0; + +-- 상세 fetch join은 위에서 선택된 ID 20개에만 수행된다. diff --git a/performance/data/drop-index-seed.sql b/performance/data/drop-index-seed.sql new file mode 100644 index 0000000..0990eb4 --- /dev/null +++ b/performance/data/drop-index-seed.sql @@ -0,0 +1,173 @@ +SET SESSION cte_max_recursion_depth = 1000001; + +SET @performance_marker = 'DROP_INDEX_PERFORMANCE_PRODUCT'; +SET @product_count = 100000; +SET @drop_count = 1000000; + +SET @index_exists = ( + SELECT COUNT(*) + FROM information_schema.statistics + WHERE table_schema = DATABASE() + AND table_name = 'drops' + AND index_name = 'idx_drops_public_closing' +); + +SET @drop_index_sql = IF( + @index_exists > 0, + 'DROP INDEX idx_drops_public_closing ON drops', + 'SELECT 1' +); + +PREPARE drop_index_statement FROM @drop_index_sql; +EXECUTE drop_index_statement; +DEALLOCATE PREPARE drop_index_statement; + +INSERT INTO users ( + email, + password, + username, + role, + deleted_at, + created_at, + updated_at +) +SELECT + 'drop-index-seller@dropit.test', + 'local-performance-password', + 'drop-index-seller', + 'SELLER', + NULL, + NOW(), + NOW() +WHERE NOT EXISTS ( + SELECT 1 + FROM users + WHERE email = 'drop-index-seller@dropit.test' +); + +SET @seller_id = ( + SELECT id + FROM users + WHERE email = 'drop-index-seller@dropit.test' + LIMIT 1 +); + +DELETE FROM drops +WHERE product_id IN ( + SELECT id + FROM products + WHERE description = @performance_marker +); + +DELETE FROM products +WHERE description = @performance_marker; + +INSERT INTO products ( + seller_id, + name, + description, + image_url, + created_at, + updated_at +) +WITH RECURSIVE product_numbers AS ( + SELECT 1 AS number + + UNION ALL + + SELECT number + 1 + FROM product_numbers + WHERE number < @product_count +) +SELECT + @seller_id, + CONCAT('Drop Index Performance Product ', number), + @performance_marker, + NULL, + DATE_SUB(NOW(), INTERVAL MOD(number, 365) DAY), + NOW() +FROM product_numbers; + +INSERT INTO drops ( + product_id, + price, + initial_quantity, + remaining_quantity, + discount_rate, + purchase_limit, + visible, + open_at, + close_at, + created_at, + updated_at +) +WITH RECURSIVE numbers AS ( + SELECT 1 AS number + + UNION ALL + + SELECT number + 1 + FROM numbers + WHERE number < @drop_count +), +performance_products AS ( + SELECT + id, + ROW_NUMBER() OVER (ORDER BY id) AS product_number + FROM products + WHERE description = @performance_marker +) +SELECT + performance_products.id, + 30000 + MOD(numbers.number, 70000), + 100, + CASE MOD(numbers.number, 10) + WHEN 7 THEN 0 + ELSE 100 + END, + MOD(numbers.number, 51), + 2, + CASE MOD(numbers.number, 10) + WHEN 9 THEN b'0' + ELSE b'1' + END, + CASE + WHEN MOD(numbers.number, 10) BETWEEN 0 AND 4 + THEN DATE_SUB(NOW(), INTERVAL 7 DAY) + WHEN MOD(numbers.number, 10) BETWEEN 5 AND 6 + THEN DATE_ADD(NOW(), INTERVAL 7 DAY) + WHEN MOD(numbers.number, 10) = 7 + THEN DATE_SUB(NOW(), INTERVAL 7 DAY) + WHEN MOD(numbers.number, 10) = 8 + THEN DATE_SUB(NOW(), INTERVAL 14 DAY) + ELSE DATE_SUB(NOW(), INTERVAL 7 DAY) + END, + CASE + WHEN MOD(numbers.number, 10) BETWEEN 0 AND 4 + THEN DATE_ADD(NOW(), INTERVAL (7 + MOD(numbers.number, 30)) DAY) + WHEN MOD(numbers.number, 10) BETWEEN 5 AND 6 + THEN DATE_ADD(NOW(), INTERVAL (37 + MOD(numbers.number, 30)) DAY) + WHEN MOD(numbers.number, 10) = 7 + THEN DATE_ADD(NOW(), INTERVAL (7 + MOD(numbers.number, 30)) DAY) + WHEN MOD(numbers.number, 10) = 8 + THEN DATE_SUB(NOW(), INTERVAL 7 DAY) + ELSE DATE_ADD(NOW(), INTERVAL (7 + MOD(numbers.number, 30)) DAY) + END, + DATE_SUB(NOW(), INTERVAL MOD(numbers.number, 365) DAY), + NOW() +FROM numbers +INNER JOIN performance_products + ON performance_products.product_number = MOD(numbers.number - 1, @product_count) + 1; + +SELECT + COUNT(DISTINCT products.id) AS performance_product_count, + COUNT(drops.id) AS total_drop_count, + SUM( + drops.visible = b'1' + AND drops.open_at <= NOW() + AND drops.close_at > NOW() + AND drops.remaining_quantity > 0 + ) AS open_public_drop_count +FROM products +INNER JOIN drops ON drops.product_id = products.id +WHERE products.description = @performance_marker; diff --git a/performance/drop-index.env.example b/performance/drop-index.env.example new file mode 100644 index 0000000..86119c7 --- /dev/null +++ b/performance/drop-index.env.example @@ -0,0 +1,10 @@ +# Windows에서 Spring API를 확인하는 주소 +HEALTH_CHECK_URL=http://localhost:8080 + +# Docker k6 컨테이너에서 Windows의 Spring API에 접근하는 주소 +BASE_URL=http://host.docker.internal:8080 + +# 로컬 성능 테스트 전용 계정 +AUTH_EMAIL=drop-index-load-test@example.com +AUTH_PASSWORD=change-this-local-password +AUTH_USERNAME=drop-index-load-test diff --git a/performance/grafana/dashboards/drop-million-comparison.json b/performance/grafana/dashboards/drop-million-comparison.json new file mode 100644 index 0000000..eaccd0c --- /dev/null +++ b/performance/grafana/dashboards/drop-million-comparison.json @@ -0,0 +1,298 @@ +{ + "annotations": { + "list": [] + }, + "editable": true, + "graphTooltip": 1, + "panels": [ + { + "datasource": { + "type": "influxdb", + "uid": "k6-influxdb" + }, + "fieldConfig": { + "defaults": { + "unit": "ms" + }, + "overrides": [] + }, + "gridPos": { + "h": 6, + "w": 6, + "x": 0, + "y": 0 + }, + "id": 1, + "options": { + "colorMode": "value", + "graphMode": "area", + "justifyMode": "center", + "reduceOptions": { + "calcs": [ + "lastNotNull" + ], + "fields": "", + "values": false + }, + "textMode": "auto" + }, + "targets": [ + { + "query": "SELECT percentile(\"value\", 95) FROM \"http_req_duration\" WHERE (\"test_run\" = 'drop-million-before') AND $timeFilter", + "rawQuery": true, + "refId": "A", + "resultFormat": "time_series" + } + ], + "title": "Before p95", + "type": "stat" + }, + { + "datasource": { + "type": "influxdb", + "uid": "k6-influxdb" + }, + "fieldConfig": { + "defaults": { + "unit": "ms" + }, + "overrides": [] + }, + "gridPos": { + "h": 6, + "w": 6, + "x": 6, + "y": 0 + }, + "id": 2, + "options": { + "colorMode": "value", + "graphMode": "area", + "justifyMode": "center", + "reduceOptions": { + "calcs": [ + "lastNotNull" + ], + "fields": "", + "values": false + }, + "textMode": "auto" + }, + "targets": [ + { + "query": "SELECT percentile(\"value\", 95) FROM \"http_req_duration\" WHERE (\"test_run\" = 'drop-million-optimized') AND $timeFilter", + "rawQuery": true, + "refId": "A", + "resultFormat": "time_series" + } + ], + "title": "Optimized p95", + "type": "stat" + }, + { + "datasource": { + "type": "influxdb", + "uid": "k6-influxdb" + }, + "fieldConfig": { + "defaults": { + "unit": "ms" + }, + "overrides": [] + }, + "gridPos": { + "h": 6, + "w": 6, + "x": 12, + "y": 0 + }, + "id": 3, + "options": { + "colorMode": "value", + "graphMode": "area", + "justifyMode": "center", + "reduceOptions": { + "calcs": [ + "lastNotNull" + ], + "fields": "", + "values": false + }, + "textMode": "auto" + }, + "targets": [ + { + "query": "SELECT mean(\"value\") FROM \"http_req_duration\" WHERE (\"test_run\" = 'drop-million-before') AND $timeFilter", + "rawQuery": true, + "refId": "A", + "resultFormat": "time_series" + } + ], + "title": "Before Average", + "type": "stat" + }, + { + "datasource": { + "type": "influxdb", + "uid": "k6-influxdb" + }, + "fieldConfig": { + "defaults": { + "unit": "ms" + }, + "overrides": [] + }, + "gridPos": { + "h": 6, + "w": 6, + "x": 18, + "y": 0 + }, + "id": 4, + "options": { + "colorMode": "value", + "graphMode": "area", + "justifyMode": "center", + "reduceOptions": { + "calcs": [ + "lastNotNull" + ], + "fields": "", + "values": false + }, + "textMode": "auto" + }, + "targets": [ + { + "query": "SELECT mean(\"value\") FROM \"http_req_duration\" WHERE (\"test_run\" = 'drop-million-optimized') AND $timeFilter", + "rawQuery": true, + "refId": "A", + "resultFormat": "time_series" + } + ], + "title": "Optimized Average", + "type": "stat" + }, + { + "datasource": { + "type": "influxdb", + "uid": "k6-influxdb" + }, + "fieldConfig": { + "defaults": { + "unit": "reqps" + }, + "overrides": [] + }, + "gridPos": { + "h": 9, + "w": 12, + "x": 0, + "y": 6 + }, + "id": 5, + "options": { + "legend": { + "calcs": [ + "mean", + "max" + ], + "displayMode": "table", + "placement": "bottom", + "showLegend": true + }, + "tooltip": { + "mode": "multi", + "sort": "desc" + } + }, + "targets": [ + { + "alias": "Before", + "query": "SELECT sum(\"value\") FROM \"http_reqs\" WHERE (\"test_run\" = 'drop-million-before') AND $timeFilter GROUP BY time(1s) fill(0)", + "rawQuery": true, + "refId": "A", + "resultFormat": "time_series" + }, + { + "alias": "Optimized", + "query": "SELECT sum(\"value\") FROM \"http_reqs\" WHERE (\"test_run\" = 'drop-million-optimized') AND $timeFilter GROUP BY time(1s) fill(0)", + "rawQuery": true, + "refId": "B", + "resultFormat": "time_series" + } + ], + "title": "Requests per Second", + "type": "timeseries" + }, + { + "datasource": { + "type": "influxdb", + "uid": "k6-influxdb" + }, + "fieldConfig": { + "defaults": { + "unit": "ms" + }, + "overrides": [] + }, + "gridPos": { + "h": 9, + "w": 12, + "x": 12, + "y": 6 + }, + "id": 6, + "options": { + "legend": { + "calcs": [ + "mean", + "max" + ], + "displayMode": "table", + "placement": "bottom", + "showLegend": true + }, + "tooltip": { + "mode": "multi", + "sort": "desc" + } + }, + "targets": [ + { + "alias": "Before", + "query": "SELECT mean(\"value\") FROM \"http_req_duration\" WHERE (\"test_run\" = 'drop-million-before') AND $timeFilter GROUP BY time(1s) fill(null)", + "rawQuery": true, + "refId": "A", + "resultFormat": "time_series" + }, + { + "alias": "Optimized", + "query": "SELECT mean(\"value\") FROM \"http_req_duration\" WHERE (\"test_run\" = 'drop-million-optimized') AND $timeFilter GROUP BY time(1s) fill(null)", + "rawQuery": true, + "refId": "B", + "resultFormat": "time_series" + } + ], + "title": "Response Time", + "type": "timeseries" + } + ], + "refresh": "5s", + "schemaVersion": 39, + "tags": [ + "k6", + "drop", + "index", + "performance" + ], + "time": { + "from": "now-24h", + "to": "now" + }, + "timepicker": {}, + "timezone": "browser", + "title": "Drop Million - Before Index Optimized", + "uid": "drop-million-comparison", + "version": 1 +} diff --git a/performance/grafana/provisioning/dashboards/dashboards.yml b/performance/grafana/provisioning/dashboards/dashboards.yml new file mode 100644 index 0000000..d0741a3 --- /dev/null +++ b/performance/grafana/provisioning/dashboards/dashboards.yml @@ -0,0 +1,11 @@ +apiVersion: 1 + +providers: + - name: k6 + folder: k6 + type: file + disableDeletion: false + editable: true + updateIntervalSeconds: 10 + options: + path: /var/lib/grafana/dashboards diff --git a/performance/grafana/provisioning/datasources/influxdb.yml b/performance/grafana/provisioning/datasources/influxdb.yml new file mode 100644 index 0000000..97fe737 --- /dev/null +++ b/performance/grafana/provisioning/datasources/influxdb.yml @@ -0,0 +1,14 @@ +apiVersion: 1 + +datasources: + - name: k6 InfluxDB + uid: k6-influxdb + type: influxdb + access: proxy + url: http://influxdb:8086 + database: k6 + isDefault: true + editable: false + jsonData: + httpMode: GET + timeInterval: 1s diff --git a/performance/k6/drop-list-index.js b/performance/k6/drop-list-index.js new file mode 100644 index 0000000..ef8a1fb --- /dev/null +++ b/performance/k6/drop-list-index.js @@ -0,0 +1,62 @@ +import http from 'k6/http'; +import { check } from 'k6'; + +const baseUrl = __ENV.BASE_URL || 'http://host.docker.internal:8080'; +const testRun = __ENV.TEST_RUN || 'drop-list-before-index'; +const authToken = __ENV.AUTH_TOKEN; + +if (!authToken) { + throw new Error('AUTH_TOKEN is required.'); +} + +export const options = { + scenarios: { + openDropsClosingSoon: { + executor: 'ramping-arrival-rate', + startRate: 10, + timeUnit: '1s', + preAllocatedVUs: 50, + maxVUs: 500, + stages: [ + { duration: '15s', target: 20 }, + { duration: '15s', target: 50 }, + { duration: '15s', target: 100 }, + { duration: '15s', target: 200 }, + { duration: '15s', target: 0 }, + ], + }, + }, + thresholds: { + http_req_failed: ['rate<0.01'], + http_req_duration: ['p(95)<2000'], + }, +}; + +export default function () { + const response = http.get( + `${baseUrl}/drops?status=OPEN&sortType=CLOSING_SOON&page=0&size=20`, + { + headers: { + Authorization: `Bearer ${authToken}`, + }, + tags: { + endpoint: 'drop-list-open-closing-soon', + test_run: testRun, + }, + } + ); + + check(response, { + 'Drop 목록 조회 응답이 200이다': (result) => result.status === 200, + '한 페이지는 최대 20개다': (result) => { + const content = result.json('content'); + return Array.isArray(content) && content.length <= 20; + }, + }); +} + +export function handleSummary(data) { + return { + [`/results/${testRun}.json`]: JSON.stringify(data, null, 2), + }; +} diff --git a/performance/results/drop-million-report.zip b/performance/results/drop-million-report.zip new file mode 100644 index 0000000000000000000000000000000000000000..836731f4492656613fa9279a549d2b2320738224 GIT binary patch literal 705872 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ü|H9AU)Ftil11M-N_HKJhA

id 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
(!@YaZ|Up@Qo0#rs!J~Zv12=+ys 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�h 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

)Sl#;3xE?{+=a)lj>@K4rh~nla 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 EG53Y^e+nyIONn2th8y;vbPs9{v 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≫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%0DT;^u|3aRF zI$_H7aK7LH#P4Z{^RKk;Z}>nmyO4+-aAwA#MnoU9+FEs6zz2sCEo>OqFWYbR%}Jqm z4OKdf)+~@zDCLN&KZk|4uQ&L-D*Tz=obTt~>qA~f4eXejaDEm&SG*He;+ux%M;{c6 z94Xh_FB?9O+v9ZsDnrZVvM*S3`EQPR@u1xN`(p{scVmFFct8ypK44?~)rDrBKOyHz zL*pMpnCFSRX#`SjU*KVXv%h+YnR+{3Cy5~E{#HZ=nAAQXm1uol0qyTbCiUdNkooqO zCkj2**D4s2od@%Ti%E1`DSz`YBKS8oj(q;ZrZi5IDMid9l>oiKz`C_*? zveM7QK!X`J8x{kZC~F#8=JIdEvw^Vb7-;)_vY)7$zf(}tR>|7w&Z3t##O~ulA8!{= zZzzcT{Lm_Qq=f4PC2`npM^g>}z(YT;^o!T9zHX?-GPIOMp7)$r23 z6P8CFW8$%8l2zS1OG{#UVXnAyXmPHIKxE{S5 zN*zNHkTN{|kCHQwcwk<^v|yNy5)6Z1yh|P{X*{cbVE7SIU>Up zk{=%FVR<;DO})HHLUOP>SZ)@ZNlFwsZpESLma?mBJbYFukF!b?9%r*MA***C1E4wm z_a1@D(|{%R7opV=lTt8#4c7ATl1C!t6V?We-%H9KoVNASB%ZeM16eJ*bk~DhHteP_ zqzH^m(uM4tNR1@8>0rg(uW=5^<}}rPDmA4X+08ccTeQ&URZ@zGT;Ut16dzwA$p$tq z0~NaCr5>fPN$=Q?-d367xCW5CFeSjWcm!SGX$w0K=6-#-EGzd|doD}-_3?!IAa;c5 zZggypzOf6I&~H;LT*vH*p8|tpB`-2`jXt??d)G-~27jlUoQ23!Zgv|5H^99}wAFSd z8(l19-wU3{t6415N~sgmPw$i~UICqc*FGx2 z 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 HJ;46~c@Cd# literal 0 HcmV?d00001 diff --git a/performance/results/drop-million-report/PR-review.md b/performance/results/drop-million-report/PR-review.md new file mode 100644 index 0000000..1503b67 --- /dev/null +++ b/performance/results/drop-million-report/PR-review.md @@ -0,0 +1,88 @@ +# Drop 100만 건 조회 성능 개선 + +## 🛠️ 주요 변경 사항 + +- 판매 중 Drop 첫 페이지를 마감 임박순으로 조회할 때 대량 조인·정렬이 발생하는 문제를 개선했습니다. +- 복합 인덱스를 적용한 뒤 효과를 확인하고, ID 선조회 및 조건부 count 조인 제거를 추가했습니다. +- 기존 Page 응답, 전체 개수, 검색·정렬 계약을 유지합니다. + +## ✨ Before / After + +| 지표 | Before | 인덱스 | 인덱스 + 쿼리 개선 | +|---|---:|---:|---:| +| 완료 HTTP 요청 | 633건 | 635건 | 1,897건 | +| 평균 응답 시간 | 45,193.56 ms | 44,797.13 ms | 13,892.99 ms | +| p95 응답 시간 | 59,998.36 ms | 59,998.19 ms | 23,460.92 ms | +| HTTP 실패율 | 82.46 % | 84.25 % | 0.00 % | +| 시작하지 못한 요청 | 4,807건 | 4,799건 | 3,727건 | + +![성능 비교](comparison.png) + +HTTP 완료 수에는 오류 응답·시간 초과도 포함됩니다. 시작하지 못한 요청은 k6의 dropped_iterations이며 서버가 거절한 요청 수와 다릅니다. p95는 실패 요청을 포함하며 Before의 약 60초는 클라이언트 시간 초과의 영향을 받습니다. + +## 실험 조건 + +- API: `GET /drops?status=OPEN&sortType=CLOSING_SOON&page=0&size=20` +- 상품 100,000건, Drop 1,000,000건, 공개 판매 중 500,000건. 판매자는 한 명인 집중 시나리오이며 실제 운영 규모라는 가정은 아닙니다. +- Docker MySQL 8.4, Spring 서버, Docker k6·InfluxDB·Grafana를 같은 Windows PC에서 실행했습니다. +- 75초 동안 10→20→50→100→200→0 RPS, 최대 500 VU, 종료 대기 30초. 단계별 1회 측정했습니다. +- 모든 단계에서 서버를 같은 설정으로 실행하고 API 사전 호출 후 측정했습니다. DB 버퍼 캐시는 초기화하지 않았습니다. +- 요청량·데이터·페이지 크기·인증·연결 풀 설정은 동일합니다. 인덱스 단계에서는 통계를 갱신했습니다. + +## 원인과 변경 코드 + +기존에는 상품·판매자를 조인한 결과에서 조건에 맞는 50만 건을 정렬했습니다. 인덱스를 추가해도 진단 실행 계획은 기존 외래키 조회를 선택했습니다. + +```java +// Before: 조인한 전체 후보를 정렬하고 페이지 조회 +selectFrom(drop).join(drop.product, product).fetchJoin() + .join(product.seller, user).fetchJoin() + .where(conditions).orderBy(order).offset(offset).limit(size); + +// After: 필요한 ID만 선조회하고 그 ID에 한해 상세 조인 +select(drop.id).from(drop).where(conditions) + .orderBy(order).offset(offset).limit(size); +selectFrom(drop).join(drop.product, product).fetchJoin() + .join(product.seller, user).fetchJoin() + .where(drop.id.in(ids)).orderBy(order); +``` + +위 코드는 흐름을 설명하는 발췌이며 실제 구현은 `DropRepositoryCustomImpl`입니다. 키워드가 있으면 ID·count 쿼리에도 상품·판매자 조인을 유지합니다. 키워드가 없으면 필수 FK 관계를 전제로 count 조인을 생략합니다. 상세 조회에서 정렬을 다시 지정해 IN 조건으로 순서가 바뀌지 않게 했습니다. + +인덱스: `(visible, close_at, id DESC, open_at, remaining_quantity, product_id)`. + +## SQL 진단 + +| 단계 | 목록 또는 ID 쿼리 | count | +|---|---:|---:| +| Before | 2,683ms | 1,916ms | +| 인덱스 | 3,293ms | 2,362ms | +| 쿼리 개선 | ID 20개 3.26ms | 714ms | + +진단용 SQL은 Drop 컬럼만 선택하므로 실제 API의 fetch join 전체 투영과 같지 않습니다. 최종 ID 쿼리 시간에는 후속 상세 쿼리가 포함되지 않습니다. 이 값들을 API 개선율로 환산하지 않았으며 API 비교는 위 k6 표를 사용합니다. + +## ⚠️ 주의 사항 및 남은 한계 + +- 정확한 totalElements를 유지하므로 최종 count도 인덱스 후보 약 80만 건을 읽습니다. 인덱스만으로 목표 부하를 모두 처리한다고 주장하지 않습니다. +- 단일 실행이라 반복 편차·통계적 유의성을 확인하지 않았습니다. 키워드 검색, 뒷페이지, 여러 판매자 분포의 성능은 이번 측정 범위 밖입니다. +- ID 선조회로 쿼리는 2회에서 3회로 증가합니다. 기존 read-only 트랜잭션 및 MySQL REPEATABLE READ 안에서 페이지와 상세를 읽습니다. +- 재고 컬럼을 포함하는 인덱스는 재고 변경 시 유지 비용이 있습니다. 재고 쓰기 부하 영향은 별도 검증이 필요합니다. +- Before/인덱스 단계의 시간 초과에서 기존 k6 JSON 검증이 null body 예외를 냈습니다. HTTP 지표는 저장됐으며 checks를 정확성 근거로 사용하지 않았습니다. +- 다음 후보: 정확한 전체 개수가 불필요한 경우 별도 Slice API, 검색어별 실행 계획 개선. API 계약 변경은 팀 합의 후 진행합니다. + +## 🧪 테스트 결과 + +- [x] Drop 테스트 43개 통과, 실패 0개, 오류 0개 +- [x] MySQL 통합 테스트 2개 포함: 키워드 검색 페이징·빈 페이지·전체 개수와 기본 조회의 기존 조인 쿼리 결과 일치 +- [x] k6 세 단계 원본 결과 저장 +- [ ] 최종 p95 2초 목표 미달 + +## 💡 관련 이슈 + +- 이슈 번호 미확인. 실제 번호를 확인한 뒤 연결합니다. + +## GitHub에 이미지 올리기 + +PR 편집기에 `comparison.png`와 `grafana.png`를 드래그하면 GitHub 이미지 주소가 생성됩니다. 본문 이미지 경로를 해당 주소로 바꾸면 됩니다. 로컬 C: 경로는 GitHub에서 표시되지 않습니다. + +![Grafana 측정 화면](grafana.png) diff --git a/performance/results/drop-million-report/comparison.png b/performance/results/drop-million-report/comparison.png new file mode 100644 index 0000000000000000000000000000000000000000..76824dc293fed406a4ba8c4475d9bad8d9621721 GIT binary patch literal 75972 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 C--S_8_)wKQ~Uw&p>t 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�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 literal 0 HcmV?d00001 diff --git a/performance/results/drop-million-report/drop-index-after-explain.sql b/performance/results/drop-million-report/drop-index-after-explain.sql new file mode 100644 index 0000000..1c3bfc8 --- /dev/null +++ b/performance/results/drop-million-report/drop-index-after-explain.sql @@ -0,0 +1,33 @@ +EXPLAIN ANALYZE +SELECT + d.id, + d.product_id, + d.price, + d.initial_quantity, + d.remaining_quantity, + d.discount_rate, + d.purchase_limit, + d.visible, + d.open_at, + d.close_at, + d.created_at, + d.updated_at +FROM drops d +INNER JOIN products p ON p.id = d.product_id +INNER JOIN users u ON u.id = p.seller_id +WHERE d.visible = b'1' + AND d.open_at <= NOW() + AND d.close_at > NOW() + AND d.remaining_quantity > 0 +ORDER BY d.close_at ASC, d.id DESC +LIMIT 20; + +EXPLAIN ANALYZE +SELECT COUNT(d.id) +FROM drops d +INNER JOIN products p ON p.id = d.product_id +INNER JOIN users u ON u.id = p.seller_id +WHERE d.visible = b'1' + AND d.open_at <= NOW() + AND d.close_at > NOW() + AND d.remaining_quantity > 0; diff --git a/performance/results/drop-million-report/drop-index-before-explain.sql b/performance/results/drop-million-report/drop-index-before-explain.sql new file mode 100644 index 0000000..1c3bfc8 --- /dev/null +++ b/performance/results/drop-million-report/drop-index-before-explain.sql @@ -0,0 +1,33 @@ +EXPLAIN ANALYZE +SELECT + d.id, + d.product_id, + d.price, + d.initial_quantity, + d.remaining_quantity, + d.discount_rate, + d.purchase_limit, + d.visible, + d.open_at, + d.close_at, + d.created_at, + d.updated_at +FROM drops d +INNER JOIN products p ON p.id = d.product_id +INNER JOIN users u ON u.id = p.seller_id +WHERE d.visible = b'1' + AND d.open_at <= NOW() + AND d.close_at > NOW() + AND d.remaining_quantity > 0 +ORDER BY d.close_at ASC, d.id DESC +LIMIT 20; + +EXPLAIN ANALYZE +SELECT COUNT(d.id) +FROM drops d +INNER JOIN products p ON p.id = d.product_id +INNER JOIN users u ON u.id = p.seller_id +WHERE d.visible = b'1' + AND d.open_at <= NOW() + AND d.close_at > NOW() + AND d.remaining_quantity > 0; diff --git a/performance/results/drop-million-report/drop-index-optimized-explain.sql b/performance/results/drop-million-report/drop-index-optimized-explain.sql new file mode 100644 index 0000000..10f5ce4 --- /dev/null +++ b/performance/results/drop-million-report/drop-index-optimized-explain.sql @@ -0,0 +1,14 @@ +-- ID 선조회: 조인 없이 정렬된 인덱스에서 페이지를 찾는다. +EXPLAIN ANALYZE +SELECT d.id FROM drops d +WHERE d.visible = b'1' AND d.open_at <= NOW() + AND d.close_at > NOW() AND d.remaining_quantity > 0 +ORDER BY d.close_at ASC, d.id DESC LIMIT 20; + +-- count: 키워드가 없는 경우 필수 FK 조인을 생략한다. +EXPLAIN ANALYZE +SELECT COUNT(d.id) FROM drops d +WHERE d.visible = b'1' AND d.open_at <= NOW() + AND d.close_at > NOW() AND d.remaining_quantity > 0; + +-- 상세 fetch join은 위에서 선택된 ID 20개에만 수행된다. diff --git a/performance/results/drop-million-report/drop-index-seed.sql b/performance/results/drop-million-report/drop-index-seed.sql new file mode 100644 index 0000000..0990eb4 --- /dev/null +++ b/performance/results/drop-million-report/drop-index-seed.sql @@ -0,0 +1,173 @@ +SET SESSION cte_max_recursion_depth = 1000001; + +SET @performance_marker = 'DROP_INDEX_PERFORMANCE_PRODUCT'; +SET @product_count = 100000; +SET @drop_count = 1000000; + +SET @index_exists = ( + SELECT COUNT(*) + FROM information_schema.statistics + WHERE table_schema = DATABASE() + AND table_name = 'drops' + AND index_name = 'idx_drops_public_closing' +); + +SET @drop_index_sql = IF( + @index_exists > 0, + 'DROP INDEX idx_drops_public_closing ON drops', + 'SELECT 1' +); + +PREPARE drop_index_statement FROM @drop_index_sql; +EXECUTE drop_index_statement; +DEALLOCATE PREPARE drop_index_statement; + +INSERT INTO users ( + email, + password, + username, + role, + deleted_at, + created_at, + updated_at +) +SELECT + 'drop-index-seller@dropit.test', + 'local-performance-password', + 'drop-index-seller', + 'SELLER', + NULL, + NOW(), + NOW() +WHERE NOT EXISTS ( + SELECT 1 + FROM users + WHERE email = 'drop-index-seller@dropit.test' +); + +SET @seller_id = ( + SELECT id + FROM users + WHERE email = 'drop-index-seller@dropit.test' + LIMIT 1 +); + +DELETE FROM drops +WHERE product_id IN ( + SELECT id + FROM products + WHERE description = @performance_marker +); + +DELETE FROM products +WHERE description = @performance_marker; + +INSERT INTO products ( + seller_id, + name, + description, + image_url, + created_at, + updated_at +) +WITH RECURSIVE product_numbers AS ( + SELECT 1 AS number + + UNION ALL + + SELECT number + 1 + FROM product_numbers + WHERE number < @product_count +) +SELECT + @seller_id, + CONCAT('Drop Index Performance Product ', number), + @performance_marker, + NULL, + DATE_SUB(NOW(), INTERVAL MOD(number, 365) DAY), + NOW() +FROM product_numbers; + +INSERT INTO drops ( + product_id, + price, + initial_quantity, + remaining_quantity, + discount_rate, + purchase_limit, + visible, + open_at, + close_at, + created_at, + updated_at +) +WITH RECURSIVE numbers AS ( + SELECT 1 AS number + + UNION ALL + + SELECT number + 1 + FROM numbers + WHERE number < @drop_count +), +performance_products AS ( + SELECT + id, + ROW_NUMBER() OVER (ORDER BY id) AS product_number + FROM products + WHERE description = @performance_marker +) +SELECT + performance_products.id, + 30000 + MOD(numbers.number, 70000), + 100, + CASE MOD(numbers.number, 10) + WHEN 7 THEN 0 + ELSE 100 + END, + MOD(numbers.number, 51), + 2, + CASE MOD(numbers.number, 10) + WHEN 9 THEN b'0' + ELSE b'1' + END, + CASE + WHEN MOD(numbers.number, 10) BETWEEN 0 AND 4 + THEN DATE_SUB(NOW(), INTERVAL 7 DAY) + WHEN MOD(numbers.number, 10) BETWEEN 5 AND 6 + THEN DATE_ADD(NOW(), INTERVAL 7 DAY) + WHEN MOD(numbers.number, 10) = 7 + THEN DATE_SUB(NOW(), INTERVAL 7 DAY) + WHEN MOD(numbers.number, 10) = 8 + THEN DATE_SUB(NOW(), INTERVAL 14 DAY) + ELSE DATE_SUB(NOW(), INTERVAL 7 DAY) + END, + CASE + WHEN MOD(numbers.number, 10) BETWEEN 0 AND 4 + THEN DATE_ADD(NOW(), INTERVAL (7 + MOD(numbers.number, 30)) DAY) + WHEN MOD(numbers.number, 10) BETWEEN 5 AND 6 + THEN DATE_ADD(NOW(), INTERVAL (37 + MOD(numbers.number, 30)) DAY) + WHEN MOD(numbers.number, 10) = 7 + THEN DATE_ADD(NOW(), INTERVAL (7 + MOD(numbers.number, 30)) DAY) + WHEN MOD(numbers.number, 10) = 8 + THEN DATE_SUB(NOW(), INTERVAL 7 DAY) + ELSE DATE_ADD(NOW(), INTERVAL (7 + MOD(numbers.number, 30)) DAY) + END, + DATE_SUB(NOW(), INTERVAL MOD(numbers.number, 365) DAY), + NOW() +FROM numbers +INNER JOIN performance_products + ON performance_products.product_number = MOD(numbers.number - 1, @product_count) + 1; + +SELECT + COUNT(DISTINCT products.id) AS performance_product_count, + COUNT(drops.id) AS total_drop_count, + SUM( + drops.visible = b'1' + AND drops.open_at <= NOW() + AND drops.close_at > NOW() + AND drops.remaining_quantity > 0 + ) AS open_public_drop_count +FROM products +INNER JOIN drops ON drops.product_id = products.id +WHERE products.description = @performance_marker; diff --git a/performance/results/drop-million-report/drop-list-index.js b/performance/results/drop-million-report/drop-list-index.js new file mode 100644 index 0000000..ef8a1fb --- /dev/null +++ b/performance/results/drop-million-report/drop-list-index.js @@ -0,0 +1,62 @@ +import http from 'k6/http'; +import { check } from 'k6'; + +const baseUrl = __ENV.BASE_URL || 'http://host.docker.internal:8080'; +const testRun = __ENV.TEST_RUN || 'drop-list-before-index'; +const authToken = __ENV.AUTH_TOKEN; + +if (!authToken) { + throw new Error('AUTH_TOKEN is required.'); +} + +export const options = { + scenarios: { + openDropsClosingSoon: { + executor: 'ramping-arrival-rate', + startRate: 10, + timeUnit: '1s', + preAllocatedVUs: 50, + maxVUs: 500, + stages: [ + { duration: '15s', target: 20 }, + { duration: '15s', target: 50 }, + { duration: '15s', target: 100 }, + { duration: '15s', target: 200 }, + { duration: '15s', target: 0 }, + ], + }, + }, + thresholds: { + http_req_failed: ['rate<0.01'], + http_req_duration: ['p(95)<2000'], + }, +}; + +export default function () { + const response = http.get( + `${baseUrl}/drops?status=OPEN&sortType=CLOSING_SOON&page=0&size=20`, + { + headers: { + Authorization: `Bearer ${authToken}`, + }, + tags: { + endpoint: 'drop-list-open-closing-soon', + test_run: testRun, + }, + } + ); + + check(response, { + 'Drop 목록 조회 응답이 200이다': (result) => result.status === 200, + '한 페이지는 최대 20개다': (result) => { + const content = result.json('content'); + return Array.isArray(content) && content.length <= 20; + }, + }); +} + +export function handleSummary(data) { + return { + [`/results/${testRun}.json`]: JSON.stringify(data, null, 2), + }; +} diff --git a/performance/results/drop-million-report/drop-million-after-explain.txt b/performance/results/drop-million-report/drop-million-after-explain.txt new file mode 100644 index 0000000..86ae37c --- /dev/null +++ b/performance/results/drop-million-report/drop-million-after-explain.txt @@ -0,0 +1,4 @@ +EXPLAIN +-> Limit: 20 row(s) (actual time=3293..3293 rows=20 loops=1)\n -> Sort: d.close_at, d.id DESC, limit input to 20 row(s) per chunk (actual time=3293..3293 rows=20 loops=1)\n -> Stream results (cost=100238 rows=10880) (actual time=5.84..3196 rows=500000 loops=1)\n -> Nested loop inner join (cost=100238 rows=10880) (actual time=5.7..2986 rows=500000 loops=1)\n -> Nested loop inner join (cost=2041 rows=20080) (actual time=2.97..51.1 rows=100000 loops=1)\n -> Covering index scan on u using UK6dotkott2kjsp8vw4d0m25fb7 (cost=0.45 rows=2) (actual time=1.43..2.45 rows=2 loops=1)\n -> Covering index lookup on p using FKbgw3lyxhsml3kfqnfr45o0vbj (seller_id=u.id) (cost=518 rows=10040) (actual time=0.71..21.6 rows=50000 loops=2)\n -> Filter: ((d.`visible` = 0x01) and (d.open_at <= (now())) and (d.close_at > (now())) and (d.remaining_quantity > 0)) (cost=3.91 rows=0.542) (actual time=0.0275..0.0289 rows=5 loops=100000)\n -> Index lookup on d using FK5fijulf0obt0d6wdvo34c3wcm (product_id=p.id) (cost=3.91 rows=9.75) (actual time=0.026..0.0274 rows=10 loops=100000)\n +EXPLAIN +-> Aggregate: count(d.id) (cost=72990 rows=1) (actual time=2362..2362 rows=1 loops=1)\n -> Nested loop inner join (cost=71902 rows=10880) (actual time=1.04..2345 rows=500000 loops=1)\n -> Nested loop inner join (cost=2022 rows=20080) (actual time=0.468..41.5 rows=100000 loops=1)\n -> Covering index scan on u using UK6dotkott2kjsp8vw4d0m25fb7 (cost=0.45 rows=2) (actual time=0.016..0.727 rows=2 loops=1)\n -> Covering index lookup on p using FKbgw3lyxhsml3kfqnfr45o0vbj (seller_id=u.id) (cost=509 rows=10040) (actual time=0.224..17.7 rows=50000 loops=2)\n -> Filter: ((d.`visible` = 0x01) and (d.open_at <= (now())) and (d.close_at > (now())) and (d.remaining_quantity > 0)) (cost=2.5 rows=0.542) (actual time=0.0215..0.0226 rows=5 loops=100000)\n -> Index lookup on d using FK5fijulf0obt0d6wdvo34c3wcm (product_id=p.id) (cost=2.5 rows=9.75) (actual time=0.0202..0.0213 rows=10 loops=100000)\n diff --git a/performance/results/drop-million-report/drop-million-after.json b/performance/results/drop-million-report/drop-million-after.json new file mode 100644 index 0000000..31d55f7 --- /dev/null +++ b/performance/results/drop-million-report/drop-million-after.json @@ -0,0 +1,237 @@ +{ + "metrics": { + "data_received": { + "contains": "data", + "values": { + "count": 906460, + "rate": 8630.763827863526 + }, + "type": "counter" + }, + "data_sent": { + "contains": "data", + "values": { + "count": 316800, + "rate": 3016.3779765981567 + }, + "type": "counter" + }, + "dropped_iterations": { + "type": "counter", + "contains": "default", + "values": { + "rate": 45.69317521999544, + "count": 4799 + } + }, + "http_reqs": { + "values": { + "count": 635, + "rate": 6.046085906375724 + }, + "type": "counter", + "contains": "default" + }, + "vus": { + "type": "gauge", + "contains": "default", + "values": { + "value": 190, + "min": 10, + "max": 500 + } + }, + "http_req_duration{expected_response:true}": { + "type": "trend", + "contains": "time", + "values": { + "p(90)": 56584.2064628, + "p(95)": 58742.9753413, + "avg": 34323.692841070006, + "min": 7523.302737, + "med": 37750.737227, + "max": 58975.870409 + } + }, + "iteration_duration": { + "type": "trend", + "contains": "time", + "values": { + "min": 7526.616638, + "med": 48175.235512, + "max": 60011.027681, + "p(90)": 60001.9951246, + "p(95)": 60002.656534300004, + "avg": 44809.79793585037 + } + }, + "http_req_blocked": { + "type": "trend", + "contains": "time", + "values": { + "p(90)": 15.246710600000009, + "p(95)": 19.65092449999999, + "avg": 6.616195376377948, + "min": 0.004258, + "med": 3.605694, + "max": 150.219806 + } + }, + "http_req_connecting": { + "type": "trend", + "contains": "time", + "values": { + "avg": 6.476096869291338, + "min": 0, + "med": 3.404706, + "max": 150.111358, + "p(90)": 15.080012000000007, + "p(95)": 19.4628798 + } + }, + "checks": { + "type": "rate", + "contains": "default", + "values": { + "rate": 0.15748031496062992, + "passes": 200, + "fails": 1070 + } + }, + "http_req_duration": { + "type": "trend", + "contains": "time", + "values": { + "p(90)": 59997.781072, + "p(95)": 59998.189304, + "avg": 44797.13444110866, + "min": 7523.302737, + "med": 48151.948311, + "max": 60004.853025 + }, + "thresholds": { + "p(95)<2000": { + "ok": false + } + } + }, + "http_req_sending": { + "contains": "time", + "values": { + "avg": 0.1898148204724407, + "min": 0.018646, + "med": 0.127944, + "max": 10.310941, + "p(90)": 0.22461160000000002, + "p(95)": 0.28948139999999994 + }, + "type": "trend" + }, + "http_req_waiting": { + "type": "trend", + "contains": "time", + "values": { + "avg": 44796.22878477797, + "min": 7517.075616, + "med": 48151.572723, + "max": 60004.594369, + "p(90)": 59997.7447038, + "p(95)": 59998.155909199995 + } + }, + "http_req_receiving": { + "type": "trend", + "contains": "time", + "values": { + "max": 17.176256, + "p(90)": 1.3188148000000004, + "p(95)": 5.268856099999993, + "avg": 0.71584151023622, + "min": 0, + "med": 0.123255 + } + }, + "iterations": { + "type": "counter", + "contains": "default", + "values": { + "count": 635, + "rate": 6.046085906375724 + } + }, + "http_req_failed": { + "type": "rate", + "contains": "default", + "values": { + "fails": 100, + "rate": 0.84251968503937, + "passes": 535 + }, + "thresholds": { + "rate<0.01": { + "ok": false + } + } + }, + "vus_max": { + "type": "gauge", + "contains": "default", + "values": { + "min": 50, + "max": 500, + "value": 500 + } + }, + "http_req_tls_handshaking": { + "type": "trend", + "contains": "time", + "values": { + "avg": 0, + "min": 0, + "med": 0, + "max": 0, + "p(90)": 0, + "p(95)": 0 + } + } + }, + "root_group": { + "name": "", + "path": "", + "id": "d41d8cd98f00b204e9800998ecf8427e", + "groups": [], + "checks": [ + { + "name": "Drop 목록 조회 응답이 200이다", + "path": "::Drop 목록 조회 응답이 200이다", + "id": "634919e561b13374f34820e16887ae65", + "passes": 100, + "fails": 535 + }, + { + "passes": 100, + "fails": 535, + "name": "한 페이지는 최대 20개다", + "path": "::한 페이지는 최대 20개다", + "id": "c650329e4a118e15d6952cc13d36f54a" + } + ] + }, + "options": { + "summaryTrendStats": [ + "avg", + "min", + "med", + "max", + "p(90)", + "p(95)" + ], + "summaryTimeUnit": "", + "noColor": false + }, + "state": { + "isStdOutTTY": false, + "isStdErrTTY": false, + "testRunDurationMs": 105026.625462 + } +} \ No newline at end of file diff --git a/performance/results/drop-million-report/drop-million-before-explain.txt b/performance/results/drop-million-report/drop-million-before-explain.txt new file mode 100644 index 0000000..0d2d248 --- /dev/null +++ b/performance/results/drop-million-report/drop-million-before-explain.txt @@ -0,0 +1,4 @@ +EXPLAIN +-> Limit: 20 row(s) (actual time=2683..2683 rows=20 loops=1)\n -> Sort: d.close_at, d.id DESC, limit input to 20 row(s) per chunk (actual time=2683..2683 rows=20 loops=1)\n -> Stream results (cost=89497 rows=3695) (actual time=6.45..2590 rows=500000 loops=1)\n -> Nested loop inner join (cost=89497 rows=3695) (actual time=6.32..2389 rows=500000 loops=1)\n -> Nested loop inner join (cost=2050 rows=20080) (actual time=4.08..63.5 rows=100000 loops=1)\n -> Covering index scan on u using UK6dotkott2kjsp8vw4d0m25fb7 (cost=1.2 rows=2) (actual time=1.36..2.1 rows=2 loops=1)\n -> Covering index lookup on p using FKbgw3lyxhsml3kfqnfr45o0vbj (seller_id=u.id) (cost=522 rows=10040) (actual time=1.33..28.1 rows=50000 loops=2)\n -> Filter: ((d.`visible` = 0x01) and (d.open_at <= (now())) and (d.close_at > (now())) and (d.remaining_quantity > 0)) (cost=3.36 rows=0.184) (actual time=0.0215..0.0228 rows=5 loops=100000)\n -> Index lookup on d using FK5fijulf0obt0d6wdvo34c3wcm (product_id=p.id) (cost=3.36 rows=9.94) (actual time=0.0202..0.0215 rows=10 loops=100000)\n +EXPLAIN +-> Aggregate: count(d.id) (cost=72259 rows=1) (actual time=1916..1916 rows=1 loops=1)\n -> Nested loop inner join (cost=71889 rows=3695) (actual time=1.4..1900 rows=500000 loops=1)\n -> Nested loop inner join (cost=2026 rows=20080) (actual time=1.04..49 rows=100000 loops=1)\n -> Covering index scan on u using UK6dotkott2kjsp8vw4d0m25fb7 (cost=1.2 rows=2) (actual time=0.0114..0.724 rows=2 loops=1)\n -> Covering index lookup on p using FKbgw3lyxhsml3kfqnfr45o0vbj (seller_id=u.id) (cost=510 rows=10040) (actual time=0.512..21.6 rows=50000 loops=2)\n -> Filter: ((d.`visible` = 0x01) and (d.open_at <= (now())) and (d.close_at > (now())) and (d.remaining_quantity > 0)) (cost=2.49 rows=0.184) (actual time=0.0171..0.0181 rows=5 loops=100000)\n -> Index lookup on d using FK5fijulf0obt0d6wdvo34c3wcm (product_id=p.id) (cost=2.49 rows=9.94) (actual time=0.016..0.0169 rows=10 loops=100000)\n diff --git a/performance/results/drop-million-report/drop-million-before.json b/performance/results/drop-million-report/drop-million-before.json new file mode 100644 index 0000000..949dbef --- /dev/null +++ b/performance/results/drop-million-report/drop-million-before.json @@ -0,0 +1,237 @@ +{ + "root_group": { + "groups": [], + "checks": [ + { + "name": "Drop 목록 조회 응답이 200이다", + "path": "::Drop 목록 조회 응답이 200이다", + "id": "634919e561b13374f34820e16887ae65", + "passes": 111, + "fails": 522 + }, + { + "name": "한 페이지는 최대 20개다", + "path": "::한 페이지는 최대 20개다", + "id": "c650329e4a118e15d6952cc13d36f54a", + "passes": 111, + "fails": 522 + } + ], + "name": "", + "path": "", + "id": "d41d8cd98f00b204e9800998ecf8427e" + }, + "options": { + "summaryTrendStats": [ + "avg", + "min", + "med", + "max", + "p(90)", + "p(95)" + ], + "summaryTimeUnit": "", + "noColor": false + }, + "state": { + "isStdOutTTY": false, + "isStdErrTTY": false, + "testRunDurationMs": 105029.143853 + }, + "metrics": { + "http_req_duration{expected_response:true}": { + "type": "trend", + "contains": "time", + "values": { + "min": 7228.713523, + "med": 37166.116704, + "max": 56567.531669, + "p(90)": 52991.271195, + "p(95)": 56380.2768525, + "avg": 34309.194948594595 + } + }, + "http_req_receiving": { + "type": "trend", + "contains": "time", + "values": { + "avg": 0.2792413917851501, + "min": 0, + "med": 0.117637, + "max": 16.908198, + "p(90)": 0.4495614000000024, + "p(95)": 1.279052199999999 + } + }, + "http_req_blocked": { + "contains": "time", + "values": { + "avg": 5.823815753554504, + "min": 0.004789, + "med": 3.642297, + "max": 80.002048, + "p(90)": 13.158617600000001, + "p(95)": 18.057035999999993 + }, + "type": "trend" + }, + "http_req_duration": { + "contains": "time", + "values": { + "avg": 45193.56148846289, + "min": 7228.713523, + "med": 48285.694827, + "max": 60011.133816, + "p(90)": 59997.709035, + "p(95)": 59998.3564662 + }, + "thresholds": { + "p(95)<2000": { + "ok": false + } + }, + "type": "trend" + }, + "http_req_connecting": { + "type": "trend", + "contains": "time", + "values": { + "avg": 5.67712754344392, + "min": 0, + "med": 3.507404, + "max": 79.880132, + "p(90)": 13.001469800000006, + "p(95)": 17.880307999999992 + } + }, + "iterations": { + "values": { + "count": 633, + "rate": 6.026898599553988 + }, + "type": "counter", + "contains": "default" + }, + "dropped_iterations": { + "values": { + "count": 4807, + "rate": 45.768248922679334 + }, + "type": "counter", + "contains": "default" + }, + "http_req_failed": { + "type": "rate", + "contains": "default", + "values": { + "rate": 0.8246445497630331, + "passes": 522, + "fails": 111 + }, + "thresholds": { + "rate<0.01": { + "ok": false + } + } + }, + "vus_max": { + "values": { + "value": 500, + "min": 50, + "max": 500 + }, + "type": "gauge", + "contains": "default" + }, + "http_req_waiting": { + "type": "trend", + "contains": "time", + "values": { + "max": 60011.019155, + "p(90)": 59997.6201646, + "p(95)": 59998.3136828, + "avg": 45193.10419417537, + "min": 7228.38779, + "med": 48285.444165 + } + }, + "iteration_duration": { + "contains": "time", + "values": { + "max": 60017.214523, + "p(90)": 60002.066131800006, + "p(95)": 60003.3647396, + "avg": 45202.92266992099, + "min": 7231.561481, + "med": 48301.07319 + }, + "type": "trend" + }, + "vus": { + "type": "gauge", + "contains": "default", + "values": { + "value": 184, + "min": 10, + "max": 500 + } + }, + "http_reqs": { + "type": "counter", + "contains": "default", + "values": { + "count": 633, + "rate": 6.026898599553988 + } + }, + "data_sent": { + "type": "counter", + "contains": "data", + "values": { + "count": 313728, + "rate": 2987.0566253410325 + } + }, + "data_received": { + "type": "counter", + "contains": "data", + "values": { + "count": 981678, + "rate": 9346.720005391722 + } + }, + "http_req_sending": { + "type": "trend", + "contains": "time", + "values": { + "avg": 0.1780528957345971, + "min": 0.017734, + "med": 0.11968, + "max": 4.613684, + "p(90)": 0.2269494000000001, + "p(95)": 0.30788039999999994 + } + }, + "checks": { + "contains": "default", + "values": { + "rate": 0.17535545023696683, + "passes": 222, + "fails": 1044 + }, + "type": "rate" + }, + "http_req_tls_handshaking": { + "type": "trend", + "contains": "time", + "values": { + "p(90)": 0, + "p(95)": 0, + "avg": 0, + "min": 0, + "med": 0, + "max": 0 + } + } + } +} \ No newline at end of file diff --git a/performance/results/drop-million-report/drop-million-optimized-explain.txt b/performance/results/drop-million-report/drop-million-optimized-explain.txt new file mode 100644 index 0000000..d2c6221 --- /dev/null +++ b/performance/results/drop-million-report/drop-million-optimized-explain.txt @@ -0,0 +1,4 @@ +EXPLAIN +-> Limit: 20 row(s) (cost=91094 rows=20) (actual time=3.19..3.26 rows=20 loops=1)\n -> Filter: ((d.`visible` = 0x01) and (d.open_at <= (now())) and (d.close_at > (now())) and (d.remaining_quantity > 0)) (cost=91094 rows=55224) (actual time=3.15..3.22 rows=20 loops=1)\n -> Covering index range scan on d using idx_drops_public_closing over (visible = 1 AND '2026-09-10 06:54:22.000000' < close_at) (cost=91094 rows=497113) (actual time=2.68..2.74 rows=20 loops=1)\n +EXPLAIN +-> Aggregate: count(d.id) (cost=96616 rows=1) (actual time=714..714 rows=1 loops=1)\n -> Filter: ((d.`visible` = 0x01) and (d.open_at <= (now())) and (d.close_at > (now())) and (d.remaining_quantity > 0)) (cost=91094 rows=55224) (actual time=0.243..700 rows=500000 loops=1)\n -> Covering index range scan on d using idx_drops_public_closing over (visible = 1 AND '2026-09-10 06:54:22.000000' < close_at) (cost=91094 rows=497113) (actual time=0.214..621 rows=800000 loops=1)\n diff --git a/performance/results/drop-million-report/drop-million-optimized.json b/performance/results/drop-million-report/drop-million-optimized.json new file mode 100644 index 0000000..cbbafd3 --- /dev/null +++ b/performance/results/drop-million-report/drop-million-optimized.json @@ -0,0 +1,237 @@ +{ + "root_group": { + "checks": [ + { + "fails": 0, + "name": "Drop 목록 조회 응답이 200이다", + "path": "::Drop 목록 조회 응답이 200이다", + "id": "634919e561b13374f34820e16887ae65", + "passes": 1897 + }, + { + "name": "한 페이지는 최대 20개다", + "path": "::한 페이지는 최대 20개다", + "id": "c650329e4a118e15d6952cc13d36f54a", + "passes": 1897, + "fails": 0 + } + ], + "name": "", + "path": "", + "id": "d41d8cd98f00b204e9800998ecf8427e", + "groups": [] + }, + "options": { + "summaryTrendStats": [ + "avg", + "min", + "med", + "max", + "p(90)", + "p(95)" + ], + "summaryTimeUnit": "", + "noColor": false + }, + "state": { + "isStdOutTTY": false, + "isStdErrTTY": false, + "testRunDurationMs": 95832.95986 + }, + "metrics": { + "http_req_tls_handshaking": { + "values": { + "avg": 0, + "min": 0, + "med": 0, + "max": 0, + "p(90)": 0, + "p(95)": 0 + }, + "type": "trend", + "contains": "time" + }, + "dropped_iterations": { + "type": "counter", + "contains": "default", + "values": { + "count": 3727, + "rate": 38.89058634362 + } + }, + "http_req_sending": { + "values": { + "avg": 0.11926170005271483, + "min": 0.008615, + "med": 0.048182, + "max": 19.448594, + "p(90)": 0.1678362, + "p(95)": 0.23836719999999967 + }, + "type": "trend", + "contains": "time" + }, + "http_req_waiting": { + "type": "trend", + "contains": "time", + "values": { + "min": 224.629885, + "med": 14778.714011, + "max": 32045.251855, + "p(90)": 23330.129581, + "p(95)": 23460.586428, + "avg": 13890.367516205584 + } + }, + "checks": { + "values": { + "rate": 1, + "passes": 3794, + "fails": 0 + }, + "type": "rate", + "contains": "default" + }, + "vus": { + "type": "gauge", + "contains": "default", + "values": { + "value": 22, + "min": 4, + "max": 500 + } + }, + "http_reqs": { + "type": "counter", + "contains": "default", + "values": { + "count": 1897, + "rate": 19.794859751501782 + } + }, + "http_req_blocked": { + "type": "trend", + "contains": "time", + "values": { + "avg": 3.3112790801265137, + "min": 0.004629, + "med": 0.009428, + "max": 315.597063, + "p(90)": 9.380277200000004, + "p(95)": 17.84343059999993 + } + }, + "http_req_receiving": { + "values": { + "med": 0.818686, + "max": 152.158865, + "p(90)": 5.521724600000002, + "p(95)": 9.082953199999986, + "avg": 2.504092324196103, + "min": 0.051593 + }, + "type": "trend", + "contains": "time" + }, + "http_req_failed": { + "type": "rate", + "contains": "default", + "values": { + "rate": 0, + "passes": 0, + "fails": 1897 + }, + "thresholds": { + "rate<0.01": { + "ok": true + } + } + }, + "vus_max": { + "type": "gauge", + "contains": "default", + "values": { + "value": 500, + "min": 50, + "max": 500 + } + }, + "iteration_duration": { + "type": "trend", + "contains": "time", + "values": { + "min": 225.470518, + "med": 14783.078036, + "max": 32048.978165, + "p(90)": 23336.218418200002, + "p(95)": 23464.499679999997, + "avg": 13897.89624026411 + } + }, + "http_req_duration": { + "type": "trend", + "contains": "time", + "values": { + "avg": 13892.990870229834, + "min": 224.965742, + "med": 14779.517483, + "max": 32045.499983, + "p(90)": 23332.6694232, + "p(95)": 23460.9237606 + }, + "thresholds": { + "p(95)<2000": { + "ok": false + } + } + }, + "iterations": { + "contains": "default", + "values": { + "count": 1897, + "rate": 19.794859751501782 + }, + "type": "counter" + }, + "http_req_duration{expected_response:true}": { + "type": "trend", + "contains": "time", + "values": { + "avg": 13892.990870229834, + "min": 224.965742, + "med": 14779.517483, + "max": 32045.499983, + "p(90)": 23332.6694232, + "p(95)": 23460.9237606 + } + }, + "data_received": { + "contains": "data", + "values": { + "count": 14678986, + "rate": 153172.6247571208 + }, + "type": "counter" + }, + "data_sent": { + "type": "counter", + "contains": "data", + "values": { + "count": 728448, + "rate": 7601.226144576684 + } + }, + "http_req_connecting": { + "type": "trend", + "contains": "time", + "values": { + "avg": 3.227838934633633, + "min": 0, + "med": 0, + "max": 315.522017, + "p(90)": 9.217130400000002, + "p(95)": 17.270925399999985 + } + } + } +} \ No newline at end of file diff --git a/performance/results/drop-million-report/grafana.png b/performance/results/drop-million-report/grafana.png new file mode 100644 index 0000000000000000000000000000000000000000..00cb8897b911150328a69ddf0ae78f0cf9beebfc GIT binary patch literal 276724 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

}Fh&QOSLz-?oQOB8;~2kMlI4g1 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 literal 0 HcmV?d00001 diff --git a/performance/results/drop-million-report/report.html b/performance/results/drop-million-report/report.html new file mode 100644 index 0000000..6e48801 --- /dev/null +++ b/performance/results/drop-million-report/report.html @@ -0,0 +1 @@ +Drop 성능 비교

Drop 100만 건 조회 성능 개선

상품 10만 건 · 공개 판매 중 Drop 50만 건 · 단계별 1회 측정

Before / After

지표Before인덱스쿼리 개선
완료 HTTP 요청633건635건1,897건
평균 응답 시간45,193.56 ms44,797.13 ms13,892.99 ms
p95 응답 시간59,998.36 ms59,998.19 ms23,460.92 ms
HTTP 실패율82.46 %84.25 %0.00 %
시작하지 못한 요청4,807건4,799건3,727건

무엇을 바꿨나?

인덱스만 추가했을 때는 기존 조인 순서와 대량 정렬이 남았습니다. 필요한 ID 20개를 먼저 고르고 상세 정보를 조인하도록 바꾸고, 검색어가 없는 전체 개수 조회에서 상품·판매자 조인을 제거했습니다.

검증과 한계

Drop 테스트 43개 통과. 기존 Page 계약을 유지합니다. 최종 HTTP 실패율은 0%지만 p95는 23.46초로 목표 2초에 미달했습니다. 정확한 전체 개수 계산 비용이 남습니다. 단일 로컬 측정이며 시간 초과를 포함하므로 운영 수용량으로 해석할 수 없습니다.

요청 조건: /drops?status=OPEN&sortType=CLOSING_SOON&page=0&size=20
75초 동안 10→200→0 RPS, 최대 500 VU. HTTP 요청 수에는 실패가 포함되며, 미시작 요청은 dropped_iterations입니다.

\ No newline at end of file diff --git a/performance/results/raw/drop-million-after-explain.txt b/performance/results/raw/drop-million-after-explain.txt new file mode 100644 index 0000000..86ae37c --- /dev/null +++ b/performance/results/raw/drop-million-after-explain.txt @@ -0,0 +1,4 @@ +EXPLAIN +-> Limit: 20 row(s) (actual time=3293..3293 rows=20 loops=1)\n -> Sort: d.close_at, d.id DESC, limit input to 20 row(s) per chunk (actual time=3293..3293 rows=20 loops=1)\n -> Stream results (cost=100238 rows=10880) (actual time=5.84..3196 rows=500000 loops=1)\n -> Nested loop inner join (cost=100238 rows=10880) (actual time=5.7..2986 rows=500000 loops=1)\n -> Nested loop inner join (cost=2041 rows=20080) (actual time=2.97..51.1 rows=100000 loops=1)\n -> Covering index scan on u using UK6dotkott2kjsp8vw4d0m25fb7 (cost=0.45 rows=2) (actual time=1.43..2.45 rows=2 loops=1)\n -> Covering index lookup on p using FKbgw3lyxhsml3kfqnfr45o0vbj (seller_id=u.id) (cost=518 rows=10040) (actual time=0.71..21.6 rows=50000 loops=2)\n -> Filter: ((d.`visible` = 0x01) and (d.open_at <= (now())) and (d.close_at > (now())) and (d.remaining_quantity > 0)) (cost=3.91 rows=0.542) (actual time=0.0275..0.0289 rows=5 loops=100000)\n -> Index lookup on d using FK5fijulf0obt0d6wdvo34c3wcm (product_id=p.id) (cost=3.91 rows=9.75) (actual time=0.026..0.0274 rows=10 loops=100000)\n +EXPLAIN +-> Aggregate: count(d.id) (cost=72990 rows=1) (actual time=2362..2362 rows=1 loops=1)\n -> Nested loop inner join (cost=71902 rows=10880) (actual time=1.04..2345 rows=500000 loops=1)\n -> Nested loop inner join (cost=2022 rows=20080) (actual time=0.468..41.5 rows=100000 loops=1)\n -> Covering index scan on u using UK6dotkott2kjsp8vw4d0m25fb7 (cost=0.45 rows=2) (actual time=0.016..0.727 rows=2 loops=1)\n -> Covering index lookup on p using FKbgw3lyxhsml3kfqnfr45o0vbj (seller_id=u.id) (cost=509 rows=10040) (actual time=0.224..17.7 rows=50000 loops=2)\n -> Filter: ((d.`visible` = 0x01) and (d.open_at <= (now())) and (d.close_at > (now())) and (d.remaining_quantity > 0)) (cost=2.5 rows=0.542) (actual time=0.0215..0.0226 rows=5 loops=100000)\n -> Index lookup on d using FK5fijulf0obt0d6wdvo34c3wcm (product_id=p.id) (cost=2.5 rows=9.75) (actual time=0.0202..0.0213 rows=10 loops=100000)\n diff --git a/performance/results/raw/drop-million-after.json b/performance/results/raw/drop-million-after.json new file mode 100644 index 0000000..31d55f7 --- /dev/null +++ b/performance/results/raw/drop-million-after.json @@ -0,0 +1,237 @@ +{ + "metrics": { + "data_received": { + "contains": "data", + "values": { + "count": 906460, + "rate": 8630.763827863526 + }, + "type": "counter" + }, + "data_sent": { + "contains": "data", + "values": { + "count": 316800, + "rate": 3016.3779765981567 + }, + "type": "counter" + }, + "dropped_iterations": { + "type": "counter", + "contains": "default", + "values": { + "rate": 45.69317521999544, + "count": 4799 + } + }, + "http_reqs": { + "values": { + "count": 635, + "rate": 6.046085906375724 + }, + "type": "counter", + "contains": "default" + }, + "vus": { + "type": "gauge", + "contains": "default", + "values": { + "value": 190, + "min": 10, + "max": 500 + } + }, + "http_req_duration{expected_response:true}": { + "type": "trend", + "contains": "time", + "values": { + "p(90)": 56584.2064628, + "p(95)": 58742.9753413, + "avg": 34323.692841070006, + "min": 7523.302737, + "med": 37750.737227, + "max": 58975.870409 + } + }, + "iteration_duration": { + "type": "trend", + "contains": "time", + "values": { + "min": 7526.616638, + "med": 48175.235512, + "max": 60011.027681, + "p(90)": 60001.9951246, + "p(95)": 60002.656534300004, + "avg": 44809.79793585037 + } + }, + "http_req_blocked": { + "type": "trend", + "contains": "time", + "values": { + "p(90)": 15.246710600000009, + "p(95)": 19.65092449999999, + "avg": 6.616195376377948, + "min": 0.004258, + "med": 3.605694, + "max": 150.219806 + } + }, + "http_req_connecting": { + "type": "trend", + "contains": "time", + "values": { + "avg": 6.476096869291338, + "min": 0, + "med": 3.404706, + "max": 150.111358, + "p(90)": 15.080012000000007, + "p(95)": 19.4628798 + } + }, + "checks": { + "type": "rate", + "contains": "default", + "values": { + "rate": 0.15748031496062992, + "passes": 200, + "fails": 1070 + } + }, + "http_req_duration": { + "type": "trend", + "contains": "time", + "values": { + "p(90)": 59997.781072, + "p(95)": 59998.189304, + "avg": 44797.13444110866, + "min": 7523.302737, + "med": 48151.948311, + "max": 60004.853025 + }, + "thresholds": { + "p(95)<2000": { + "ok": false + } + } + }, + "http_req_sending": { + "contains": "time", + "values": { + "avg": 0.1898148204724407, + "min": 0.018646, + "med": 0.127944, + "max": 10.310941, + "p(90)": 0.22461160000000002, + "p(95)": 0.28948139999999994 + }, + "type": "trend" + }, + "http_req_waiting": { + "type": "trend", + "contains": "time", + "values": { + "avg": 44796.22878477797, + "min": 7517.075616, + "med": 48151.572723, + "max": 60004.594369, + "p(90)": 59997.7447038, + "p(95)": 59998.155909199995 + } + }, + "http_req_receiving": { + "type": "trend", + "contains": "time", + "values": { + "max": 17.176256, + "p(90)": 1.3188148000000004, + "p(95)": 5.268856099999993, + "avg": 0.71584151023622, + "min": 0, + "med": 0.123255 + } + }, + "iterations": { + "type": "counter", + "contains": "default", + "values": { + "count": 635, + "rate": 6.046085906375724 + } + }, + "http_req_failed": { + "type": "rate", + "contains": "default", + "values": { + "fails": 100, + "rate": 0.84251968503937, + "passes": 535 + }, + "thresholds": { + "rate<0.01": { + "ok": false + } + } + }, + "vus_max": { + "type": "gauge", + "contains": "default", + "values": { + "min": 50, + "max": 500, + "value": 500 + } + }, + "http_req_tls_handshaking": { + "type": "trend", + "contains": "time", + "values": { + "avg": 0, + "min": 0, + "med": 0, + "max": 0, + "p(90)": 0, + "p(95)": 0 + } + } + }, + "root_group": { + "name": "", + "path": "", + "id": "d41d8cd98f00b204e9800998ecf8427e", + "groups": [], + "checks": [ + { + "name": "Drop 목록 조회 응답이 200이다", + "path": "::Drop 목록 조회 응답이 200이다", + "id": "634919e561b13374f34820e16887ae65", + "passes": 100, + "fails": 535 + }, + { + "passes": 100, + "fails": 535, + "name": "한 페이지는 최대 20개다", + "path": "::한 페이지는 최대 20개다", + "id": "c650329e4a118e15d6952cc13d36f54a" + } + ] + }, + "options": { + "summaryTrendStats": [ + "avg", + "min", + "med", + "max", + "p(90)", + "p(95)" + ], + "summaryTimeUnit": "", + "noColor": false + }, + "state": { + "isStdOutTTY": false, + "isStdErrTTY": false, + "testRunDurationMs": 105026.625462 + } +} \ No newline at end of file diff --git a/performance/results/raw/drop-million-before-explain.txt b/performance/results/raw/drop-million-before-explain.txt new file mode 100644 index 0000000..0d2d248 --- /dev/null +++ b/performance/results/raw/drop-million-before-explain.txt @@ -0,0 +1,4 @@ +EXPLAIN +-> Limit: 20 row(s) (actual time=2683..2683 rows=20 loops=1)\n -> Sort: d.close_at, d.id DESC, limit input to 20 row(s) per chunk (actual time=2683..2683 rows=20 loops=1)\n -> Stream results (cost=89497 rows=3695) (actual time=6.45..2590 rows=500000 loops=1)\n -> Nested loop inner join (cost=89497 rows=3695) (actual time=6.32..2389 rows=500000 loops=1)\n -> Nested loop inner join (cost=2050 rows=20080) (actual time=4.08..63.5 rows=100000 loops=1)\n -> Covering index scan on u using UK6dotkott2kjsp8vw4d0m25fb7 (cost=1.2 rows=2) (actual time=1.36..2.1 rows=2 loops=1)\n -> Covering index lookup on p using FKbgw3lyxhsml3kfqnfr45o0vbj (seller_id=u.id) (cost=522 rows=10040) (actual time=1.33..28.1 rows=50000 loops=2)\n -> Filter: ((d.`visible` = 0x01) and (d.open_at <= (now())) and (d.close_at > (now())) and (d.remaining_quantity > 0)) (cost=3.36 rows=0.184) (actual time=0.0215..0.0228 rows=5 loops=100000)\n -> Index lookup on d using FK5fijulf0obt0d6wdvo34c3wcm (product_id=p.id) (cost=3.36 rows=9.94) (actual time=0.0202..0.0215 rows=10 loops=100000)\n +EXPLAIN +-> Aggregate: count(d.id) (cost=72259 rows=1) (actual time=1916..1916 rows=1 loops=1)\n -> Nested loop inner join (cost=71889 rows=3695) (actual time=1.4..1900 rows=500000 loops=1)\n -> Nested loop inner join (cost=2026 rows=20080) (actual time=1.04..49 rows=100000 loops=1)\n -> Covering index scan on u using UK6dotkott2kjsp8vw4d0m25fb7 (cost=1.2 rows=2) (actual time=0.0114..0.724 rows=2 loops=1)\n -> Covering index lookup on p using FKbgw3lyxhsml3kfqnfr45o0vbj (seller_id=u.id) (cost=510 rows=10040) (actual time=0.512..21.6 rows=50000 loops=2)\n -> Filter: ((d.`visible` = 0x01) and (d.open_at <= (now())) and (d.close_at > (now())) and (d.remaining_quantity > 0)) (cost=2.49 rows=0.184) (actual time=0.0171..0.0181 rows=5 loops=100000)\n -> Index lookup on d using FK5fijulf0obt0d6wdvo34c3wcm (product_id=p.id) (cost=2.49 rows=9.94) (actual time=0.016..0.0169 rows=10 loops=100000)\n diff --git a/performance/results/raw/drop-million-before.json b/performance/results/raw/drop-million-before.json new file mode 100644 index 0000000..949dbef --- /dev/null +++ b/performance/results/raw/drop-million-before.json @@ -0,0 +1,237 @@ +{ + "root_group": { + "groups": [], + "checks": [ + { + "name": "Drop 목록 조회 응답이 200이다", + "path": "::Drop 목록 조회 응답이 200이다", + "id": "634919e561b13374f34820e16887ae65", + "passes": 111, + "fails": 522 + }, + { + "name": "한 페이지는 최대 20개다", + "path": "::한 페이지는 최대 20개다", + "id": "c650329e4a118e15d6952cc13d36f54a", + "passes": 111, + "fails": 522 + } + ], + "name": "", + "path": "", + "id": "d41d8cd98f00b204e9800998ecf8427e" + }, + "options": { + "summaryTrendStats": [ + "avg", + "min", + "med", + "max", + "p(90)", + "p(95)" + ], + "summaryTimeUnit": "", + "noColor": false + }, + "state": { + "isStdOutTTY": false, + "isStdErrTTY": false, + "testRunDurationMs": 105029.143853 + }, + "metrics": { + "http_req_duration{expected_response:true}": { + "type": "trend", + "contains": "time", + "values": { + "min": 7228.713523, + "med": 37166.116704, + "max": 56567.531669, + "p(90)": 52991.271195, + "p(95)": 56380.2768525, + "avg": 34309.194948594595 + } + }, + "http_req_receiving": { + "type": "trend", + "contains": "time", + "values": { + "avg": 0.2792413917851501, + "min": 0, + "med": 0.117637, + "max": 16.908198, + "p(90)": 0.4495614000000024, + "p(95)": 1.279052199999999 + } + }, + "http_req_blocked": { + "contains": "time", + "values": { + "avg": 5.823815753554504, + "min": 0.004789, + "med": 3.642297, + "max": 80.002048, + "p(90)": 13.158617600000001, + "p(95)": 18.057035999999993 + }, + "type": "trend" + }, + "http_req_duration": { + "contains": "time", + "values": { + "avg": 45193.56148846289, + "min": 7228.713523, + "med": 48285.694827, + "max": 60011.133816, + "p(90)": 59997.709035, + "p(95)": 59998.3564662 + }, + "thresholds": { + "p(95)<2000": { + "ok": false + } + }, + "type": "trend" + }, + "http_req_connecting": { + "type": "trend", + "contains": "time", + "values": { + "avg": 5.67712754344392, + "min": 0, + "med": 3.507404, + "max": 79.880132, + "p(90)": 13.001469800000006, + "p(95)": 17.880307999999992 + } + }, + "iterations": { + "values": { + "count": 633, + "rate": 6.026898599553988 + }, + "type": "counter", + "contains": "default" + }, + "dropped_iterations": { + "values": { + "count": 4807, + "rate": 45.768248922679334 + }, + "type": "counter", + "contains": "default" + }, + "http_req_failed": { + "type": "rate", + "contains": "default", + "values": { + "rate": 0.8246445497630331, + "passes": 522, + "fails": 111 + }, + "thresholds": { + "rate<0.01": { + "ok": false + } + } + }, + "vus_max": { + "values": { + "value": 500, + "min": 50, + "max": 500 + }, + "type": "gauge", + "contains": "default" + }, + "http_req_waiting": { + "type": "trend", + "contains": "time", + "values": { + "max": 60011.019155, + "p(90)": 59997.6201646, + "p(95)": 59998.3136828, + "avg": 45193.10419417537, + "min": 7228.38779, + "med": 48285.444165 + } + }, + "iteration_duration": { + "contains": "time", + "values": { + "max": 60017.214523, + "p(90)": 60002.066131800006, + "p(95)": 60003.3647396, + "avg": 45202.92266992099, + "min": 7231.561481, + "med": 48301.07319 + }, + "type": "trend" + }, + "vus": { + "type": "gauge", + "contains": "default", + "values": { + "value": 184, + "min": 10, + "max": 500 + } + }, + "http_reqs": { + "type": "counter", + "contains": "default", + "values": { + "count": 633, + "rate": 6.026898599553988 + } + }, + "data_sent": { + "type": "counter", + "contains": "data", + "values": { + "count": 313728, + "rate": 2987.0566253410325 + } + }, + "data_received": { + "type": "counter", + "contains": "data", + "values": { + "count": 981678, + "rate": 9346.720005391722 + } + }, + "http_req_sending": { + "type": "trend", + "contains": "time", + "values": { + "avg": 0.1780528957345971, + "min": 0.017734, + "med": 0.11968, + "max": 4.613684, + "p(90)": 0.2269494000000001, + "p(95)": 0.30788039999999994 + } + }, + "checks": { + "contains": "default", + "values": { + "rate": 0.17535545023696683, + "passes": 222, + "fails": 1044 + }, + "type": "rate" + }, + "http_req_tls_handshaking": { + "type": "trend", + "contains": "time", + "values": { + "p(90)": 0, + "p(95)": 0, + "avg": 0, + "min": 0, + "med": 0, + "max": 0 + } + } + } +} \ No newline at end of file diff --git a/performance/results/raw/drop-million-optimized-explain.txt b/performance/results/raw/drop-million-optimized-explain.txt new file mode 100644 index 0000000..d2c6221 --- /dev/null +++ b/performance/results/raw/drop-million-optimized-explain.txt @@ -0,0 +1,4 @@ +EXPLAIN +-> Limit: 20 row(s) (cost=91094 rows=20) (actual time=3.19..3.26 rows=20 loops=1)\n -> Filter: ((d.`visible` = 0x01) and (d.open_at <= (now())) and (d.close_at > (now())) and (d.remaining_quantity > 0)) (cost=91094 rows=55224) (actual time=3.15..3.22 rows=20 loops=1)\n -> Covering index range scan on d using idx_drops_public_closing over (visible = 1 AND '2026-09-10 06:54:22.000000' < close_at) (cost=91094 rows=497113) (actual time=2.68..2.74 rows=20 loops=1)\n +EXPLAIN +-> Aggregate: count(d.id) (cost=96616 rows=1) (actual time=714..714 rows=1 loops=1)\n -> Filter: ((d.`visible` = 0x01) and (d.open_at <= (now())) and (d.close_at > (now())) and (d.remaining_quantity > 0)) (cost=91094 rows=55224) (actual time=0.243..700 rows=500000 loops=1)\n -> Covering index range scan on d using idx_drops_public_closing over (visible = 1 AND '2026-09-10 06:54:22.000000' < close_at) (cost=91094 rows=497113) (actual time=0.214..621 rows=800000 loops=1)\n diff --git a/performance/results/raw/drop-million-optimized.json b/performance/results/raw/drop-million-optimized.json new file mode 100644 index 0000000..cbbafd3 --- /dev/null +++ b/performance/results/raw/drop-million-optimized.json @@ -0,0 +1,237 @@ +{ + "root_group": { + "checks": [ + { + "fails": 0, + "name": "Drop 목록 조회 응답이 200이다", + "path": "::Drop 목록 조회 응답이 200이다", + "id": "634919e561b13374f34820e16887ae65", + "passes": 1897 + }, + { + "name": "한 페이지는 최대 20개다", + "path": "::한 페이지는 최대 20개다", + "id": "c650329e4a118e15d6952cc13d36f54a", + "passes": 1897, + "fails": 0 + } + ], + "name": "", + "path": "", + "id": "d41d8cd98f00b204e9800998ecf8427e", + "groups": [] + }, + "options": { + "summaryTrendStats": [ + "avg", + "min", + "med", + "max", + "p(90)", + "p(95)" + ], + "summaryTimeUnit": "", + "noColor": false + }, + "state": { + "isStdOutTTY": false, + "isStdErrTTY": false, + "testRunDurationMs": 95832.95986 + }, + "metrics": { + "http_req_tls_handshaking": { + "values": { + "avg": 0, + "min": 0, + "med": 0, + "max": 0, + "p(90)": 0, + "p(95)": 0 + }, + "type": "trend", + "contains": "time" + }, + "dropped_iterations": { + "type": "counter", + "contains": "default", + "values": { + "count": 3727, + "rate": 38.89058634362 + } + }, + "http_req_sending": { + "values": { + "avg": 0.11926170005271483, + "min": 0.008615, + "med": 0.048182, + "max": 19.448594, + "p(90)": 0.1678362, + "p(95)": 0.23836719999999967 + }, + "type": "trend", + "contains": "time" + }, + "http_req_waiting": { + "type": "trend", + "contains": "time", + "values": { + "min": 224.629885, + "med": 14778.714011, + "max": 32045.251855, + "p(90)": 23330.129581, + "p(95)": 23460.586428, + "avg": 13890.367516205584 + } + }, + "checks": { + "values": { + "rate": 1, + "passes": 3794, + "fails": 0 + }, + "type": "rate", + "contains": "default" + }, + "vus": { + "type": "gauge", + "contains": "default", + "values": { + "value": 22, + "min": 4, + "max": 500 + } + }, + "http_reqs": { + "type": "counter", + "contains": "default", + "values": { + "count": 1897, + "rate": 19.794859751501782 + } + }, + "http_req_blocked": { + "type": "trend", + "contains": "time", + "values": { + "avg": 3.3112790801265137, + "min": 0.004629, + "med": 0.009428, + "max": 315.597063, + "p(90)": 9.380277200000004, + "p(95)": 17.84343059999993 + } + }, + "http_req_receiving": { + "values": { + "med": 0.818686, + "max": 152.158865, + "p(90)": 5.521724600000002, + "p(95)": 9.082953199999986, + "avg": 2.504092324196103, + "min": 0.051593 + }, + "type": "trend", + "contains": "time" + }, + "http_req_failed": { + "type": "rate", + "contains": "default", + "values": { + "rate": 0, + "passes": 0, + "fails": 1897 + }, + "thresholds": { + "rate<0.01": { + "ok": true + } + } + }, + "vus_max": { + "type": "gauge", + "contains": "default", + "values": { + "value": 500, + "min": 50, + "max": 500 + } + }, + "iteration_duration": { + "type": "trend", + "contains": "time", + "values": { + "min": 225.470518, + "med": 14783.078036, + "max": 32048.978165, + "p(90)": 23336.218418200002, + "p(95)": 23464.499679999997, + "avg": 13897.89624026411 + } + }, + "http_req_duration": { + "type": "trend", + "contains": "time", + "values": { + "avg": 13892.990870229834, + "min": 224.965742, + "med": 14779.517483, + "max": 32045.499983, + "p(90)": 23332.6694232, + "p(95)": 23460.9237606 + }, + "thresholds": { + "p(95)<2000": { + "ok": false + } + } + }, + "iterations": { + "contains": "default", + "values": { + "count": 1897, + "rate": 19.794859751501782 + }, + "type": "counter" + }, + "http_req_duration{expected_response:true}": { + "type": "trend", + "contains": "time", + "values": { + "avg": 13892.990870229834, + "min": 224.965742, + "med": 14779.517483, + "max": 32045.499983, + "p(90)": 23332.6694232, + "p(95)": 23460.9237606 + } + }, + "data_received": { + "contains": "data", + "values": { + "count": 14678986, + "rate": 153172.6247571208 + }, + "type": "counter" + }, + "data_sent": { + "type": "counter", + "contains": "data", + "values": { + "count": 728448, + "rate": 7601.226144576684 + } + }, + "http_req_connecting": { + "type": "trend", + "contains": "time", + "values": { + "avg": 3.227838934633633, + "min": 0, + "med": 0, + "max": 315.522017, + "p(90)": 9.217130400000002, + "p(95)": 17.270925399999985 + } + } + } +} \ No newline at end of file diff --git a/performance/start-drop-index-test.ps1 b/performance/start-drop-index-test.ps1 new file mode 100644 index 0000000..7be6cec --- /dev/null +++ b/performance/start-drop-index-test.ps1 @@ -0,0 +1,151 @@ +param( + [Parameter(Mandatory = $true)] + [ValidateSet('Before', 'After', 'Optimized')] + [string]$Phase +) + +$ErrorActionPreference = 'Stop' + +$performanceDirectory = Split-Path -Parent $MyInvocation.MyCommand.Path +$projectDirectory = Split-Path -Parent $performanceDirectory +$environmentFile = Join-Path $projectDirectory '.env.performance.local' +$composeFile = Join-Path $performanceDirectory 'compose.performance.yml' +$scriptDirectory = Join-Path $performanceDirectory 'k6' +$rawResultDirectory = Join-Path $performanceDirectory 'results\raw' +$containerName = "dropit-k6-drop-index-$($Phase.ToLower())" +$testRun = "drop-million-$($Phase.ToLower())" +$grafanaUrl = 'http://localhost:3000/d/drop-million-comparison/drop-million-before-index-optimized?orgId=1&from=now-24h&to=now' + +if (-not (Test-Path -LiteralPath $environmentFile)) { + throw '.env.performance.local is missing.' +} + +$settings = @{} +Get-Content -LiteralPath $environmentFile | ForEach-Object { + $line = $_.Trim() + if ($line -and -not $line.StartsWith('#')) { + $parts = $line -split '=', 2 + if ($parts.Count -eq 2) { + $settings[$parts[0].Trim()] = $parts[1].Trim() + } + } +} + +$healthCheckUrl = $settings['HEALTH_CHECK_URL'] +$baseUrl = $settings['BASE_URL'] +$authEmail = $settings['AUTH_EMAIL'] +$authPassword = $settings['AUTH_PASSWORD'] +$authUsername = $settings['AUTH_USERNAME'] + +if (-not $healthCheckUrl -or -not $baseUrl -or + -not $authEmail -or -not $authPassword -or -not $authUsername) { + throw 'HEALTH_CHECK_URL, BASE_URL, AUTH_EMAIL, AUTH_PASSWORD, and AUTH_USERNAME are required.' +} + +$dropListUrl = "$healthCheckUrl/drops?status=OPEN&sortType=CLOSING_SOON&page=0&size=20" +$loginBody = @{ + email = $authEmail + password = $authPassword +} | ConvertTo-Json + +try { + $tokenResponse = Invoke-RestMethod ` + -Uri "$healthCheckUrl/auth/login" ` + -Method Post ` + -ContentType 'application/json' ` + -Body $loginBody +} catch { + $signupBody = @{ + email = $authEmail + password = $authPassword + username = $authUsername + role = 'USER' + } | ConvertTo-Json + + Invoke-RestMethod ` + -Uri "$healthCheckUrl/auth/signup" ` + -Method Post ` + -ContentType 'application/json' ` + -Body $signupBody | Out-Null + + $tokenResponse = Invoke-RestMethod ` + -Uri "$healthCheckUrl/auth/login" ` + -Method Post ` + -ContentType 'application/json' ` + -Body $loginBody +} + +$authToken = $tokenResponse.accessToken + +if (-not $authToken) { + throw 'Access token was not returned by the login API.' +} + +try { + $response = Invoke-WebRequest ` + -Uri $dropListUrl ` + -Headers @{ Authorization = "Bearer $authToken" } ` + -TimeoutSec 10 ` + -UseBasicParsing + if ($response.StatusCode -ne 200) { + throw "Drop API returned HTTP $($response.StatusCode)." + } +} catch { + throw "Cannot reach the Spring server or Drop API. Cause: $($_.Exception.Message)" +} + +New-Item -ItemType Directory -Path $rawResultDirectory -Force | Out-Null + +docker compose ` + --file $composeFile ` + --env-file $environmentFile ` + up --detach influxdb grafana | Out-Null + +$grafanaReady = $false +for ($attempt = 1; $attempt -le 30; $attempt++) { + curl.exe --silent --fail --output NUL 'http://localhost:3000/api/health' + if ($LASTEXITCODE -eq 0) { + $grafanaReady = $true + break + } + Start-Sleep -Seconds 1 +} + +if (-not $grafanaReady) { + throw 'Grafana did not become ready within 30 seconds.' +} + +$existingContainer = docker ps -a --filter "name=^/$containerName$" --format '{{.Names}}' +if ($existingContainer) { + docker rm --force $containerName | Out-Null +} + +$dockerArguments = @( + 'run', '--rm', + '--name', $containerName, + '--network', 'dropit-performance_default', + '--volume', "${scriptDirectory}:/scripts:ro", + '--volume', "${rawResultDirectory}:/results", + '--env', "BASE_URL=$baseUrl", + '--env', "TEST_RUN=$testRun", + '--env', "AUTH_TOKEN=$authToken", + 'grafana/k6:latest', + 'run', + '--out', 'influxdb=http://influxdb:8086/k6', + '--tag', "test_run=$testRun", + '/scripts/drop-list-index.js' +) + +Write-Host "Running $testRun with 10 to 200 requests per second." +docker @dockerArguments + +if ($LASTEXITCODE -ne 0) { + $resultFile = Join-Path $rawResultDirectory "$testRun.json" + if (-not (Test-Path -LiteralPath $resultFile)) { + throw "k6 $Phase test failed before producing a result file." + } + Write-Warning "k6 thresholds were exceeded. The measured result was still saved." +} + +Write-Host "Raw result: $rawResultDirectory\$testRun.json" +Write-Host "Dashboard: $grafanaUrl" diff --git a/src/main/java/com/dropit/drop/entity/Drop.java b/src/main/java/com/dropit/drop/entity/Drop.java index 35d05cf..e4b9de9 100644 --- a/src/main/java/com/dropit/drop/entity/Drop.java +++ b/src/main/java/com/dropit/drop/entity/Drop.java @@ -14,7 +14,13 @@ @Getter @Entity -@Table(name = "drops") +@Table( + name = "drops", + indexes = @Index( + name = "idx_drops_public_closing", + columnList = "visible, close_at, id DESC, open_at, remaining_quantity, product_id" + ) +) @NoArgsConstructor(access = AccessLevel.PROTECTED) public class Drop extends BaseEntity { diff --git a/src/main/java/com/dropit/drop/repository/DropRepositoryCustomImpl.java b/src/main/java/com/dropit/drop/repository/DropRepositoryCustomImpl.java index a410b50..0a9be9e 100644 --- a/src/main/java/com/dropit/drop/repository/DropRepositoryCustomImpl.java +++ b/src/main/java/com/dropit/drop/repository/DropRepositoryCustomImpl.java @@ -7,6 +7,7 @@ import com.querydsl.core.types.OrderSpecifier; import com.querydsl.core.types.dsl.BooleanExpression; import com.querydsl.jpa.impl.JPAQueryFactory; +import com.querydsl.jpa.impl.JPAQuery; import lombok.RequiredArgsConstructor; import org.springframework.data.domain.Page; import org.springframework.data.domain.PageImpl; @@ -31,10 +32,13 @@ public Page searchPublicDrops( ) { LocalDateTime now = LocalDateTime.now(); - List content = queryFactory - .selectFrom(drop) - .join(drop.product, product).fetchJoin() - .join(product.seller, user).fetchJoin() + // 먼저 페이지에 포함할 ID만 조회해 대량 fetch join 이후 정렬을 피한다. + JPAQuery idQuery = queryFactory.select(drop.id).from(drop); + boolean hasKeyword = condition.keyword() != null && !condition.keyword().isBlank(); + if (hasKeyword) { + idQuery.join(drop.product, product).join(product.seller, user); + } + List ids = idQuery .where( drop.visible.isTrue(), keywordContains(condition.keyword()), @@ -45,11 +49,23 @@ public Page searchPublicDrops( .limit(pageable.getPageSize()) .fetch(); - Long total = queryFactory + List content = ids.isEmpty() ? List.of() : queryFactory + .selectFrom(drop) + .join(drop.product, product).fetchJoin() + .join(product.seller, user).fetchJoin() + .where(drop.id.in(ids)) + .orderBy(orderSpecifiers(condition.sortType())) + .fetch(); + + // 검색어가 없으면 필터에 필요한 컬럼이 모두 Drop에 있다. + // 필수 FK 관계이므로 count에서 상품/판매자 조인을 생략할 수 있다. + JPAQuery countQuery = queryFactory .select(drop.count()) - .from(drop) - .join(drop.product, product) - .join(product.seller, user) + .from(drop); + if (hasKeyword) { + countQuery.join(drop.product, product).join(product.seller, user); + } + Long total = countQuery .where( drop.visible.isTrue(), keywordContains(condition.keyword()), diff --git a/src/test/java/com/dropit/drop/repository/DropSearchIntegrationTest.java b/src/test/java/com/dropit/drop/repository/DropSearchIntegrationTest.java new file mode 100644 index 0000000..403b5e4 --- /dev/null +++ b/src/test/java/com/dropit/drop/repository/DropSearchIntegrationTest.java @@ -0,0 +1,76 @@ +package com.dropit.drop.repository; + +import com.dropit.drop.dto.request.DropSearchCondition; +import com.dropit.drop.dto.request.DropSortType; +import com.dropit.drop.entity.Drop; +import com.dropit.drop.entity.DropStatus; +import com.dropit.global.storage.S3ImageService; +import com.dropit.product.entity.Product; +import com.dropit.user.entity.User; +import com.dropit.user.entity.UserRole; +import jakarta.persistence.EntityManager; +import org.junit.jupiter.api.Test; +import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.boot.test.context.SpringBootTest; +import org.springframework.data.domain.PageRequest; +import org.springframework.test.context.bean.override.mockito.MockitoBean; +import org.springframework.transaction.annotation.Transactional; + +import java.math.BigDecimal; +import java.time.LocalDateTime; +import java.util.List; +import java.util.UUID; + +import static org.junit.jupiter.api.Assertions.*; + +/** 로컬 MySQL에서 실행하며 픽스처는 트랜잭션 롤백으로 정리한다. */ +@SpringBootTest(properties = "spring.jpa.hibernate.ddl-auto=none") +@Transactional +class DropSearchIntegrationTest { + @Autowired EntityManager em; + @Autowired DropRepository repository; + @MockitoBean S3ImageService s3ImageService; + + @Test + void keywordPaginationKeepsOrderCountAndFetchJoins() { + String marker = "search-" + UUID.randomUUID(); + User seller = new User(marker + "@test.invalid", "unused", marker, UserRole.SELLER); + em.persist(seller); + Product product = new Product(seller, marker, "fixture", null); + em.persist(product); + LocalDateTime now = LocalDateTime.now(); + for (int i = 0; i < 5; i++) { + Drop drop = new Drop(product, BigDecimal.valueOf(100 + i), 10, 0, 1, + now.minusDays(1), now.plusDays(1)); + drop.changeVisibility(i != 4); + em.persist(drop); + } + em.flush(); + em.clear(); + var condition = new DropSearchCondition(marker, DropStatus.OPEN, DropSortType.CLOSING_SOON); + var first = repository.searchPublicDrops(condition, PageRequest.of(0, 2)); + var second = repository.searchPublicDrops(condition, PageRequest.of(1, 2)); + assertEquals(4, first.getTotalElements()); + assertEquals(2, first.getNumberOfElements()); + assertEquals(2, second.getNumberOfElements()); + assertTrue(first.getContent().getLast().getId() > second.getContent().getFirst().getId()); + assertEquals(marker, first.getContent().getFirst().getProduct().getSeller().getUsername()); + var empty = repository.searchPublicDrops(condition, PageRequest.of(2, 2)); + assertTrue(empty.isEmpty()); + assertEquals(4, empty.getTotalElements()); + } + + @Test + void noKeywordMatchesOriginalJoinQuery() { + // 시간 경계에 영향을 받지 않도록 공개 여부만 비교한다. + var actual = repository.searchPublicDrops( + new DropSearchCondition(null, null, DropSortType.CLOSING_SOON), PageRequest.of(0, 20)); + List expected = em.createQuery("select d.id from Drop d join d.product p join p.seller s " + + "where d.visible = true order by d.closeAt asc, d.id desc", Long.class) + .setMaxResults(20).getResultList(); + Long count = em.createQuery("select count(d) from Drop d join d.product p join p.seller s " + + "where d.visible = true", Long.class).getSingleResult(); + assertEquals(expected, actual.getContent().stream().map(Drop::getId).toList()); + assertEquals(count.longValue(), actual.getTotalElements()); + } +} From a79a5c803931acf9c543f2f07eb631cde5060a81 Mon Sep 17 00:00:00 2001 From: gustavors88 Date: Fri, 11 Sep 2026 02:00:44 +0900 Subject: [PATCH 29/98] =?UTF-8?q?feat(auth):=20=EB=A1=9C=EA=B7=B8=EC=95=84?= =?UTF-8?q?=EC=9B=83=20API=20=EC=B6=94=EA=B0=80?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../dropit/auth/controller/AuthController.java | 17 +++++++++++++++++ 1 file changed, 17 insertions(+) diff --git a/src/main/java/com/dropit/auth/controller/AuthController.java b/src/main/java/com/dropit/auth/controller/AuthController.java index 51c5909..76185ac 100644 --- a/src/main/java/com/dropit/auth/controller/AuthController.java +++ b/src/main/java/com/dropit/auth/controller/AuthController.java @@ -5,10 +5,14 @@ import com.dropit.auth.dto.request.SignupRequest; import com.dropit.auth.dto.response.TokenResponse; import com.dropit.auth.service.AuthService; +import jakarta.servlet.http.HttpServletRequest; +import jakarta.servlet.http.HttpServletResponse; import jakarta.validation.Valid; import lombok.RequiredArgsConstructor; import org.springframework.http.HttpStatus; import org.springframework.http.ResponseEntity; +import org.springframework.security.core.Authentication; +import org.springframework.security.web.authentication.logout.SecurityContextLogoutHandler; import org.springframework.web.bind.annotation.*; @RestController @@ -17,6 +21,8 @@ public class AuthController { private final AuthService authService; + private final SecurityContextLogoutHandler logoutHandler = + new SecurityContextLogoutHandler(); @PostMapping("/signup") public ResponseEntity signup( @@ -46,4 +52,15 @@ public ResponseEntity reissue( authService.reissue(request) ); } + + @PostMapping("/logout") + public ResponseEntity logout( + HttpServletRequest request, + HttpServletResponse response, + Authentication authentication + ) { + logoutHandler.logout(request, response, authentication); + + return ResponseEntity.noContent().build(); + } } \ No newline at end of file From 47471bc4ddac0ba50d6e7198903f7b8801d7fc24 Mon Sep 17 00:00:00 2001 From: Sooyoung Yoon Date: Fri, 11 Sep 2026 08:17:18 +0900 Subject: [PATCH 30/98] =?UTF-8?q?fix(docs):=20=EC=84=9C=EB=B2=84=20URL,=20?= =?UTF-8?q?pathParameters=20=EC=88=98=EC=A0=95?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- build.gradle | 2 +- .../drop/controller/DropDocumentationTest.java | 18 ++++++++++++------ .../NotificationDocumentationTest.java | 6 ++++-- .../controller/OrderDocumentationTest.java | 12 ++++++++---- .../controller/ProductDocumentationTest.java | 17 +++++++++++------ .../SellerProfileDocumentationTest.java | 17 ++++++++++------- .../user/controller/UserDocumentationTest.java | 10 ++++++---- .../controller/WishlistDocumentationTest.java | 14 +++++++++----- 8 files changed, 61 insertions(+), 35 deletions(-) diff --git a/build.gradle b/build.gradle index ff5baee..07cdf21 100644 --- a/build.gradle +++ b/build.gradle @@ -69,7 +69,7 @@ tasks.named('test') { } openapi3 { - server = 'http://localhost:8080' + server = '/' title = 'DROPIT API' description = 'DROPIT API 문서입니다.' version = project.version.toString() diff --git a/src/test/java/com/dropit/drop/controller/DropDocumentationTest.java b/src/test/java/com/dropit/drop/controller/DropDocumentationTest.java index e39a388..3a7b13b 100644 --- a/src/test/java/com/dropit/drop/controller/DropDocumentationTest.java +++ b/src/test/java/com/dropit/drop/controller/DropDocumentationTest.java @@ -35,10 +35,10 @@ import static org.mockito.ArgumentMatchers.eq; import static org.mockito.Mockito.mock; import static org.mockito.Mockito.when; -import static org.springframework.test.web.servlet.request.MockMvcRequestBuilders.delete; -import static org.springframework.test.web.servlet.request.MockMvcRequestBuilders.get; -import static org.springframework.test.web.servlet.request.MockMvcRequestBuilders.patch; -import static org.springframework.test.web.servlet.request.MockMvcRequestBuilders.post; +import static org.springframework.restdocs.mockmvc.RestDocumentationRequestBuilders.delete; +import static org.springframework.restdocs.mockmvc.RestDocumentationRequestBuilders.get; +import static org.springframework.restdocs.mockmvc.RestDocumentationRequestBuilders.patch; +import static org.springframework.restdocs.mockmvc.RestDocumentationRequestBuilders.post; import static org.springframework.test.web.servlet.result.MockMvcResultMatchers.status; @ExtendWith(RestDocumentationExtension.class) @@ -96,7 +96,9 @@ void getOne() throws Exception { mockMvc.perform(authenticated(get("/drops/{dropId}", 100L))) .andExpect(status().isOk()) .andDo(document("drops-get", resource(builder() - .tag("Drops").summary("드랍 단건 조회").requestHeaders(authorizationHeader()).responseSchema(new Schema("DropResponse")).responseFields(dropFields()).build()))); + .tag("Drops").summary("드랍 단건 조회").requestHeaders(authorizationHeader()) + .pathParameters(parameterWithName("dropId").description("드랍 ID")) + .responseSchema(new Schema("DropResponse")).responseFields(dropFields()).build()))); } @Test @@ -106,6 +108,7 @@ void getPublicDropsBySeller() throws Exception { .andExpect(status().isOk()) .andDo(document("drops-get-by-creator", resource(builder() .tag("Drops").summary("판매자 공개 드랍 목록 조회").requestHeaders(authorizationHeader()) + .pathParameters(parameterWithName("sellerId").description("판매자 ID")) .queryParameters(parameterWithName("page").description("페이지 번호"), parameterWithName("size").description("페이지 크기"), parameterWithName("sort").optional().description("정렬 조건")) .responseSchema(new Schema("DropPageResponse")) .build()))); @@ -131,6 +134,7 @@ void update() throws Exception { .andExpect(status().isOk()) .andDo(document("drops-update", resource(builder() .tag("Drops").summary("드랍 수정").requestHeaders(authorizationHeader()) + .pathParameters(parameterWithName("dropId").description("드랍 ID")) .requestSchema(new Schema("DropUpdateRequest")) .requestFields( fieldWithPath("price").optional().type(NUMBER).description("판매 가격"), @@ -150,6 +154,7 @@ void changeVisibility() throws Exception { .andExpect(status().isOk()) .andDo(document("drops-change-visibility", resource(builder() .tag("Drops").summary("드랍 공개 여부 변경").requestHeaders(authorizationHeader()) + .pathParameters(parameterWithName("dropId").description("드랍 ID")) .requestSchema(new Schema("DropVisibilityUpdateRequest")) .requestFields(fieldWithPath("visible").type(BOOLEAN).description("공개 여부")) .responseSchema(new Schema("DropResponse")).responseFields(dropFields()).build()))); @@ -160,7 +165,8 @@ void deleteDrop() throws Exception { mockMvc.perform(authenticated(delete("/drops/{dropId}", 100L))) .andExpect(status().isNoContent()) .andDo(document("drops-delete", resource(builder() - .tag("Drops").summary("드랍 삭제").requestHeaders(authorizationHeader()).build()))); + .tag("Drops").summary("드랍 삭제").requestHeaders(authorizationHeader()) + .pathParameters(parameterWithName("dropId").description("드랍 ID")).build()))); } private DropResponse dropResponse() { diff --git a/src/test/java/com/dropit/notification/controller/NotificationDocumentationTest.java b/src/test/java/com/dropit/notification/controller/NotificationDocumentationTest.java index 0aa7619..1b34280 100644 --- a/src/test/java/com/dropit/notification/controller/NotificationDocumentationTest.java +++ b/src/test/java/com/dropit/notification/controller/NotificationDocumentationTest.java @@ -24,10 +24,11 @@ import static org.springframework.restdocs.payload.JsonFieldType.NUMBER; import static org.springframework.restdocs.payload.JsonFieldType.STRING; import static org.springframework.restdocs.payload.PayloadDocumentation.fieldWithPath; +import static org.springframework.restdocs.request.RequestDocumentation.parameterWithName; import static org.mockito.Mockito.mock; import static org.mockito.Mockito.when; -import static org.springframework.test.web.servlet.request.MockMvcRequestBuilders.get; -import static org.springframework.test.web.servlet.request.MockMvcRequestBuilders.patch; +import static org.springframework.restdocs.mockmvc.RestDocumentationRequestBuilders.get; +import static org.springframework.restdocs.mockmvc.RestDocumentationRequestBuilders.patch; import static org.springframework.test.web.servlet.result.MockMvcResultMatchers.status; @ExtendWith(RestDocumentationExtension.class) @@ -66,6 +67,7 @@ void markAsRead() throws Exception { .andExpect(status().isOk()) .andDo(document("notifications-mark-read", resource(builder() .tag("Notifications").summary("알림 읽음 처리").requestHeaders(authorizationHeader()) + .pathParameters(parameterWithName("notificationId").description("알림 ID")) .responseSchema(new Schema("NotificationResponse")) .responseFields( fieldWithPath("id").type(NUMBER).description("알림 ID"), diff --git a/src/test/java/com/dropit/order/controller/OrderDocumentationTest.java b/src/test/java/com/dropit/order/controller/OrderDocumentationTest.java index ff22e92..be9e666 100644 --- a/src/test/java/com/dropit/order/controller/OrderDocumentationTest.java +++ b/src/test/java/com/dropit/order/controller/OrderDocumentationTest.java @@ -24,12 +24,13 @@ import static org.springframework.restdocs.payload.JsonFieldType.NUMBER; import static org.springframework.restdocs.payload.JsonFieldType.STRING; import static org.springframework.restdocs.payload.PayloadDocumentation.fieldWithPath; +import static org.springframework.restdocs.request.RequestDocumentation.parameterWithName; import static org.mockito.ArgumentMatchers.any; import static org.mockito.ArgumentMatchers.eq; import static org.mockito.Mockito.mock; import static org.mockito.Mockito.when; -import static org.springframework.test.web.servlet.request.MockMvcRequestBuilders.get; -import static org.springframework.test.web.servlet.request.MockMvcRequestBuilders.post; +import static org.springframework.restdocs.mockmvc.RestDocumentationRequestBuilders.get; +import static org.springframework.restdocs.mockmvc.RestDocumentationRequestBuilders.post; import static org.springframework.test.web.servlet.result.MockMvcResultMatchers.status; @ExtendWith(RestDocumentationExtension.class) @@ -83,7 +84,9 @@ void getMyOrder() throws Exception { mockMvc.perform(authenticated(get("/orders/{orderId}", 1000L))) .andExpect(status().isOk()) .andDo(document("orders-get", resource(builder() - .tag("Orders").summary("내 주문 상세 조회").requestHeaders(authorizationHeader()).responseSchema(new Schema("OrderResponse")).responseFields(orderFields()).build()))); + .tag("Orders").summary("내 주문 상세 조회").requestHeaders(authorizationHeader()) + .pathParameters(parameterWithName("orderId").description("주문 ID")) + .responseSchema(new Schema("OrderResponse")).responseFields(orderFields()).build()))); } @Test @@ -91,7 +94,8 @@ void cancel() throws Exception { mockMvc.perform(authenticated(post("/orders/{orderId}/cancel", 1000L))) .andExpect(status().isNoContent()) .andDo(document("orders-cancel", resource(builder() - .tag("Orders").summary("주문 취소").description("현재 사용자의 주문을 취소합니다.").requestHeaders(authorizationHeader()).build()))); + .tag("Orders").summary("주문 취소").description("현재 사용자의 주문을 취소합니다.").requestHeaders(authorizationHeader()) + .pathParameters(parameterWithName("orderId").description("주문 ID")).build()))); } private OrderResponse orderResponse() { diff --git a/src/test/java/com/dropit/product/controller/ProductDocumentationTest.java b/src/test/java/com/dropit/product/controller/ProductDocumentationTest.java index c7e338e..4d90aab 100644 --- a/src/test/java/com/dropit/product/controller/ProductDocumentationTest.java +++ b/src/test/java/com/dropit/product/controller/ProductDocumentationTest.java @@ -34,11 +34,11 @@ import static org.mockito.ArgumentMatchers.eq; import static org.mockito.Mockito.mock; import static org.mockito.Mockito.when; -import static org.springframework.test.web.servlet.request.MockMvcRequestBuilders.delete; -import static org.springframework.test.web.servlet.request.MockMvcRequestBuilders.get; -import static org.springframework.test.web.servlet.request.MockMvcRequestBuilders.multipart; -import static org.springframework.test.web.servlet.request.MockMvcRequestBuilders.post; -import static org.springframework.test.web.servlet.request.MockMvcRequestBuilders.put; +import static org.springframework.restdocs.mockmvc.RestDocumentationRequestBuilders.delete; +import static org.springframework.restdocs.mockmvc.RestDocumentationRequestBuilders.get; +import static org.springframework.restdocs.mockmvc.RestDocumentationRequestBuilders.multipart; +import static org.springframework.restdocs.mockmvc.RestDocumentationRequestBuilders.post; +import static org.springframework.restdocs.mockmvc.RestDocumentationRequestBuilders.put; import static org.springframework.test.web.servlet.result.MockMvcResultMatchers.status; @ExtendWith(RestDocumentationExtension.class) @@ -72,6 +72,7 @@ void getProduct() throws Exception { .andExpect(status().isOk()) .andDo(document("products-get", resource(builder() .tag("Products").summary("상품 단건 조회").requestHeaders(authorizationHeader()) + .pathParameters(parameterWithName("productId").description("상품 ID")) .responseSchema(new Schema("ProductResponse")) .responseFields(productFields()).build()))); } @@ -96,6 +97,7 @@ void getProductsBySeller() throws Exception { .andExpect(status().isOk()) .andDo(document("products-get-by-seller", resource(builder() .tag("Products").summary("판매자 상품 목록 조회").requestHeaders(authorizationHeader()) + .pathParameters(parameterWithName("sellerId").description("판매자 ID")) .queryParameters(parameterWithName("page").description("페이지 번호"), parameterWithName("size").description("페이지 크기"), parameterWithName("sort").optional().description("정렬 조건")) .responseSchema(new Schema("ProductPageResponse")) .responseFields(pageFields()).build()))); @@ -109,6 +111,7 @@ void update() throws Exception { .andExpect(status().isOk()) .andDo(document("products-update", resource(builder() .tag("Products").summary("상품 수정").requestHeaders(authorizationHeader()) + .pathParameters(parameterWithName("productId").description("상품 ID")) .requestSchema(new Schema("ProductUpdateRequest")) .requestFields(fieldWithPath("name").description("상품명"), fieldWithPath("description").optional().description("상품 설명")) .responseSchema(new Schema("ProductResponse")) @@ -120,7 +123,8 @@ void deleteProduct() throws Exception { mockMvc.perform(authenticated(delete("/products/{productId}", 100L))) .andExpect(status().isNoContent()) .andDo(document("products-delete", resource(builder() - .tag("Products").summary("상품 삭제").requestHeaders(authorizationHeader()).build()))); + .tag("Products").summary("상품 삭제").requestHeaders(authorizationHeader()) + .pathParameters(parameterWithName("productId").description("상품 ID")).build()))); } @Test @@ -134,6 +138,7 @@ void uploadImage() throws Exception { .andExpect(status().isOk()) .andDo(document("products-upload-image", resource(builder() .tag("Products").summary("상품 이미지 업로드").requestHeaders(authorizationHeader()) + .pathParameters(parameterWithName("productId").description("상품 ID")) .requestSchema(new Schema("MultipartImage")) .responseSchema(new Schema("ProductResponse")) .responseFields(productFields()).build()), diff --git a/src/test/java/com/dropit/sellerprofile/controller/SellerProfileDocumentationTest.java b/src/test/java/com/dropit/sellerprofile/controller/SellerProfileDocumentationTest.java index 5535c7f..7f7fe96 100644 --- a/src/test/java/com/dropit/sellerprofile/controller/SellerProfileDocumentationTest.java +++ b/src/test/java/com/dropit/sellerprofile/controller/SellerProfileDocumentationTest.java @@ -23,18 +23,19 @@ import static org.springframework.restdocs.payload.JsonFieldType.NUMBER; import static org.springframework.restdocs.payload.JsonFieldType.STRING; import static org.springframework.restdocs.payload.PayloadDocumentation.fieldWithPath; +import static org.springframework.restdocs.request.RequestDocumentation.parameterWithName; import static org.springframework.restdocs.request.RequestDocumentation.partWithName; import static org.springframework.restdocs.request.RequestDocumentation.requestParts; import static org.mockito.ArgumentMatchers.any; import static org.mockito.ArgumentMatchers.eq; import static org.mockito.Mockito.mock; import static org.mockito.Mockito.when; -import static org.springframework.test.web.servlet.request.MockMvcRequestBuilders.delete; -import static org.springframework.test.web.servlet.request.MockMvcRequestBuilders.get; -import static org.springframework.test.web.servlet.request.MockMvcRequestBuilders.multipart; -import static org.springframework.test.web.servlet.request.MockMvcRequestBuilders.patch; -import static org.springframework.test.web.servlet.request.MockMvcRequestBuilders.post; -import static org.springframework.test.web.servlet.request.MockMvcRequestBuilders.put; +import static org.springframework.restdocs.mockmvc.RestDocumentationRequestBuilders.delete; +import static org.springframework.restdocs.mockmvc.RestDocumentationRequestBuilders.get; +import static org.springframework.restdocs.mockmvc.RestDocumentationRequestBuilders.multipart; +import static org.springframework.restdocs.mockmvc.RestDocumentationRequestBuilders.patch; +import static org.springframework.restdocs.mockmvc.RestDocumentationRequestBuilders.post; +import static org.springframework.restdocs.mockmvc.RestDocumentationRequestBuilders.put; import static org.springframework.test.web.servlet.result.MockMvcResultMatchers.status; @ExtendWith(RestDocumentationExtension.class) @@ -80,7 +81,9 @@ void getById() throws Exception { mockMvc.perform(authenticated(get("/seller-profiles/{sellerProfileId}", 10L))) .andExpect(status().isOk()) .andDo(document("seller-profiles-get", resource(builder() - .tag("Seller Profiles").summary("판매자 프로필 조회").requestHeaders(authorizationHeader()).responseSchema(new Schema("SellerProfileResponse")).responseFields(profileFields()).build()))); + .tag("Seller Profiles").summary("판매자 프로필 조회").requestHeaders(authorizationHeader()) + .pathParameters(parameterWithName("sellerProfileId").description("판매자 프로필 ID")) + .responseSchema(new Schema("SellerProfileResponse")).responseFields(profileFields()).build()))); } @Test diff --git a/src/test/java/com/dropit/user/controller/UserDocumentationTest.java b/src/test/java/com/dropit/user/controller/UserDocumentationTest.java index 59b03a1..e6086f3 100644 --- a/src/test/java/com/dropit/user/controller/UserDocumentationTest.java +++ b/src/test/java/com/dropit/user/controller/UserDocumentationTest.java @@ -19,12 +19,13 @@ import static org.springframework.restdocs.payload.JsonFieldType.NUMBER; import static org.springframework.restdocs.payload.JsonFieldType.STRING; import static org.springframework.restdocs.payload.PayloadDocumentation.fieldWithPath; +import static org.springframework.restdocs.request.RequestDocumentation.parameterWithName; import static org.mockito.ArgumentMatchers.any; import static org.mockito.Mockito.mock; import static org.mockito.Mockito.when; -import static org.springframework.test.web.servlet.request.MockMvcRequestBuilders.delete; -import static org.springframework.test.web.servlet.request.MockMvcRequestBuilders.get; -import static org.springframework.test.web.servlet.request.MockMvcRequestBuilders.patch; +import static org.springframework.restdocs.mockmvc.RestDocumentationRequestBuilders.delete; +import static org.springframework.restdocs.mockmvc.RestDocumentationRequestBuilders.get; +import static org.springframework.restdocs.mockmvc.RestDocumentationRequestBuilders.patch; import static org.springframework.test.web.servlet.result.MockMvcResultMatchers.status; @ExtendWith(RestDocumentationExtension.class) @@ -101,7 +102,8 @@ void deleteUserByAdmin() throws Exception { mockMvc.perform(authenticated(delete("/users/{userId}", 2L))) .andExpect(status().isNoContent()) .andDo(document("users-delete-by-admin", resource(builder() - .tag("Users").summary("사용자 삭제").description("관리자가 지정한 사용자를 삭제합니다.").requestHeaders(authorizationHeader()).build()))); + .tag("Users").summary("사용자 삭제").description("관리자가 지정한 사용자를 삭제합니다.").requestHeaders(authorizationHeader()) + .pathParameters(parameterWithName("userId").description("사용자 ID")).build()))); } private User user() { diff --git a/src/test/java/com/dropit/wishlist/controller/WishlistDocumentationTest.java b/src/test/java/com/dropit/wishlist/controller/WishlistDocumentationTest.java index 3389b03..35b8c52 100644 --- a/src/test/java/com/dropit/wishlist/controller/WishlistDocumentationTest.java +++ b/src/test/java/com/dropit/wishlist/controller/WishlistDocumentationTest.java @@ -24,12 +24,13 @@ import static org.springframework.restdocs.payload.JsonFieldType.NUMBER; import static org.springframework.restdocs.payload.JsonFieldType.STRING; import static org.springframework.restdocs.payload.PayloadDocumentation.fieldWithPath; +import static org.springframework.restdocs.request.RequestDocumentation.parameterWithName; import static org.mockito.ArgumentMatchers.eq; import static org.mockito.Mockito.mock; import static org.mockito.Mockito.when; -import static org.springframework.test.web.servlet.request.MockMvcRequestBuilders.delete; -import static org.springframework.test.web.servlet.request.MockMvcRequestBuilders.get; -import static org.springframework.test.web.servlet.request.MockMvcRequestBuilders.post; +import static org.springframework.restdocs.mockmvc.RestDocumentationRequestBuilders.delete; +import static org.springframework.restdocs.mockmvc.RestDocumentationRequestBuilders.get; +import static org.springframework.restdocs.mockmvc.RestDocumentationRequestBuilders.post; import static org.springframework.test.web.servlet.result.MockMvcResultMatchers.status; @ExtendWith(RestDocumentationExtension.class) @@ -49,7 +50,9 @@ void add() throws Exception { mockMvc.perform(authenticated(post("/wishlists/{productId}", 10L))) .andExpect(status().isOk()) .andDo(document("wishlists-add", resource(builder() - .tag("Wishlists").summary("상품 찜하기").requestHeaders(authorizationHeader()).responseSchema(new Schema("WishlistResponse")).responseFields(wishlistFields()).build()))); + .tag("Wishlists").summary("상품 찜하기").requestHeaders(authorizationHeader()) + .pathParameters(parameterWithName("productId").description("상품 ID")) + .responseSchema(new Schema("WishlistResponse")).responseFields(wishlistFields()).build()))); } @Test @@ -75,7 +78,8 @@ void deleteWishlist() throws Exception { mockMvc.perform(authenticated(delete("/wishlists/{productId}", 10L))) .andExpect(status().isNoContent()) .andDo(document("wishlists-delete", resource(builder() - .tag("Wishlists").summary("상품 찜 삭제").requestHeaders(authorizationHeader()).build()))); + .tag("Wishlists").summary("상품 찜 삭제").requestHeaders(authorizationHeader()) + .pathParameters(parameterWithName("productId").description("상품 ID")).build()))); } private WishlistResponse response() { From ade6728dd79952738eae4bc133f60a7d8d6ae1b6 Mon Sep 17 00:00:00 2001 From: Sooyoung Yoon Date: Fri, 11 Sep 2026 08:31:59 +0900 Subject: [PATCH 31/98] =?UTF-8?q?fix:=20=EB=AF=B8=EC=82=AC=EC=9A=A9=20impo?= =?UTF-8?q?rt=20=EB=B0=8F=20=EA=B2=BD=EA=B3=A0=20=EC=A0=95=EB=A6=AC?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- build.gradle | 10 +++++++--- src/main/resources/application.properties | 8 ++++---- .../SellerProfileDocumentationTest.java | 20 ++++++------------- .../controller/WishlistDocumentationTest.java | 15 +++++--------- 4 files changed, 22 insertions(+), 31 deletions(-) diff --git a/build.gradle b/build.gradle index 07cdf21..4408f9c 100644 --- a/build.gradle +++ b/build.gradle @@ -91,15 +91,19 @@ afterEvaluate { [path: '/drops', method: 'post', status: '201'], [path: '/products', method: 'post', status: '201'] ].each { endpoint -> - String pattern = /(?s)( ${endpoint.path}:.*? ${endpoint.method}:.*?responses:\n "${endpoint.status}":.*?application\/json:\n schema:\n) [$]ref: "[^"]+"\n/ + String pattern = /(?s)(\x20{2}${endpoint.path}:.*?\x20{4}${endpoint.method}:.*?responses:\n\x20{8}"${endpoint.status}":.*?application\/json:\n\x20{14}schema:\n)\x20{16}[$]ref: "[^"]+"\n/ spec = spec.replaceFirst(pattern, '$1 type: integer\n format: int64\n') } // Primitive response correction leaves the generator's orphaned hash schema behind. // Remove only those generated hash components; domain schema names come from tests. - spec = spec.replaceAll(/(?ms)^ [A-Za-z0-9]+-\d+:\n.*?(?=^ [A-Za-z0-9]+:|^ securitySchemes:)/, '') + spec = spec.replaceAll( + /(?ms)^\x20{4}[A-Za-z0-9]+-\d+:\n.*?(?=^\x20{4}[A-Za-z0-9]+:|^\x20{2}securitySchemes:)/, + '' + ) - String multipartSchema = /(?s)( MultipartImage:\n)(?: title: MultipartImage\n)? type: object\n/ + String multipartSchema = + /(?s)(\x20{4}MultipartImage:\n)(?:\x20{6}title: MultipartImage\n)?\x20{6}type: object\n/ spec = spec.replaceFirst( multipartSchema, '$1 required:\n - file\n type: object\n properties:\n file:\n type: string\n format: binary\n' diff --git a/src/main/resources/application.properties b/src/main/resources/application.properties index 3c01b90..6452a26 100644 --- a/src/main/resources/application.properties +++ b/src/main/resources/application.properties @@ -13,10 +13,6 @@ jwt.secret=${JWT_SECRET} jwt.expire.access=30m jwt.expire.refresh=14d -# Swagger UI Basic Auth credentials (local .env.local or prod Parameter Store) -docs.auth.username=${DOCS_AUTH_USERNAME:} -docs.auth.password=${DOCS_AUTH_PASSWORD:} - management.endpoints.web.exposure.include=health # AWS @@ -26,3 +22,7 @@ spring.cloud.aws.s3.bucket=${AWS_S3_BUCKET} # Multipart upload limits spring.servlet.multipart.max-file-size=10MB spring.servlet.multipart.max-request-size=10MB + +# Swagger UI Basic Auth credentials +docs.auth.username=${DOCS_AUTH_USERNAME} +docs.auth.password=${DOCS_AUTH_PASSWORD} \ No newline at end of file diff --git a/src/test/java/com/dropit/sellerprofile/controller/SellerProfileDocumentationTest.java b/src/test/java/com/dropit/sellerprofile/controller/SellerProfileDocumentationTest.java index 7f7fe96..bae3945 100644 --- a/src/test/java/com/dropit/sellerprofile/controller/SellerProfileDocumentationTest.java +++ b/src/test/java/com/dropit/sellerprofile/controller/SellerProfileDocumentationTest.java @@ -1,12 +1,12 @@ package com.dropit.sellerprofile.controller; import com.dropit.documentation.DocumentationTestSupport; -import com.dropit.global.storage.S3ImageService; import com.dropit.sellerprofile.dto.response.SellerProfileResponse; import com.dropit.sellerprofile.entity.SellerProfile; import com.dropit.sellerprofile.service.SellerProfileService; import com.dropit.user.entity.User; import com.dropit.user.entity.UserRole; +import com.epages.restdocs.apispec.Schema; import org.junit.jupiter.api.BeforeEach; import org.junit.jupiter.api.Test; import org.junit.jupiter.api.extension.ExtendWith; @@ -19,23 +19,15 @@ import static com.epages.restdocs.apispec.MockMvcRestDocumentationWrapper.document; import static com.epages.restdocs.apispec.ResourceDocumentation.resource; import static com.epages.restdocs.apispec.ResourceSnippetParameters.builder; -import com.epages.restdocs.apispec.Schema; -import static org.springframework.restdocs.payload.JsonFieldType.NUMBER; -import static org.springframework.restdocs.payload.JsonFieldType.STRING; -import static org.springframework.restdocs.payload.PayloadDocumentation.fieldWithPath; -import static org.springframework.restdocs.request.RequestDocumentation.parameterWithName; -import static org.springframework.restdocs.request.RequestDocumentation.partWithName; -import static org.springframework.restdocs.request.RequestDocumentation.requestParts; import static org.mockito.ArgumentMatchers.any; import static org.mockito.ArgumentMatchers.eq; import static org.mockito.Mockito.mock; import static org.mockito.Mockito.when; -import static org.springframework.restdocs.mockmvc.RestDocumentationRequestBuilders.delete; -import static org.springframework.restdocs.mockmvc.RestDocumentationRequestBuilders.get; -import static org.springframework.restdocs.mockmvc.RestDocumentationRequestBuilders.multipart; -import static org.springframework.restdocs.mockmvc.RestDocumentationRequestBuilders.patch; -import static org.springframework.restdocs.mockmvc.RestDocumentationRequestBuilders.post; -import static org.springframework.restdocs.mockmvc.RestDocumentationRequestBuilders.put; +import static org.springframework.restdocs.mockmvc.RestDocumentationRequestBuilders.*; +import static org.springframework.restdocs.payload.JsonFieldType.NUMBER; +import static org.springframework.restdocs.payload.JsonFieldType.STRING; +import static org.springframework.restdocs.payload.PayloadDocumentation.fieldWithPath; +import static org.springframework.restdocs.request.RequestDocumentation.*; import static org.springframework.test.web.servlet.result.MockMvcResultMatchers.status; @ExtendWith(RestDocumentationExtension.class) diff --git a/src/test/java/com/dropit/wishlist/controller/WishlistDocumentationTest.java b/src/test/java/com/dropit/wishlist/controller/WishlistDocumentationTest.java index 35b8c52..0e03171 100644 --- a/src/test/java/com/dropit/wishlist/controller/WishlistDocumentationTest.java +++ b/src/test/java/com/dropit/wishlist/controller/WishlistDocumentationTest.java @@ -1,13 +1,13 @@ package com.dropit.wishlist.controller; import com.dropit.documentation.DocumentationTestSupport; -import com.epages.restdocs.apispec.Schema; import com.dropit.product.entity.Product; import com.dropit.user.entity.User; import com.dropit.user.entity.UserRole; import com.dropit.wishlist.dto.response.WishlistResponse; import com.dropit.wishlist.entity.Wishlist; import com.dropit.wishlist.service.WishlistService; +import com.epages.restdocs.apispec.Schema; import org.junit.jupiter.api.BeforeEach; import org.junit.jupiter.api.Test; import org.junit.jupiter.api.extension.ExtendWith; @@ -20,17 +20,12 @@ import static com.epages.restdocs.apispec.MockMvcRestDocumentationWrapper.document; import static com.epages.restdocs.apispec.ResourceDocumentation.resource; import static com.epages.restdocs.apispec.ResourceSnippetParameters.builder; -import static org.springframework.restdocs.payload.JsonFieldType.ARRAY; -import static org.springframework.restdocs.payload.JsonFieldType.NUMBER; -import static org.springframework.restdocs.payload.JsonFieldType.STRING; -import static org.springframework.restdocs.payload.PayloadDocumentation.fieldWithPath; -import static org.springframework.restdocs.request.RequestDocumentation.parameterWithName; -import static org.mockito.ArgumentMatchers.eq; import static org.mockito.Mockito.mock; import static org.mockito.Mockito.when; -import static org.springframework.restdocs.mockmvc.RestDocumentationRequestBuilders.delete; -import static org.springframework.restdocs.mockmvc.RestDocumentationRequestBuilders.get; -import static org.springframework.restdocs.mockmvc.RestDocumentationRequestBuilders.post; +import static org.springframework.restdocs.mockmvc.RestDocumentationRequestBuilders.*; +import static org.springframework.restdocs.payload.JsonFieldType.*; +import static org.springframework.restdocs.payload.PayloadDocumentation.fieldWithPath; +import static org.springframework.restdocs.request.RequestDocumentation.parameterWithName; import static org.springframework.test.web.servlet.result.MockMvcResultMatchers.status; @ExtendWith(RestDocumentationExtension.class) From 47c62e7adad54ff10e7976bce83cd785a86ce13d Mon Sep 17 00:00:00 2001 From: Sooyoung Yoon Date: Fri, 11 Sep 2026 08:51:41 +0900 Subject: [PATCH 32/98] =?UTF-8?q?chore(docs):=20=EC=9A=B4=EC=98=81?= =?UTF-8?q?=ED=99=98=EA=B2=BD=20try-it-out=20=EB=B9=84=ED=99=9C=EC=84=B1?= =?UTF-8?q?=ED=99=94?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../SwaggerUiSettingsController.java | 20 +++++++++++++++++++ .../resources/application-prod.properties | 3 ++- .../resources/static/swagger-ui/index.html | 4 +++- 3 files changed, 25 insertions(+), 2 deletions(-) create mode 100644 src/main/java/com/dropit/global/documentation/SwaggerUiSettingsController.java diff --git a/src/main/java/com/dropit/global/documentation/SwaggerUiSettingsController.java b/src/main/java/com/dropit/global/documentation/SwaggerUiSettingsController.java new file mode 100644 index 0000000..71ce740 --- /dev/null +++ b/src/main/java/com/dropit/global/documentation/SwaggerUiSettingsController.java @@ -0,0 +1,20 @@ +package com.dropit.global.documentation; + +import org.springframework.beans.factory.annotation.Value; +import org.springframework.web.bind.annotation.GetMapping; +import org.springframework.web.bind.annotation.RestController; + +@RestController +public class SwaggerUiSettingsController { + + private final boolean readOnly; + + public SwaggerUiSettingsController(@Value("${docs.swagger-ui.read-only:false}") boolean readOnly) { + this.readOnly = readOnly; + } + + @GetMapping(value = "/swagger-ui/settings.js", produces = "application/javascript") + public String settings() { + return "window.swaggerUiConfig = " + (readOnly ? "{ supportedSubmitMethods: [] }" : "{}") + ";"; + } +} diff --git a/src/main/resources/application-prod.properties b/src/main/resources/application-prod.properties index 72bd2a3..f6b44f1 100644 --- a/src/main/resources/application-prod.properties +++ b/src/main/resources/application-prod.properties @@ -1,2 +1,3 @@ management.endpoint.health.show-details=never -spring.config.import=aws-parameterstore:/dropit-server/prod/ \ No newline at end of file +spring.config.import=aws-parameterstore:/dropit-server/prod/ +docs.swagger-ui.read-only=true diff --git a/src/main/resources/static/swagger-ui/index.html b/src/main/resources/static/swagger-ui/index.html index 146b8b1..2d57074 100644 --- a/src/main/resources/static/swagger-ui/index.html +++ b/src/main/resources/static/swagger-ui/index.html @@ -9,6 +9,7 @@
+ From 602d336f0c4c9f5b4aa10bddef51f3fb54df2ab4 Mon Sep 17 00:00:00 2001 From: Hyiyek Date: Fri, 11 Sep 2026 09:46:31 +0900 Subject: [PATCH 33/98] =?UTF-8?q?chore(performance):=20PR=20=EC=84=B1?= =?UTF-8?q?=EB=8A=A5=20=EC=82=B0=EC=B6=9C=EB=AC=BC=20=EC=A0=95=EB=A6=AC?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .gitignore | 2 + performance/build-million-report.py | 130 ---------- performance/data/drop-index-after-explain.sql | 33 --- .../data/drop-index-before-explain.sql | 33 --- .../data/drop-index-optimized-explain.sql | 14 -- performance/results/drop-million-report.zip | Bin 705872 -> 0 bytes .../results/drop-million-report/PR-review.md | 7 +- .../drop-index-after-explain.sql | 33 --- .../drop-index-before-explain.sql | 33 --- .../drop-index-optimized-explain.sql | 14 -- .../drop-million-report/drop-index-seed.sql | 173 ------------- .../drop-million-report/drop-list-index.js | 62 ----- .../drop-million-after-explain.txt | 4 - .../drop-million-after.json | 237 ------------------ .../drop-million-before-explain.txt | 4 - .../drop-million-before.json | 237 ------------------ .../drop-million-optimized-explain.txt | 4 - .../drop-million-optimized.json | 237 ------------------ .../results/drop-million-report/grafana.png | Bin 276724 -> 0 bytes .../results/drop-million-report/report.html | 1 - .../raw/drop-million-after-explain.txt | 4 - .../results/raw/drop-million-after.json | 237 ------------------ .../raw/drop-million-before-explain.txt | 4 - .../results/raw/drop-million-before.json | 237 ------------------ .../raw/drop-million-optimized-explain.txt | 4 - .../results/raw/drop-million-optimized.json | 237 ------------------ 26 files changed, 3 insertions(+), 1978 deletions(-) delete mode 100644 performance/build-million-report.py delete mode 100644 performance/data/drop-index-after-explain.sql delete mode 100644 performance/data/drop-index-before-explain.sql delete mode 100644 performance/data/drop-index-optimized-explain.sql delete mode 100644 performance/results/drop-million-report.zip delete mode 100644 performance/results/drop-million-report/drop-index-after-explain.sql delete mode 100644 performance/results/drop-million-report/drop-index-before-explain.sql delete mode 100644 performance/results/drop-million-report/drop-index-optimized-explain.sql delete mode 100644 performance/results/drop-million-report/drop-index-seed.sql delete mode 100644 performance/results/drop-million-report/drop-list-index.js delete mode 100644 performance/results/drop-million-report/drop-million-after-explain.txt delete mode 100644 performance/results/drop-million-report/drop-million-after.json delete mode 100644 performance/results/drop-million-report/drop-million-before-explain.txt delete mode 100644 performance/results/drop-million-report/drop-million-before.json delete mode 100644 performance/results/drop-million-report/drop-million-optimized-explain.txt delete mode 100644 performance/results/drop-million-report/drop-million-optimized.json delete mode 100644 performance/results/drop-million-report/grafana.png delete mode 100644 performance/results/drop-million-report/report.html delete mode 100644 performance/results/raw/drop-million-after-explain.txt delete mode 100644 performance/results/raw/drop-million-after.json delete mode 100644 performance/results/raw/drop-million-before-explain.txt delete mode 100644 performance/results/raw/drop-million-before.json delete mode 100644 performance/results/raw/drop-million-optimized-explain.txt delete mode 100644 performance/results/raw/drop-million-optimized.json diff --git a/.gitignore b/.gitignore index deb9ae9..b1ffb03 100644 --- a/.gitignore +++ b/.gitignore @@ -42,3 +42,5 @@ out/ !.env.example !.env.example.DS_Store performance/reports/*.html +performance/results/raw/ +performance/results/*.zip diff --git a/performance/build-million-report.py b/performance/build-million-report.py deleted file mode 100644 index 9a601c2..0000000 --- a/performance/build-million-report.py +++ /dev/null @@ -1,130 +0,0 @@ -"""저장된 k6 원본으로 PR 문서, 비교 이미지, HTML, ZIP을 생성한다.""" -from pathlib import Path -import json, html, base64, zipfile, shutil -from PIL import Image, ImageDraw, ImageFont - -root = Path(__file__).resolve().parent -out = root / 'results' / 'drop-million-report' -out.mkdir(exist_ok=True) -phases = [('before','Before'), ('after','인덱스'), ('optimized','인덱스 + 쿼리 개선')] -data = [json.loads((root/'results'/'raw'/f'drop-million-{p}.json').read_text(encoding='utf-8-sig'))['metrics'] for p,_ in phases] -def val(d,metric,key): return d.get(metric,{}).get('values',{}).get(key,0) -rows = [] -for label,metric,key,unit in [('완료 HTTP 요청','http_reqs','count','건'),('평균 응답 시간','http_req_duration','avg','ms'),('p95 응답 시간','http_req_duration','p(95)','ms'),('HTTP 실패율','http_req_failed','rate','%'),('시작하지 못한 요청','dropped_iterations','count','건')]: - values=[val(d,metric,key)*(100 if unit=='%' else 1) for d in data] - rows.append([label]+[f'{v:,.2f} {unit}' if unit!='건' else f'{v:,.0f}건' for v in values]) -table='| 지표 | Before | 인덱스 | 인덱스 + 쿼리 개선 |\n|---|---:|---:|---:|\n'+'\n'.join('| '+' | '.join(r)+' |' for r in rows) -image=Image.new('RGB',(1600,750),'#f4f7fb'); draw=ImageDraw.Draw(image) -font=lambda size,bold=False: ImageFont.truetype('C:/Windows/Fonts/malgunbd.ttf' if bold else 'C:/Windows/Fonts/malgun.ttf',size) -draw.text((55,35),'Drop 100만 건 · 조회 성능 개선',font=font(43,True),fill='#172b4d') -draw.text((55,100),'상품 10만 건 | 공개 판매 중 50만 건 | 동일 k6 부하 · 단계별 1회',font=font(24),fill='#526174') -xs=[55,580,900,1190]; widths=[510,310,280,350] -for j,t in enumerate(['지표','Before','인덱스','인덱스 + 쿼리 개선']): draw.text((xs[j],170),t,font=font(25,True),fill='#16385b') -for i,row in enumerate(rows): - y=225+i*73 - draw.rounded_rectangle((40,y-8,1560,y+53),radius=8,fill='white') - for j,t in enumerate(row): draw.text((xs[j],y),t,font=font(24,j==0),fill='#193c32' if j==3 else '#26364b') -draw.text((55,640),'변경: ID 20개 선조회 → 상세 조인 / 검색어 없는 count 조인 제거',font=font(24,True),fill='#172b4d') -draw.text((55,686),'단일 로컬 실험 · 실패/시간 초과 포함 · 운영 수용량이나 반복 검증 결과가 아님',font=font(21),fill='#536477') -image.save(out/'comparison.png') -md=f'''# Drop 100만 건 조회 성능 개선 - -## 🛠️ 주요 변경 사항 - -- 판매 중 Drop 첫 페이지를 마감 임박순으로 조회할 때 대량 조인·정렬이 발생하는 문제를 개선했습니다. -- 복합 인덱스를 적용한 뒤 효과를 확인하고, ID 선조회 및 조건부 count 조인 제거를 추가했습니다. -- 기존 Page 응답, 전체 개수, 검색·정렬 계약을 유지합니다. - -## ✨ Before / After - -{table} - -![성능 비교](comparison.png) - -HTTP 완료 수에는 오류 응답·시간 초과도 포함됩니다. 시작하지 못한 요청은 k6의 dropped_iterations이며 서버가 거절한 요청 수와 다릅니다. p95는 실패 요청을 포함하며 Before의 약 60초는 클라이언트 시간 초과의 영향을 받습니다. - -## 실험 조건 - -- API: `GET /drops?status=OPEN&sortType=CLOSING_SOON&page=0&size=20` -- 상품 100,000건, Drop 1,000,000건, 공개 판매 중 500,000건. 판매자는 한 명인 집중 시나리오이며 실제 운영 규모라는 가정은 아닙니다. -- Docker MySQL 8.4, Spring 서버, Docker k6·InfluxDB·Grafana를 같은 Windows PC에서 실행했습니다. -- 75초 동안 10→20→50→100→200→0 RPS, 최대 500 VU, 종료 대기 30초. 단계별 1회 측정했습니다. -- 모든 단계에서 서버를 같은 설정으로 실행하고 API 사전 호출 후 측정했습니다. DB 버퍼 캐시는 초기화하지 않았습니다. -- 요청량·데이터·페이지 크기·인증·연결 풀 설정은 동일합니다. 인덱스 단계에서는 통계를 갱신했습니다. - -## 원인과 변경 코드 - -기존에는 상품·판매자를 조인한 결과에서 조건에 맞는 50만 건을 정렬했습니다. 인덱스를 추가해도 진단 실행 계획은 기존 외래키 조회를 선택했습니다. - -```java -// Before: 조인한 전체 후보를 정렬하고 페이지 조회 -selectFrom(drop).join(drop.product, product).fetchJoin() - .join(product.seller, user).fetchJoin() - .where(conditions).orderBy(order).offset(offset).limit(size); - -// After: 필요한 ID만 선조회하고 그 ID에 한해 상세 조인 -select(drop.id).from(drop).where(conditions) - .orderBy(order).offset(offset).limit(size); -selectFrom(drop).join(drop.product, product).fetchJoin() - .join(product.seller, user).fetchJoin() - .where(drop.id.in(ids)).orderBy(order); -``` - -위 코드는 흐름을 설명하는 발췌이며 실제 구현은 `DropRepositoryCustomImpl`입니다. 키워드가 있으면 ID·count 쿼리에도 상품·판매자 조인을 유지합니다. 키워드가 없으면 필수 FK 관계를 전제로 count 조인을 생략합니다. 상세 조회에서 정렬을 다시 지정해 IN 조건으로 순서가 바뀌지 않게 했습니다. - -인덱스: `(visible, close_at, id DESC, open_at, remaining_quantity, product_id)`. - -## SQL 진단 - -| 단계 | 목록 또는 ID 쿼리 | count | -|---|---:|---:| -| Before | 2,683ms | 1,916ms | -| 인덱스 | 3,293ms | 2,362ms | -| 쿼리 개선 | ID 20개 3.26ms | 714ms | - -진단용 SQL은 Drop 컬럼만 선택하므로 실제 API의 fetch join 전체 투영과 같지 않습니다. 최종 ID 쿼리 시간에는 후속 상세 쿼리가 포함되지 않습니다. 이 값들을 API 개선율로 환산하지 않았으며 API 비교는 위 k6 표를 사용합니다. - -## ⚠️ 주의 사항 및 남은 한계 - -- 정확한 totalElements를 유지하므로 최종 count도 인덱스 후보 약 80만 건을 읽습니다. 인덱스만으로 목표 부하를 모두 처리한다고 주장하지 않습니다. -- 단일 실행이라 반복 편차·통계적 유의성을 확인하지 않았습니다. 키워드 검색, 뒷페이지, 여러 판매자 분포의 성능은 이번 측정 범위 밖입니다. -- ID 선조회로 쿼리는 2회에서 3회로 증가합니다. 기존 read-only 트랜잭션 및 MySQL REPEATABLE READ 안에서 페이지와 상세를 읽습니다. -- 재고 컬럼을 포함하는 인덱스는 재고 변경 시 유지 비용이 있습니다. 재고 쓰기 부하 영향은 별도 검증이 필요합니다. -- Before/인덱스 단계의 시간 초과에서 기존 k6 JSON 검증이 null body 예외를 냈습니다. HTTP 지표는 저장됐으며 checks를 정확성 근거로 사용하지 않았습니다. -- 다음 후보: 정확한 전체 개수가 불필요한 경우 별도 Slice API, 검색어별 실행 계획 개선. API 계약 변경은 팀 합의 후 진행합니다. - -## 🧪 테스트 결과 - -- [x] Drop 테스트 43개 통과, 실패 0개, 오류 0개 -- [x] MySQL 통합 테스트 2개 포함: 키워드 검색 페이징·빈 페이지·전체 개수와 기본 조회의 기존 조인 쿼리 결과 일치 -- [x] k6 세 단계 원본 결과 저장 -- [ ] 최종 p95 2초 목표 미달 - -## 💡 관련 이슈 - -- 이슈 번호 미확인. 실제 번호를 확인한 뒤 연결합니다. - -## GitHub에 이미지 올리기 - -PR 편집기에 `comparison.png`와 `grafana.png`를 드래그하면 GitHub 이미지 주소가 생성됩니다. 본문 이미지 경로를 해당 주소로 바꾸면 됩니다. 로컬 C: 경로는 GitHub에서 표시되지 않습니다. -''' -if (out/'grafana.png').exists(): md += '\n![Grafana 측정 화면](grafana.png)\n' -(out/'PR-review.md').write_text(md,encoding='utf-8') -for p,_ in phases: - shutil.copy2(root/'results'/'raw'/f'drop-million-{p}.json',out/f'drop-million-{p}.json') - shutil.copy2(root/'results'/'raw'/f'drop-million-{p}-explain.txt',out/f'drop-million-{p}-explain.txt') -for name in ['drop-index-seed.sql','drop-index-before-explain.sql','drop-index-after-explain.sql','drop-index-optimized-explain.sql']: - shutil.copy2(root/'data'/name,out/name) -shutil.copy2(root/'k6'/'drop-list-index.js',out/'drop-list-index.js') -# HTML은 외부 라이브러리 없이 표와 문서를 한 파일로 보관한다. -png=base64.b64encode((out/'comparison.png').read_bytes()).decode() -body='Drop 성능 비교' -body+=f'

Drop 100만 건 조회 성능 개선

상품 10만 건 · 공개 판매 중 Drop 50만 건 · 단계별 1회 측정

' -body+='

Before / After

' -body+=''.join(''+''.join('' for c in r)+'' for r in rows)+'
지표Before인덱스쿼리 개선
'+html.escape(c)+'
' -body+='

무엇을 바꿨나?

인덱스만 추가했을 때는 기존 조인 순서와 대량 정렬이 남았습니다. 필요한 ID 20개를 먼저 고르고 상세 정보를 조인하도록 바꾸고, 검색어가 없는 전체 개수 조회에서 상품·판매자 조인을 제거했습니다.

검증과 한계

Drop 테스트 43개 통과. 기존 Page 계약을 유지합니다. 최종 HTTP 실패율은 0%지만 p95는 23.46초로 목표 2초에 미달했습니다. 정확한 전체 개수 계산 비용이 남습니다. 단일 로컬 측정이며 시간 초과를 포함하므로 운영 수용량으로 해석할 수 없습니다.

요청 조건: /drops?status=OPEN&sortType=CLOSING_SOON&page=0&size=20
75초 동안 10→200→0 RPS, 최대 500 VU. HTTP 요청 수에는 실패가 포함되며, 미시작 요청은 dropped_iterations입니다.

' -if (out/'grafana.png').exists(): body+='' -(out/'report.html').write_text(body,encoding='utf-8') -with zipfile.ZipFile(root/'results'/'drop-million-report.zip','w',zipfile.ZIP_DEFLATED) as z: - for f in out.iterdir(): z.write(f,f.name) -print(out) diff --git a/performance/data/drop-index-after-explain.sql b/performance/data/drop-index-after-explain.sql deleted file mode 100644 index 1c3bfc8..0000000 --- a/performance/data/drop-index-after-explain.sql +++ /dev/null @@ -1,33 +0,0 @@ -EXPLAIN ANALYZE -SELECT - d.id, - d.product_id, - d.price, - d.initial_quantity, - d.remaining_quantity, - d.discount_rate, - d.purchase_limit, - d.visible, - d.open_at, - d.close_at, - d.created_at, - d.updated_at -FROM drops d -INNER JOIN products p ON p.id = d.product_id -INNER JOIN users u ON u.id = p.seller_id -WHERE d.visible = b'1' - AND d.open_at <= NOW() - AND d.close_at > NOW() - AND d.remaining_quantity > 0 -ORDER BY d.close_at ASC, d.id DESC -LIMIT 20; - -EXPLAIN ANALYZE -SELECT COUNT(d.id) -FROM drops d -INNER JOIN products p ON p.id = d.product_id -INNER JOIN users u ON u.id = p.seller_id -WHERE d.visible = b'1' - AND d.open_at <= NOW() - AND d.close_at > NOW() - AND d.remaining_quantity > 0; diff --git a/performance/data/drop-index-before-explain.sql b/performance/data/drop-index-before-explain.sql deleted file mode 100644 index 1c3bfc8..0000000 --- a/performance/data/drop-index-before-explain.sql +++ /dev/null @@ -1,33 +0,0 @@ -EXPLAIN ANALYZE -SELECT - d.id, - d.product_id, - d.price, - d.initial_quantity, - d.remaining_quantity, - d.discount_rate, - d.purchase_limit, - d.visible, - d.open_at, - d.close_at, - d.created_at, - d.updated_at -FROM drops d -INNER JOIN products p ON p.id = d.product_id -INNER JOIN users u ON u.id = p.seller_id -WHERE d.visible = b'1' - AND d.open_at <= NOW() - AND d.close_at > NOW() - AND d.remaining_quantity > 0 -ORDER BY d.close_at ASC, d.id DESC -LIMIT 20; - -EXPLAIN ANALYZE -SELECT COUNT(d.id) -FROM drops d -INNER JOIN products p ON p.id = d.product_id -INNER JOIN users u ON u.id = p.seller_id -WHERE d.visible = b'1' - AND d.open_at <= NOW() - AND d.close_at > NOW() - AND d.remaining_quantity > 0; diff --git a/performance/data/drop-index-optimized-explain.sql b/performance/data/drop-index-optimized-explain.sql deleted file mode 100644 index 10f5ce4..0000000 --- a/performance/data/drop-index-optimized-explain.sql +++ /dev/null @@ -1,14 +0,0 @@ --- ID 선조회: 조인 없이 정렬된 인덱스에서 페이지를 찾는다. -EXPLAIN ANALYZE -SELECT d.id FROM drops d -WHERE d.visible = b'1' AND d.open_at <= NOW() - AND d.close_at > NOW() AND d.remaining_quantity > 0 -ORDER BY d.close_at ASC, d.id DESC LIMIT 20; - --- count: 키워드가 없는 경우 필수 FK 조인을 생략한다. -EXPLAIN ANALYZE -SELECT COUNT(d.id) FROM drops d -WHERE d.visible = b'1' AND d.open_at <= NOW() - AND d.close_at > NOW() AND d.remaining_quantity > 0; - --- 상세 fetch join은 위에서 선택된 ID 20개에만 수행된다. diff --git a/performance/results/drop-million-report.zip b/performance/results/drop-million-report.zip deleted file mode 100644 index 836731f4492656613fa9279a549d2b2320738224..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 705872 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ü|H9AU)Ftil11M-N_HKJhA

id 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
(!@YaZ|Up@Qo0#rs!J~Zv12=+ys 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

)Sl#;3xE?{+=a)lj>@K4rh~nla zTrr1p&yddWk?rF(IeWjsSiqpQ-kgYXi>39n#srX0MT}e{<0fKo?B4Zfn zOKOCU+!|CiJQ-m$GX6{I>BEcvhI>buW%;?eby(`S5FsH{hqOokU{&;*#UT6mH@7}V zKhlM*XXY4>3CfU#_k&=^?;j?Ic_oFtG`zajR%<98oN9)OIKd0Q2PFMBE&xqYF>m&A z7e5Vp`8Jok>y(TYKXtZ$L)sZSe@Afy*y>)b8n~RWZ)>h$LQKzaUP1K$N0@fGAT-VH? z^>a42$!hZi^$ryZ-?_;_8%GB9&<$9_KIER>844)b zEIEl(Ufyh>O*;pnl|0{U`_RWO=75_by|U~;Zwzs=65+0u?1C8 zt3U$EqPSp})EWBb`EnuVlHvZ@j%WD~#W~1S<&L6#+RxroO59y8;Z+bm7)SrSZg{pu z)eyBQ9~LENJgP!VQlDL6m~%X9&2WU}x!!p!k&c-c=9v-;|6HA~vT=y_hN64Va{&hD zBpvUwVqpOfhK8GW8iqn`Uc#irLMg6yxdC!zO1Hb-jP;rhk$FtR>F~7bri*&t049%x zy>DWx*kVKTyWaIQ&QE>k%~>cY_RO5-U?3BzO|6T8B*q!y&F`lfM%wOGq`PE{us_-ln(&TH!}8S}B& z-Eh3(`Sze|t>0ixX=!h$OZxsAzoJ(UM$7#*Gc0K|K@2k+c~-l`$_ZaZotUjq!PTlJ zIJLw>8w8@yTQ+cZixXw{*D(m2$a}Af80z<9ids{(eyyI#F{5!KQvI@b&!k$S1a6>! z`bgF9glCU9bV|G9^wW>mfDf_)cet53Q`E3hh)Px@%O^+#C;gx-)IWa(pEu5bl!J&W ztc3un10z*G0yXf>S0z|;rNCNK{xt3;t!=lOUhE=iL*q(^&>wHawXJ!X`92fl1(3z2 z%-?-ndf;j5tZ}WJEPpjO=){Aa|7}PzcS7kra#!St(r+|IrOy`AGy6A{2pLTfu%yUP zQ6(y25}dsku2Z&BryMM0ZFiY9IC6>Y55g8nhMIi&bw0(FJ}n>$as&Te&LLis=?@q6FU- z>3#$51<xWQkI#L zI`AfGdX3bF#=J0_`OMA}-mGoO=SoDlyvg|!eDn8?*eEZp={rTb^Or?mrPA=H?8lIa z{Uj|>+~bERTLnJV=84=gGpR0{6j78;<87*5Cz8bJN)ECMB^4{g{1*V}?n`l;`|HH} z;^);c)N(inXBGZB-BSyC&K248Fv*^cFKGIdt$Am#dcsJ?4kYM*lS9)tv!E;!*7Res zYYhjWmT8T%OB*jS7X_fw8L`)ukw-!umgB+;>$-|9HluDbyI>i_uN=YV?2cTwSgYaN zqk96`Hv4xlyj_31&$Rl?7{H1ZqY}4v*lUxUu7cHqj&VI&gQHHfmzBQnQWM>4vx$3^V*Wg;M}Mw{w#e#<8rR7Lj3)?>^-OSjF1mEpjb%sks@8w<$h zgORvxk2FVBm*XkccxE2;JIQv)pP^@FdKH+>1WNShbS}xTC;-}hh=2AXYdKG|4^4N| z=B4fxW;13``XpL~nv8Jafhfb52t$5>8+{kz&Bu_cPc-~0#G%p88Wi}|s)ZH6Z35D= z+fCY!)jCvpK!jxLb+st#=n|7^3JC=$!pvo5;ae`(zTUHNz?f?cP*C*&!{7_U65ix| z(b7I-)$tj#SxCdF5PWjQHhJYxW;-R5!#~W4U&-DvjHB#P$Dh#jjuGGer#?T6FSV~| z&ZXjZ34(37DSbs2O1Ac=JdGh99`z!xKZkW$V`dvbJs0`XC*(xw`&o7aB}H}w#_V}{ ztkeYI{O-03j1~04>)4uwPepP5xiVv4UFgr*$?IxsD%oH&0BT%RaXJ7^K(fC!QeGw2 z&tWDvw*20zZDLs0_mN7yP00;um6~{%ntO?RYL#B_ysNclALJ@HTehD0V;b2IJe;Ko^=hhVys!ByCY z?H0o%CVS_RJvO>*dqY*NdZ%iDjBLglS$i?q+5=Eoz)=73X{DzllNIK+6{Awmw%y~3 zU0v0CR>6b-DP|S1vNnSw8qd5wT3;;* zeadYaDZA(Qt8en5^Ac)?}60pM`nmU(3)+VCIt&QTWo<2 zSu@PfYHiB-ryYtM?G*h=>d60Uhrzi{Q&*iu&FNjy7WW~n?zbMhnEcHWJtr_e#>mvz zBVbbiE8NybBGmiMCMu)il3bXMB91iv_hq%tlL+Wr>DT2Sj$3^{X6JUtwp{%+Mmk~y zV!r=I7^^O4*K%XJ{(;(5AgtcNrQ211pORW7TMKq*;X^}!wV{%Z*fU!Hs)dJj*T8Jx z`C~bThE3oU^rUT@4Qh_*vyKSMn~ z=6O8h9L}4sA6!pEoDhYRRWDrU0UrCMJt+7QM|QmBF>BExkcyX$3hiyO?UU>d`kSRzGs21#x|VWJ z*RXW~X_oU`2@tz0LkIBmqn%)*DXam0<`Y)$DrhGspu;vpc9<|=0dAN^IrL6k+~afm z#>!g~v_)gTg;A_I?plj*A`RG-G@;vCU*k{zd;n|D)ugmK7FPO2XycQEQ~>pzvB~CD zP%(CcI?F@M+X;aewM)Lh?3cc z4msF3>FVR$*9(h~%!ZV+NR;uky!oJ0tF|9MlsH?}UuHmFSyQyxuy`I{CBsvnBZ!AlVzhIc#x z>)yRaWH_;z^8v*KQ)P5#_n+j~D(uA|I=G8?C6lIhIMiV=;|~OVYmJ5K2?K06-jxih zoZL9pY_*fCT7+UBfN1vG58YfuW-SOk3!=N@4Bfj{t}60P07|nRJ*s*C(CAt%1*OA3|!Eeoc-36x8r(<{=GX4kh8N4{m6HBh^wcruursJXzEP z@+1v$&7Y_=n~s__VRPJs#Xg9sL+Vk1GKb;d!28nBTFWZ$KnW}f<$RtDyfSyDD(G!XYI6yX1bE>j)(xD z)Qfjjf9J5;yKQ6fIhSKt`Fc_&P2L3HyO3q3`%qjrT_J(<9 zry(=al!2O}B)B+0jp9rn9qY?#T?cDddh0llsO(*vP9p?s8dTW6VX`5Jo5F<^oFcKuhXk#Jr=9T*-5T zW-_D8n4=nFTn-)z29r+tsQGm3zrsI(Q967{+KZFNBKeoBVhvic$b{Gll-XBZuN4m!f-!nr6@IqHtyRXqL(O1X#GBtcpvwuhdp&`dE@x z35iVE0k?Gu@fsW4mSk5S7f%SMRC(J+#cR#VhbK*8Fj?0t_n?g?DNn_^2SMi&-{dRh zF4wYj3gL=85B59$3onKiwSK{VosFi~lNU{OjF!qk3CeKXECUD&?tFhlcpQ%4_jB70 zE@+P(yM*^v{fD%MI!K}dxh$kq8>j3Hd-N7`farq>ij{K+zal$qi}-$~&>i5*iAYb9 zkO0Vsj|#I`w(ICR(r9YEmZIRkkh0&F?9?@iH@;zxwc6ucC?ssnHH`>Hf<_9E2AW$k zWOjknR>cfC#(V=K7v6(G>ewAdVukjV@{ zu-bHm09PF;L!x4@bym-EX?>{@$`E%=z-)b~7vGo~TuIoVJJ&8lJ}lT>xdFm{{)dK} zjBSIw;OQ!!$9i`TC#{CRvEWcq9PB2+b}LTm6NCC%a_`0*KR*V z$^kan`oZO_A3NBBn-ZeGw@VQY@7sNX{Ta9YPNEeozGyrN1R1(!+B#GzFk~of!#^b? zN~pyUo)0dK%euTBn1pob-@YaMY-LrN-ijsY5fk#NfqK2m5)$OCz1G=wb~zsle|QH} zH=2H|JhWZC|8Se_f{>fCNz`IxHAV>fJVPPPK9`{Rl}vhVi)27R;~kbl11hI)&X_mm^GaSG&AizBtq` zs!8c0KX}k|u#qgibMVqVPxe=GEG!{MCx;4MS3|#9-S{I0bhkU4KFM zK8W)#_AD4MJ8VejBDLGyC<+%dwqU+MH)e;8?CIYS6o0b%>$%X zT7yiMM+UF4uw^eaP}f53L^@_FOZ@1b5A+6`Wk)wv(dGZr&*~$Qs1f}f=<{snf)!|L z+m@mcw1#~VrNZh2vfDbF=WbA~zXz4uOX#{Hxh{>iE|vMu0IgLem!b0W8TC6GfKnfM zD*|oP12Vq(>6iX_l5E6WON=%tiph%4*P4>VAA*p0wwrvn0Fcm_6)RIu(`W9nz??}e z(xi=3?e{~%A?BPdM<4S(O#eDzBC9P_BBTW66Iv$E+#n>*e4+CewaX>wai}0uHv){( zQ7Y9?A$>5AW%%mjTqm|NKb#*hIam~A&+OlEe6!}J8exbW%_~Jzu^vLyG0*NSeIhb} ziMVH`$)w|5=Pb-2Qo1BANxW1`*NPax9TY-skNrdjGc=$cL)mEc7LK|WN{-~)M7Ap_ zJmXfo*Z)5^7i6?>iSKU7*Sh!9sc3i7Ah+WJTJKV>)hS$Cr zqqu0yVSH*DEeJJyt!kWz1efcVO;JxoLl`!-PK2`nTt4RQ3c+GmOK@ct-FDo{hjV7* zl4ZB<;{vx|DYAWyddE04q*M8pG<?%mJ~=xAwq?0)zEJuNz-4-9{01F3Pr3qT9u1@M)r$TgS>k6*hKv2QM7Q13xCpn3XxN6SXFX zLm_1VPVJd8ep+$b|VVNTTq#iHy3OabzF38#nWC8<$eE>m%OI$~7{BP`3iBvENI zquRqhbxZ1(#D_H2NJ)!)D?r*Jf^$(i@~81g&R!F&t`+KP^rSZA<b!lU$ZRNFW1a=#<_Nv ziNao&y^Yc4UD9gYG0P0@ovGgH9a)*8<+N!Z73&|bxy5Q8-g!4PjrB4$m}E&ALKy6w zow|ElC@_ndh@v;P=IgubUp5Yg7gVtzTk<2F8ved#T{HJ<$;Y0R44S(lp1v-x6$Y8s z>X|F16y4`vR@UxcmHb`i`1I~87JUDjzT7xGjJWY{EXP2Ck2njIly@~aBIQ9oaF6FV zrpX*G6++%YC;7c%2JlhWonL3*QB%zsfyEG8SIOyiPp)K$F6YqUo z(m*wMlM9YMoYlLy*)!}saJL=n+tHUIZGyRy>r&oXZiymacO#$0+SFL}j;SCLEx*tQ zVfTa28Je_4L&kB`wtvHWf-2$54t1cS6?*u`f+ZHc;&YLtyG}8-Gg80@tIx;lek>9f zb`y2+LDzK*V{Qj#e+E5Yv(08d_a7`C4oS0^2t9-`{WP{R^n;wxEAhw0xyM((;bn$L zusq0BxT=BK;eIMzzzltsVfvPtrR<=fv6@eLgC4MRz48$vA!4td4;qdYxa2B=`#zEE z{NWAx%@xFLca91ZQT4W1qp$6=10=)$W@EZT7{j)i$|_8|=EnvwX4|YKMV7xt#q}#l zPq(-AN^`eg5%vcZNa+&Pe~6+g#<6&|rY|w}hv@J%pId%?OyhT~YA#vlrkP8tdHl*6 zFDnl}Mmg@Irw1tS9s=3vX$jftUiU*VmI8WPb?G7;0@K1?)(v)@XPPnA8S>unJEqY1 zt3o_WosAejwh6{%znf_fK`oRgQBB{b23*LnhZ#c}GhTBKiZ}~T*u+9Qesx@a>Es5K zl>cof-O_J8z~_slaO1b&omrW4;4pdyahy|kQ2b0TYWPLr7a+BmX5hc%lUhSw1l~yW z!2}D@ln+E0W7G?@+K9bN-GRZ7+z)FfPv+Df!OPYa7kA10Kg)Bf^DOhY2O*!_=q9T^ z*)41|V0{wm*Y_}1rk##v%rcbrvZ1y^O$~W@G&GOhB47D9vbeO-{`(kEw~khuXVYFV zxTI?B^z68i#Te4qHD1o<2f%u}610hM-95#Nzs^q;Asl(WY#K| zglaneDR}%xh?g@y7Q}_g?Rj~J!GF76emzWi~D zQzYxju1gyp>J<}gT$$Z6W4jTAMH6FK8r^Trq`S;zU9Kl4+6~oHFt8pvXB=Pa?))Lw zJllp7>^Ee#SCCj=kis2@@uq95-sZnz~)r{ z=$s37m23B&YvoOBQ)jwVi(>F*b9sKzlOr7``|JIqY5eI7G}`NwR~E^#RBT+~)MKv) zH$r<~ZT>2ff5Z#vXcZlx%bvYTkfqJ62su8{oc$pwdXZ4Ej-Zb|-zhm0P$v;usD|rY z7a|h61O@@xQ8Pvtgr%LauwT})oG>!F^zK#R_&+nDuA@IL95%VSU$wN}cED1zGvS#}}vd zB~XUd)*K*LYXNa@M7Lt)yMWM*zIi1tKwzfaOS9N{PTl34tCncJGsO(NFWA@*fONWT zw{$sHqC!5W^OU5PT-A8KxD_^J(pXIG6?Q}%KQ!9?b`Zn5n0XiG?W{Iur3B#+>9C~| zj`mf?gN{Y>akdtCua?}^WCOEy7d^nS`B$<#6cre!rYgH+KV@>JKuek44YH7iT!#SQ58^w8C$T=)Y?YPnz@jMk#Jp@8p@Gn=p$S?d*?pe*i* zq!j`PJ>fO(8H?6heLq1W*}#upv6qq*cZx=Lkb5q$3p9X6{dfm)hy~+f9CkG zo76c4;;*z3A+D~j%-w;sFwMD#keMXk5wWvD8IUT<%&vEv;HJknwO|2$a~5MRUpzI~ zXl<+$aIV!mm)b41kLydUl3Y?E&CS zb@r&UVxMRR^CVBO>PX)Svrn}idfqtOF+JYv?WJcV#BcJr|1ipRp2+_!me!Wtfmlg!dO~wK&WG{92H>+ z-dWF>Sv9lmRke%VX%sToU0=FNK+_ZZjN$*wF5mh(?JT6&4wjY^)p}~>ev3o=9xo>40ovRiCjA_EbtTIbusgHIkF?O^-(l{^aA!VEn~=-z0(~{MA3)P z3ScVgX#ip06c^&hU?wrLd>^1clNjS{J?c48I`cwv<9DBBQ~7B&LWiT~S_Q0!vFr}E zoKGExcnzxj^VU%TbP%~YC##hit# zXEQROr{$ArO1s3Jf5ul0o%`qkF$(}z2!rdz^;#n3#&?;>#*&%wO$j3a#uf<_V)Ee! z*UCdZTzqz!qrxIRdoxc-CMxu$Jk|*6e!=H#e4U0N_t2){O_HBpdg#-j+CwEu9q?x? zR=t2dHh(wUE@eLZ6R6>naVBvgRc>*H+iy!>89?o!+a#!>2#f2jcbk(FxVA>p1&A(m zS9*jqqDQzc+937Us&$VqKWWa7*%zSTCi}?*XyO{u-Fjx2Qj?nV$mUwZ*)W&)&F4_a zl%?z#T3FDyMsiYN&hU$Uo-nDw{*_r%Xl7qd$R@8V?KI$M1SrJm46uQ5*lXZVybY@^NVm8gO zB}`(-YwYiePp*8TZ;+BSrX(V+iTHX1DltYkc%E=hc;RxFmiR)v_q)CD_w2YqrYpZ~ z`^Qw~FweGbWy+&iNbNItt|jk2sS0A)k{ZMOuvo6-bk#D@!0sx{3*Ar>yzzqDwgoQ! zP(;$D+(8}%k*;|D&eTeRWo4vj_7!}tgnCR?a5fErc}m=m14cT3sS95hZw}&)nUeb~ zx{$~*Rle4MHZLcJF1;71mXs-{+6?Hq7Db%tOL46yDaBa;2CjWdVVCVBTRle{!Z6SG zthh=Ov>Icoralrw`Z*s z>F9gNuP-gxxx%j_hsPf0bS_B@PR@qi;YU6b?os!yW2@w|!Y!-t4HGmz>(UedwRL{y zyyJ(A?T_ovpWgn~9J*YUJY;6>b=We(4yt}+_Qdv;oUS`l|Snqm$pV~&*@t72N1R!qK5P#F*kkY3< z=Fxly*B!n3)QVA@<9_(`hHxm}1jUA59{xO$ICmD%?m({o=Pg6m^4*zZEqc~*Ban0- za$qi;r&k4-cz5!?(8m#CscCQ=4DM;L==2N<)7+-bUT8Ja^y+V@WC{GySntNPh4eJk zW{N13&qZi5X+ZLlP6+FU<_H2_%3j!EpC2MRJBs4*akld9`sYPF!eY-cg_k0@A->X67H&C*$oiPpH6~2!FnHYWTBn#;P5YH?x7<%3LQ*9+dOm!y3dCqZuqYaXt$(%$`sx zvHaY9c;r`+Nxs&O5BOK@QSsY{3yK-WHn&O3h3C2Dor13+-5+gU`8Tf2AYMrA`I{+W zUah_XX2>qD;VgM~Zc!*QPrRYKJr)W4`%fCTI;2jzx4aEYyDJB@f1PYt7CFTkf~{A+ zRQ%Z-OKWMkGj`1xTM-3pIHm37-qW_p{J{tg|NW%tubM}a*$_H9>E{jQ_$4aoWIBE;b0?FIjm zmdFnPuBlf3Z5#Esw$L9W<6z=X06b*b|93&qb;B_tY0>|;;v2(>to~0xFXf;`$^Abe z@)T1Ak@^1w+HR!(f7|~j+pIP)oAnW7G8hs1$qoxBQP~!eTb%Lb7*$IhEroCp!@apH z+Ck#j@>8t{{Q>}lW=@XaUc5-|x3bejd7a6JYn}zP=o(9Qm`egtv>&KgQf)_pk2aCC z4#-^G6gqvGf!4uA3kYy3MHcb{= za?+EEoiM2i@S8L6tb%_3rOeANwC`4HQ zocB9^YWCw~{89mcLoK0TRRa+8(1}6W@ zQ?Bei^7Pz_&~Ex8-;q6sEFOO~0*k6mer2dqobeH{m82=Z?C-6o17ukZ>fY^{sTDVO z%|d4^ld0C$wYR+%Zv7nu$h_u12m#8Pe4{>VZQy|*y7A@*0h|aitD-j%j0M%*;vD)k--3*X<^%yY=Wpdv( zOxtyV8?q2I@c0!i#?O8JxW%4dK@G#9UF?bUf2uS%WLEHEA00sSEix~| zu%}srA-Qeig~O3|Yw?EdrAR9H=$DMszmTOjaP2q!ju|FG?ck5No}B z;Y*FH`e+}SyS`p44hCSksf#oS1Ho`70T(ER?exRoVBVM`h*y?I$mDb9x>O^dGHf<38RmvRn88ZR1M2lbYjWZe`>SuuySS3`sW{Ke(V zLRtWn6NyCn1}^?lwTg@#;L6pjopT_cy{U3jTi1Rc+9eR7dGYt+68w! z*!(#9;=w-Ss2Xw3kW6Tqv2v^vHITAdy<)K)RR(W(dBKp|{DJ+w`zrBf{nNUMm+MQG z#rsIwaW7nGUE;lUsEm@~>{O*&3ArV~Nr1w5r^ztf z_gC^6d;iiSf@>y_q_qOehDlYoX_e)pBwIi7?bd=}l>`g~sqAX}^!DlnMTo={Tv25WJDJ7S%0mNwwYZt`jaV1rG6^m?rNAHdE}tRF z=H=n}d{SRjW%2?a^jVx+NQpcYIX*1W_50_>*yvQRM0RAOR~!J(m~!U+&4i2 zRJVdbphMKa@fh`Q90gq4rG6H2z3)EG*>Q2b-|3za0{;=TOaarzpU73#IM8fQ{}yO@ zx)~14KVr6vJ+7}eH)KuX#*>v$ZcPw!M#zGR9aVh``sTKIzpC9R^{*9CfOQ2y;4>aO z^_B_m@U{{9%=?Qumhx{*|M~he`h)Vco@HOb2e%|NM^o42?}e%r;jmI(Ro;z?bY{ZT z!}xGWW_F0;>F>DuFb2(kbu`xcrY}X$P{;d)`&Vv^n_Xs>SQNqVsEy|}wOR{6{Bgqm=$M*iJA`U_nr-}8vnx9q)yB6m76HTGCR`SM^?QZ6fm8LIO<`?<7cGdr?sCisI^LJW8 z@mI>jFkWp)^_@aRjsvT#8|Mns>%GLxuq$|^nR^IKG7wmz(UwgsL~@Z4WURJVp5b$@ zttT6qi=uIleb%wD||A?gOQ^5%l88=}Mhm5L1dX(k$($*{6bgBQO^M~j1rYd^ie+Lxa3$*Ba)2vCl zXe?*Uc|R=0vEF3-%{znfIlFts-tdG0Ju;7m{y%0nor`3~O2j$U3KDPQ^Z-6QICJ!S zQi-S9<~vZ0K~1<4>6Zkk$JnyfmY%8p$4VFnd8Q>g@($Q5I7yN!>AlZ2IbRC|Nxv1W zxleOuH;OOGGyWF|d6`LrlFqQGKUEcwa|1RbnpUdv5-n_v?gIu(?xQ?#&|>T7{37Rf5*s0 zTp^adeCe|$(;-r2dzf>)TJ80e=m*;iQs97!A3uK8X4QD&_>VA^-i`aLUXow!nSb$X zI20*5vHz&o`dIQSi+(l`4_Su@2NxG+Fn3U(&c>A_MoRD>-Ce$TP%102tqZbA`Qe1j1IP0V1IF?Pd{9n2-y9*466vbXe|FRUmp;An53{pJF{4b1^ zG#Kr_Y8xAp#WvRv?}?;BnZ$z~x(jpuM@Z|Mi9D(JM}4Nf`v?hafobwz9V*lQ7e37F zM`BfKLB6|e9nLi3tn1f2PL}_+*mxP&>1O-j<22kJ+gEE^yKprA?*XAe8Ax91yEl{m zhO=TB^8iPKhYZBU3^z*9XPuS zx6G$L`KeRosM{-y=x`dP)A;DdU!Ep9@Mh_RaF@1RO#k;|!Y)MI)8%q>n89dhn8AbQ z?Y{t9coz=5Y#u!}UHKCFaMw48G`IrU5kxQ(SNPRrSUu-WUiA_f82b>VO(v8>>^1M( z8FloK4mKIp=$N$lCnD1n?>yP#^_=0q*TBt7e5CILne@Myq2{UXAHQoYn;ai@3W{!h zuxWf<`TcmQAb9lx2+U8|TA^VG#`&+)u>Lt8qOYp_Q#9?=pqJe)55#)tdEIsr$oiy# zU{j>P>b?B#P=w?skqSEEff~wp08*q9K>Z1s07Ie{J1UtD{ktTA<-0m*w4Wj9I_L$i zB~x(eKSoS(OlaI$^GEo}igZdb>U*;2y5pU=crsh@i025lz;ymtM$`c&#)r;`xH=2& z%-Hxhct{7xA_5352>1#=pDs;373gHRBJy9A*l6P!uldTWjg&-X1TnIY*%XK{X%0&; zYo4$q3~kZyM`Xuuqq1COWHM;1S!F+F(Y#9)Ccp>NCDr~U|4A3XjWUe0gGbvX<|AQF zu=}|WMXNpeHZ9=8dLy&s56m1{hWZP~QW0#;Jic8vcX?1b~>|F%<1#&gpb2;-RS(d|uA< z9KK-vjW9?ySY3jQs^COH%<5=Q{CR**DQ~QVH^Zq5%^KP4LzWd16HK8i{?QFlwG3D7 z)#-~{Jb}hu)q$zrM+!y(JKd2t{bSZt3P{3lQd;OjnB18IqLmR+v@!f^Vz?3)lKhVMlXVxszt!-Fa0%&SFV!Zm#_t|M2HSJ1L!TZE=PvBXb08IR z3abDPOZv2LNR%wm2cGDx(nWNxCE@TIJ=OrKJxb5E%c zmTC_~7<^CqStp9eO@SBTkjf0Lw!{m)Y=X=S8=z(ze2u+errNIvc6I z5gr7BaKo8&qSF_3IF*(95po8|p2G;EFydFmdg;-#=uCpJgAmQ;xUr&nhQUHymq5=2gh%H-6_7A<3s zA*-GjDP%ypeIXe*mwq@(zuWGOIsws*>PPGhou!e}W`*!8VCBsrLxg3tBRTaCG9JTA z--xkPBRs1SE27Ch%OB<8YS6xxYqbBcsLTfFFyI-I-9;~df1D3bM=l46^GOm9dA=v>eAy)`3jxhHqWU-`0;ngI1D^%>$Zy z0?3Q>r8Ig7=JF(uD#dn<^LZkeVWsV`F%rbax@JV2)P7?S08M==dzXiJNBx$mGD7SF z^$_gyswefFX2#kBXiGO2X26;YBUZ*>+~UsGzA@@Ua8=a?6ocsS(!(e zkhW0CSKt~pnoWpW!rYvD4ePMe6cKA1q1q@%Kbi-0;PTSEaVGMy>HQxXI|rEj-QH@5 z*T$G(=}7aJOpD$%pA6m`i;I!+}RX2!coC?9UoK?v$H zrQ2IYh|JNR(Vp8*D$3p=#F7X?;VmvsTnNe7Ms*Cb6(mGzD7B}6e@J0Z5RKpMXH<`U zfwSc6l0xflRXh7VSHGrt5Fs|!7z{?m;6+2*@*>Y|#vbFRBF*$ebW`>R4686>#I!#9 zjLx@V4+?D|6YHZ>Ria>r;d3)F~Z# zdH$N*uQF;(CnyT~zEBtDQ*qS=7uoB_VJp+Iuk-DHZ%QA}wG|OPEzlXwldi)Me~zfk z(ToN|L0Ss;!OJVtxQa(eMrZhsuV$pIcxjWCq?T4|v!0q&VsUrw!8YBY)abQ1>H$d| z>t|TI&&R3iB;oN~SZ;>#2vqiCTtvAt73p0t$_VP(amS9T`ah+%g4aX zfj;aDhrQr=4>wVh;_Su8kDLOLd2KC6qAAEO4|btxBN`mowxoy9>9F0<;H|cy*)QD7 zw?>5;dE(jTzyzN{)+i36!=!9X#t@L!4RXg+FHEt zsFPmKw+(+7Wlpo!7JTA$EEY=~Z7`>J*fXJlyE6Yh*MRcl*yc{?67}EftBbl-CI1ck z6OYiFG4GRy5ey=8N~jAR!&d2M&L@rkhnDYtXY&o;R(n&_sM(^+-kX-9MN4Vzt@hqq zY^6qRY86H8Rhz`t+B-;zy?4Y&BKgMW`~L9$0q^Sv$Ki-Pd2-$7d0ppu-`Dk!qt9i{ zG7*B0E!wsE$ZX+hfv0o?B(3u^m3rej3ebDS;<`K!v^X;;zeYwz$}~rP7x^KTr<$@@ z^(!q1N8H!klrLUW3LY<_3AkZ~UhZ?O64cIZ#NDZHOX_^b*B>^zPSD+afR17pF$Z{I z-p&M12B8Ar2J-;9ZCHP=`3r$=DnEUkJ55K1jI6M9S(%=g;HLS~J6oPK!tK*mn*~ad zA8g?p4%5mFe3aeI$4yr8p=&iDS_en)b@=|zKHhJ=9_iUqiWG}lZ9tONXMPW# zy)3y0+@kYJe;d1E4u)BpHoY4WbbeYLk^YA({^#!VtAFR2%nGP5-`bG+fyK)`AOuT7L5a^@bXMs>Df@N^s|2LzUva0qv?fUdMvq z%eKoUNA{rILIsm6NDmsASpcsn;Thzh6q1+XF=qLymEO1dflm1m(TuRukgr#YGfkZ3 z)U2gisGD4p6g{JUJSTCw+OJ`m^64>q|KZoTgB(WD8jr!@K(?=*OoPdKZk0`f6`!E+ zMBfl}@7J`i3@=`+Gflo24T$3wqh_qsos=Eb=+0eZD-HEHU2I%%#m22#A!b_`Z_ZGiEIR`bFo!yJ?^^v>Uamocygx`ipd( z-!bZjLgPeCZJ?p*b!SCyH-(K1z2KK(73z7Kd-rX{`@nO8R7>}T?|)z+DNZ&QY*Sql zz*-=B($W^`MCUNyLv_t|_$5f;VgV0&v#r+>xU%j!9yk^!h7(PeFey59p9f#El#k#7 z4#$m9YqHFy#MAF+p1$B>j$YMJo56)Bmpd<*els7SAmb>fh+rhpU89jJ$5FACZ1^-@ zU8PLzNm=xWv+kuiTv=)V#RU2H2YFMZ31{;pg#LR!o%taF*DEWJQtXs6nyOI`_D7US~`qaElRsf zx37VnfHF}jPjzQ(}SsJyw*jS_$}c#NN%jyF%|z#w4gin z+MNZ`>}=l7^DqgCL^24hlurHPH~xK!^6lEVhOMABXGWS&@`y%J;NYv^gB&P>rUIg2 zLsS0p!A{ZP=D)MswUr=eTrHv$s6_4xZJG_e)JwuYmpoe@^u~ofg4BpRIaTkU7Z2#~6LO0YGec>!F~Z1SBth$z94G z#?K_W<$18oIg@8>uQG!=&*Ne?dXtCpt|Qb1jM0-yuCgZy0#e&{@j^dPS0^Ek$@?dpQ9> z?aUOQF61YmBJmH&wyA(Sawj(+g%!&M#%l7%H$w`?=o`!}0*E|TfF0`P`|X$W-tWr4 zP>*WjOu)WxsO9$9maG|ayefi*S`Zx_>r)PPh*kJvkU&jS^s-@>`+8VR=jGN;dx@g) zP78Xg)ac|I@^%PxxL<&}PL9C@50{q}cp&_nqfP`%P+KP$RAYh34a&q<>LeH35tW~8 z=#5?jz|k82Kh1uNE>q0HNBId7vz9(b8xdH2cZGqdy5RWK3(T9IsL(XCpmi_v^$aziMKP~V^ z8H~B8xg9lu(dS^y&O^6_Z*e7Ux=fAg+@@$XWeI9-Mk+(R21h1R;*WmMP?~ie zs@DcD=j0no?_VDeZ;d3$Ty7enFO%9}JIfvi@66gSdR>EIj;}&L2_JWEKtWyGEiOGr z&lxlr(AQAn(1)r5GFx=z?HqFO&FKR4McGb%;IUPbTs_z{@GsZB-*Q9Z^Ht}*|J;XoYCF$Y z0*~EUN4#<)D1+7l<*)fgwPN5<0v)lQr_p%$g4bYa)mDPajvD(fx@7gM5^NVbW zWw*Y9nyyP$SAbrLw!4AH+K&8f0#8T$}k4C8EWFm2-)pAF%^+D+%I5` z)_)&gwT`s`MjSLhb~6s(4;hjzzJ%*_hY%(2K8G*We4?scUD5+!h@R$o4SyF?3Os5W zngF01eL+Y7&s;Z8z}1R3*uE^Eji84adWw+2+$3eP0Tj#2^mGS9Fc3$;X)(L$b(8?V zLBr=o9Zh!M-ZMbgjhSpk=%xbVOw85)N|haO5gTy{+1OD)jQ@R_D^2sKJrv2_ifo6X zp;EQ7u1DY3{5=B{kZqd52%St)!OtH9F@Y0c{<*=Cru2?5FdroHe&7oOW*{ zQY6Wq_xsm|9F=5-SnuTdifbIii;Q1GoLi_Y+8pWJ+Akht>meurAbKw=A@2q!RdO} z3gC>pSbMmx9+Q zv1HVyEx*F{?uKI!SF&T#=^7^F7E8ffiV@YV;;UQa0MQYw(#%+|*8Mpc1)qlsEFNVk z+-}`}p6@@=VH(mKTT9wTUbN(9HAaC6`oaG*o>`Tx73%Nm2hB<=j_rg&F-xvH%b0Tr z)H54j8-3OslSw)9df34ke<<~}u;E!rQl5fq8D7l|lD07IRq=U*E5IGpmH7|W-38ZT z@mNhZL!q`3v<9{1uP2w0haIp73h1|ww={vi1BFB^r#nV2%&|1j{b_Vdi2Z2HsZ^h{ zw;`dbhaf1HP2Q7aRH)s+aS#%ERh3RNq2djH8*_{d(=;>esin*hIYqNlN}_WVK&FW` ztq5kbg_BSQxr0L)N<{tGTD6}F%`o+JerrVH?KSoNfHV^Yqy{cr~qLI|=RQ*Z^kAiEN8 zpqjUm^umef;EX#lZ%6zngWu#~bYXW57djnt zd$F)orkZa6o5Zta2TUImv3f#9ivR8|ZBPdH*b3a7FTGKDi&~AiI%zw(r-0ZK__=A; zx!Z_5YQg+@Hk{#5?S8=5#RuSVm8t|9rHSO0^QuPezY9)0C)Tq%7G4AZFl@6QAobjGyS2=yYn8 zy;zFd_4c%pnEaawwm^2DIWYiLiIcemK5FJE|MdcZ6`-hJsq4T=)V29V0)#XXP7(g5 zaC@2F!Mh0G6XO|58IF6({?D~`8Hi~#OL}{gUJHQzU|_v07|K|?A9s!N1;GeZ^M1cb znfvziS{@aHD?;*H7AyKVY{(3^oMAc4KZ(hQA0GKxVF-95;l|M=dd@;>bvCc zmT1jHJ+hmYnuLTvF~JxmDuERry$E$tuo~N|T^aFa7@7J2?myV66;GxBJ2UeQwip>y z%QpK|9s7?@PQGB1Kl#DHhB$zly3dbbcEoDs(LeeqS6rcaOfS8U9H8FhcsxSLCx=)y z6%i4^j+l%|M1!5na^V#wzRQImq8J@sx?(NKtn{2W`G;+g{0XRSjtX8tuq%>#0;WFS zN2S0K3F}WC87YwhT=%hl5Vp*z+!0{(J3LeUxaFV_S5)1yveftv$3j}y*mXhv$s1-I zbsxx0Gzh(QjATQPVM}6}V~G20weKOO0Rvn`d9tFdkR`5XF_?Dn9t7 zT$>XC-6ayj2UxT(%iDGq(@Kgwc~~1b$Hc4Ft?xb&e1&h$=6|T}A37LcefiIO4J9S9 z?2fE2W9?cNhsdA$UinWL%@V(e$}c)u;&Ds}z`t6CYqE)5D(q^B2ItfrBtinCQjV-l zc)j=T4tDq`OAT3~UTM7u1l`UQB+4G1{`lYt#)=CV8?+r2Xe6-P1`_}nw*@$B`mYvX zI(gU(_N8?Jm{n}tJTI990;lfBV0J6a@;xuxZ1cSL3k9TuPIgZE@O`X9x%|)66Zd#5 z#_Jvpti`aNSC4?Ss}p4r7n8$HJ@rq4#%?Zg)QDRpDyh{IO#4Cl6d*x2rrA)^x3Zev zO17SlFUNmCN{Lf&!n`cc?;=wGbU04L7BDlC1hoQpJtSz%=ms2j1#iWbI7UZfUO_mpxgv4E-!7$n>4i&8MJ@je)85xe$XI4ov8=v zo~e{*-c1<_e83>!-y;EpcU|3{5LhK#|4Dt{g__n(M-124R_0S9x(7}|u5#FKcU2Wo z@Cl&roWQ@{^@*VU)FHMT6c>p}*_SYbgzwHHT%`3{UQDkov5;6P<`f%g$Tz6>>gnwP zK|^3g&Y5oa(@^FoU6;$A6U&uz--b-53N~(d-&E9mvioQWS|Fmvi%e+!U=!SJo+RfB zaV%I~xy=BhR&7Cn&=S4e!1?n0H!7;CFPiqnKy5xxt*q1$D+8P~Pu)0@PU|KiV>mVkmL4NCD0*(kj z>CQ#VQ+NJ@L{NNp_yiaa-H@zsljwK1?D&aKi#0Q0UkrlUdX8Ea=W(9FFT{Hh3Ru6Slq9#VM68(a*ZY@-OtB|Kz^_LSglJMQy^3)Sf;S|E z99jjk`(69;cg*tBvDiG(uCnj`K{eVy;91oF?1uY(_3GK=Doe|KaWzwttiysvw>?(P zOBwSBFfh)e5QvtHNwC!7@{0TlXq*&(0* zZ*!NMW{3;fK-X8oDh|>l>3w2|ICs`hDKGkoZZs+falaekr-7ovrGvBSv|5?A@M_uy@agWk`^G$UTK?Ef;*?4Q>ja zfcm#Ao5B!a%tX!vX4%z6dLzD%!KJIU40Q54Ra1I<*Gj#?#_)Z$3xrLu5eP*i(d#X~ z@t+D?@ZG!h_>AnCN_S)|$RmQ$M~)c+!8QZyQ7{fRwa1AotBlPn0gli6jaJSxq{v$K z;3Lz~T62MskweAlc|QNp=e5DvZ;@1BD5CT#Xw?KqmIB?vC2{E zs~iu8SB?kt`N!_%`Cl5e_>Ld zK2Xn-FG-!(SrM9u+8L>gK62-rIZgxKR>hap`1w0h^z#!J>fCc>VRIY%oK*7XVG_Wd zRCdhlJpp-1;=#`R{2SO#dvo&ZwOp(d8_jFEh0*81&@E~H4?^W64UGkHzQwb;Z+->A zIv}blicrRb1E$Uc=m^W;<#HF`tmr6+vmH|d7!B+p3*cp}9Eo8wL=-78oH7z_ldpt~ zOnWTi)%jU-`}7FbMY)x?BxTQYQvCz0h6KK>uR9EjN%=L7gA@*2x_o)(-2Kyn%J?}2 zogugCP`ghr^p3Bf z{0AeXmBbvKbnTbvvHJd7A!Fd@rT<#%H^6fh(v#2c@*vV{5+y6!;Pa#QX&kQTcsqTD z8(Vc!!n}$~wDH9BT)9)uTgv+V5T~{p>ztYmnZzArM%D1t)Q7>%?w1AkriJzEcd5w9 z`*AP-d1CJnc+)!(LLR(LbH$l_q!wDQ)&(-&J?g2=6c(a*;s5Gxo0O3mj910k$T!m9 z++oaL*?q`G9>JL?y}!!98gQd0z|0iaycjZcYwEXJVuo6m!vKf8{$V;0`D?$z`PupXR#-gJDi2)K7a~ zAi7hA7rqbge!l`;6+Md_Vq-)9QRQC>1~VMieJ%@kWJeWs0dMlYVx>lygY#i2vx~z1 z7af=OHSyp2fm-DhLT*g0O@;&<_cBEHz41^-Ez44C2?8N|jR4S5GgpR$>D3Tb&?;WX zNyBYXH6dXO^z4*@9X3*6;t%2TRm6p2F0UpKwK`~28R%Zb&It%B_!RtZw#>wpPd90) zx=zB$(j(Sz7>oR#gW+R^B3Tum=_jgB*UtbRvts#Br za{BrbB;T*M2K3jfvUn|oncb{gEAg0T%3Us6l(7O4a{{Q1OQYUzX0V(CO-yYj=J*O= zAlG?$J|dv7m8O#+-zHkF#~ySVR`1|#e#~-8#&J{N+Im)DwjwMo?9)dfVdgpJ4LPYR z(=inEJzMW;z6$Xfussgk>>})yAWg_ zaGD2~*R4yRqHd|052ttd5r-ze3Uaa^L8$W)UkI}MX(ko? ziXt&VEMR0yt-6Q6HrnEfoL9dtOX#mMqq~#sGp6~$eK@Igt(NO-jH;@jS^Isi`+`aE zu>$5(zp>#@Pqt6=)77l)?EZ+aeyRgCg2=p+0Zcx;#us-vPMF7>#tSP4M&R zQB`Q4p@d*2m`ywS5@mw6d%v0n%_cw1^Xoha5Rl!CD!3UXfFdrfu_fq&2#WdpRREFl zH`kCAvcu-HYg#LR^1uvuaUdYGl{>_4>i*}I>NUaBxI(Q{{;mtGi}-go*_W6Fa;y9b zI*l3uUe4wD8rb=xGx^&-k5!}#$Zd0D892$EX?%X!0t)^M+YShps|{Q}K>I+d1*GjS{7ZH!s~lTBnEM)NVHtAU5S58R*UUQ44hKmK`-&({Y5_5-|Sqw|Cm_h#760 zbAz`7x_#Gi)OMu@@*FU*%?@VG-Be%atw<92p zxn*}DuMJpqSIrAr+8fG8HH14-q#YJEd4Ec|>qJ|ivCxkF2;JK|IddLq>2m10Z1x2z zJwdgAfRtI+3uW?B3t$WagFa#C+Ev~u0H7Cb3xfaE$532S<-_Cj=*YIP;X3NZGreA; z3SI?3k-)CYf6T+mtLvX?L*Pf4PS3w7-0YY?F`AOwzcfQo%dyr`$(^W%5g(HV>}mi} zn>rKM=%iZ2A60peRiI4!6XK4#=5Z4+W$}vzQ@Y5e{fZUSXLLv)I^o3Fdy9%n-VLK< z>a{6S83Xh?vvnd|y$m^!(Nq3#u>|hg{}DlnI7_NUbrY?0z;*GO3}>18^HHI8&dS~UQNRE(YT-AJ z;0?W+4vW9yWPujXMSI)Z`Wt#kaGZXX zyDb;ly`;mBrX?=hT_Ab+Ig~2_uJ)UEn4y-U}-s4%=$Zl$ROMsg?Q#Xe%a zjUW}w`+&$a!6A81sCZR>)souVxKgzwJaVv)A>^V_LT(9mTM#spVDWk2blq9~*~=dC zC|;&0$?(WmT`#sTco-x@q_Rj}Com5CaBa{uz9OZ5%cvUb*go1UiQmWRV>Y4hO;=P0 zSP94BrPRW|Cp>8W*`|i2f_yxWcCa_RUt;5@uGN-*edN@q^q#N=YYCiqmG$|GwcG|W z8kNE5u6&@wpWu-f!eI=9LRQhLI<-mkWUYK(ETPS#0o=S9CgZ&U#zHjwttQVXBk#BJ ze^+|;Bp#dobvR0lfk8L_+B}^hi5vQ4YL6n(-thf7Bj={{W{z6CG}mXZRITfGg=h)< z(mt|QwtNr^V#gKQE+W*g0&m#r$~GNcsy`0v3R!P8{4Mu{_uJ_#r>}x*SzdJHj^`eg zoX7ac#Nyf>_S-nSj>GYR4md{$OjYkgE^}kxExZcp_8@2_YQEeL5 zn%R>$ACd+iPPQ->cZV}_tmnh~&p)ZtJINUm6cZ_wQ7463aNF3A*=Y%9>AA(E{@RrW zMn1!ziBQwpI}2hXOpI!{I-BF!;nTOf7oW(57p$vaPM=33Sl`}IDl4fPzD6uKV*?b_ zW>g>WNpiBF2KTzMz6476zi#L( zWjisQ%7VqzkxYRC3D=e1^0rp(s7Sj-osu-*Nu{FhKNu-_yb5)=L#KpcHSPi-@sPNB z$#nOs`6PAsk6Kr)&_|)n96n1mQ1ex~z>0)7Dirs^zF3|H8WZ`Y+3;Jr@auNg6$$#V zmhCQDd?|2U`^EL9@7Y-FK70j@u5Ml-^bW33aa?#0&6NyS_7p;V^^6tJY&~e_E;AQ` z*T4No%silYAO5NZG}}@q+%QkKDphCauJDp3QVg$KqSNq`{*&g3qZ1Ja`28lCdo>!Q z&5oXIGOcg#WfKeXg1t>_#KNTo`wj{?BX>^@P6{Lx)<~XpG37`L>$tgO4PrrpA8Hlq zYQ&NC>6of`(o#^eCEnfWEoZE%23Y{Y*!p8A5FIiU?lI+ILj3_xqm!>lYyRLvy_SX~ z9&e8IIewhA#Qg=_A}1sPsP^N&$n0OPlmAYR$+z28EVTFGSp*~xYv1*CyL1DoEQlFT z@TduTJrB7du6ng#Uc40ippI?=B0|}W35dO|d8uRghTyX_2ccT3YClsFE+WAAk56?P zTMX}TQmC_xUPv8xqF1;`U-gss7u|Rgye#QSeRj{{74dslP?|BEPO!(vF@3+;h|eKX z>qW7a`a1FGo{0RNx_j-hmnJh`V% zuM3A?CqS6JZO&K_i3ri)imHYZO8va%3lwvA+BsF#mx69aI+N0WE4{*V_RMP5wW3i`vyJ_M z2i1(PGY(kg-Ykm69Jusg6HJx8rHeVA*IE>Pd;CB|JT}RLwunk%lqgxopSz8 zLSo|O<>fxjjG$7aMHbiFdVMF+hrpzqa6xkKXp#Spi!-Qq6IAGwGpw1S>jU8XZJs;0 zKb^_M`}FQ2&>tW3(zVdpmAvm%R#R;e0_m7)IP^aPb!(hoa}Lta0#wZ7=MKD|TT|mlTeyu%zwhh3 z8!51yFC@s$Xlyckr&dm}FA{8g*Y000wXiPR{WfJ+(CT>!r3ioKh&v19MV~FKkCBH? zkXwyC^zt?ZSL3cSYdb;Sr@SU>Dym>g=8Cmo%z28Fb9V7`O# zvBrROk==XE&PMFyI}1X7Dv6PIca<+=n7{w;u}Q>|=)38VyPZgW3-ynoBEK`eZ7Owa z+J+G3|MhKfNQY{)k9~}#_%FKmpRL6Hf1QB+!TiAdd5PBN3Agb=ok8xB(U37VUp7R_ zfP1bSWgoS4CTh;9W3ur(YIdfvL1b{w`5+1Cpgqj>_Cn<5o)24IJKAf%wcT01CdP%? zReYN3ZG$zbbY{&%*RtcU?QWeOPc9h9+NlQhFGVmKF$t9-gktbVzL$PaS8DQvR#4B# z`@U)W47Rqr-R^bPdmSNW$~X3VZzPkk7i*zttQ>@tBa8T11ae4jOPJ-lX*Fvs81qDH z66;Cico4l?03TVzy3c3@*k?}K#(236?KSb>@DN_6Gc*?kbJuQn?lfr?^@jM#IGN4n zZCK}+0QTadT;;qph+oMUm5Zo|DtmqqKjlwezxfJb`cNu;LC~I(XaEovPX1@Hv7hqa zg_>aQw_bgIjrV-An(O$nm&|Jy*snN?W12Q=f74v;*tg7t%fT)U63?g$<*`;n#MDP7m0=!1CRgZ^}`l zi~x`afJg8OhgEIcE^b3o#NKx^?gvTuj|c{NISTkVFAwLxa<5ZF>T-4f?R-yj{Cg9C zw72oH6#LT>?20r~dtc`Li`qCk4F157sOMsOThf;adV4oDJ)QjFrSsHJ)>?JDKwBf7 zn8crf#|w#|G%QLq4kstiG8=UMyG^~ZA@8YA8_tf^;Ki;-9d4b=o=<)I{I+bsX6+yD zUCJhT9=F%XFGpK=z5MdU{yTzjm`yTq#$v|mv9!XN=(~{y$(?{h*0<>J@1@ytp$3#z z8i9{~rqvvHjLS_#B$jf5*_~U*Sk&@&qAYeLDZNDh4@zyZD6M%|yCG@8Xd|pl)f{o9 zyez)*ewhIak+Hk={P2JCg!=yly}G~e;r;I)3k#b_J1?hN_Pg}4^bJ>b=3C_5+e%eZ zxH8g7j}5DJdFiEg+9Qh6rUl7wKVRzIjj=gWym-(q^UHz}q3O=j(zH4+@JG6TJVUoA ze$D+{pZJl}kbSIP_KR*BfErxq7qz6Uy(00gPC*~4TZTN?pu@Ivk)rm*=h5p+TIn<_ zDaG~WOuIBl9!bMPj#tkbZ2BC!q=g0}ySW2W6-fpE8)U;x;SzcWYd@&z*i2Dhf!Fx5 z2476w^^jF#3~Rw(2P_MQaf%}i8W2J5W9QG08AT$$MOP;lgguPW1Oh^BPD9pjWW`qdhX*E^c+q@>)~WQ*`kt}iPm^{cv)|#6yUdNr6|xZQnGP> zI^|rL%jp;4K`fz$pM*!uv5AbgSsT1f@roax+}ao;tektw%GxJ&GK*}}8RGebuOrUV zr9I%@Sq{qlU-)DZ{PTqdW8h|(CfK-)nOhHml9E!c=h396iLaB>;eKW93ifrt?Sa`z z!wA1Xz|>b4(CsDY_Q;ip#jRW2451D7j){&&-%J3G>-s3Mav!t7j%kI4AaD2eKo1!i z{jhH>;EL4^5HWd{Xm#W~ZzjZ(`-VoJOR>*fJ3MT-j-uP`imKFNpW?Ajh?x%V?wR10 zn;VO5bNpG`jPu4^#9UGnTb6;pbP5(NA$5yyBqDa)N_P*>mNsHGB*#n9gOpP4tl{tV zhqFCCJCwPEZ9Cl&0=eMavh3yITCHo;=~r+6U3yAS&7fMhw)1>AhAm+C4`)*6<&q-? zwWGl9)_re?#dDMacp7yB+X0Mu+yB6AC^F74b58n&D{wD(=`!j1pDY z5S2asEtPBP5!AqN+3D(671?0BW2g483jGWABbP0Otw%)LW_upWrstj zqH^))zQ2~A#Nk&dxUw?T@7^tNux8zn{l4O?gV>|jgF823~V!1GX#T#DqOEd1O^1?))?DEnl~i3JZ^$d0t>7S zWKKF^w(_uSF~@mwa`H_%5=C>Tx2*>Lal=hy*CNWfAF1vu&vpi{2PKj^L9llsPpK26? zx!dFw>Tn(nb^Vv9q{;i9Wsb}_qzi3JCMIegA01VL4{#=DW^}4`cgAug#Km=M!AJz+ zw}9{Qzczz=d=oH6D~NN8N%53__@19isvbbptem2{CpQ{?vu7L4e zsho?zxA#`2r83H0Pxk?phUa8rA6;Ry^(t; zUP+jxmMLonlhS8u8FoA37-F!`2Tu#2Np4lC?9<7~Ga$Awn9r5+Y;Y0EGoh=143047 z$oST<6|dO(x*7d&VXjTnrqZR7HDZ>*rrX)G^HSW-Y%*G>O@k>r(MakKbbH>qW`ZW> zoPjDiMR2@ZwRa`ji**7C8 z*`0-ooSf@zk-GGd`zRwU7~tfjfh9-&QZs9G;k^HToOU^#@>F;COC=%KmCnM#LSEPl zPRPfxn(9wWw*OV)VSd??(Bk|@bY+|q@UCMA@jgga zT_}fd@uJp1Y1N<@$I<=ZZdQ27yeeTRUZ{F&f5>sZDt2R`ftRn$d#)BsmS-U*h+`z$tzD}T_`oWKU0E#!L5qfJ&=m?paL z1j)(CDJLg~{T*#FD&Kd8&y|@G7Ko$7;Fs~DJpOUnT^T-e`aN0d(Pms}@%>%B{%rl8 zbc!00o&A_D(Td$wZ6b(N$;s%%-!z3Q7e?_cu=)t9NIc~Jd!4T&m+z60LEet8^Uhg0 zP?0o(iG^mu5$f%JyJZPNpuJvcnQ8#$va< z#{PSPiqh93it7~)VlS3X-GB&=NdiTit%0#ToN}i#LJ@Mh&1f8^!FxWw|0xxkBQ%!( z8P?oyY4F2zBbpk)-X=rt!%FgR$ zkvR=1*yo*~h9DDKG|hd{u8~*g?b|y`V_Qrj%O}H}5RLUh?KS-Gq=bcw)V<;p62u-- zn8X!>K+p!>yas0cuuG}~v$80Dh9{AeiPjUa-%>0#Qif3s9Qa=ti-?P~&FtZ)-?QcU z?<%~_Wc|k|#aCB*aM=m>T$SQSCBK~^Fj>~YD&@LMoC9)B=TOSaA$~Vfd8oi%)Dc=4!Ta=nmisJ~awKga&F3zx)JL{)qF!7pt6vJ|k zt?md{05XSiI7M5xa_%dC`!2S~pjU|$u4@6emB#$G$54u|AkscT5kF|~)iM+@-=bTk zU-;l;G0usJuJv_lCq=U>;sf1S(LbC2X8JaeAvuWee_zdrHl1Y(m6{bRM^jc$vxb&n zb@cu`NxN!9+BB?lkxx`7o@+gEE8Ltz=rFsypc=5j@!+m31}@r>x)o|oRyY-EF)}gT zOlJZ=f8Q1Z8^eb6famL91wsz%hrFt{lY%xmzcL7*2PJ^+7gMT$T_twI4xj2B|7^ke zNBV~E-)-5JBKG???(|!M0ziIL-0OMO@7FO1d;NH(ZhW0W;|!9)1~JV6n{JC{)$;rJ zQ*vKOFkdKCTQGAyuaZkzq!=^8mOHA<_wt+X5t;OjE}O&`U~Zw zB~iqTD5UE-!p&%VvdewMH1wvjRxzJ6&7%HP4lx?V^wuGD^C-u^l$+dAzJW1|yA?^Xs%2}c>uW{??-73r!puJ#Y5(OT^&zD?| z+FiO#F)I%gBsc3AZnwc8sWa=R$BjE|N%Ci#0<~!CrVnywt+WLo=t_d&F2i!*3Gjpp zfR1o%BVzOGh6B(WcS3^ety;-+b<0Y?SDnU z!$uMCsYRMj@y&DF7l^OV?~hG=<{Q;uWA1)L&*8j{Lo`!IL%#$YO-E(tnKR({<`swo z8=+2ogyO927V#!?ZS@f`^W1o&6fgs^mBorMw{f`l?9#SPN2x}#CT2>Z5mg+-k?!&^ z_a+RYF?bVMT$MuaWdCb=EQ=} z!cw$E_Kk6M*+&L!*(y?B%tBHfZOoZ`NyJ95u<#L%-)6F^Zna^P-Bc0RTeiT%`s(H- z2Xph6%w<%vr`<*_ZOUbQ_EQ}`e!EnF>zNkN?Q-xHpr<$LD>`^0xHk9*aMCuhB6CSQ`@Z z!*8zAbbvANzzAC5yor_J?JC4O#ynjH?Xw!BA>8rlUarSEowJ$sAiL5% zR8HSZbp_td%s#Ximxz5A(|<|4Hx^+l=L^j4k#zg}Quz5RwdmS@+a=VXKlqHxed=x- zRyFVSu@4jGbJ5waa;fnI@7TLJ*o20PTYAb6M?fR%E{H7bDLZea}i z*cWuCN5?}3vaQk)i8B2D&>KwU6}zVV&F5-eW)_yJIfpAK0E5j!4H4_uf1Gi+>Fy47 z$hQ5EDSUDey&na!c(mY zHy0yyFm>bu*O+Z_u^sK_E6`ncnZb*{$_a4!EnFlAGbDN+asTwbica#N`rV!|4OQKH zQBtMfy@`p5`&v5#Um4f|sIxmeIw1?wFnOjP7)%z`yNtD{Sn5hA>Xd&}E71l3Fd{tl zp)hPx3>b#UByJ$lVBlqw+|`0ueCtLQIY*pwlc5PP=%yLM%YXe|Q!|NwSx8*`5?i+p zMnxuO1Bd-#+a`fWO_h4Jz_n;*?27(A0br02S5VhVuwfjwGy{Ra?Abt(kCwE9l6d;l zYC8F++26t}RGL?W#91KlDN;d@Z%BQMZAy~;wur5~^U;qi30F2R(fIl{&mG~x-|vZ8 z0|sCqtNb&1SjHbW@mHrAB}n4?NA674j12GPc1HshKeFWg+<2xwRsjQ#ct@E zHB=SW(94Mg8=ENEfUP+~nf29_stg(jy-h~ml;C8v^}d+2r*}h$z;4HnNmQ{Blzl3` zq@tsjGP@Ml7YE;E?@X7Ee#oPilixG%-=-Y4KtmM2m|+lLc);!15Ig4f1OS51 z8y%QZ#tZR2=EIV1(S7Ksm@$~R;{=F&plAG{nxMvN#jVc_=(T5^=zNDfu(9XZ@Fz#^ zZZQxlJ#81i5`2J-9@fyMYY)1kQVUR<(abJcGQP*LPxD(3YC85=%$+M36ko@^uIJ`j zO-LPo!BfutojWuZBUq~5}AVC^L_McdNJbN^23ddF58azGYA{Ucw>_lTT~g+qgElBy zA0UkH_6B4Yv)DwIV|xVSyDpawSWo2B zIc=&9cE%<=2D6~E5af~GouyMu;Y!>{Q{x_T*X1`85){-r&DARi9A^Ms4`j0VM_!Tz z-;9_M-Yd%wnvPLGtzlnF+>peEuVdc4AYi}Txp~p1vbtIL-OSakl;^gw*Oc;Ihj|cG z0d?AkMYAssBOBX18;NQmM0u0PzgMIC=OZR!C37pn!T^aMZ;iNAEF&UJ-wok<5nK5? z^WKllC#G8<-~D`mtk4niJp9OhE4O(I7Y<^}Z`{ zkx^Y; za35mDoM(c_DJarMtRcEjX)l)=@AtLO2mflPR;Q26 z^nWVNsFR$~rPESqFt>OJ=Bx97c)p6M%_%KsPW9RMp5+{KSxRjCf(Y1i%v{dho18Dh znLx}v|7x)NF?DRTxaptGrNEO5he>|k3jvzf~%Uh?>*$R@&?A~@J@p;SDn^T@+VcVpwF@{ z?UKPe@lnc-G$U!XGcj_dKd%MH!;H+;o*+hU4KI$6dslj2IV1IeDhNdV zZa}+{)Z#~NCM5A*_d8m~)QU;=R~iXt!a|>1ypd*!n6+;1H=l%+cJZJ6w}Hh%pnuR} zxHm@-CQPv4&XT84RXJiVQ<4~Q8IS*JRGK&S?U#2-PabQHFt%vug!>TF_KVti9_>?v zIwVB~(_&4nKxx#Q|90?;=~k=Oza01c`ebSHR$Z^)_@^b;B4sj7C`ou$l=(vAw|X_r zSe~Y}3#Oi#^^l*0v@^=hpT^RbNP=Kyu59J;lY4jF*3xSC=JVo~45K%B5^aR0+o97{ z7Q;(?Q7>ung&@?7m+_0BLoAi1fY852jmddQS(N0op;7qH>qy-EhVp!WzT@_?|LYBX zzi+aqAiZ_>w7b7f+M#f~N3XXJ=jQ4r3%lDa7`4@I%LK_Sn!7#3q%I;l@jBp)%3^!n z*e}fMjEK_Z(nq9eEw^7Nkaep?T8B<-^ow7gmtp$MHHgPQrh1l;dmg&4pd_`!Vtvl1 z>)uscb8y8eGdnTJvYoQFK$G8d+#OziAa&bb9Y9QsJ)S`PJ!Bfp3K1O1?WWZV9R4f% zdFe3?zL4i`w{^Vz`vPhqVoF>_vPv-l3LvtF|SZcIfNq;7W$ub8(P-L+>f(ZaziAI zi({egJN@A(+=hKj9He+l)YmZ-d(@1>w{-X1($pVi3^KL*U+A>B^V0cQB3*iLi3O`Z zriBSXw={~PEtYU(@p*(T7=NTl2WB4!*T_G2K6_7{y5gC7rRrvqsni?hxhgIxoPssnihx-@b2<{%imi40awNBoPms~H^XlZDB1GbpV|A(lnj*9Yo`gAT`i*$E)!_q0u z(%q$m5+dE5(hbtEG)Sk?-6qWFO6Jh~;1m$$rhkJwRN#)eYvg~ANSoh%&```I(X?U^1n!1(J zIXJLy$7o)Iuzo8_`G~ax7_fc4fn{~n^TiDTj6TALv*~?ejbn~;9!FRm6fgO7DFLTP zgXl%VSNGT*ac{r-8pD;Q9K@*>WXQ3&jMPND48@p=_Q|ld(h?%Trb(+|>Am}^gqW#? zY6nE7s58BrNw~^i96v)?q4e<{{$m_=0CzkJh#GWQ%tn15F49`|K*<1}!QHM`xlcvS z%oObiN!G$wk&T=i|8m;tJiU3N668;)_8Ruh@PFW71OOd4Z&SSGe>V; z4ud7$Z_cCSOfkR;Wkg>QVSRhGWPUT!y!J{G5^szAxL{zg51|AN zKE>LRd}B}|JI=St3dV~Hnj-(V(*HVoJ1b*ofxE0JS)>RfOV@;$aOX$0LdFsN zVaPjh!1R_uaR7YWy+hPm%weq3)w64Gbic}HMv6=y!3EP%AZE#oO*xzvR<*VY`hd{+ zHLS=JWgq^p7i9J7SESqXc-H-ACqsrVY+N}@L>uymbmls;2n?SDUv~&~s;IQ?pK)-v z5C(vWs;Vj_2GYyjBFa?m^`MN4A9etS#AVssYHOEJwDO~s z6(q8VoA0&paQ9IW-^%;4Z}_rR`O5h% zepfoJ@yL)@S9lY+f*=;w+V`J(wrjp{N7GwLyr;VVsJA0wm+~cJJZRCWMWox4R3Po& zHv&!sVN$82nK{h48L`CW=g-s%9^;i2wD9Uc_a1qLGGEpRVyw-}mF8a02BWb0#*@GB>A4+Fwl+eW8Gq$^{st0!<&@~=R*YfSQ2&Sy`f>J=!m zD}awnMp(+URw_qJiYP!vK9O_gm=D{EQg2G^s=U1Zy+Yq%9cGVertog%HYy9j>X!!* zt*hWK_gblo`ka9a7Dcx5aRQp-M2o_dcKRpDif2Riubc~f{+I=!jDSi4g|#pmFg{Wm zkYrOY1v05bTOzugthIbOZp1|VA&i~J3)5!|tYsXR$msHvdke}^{RFk8l?jWeO889I z$`7ucG+4KAt@e%Fz>6mZ!g@~O9pk#0%IsEh3S+%LE?EmUT^Mn@#T1Bd2!7iKWB9i& z^`7F%=~J0}3G_y;Q6S8;r~^Z+pb6<=AICg~uhL=6ziF4HaPCEDdi!*N$$-H=yGU4} zGdxccB7t{$3$YQRDebFbZLu;*4)ED>MA&fY<#$qbqD?w~Ccd zkG4b^^B&0z&QXJnTMa>HDP0oM_8x@W!Rkl)Var=P!#J>G*b_12)D2R>8>NvB{oAhh zpwgR9UG8&J>93(G<0{Cb$^43yVWkf=V>1t%;8_mG(q}BlTl+p55?TIjW)}oKM0ABq ztn&&=>J-4ePi%cNG;uUlw+O4p?xj{aSe3+_{qnTF;u`R7vyajt4zioN4$rPz!9ksM zeFbr(DnE&+)z&8d8FB>S4hJDLoR4j7F8HR>^Qb%hmBt-XD{eLizrm>bGLgg@OV@8uhQa-ddrvCI%cA(i&3RL9>@jDHMq6bhtiRN@*jKm( zGQ%PFFTAY1aanE1Ko?iWXAP0Z9hxZO=*3 ziS6&(VPk6OTV;5?Kh|TsR)%xxBf|%xei~0nLoVXq2k3R-&=r#^)TpH6i}N65Q!|F5 z6Y(Z(22N675-<~G+59rIM!@1OeS%G!)d>R?wrT3hWbs$1RuA-?-CSNy{Hx7ZwC;mK zq9x+n(YS{UJGC>A-k@8r9H6D!=$d+6_GS-{%ZM z?XlkHt9tv~x3JpPb9(&;`Q8Z6{6N(*Z7l;-DJ-~R<~gcr0@u>Cdp0}%Ge+0;^yiGf z7Z^$8a%e?*jSO#GVoJq4@P>RkYrPx{;@eysD5S16DC)_%Y%kjdWtYkR7t%q$jN||& zuSpILEQUbzJg*0o5C}iG*G(#fQsaulMZsmd-sLX)(3Zv1#(S#Ff6!>JtG)scat!H5BJ%G-XHg5Z*Fy8pD z5%`weID?4!{{CM0&@fMayz%l`R*FxS<0xGBVmbm>?Um8Pu#ppE{rD^E38bb4069R$ zzk@g#CCbhTM1oSdrwo<>;GTMET0}6zX<$OCL;mY20%!kz?rgCF>j-K(y)ia^#5M zx8G4r&V?@|;LtS9Ju!HGjg)&J7>8i~fph29B3y0dDDxs$JR<`P-okqOGcu?Wcl)VE zWzl=LDXN^ldt}?~(~=KxeU6{=uCM9?pBe_S=P?@eeaJ^Up6`GEqi%HHY}x1g+L@c1 z!>%GSD2G(8#mQ@xK42e7EXBDLrjHs_+Ls4!ndbSrS-t7*Z@AI|yruYsU^V_uM%pCt zq&U7dxjfW$J;T=fb!0dvx%*a4>eI1qr&E{f`$h~d71wtZ%AXUKHUA7ZvhzC&MwTeH zDgRuF{>SRHnVHFj(;Xa(GG4(z)Z*ZCS%7r$35qsi{RrkZS@#OS{`RVYxZO=FYyu*Y z6z#a?k!tKMM!M|X5;@90$qk?w?KsFVrVO~8z3DoXFuxl!uxgg+tJ14ho6nUBlr*9a z*@>b{Xg_Wo_v-U3nLQ7nf~)KNRpngQ@ngQ=`Ot1P;5f~=m?^are7F2cCyh6l7%M z4;ZJNzw1(8OZskg`MPT!G5yUClM8lS|3zlc9EPu2TSmmAyCYFG046fhFM7`Dee}DU z$$rl7vBnYWZ+R51gnVTue)@11hxPIuTMr1`@b5V+hpxQ-&N}PQX4}yH<+7vt@JavU zW$_R-tTbV`P@3LNgq}arrPtAf7P=V?@Go*rL=Ap@Gk{e5xu7TTRPwWuCAT9s_Edc$ z7H0Cd)~N~Q^#uocet;}X*`e?D)9HJEKR;~A+npBYwbEP8iMy#w)b zjUnHO`|bxHpY};Q(RHCTm~#K|K;kL$t}}n;bm(|meR1uoHmD!@@uwpfJl-g}vbR~e zM>KYmgQdu&?z~i!CFH)v_+<8v1Qu0Et^4SS_90A$0*r7JLr85sEhLAJNZ+Xjps4#vVUN%UFMjcR`gYY^|&w5j+*5BM_FV>`9@&8rIq>>yIL9~H-Dup6cz zE9I2`eE3+TX%V*?L#j--4}NRH(r01a%Q5j39>oBUM1#Yz%`aZkQ*MOg^mGu6pH{5E zFKmy!Uf8`1t3tQpi{`nJaluXGi5W=ED9}C;h<-XHt;e-G-RM}&+vuk|IlfR4D0UIP zU!KHW+eAOCL!8+)O?{D(d7^;gHAjFe-@$Cd*)S^sLA6CNAe9?^5Ur0j?cqe5MG%lm zDwsi+q6G*(j+`q7f+r9oSevzN`{s6QZ_#nx-sW^Kd|G-3J zVCH*J_vQ2+k{ICfErlT_Y!-z)tM_jcxm;Ndnbcjl|?a+|p(y3kMx-P0v4QuW& za4d7I*DZ&F;8mkWc-l_hUQND=pShX6r9etP6hTn6c{9%)t`;i_z`=RwF=x#v23Fht z@+uULcEx1#MY7!alCMEEU2s6EMr)sWh<&#s!` zI7Wa*VaetFQCndl?cRpPcK_#!Stk;r3OJ6EM5g4uWK5)&W3MH;@PfDmB`^?9l3 z{u&vM&L&@JhhA!+i*1jvRwWLP8TV@klW@3;tOp&m$7A2UVh-I$_l5s~w? z{DLSoivAMV30knXBsRG}_EZ1RKspm%DUMUN|9v+4^${>-Ou7nwW2FeTXr$^%V4x0p|r9Tw4;eDnA)VgaW2@UgiKrFz^s z*lzFAu1!<5HN|Swu5~yuQrhjv$E9^HOQ*P2JC%ftp*k;~XueR~0Ni9W>qf&X^wt=Qs^_7F zsNm7%!kbWK+VX|w*h$1mXKpYr06cRJPneh2s`K%1neaDiTh|E+3sx!V>BOV^E@q#` z7f_2&UaOe?AemO+JhjDSq<623nwfu>p8+LeSzG7#{@i(@Q^>&>1U8hp7WCp(w$_4yw8hTaPCGv6Nd zJC_;+2{N~Tgy9Gn+aiVj%CGzLXGMeY_WNJe?p+rnP*I__y7u05p9!e{4I|J1H`z^& zNy@R4sraA`YQxdiYi$Q$-haC%o6wn>Lw#7 zOX{ABV+%ot*gA=vfkpQ5r_I=Zke{yPo{Vkm{?xg@3ohs{sR>#lV>{JZ`_4mGif5aywKr;|#!qPOO+Qsg`zYb*-a44v# zSC*brP1H3U@e8=Q94H*JklnR9WJYHdm0X!73v3wAC$9`Hr+jsOe%^uK&(H6>aL>(_ z|7($hG-OO-IW4cRG?5!nnT=As--sb%TdFbioKt4Hy19WNiMB1j--`z30aGG}4$xf4 z7aGFuPR{Dqo$I^ndhUPmO^bU%KSxeM@dQPkbYa3zm-C0y1>4KZ1oGeL62#aj~4^+YC*NvZ$Eq6M$PTICVp0q4qLtp5B+TnRPfmJf&J%@#H zD4t+lt6?)+%D1GN9o(-*5ZVS;*5NnCKY>e20O*HwFruQ{W#8C-Ppwh*17Vq zur2!0y_LS#zOE-l3G%h*NFUKo`teIZ*5VRQw;23tqA?FaL5wWFQmpG$IXWfcyjorW zfTV*Xf1)9iK00A*S+Fuol+u)=sjbc6rK+TaF1%!hRAKE$3Wa@(5eFegxues``*Hpu zU>1+hW08mjD(;vZVGX_@l3j#akoWEPe*l%{B zB`C@#j@U(&y6yLzmbiiX*UrOy|E8HK=mW2Qb~CnA)KCeo^Y~+v}KNtK6Xo*2!W4v+mve3w{g6*@N{l_$5@t zIc*}Vne90j@)X9PIw4eHbA?=<40@mtc3y0n_SrAH4~U(Wvk%8pY=H%~v`3Jm(-LTY z@GBrEo~QasDrYT;n?=qA#7t8sqyYKK#}`~5pIT-A>2UxdsK=^Eu@BT27?&f_#~vyI zCm&=+16cM@V-9JMwvsAqE{FG|uV_SNY1)~yAHj@MbRyo*UCqudDJkjh?(Y0HxwAuU z&8`z5VD!}qr$O@L3B%IsU;Z9;Pb;q6M2~5AK36(MSd_K#8L{$I;&!BrV=85g)Aw<> zFt5c2nI%N2^*`#SfLr)|1u9CS{{|z79hD^Z{5CzSTKEHqi)>7#DYW zb@h|g5Q;0H2rNhJ{Tmyb;}J4<@rxmXM5$+=abD;lg|VRM5`@2hmU{XLodP!M3!~|CD946MAMD3LM>lgKx#f4ptQ)WuTj#P2k9}N z0=QA-hR?;7Lbjeiwq$0#r8UjDkOR>nO%J{0i}TlK!121SH$$}VN1sL6u3@m&FYrZS zNmse@+q?EhuGib)X7$wm-tikXP`Q@-rd??y$%9HtmNN*yG8+$*RuR# z-Pu(7S0S>p_M6D}{gDMlt{LODwKE8P>Oz}dSBnOL&?G*-xT3c=5Sp^Q+)W2IA9<6H z{_TQdDSBmSzFMo#MjYEIVG4{`5uN)BqcFfK6XwrMQLJhkXSRw3L(?4+l$HYh(o!UMY#evUs!8fuZ21Iu_l#71hVb2mIOM zXjL?p@MEfBoruScX<+rTqH~F}+Q=t~+dyYUs@!G&1`Gc<&U&VImAYGW6}Q%Oud($E zHhc%q#tvK+4H5{u6z~z7CYe?G-YP8D01WGgBi?j`QqoWm&@M#U%Obq_aVwzSq+g9J zv(xF8LeEzr`>T&_b2N%azj{%8dOUKK37SdqSgT1<$!ldil$aAl6ybtMVz)vZ#-DAe zWt5V_LH!8g>&oP$t-&x@Q?rKJS@nNF) z{a0wd_cx=h>i~*pwrmegn;n)p9bD3NS#7Z>?L2N+G%GyI|M<&y2Bt)y(eMVXk{gS? zkzJDU%RdyJ+W50!MLNCZ_e$AbCS7~1hQaT1@o2?W3^sP~(%=Lt;E-aV=~HXQX@n&J z0PqU3_m@DUVIR-tv)3?Qf4}la`Jwr0r2o7aIW!!UmG!pl`AvtSOW?w)<~nj$ZGSVS zXH34qrzf^YGcmQ002~pdp(X0go-LX6w8a*0Zkw|%_-`g&KXw%}!jMvl7Mz5|I0Nkb zo%mnX{dQ_v08l2LJ!B~grGC~Tbd=xZ2B;>7OF9O66C;*6skzDYPqR$+1g%}LL8uU% zdJ%^H9E`V_wYR`W*!u$jG{~(X4fccdu%91mg%ix4xDJp?{Q`I1hltbl@^toc33W*! zBwbL9d^Fk5`Q=!Af#cRGi(HOxiUKVg!NjNGDr!L|I)hab#>*>sjV;y?pNW>nGx^R4Hf6Eq?eLx+;hs zgW6iOPJ-~%!(02Ovb9PCIN^we*(u44#*aU8$5^%#gVDOEYUC^Gfg2Y;;0Uv<8F&3T{|I|?Bjl;Vp|ZOi|^EE&9z2oTI|G%ii)Tx zD8h%zDY@^~9AODavLdD9`nwL3=f^`S9JqSlNoTX0&gDGsB^aw3c8zLhr|{7C{dU03 zGuIg?Uwskl^nO_!@oHYLBgi9)ehgDAJnNYqUaBDaE(zVJ6 zThK>TStD!0od+-Kl_u0aS2k{~G?-eH=%cq9$Na8Viw$;$ms7b?H|wDEwyn2U;kR!K#(?$|lQDlyl}g?cZ}A&b2?E z+Wg!5bKblA346(sYA4OJsKVVbjt8TF^kQ3W7KCmKzfKvW>HgHLt2}dechfCnSwqtLnzz*U$Lfv z$CJ?;JLMe$7q|fqjx`-azf7Bh;L6-Pi*2yaVSjd3YqPe$;?`RuuP7w zIrN2CpRZQ}KT26hp~cgT0ySByzuCw*wt-^}9=01iMU)t^7&)f27!>LoEIm%A%p0D@ z1Tqpn5L2rWO1lu3J>%z)mb)b(5m^Az50m6*YnTM)`vrp?i6mTr%nX76dJ zk=~vo2#VWV`71u<+hMYFLfVWk#?Q~s&7CBG@blzkagF!gjiVrfEB}CYB{jnvP6||< z*D7yJ7ph~25f110SHFG*o14Eb!K3_e9-RKmA<(?{-OG=4KGD`e{f+ zr|wj}B$x-vkGJ@l8b~xeO3srFO#X9&fH=+V5+^SJR5HHe8(2dwhtp}u%z~r*)t148 zAK1_7pRjd7pTRSiHw{VRYOR+!k#DIeQI%GcYZJ!r6QQ>lSE<#$_R~EyZ@JO*-2*+j zoRPu0^|+~!S-Ei7m4DONViV3t%M}Oy0dBPv`j{C~wlE+NI8){~$X&DObmb?ZjK7If zX;f=xYmrVzqDJ6sF0VBJT=@M`(0vy4sk-91AZxv~H$XxHK1DMmC>SZK85cxEJ13LP ztb~rHq(#UQqg_hJtbO&lS*p7vNJ)=>&R^YE*=*Zyed1Bde(H3x9K`*tr)y&QuyM7` z{bs7$(_Z5)|Lm;<7aW1AYuKvG$lnm~#IDI{>us@g8Nql8U~OG3LT0k8U+1K{+^s@nDo1;q=6*uu&NpZ zT-r(MW@Wo}YDTT6LyMbaZ1|u48xcv^wcRA~!$G#{DN&SLgUSvoBO&>B5!Mz`^n@dd z-VT+9m#<)tId=8Ln)IjuT8KwSobJ9Z>w$2BV>Wnu95|>En(I0GHszZQZE}*fU;e1b z>oV*KLcr`>P?F);+oRML83JkR~D6rk?OK3)tHhkr)eU!!3 zrlx0d?8oV&pqZm9jZJc63_z1ZkYX~Le50J2qB5#6ux*qU)z^$Kw-%y=pr!GZeECCU zl2NaLbym{QVX$h~C;M&_T3a^^u8L+2B#&nPA_TCyHg;_a|G#Ic22Fo|!%A>Pw~x5L zrFXcN%}E{zj~T&2vx?$_5N%!-R5sTU8%MVuB9$on9_wnls#))Hh<8WTc`-kaRc1}M z^e7lvfLBwkR>jbYOD&eP?`Ls{iq9}FhwRa1R7Au`RhY?wumZEKUDOvAa|AP-r2Br5xj!I?GH>8kBh0)`E9uT4%?g+I?q{U&vPR1)U;2Unk&Wn*e; zx?QH5dK7b0@6;_z*|bg@kVoy5`M1COv*PAimUh{eX#W^W5Zz< zysb?7H{@g@W};U<3>yF0JHDu!Xi!5~Tx5-MT%RW^Jz{^NC`BGrWt|9R)i|nHw!9fv^fA~^D%?zQ;6@fdB4*qO?-)5E_Scdb zW;c!_J0jtOjg0+I4-qPl0(?tS{__v16)H@}G+0vFcYO*AWXiIz#~OKtbSD@YUbHIK zeK#{~777Ew>J^%WB*wn&`*GTKntHes=;#!qMMDXOEQ%7S{Cn)~9{^ zYMTD1wu-p2hKJLjm4dFkmbNxc8<$zzcgI#!?@GTELSKQq@F|Wg>{SAu>JT!X3@-g1 z`jxYM#6VCi?QiEZ1K4i&R6+JZsLaGAqKcxmo!nsP{slnMzXn42rJGbL^@2TV(9wkt zQ&v%8k!7TnGnI6X`lgg=mZ`2@S221AznCmO)+>n_FwYbkHfL7jKgo)5ziLU6YcFM2 z&Sbi~+x#0qc~4ImQcA`*6Ny>En2A((PU01i6ajrkK83ssLghqCTh#kQn<5R*eNFOD z*2CajDb})IpRuvlO~<2HFq-}38!}TFBTjrRfk+>f$T7uMIJA@W(JrLK<1XutXizFb*B9Pq`^d?XD_79f6*N<{Up%d7?HTV`%S zN1Me{6_?URBfl5+@_7;32}{W{=6^Pmw0jH7K~J7c;&6bbzPCEZ(RRWqihZ22<&d=_ zdVF#e74A4nndJ0ddacc@wmx1s3I>0x9ae|yFssNe?uNDLToJ@dDXJvu@a5|JcD{cr z*Qci1p-?XI6lFo=;KHFKO+8LlNv`8!H79?Ce;OE<5$i)FOi>zrBfQ&3Qc7=- zSmQ_a2`VIuQ7f8`DE*k?nTRyC3Mb1XdaE5)V>>HIZ5T^Pm5to1wB3|4QAEYf#B=of zm0yl>-m{e!@oQNIvFO_rHBOkIi{BVYfX6Y9+UkP(3M_60?A!X@qa9Bf?|TEwf3}f5gM3 z%vPnWG_!wBDY7n?E~BkjPh-<8Sel8#WxBu{RQNQ0ke_f`nw8afAk@0yQf;?Z<)K%*p8Af#*mzW1lih zvO)F#7GPU=k_5kr!lJoTq?Gwq=|y2d1`E3Rmw>FwN9lL(4NYyFgwPhpqEwu?2LQ?d z+IVXIFtt+r+OW)!5JW(F?;?OZxg4DqoUYc0TV+SU+o$?5`P!I21BH$q5I|PC6j$yO zD(f>M=vDFR&^fnKXF5IAvy}bE?aYU{C<)Odpd{$VpIY|yMvDukf9gU zrtML~OUW1tLa_2`Y57tN0c9=#x`NQ~n(&LL#-wqrN_kg@yUZnGVPO_t$%@nHj=rdY zYgxN(;V&zfonabh{BR+~jvwM}h)n*asrQZT^0u$5Qdg2s7=G+JFX2;j_4H3b#Th{x z%M$b71zNkw$0eBS7y~cJ>2v9BU#gPVS?#h;xr%jZ%?8fa6VWeriLREEz3)@Sz^T>OiX8{au;S1 zHyr~7Tm|IQ`&009UK7K6?X2##O%9LX)X+kpAA%s={P}`q( z!agbW&`G_we0dCN?-DJtw(F|iVA0v2bITp-VEb-|@b2TuJv6>NPJ{bF+E)>uR%Ei$ zP~vSTeLTn8>sQOuC;21v5sTEz;dSjD-j@2cCnx#IXfl7%?~2A{g4YI*ob%-1F98$F z2C4f{1XX?5$99)yz`14l80+mkgU+Gclc&TOBiFG(+GwJ6V zYpBuquMA~nOU$?dDhSiw0U$7B$FGhXKz5Uy^uUUT`o|z_MSBE&e8@VBJ1Gn(gNyH& zM4gt>DF5Vq{?uvoKhPkL8)qQO&YX@V?<2S<#pY!%PsNaek;nAFJA?fu5APhe01f$I zyOBHWr!zj?c}IT@XT1)7Kf7I~UARyMsW}W{y&6a`?9&R?t#>p=@1N9dtQ@1quY$)v z3?Xp5K8#Ltv@3OCqlvaOL|PA70i+IpP{ZQ^rf7XML)E#hHfALMLN% z*C!xA_i8-yUC?j9cq8{yzX*=a*Tu(HcAfP5vAe&AIw}SJyCO1jtKOB$4B)JDoioH` zs9!$pqv>@fEtDU^zd#8ccHyfew9cs^jGm`$qW0n zrXdX+(zAaW&;8rBe?v(=iYE+gSH|_E7Z7eyVQ8{ zk?DeELcSi>?gx0^-^4=C{5|L^hGRiyxw0$cPDho!kdl%QYbw3&?c7cDCp9K|{uv~7 z_OxN6{zIo_C`_^@lGUbBOL5poKw=)Rv*#vzG`8ZgB3q!A^DDx^n9jZ3Xilw-_^GKv z$|u207D2&8980R8j@6J+x$vK0XsBN^mf;V?Ulv{n*{n*%|${hZ*YzwpSo+G1U=bprx>YObxiUmJPn!49lyG%UR8QfgEWa6 z7hW7a`0q}qTiSzO00b7zpKlf&qXm`IxMfq2E&x{aXpqv~OF+u`Y#v|=-(tl(5gBb#V3D6spXFln`&5AI}kiJF< zjAKb5cZuhSw+l>><4rR1e^uF`yhx6IrZ3Ne%=w>-DTd8uF z_?9Wu>LltATd*2$+gZT5!**^Pnu8S$qR~l%IJGzu4|Y5eNUYBrg>FRbtd{`aO@!EfSB$EMgW;3h z2hp=VS{6bTUoNl7_KR;_uSNDK-`jUTQyKV4YL*uP!AcM-XX)Sa&cyc*_#KEJzeHA1q=sx6NQjcvRpSeHz&S=?3NQikvuBZ z>lG(5>@9b##blTEe-0nW2^RP&E=E#`|Bc)m6qZ3Z= ztOOSHpB$IB18ic$8FD$ve1tECMDPY!2>jSiczC7%N*Z{;z_8LeVM22wnnBHdS-pLmGLFyMhMDqyBBUvC5CA zA33A4YE8nFmZPTV0$F6dM#SsM9>pL%)J=uf!et|L#}wUPexD|h#noc0OXpUz+V{s$uvlAwL@`8} z15`P0K1_SEj}v?pIajlrOM$~&YK&DLL#ovT<;mtz;X^_J6;eO`c1w29 z_X!gT*5s<}E|-&819MIH>wq8GVf;y66RM;=vd~2E)6o90ujl-`wG%GnAt5U}O$=*( zPPwCdhIS@;p{QXbdDF$QpSDFc{JnN@+>9<1&(Jst-U`uM1uyClDOW#+s&Fz4EvXdM zF9;BtMp=t4=Qr-rgvI^3&Jo&rhr%M1JcGitOb`DTgkOQ2gi9K_1(>s0K+?mGsV+EJ zsq7ooP@c5}sz|8rsTM6U0S4b}b@`4`1wJ-A&TEJqq(OuHUi|>~hwD}Q8-w=iHD~7+ zZYTD%>BEwf#@1m@w@K|WhbA-iDc4JUu)mYq`H9nSfK4CzVHk;u??%tXjx$ja^Z)>s zTF{#`;@?O2*O^)?j(0bbum(oq8axF(5P%%H+*09bD1*y;?h++^hFYcQ-*LIL%fuwv zeP@c=6!zLzFmr$>OT+s~5Sm&lqyBxqWe7ea_Kequg4Eg>3wh0Z6UC^a%Dc%+0_+Wb|q7NzA!CKrEX7nWuKKe zHXU|H{mT#^k*4t7ekyFpM=V#*ZL%Vz$X*;@UHkW#jEoFe zGxGj-z0}L&-$CxKpXE8H?RyE`*K3$Jquc=X`O5&QJPlMCi|q31q)9uG!>UT6K7RFP zsdFN)2!sB(YP=_fVt8Z>Y1;&50{D;2Wg$`Fd6=o+Y-|=VXn@u}kJV!wpVR)ZmZrr) z`fFQT>f%X4<$w~Fac`$e6nTM=x_F`NZ|#&3mJWu*oQXDlviK;ClZ$_-Q341+%He4d zg!;ffeMdNWHVf)E$kDy|`KuYj=v)R_hG7jzG>s5f-2oR}m6;*XRyr#Z@eXbcvSfoM zK90}soBE=(x?slh>Iry3^;_oLsM-C$;)$M=iKF8O9<<4Q%hnL!spZkr_07$w70>8f z?aH+K+7sVkSL1LHPo740`RdwQjU*MPD-g6?0A?QnUOaK5h1k&At+!eN+w&fJ+_TH~ zgfU4tU7Vc+j7pY09RNLjIR2a=ZkXrh5lUjqqQ20P)mZ!dEfq{XVto|QY zm0rnj%cGhxIO#TvcMg(#zQdXF)_}&x^b)(xiaPBY{CDMY9_X)LwcGKcDXVJH{GmqT zVQK0YGQ*6EmqFOD#~Nf#SIMyDFlm4Dczf}1*4yit{pF-}-E&%^&7wa9s?Z#_PRHJ- zYcjESHG9I_&)044?Yj{a?^fU`EWCVN)<53={7m)Xynj+?`>_uZXTq)tn3>S3x_vXd zs*vNM=b9Ib?80VtR%~EFKu>;{N?lx1Vtv^#D{M3RcIKlrOO2kxj!}kfw%z_6j$cja zUM<#dxx`SS-wQsUGQVXY8_u-Yx*6z8Vtj$Z0d|I8gDkdlK?+23v(x5|{_HNAIFnnz zxagUG4q=~hW@Al5WOIX>16!f=r zEwTC|0aA1`PgPOT1w)aF7hQRj<``*vkPN@h39k4h79Bl5cY2S4x0nDL1l?QO(E|cB zpX~g+T)YUk!S+^_Lh9q=s(pbgP@%&FJEZW-7ysMy-GG3A2ulE!f1yg-<4bxJ8l9euZwx?C!l<|@2xi7DT z)9raJT9jK*UlU+a(&S=~oxRs4U8*!L%W2mPb1FjD8Bb%`!O>`wp}HE3oXrzqsIq-? z@$qlKOVhNZ7}WQ`enprrQJgnV*UqgPFbk^mljpXEz1xO7U01$zFJ?2HqH`muGPJJ-d-8cK2VB1e;R!*~-b@u5Emox}?yZ>&Z zacEiS@ab4+izJmTemL=SX*05(CZ^{=3@dD*~M92%~a97UQ|mO zj`tV=Hte8<4W~OIsBx0J3^~Sa>@2#@;OIwMnv$LU`9LGF)gOFdI@+>-kD*sG&TPH7 zIj6m$!C7>=j3H~4Gepe;8kgJu!IdfDv7b@7R2$_&jlwThEJ%ZrI+QV#HWXo#P2}1& z!M(HWj4Y$dS&ia@Wsxq@chsY;5=w0mXQ_XkWuM>iJ%(+`*u5JXTBOhr)?2xt_6T)B zFmfd{%G|+5Q2i|Xlt3ww?OFH1)Itsuo!wy@$Ms+}qKI4lmOp(`Xv}s;_p^31H{pRt z2LuvaL4lV#K|w(Q%?P9A2DGWe=<(4lQDVyQuSzckSR)STNv3C?A&L_wFFp zBhQ=3%9eZ#3Q?P}*I#G4*40UuciIiPg&0*!55-H9NB9b+qi*tDd(NX#A4unfRUnJgacusfUY>A;EEPE%%gr8c`CPUqGr7kN#c0EG6 z$}t-i>S|%Xcl2fZ$!*=WP2%xr$gB#9J!xPM-O=xmrwc*fG;gg0Z2qnBa=sJHntU1!76bR&Z4B};6-g*l3Xf#Q8M zx~D>&AKLl7y}d0dejDw;S)T*Xgg%7BM$f>;7>`o=yDZfhezW;=wQOD>;eRbpVk(Cw za(`5^?XwsEe#_VX@@TeQnE>SH=Xct3xaHcq`s4ZG3^qk~G?8k37P8aU`{b&lGhg@R zRMc`H%!mB?`IDL7LBY$TJp>FJtW4#9xtqmj@0b5ciQdfbXPNtlJ+h-yNthbM|Ed`q zuS5N!u;l>KzLDa+vGdofCv6s7CtmC4$Gg=L1yO@aiz-(0g2>H0)1Qs=(v5OTMH=jp zQFtW$xM5^ftrTCe)9>LYR@mRIJ7cj!vo9h}sl`*?^ie0QH!ajU#lrl%cc;j5C`c;& zJe_vv+0^Gv4uQiNikU+Cb}f=O)xh@YPR_5=v_+M@y)UinZe)TkEAM;$QcNt}_iS%% zoj!bo-4-N@m0xeAi{Q(SfbsIMgf=vp37?;DdSCXLq&hC=RE1V7LZhgmu|S+saTPm` zvA&9TK>qu5)g!7o0;=#%IhKj~)PNeJERe;w?E3mT;|FnnKQJb)Gzz&}C4uRF1$z9v zO9#(812?_LE=x7w~>h`Gn)v*4C;nC?>Tasqo>`pR&9yY(}fhVdrq{Q;x=8 zzu9{mn#8T@BI6*dqf=fR@PVC2G=m?lq>e-wl6f|&w(g=!g{I4iTko|nMOHPr31;&O zF75n3o~|;k>Gx~X-QA3a(W4QhkyN@RMt37plA}g5T0*)(q-!+Nl2TG4B?8jvGk*Wi z=h=(B+4%0ux$kqX>)Nh!pYU(H10U*;f%jEXA}J8oDmC`Buhc?zc+{X0Elyz(k@xx6 zw|fQ8mR@boZxp63XA?rxg{4t_K(1X>LMe~4A<8$|prOw-OXh()U*=xtO1=M^C1@RT z)l~3!S^t4Iv)j1I{KezN-0I2-`|CXaMPqyE^9iBH$H#<(gduQadAWVlr0BWS$<&LJ zE(8Ext-ALXDMaUcPf4t=uT$|@tp7O41h(oPY^=N_f>`aI-zrMV@d78}hO*U4#WOYW zHIuW6zswZ8Db;y=>`sj%ibIJ+nl|Ja8G4Ir*M-oTNJy+{X?5aAKwm{v|wXhRo+(C{d$<0OT_@RpGR6dN290=kBn2B!M>C2fUeBLA-Ohl;(r{->;jb#5_Cjre zllCZxlsH;AQ6@;$co>%soRz9$hb@QF2VA4;EArMUb)f)#b@s$2d3(e;(@d_IQs9`w zzPHxmI$xh7WS{7|y3Y}q-}-cSgjlnq6cFaq^Gzf6Wi&o*>NMrE)jfjnrT;LrJ0i5T zrR61}pdsqoIwD2)=3c*W{rA|rzELo31KKNi$M>{_D1VkYc0iaH-QF{vAp$azNdE$n z+QHZBl#Xw;kpF591osg{16jOyOV5A2VC(j_6f5;|g@rZcy^2ulV@%r#z z;7f+2>R<5BMm%L{2ZdBwgC*(u>0flewvoS!GG&#BA4J#iUu~!o35>`2u*Az-BSOJP zgH?gQN*GQQA{^;^%*-e42TFzqg9jHpw_gI$grU1tUumq&1y4%woP@Q6-hS(P#ayaY zGL|!hxhP$zg1f2Yt!hIRKP1(-GQ?{j=2We-^m8}f1VdnW_TZv8>E+$L?i*hpAE{F~ zs10@OM3pqcp^@dWY@5kz z)ByKgA0U(o+DQgtiq79{0>zYZ%tt~OrMQ?IF+k$sz!*yKcAeQ z&<2HK9kT|xNz%#L-4azvAZ5oD4Z`FQIf*mgIc0A~6H&dz11*WkQKGjm&>9c6Y4>TG zFbwaN!BiNZJKiq6b??5ko6gtdQUd-BN5|DVz`eFxa~8_hkYc!&B8q(Y-8B7lUhppu zkv+xA34en>Ab3})P9=hm#`Cs#yzMPwT3=j*+|liN-KM>Hx$H53f0q8yqaRzyeyVFH z@kPsba6BR|9o^mZxvbbsJmY_Zd(HSLaiRdBkr<#ULl}B7Fb7C0TK&r&9X3%?gq1a9 z)~lg8Y-@C-Hr?~^d%pXf4cg#<%N&SDS+h~g@8#9^ootQa>&G^F{xlG50!06HKnv~T zI&Q(;>P~&>j~~{Z!6p-;=7qE5o~y*5!ZN(baSaL_qH$2=`tovR+!3ZXu&k+xv^@Ld zel&z5qID5H-t@GtZ+}+SJI{c^zuQAGefH0vKl-bC-i64WtCv?-+n*yyK3?L?>Yl2% z16VC7E|@urm^8RmXu{P7(%8%i)FUyd=Tb}S>gxVvWVHN1$Bo#ng6UY+9m4P^iL zB;PpQK-HAR=rI6_3f=PY^^0)k};AVEpqsC!5SMazu=oC>tdy- zWu?eGhf2%oA9ftm!1r!aJWjei{jP72ZDI(lzTwkQ2`v-5mxXU(RP zryAK1oMW#1O@X*47zm4-7yD$fK-{d~SDK~sy{?+zWXuD&6_bm$JP0d57c6WDozRYpErrV&Wog|s3yQSXz z>Aj|99+U3x3}1cMhleqy-dkJm#B$_|zyE7+qb-L-cTiSVhK@@CrSI$^D(UQ8eV*Py zH}W1)0k77)->i)bWlwy3_v7~Y&`v}_dCn1I`;Q_Bj2{2|>6b>M5uR@m3vrD8qLU$j&u$Gl#g||9{3bj#Fl#v--XCk((TX-BYE498b^u$F1Vk;LN*=?3kAs$U zy*(c=Z8EFLmD;$IaZ&xT-s(@pQwsnR>BsJY+1vv5MWVhS=O;$}&;UNJ^}Pkbi>M*r zzJC`Vg|wgv;4Q7KNgwdXbRLd?`jUxQIMz4_J!Stm=&8)g^110i<$vh~Bvtlg`$AEO0foj)2l#5C4snN0 zRJMOHxliK^>YQQN5?Bx@i%CGJS29YyN#u%OXA=_>ff*<*9VGQ^QjUlW2mK=XtRNrL zl}um}+Ci1orhL+x{{`114OtmGGbilXfrY0mK+~Ac%`7+ehKYUXg0*X(cr38MA#s5p{GxU3lZjl@`4bW)>Ylt61&eD8D?m{yt*2Qz?J6{ zrFFtLNxfR*hM282zKYyK8xe&0`ON*!-=DdEIX(k8xbbGL;OQr(jJVYRz8H;&(|n0) z8bWw#&IMgA7$T@h&ZM27s7%Pi4Wi6bTc1bM`+eX4R{YHejxRD+w9tZVWZU=4*48K8 z74vQ?4{hw_PxS0JGi{XNj{T2tXf}o*TiRn(NM?Gxn_xza@!-@uGR~NA0cv^d#%YCt z7LwO%1g;HiMOI>I2Wn8f~$=YF+^};fkO;p@*>0mWh5^?%;0nH{+{tiXowUzk& z)Gd6f>|YW0I*aC$l1X~~j!Ax&r_x$|*~Dq#U69BDp_uH=waCZt>~uk9wkELFs+{Vm z^tkAm5MGyGG9CtDf}p;fMrGKBWvCBDTVgm@ZOs^JoPFiLS;>L~ethVs?X(K)5t=qe z*VSQs+(3FO(oFzX#>_iKWBiJm%CAV)i8Kmu|4t?=91FYwEiCO-YsX2{sFAbxL}(f9 zkkrHf{EBoM$9}MMH+^*yO4)e150;jDT%ziz7`V}rh-@*FOo30+sxE33%K}W1$XQ9@~auWDSDBnwl@&8 z23?*fQDoOS3q?yLownJQJtqvF6J;gNH)O}QjL1#(WcG(^E<}f87GVb+fZLHg0TI+; zSQ-dvZ%5=bCV-b^>%oB2&ndD7-wR4!Lb~rs(!1(=iwYfphKpn|P}7OPvy|icn6b8~ zhAq1j#dW%JvVsPn;J0-wUoLkWG;tz4ICDcW7pxM(lOf2D-^Um(d|O@9RMgLE^)gYW zxP%@Jc?IC@o0F8bs^ys8AI{$e{6thv!N#L5U7YqS4p(vWzsFEhEfZ+P+~zB^Id`=AGPMb4?j=2@XlZEFN>lGvF<2)t zkkjY+K8D_HXj}Ji1v`>Qq(o-CKUm(&Uk;q^W(@q>7<`?_gnbsfci$t2XWH1%$DGcb zt&ub6v)$Nb>R}W#J6Nl*t)Q7{72R)(A*7KeNfy}{6GJ?1!@h>?fTitZlEFGFj92ul z+jSMg<}HRd8;phpZ>HtAd7btFG@w}6ESbd_?l8zwordSc`GKU)?opktIz>>N=u{dn z0%y~_Qd&Pe37FPcQai{>`W2&}?l&)iswLjMvz}vdWDFYD5xP(4Stus*fYS5taHXgK_;D== z2WC9!pl__JL=PjNV8a&IyPi!mVKK1)^G$IBB6y$%DW6lj*_4gWng2sg)6|$<6Dh~* z!H++#gD+c?0J_;BCd#(GojZ)VovoSzXz3Nocs{K&}b)PcQ?oKPQkyB zgVn%4&cs5jVQ3#64$wnp6V&B3?L0`XQq7n6o5UT}M1G67o`}Z|O=P{2p7!2pL7;FB z=_IQgu6{KKz|4k=iTdUx6RQwsrffo4dMv|2G{cykXu!J^eCX``1>it#&thYl^AD~Vx37OFYYB! zZuy63HZmERoF)c(FP_xEA*L#yLfTdtLA}C*r#8L-LwsbZ)&f#mGjfW#=TBMXW-8~+ z!0}x#9tzWNp9CSC`)fN;cFbbr#qWwXBn7xiLZS_zG~GGtp{C+W9R(+9(+=q?9*>qu zT6D>?C9tf~VFZ`$EXr#P;0CRaIBe=HY_i^&Y~^58im65!))#vxSS?qdfjW&mj87Z< zZDk+iHayN_`$eAy`3Y#goNAq@e=qsdO9-$c=;CnSP;?ysSi7=BZLKYyCkTPP{)WLQ zL6WlGK2|fWgiPfViqE_yh$bQSjXywvgcZc4pm`|X$aVohu2ugv3@V9j%VU2ZmhQ0D zki~iRi&ixaka{21AT=k77DZDFZp^c5>A*}6(u~Tem}*hG3SX@SiOh%x^1e&%A#(Vk z)a1~RNZCEeCK-i?f-2ZyPLgQNRO{nbwPQ6O_0+E?=OyXAihWBsI^5} z-95;ZqDajAehf7Ct=Ube$4WE*Tq)#)#6BKqxK{riMm|JhoLh>T<#GOL@>!&aiJYHENo5@Ebyk1zWI z?o0){H4$GMYa-p{t8Y#6_!QMmKFv zIkPQ*NKN|ukZR-=WOM7#F>#d&EvDkN8sL{SJ#o*WHFk&-kIrL6&OSjJREw7YoR`e{4Ubm?fG6Sf#chGnpf5fas_iD zF>3nv;GYV}iqT3dxd0oTGzJ3{6L^X;<98wq7!*g}x)p87gXR3&OW2<)mAKND@IRIcJkA697KiBnj2Nn~Ho_C>H3$Q_w!jix`s-JURzV zM@=N}-f!O8kNkEK5?d{)_b7rS$f{PrtU?_`GkFv)2zwH&7rcJF^6;P>-c``J(OYekv%%v;OWE2oF|1(h) z#NYBK9Q-b8luWTf9M_e0g+@-dq;y`9t&4!s4l9k1S$=NF4aSz%CwcwcpjFhk2)87E zCq^V^VPPSfyPJ&p?CGQG(t10c>4FO_3tnSN7k?d;ata#;M)`#<3F~#L!=Cil>{R9D zBCYgkKVjWe_IPV!P*s1xx1w6BNk@)Iyx89QG&BzRpV54g8OP@vZ_WfA$YwMWn{;Af zqf8sI=EbkIx>1nnnylkxvCpLBQNb}b%(WraH26+6Iu4lrB9@f|(OHio8i&N0Rg27G zYatP#ey@JsMSq}Fe*v++8MGg4&|E#2Vj4s+Vr(XcGd3nUA{(IuUVL8Ky4G)5+SU)B z-Kkq%b*b=6;@yJ&;H&!JHy}0%&}atOJ!fbF6Z_N@+7>1ktJ8HIY+*r`U}EVE=JN+- zOi-T75sBlCh5vW&ZK&V zuXQdc1I&6SG;n%#3d4;dmuKaS#1TeX6oem^=N86US6%PdMK^rT5ws&Mr^;Obo!wV0-@~b`t*CNZDuqAU0%2a=I)a8y zOtqghN#xX{NKl`I$Y;zPV^2r`%>S9btB`i7b3#iSJCIT~4j;Dja!vl~A)xvrl5U)A z4bVHv%P1U;jfDTh%lqyWmPHPpTJr_+#A>P)T@&6yb?M@d+quAyUXH4(0v3S0CjV)9`-2|raok503 z30N0RYnplwKl{Lfl?jT3;55z{E6C4IDvr72?~Ka6P(f6A9NYTn8F6CIehn@k4G(e! z`_Lsi@jWK&C?v`(`A!Qi>~cLXk09>hGF#(xo#8CkRV%EO{nSt)mmIr(RjNS&2evbA z><6YNSc~R!M-S!vb_peQ!UF!{WP$=D&Wa z@<^Kg!8v?tOZLz?e$D71oZumd4~2eVJDviLZ@;RL{yvYyAhM$mP@b5R+))kt==kvU zVConT`ka;axS~gB^&4&{ujh~dhwHOxY%LO{I>YLUF?2L~S)(R|Kl*;l368uY;wLLhe#Upjt%gzcA1)kZdS9 z=O5hnY_Y})vj8(9^D>94BK<;-2wHBJS{hQMfgsyvjpTW-+-8|xv7b@ zOk9YMj&j{?sYUhaQ}xbW7G%Xcyp#1XbWHz87MzhQN}vKW{X{4SuPImQ_8_h}Tt43ni+XP;-_otzWxYhR*Qu4MXQ~ z*b}evpu}F4wrFn0`qVDC-GsUHPx9CZ@7s&&gZTfoA!3i$&k&ncd?YAg^`(Bs3(3%! zRkOzL>ZRtVAqps^efr=pe-zuso;{ue-1m;D1U6Xr-I1cbQbZY6u=ri&>aUc@RLFE? zJ;*ekJgi;Ij(of74l;Uqn>3ReWYl5elA~%zRqy|^sy8ELUD~E@C6*~!JhK(CbT*62 z5H3+<_LJU!R@T;}joWBJC{-qCq^m7Q!3`1kE68<1HltitQlYAZlWAz=MLrssQ95i5 zPeuHn@VLQ-qK#o>^!-snF|mdM;P``27XSMc?rYq@0v)_oym3+2)dp&-j$fLH^1hBV zlaGxLBh-i++P*tVV*9R!@x@h%3er*K2}2NxOSH6-#-gtrA!Dzp2Yoc6z4=i1A{|uh z6-b7mRBY*j7%v+l!;#XmlzR7#5>0)OAP0DtHCn zQ?7GGsoGy@XlY$hA~97<9CK2M{qs3u3x-OlaL;4;Webp%udnH{NK&ac zyLu0g-P){gn9{~wt@CnVtei?F2{M6VsAAJ6H5?$6Kdve#ycV6|f~3&{s12}D%6#Js zSX}zAk@A0SAV__}*`WC?2^L7|AFhephX_58a|0Tg7?6}fd`4}@fKsB)!~wH%N_Lt; zb({z%mFbC0?G~xSS|Q0oE(%~K%PkNlKT~tK3_kizQzzs<C?mibV5 z?fIWURumwjCZC_VoCsQtsQZ(c@oOuR&B@ECgJaDp?1$wcRAt%BprBa2#-^aCixRyK zAfbWwZ}!s^8OeAur}@W`x}yJoGZi3K$p$_o%h7&35Mk+OXUwu;K*Vpey+U0V7 zUSdQnT;*M}3{8WdO9R<=_+D(N>DkUuij2yvo6 z0)zO9P884qnE2?(siZ_vkVt_qawHZuAU$r3c@_mv3H<+mB!r=3*9mY$X0J=1D??pS z?Tw7osFPJ-yYk(p3HrFfua5|m+pF#>_y2sNq39XK&V*{EsbTnF@6O_=%AFg(A60+f zwtoTkY)C9{{tqL`XNXPzgU38>!b0XvYrktA2X}h;82tkeH8{Pj2%7P6Y)NBPgPSD0 zx>t_x?bW-j@hZvIyEr(5WisY3J+#Q^K}tmdJE}pO!G_p@iX!0|TP)@SuxFCkT~N_W zKTm0%|N2tQO6S$|j5UB!6hsy*vu1kisN`zZU`;Dd7t1X5kYC$gA#n#~svD%c; z)LoXxF~aQB!3u{9YvR~!^DCrN>gy6Vl^ZE^=DiDvdM*F$dWkNEM4&!Ym3&{$1Xa9t zkUc|n0>p)(%t`lSZ?{y_@vE>ZRBf(AkOpM;8Gfz-j#FFOI4tM&M$(rtl~{6?zzwi< zhA$rW9iD|SU0lB1ozo=gm*32(Ab*n@%Ds)v#$Jjy#tHa>ad+Nkp~yxX|CYkYsRCT4 zSYNRR-$Z$57#mdap`1i%nxkLzy{jS-?3CQoc2nj0o9#p!%{Tc6`s$Y!bGub}-Z+L1 z@VvTz^c~yJZ42w6dbw_Z@HShb)U;pa!P4ii2sgq=6%TVJ`&&dabCurh5C$&G|BU$K`u7z5jIZF`+U3v#$vn zwwAbmSBuRCpEun$oxwprPa&Pk)(R1{9xR#F(=jqyj_1Mh=eR(N&xx+x&wZ|L8A)R+ zdR*B?>G!qb12BNFsAYAXp#?JVw~=Q_Q8?;Peot)OAMPSrVw?S|+{Es&M$*-!I%?DB z9uY!#mKa;Ztr$Hf|D_6fI0@KPbWbsoO)cJguUo7uSb;g0qVxk3bC=@PYwP2$NP+qG z+?z530)wJ58Mf_p+@)V!a|I!8r-rgT6ayStsu+C8KAGly<&D4-0_rP^pAsP=)1QGu zX0^lUJ1Q0agu+c2o?&!`^)lWBUvh@jvEw0lvH4#bnCq8A_c=sQ;3% z*x?v9%#mIem(1udg`+WgQE=9>53jikH|h(SIGE4_K6<5uO+!Vu!L7(EW`}}m-xPaJ zB*T^TXPn_kwbug0$(ob946N{?1$J6Y?oXXJ>S&t=+!+sl)#wuX;`ExbWVz*Ehb5xZ zpmATGEfCML#ZLOfCV^3(z`X7z%FS~{G=C1)bs_+8*C_#L7D@}=%*%#neY1kjAWO)a zYdok%0v5C)wd20!{;Y_-8;Xldh*RT-N#)(Uzf|;&22ym?0kHzSps6%7>Y*+5HpG#~ zddTo-66=>3JNN! z64=4p(X3>89@xN{@Y9)145|e^Ha1|TKz^6 zdS+5y$^AY|3(J%?QQ8@@0+;T7LK$zCVFG6IG1peIyrqe->{<}y>&Pi_+o`>vsP{-- z;9mF_>GN%!EL;&2KOMCT6xu=HgWyV1q-iSgTCdb_dyox)`m*sjA@P+~_(T;uCO%#_ zAOgbI>ROMyZq(J^vRiqaV-2+)z?Z?r|9z=*7#e2E(f%wfc{A%XX*Nkmf!rdG6L!bwIq(#WH(MvW#nm~PIcc>BYMN102LJuRiFJLswC zc6TBjCTd&7rJ_+HYhXy?NTiTDLo@-Xxk~9{`EvKkLv}tDLY`&kkh6vcDq@zQjigE? zb_2!M!l~Gxs%ia1oVtr_ra3Q6wq)y>w-%8T9H4+-3K+Z@?8k(k`;_B+j;2a#y)oJ# zjq-BkIEt8-!NeXe7&YqOke`xp-ZT*DA1uIh(0BFH*w)*}w(!X2hh>Mn2k02nas9 zF8@_6{VZ8$c;`$HNDfKXw}eJnIjmldDNDe8YsMU?A!k1VPh8u!Alx7|mEgE>?XZ@NTHw&znwC=k|dUH`@G~onqFI!OR zVl^vj6PL{;PJFbBTnb4_$mT}FJ>{kP#}4OemCVnOx_aXA5{JrnKfRBy7G#pgkE|$3~qX^&f(@lUI_(&Rb_O{enHM{4f z>pZ*JGiB7)O0|AKat zKL6VL&<8Hc+1Izy%eerKf#QnPRN6MVV&rIS!Rawu3Re?8D*a(P#Y&wxQo74Ly2Kj3HQxGQO+_-PX$42_>GP1wYK!NQ zjba-?=d|u!o`2f+%sq$5d3kx;>PNtW`;mI&UwAUR{po)41vBb&8Xd4kHt-Cb!#`r= zOEv6fKMyp_R4XNXd1E=6%;f6odV?Jt9K7s85xm2x%z)PaIh*lksRrkvz{uC;eGf`l zN=Rvruy0=@t^!R5epJOXs%*HeIty?^Fa^&xKZxeo<=s0B*djQpx6GfRIt>0@(W}G zI}J+>pY>hmOozS^&r~j*ht59< ztyrBk;6~{HVelXQ-`qO+erB+wOznT&9F~0X!`Ei?Xx^XuqwXSvE1|Nd!kXI}8s1@J z9N9hb1&b?!8)^5IB@;kKV}W@g1kE&lxKl@#m{Uqgr$|(ygW?6e=cM@Bl!sz(BAXPl z_459=kk9^1Mn=Y7!G|Zte>Wp?nDk_9Ugx(D!PhcveHgS|r~SCkK7`SffsKHpkG=mM zPrAFi?-7y}LYpXrXT8;5_vgL`$c7rc1_Ef79sD`G(|n> z%IoV-o;@tjXJ(g`l|>M~Y(rc{4`_^2=EUx5j3E-b%HhvxLj?)pp{PI1R6OP@{uRf) zB?~!JVAiIt%W=XOo4t(uclP@YG>Z$1D==R*FZ@VH4V4*n8#9tpS|(f5RBCGblg!3m z^Faqne4g_n7(~H|1qJ?A4;UU+V_{@v}KlPDK?^ikWB66>CjO zGfo)ASPLmrtYNuZwfJ4 zEf#K~O9cb6;IIjnD*3;MK|u@3A>5cgYW9;kB95~q2Xp0_TEkNoL8!Se}t_IgJ%hKQ%A(7pee zq7dCut`j@TrrgYX5t8DZ@Q9Ad$XSZu#OPdXKo}nTxEDPmzri>zQ%Sm!y}dC-2cwO^ za~}!;#X=O7b)NT}uwdLP43e43ffocK59ER^JQ3y`jzl_7tHswXUqm_e9cIeXQKT>l zT9V0h&Xl!zLFvvz{=F!NphyvI)Zh0n-74tm>CgPTN=t{X9})P5xXB@$yN=VJM-{IJKi=xxK3F_>^*&xX(}ON9gr+68B1!$$eKV)`rd}8ql?IPSQJQBR zVTxr5F0QXj2VVVVNfZy)x%-*+=H=zQuFS(0p~Z*C=a!YnPw{*-B2MXE{o`L1>B6tv z06|kcDgcnY<{VOdVSku`@*A6-;7a)|9N9W!Ta@$=eKw0ior%JQi3;iKbM$P*G=T7h zI9rAsxNc8-o9YxpApla4_W38xtVSsfIU(^M3aY2X4oA!`eziW zuvLP(G8_v0xFTNCbP^`O2f|5+qHTvVM-fA`uJN@Vyd9X2`CtR>g_t`?Qf$4pu!#A3 zYbyz-GszWN=;%@lu_CI~-R+rxQUj`Oi^&Z3`x7@wx5Fdw4>msG(6EQ@vfUzeM6u+1 ze<7~G6RGh2td<~LoT!)i?NavJAc|xEg1_SPY@Y(ex;!@?@@q*kY}lk}-re2d4ZsO- zzuNqL&RO2pwa@2MFWj3K43_>~y;FeTWrJ+TPOVs;EloaER)}rb@pvWkJmkCgcGBG( zu@Izhvfd+L3d$fY#qh3QU=Xk2?;x1r@kPv|F>Vmk|gETx?U!v2EnKG8=-%vQP4B4DYkx*R`6hhAO|8;U+si?+iyr7 z;trDos9%6_sAqzO4NzB#R~koe)3@Qhus^Ck2A-MIHotifxf#%H6#trA znxCS{3%y`f?dSM0s;7aqr4>OvL20WhNm|G-KpQ(sd6x^~6+IA(#X@5g=_vZ?YgA@U z4f)CJA^jp-=NflST1%%MYBCNC517n+`P6)rLd~?sVn9%l3#X7f3$5UvFANZ_{iK8Q zY6aSdS6Zl!IoSAEpX5X)UZ-T3MgX-o#ZOAd9^ip1Mp4I03Oi@G{KVfu!F{wzUj(RH7>=Yb5BHiwVbFU{IKw&XC6_wKiE_XJv-NZ=kc2+MNZRrV>$I|G*-wvIU z6#3!MpsmohpMs}ish6TNCP9eewj4_+bJx|*B@qyD2JCU^tb?-kg&QVf{zTKG?T=I2 zH4*y(ljO~sNmOpdaClX{j{Ga{RX;52*AS#T!xpB-Hhq5D`k#Zv@`hSy*evZy>@!E!%3ED2Vak^o@#XUN17p^@v$m54bq1O81b?)9kB?X; zd$ApG_5MNq!`0h25ZRCh&GB=oVN0@!$g(k#yVu5V-{KbG+^IAEGr4fkVIeAVHTo$1 zc5<2B2}JBc0QEGuwl<|tYX9+6wrEFp=mP)Z_`TfETqi0>frY_ya`rZ(RZ`ILT;eX;Unse`yzKjqd6h zg*~5$hak|hQAJze>0GfSA`qf}2u(|!S5?=ogxnuLw_m!5F3hDlJ56zdc}}gp+v#$q z^7oXKziy(Me3F)y9xX*UL-DLM)2gs0Sj zkhuDKPOLp~{Hi_aHdj34l#`ZAlHElo1&D?ACjYoP((~E|^*w~V=5096dgb7N<*4Fx zO2y5DTZ8kA z>aE|wxX|sv9nY!v%qb17f%6sG?Ll7!pqB`oN4#(S5AEtr*k;~{bp~S$UzDaO!y7Cv zG8{Rgn;v(n;b)MMzFs5cvO-9T>6iB|_V#^i=|ESr zd0X@5SLSPeQzsiMgYzZL&DaJ0x*B+~#E(1~Vv#q8iE_lD;di*A{N;d>9#pa>F-F$e z+5r@3{Rh?h->DKIvv@jJtFBg{s#HuL=s@%$nAsqalmMAx&X`l_RUPDTqx}k8*a^D6 z<0Ty-?QrV2uPq3GDoWKi&n9#p^~a~GF@OPsYa=(=tcN4bEw+v)u^Up@eudIh2>boG zZRo9q0?FXNDASz;u2TD=)-CzgbbB^DkqW_;PUBS}sc2Z3CaK9UhY}c$2IBF^y9`dh zXP!)#S*Kpy3|h0grlnWm^BI-oCV#&BK~>{^di?fK9fpc$A#JJHK=DGR+39;SHH9K1 z^74XWg*KYo(HU#E23bv?hr-#x!Tg#ZKUPWr86Y`Lqd1KT(Sm2SDh;xs0pO5c-A+c#7W zcSScNJ-JNFw*yK$%PI)dDjfTZ$Ho<&KxHE*I_`+Bt78L@wu5M)zscG}7ILA+nE#Ts z8OgP0jLlq3@MU(W&N1O4CDjg$A6)shhe?9TCKYlF+ zyI=q7=ZfI;Wc4y8?4mH*7$U4C{%BS?Ra)dH1Coj#g=uS>XIWPM?7CZ0qjxyq!J>JE zvce)he87?$i!K<43R=kUwS0Ue2V_2P-*=FUWej*B2bKK`#qmnG|?%Rr(W;u@_b3*7`2uRLZFXXyXEJsU&jIV6-qLc)x|Rd+21vqzQ8 z8_=(#6H<@Lc!=2lySDqwjTX>85KUO{GWZUgBM(rj!JgLpcf#nH? zFt!bWwNF2{vVZhE|k1$fi zd`0uM4i9YTv5t@!v!#rfY>Rzoi+l#CL0$Vx3$x##P1KTm*HZcoYIQTj-DAJh&_C(;(Nq z(mDigj3AIi8XMykhegS&Vx@eQ zEh5_kVTBt_KsIueiIR01X9{g(u-JNzmIYr)RL&SKp2G@iK$U=#uQ8FYl`T&i;^iT#{Y9`3&j=1GYZ%l)G}2&AL&G{Wmm+oyT_6N98SufjCR{OFj*e7WsXIlL(1BL0a2$Ba6h`dz?=O* zh8_|$sj|Cz|GJ|Jo$N78tnK^w?(hQaCBwI#4`@0vdUiA|PqBaGw0cnYG6IVz1F*Xk z*v^8d1$YL)VU%}8nHsF#w`S}g`!=@kNdL|VYp9GsQmGe~%{%{MHTT!7bR$0=J1~8c zj|-LW!teJkdQE=3wmt66i+u-`>g5La5*b!Xid zR~n><+E0ID0wr)lK3x>2d;REoUt3$7VH;*1aTm0(#_+Vfye#4Jy+Pk?a+4teNGmdc zGTl;M&YwHE*;s^?VQbvtih*p%bRgVA9bhbn$Usa;8Etgl&?kLvwHIlUedj2vEvID4 zEa-9Jp*z=)T4&?i@jreW$-(1?z@oXa=00?|nRP2~;M0Tmjf>*(z{Nw5`39lu>fn>U zfAXj`KWt6W_st$%>gx>KP^RKK>sKS;MGC766E)w}Z`OqI>Fh2f&Hq;Dr|!K^*C`KC zccYRQq5ALfoCPEJgrH(^6TPykCtXu-C>2vY$<8Tg^Ov|VYSSNr340(KdyB$F5Bxveq~5H z;H~|wWA7F|P0XAUvo+%ZRr{59`;td9oiB&hqt5Ag3mJ(H$L+5DDMigMqT!m4)-;3Ne}S7zLnN5aRU(b zv|W=GmD`tZ%4zJHaVXe%<9a~i_#rf^nFh9qufcVU9;$J+lo@KuC`{w|(>$a< zh~letY-!Yo8!**+j7+}G80;m53Pj+&r+UMF3Ja<<0%mHgf_TIUCxplHaShrwCxqo0 zOcGsJGDwq*XUfw(`lL6k%ZMYxsJ&4b!0wdOm>Geb;^yK`4N8>6IZ6xmUAC<}B@LvW z;wlb9N)!_Dr~AsC$Z5@6XFb|TJ@E(&gcz~(9Xn;6v`Ih@=*krQG3Ug zf-kVmP6HB_pb|x)J(qQRxEPt!xSNSAn@hwjc9Lh2lxQA}RCKkp@O)QEJ7(;6Zc-_! z9^ZmhjundC`|;YuifJwJL72@Sc7`zG^DxVI`M)V0{;!uoH|o$yO{gyNI!@G#cZ^gfl&q0vi2OsYZYG8 zqUGT((0zwc*vXU645!9MyGB08S_>-c9H9MXNgv!M67-S_crL;XD9^n<>=1g zqn-^HQ{qIh4D@cYk`b_}q^RrC7~$sec2hh<=N(GC+E>?re9FSFY;29LLKN}u%{Si@ zUB64eb~eTc=yd>!Coas*?cJYZU?iZIeu^51j)*7;@aNn5v#9-Qtc7WjD4g(B)y^dr zQ>-Fh5*@$AP;M#O^s_PH0(%H7k;z@*kht|er1Iyd(w`k6e1>ow5hzGk&AKtmb@hha z7uhHRhLpB{GJXHjjKmcy)G-V&P)=O5CRfqT1|3}hQhE=tE zeHEoqxGqYzY z{AR;T?@>bV=FNQnT1K)nbH6NbFL?m#bboa&bR7rH1!n6k(02h(SCQSHj3vO%I_H88 z@7r&haEufsu5YC8UuTxl-PD*r`hARU2R;Lazw)OxT>>|pPd{5ylL@I5vYhDUpr}0T zTU+5|*e=4cdwR^(>@Lf%v_Hacvp*+w&<$r96c?O%pJ}=2{O*{4p`M^fm!R74YyEMW zxv>*FKS?xHC$u+Bseg;mR3i7k2v+4I7GbFdr9u@l^saTnS5@jU2FaAi5&^6*Ew6a) z(Tg6H{sK?s^XxIr*>)DSdw~_PB}yhold4QAN?S{v>w8u~z3I!Vi;4N;dq&~wlbqd5 z^Cox#9Y;&W4w)qlI7QcYA-;>E#Br>~sngK)lVt#H8 z4}l;v+iY@KqkKv7Mgvd7G+%6KB8@w3t@g;v4oX(UfU;4ynN*>h0x$I#iMyu zO)-b}a@aw4Due0t=MR(22myXg6z(C}T2@C(NB5|O-CuvsBZX!O5fT->VyLvqlJFx5 zE&t>slJ+0^*jQ89377Lx5$YrD-~LZg!3GE~ad_fBi&>x@PX`MzPl?mGrklng)QX69 zOtQBhX0isvRQ^O1r`8N-rWB{=O38!C&=gxhWP~#x}#z*=w6;(HAtdS$+=?;`Ge$k4TfFHw3OzeDM}G!szf3 zSFXgCPE7e`weW9x^QDJiazd?)$G0#mw6&%-?KAQNXF-OSgKCVi?cFng^OTi2@VTOS zO5Q4TzY#T*k-%onCC^|ia*mH+`5n6zkXYNsoW_KC>)BRWx!x(!OqzFd`u;3=`&=xa z=R3u?(U{x8!GN9%Iv*B{-lN8=Ef&Kiiyb{SY_?4mIpQ8A1`pC5(+jdUnF`cvf_8St zM@KG%aQxz)ou3G741b4YoqFjeSvi^+OVotDHa}1q8rc{dBG6uB!W2Rk9kLf9`HoE2 zSCnS3P^b5z7#^Eq>$iwNyOdREiw0Ieu`Q3vC3VT5mlwAbP2OX`izV#YFs{UH-&sYR zm#nS3H5=XGgTc$oPcoDNjMx!Iy>_SQJLk8K_`zQo61ingR0>tXyY-97Vfa=FSFzsX zTW!v+3P&Dz9Km95O<2gY9fxxH*;d*T!e#8(2N|-2*$nJNO}RWGkqBSZM^uECVrS(K06Oc6EkRR;qzupyn+ zn)3rj@A)egBz1p;x{KRFBwMp+nKcSI572_%jo3YsC6IjtF};|2pBXAy#CxLV2j3&& zmcFPZ4R9yb|FMP=)Fw)|t$^4Z`xl4a-9hfnzYlfqtZk$hb|a3h<0nFm5Aijf$x5Fn zBDERbrv{3vmewmY7p-#0&=`IrUyVI_3i9$4Igtx{YI@u zyqqfh)ZFivYTJ^(uJB6vYF{R^pSy0eZV1-xg z`rp|1#wO_l9i|qg>kl{swQ#;ux@l!X3SmSM`+uv0PkOQ5f8{EG_)~U5%b$TD_?28dZDH7hj*RcSzy_bjL%kJLK0fk&H3TFk(vORmMftsr z7phk!)z!_7jg422Xnc&J^liD*L}T~|O>Hb||J7OPH!%J409Qb$zcE)t6VvuIl|KCC zN({U0YWH@>9t+#$$h^8MI%oVQyUw}X`8x6{?dy&AE}c`)e#CHDdII)nVU#eI@b4(& zg)dnZ)Niql;-zPi$Gih0oawMT2}r1ZzaV7P@Dvp56+p(p(x;wR42tb&q)Uu2UA-+@ zWo8lkg7wCImFKr~1crEy*vQKaiMil;6gtFl2|LUZicg&%tLhQo^c8Km;|B?%)qY0i zTf$w|`2$mqGrGW-m?dJ6TbGZIt{j(F<>2CU$yU!MR{!N_WmX^xGa53vs=3gkFeoCj$rkbRHX=!nq^53Ld{HfR?^CllX z_FA2`!-H&s{BIy*tWqaOV60{+YrYQB;os$$1S^IK;!xBnL1~0wd}H64hsOrK$vci( zgTv!vD{JeLq1UU0-y`lr6kB)E^BLx?|GY2A%a3fr;ro!#H!iU}hJHDi4oA!~E;Tma zfyI88+9vQVTxR|g|9iWHHpw&=uWpMV? z!5SQlk4-#T@BH!3x!2BeL0nKUUP`P{h)(8DHt(>}FK<7ei1@F1eTgpK`|Jht@6p1i z_2<-Ck~R^!Yz==ESD>q$tV;DZ*3f-SlcQCWx=ec6j4}M*NeB=jn+sYDCdtO~^6!*v z4^kZe90XZJ+rzJ!@-s@3XHGKFDgw@P6|##$6v_I_T+#OCUp8)N4PEDT)+c7#Almp( zgN)%FYl&qqVKC2)8-{M$bZO&p4GL8dS?l*4gBUlO7>L{T^*We~zrEg$@Fj{eii6_p&gQkDocU8%W+1smL&a>kHL__5Gaxsn|H z(eN2nK#hOi8QPZya7?luw!}Tz3B@0!uvq(!ttI0*Di$0oXDF`cx@TB#$%TiWi zp_CVMS6F^y!u*(3QHM9gz48tV4-uJkz@PBj<^q8@MQEJl@5h6CQf$}evIvtwCQ~vr z<;Wr)-M_hLZtbpvraMg7W@Gg0T9}Br?^l6J?mtz$L`i-;B7bH zMTzvDBf3OB%R~GMOAlhue?Ka!^rmcdm)+X>=*q#%gT3f9!_R6m z?75TX0#AC<{=BvpLeh4B>|tFywb}WW_wcy+#94cViI&^3lWE;p8v|jL?tQl>^6qgM-1M|p@M+9RXv^Q>_I~Ag z%@^kFtkcYr%c9->XR5S|zaO8AS`ViA_(mdnH`JGigV&(?k*j`i4C)oWsQ*rUp6^3H zM01_~hJk9fKVGjqr+XX=Z9A}0{9zLPcz(N+A-EQZG5Rx33D~1$kCRrYrl_I>(dEU2 z{75=KFUxTDm7Nm-6RE@YVB=1@M>O~L&qN(}8te$Ko3#*V&A__(h}rEQ2l#iZOD@lX zSRFyFC^2}PFv5KXG5mJppQ&0O{t4O*=x*N@&Sa8Bi<1XVjE$WwI*bt6{(i~Wc9X4# ztF5gqL1@b$Ygv*N8$j7pVS1xyD zWo6(qheU1X##Mi$r>pvQ8hnDEOSwvg(SFF2IA*4jIEcBu#2)LQ{jR4SAw<3VyXv-+ zplzO~9m@G~OC}jM+IHPo+S>d#RF$|tBB2{O3^IEh)n0>cuh>anX}O%%G#N>khHu=6 z=DnIT$uOJ9J89UM6nV>CqCibeg;5b4f|pB;XF#2$LWh0QxbqCP>3oN=YwiZBj_Wk3 z=yAfo@pONZ!D-`->8ZH*de-;(er3jZI2CHCu3fh(kfTOn1%KXNM-N<8?XpA%^eYYQVd6HnZ{i_Q#{-1*FYa+UQZ zuj^;%1k*g3x#RT+MzLPplQT`5R;L*LtGngvw(D_e#w@Y*d+#OfoN`-1h7sc3U3K5Q zb10A=Pkem9&yqQ;=CeY)^P{gf{$*z48mp;|h`i%>>_U@hxfuT#ZP0pud=DOc_F}KO zXlXOE`MBw0Mu-)&R3S|gtR#ZK(@h*0q(cImmZ0W#tCSIe`^D=vm&3`z3FvsabYd>) z;Frf3-r8Og+6*2EMvhLGi;ffYP%nY6rQvT6t4FS22rGs-l%W9vSBDcD4)3<#tla2w z-7jp1D&^X=USjinC-J^H%L*ZG8eo{HpEv(U8bbIFWL6k5(>EqIcz+Q2&$~G>-dpiL z^L5-FSBp@eeHVGV;C^70FPG+iK2#4p3=L^eXjVp9SvvUEeZFQ7j9I529P!P<$`kg9 z>F_N`w~#dFdAIFBC|3U4*Y6?hbrh2AO*wR^h1lo*yD`<0)Zaln|I{@mU);{~L(r*>48@_O?t?Uhwgd zx!2R??qUhTwz4wo9))%UPiBe_ozOv8adJFny+ke#AR1z(c#22maBW|o<%(69Bf%%W zZP35jIUm{4@;vJn4!vIXu-WX3eSExaYipaHo*rOqCsdX{b0w74Q+>5mL3dE@<8^o4 z{`|zl3L!dVIfjIitI>wB&U@#Od>NyCZl%H)7p#<`T(Fml@ut z?G$;VjmOUaZox+$Q@+MPtFv-(amjF5cJuP`5_`i|SUqs|yGD!P{(KX0*bv|P9f!qMS! zK2$g23BaTucT%G1dvs5y3WO>YNW>5mi7_`fdt^XmlmQ)#0HA>|bW98fI!nu-C$eL{ zn@1@#_O~)!0%PmNc#OcEDR|nWqocp(FDXx<-vdZwOoT~`@9BZJD-xABKjn{}hKsp^xtnC^A5McLj67T3z^ZN0~PMW;1SNSn&BFMN`y)vvue6kY{CxqC zUx?GHV%M@yn^b~krlw5Dvlyxg4P;n*O~)V0TOc4gdpI8<5%9bL`0N0J0jg9TZJ_P8 z72kHE>pW+atF-r@w6_<)C}>q&(GTWrqt55m_*RlE&OcR$e$aLdpgd}0MbpPG57tUe;!1`UX3!CAv>1I7*XE?3-TZcchK@TP(Maf;;Zg#}{{5&>;*6j3j zf=o|Vi5hb^KK?i@oTR|xMKy#GOD-#Kym)g{ALcD=w7hS(aCBVtI8q*OM|_B3p_=V! zQn}eLr#a0DV|X(>|IM9vUpGTrqN=Nv-?;qo6j+&`cV7>qvaaf<1U$Xxh~G%nZ@8$2 zccNcO7}4#y0_~MD9!hos(XKy{1G2}J&wGHro{f#|;`;g>5zh}~Ca&mOTfG@*U9Q~c zu^3z!-tX>HWF^VdX$W+Hzln(nWt`AFCSOte{>jO^&eN&^h6U4{sHUbSGVNW9@>b`k zhg+z`xin*|<6dqeGzfG0=jE|}fy>KJ3qXJ*nWXQXoQxP(3;hOsO`qEWhLAN0IhQR~ z^4CPauj2G~#{5Dm4cXp55o^0dU({H;yj!P|Agq*qWAK%I(Iw;}RvOH&RKwE|@`j z0d<8Y3?7wp+4Z1@z=m(@hq8DSzEd}r+QZsAAFjP$ai@3sqx+rjR@(pl{b(}y(+=b; zv{9#F^FQff-V?sb3%pdkRV>R?=@Vviwc?uK`|0{NCxA$t92^M)TQZcTz zj5Re=m_=rnmL37twpLd!FwOSGet=Fb{v20_&tcgo1V?l+CPC6z)^5A@2YPD(NKRaK z^R6E>%Al1tOP=RL{f6lBoc~qM48m53rp7xIn9;;b5m?oX$#O2$ob?bOk=pK&Fzbst zI5^P8<1@c9ug3CH;RE4FM1=H5!LsG7CsE73e>=qnC>Ynn%3kl&4!E0sA|fITN*P=Z zOG%!zE~ob5ViN?#Ty})RU4mdeAD?F+6706()$%6H2CBGr3VK**|J=l;$f7?971 z5OxM4U{K1Z^SK;rO>OJV?d0ohg!iH0y1euM2C~0xFE2$r61Rh!Q`TYaPf)+%KMURa zuYANd)@6%7BP)S=DJn0|P=ZH629Obe!XZf+M^7(1M+cvTjTq$fut5TyF0QOR0iE#e zv_Ba_;@zOdupxP1>Qz+tv4YaFW=tH4y6>bSm?Rz0G>w%Nk)XFHWt_QwQMthy<_9}3j1 z9yKu#H2@fQQdS;}DdTu{QXQOEyj)ta8Cy=r0qvnj%*6;k-9SNZHvS6`!~+O>An4)F zZ~2V96p>n^Eo-n!ifLQ^!{v3hw6G|y%9@~N`!^~QgNYaH0`_82{d;-safcIEB4N6`?P*AGU}?(uR40&J0B zWbVU?P5`OOs;@o)U}^)M!O6~^JF!P9GQaO6$nehe88f0AVD006arv+z%il{`aDPjV z=4JPsxc(dWgDCNwtvGoBw}&$-0{rox@9E?JLi7rvOpf>HmwxQ2ALo+e1W3Hr+ihI} ze)r8Vs`Q(_4>2!*q|TFiS)A2^ykC~EYBo%HvKhZX#}y2AIxky zTLGPrYvkf`T@6Hg4#{IdZLJ&d13$U!);D4Vqn#LPS8(GAr{4&nMv@3V0aPPo)(_m^ z>Z|KBuFjE&k;|VrIx5|BRH|h@*8!&M4H6Gc(8KfYSPpb5yd%%t@>^-VyKqSIc7hjJ*PB_)!YWn57UXMRNeq6M3?-X~GC)gfB_Mt3}Ey(V@X66l5Wk9mT=U+cn@hKNvD$E1cx8&6!xfBjrsU%7A?U4+5n%mRPcRPbg z4jpfBQi1KiUb=qaEa#wo4T&nC&O~VDY&-2xP*7a+pO0*OQke9F3sv@yk2z!=9&XOm zT`Sgt37lPAa?Ws6UzH~b(N`j8-DR64!x1@tB8vsmNxo{X#46>a?cQ2fcLe~nBLLi| zJ$WDTH@AS>4s@UIqBxhCkU5M8e_mZVJ4zF~ZN{Q-%)Thz1P^r%KpK27CU`fN1la%a z(Txtb3}Y%;h?--AaOvC?`bPh z7gERo&KlI|g3(8RjB`6|dmdTnb~eS@ZS>r>t<247NKce*xUwb<0sxQh4Hg>!>JTWq z=JoK8!(1DYK&#Yt9l-rzXu<@te$S8X z_uuIkmr%yjK8Qy$$yTe=9XB16J>Si=SNyI@ux{PXs!=lIN#k4fg+cBN?bd&M{Jopb z>jHH$kbu=I-f(;XGrRRQ3SI8hblkR-<@tkz?v9U-i-Ca~WF2{!$asp(Fizes(WnL{ zcq55bo_iy*dV4rc^J9Ks#5+X%(qp@|uOZ#%yHk+_oKQiHZk^28gG&H0RyH=zog`0y z%1oeF#a3>5>cZ1zoj?G6Bl-($F|XM;`JihIAvZcs8C0z#O)duaHvaTN5w8tAq0yb$GC`WmCAYau$_`_MkP0i1n*Q2rWczg|{woStzzj(=C7HDbY=VEd!c z0{m45U@>67Z9#$w+#fnfN6^j?MGBc+>xB^EtNp&*1UPxHyW0Q)8Y&jEiIWc4__kc7ykiOChv)==vxH#)2F`)4{dR=DY zP#zo{yyUz_1`CzBE^=Q^D(iZliD9C6UrwpT zci3K#Jm2^f%q!3(0A}3)t}cTr)pi`@#l9Ocb<116{)5;LAtd&FLh9;%3$Gcnzylqb z<)>W%j}wE-OqM3+eX|w<{7R~zPus!W`OXNm-<+Ru_h29jmpL2A>Ep#l>dXcpljzk) z&5|vF`~s;gav9F^r@$q)UK3P&FR zu;*N`tmX%I04fO@Q{WQs)CaAtt-ZIC+GUeia<#5hUV1%1laL&iUEppmtA21C>_$5y z86-4(&1HgyeW@`F4)pY}mlz`p3s8%oTheU1XIjGW{#dOI=G%rKER6|+w)E7;5PEP23)Qz5~6lMch zh7u=CvCtAL%XgZz@&EN3QpN!tz0n)PDSHk$K@dQTb?fCcz|KZ>I%20uMVBQfH9q2z zE&E$fsBY)O@^xE?IF-3n{J>UQTU&52>`Dm5xYN>FXUNXEo2SSUQe*5$4%=f%LIU=T zQwTC13&412dblSN4|=B*BtNBaAIQ#|iwU14ErCfzZ&)7f^|jnDGK6e=`>24Ur*KmnQH#k;~%KS_nxxmz_S}@#gt0jdGr4MF*@& zs$CCM_ykyOHcrl~iwiof2GpE@esWVWWCD(o_I47iihWbxq6gy81L`%DZ+;x?>~?R- zXQMdgP1n1^pyTtQ@*BYM*}vW114ivM?SwEqXV!5-7OE^UDg+1VHekKExv27GlGeF~ z0UHR|Z}ugznm_@1Bj$vcgN_!Yj;=E&N~X8KF@EXLsMUxpI)U~<{1Eg5Gz$~2rlU>$ z17K4t9Eqpx_%HemJ2+XBnaj#l`jn#rdZ*-J-z6HfK>|{eiy>%om z^SX_Xhj|2j9WKl3O*UzY>-7l6W%J@v=siAz7=CQA`AS?a&1A$|`jH+b7Xi(SdPdT{uaEkZYR_8`1Y00BA!5A6_yZmuNf_ zvzx1+z6QUt%Tll56MV{hP*M#oIYIA4L7>QP z{sT3;y}iA(lmZ(@5HY^jA|h@^#?{iTa9bUDH?&c!tg=#3stOFIRpZvonRwIPeldh7 zP_0GK^+LaayZltITqp`ngMlu&g9_V$jC{Tw@u{=A{}m_q`-^-p(e>lNRX+uBw+iF0>g$5q&v%qd@C$gsq8NIdtHV^7-rZOLd}mL zDX8N52S9}63-Vusup|Ior8f#BLSEh>pl2qdznCqB^8A;RAIloD+XYt^7Z*oIeRFSu zgh}E3gOG4II5?CLrw*M;Dh-jZEKAf7{4?w8aZF}_eim^1_oYD<5)n8$uB7Oxcg06@ zlyZyuak3m8Z)jsBA3!1js(J^oDgZ;Ck61*pm&C_YAj1c6IzTcnN70<3cFa`2KWNoFKN@EOF%f<-z1k54M+(5vGCZ+U>z!y^jQDjQv1F7wwI zH4}$#vt1K*#L9jva%q)PuXI2wXFQdQJYPVLUg-exl}hlo9|#1O9y}AM+Torf4{=N} z+tRoL<}MkWGOV2bH2kUs`v;< zabZ?PWQr`CS9{@|=g|3T0xXADEPD0>t~PCA>)u5E5olS6XTmLDscD^6 zXFQhV7<3dU=IB?do0zC+YDx>}b|H75Kg#aA?l6=gVI3SDiJ3LgDA&z7FIZ6r5p6;% zBoOVnSoZ?-u3S*&Lt8P3Spvk!iOJZon;jtsf)PlNvc|?U-j&GO-MrK;oS7oTCW}^w@y4%eG10}9Yg39f4(@ApN{`_Rn6Zz*wanVIE)5j+_2DRPe zV{21W;CSXNu}5TZ!`11gXJ$gS44htSx4htz;=)2y_!adrEL>#F#``=4j<})y$Ls!> z5JG!+DO`ODTaFZVS&WETULGDGcxdDI4-Pu}W}c%vzQ62QV!#gg;sj7#a-@^YwWd=% zhFF%yF=bOLlPP)U4L`qEu2Mgn22Yx(Imu2-V`;c?`t;?k7gr{ zSaU~hg#~(y&bYP{11~!3BiC(-XhOW0-uSdMVQF_jClIzlx(!4L2~ZZ$d=&Ri>N#LH z7iZ^a;5^mo^t>kF2Z) zg+JEoQBQO^F$)U|I&2a2yo07{laZd$ZGfSIma|L`o)={Y5la2FR<>8c$avW$h^LR( z42NWahSewy23aLOlyUoedz~C!OG^slaU(b(C2(IX?K_s- z!m_$rfAH7p`b2|?SVUgP=6N#;@`nl?A+<(5?0qg>yp|=85^X${Td157NYHNYI z)!hFQ^rauDDtdbQS|d8AU%TapP576)e`fCQ?1NwOH$kt!0mTh0*n4<|-nSYmBZAKl zeX$=@No;PgC;iKsQ69HWBwAiZbSufrXZ%GF+4-5~Ja4u;n$>4>?bTk4^fbx@{zv5h zy<<+9K`4HBjzmm?($(cxwIFVMdOB|&?vE@^uqPm%TVO#e;?>AvclYw4S;$OM>Z*Ln9RQ>n)JINn^Bq=>_V-~z$IKY`IA%u#7 zqy{`d=q*Qw4IX88KTb99rJes1j>6ZygD4?|nV`1W1fwO}P88@g3;RaT#>2-gMjta9 z8#Vgq7NFD#y3e4>&QOs-5A&fE&hng`5AjkO3GBepgphd8Iz0ltursBmy99EI=>b*o zUdu_H;_P=6pARVu0BsPd0L*BkbrO8{7&jl@=7X~4vX*~;p%X5E$S3A^cT`rM_(7u#RUS`IPj}?; z8e*R*P{GO{)AJu zy0Vfvap3u~T)voCdkYAwlZy%Y{2$x)?>)D;f=|gxLM{^JyEnFp%Y{ zA>&=Zxdoyu@{b6Dp-6XKM-c8ioO1xG&sznlQ)fE1;3T=QL&SM;ymc3!fBA0KZJ zEGjtgo>{=|~0^UR`gnf3qvu&SCn z1a9zMPi84upqdULqC#Ie@5Lg0$71Pp|ibMvhmHt|Cq)2u_jf)YuBZv2g z>a*s=2mp?DL58V|2a?*VvKzaAK$NDNeC-p#%)e=rP9~^GoPK+h?!!6`aOK=r!AJZ1 zchLT<`T3@P%9NU#8sLITqhT&_s*Q(|+06d?%k%2ZJQMOl-GTZCpl>$LN7~hC4U;c7h8odo#!LK#@< z8fbC}idHqX7_(&1&AX>-ohc~@t58L1 zDgJxjJV1Zo3*C{ap^2=UkGbe~udj>=1if4S`**aNx&rz@1Q06l`gaHAHp$!1_dd^z z$erNg(4+zICE;I1X3R`qct#_^ml4dqXG$Ef8wSL6HOM;ht@IyI>&%9I-yQMSdBHRK zvy71nKCC=H;T-To`gF6i{LkXli>9e|{6Jp?)P$fPQn^4NzK2H+fDZLaOG{%l9-Or( zZ$%9H1C(BL8Xshv)pXptt0FPvxJcn&O+`B1(d4JvkBQ-+5ODmetXu=VPYDUQ=rN}yV5qI{kLs`aPEs9)&%B;*cQT;0lC+VX%3X$( zp(1RB{;MnJmFw8|mC$h%wNqc9x!bNV42Q-=pmDVgzlrO9?ImY|HNrqxjkvnL&Y##T zR2G^wC@!r_=CaGy!}U0)C4XlrZNSsAkw0@(ubP_9+eULMy`q8qe4K~g&b7!M%D-z`J{-pU>x_uyx|cI#cxj4T*WDKaz%!h4UE`(+3& zKyROgeu(}FK%O$i(mzFlO>G8Q8U>?0_9p5F`Vo4so&WpY-Ca{t$&sJTolKG7_rN_n zy8;Bj(!fk+gP?M0X(>q9Y{9A?0={?Lo8Rf{e%^pD(%iO_&bYJ+|F`)A7zS)j8NSW$ zBG5ia&@rS2xzVYSTcv_^R!4x-j*gBd^5s`RCqO5rRS)xgOp0`Iq~p3?bbyAG^s^06 z4$vfGzRYdUf=zqt`7rNCMK4K$X|HPaIj2i#Bgj;__vJ9}2{4G&BLdC&`6dV8Q=>%f zXn+~eW}q|I#i~fwVXlp>MBQcM6stNwu+Sc*0s8tby@UZHWW!0$xH_fl4RD=efCYb@ z9--5U`VH-&^8u`ziJ*V)U_W_Xc14{?GVg*`i&J1{4H1pU{b@dKg!Ls#| zL(_`Au&~e!u#QYFIs}Ix!z`T`&wF~rH&vqvx&L!G=8^+m!74@5hTrV*at4~4<(M;^ zc!PvZ2tamB98Y`tj^}sfPomeEde$26kJDs&0J5HV3J8MO0-{Zt1{zZWScOjG;nZ6I zSy+gkTg64j4DVh{*fKMLY_>7TRrBJGBYzQ~{BMC?%2x zxD-0_1=KrliRFQCr>g|Rzq%RtA=G(7wp zFd0f#rELV3WdVdA6!AdgZ$QiPAWy|3aj}EfYbNBH&w2>zXZ6>?=bn>_60&Jc2HI-t zMk2BXrU-uQUc%p@On}Zd1Wy2UAY}1@#sta+TIi)n)Eb|fQf2UHKCC(i!bHGnf6~V5 zKog?07@r4&#pLp~yM1U5^zLF0nsuKnR0iL9$ef@MDilPM?v4XgkfC$}fK+hNvpK~1 zdzDT^M24j1}Y4y6$!xw?iU@SkeaHFfgmKD?4Pnn`!Oi? zpC3mjCSZnaxX?(M=}!+RNc~X-Po;yjls}-3+e5FwhYhEm+!uW2^|&(mARe6;uAM6R zyPrP({d%@*N$a}6 zpNr^D-8G~;e<*SLhAkOe@24L0tg^t7IW53|9Wk5wKDn4n@yy`|qIl>Kt=%WCoio~v zjGR6c+RKy&ti(0O?qt9o2@9sHgqgAO@tW^)aQ%6L4<)l7#s@#6O zA#`G2^X{6$5=3N=`l3C=sw99LZ=UPB6^t5g{0c*q<)+?uhtxz8=BnWc7yTW3pa?}| zgI@*x_AQ?^!KVsLK4OPotFR)iTHk9yD(Xqf#QpFZsZ1NisT*>?bI9yNe3V?(VUoRR zWA`(MQG4})lU$E5FZWlLE#U`S?T^-pS|efIN#vV(JWM%Z`anT92?ilAnNijo7v*pTaOz%)?2cS=7~&U%=O-?C@?ooaFhy)D zIsPp+C}tPSVsa{EmazF&eCf^hsTQe?@K~0h;9lJ*{7uc6iLW`Qa2Cef&)5Olrv+m-8_ zNSD^&63q5h^lw-QUro7QAKFA7ld13)qpg)hluu zFTB(>vr!bKG#G-y0x9&$FO+C167TNp=PY5%*<*jzmygc={ExhE%N`|3T#H+cPp6Q0 zPidr`El_3qWywQ)JC6NWIDNrpAigNmaF`*J$4Bh9GMxR?=U#eqwmHE90a#*3I7+Q6 zY#&LY=!eFFMR`ce)?$<89oe8YM#`o4j=qT)CRhS4vYmmsi;>FFiLuh=wgJ>uuaT_ke1%_I zBVTxGS}O;z%%;P{X^1kp8Wb2}aGxdF%yFQs$-k0nu>V0rT1WmLx|krUvr+Dw>%4W? z&t%kVr;K{kk7AP&97XL#+No*_-@{Jqd%t`Xq({YfZxcHrk4!@C{lM`d5Uz_-fK`ih ze6U0mjtSFubHeMe1GR1(wvSDT26%3hr1RRnc58SPJ7EQ}tpK{qFq;*Z-mG45tDK zB`LPZjJV&dlOD&{jZB`moz>{t%o^E^LIT00$z^Cg39n~TG%QkNgjKF_qEVYX^BK}6 zzoVIFhHZSM&6|Gu!;xP6?>dDfl4@6BN{A2|E^P|NOy}VPVw4d{`vvLRzZrL8OK<(SDp@ z(c4tc!?&!XQV|fFXh@Ui4-z?!c*w8KG{f&C?mPWD}**~&c{5(XSl)SG~ z)n`su{-n{`oct3Wb;n70TNQ)>KmIEfdY(d-MK{cdDSu>(HcG~Z3y9vm{yTn8)VE#C zKG^)N;EVG{Yi+ZPo6L#jO%pl8YoYHSkn5&jyGD>{lUw8>VYN&K&n1^}Cv0QDsJu9U z)uUUg3GI|*i5DWQR8@|>@zv~>#?g+hv@)Ms{8^}6uh5Ld*f}bhU44LJm0-+0#+kzs z#!x3q6WFoI+f{)aTocb%e8{!>Y1d6&UnD zbFC)sd&p&*?rNj_&iQ0cH6+S~SP1pkT0?*5H#u`P#oAg_yW3+0{V$C(TRi>r+5cdWcqPCW(%X}&L-~#9+O<84b`Lt6iqLS z8Khl{JWJn}W}{p7M$ z1H$k!9QO;MWxCg=)))!e&+z=`O~)8p^K|UdJB7AEhjcwdR>8@uO~vGwzueRJ+!^+@ z+ueg?;6b?Hen&pU6Zl?M1K(RJtxxo)>eT?!TRj=+3GNI@+;oQ{%1cRtJhMIYku$dV zV&}QQAeWi{q%Rq`A`1Ttq^=@(%pv=$T}A3NtvXPP*wR0`d-RfutL7=_%&))V@E840 zK7@Z{(yfyh%BN&eUqrl6arc{;xE?Li5DIPZ-+Byfqbg(W&ir8_fB*TkmOJ>5E&3SY zpNSio?(F`PR|PBXFLfkljSQ8ShIC>zN?Gw~TXx$|YoE`ETv1;Oy`{AdlQ8caDrFxp zE%<%=_!13UErllyBXzf)KG;Fk@Y7pn6?)dlRfhbsgGOtcOmDrjU{Upo>gMtuWWH0n z@@o~ClAmSFFT+S%#AV`aNz-=>b?V?_DL9!I>_ZLEc|V7CRn(%ms816)Zzae#Cbd>P z5jeS!mWjgFyG}UF!mqj$?eDW>Ys6J#W9BiKah7Bjeh!sJEvN0T9;FeJY@YHuVHu=J zeB=MV4=p;;L995;+@Sp}dp5EJazp~b7)6{Bo}aDg#v-v>a5H=5Wu}obRR#Q|bd#FJ z`W>-y6!olH$|#S4Frn%A1|_dzL6>F=ddL6HfC{2H0;ZWPT?GNIUQ-t!WA45ggz z2br#;3$aj{kC`Z%Sx29LE=BzMIq7Wiy{em#8Gn|=$uIwnHa0(kwOG0SeeMf8^YWPa z9#(6_7LgIm6CEZe7e=R~FQb&D97@Mq;U|bcJ2m|A*=7jVE3A`!ufKl9^8U3M{{i0r z@Uv8G=*~+=BrYQHTC=}QB=SlhY3{kl7?a5R?S-BAND+lH$mbIJncog1A7>9XGB5Ke ztFEN{)c=)<<6Nr9>XNI;TNYC9cO{*z+7>vAK!#`?kL;zyER*rO7~d%ieb@_W26Gn{ zVLatcoSu5~w4-~YiY;mlDTU+g;v*(IR!Gu|GR`04WTKU!eP|*dqV)z?KJ>~Ir9(%J*?A4=3fp*mX zoLii;zu`7y%vJv<#K4UVzXqeGvzcH@qeS}=Tj`Il70&!eFP>jgZpQ=3BE1 zbJb+{1k|NUqgWhr{Jk3ZeBLgJDa}uaJRDG&aFhci}Q(6_Ptjj_Sd@%DTLb(NK9uco!9B z$-zP+DMIj6=yKnPqM0?6uqj$rtm>3@^fIyQ8E6LVM~e6At}8OD;Y0}C;f%*4@|>k3 zywhs9jm#Anb$p=Iwb?JpA{cT=9Nu?*GsVgg)?-SH!H61S!2VTqfMQ9Yy-Zha6g@Am zqRctBaLn-?vPomOiCUhmwp)xC7m|4#;kxz4o_K}3(^D_yQ$e!PzGyfGI;$y?Mbs59 z<=8K4v}_)7J=BHx)&y~kA$T;xI~X{5<$%4VK#Si?3y6|0^TO68e8p_xOT#$mBH%^; z`>dMEBj70f9}n6?N%!|C%_Rh5!Zc=mG$G7@3&K%0I(%^^)BD4(#pb9Bz7c_0mwGjG zG)^CtEe_Jf8~)zROBVtmv&lKgjO{ve@r>h`~o_u^0ZY1;5(0fsqcjz9&)qCeK zfEw*Yr*Rl#|DjTjzHs=jhCpG6Dm|XHn0HcMRGR~HFxS+7{$pJ@!?Cq5&kwE{$;Ae4 z7^jNxG^{t)Qz%rG2adFt*P5uSYknP<$1G7S84cs9f46Z(Z;o5VFD$zv!#~8Ni4j`0!)VN>o?AfB-*{ zxM-QIvj>~If8?|`FW0cAR6+(*-K1{&uYt&k6#^zh-Lm66-_Zi(;_kXOd3uiX(Mco+ znUwtI;(q<~2V2>6@3e-ojX460dlu7t z7kV^)`zMhm6)vzFKf^|VWf-iK7jwU%)3Mhy_DOHq=c1;C3l*w$x8aP;YTl~rqx_w2 zoYW~xhPhPJ)tu@o7GGp=WmDpDtCQdiDjL*Ec-lued$VyaUT2k@w`G1(ZRaO_X5lgw ze$hn?u_0T+a33$OqEg2}*(jZ!%Ww%?yg!0?zQ5M~{dg6%!rcO)n&Xl zMJyB!$;DS(EKnVfLgspD9b!X}IiRu_Aw(`?BDYo+hACnfHbZJqBy`D zr9yd1r>a^~dNjvWqsXef?QU6o#wn~CZp+anUNp{1I*}w~Oa@meCtpjyae!G7D+28U zjjY<4PK)#YU2SsuI9>E&-qYCOC(O0*SEB%>a9*F zadELjcEoV-_99RwMpVU&*5|FFVEL5)j(2y*Gcg+U=Wo%5=dYt`OxeN-b=;qu!EyX9 z1}}`55+SB)*yBbT%iuh{q_=^-<@pk z!z|DA(ST(FmerDisH0tJ5FJ@-4Kc%z9S_${j&53r`Li;UWaOB$v4$~&71HEmQ?AuO z>z#s37`$GKWFk}v_E%HfU5>}|749>4b5;xKF1Kz82?GOGB6hgv+`ivP}I^1eVg)(hQC=i8|+N$Yp!;14n+5D%5LY69w+AkjO z`?XYD$gQ??S>q4VN7WPa@!DnwC z(oqH_<5l2N&|I2*s@H3AzP@0ur3O>s)OyO>w=uugrxJ78$EGn4I9{!>@H<joVl@Ln)ejh1mTKtxjr-dwPFi<{*M^3$) zx*ay@h6F22Va26tisR`0 z9%r$g`Cu*u8&bNHLrWX4_T{wg?%82^RVph}vm&;%`Eq41mNv_0&2abVGpP4jpHVBu z5uQ5vGiN&EY2j=?q6}IMXuwc|J8tFfQ~ei>PKTvNBLcOq_&vsft-pN8_(yOz;W(DP-{hBX7l`=jLym`Ng~#f?JB!{snFP0aZr zjH|4Yz0MFbi={%gsZ-VdHf_l&4=&^=aTxv!cD>xwtxM6H+24Cj*tO8I{x0E%sZ=L% zwAkIUQhkrtWAkwFUM5o4gFYXhr|n2llgBG!md+!K#QFHun* zJG;r>HyH8MEtK%9R}ckGtV)4`f73>3sI<6d-e=jy;PZ=Y>~g^8#W9t59CVXFBcJ>H zXfs}$7j<|Z+-NlQWo)>PVcp%u(%pNcHZ`O0p%a|~!tiy-k zztPj;L6;LJbS2WpCUBw_j}>iq!td>V*osH5qheh*gm$CB>_fkWZ{3e?Esp0gC1{Zo zE4?0SMy?%(=ZTrtUG4Ypg&7Imt@rIT@YW1x8VQL?DoECm+a{Jp0YD8{8nl#XfUh{g zbsLkr<8K^U*mx@waJH7`)ND20h5Zzj$=k-tuHuZK*;*SNH)GpoMaB|)*73%5*%0-e zK}O`$Rg=ei>?ev;1)P09f|;W4Lb*#PM-R<-riCs=AMcRPjlhua4KcAew zFw?Ln+6X&O%Ip)#dTYyPx;>BNix?r+8qdwcleBQ~r^TP2ybLg;B~~o2?iX`uVrH$Z z*XM!Rm^90n@nbJ?TLrpQDB( zM{F2nKKskajQRq@Z~2C1me{CaR@FrHYnfoiV}+F(&1LA`SHr6-_F9LTPfS`f9V!d3 zvVZHYuYX+y+bna`1V=LrqBVK-?^7luFzM?l*XKp=)Kk%>3tTKXUDLc-_3bgqR<#%z zo1#_q%aBQ@#`o!cSZN%u&Nox9^;9~W9j=Qc^scp8LXkx-Q?H^Hera`F8URtttj%L9 z{b6HL*3g)5{mE^)=GD*kXcycccVor)r4$7`T>9tp$S-ukr@$R#n%ICQti;{%PnG_W z*+SOmwg9PdE^?-mKg}ln6g2OLL?Mg9KOP(+1g-VTy3yrGuk*{z*2^6r4DNpV>j3qL+7X&Fj0PHF)KcjRa@r@Ph0j zmvj#=fwB?AOEh7RQiBp_KZH0KClRLAbu;0UalIeLIg=>XZ#Q%&%67e7Agg9QjiMP< zCX?XIAYZI-td@ZvCQY=3Pk-Ru(J24Je@#!Wu_B@r?Y-%lrol${Kjr3i^YWC?mx^8}ZS`4zA4O!10RMs)ea!OUUoZFXO)e-mQR-bu{nQp#K(3 zMiNnkk8z~P{QAR$mQ^SVqY=-mw3|=hhim*p6*-Gn*agE-2<=a>C%hb=G@;#Zg3a*| zdr(DH9Fo(lw1hJ@HLxP1b7;}rU;9c%@TwL#A`FLGId|$5J5OiZ76k9_LN0es7w~=z zI%Z|fY*T=QMw(y6^NEXJYV7Kf&sr-nm2TA-zl3_>*=(~w< zT-)LSo9KS@BDMkI2yu7`d_&V`EHTgiJsF2@8>2FDSnQ^1HMz58r26fl@wm7n z0wu*1q>4`tlhN$wygtp_(Nd((rfYktXv7p;+GTKCLzUYn9^LWiu?W)+*AlDN6C*XEF*W`hQ|MY;ppSTbmV#_RV zUbuVl_{e0vVr;Fq6U-PID#{V@V7z?7A1kx$j1ndcclP|OSt!%{*0V&;HzU>%Jc_k+ zzH(hQXwi+}M|9X+_rXdf+k$MqPz=`~xeB>TD{`t9clhtv(_0W~0e@45+rWQ5zavd2 z{-O>3qasls(DQQM&y&_lE|!UvixrP;zquNOe$H|}K7I8k*l9@eiKON@N=p!}zZonX zad0z_0dpVB3)T{Ip~#d;*2v16>3SP_v$v6F zQ(9|c(X39t5GXRwr#X7rZc%(jBX}FvR{w+>>yq`R))ZnB*DPZ?rn}H6n>2UKZA&L` zbbx207{TYYE>5&3BY6`!W3G_Y&VTukP^QL%2BN3G$ggEwuaNRqpjm1UVbp2n z5~S4UmT^+0pP)S~wn)o2dms>vh1&`c7f_1H6wzv;L@aRpld93CmS62B=W1J+o0=*~ zSQJdrXWy`;A2{v`QLStOlW-YCLzb+;lbj=L5&ej*B46aeH>VpNu4e7EI)WC`+D5VB zPMCdE1mK&4C5yw*Km4KQjdRl`mr3uuRk@+@NrMix+RjJPx0^5eBW_c+npCud`bxNE zB{a3tC>ak0|51^_ykZ%aFIyb18w3>g%c~YbB{$(nMwu4IC=k0(q&2Y>k#P%)*3QWM zheezbpG2jqDp(3nJ7oN7s*I~TT}wej&b|-QuQonx;3lDj_nR@Rh$57UWGy_!tC^-B z3i82ZrRwL6T$u}q4CMe#^F^gQ{zFvhd<(S?Qd3pMjNDZuS!TwekoaS~ojB*vt;V6O ztD>yjE`w!((ntO^G5U8@YgC!l_kW173$Z-uEuNh8L$nD>SBoke@$oZz42-h5O1n{S zvj~1<@B|AFXO@mAugQn)dKq_S&ilhloB>fQ0Yu!!-OEl^RHQ3~xWmH~jU|?rPH9ln zIl9OC-plmQ=3kEaZ9#esu}1^0j9b{#D-AT%{KJVLiQI3;2}YO3YNlu-%IXdJS7v5r z@Wxs($dqs9KT-I0I}Gg&=1bC$4<VKnJM$lc z?8`^+y^PmW&_A@L`h*j@rE#QLBu0&Lo8?aX(OW5G2fOihYBZ4Y+72iI?Hqws>IOld zQi~J(8S!aoa(l){i_9{RI#yn5H`e!+zvJR2416$gI@u=G#zCnxkj!+&hG>?^mM>qJ z)&E5eVRXs@ivDM;H*@KrOqIfpU(De9{s?;4OH-=!(SA4&Jwrs&5ue^+>sT%0X$Up) z?KW*g6hsT7JEPb3j0$Q69J)JeuG#g9%mv%t)%klg-Zczwd!nQ;`A2lkKy ziU={rcusQuU{_%tm)K~E%|Jsajpz5@NlnG_Z%q0vqcp~m;rPooe@29(_&^-n7zMH7 zFZN6d?v7XJ1dF?eLHdYruNB%&XqR8rBGlvIy;FE^>#-+J<^t=RD_8o^yB1r#y0D`T zsjJ&fi0DJw8s$A=coT;%4e7~~O_K}yJQR654d!ysM$|zQXwi{O(oG7F@6Frq&EK?E z&`xJOzowK8qnSNt)H**BaQJ3YQI#>y*nUCOQ~#oE!v0Zo**LZd7H-r>ldgH1B*sYI7fGq_r8A#H*7i$Q zSx@H0dQ~CuQD*%1C!g^B$>>Ve`z&ky`02B=#Y!azjlgYr)93y8wn`|(xE`TtEXLDX zha#WMxES|XlRwD4CBcYR39o`{hEhOL3cd~b>#aN2Y-me?ij!sy5jjOhi3TwyiZJ=$ zd&z078@nQjXJAw`$CTlik#BT3<8%SY_$9CEN~pyn$eHOEY+?m7i~RGBKQ{}Jlf(ki zRnu|Ms@HL|2&fRcUv*lOhmL99O-6SfN}0{!dIwxTK zxn>(iIGRDt;3niCDmG;JSy=_Gl1fk$DWcLHy9a>M_~MzuOuPN8qMc8GGo6uG^stB> zz=&umfB7%$+`_)_P>Q)%q%Fvj*KsLGv7f)8M8~dP5BslsV?-wWJ5TQ2{z+33(4Bj?ru+In_sy_A!vX@NG?CHVP6Xc8exZ0~@ zrX31>aQRBic(`mb=(YX}osRD{$*iPdcNJR--p^|$DqzMGHSMgS{2;>9{6ii+0%}zl<(M6P-W#*ac{kGOv?46=}W8hmTC@9p0 zemE~wP$A_%lSew|nI&nX#U01t;kT3#Y@@&DfvPz`{T=4f6-0*M02BA`$th{5!}V49 zOTaw`VXk?f-{I*5CQ*>fU9ER(+U#l8m%`R5^!$>g+ZJVE*`sH+t_hAa=i-+b>J^Ri z&lvYlAqQ*W+trcsKmPq5F=$f^MFM^Tp_Ay8Qdta^%3TFP= zDT^4%h9tuzk14ZR-^-`MR1t=oK!|b;tf= zZXf>YdaNJWVq?W|>o(6VU-%NUVv(_QG>s@~=a5eGs5Hbm=Y{yhxy=T9wTA1hh6+>9fU6pn;U?503> zRfN-pz{KG84c(_X+`tmXflM6-5LC%Jtl3j=o8AF$T=lcAe2FFT2&lXB_6qU3gN z(S_m*xApZLw*4`c$98H?y8ArLx4(K!;t~=HN=xZNEi5eTtW#1_z=runMcjw>6adFA zF;9gb?QaE z*|FzF@~lga;Lr^86hr(AGS$y+vIINQb&SXs(`4bt!=kQO@$C879$1w%^I{ssDojMu z|G>+z7wUeQ@L$h&rF!CSSF)s|Z*RGDWbnv z7oFh{!QhbhM{#TJ@sp))IH6M|6njeot(2C!znK6Pv-4rzaH1I2Uu2Ron}jzqj%xUq z=Sb~|2}yyL8y(m(o_%6Agnmd8oaaY~9*hX@FX9TP=Dk>(xiLQyd`DEWzL?>)bUb^h zpr_|T8QLI;-F>Uzi0u@&{HtmG5Kdi?2T^VYW&uG5J3G|S<07(K9bw4?{&XD*DAk$| zk0192>nIF92`-eIiMIEXD{}dB{^LQbt>~^o88M}Zxe(ubM;Nr{XHz#nVp2=`;o!9c-q} z#bheoZHe8DypSt`k7^_SZ@)VQN9!% ze>VG5Gc+QSl1jB;^^FK2tcEUmQi)RJjMdnOpd(^Mv3vAXB0m0a-=;lCP%JIga6MZk zdA(UYg132!8~qs1yiU7h_7R8zE?d@h(FW}?%4h?+BhVhcx1%L(+F!73Y_|H<%?5L7 z0njyuS_PfB9{}4Xhj3X>oovk#w#Xpi+vOf&5aA#IPP0dShT$J!MInkJL)au~0P){u z_K%1_XTU1DM>?5LBl`GR=Xqto5BXk+Q(OG_%ntjRWcHemBLkYS6XiUh5d7?s5UTY#d;c$NZKpsJ)gP18V@IgjrVgi}_J!%@z2MIjIzy3Jz{SyomyGdn)bS3~i@&q$!!na~5a zoGV%V0A5o?B`zlBV-sGc(maR!!tH-_@yk9V*p=1xCMG6SSRdgT>MvG(^cMA=^*ItL zo4;0AbmVR9~sJ%X&&MHNW$j z-CYW0P=>n$6%L;GR1KnG@K5YC4S^Bffc~E$S69;vmCY2iwEI(1q^HXb3@6xMhHBvO zMWXv)rRj_`8=IS5|MiEc6v`cLbiGG#uP;{W@=MFXY8q+I$J49O$fwr-+8;+|X@~gN zve(BmGB7;9Tu(sEf}5-s&i*n~5ec}mJ|ui%)_EAF&4PjQeLnB%Qi{YL?SX79ZFM?U z%9HGggJ&Iw2VegF@O(3)NUM;Jj{q~ycU&&Z(t*S1Wp97^|9+63H&ap@c73S2t&SG) z+wg=nCL@UuuavX4b2K>rT1GLc$_|?i9H==$dJ&(mf?|m1cmFoc($}mD`WAuyc)u|F zy69Zt@AG_j`u;E|?0mA=bL~lo(|Yxn0kZGt<;646L}bT9!R%t}{c40oQQ#71Bo?03 zv)Sc5^XwI0|!y?=E%K;&;r{5#bkSVP1ulHf0p%8-;$c2wm z^c!q#K&(F@hJBKGd6E&WFIOXkQ!!(0W8!4!2N2&C;53Nj5NpEUAECR&T204N)%Crc zfOUY_`^>596Qc#Gq|vCUso5-6Z>5-Jk_Utn@m>J|zW1y~KuiQDnoaw-`h z!4l)*18wK+Go}a3AW@z~4ZNS0iDdR~-!}DGykC;Kbes+g zl8~UxRsu{82f4>|6MiP{+7WsEr>B>akg&ze)NTuvz7e533I<4NcQs?0G!?|9C&`fi_KLi`79EhPB zr`0^fE565|+H4{d;;!j&-a$L!ki@KOkaD|h)N@o+`h`WBXpjfZp6K5aV_!AQN2u!7 z38|kWH5wE+NC&O-A)ah0FQ-i#v$h>D=cle2`kgYt+^%ju5f&wHE zmuh28h?NXmisx3~Cx>6Z-mkOX%k{h7);-R>-X8Y>O?}My1jR0QijV`JWeGYaZU_0- z1kJL^8kYn)0t*KaSb+c7X>F2m%KL}wyCU1oai89vGz;Syy8cTJz(f?&=*5zdeWGf* zq%k~%tETqk8^bXs@peLa5;ekvdUFK7u`(Y2w{-jziddG$H_?Ks;95iTne=|MFN4qN zI~CT1(DR93VAx>9b5La(H-@|O)-c%)l>#c z7QqTXlB}D+jB_DV)bqn=v6-QY@5%81u~{InNYY!Vi?YP_@J@nL=8iz6Tg{jII?#^P zCNgSX0of^hJFDXRZ4a%Xwd#^y>5p=)d@tMuqMsxzgApFWEd=U5j`}azqfTgJ* z-q|v7G!3>Jo%&tgpp`~cxL0aw>N>NDNO6jUgaq0QM`dT{J4NAF9w0Po6`q5i)zrq(9KJqi?ml$cs zlSTWRgDGI~1g}Tg5y=Y*3V=SQVq;_D?(SZuR>1{Yo&_+}POC2@mD5TM=($~)0=KDF zmBS+=KoPC1*mg06{tNu1x7Y~MR@#9T(dcj=%a@7MYP4Re((ih_-j5<+hlAUDy<4%R z&GKYxUhx4MF7K~B=~&0xIdwA=lb#3(wiIiJTV(uz;7Yp$^Tl~Pa}YkmS0tHkAX^Hi zjCz$p$JOOozdLs|A~AIhM=^8T_)Gc{IvdbULcC!^MOSoWV{woIDPp8;Z0?Gc@&Je- ziWunI%FZ&0oaB1Uj?lsnh@Ze6lHn0f&lS8^VztoJ>61OmD_spq90ok z5SwM{RY2#HltaQrQvadhF)4ge*{RL%gA4#+irpeqapqPsA&yI^xC)AXUJq_fO};K`*dzkGQS=#R0$sy=NW72 z)fx{23?L&d%>%%l|II15-|#s%vGPaUc$Wf8k`ePeqrmyQxw!%T2eSJTSS~=8KEK*_ zy*h{CF^-(_X98 zG2y$#pO8U0n|{c6%sP-U47v-?_vcv|8G`1M**_zBB@=hgJD<-k2T3P}hk-WZ0eoYC zcUq?AH#a{(%!q;VST0h``bNfTv)cS8>=QZ>kKNg73%bxlwuut_cQTBNCj}1^TgcW8 zDvX2($vli+AR&g0l~w0}wg^z_C}Ms*4m6IK)|+YBs`jhz5=z!9l|cIb{d?tZB!a#P zFuk|jFlN7!cA(RHcWqdqpa_Zp@!|n3*Q+S-7UbN?y6oRCH+BH6-<~_3~d6(AsT% zp0$;fl&bVP9Ch{EoIzdQuVkk!@@ZU~{Q;RV7(UF*%x4Q#q;eQ1D@|2&p@D&c{|zER zJp)V%;!Y+NMY0Cq5Clncb8}1PY~!SUGa1oSy{)Bcj;J#!mJa9V6ubN3n(O~}@M=QX zs2C4z#7YM5?tJWKw2&i!*$gI1$fcu{439Qx$;~wadOARS11y$h6B(D9?Y9Bwo~S(; z7E^3~OkCjxntGRh7JwBl)+>boEiSa^diWOxAhq53dWUABv6)%do>9sclFNrX`=+WF#OMo2%MWCjZ2wJJp zkhAku^CKXr$D(3kv0bb-G|O;O6UdQEy8{96oS?2pFEb59iqCX3`RM3qdV1Pb;0@3y z7Xm)Lh_sB_jpabKfDNyRt^p*50Q00BgP`DR`mb?&qJ4m``zmhD#o~i&vbI_qK^|+R zsC~^_U_!`%h9#3ER6?%seYel4iBw8Bnu%TjlWlcAMOsViK0W1806=knJmVaY33gP1 zL};Bry?)YloC0V+)JI+%B*<8%=IzKdHj}>)<1kE0Fd-PAk&oTb=nt>nA{akZb%AyP zjV|yFL9^a`3aI3@ja@(n1VP`q+ng40H7nT#gQiC5!wiWt!1ftSBW6sR9Xu9PmRNIm zR?GC%J>`84Tv@v#h!;IVYtNaJ_u}AcC>DJ2eFATFRaW`dxPWSNXNqRJ}CV5abXTnlg&U6?DTpT%~J|C zWkspWI{pas=b;bZeZLv|9eDt-G{Jw~o)^jY9p_JNEgP%YW(8wWP9wId`{M8I4$_5_PqsgvJRu zwh+sXT2Y1|kers_Y_$+UkAdCMY>Ab(wx(KZ9e}_PLj)M#`BEmW`h#9%7KpzneNkjG zz$G|7NBpt)(OH|p_& zji%ODRSnFv0E+6HLC4?WVPCZ9OIIRBIyuVUUt1gRWQ<6l%Lwy_)1BW0R6p+!u-<9O%LdjW^kwFv^fcQ!J-j5QWbUBRrgRicxfCWL| z8DS$MO*OU@4te$z zIZ-)&BD8_+;n>(%h~tBeA;E8SR*`({0+23i*I=M1T_o|}$X;fj}#B_5^` z8jN8YvF(i_`4RD3jfh37>E~(g2Ht^qL$Dzhnc9`x!23l{%f4bEN=XhS={XB+LQo3ZR00LFmG}@hZ$6H`AJRrmAXca8MjZL^czOtxW zYQZFZa7_Sz<6O{*OGto)qNSvS{^AWWfPhS}Ihf3WH|WB@H~oeIley2*vJ-2w)~f3; zObszx2M~c2EeIJ22}n!q5SWL5)G|;XPf(AioQP|SvymO$+;}~if$r_L*5&i=vhKDI zXb*@#E*O;%P2oNWs2KKoW0?h<3?~guq~J(#4T>jml{`JYE}Va$5PST{t+>cs`c{Q{ zI4|=7^3v3J6W-6VV6nFm=8gw|nCdlHqLT0I#3^>Zzdf(9kJLHw%OeN&G?X8^3y>%( zDt?k!Z$p}ynQ5}!u)&w4!ul%DA0wUab+@!V@CyCq54mWp98Jv!e358jyo1oGnxBKf zcmB&EFD(cewFXcJbmd8VBKa8uR>9dV6cT|4$oLZAzpt;a`?i4O1^7Ur1>UDmVYvsl zd4617|2-qMOvX|@dI}BoDsyV#3pnfy$+C2C(9$xb{CM?Fr5E&i8a+9&{x2$2bfc-g zJsm?Ccr$&&?5L5PTo5ZL1r`%@ZE@uN~@~M zySwKDsfhpsP?T1u90KhRGCaL=kf^T`*FvSqFR!K)oU> zK#-p{Z2;W%Vu0&xX|!Z&3qcA69LE!;A%NNYCT$~`Nx6(Ds1U^Lklr`VPm*RI+{Y7% zt$=LL#u8)_#(ZoU5yH;-eh#y(&nBn7!lt_r78XY8aZ&@B($)Q8S)<23-8l9O*+R6c1VzkP8n-YYY$20i=!?>! zN^$wDeSg@@mCgZ&#E2S%_`$#}vB=MO3S}AM`+g&%r7iNfKT9pd6a@&+)%7*GVq0}J zD+WTp(bqwHfGYz+q{&^k(^E(v;O6s{x)2Q<9v+U%pmrgEjysfzi2qMnO^wUxXcjV| zE+>fOXuacki}<4{0x6Bfpfi7`Sy*Q+*1x=3)p1LSLVeWdxoS0ItzAaa1QY7nI*E;+ zZN#MHhjP%IZmjs>YN~~SFNub)Pa{>~AQ^#$x)r6eL>9_KdWZ7F9|NyHS3^x0H274? zreB2~{QTO>%gZ6!un??v4VkkxNaDe`dZd}S>&;+&f3^mcZnI$@9D*0b-Q7g8H(&?g;u=si~>i&Bh@h0~7rh>x$4O;Qu3j72dH9awL9^kR#8T^ArHL0nec|?_P z(v~?`ZPb262T)Ty%lxisVP0CBmNBjUFJbO?Ih@z`?ktq&xUFw&IMQIxQeiEkYh>R> zrsdE5IKkZ*YX1NpS0DK6RKdjqSt6&2)A!ql@h__a7O6E3yMLGJ%*;$oZcmojNupSE zn(@!(&br=xr>6nwp{b;lm`QT^Y{8K$7Uaxs>UoS-6W)3CcLa#i#p8n=PqH)>Pb32i zi|}E796;YYEa$#la0*;>LzB7SN_<6u&h246D3h6>g#b?&mCU9i_{%Erf_OIep$h}_ zihF-FB@WQ88(#Mrzs7ktmjTq==k-`0NQ-cB3e*PuSStEZ3ItIgwX_?pA#))4@lg_!l6(NEpTX}!695_X z1gs&Dn@EA8*t80OEC%QlE6O%N4ge8c!+89#9R;~lqN1dfL-!Y;iBI?EqzEwCRjmD# zgHfcy9(O0e3%D|BVd0JQd(r?sS$Qi1p3ix^V8_qyaz#BfUp>Wh33SBc5N;*S#p4d4 z)u>ayx%x`ed~I=ud+buu(eeC)t8Pd1DMGT%>G%$y?SOy|F&PE~)Hu&JicD;2X=!Ea zQK?>syXEIwy=G=4zT9m{p9YExAoHNqJwUw!N^Z>Fnk@wd2CBz^6;HMvP}pEXn`S^! z8Cvf(EaVTr~tD~tYP4F+)n)UcL!Ar2Lff716%aO5I4c=ws(gFHuy0-j3 zx>3g7F02BGsiCu`$diw3gB zBNcV}L<32v=Qt%14Lb>h(Ja%gFqQN)P|)jYXBgnf9ssga#tZ?OmIYu8L{Dqh?E#;$ zCn^FOGQdS*7)Jmqqq|`YF!C(7y%a#FPwroH&U*L!V;s540Jz+YJa@<4vQ=oVj_X#S z0VU-AC~#1HfEh+^1L^Ai@^Cq9%tjK`bu%ps(YG!8nfw4F0;DleqpRolE~m@4t;dzn zX=oNgeq<1SH4dOJz~l(Py!+|D92^|bM6ns+zNdK$7Zem=aBLjAuDkP`vFbg*m)D;1 zWeN&Ii~XFGJN+QWO@ul|?<4%|pt;C3R_=d1EYDiJ#_$5ar{Pybuu2k*+(CVL;0_Th&AO`Y+K|4m?ka5#vEXPgY_ z{mD|DVwO-e1={cq*zkl_qod2kB^}Tu00HDCNHb0Ic0cW?(Y9D zEHo4n--^!$k?Z!|gC9!T(u^wv?>Yo-yLxN;?JX5Cj&VPF*g|cS9x+~e-$8>3#;BbUUbgR#Xy!#p?z4a}PSkQWTYyoh4bcE22Ds2|OGeAZY~{7|O_m z7p~*{v?|R?(a%H{20S`w$r979T<#ZeG`|lL EG53Y^e+nyIONn2th8y;vbPs9{v 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≫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%0DT;^u|3aRF zI$_H7aK7LH#P4Z{^RKk;Z}>nmyO4+-aAwA#MnoU9+FEs6zz2sCEo>OqFWYbR%}Jqm z4OKdf)+~@zDCLN&KZk|4uQ&L-D*Tz=obTt~>qA~f4eXejaDEm&SG*He;+ux%M;{c6 z94Xh_FB?9O+v9ZsDnrZVvM*S3`EQPR@u1xN`(p{scVmFFct8ypK44?~)rDrBKOyHz zL*pMpnCFSRX#`SjU*KVXv%h+YnR+{3Cy5~E{#HZ=nAAQXm1uol0qyTbCiUdNkooqO zCkj2**D4s2od@%Ti%E1`DSz`YBKS8oj(q;ZrZi5IDMid9l>oiKz`C_*? zveM7QK!X`J8x{kZC~F#8=JIdEvw^Vb7-;)_vY)7$zf(}tR>|7w&Z3t##O~ulA8!{= zZzzcT{Lm_Qq=f4PC2`npM^g>}z(YT;^o!T9zHX?-GPIOMp7)$r23 z6P8CFW8$%8l2zS1OG{#UVXnAyXmPHIKxE{S5 zN*zNHkTN{|kCHQwcwk<^v|yNy5)6Z1yh|P{X*{cbVE7SIU>Up zk{=%FVR<;DO})HHLUOP>SZ)@ZNlFwsZpESLma?mBJbYFukF!b?9%r*MA***C1E4wm z_a1@D(|{%R7opV=lTt8#4c7ATl1C!t6V?We-%H9KoVNASB%ZeM16eJ*bk~DhHteP_ zqzH^m(uM4tNR1@8>0rg(uW=5^<}}rPDmA4X+08ccTeQ&URZ@zGT;Ut16dzwA$p$tq z0~NaCr5>fPN$=Q?-d367xCW5CFeSjWcm!SGX$w0K=6-#-EGzd|doD}-_3?!IAa;c5 zZggypzOf6I&~H;LT*vH*p8|tpB`-2`jXt??d)G-~27jlUoQ23!Zgv|5H^99}wAFSd z8(l19-wU3{t6415N~sgmPw$i~UICqc*FGx2 z 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 HJ;46~c@Cd# diff --git a/performance/results/drop-million-report/PR-review.md b/performance/results/drop-million-report/PR-review.md index 1503b67..d794c31 100644 --- a/performance/results/drop-million-report/PR-review.md +++ b/performance/results/drop-million-report/PR-review.md @@ -74,15 +74,10 @@ selectFrom(drop).join(drop.product, product).fetchJoin() - [x] Drop 테스트 43개 통과, 실패 0개, 오류 0개 - [x] MySQL 통합 테스트 2개 포함: 키워드 검색 페이징·빈 페이지·전체 개수와 기본 조회의 기존 조인 쿼리 결과 일치 -- [x] k6 세 단계 원본 결과 저장 +- [x] k6 세 단계 측정 완료 (원본 JSON은 로컬 생성물로 Git 제외) - [ ] 최종 p95 2초 목표 미달 ## 💡 관련 이슈 - 이슈 번호 미확인. 실제 번호를 확인한 뒤 연결합니다. -## GitHub에 이미지 올리기 - -PR 편집기에 `comparison.png`와 `grafana.png`를 드래그하면 GitHub 이미지 주소가 생성됩니다. 본문 이미지 경로를 해당 주소로 바꾸면 됩니다. 로컬 C: 경로는 GitHub에서 표시되지 않습니다. - -![Grafana 측정 화면](grafana.png) diff --git a/performance/results/drop-million-report/drop-index-after-explain.sql b/performance/results/drop-million-report/drop-index-after-explain.sql deleted file mode 100644 index 1c3bfc8..0000000 --- a/performance/results/drop-million-report/drop-index-after-explain.sql +++ /dev/null @@ -1,33 +0,0 @@ -EXPLAIN ANALYZE -SELECT - d.id, - d.product_id, - d.price, - d.initial_quantity, - d.remaining_quantity, - d.discount_rate, - d.purchase_limit, - d.visible, - d.open_at, - d.close_at, - d.created_at, - d.updated_at -FROM drops d -INNER JOIN products p ON p.id = d.product_id -INNER JOIN users u ON u.id = p.seller_id -WHERE d.visible = b'1' - AND d.open_at <= NOW() - AND d.close_at > NOW() - AND d.remaining_quantity > 0 -ORDER BY d.close_at ASC, d.id DESC -LIMIT 20; - -EXPLAIN ANALYZE -SELECT COUNT(d.id) -FROM drops d -INNER JOIN products p ON p.id = d.product_id -INNER JOIN users u ON u.id = p.seller_id -WHERE d.visible = b'1' - AND d.open_at <= NOW() - AND d.close_at > NOW() - AND d.remaining_quantity > 0; diff --git a/performance/results/drop-million-report/drop-index-before-explain.sql b/performance/results/drop-million-report/drop-index-before-explain.sql deleted file mode 100644 index 1c3bfc8..0000000 --- a/performance/results/drop-million-report/drop-index-before-explain.sql +++ /dev/null @@ -1,33 +0,0 @@ -EXPLAIN ANALYZE -SELECT - d.id, - d.product_id, - d.price, - d.initial_quantity, - d.remaining_quantity, - d.discount_rate, - d.purchase_limit, - d.visible, - d.open_at, - d.close_at, - d.created_at, - d.updated_at -FROM drops d -INNER JOIN products p ON p.id = d.product_id -INNER JOIN users u ON u.id = p.seller_id -WHERE d.visible = b'1' - AND d.open_at <= NOW() - AND d.close_at > NOW() - AND d.remaining_quantity > 0 -ORDER BY d.close_at ASC, d.id DESC -LIMIT 20; - -EXPLAIN ANALYZE -SELECT COUNT(d.id) -FROM drops d -INNER JOIN products p ON p.id = d.product_id -INNER JOIN users u ON u.id = p.seller_id -WHERE d.visible = b'1' - AND d.open_at <= NOW() - AND d.close_at > NOW() - AND d.remaining_quantity > 0; diff --git a/performance/results/drop-million-report/drop-index-optimized-explain.sql b/performance/results/drop-million-report/drop-index-optimized-explain.sql deleted file mode 100644 index 10f5ce4..0000000 --- a/performance/results/drop-million-report/drop-index-optimized-explain.sql +++ /dev/null @@ -1,14 +0,0 @@ --- ID 선조회: 조인 없이 정렬된 인덱스에서 페이지를 찾는다. -EXPLAIN ANALYZE -SELECT d.id FROM drops d -WHERE d.visible = b'1' AND d.open_at <= NOW() - AND d.close_at > NOW() AND d.remaining_quantity > 0 -ORDER BY d.close_at ASC, d.id DESC LIMIT 20; - --- count: 키워드가 없는 경우 필수 FK 조인을 생략한다. -EXPLAIN ANALYZE -SELECT COUNT(d.id) FROM drops d -WHERE d.visible = b'1' AND d.open_at <= NOW() - AND d.close_at > NOW() AND d.remaining_quantity > 0; - --- 상세 fetch join은 위에서 선택된 ID 20개에만 수행된다. diff --git a/performance/results/drop-million-report/drop-index-seed.sql b/performance/results/drop-million-report/drop-index-seed.sql deleted file mode 100644 index 0990eb4..0000000 --- a/performance/results/drop-million-report/drop-index-seed.sql +++ /dev/null @@ -1,173 +0,0 @@ -SET SESSION cte_max_recursion_depth = 1000001; - -SET @performance_marker = 'DROP_INDEX_PERFORMANCE_PRODUCT'; -SET @product_count = 100000; -SET @drop_count = 1000000; - -SET @index_exists = ( - SELECT COUNT(*) - FROM information_schema.statistics - WHERE table_schema = DATABASE() - AND table_name = 'drops' - AND index_name = 'idx_drops_public_closing' -); - -SET @drop_index_sql = IF( - @index_exists > 0, - 'DROP INDEX idx_drops_public_closing ON drops', - 'SELECT 1' -); - -PREPARE drop_index_statement FROM @drop_index_sql; -EXECUTE drop_index_statement; -DEALLOCATE PREPARE drop_index_statement; - -INSERT INTO users ( - email, - password, - username, - role, - deleted_at, - created_at, - updated_at -) -SELECT - 'drop-index-seller@dropit.test', - 'local-performance-password', - 'drop-index-seller', - 'SELLER', - NULL, - NOW(), - NOW() -WHERE NOT EXISTS ( - SELECT 1 - FROM users - WHERE email = 'drop-index-seller@dropit.test' -); - -SET @seller_id = ( - SELECT id - FROM users - WHERE email = 'drop-index-seller@dropit.test' - LIMIT 1 -); - -DELETE FROM drops -WHERE product_id IN ( - SELECT id - FROM products - WHERE description = @performance_marker -); - -DELETE FROM products -WHERE description = @performance_marker; - -INSERT INTO products ( - seller_id, - name, - description, - image_url, - created_at, - updated_at -) -WITH RECURSIVE product_numbers AS ( - SELECT 1 AS number - - UNION ALL - - SELECT number + 1 - FROM product_numbers - WHERE number < @product_count -) -SELECT - @seller_id, - CONCAT('Drop Index Performance Product ', number), - @performance_marker, - NULL, - DATE_SUB(NOW(), INTERVAL MOD(number, 365) DAY), - NOW() -FROM product_numbers; - -INSERT INTO drops ( - product_id, - price, - initial_quantity, - remaining_quantity, - discount_rate, - purchase_limit, - visible, - open_at, - close_at, - created_at, - updated_at -) -WITH RECURSIVE numbers AS ( - SELECT 1 AS number - - UNION ALL - - SELECT number + 1 - FROM numbers - WHERE number < @drop_count -), -performance_products AS ( - SELECT - id, - ROW_NUMBER() OVER (ORDER BY id) AS product_number - FROM products - WHERE description = @performance_marker -) -SELECT - performance_products.id, - 30000 + MOD(numbers.number, 70000), - 100, - CASE MOD(numbers.number, 10) - WHEN 7 THEN 0 - ELSE 100 - END, - MOD(numbers.number, 51), - 2, - CASE MOD(numbers.number, 10) - WHEN 9 THEN b'0' - ELSE b'1' - END, - CASE - WHEN MOD(numbers.number, 10) BETWEEN 0 AND 4 - THEN DATE_SUB(NOW(), INTERVAL 7 DAY) - WHEN MOD(numbers.number, 10) BETWEEN 5 AND 6 - THEN DATE_ADD(NOW(), INTERVAL 7 DAY) - WHEN MOD(numbers.number, 10) = 7 - THEN DATE_SUB(NOW(), INTERVAL 7 DAY) - WHEN MOD(numbers.number, 10) = 8 - THEN DATE_SUB(NOW(), INTERVAL 14 DAY) - ELSE DATE_SUB(NOW(), INTERVAL 7 DAY) - END, - CASE - WHEN MOD(numbers.number, 10) BETWEEN 0 AND 4 - THEN DATE_ADD(NOW(), INTERVAL (7 + MOD(numbers.number, 30)) DAY) - WHEN MOD(numbers.number, 10) BETWEEN 5 AND 6 - THEN DATE_ADD(NOW(), INTERVAL (37 + MOD(numbers.number, 30)) DAY) - WHEN MOD(numbers.number, 10) = 7 - THEN DATE_ADD(NOW(), INTERVAL (7 + MOD(numbers.number, 30)) DAY) - WHEN MOD(numbers.number, 10) = 8 - THEN DATE_SUB(NOW(), INTERVAL 7 DAY) - ELSE DATE_ADD(NOW(), INTERVAL (7 + MOD(numbers.number, 30)) DAY) - END, - DATE_SUB(NOW(), INTERVAL MOD(numbers.number, 365) DAY), - NOW() -FROM numbers -INNER JOIN performance_products - ON performance_products.product_number = MOD(numbers.number - 1, @product_count) + 1; - -SELECT - COUNT(DISTINCT products.id) AS performance_product_count, - COUNT(drops.id) AS total_drop_count, - SUM( - drops.visible = b'1' - AND drops.open_at <= NOW() - AND drops.close_at > NOW() - AND drops.remaining_quantity > 0 - ) AS open_public_drop_count -FROM products -INNER JOIN drops ON drops.product_id = products.id -WHERE products.description = @performance_marker; diff --git a/performance/results/drop-million-report/drop-list-index.js b/performance/results/drop-million-report/drop-list-index.js deleted file mode 100644 index ef8a1fb..0000000 --- a/performance/results/drop-million-report/drop-list-index.js +++ /dev/null @@ -1,62 +0,0 @@ -import http from 'k6/http'; -import { check } from 'k6'; - -const baseUrl = __ENV.BASE_URL || 'http://host.docker.internal:8080'; -const testRun = __ENV.TEST_RUN || 'drop-list-before-index'; -const authToken = __ENV.AUTH_TOKEN; - -if (!authToken) { - throw new Error('AUTH_TOKEN is required.'); -} - -export const options = { - scenarios: { - openDropsClosingSoon: { - executor: 'ramping-arrival-rate', - startRate: 10, - timeUnit: '1s', - preAllocatedVUs: 50, - maxVUs: 500, - stages: [ - { duration: '15s', target: 20 }, - { duration: '15s', target: 50 }, - { duration: '15s', target: 100 }, - { duration: '15s', target: 200 }, - { duration: '15s', target: 0 }, - ], - }, - }, - thresholds: { - http_req_failed: ['rate<0.01'], - http_req_duration: ['p(95)<2000'], - }, -}; - -export default function () { - const response = http.get( - `${baseUrl}/drops?status=OPEN&sortType=CLOSING_SOON&page=0&size=20`, - { - headers: { - Authorization: `Bearer ${authToken}`, - }, - tags: { - endpoint: 'drop-list-open-closing-soon', - test_run: testRun, - }, - } - ); - - check(response, { - 'Drop 목록 조회 응답이 200이다': (result) => result.status === 200, - '한 페이지는 최대 20개다': (result) => { - const content = result.json('content'); - return Array.isArray(content) && content.length <= 20; - }, - }); -} - -export function handleSummary(data) { - return { - [`/results/${testRun}.json`]: JSON.stringify(data, null, 2), - }; -} diff --git a/performance/results/drop-million-report/drop-million-after-explain.txt b/performance/results/drop-million-report/drop-million-after-explain.txt deleted file mode 100644 index 86ae37c..0000000 --- a/performance/results/drop-million-report/drop-million-after-explain.txt +++ /dev/null @@ -1,4 +0,0 @@ -EXPLAIN --> Limit: 20 row(s) (actual time=3293..3293 rows=20 loops=1)\n -> Sort: d.close_at, d.id DESC, limit input to 20 row(s) per chunk (actual time=3293..3293 rows=20 loops=1)\n -> Stream results (cost=100238 rows=10880) (actual time=5.84..3196 rows=500000 loops=1)\n -> Nested loop inner join (cost=100238 rows=10880) (actual time=5.7..2986 rows=500000 loops=1)\n -> Nested loop inner join (cost=2041 rows=20080) (actual time=2.97..51.1 rows=100000 loops=1)\n -> Covering index scan on u using UK6dotkott2kjsp8vw4d0m25fb7 (cost=0.45 rows=2) (actual time=1.43..2.45 rows=2 loops=1)\n -> Covering index lookup on p using FKbgw3lyxhsml3kfqnfr45o0vbj (seller_id=u.id) (cost=518 rows=10040) (actual time=0.71..21.6 rows=50000 loops=2)\n -> Filter: ((d.`visible` = 0x01) and (d.open_at <= (now())) and (d.close_at > (now())) and (d.remaining_quantity > 0)) (cost=3.91 rows=0.542) (actual time=0.0275..0.0289 rows=5 loops=100000)\n -> Index lookup on d using FK5fijulf0obt0d6wdvo34c3wcm (product_id=p.id) (cost=3.91 rows=9.75) (actual time=0.026..0.0274 rows=10 loops=100000)\n -EXPLAIN --> Aggregate: count(d.id) (cost=72990 rows=1) (actual time=2362..2362 rows=1 loops=1)\n -> Nested loop inner join (cost=71902 rows=10880) (actual time=1.04..2345 rows=500000 loops=1)\n -> Nested loop inner join (cost=2022 rows=20080) (actual time=0.468..41.5 rows=100000 loops=1)\n -> Covering index scan on u using UK6dotkott2kjsp8vw4d0m25fb7 (cost=0.45 rows=2) (actual time=0.016..0.727 rows=2 loops=1)\n -> Covering index lookup on p using FKbgw3lyxhsml3kfqnfr45o0vbj (seller_id=u.id) (cost=509 rows=10040) (actual time=0.224..17.7 rows=50000 loops=2)\n -> Filter: ((d.`visible` = 0x01) and (d.open_at <= (now())) and (d.close_at > (now())) and (d.remaining_quantity > 0)) (cost=2.5 rows=0.542) (actual time=0.0215..0.0226 rows=5 loops=100000)\n -> Index lookup on d using FK5fijulf0obt0d6wdvo34c3wcm (product_id=p.id) (cost=2.5 rows=9.75) (actual time=0.0202..0.0213 rows=10 loops=100000)\n diff --git a/performance/results/drop-million-report/drop-million-after.json b/performance/results/drop-million-report/drop-million-after.json deleted file mode 100644 index 31d55f7..0000000 --- a/performance/results/drop-million-report/drop-million-after.json +++ /dev/null @@ -1,237 +0,0 @@ -{ - "metrics": { - "data_received": { - "contains": "data", - "values": { - "count": 906460, - "rate": 8630.763827863526 - }, - "type": "counter" - }, - "data_sent": { - "contains": "data", - "values": { - "count": 316800, - "rate": 3016.3779765981567 - }, - "type": "counter" - }, - "dropped_iterations": { - "type": "counter", - "contains": "default", - "values": { - "rate": 45.69317521999544, - "count": 4799 - } - }, - "http_reqs": { - "values": { - "count": 635, - "rate": 6.046085906375724 - }, - "type": "counter", - "contains": "default" - }, - "vus": { - "type": "gauge", - "contains": "default", - "values": { - "value": 190, - "min": 10, - "max": 500 - } - }, - "http_req_duration{expected_response:true}": { - "type": "trend", - "contains": "time", - "values": { - "p(90)": 56584.2064628, - "p(95)": 58742.9753413, - "avg": 34323.692841070006, - "min": 7523.302737, - "med": 37750.737227, - "max": 58975.870409 - } - }, - "iteration_duration": { - "type": "trend", - "contains": "time", - "values": { - "min": 7526.616638, - "med": 48175.235512, - "max": 60011.027681, - "p(90)": 60001.9951246, - "p(95)": 60002.656534300004, - "avg": 44809.79793585037 - } - }, - "http_req_blocked": { - "type": "trend", - "contains": "time", - "values": { - "p(90)": 15.246710600000009, - "p(95)": 19.65092449999999, - "avg": 6.616195376377948, - "min": 0.004258, - "med": 3.605694, - "max": 150.219806 - } - }, - "http_req_connecting": { - "type": "trend", - "contains": "time", - "values": { - "avg": 6.476096869291338, - "min": 0, - "med": 3.404706, - "max": 150.111358, - "p(90)": 15.080012000000007, - "p(95)": 19.4628798 - } - }, - "checks": { - "type": "rate", - "contains": "default", - "values": { - "rate": 0.15748031496062992, - "passes": 200, - "fails": 1070 - } - }, - "http_req_duration": { - "type": "trend", - "contains": "time", - "values": { - "p(90)": 59997.781072, - "p(95)": 59998.189304, - "avg": 44797.13444110866, - "min": 7523.302737, - "med": 48151.948311, - "max": 60004.853025 - }, - "thresholds": { - "p(95)<2000": { - "ok": false - } - } - }, - "http_req_sending": { - "contains": "time", - "values": { - "avg": 0.1898148204724407, - "min": 0.018646, - "med": 0.127944, - "max": 10.310941, - "p(90)": 0.22461160000000002, - "p(95)": 0.28948139999999994 - }, - "type": "trend" - }, - "http_req_waiting": { - "type": "trend", - "contains": "time", - "values": { - "avg": 44796.22878477797, - "min": 7517.075616, - "med": 48151.572723, - "max": 60004.594369, - "p(90)": 59997.7447038, - "p(95)": 59998.155909199995 - } - }, - "http_req_receiving": { - "type": "trend", - "contains": "time", - "values": { - "max": 17.176256, - "p(90)": 1.3188148000000004, - "p(95)": 5.268856099999993, - "avg": 0.71584151023622, - "min": 0, - "med": 0.123255 - } - }, - "iterations": { - "type": "counter", - "contains": "default", - "values": { - "count": 635, - "rate": 6.046085906375724 - } - }, - "http_req_failed": { - "type": "rate", - "contains": "default", - "values": { - "fails": 100, - "rate": 0.84251968503937, - "passes": 535 - }, - "thresholds": { - "rate<0.01": { - "ok": false - } - } - }, - "vus_max": { - "type": "gauge", - "contains": "default", - "values": { - "min": 50, - "max": 500, - "value": 500 - } - }, - "http_req_tls_handshaking": { - "type": "trend", - "contains": "time", - "values": { - "avg": 0, - "min": 0, - "med": 0, - "max": 0, - "p(90)": 0, - "p(95)": 0 - } - } - }, - "root_group": { - "name": "", - "path": "", - "id": "d41d8cd98f00b204e9800998ecf8427e", - "groups": [], - "checks": [ - { - "name": "Drop 목록 조회 응답이 200이다", - "path": "::Drop 목록 조회 응답이 200이다", - "id": "634919e561b13374f34820e16887ae65", - "passes": 100, - "fails": 535 - }, - { - "passes": 100, - "fails": 535, - "name": "한 페이지는 최대 20개다", - "path": "::한 페이지는 최대 20개다", - "id": "c650329e4a118e15d6952cc13d36f54a" - } - ] - }, - "options": { - "summaryTrendStats": [ - "avg", - "min", - "med", - "max", - "p(90)", - "p(95)" - ], - "summaryTimeUnit": "", - "noColor": false - }, - "state": { - "isStdOutTTY": false, - "isStdErrTTY": false, - "testRunDurationMs": 105026.625462 - } -} \ No newline at end of file diff --git a/performance/results/drop-million-report/drop-million-before-explain.txt b/performance/results/drop-million-report/drop-million-before-explain.txt deleted file mode 100644 index 0d2d248..0000000 --- a/performance/results/drop-million-report/drop-million-before-explain.txt +++ /dev/null @@ -1,4 +0,0 @@ -EXPLAIN --> Limit: 20 row(s) (actual time=2683..2683 rows=20 loops=1)\n -> Sort: d.close_at, d.id DESC, limit input to 20 row(s) per chunk (actual time=2683..2683 rows=20 loops=1)\n -> Stream results (cost=89497 rows=3695) (actual time=6.45..2590 rows=500000 loops=1)\n -> Nested loop inner join (cost=89497 rows=3695) (actual time=6.32..2389 rows=500000 loops=1)\n -> Nested loop inner join (cost=2050 rows=20080) (actual time=4.08..63.5 rows=100000 loops=1)\n -> Covering index scan on u using UK6dotkott2kjsp8vw4d0m25fb7 (cost=1.2 rows=2) (actual time=1.36..2.1 rows=2 loops=1)\n -> Covering index lookup on p using FKbgw3lyxhsml3kfqnfr45o0vbj (seller_id=u.id) (cost=522 rows=10040) (actual time=1.33..28.1 rows=50000 loops=2)\n -> Filter: ((d.`visible` = 0x01) and (d.open_at <= (now())) and (d.close_at > (now())) and (d.remaining_quantity > 0)) (cost=3.36 rows=0.184) (actual time=0.0215..0.0228 rows=5 loops=100000)\n -> Index lookup on d using FK5fijulf0obt0d6wdvo34c3wcm (product_id=p.id) (cost=3.36 rows=9.94) (actual time=0.0202..0.0215 rows=10 loops=100000)\n -EXPLAIN --> Aggregate: count(d.id) (cost=72259 rows=1) (actual time=1916..1916 rows=1 loops=1)\n -> Nested loop inner join (cost=71889 rows=3695) (actual time=1.4..1900 rows=500000 loops=1)\n -> Nested loop inner join (cost=2026 rows=20080) (actual time=1.04..49 rows=100000 loops=1)\n -> Covering index scan on u using UK6dotkott2kjsp8vw4d0m25fb7 (cost=1.2 rows=2) (actual time=0.0114..0.724 rows=2 loops=1)\n -> Covering index lookup on p using FKbgw3lyxhsml3kfqnfr45o0vbj (seller_id=u.id) (cost=510 rows=10040) (actual time=0.512..21.6 rows=50000 loops=2)\n -> Filter: ((d.`visible` = 0x01) and (d.open_at <= (now())) and (d.close_at > (now())) and (d.remaining_quantity > 0)) (cost=2.49 rows=0.184) (actual time=0.0171..0.0181 rows=5 loops=100000)\n -> Index lookup on d using FK5fijulf0obt0d6wdvo34c3wcm (product_id=p.id) (cost=2.49 rows=9.94) (actual time=0.016..0.0169 rows=10 loops=100000)\n diff --git a/performance/results/drop-million-report/drop-million-before.json b/performance/results/drop-million-report/drop-million-before.json deleted file mode 100644 index 949dbef..0000000 --- a/performance/results/drop-million-report/drop-million-before.json +++ /dev/null @@ -1,237 +0,0 @@ -{ - "root_group": { - "groups": [], - "checks": [ - { - "name": "Drop 목록 조회 응답이 200이다", - "path": "::Drop 목록 조회 응답이 200이다", - "id": "634919e561b13374f34820e16887ae65", - "passes": 111, - "fails": 522 - }, - { - "name": "한 페이지는 최대 20개다", - "path": "::한 페이지는 최대 20개다", - "id": "c650329e4a118e15d6952cc13d36f54a", - "passes": 111, - "fails": 522 - } - ], - "name": "", - "path": "", - "id": "d41d8cd98f00b204e9800998ecf8427e" - }, - "options": { - "summaryTrendStats": [ - "avg", - "min", - "med", - "max", - "p(90)", - "p(95)" - ], - "summaryTimeUnit": "", - "noColor": false - }, - "state": { - "isStdOutTTY": false, - "isStdErrTTY": false, - "testRunDurationMs": 105029.143853 - }, - "metrics": { - "http_req_duration{expected_response:true}": { - "type": "trend", - "contains": "time", - "values": { - "min": 7228.713523, - "med": 37166.116704, - "max": 56567.531669, - "p(90)": 52991.271195, - "p(95)": 56380.2768525, - "avg": 34309.194948594595 - } - }, - "http_req_receiving": { - "type": "trend", - "contains": "time", - "values": { - "avg": 0.2792413917851501, - "min": 0, - "med": 0.117637, - "max": 16.908198, - "p(90)": 0.4495614000000024, - "p(95)": 1.279052199999999 - } - }, - "http_req_blocked": { - "contains": "time", - "values": { - "avg": 5.823815753554504, - "min": 0.004789, - "med": 3.642297, - "max": 80.002048, - "p(90)": 13.158617600000001, - "p(95)": 18.057035999999993 - }, - "type": "trend" - }, - "http_req_duration": { - "contains": "time", - "values": { - "avg": 45193.56148846289, - "min": 7228.713523, - "med": 48285.694827, - "max": 60011.133816, - "p(90)": 59997.709035, - "p(95)": 59998.3564662 - }, - "thresholds": { - "p(95)<2000": { - "ok": false - } - }, - "type": "trend" - }, - "http_req_connecting": { - "type": "trend", - "contains": "time", - "values": { - "avg": 5.67712754344392, - "min": 0, - "med": 3.507404, - "max": 79.880132, - "p(90)": 13.001469800000006, - "p(95)": 17.880307999999992 - } - }, - "iterations": { - "values": { - "count": 633, - "rate": 6.026898599553988 - }, - "type": "counter", - "contains": "default" - }, - "dropped_iterations": { - "values": { - "count": 4807, - "rate": 45.768248922679334 - }, - "type": "counter", - "contains": "default" - }, - "http_req_failed": { - "type": "rate", - "contains": "default", - "values": { - "rate": 0.8246445497630331, - "passes": 522, - "fails": 111 - }, - "thresholds": { - "rate<0.01": { - "ok": false - } - } - }, - "vus_max": { - "values": { - "value": 500, - "min": 50, - "max": 500 - }, - "type": "gauge", - "contains": "default" - }, - "http_req_waiting": { - "type": "trend", - "contains": "time", - "values": { - "max": 60011.019155, - "p(90)": 59997.6201646, - "p(95)": 59998.3136828, - "avg": 45193.10419417537, - "min": 7228.38779, - "med": 48285.444165 - } - }, - "iteration_duration": { - "contains": "time", - "values": { - "max": 60017.214523, - "p(90)": 60002.066131800006, - "p(95)": 60003.3647396, - "avg": 45202.92266992099, - "min": 7231.561481, - "med": 48301.07319 - }, - "type": "trend" - }, - "vus": { - "type": "gauge", - "contains": "default", - "values": { - "value": 184, - "min": 10, - "max": 500 - } - }, - "http_reqs": { - "type": "counter", - "contains": "default", - "values": { - "count": 633, - "rate": 6.026898599553988 - } - }, - "data_sent": { - "type": "counter", - "contains": "data", - "values": { - "count": 313728, - "rate": 2987.0566253410325 - } - }, - "data_received": { - "type": "counter", - "contains": "data", - "values": { - "count": 981678, - "rate": 9346.720005391722 - } - }, - "http_req_sending": { - "type": "trend", - "contains": "time", - "values": { - "avg": 0.1780528957345971, - "min": 0.017734, - "med": 0.11968, - "max": 4.613684, - "p(90)": 0.2269494000000001, - "p(95)": 0.30788039999999994 - } - }, - "checks": { - "contains": "default", - "values": { - "rate": 0.17535545023696683, - "passes": 222, - "fails": 1044 - }, - "type": "rate" - }, - "http_req_tls_handshaking": { - "type": "trend", - "contains": "time", - "values": { - "p(90)": 0, - "p(95)": 0, - "avg": 0, - "min": 0, - "med": 0, - "max": 0 - } - } - } -} \ No newline at end of file diff --git a/performance/results/drop-million-report/drop-million-optimized-explain.txt b/performance/results/drop-million-report/drop-million-optimized-explain.txt deleted file mode 100644 index d2c6221..0000000 --- a/performance/results/drop-million-report/drop-million-optimized-explain.txt +++ /dev/null @@ -1,4 +0,0 @@ -EXPLAIN --> Limit: 20 row(s) (cost=91094 rows=20) (actual time=3.19..3.26 rows=20 loops=1)\n -> Filter: ((d.`visible` = 0x01) and (d.open_at <= (now())) and (d.close_at > (now())) and (d.remaining_quantity > 0)) (cost=91094 rows=55224) (actual time=3.15..3.22 rows=20 loops=1)\n -> Covering index range scan on d using idx_drops_public_closing over (visible = 1 AND '2026-09-10 06:54:22.000000' < close_at) (cost=91094 rows=497113) (actual time=2.68..2.74 rows=20 loops=1)\n -EXPLAIN --> Aggregate: count(d.id) (cost=96616 rows=1) (actual time=714..714 rows=1 loops=1)\n -> Filter: ((d.`visible` = 0x01) and (d.open_at <= (now())) and (d.close_at > (now())) and (d.remaining_quantity > 0)) (cost=91094 rows=55224) (actual time=0.243..700 rows=500000 loops=1)\n -> Covering index range scan on d using idx_drops_public_closing over (visible = 1 AND '2026-09-10 06:54:22.000000' < close_at) (cost=91094 rows=497113) (actual time=0.214..621 rows=800000 loops=1)\n diff --git a/performance/results/drop-million-report/drop-million-optimized.json b/performance/results/drop-million-report/drop-million-optimized.json deleted file mode 100644 index cbbafd3..0000000 --- a/performance/results/drop-million-report/drop-million-optimized.json +++ /dev/null @@ -1,237 +0,0 @@ -{ - "root_group": { - "checks": [ - { - "fails": 0, - "name": "Drop 목록 조회 응답이 200이다", - "path": "::Drop 목록 조회 응답이 200이다", - "id": "634919e561b13374f34820e16887ae65", - "passes": 1897 - }, - { - "name": "한 페이지는 최대 20개다", - "path": "::한 페이지는 최대 20개다", - "id": "c650329e4a118e15d6952cc13d36f54a", - "passes": 1897, - "fails": 0 - } - ], - "name": "", - "path": "", - "id": "d41d8cd98f00b204e9800998ecf8427e", - "groups": [] - }, - "options": { - "summaryTrendStats": [ - "avg", - "min", - "med", - "max", - "p(90)", - "p(95)" - ], - "summaryTimeUnit": "", - "noColor": false - }, - "state": { - "isStdOutTTY": false, - "isStdErrTTY": false, - "testRunDurationMs": 95832.95986 - }, - "metrics": { - "http_req_tls_handshaking": { - "values": { - "avg": 0, - "min": 0, - "med": 0, - "max": 0, - "p(90)": 0, - "p(95)": 0 - }, - "type": "trend", - "contains": "time" - }, - "dropped_iterations": { - "type": "counter", - "contains": "default", - "values": { - "count": 3727, - "rate": 38.89058634362 - } - }, - "http_req_sending": { - "values": { - "avg": 0.11926170005271483, - "min": 0.008615, - "med": 0.048182, - "max": 19.448594, - "p(90)": 0.1678362, - "p(95)": 0.23836719999999967 - }, - "type": "trend", - "contains": "time" - }, - "http_req_waiting": { - "type": "trend", - "contains": "time", - "values": { - "min": 224.629885, - "med": 14778.714011, - "max": 32045.251855, - "p(90)": 23330.129581, - "p(95)": 23460.586428, - "avg": 13890.367516205584 - } - }, - "checks": { - "values": { - "rate": 1, - "passes": 3794, - "fails": 0 - }, - "type": "rate", - "contains": "default" - }, - "vus": { - "type": "gauge", - "contains": "default", - "values": { - "value": 22, - "min": 4, - "max": 500 - } - }, - "http_reqs": { - "type": "counter", - "contains": "default", - "values": { - "count": 1897, - "rate": 19.794859751501782 - } - }, - "http_req_blocked": { - "type": "trend", - "contains": "time", - "values": { - "avg": 3.3112790801265137, - "min": 0.004629, - "med": 0.009428, - "max": 315.597063, - "p(90)": 9.380277200000004, - "p(95)": 17.84343059999993 - } - }, - "http_req_receiving": { - "values": { - "med": 0.818686, - "max": 152.158865, - "p(90)": 5.521724600000002, - "p(95)": 9.082953199999986, - "avg": 2.504092324196103, - "min": 0.051593 - }, - "type": "trend", - "contains": "time" - }, - "http_req_failed": { - "type": "rate", - "contains": "default", - "values": { - "rate": 0, - "passes": 0, - "fails": 1897 - }, - "thresholds": { - "rate<0.01": { - "ok": true - } - } - }, - "vus_max": { - "type": "gauge", - "contains": "default", - "values": { - "value": 500, - "min": 50, - "max": 500 - } - }, - "iteration_duration": { - "type": "trend", - "contains": "time", - "values": { - "min": 225.470518, - "med": 14783.078036, - "max": 32048.978165, - "p(90)": 23336.218418200002, - "p(95)": 23464.499679999997, - "avg": 13897.89624026411 - } - }, - "http_req_duration": { - "type": "trend", - "contains": "time", - "values": { - "avg": 13892.990870229834, - "min": 224.965742, - "med": 14779.517483, - "max": 32045.499983, - "p(90)": 23332.6694232, - "p(95)": 23460.9237606 - }, - "thresholds": { - "p(95)<2000": { - "ok": false - } - } - }, - "iterations": { - "contains": "default", - "values": { - "count": 1897, - "rate": 19.794859751501782 - }, - "type": "counter" - }, - "http_req_duration{expected_response:true}": { - "type": "trend", - "contains": "time", - "values": { - "avg": 13892.990870229834, - "min": 224.965742, - "med": 14779.517483, - "max": 32045.499983, - "p(90)": 23332.6694232, - "p(95)": 23460.9237606 - } - }, - "data_received": { - "contains": "data", - "values": { - "count": 14678986, - "rate": 153172.6247571208 - }, - "type": "counter" - }, - "data_sent": { - "type": "counter", - "contains": "data", - "values": { - "count": 728448, - "rate": 7601.226144576684 - } - }, - "http_req_connecting": { - "type": "trend", - "contains": "time", - "values": { - "avg": 3.227838934633633, - "min": 0, - "med": 0, - "max": 315.522017, - "p(90)": 9.217130400000002, - "p(95)": 17.270925399999985 - } - } - } -} \ No newline at end of file diff --git a/performance/results/drop-million-report/grafana.png b/performance/results/drop-million-report/grafana.png deleted file mode 100644 index 00cb8897b911150328a69ddf0ae78f0cf9beebfc..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 276724 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

}Fh&QOSLz-?oQOB8;~2kMlI4g1 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 diff --git a/performance/results/drop-million-report/report.html b/performance/results/drop-million-report/report.html deleted file mode 100644 index 6e48801..0000000 --- a/performance/results/drop-million-report/report.html +++ /dev/null @@ -1 +0,0 @@ -Drop 성능 비교

Drop 100만 건 조회 성능 개선

상품 10만 건 · 공개 판매 중 Drop 50만 건 · 단계별 1회 측정

Before / After

지표Before인덱스쿼리 개선
완료 HTTP 요청633건635건1,897건
평균 응답 시간45,193.56 ms44,797.13 ms13,892.99 ms
p95 응답 시간59,998.36 ms59,998.19 ms23,460.92 ms
HTTP 실패율82.46 %84.25 %0.00 %
시작하지 못한 요청4,807건4,799건3,727건

무엇을 바꿨나?

인덱스만 추가했을 때는 기존 조인 순서와 대량 정렬이 남았습니다. 필요한 ID 20개를 먼저 고르고 상세 정보를 조인하도록 바꾸고, 검색어가 없는 전체 개수 조회에서 상품·판매자 조인을 제거했습니다.

검증과 한계

Drop 테스트 43개 통과. 기존 Page 계약을 유지합니다. 최종 HTTP 실패율은 0%지만 p95는 23.46초로 목표 2초에 미달했습니다. 정확한 전체 개수 계산 비용이 남습니다. 단일 로컬 측정이며 시간 초과를 포함하므로 운영 수용량으로 해석할 수 없습니다.

요청 조건: /drops?status=OPEN&sortType=CLOSING_SOON&page=0&size=20
75초 동안 10→200→0 RPS, 최대 500 VU. HTTP 요청 수에는 실패가 포함되며, 미시작 요청은 dropped_iterations입니다.

\ No newline at end of file diff --git a/performance/results/raw/drop-million-after-explain.txt b/performance/results/raw/drop-million-after-explain.txt deleted file mode 100644 index 86ae37c..0000000 --- a/performance/results/raw/drop-million-after-explain.txt +++ /dev/null @@ -1,4 +0,0 @@ -EXPLAIN --> Limit: 20 row(s) (actual time=3293..3293 rows=20 loops=1)\n -> Sort: d.close_at, d.id DESC, limit input to 20 row(s) per chunk (actual time=3293..3293 rows=20 loops=1)\n -> Stream results (cost=100238 rows=10880) (actual time=5.84..3196 rows=500000 loops=1)\n -> Nested loop inner join (cost=100238 rows=10880) (actual time=5.7..2986 rows=500000 loops=1)\n -> Nested loop inner join (cost=2041 rows=20080) (actual time=2.97..51.1 rows=100000 loops=1)\n -> Covering index scan on u using UK6dotkott2kjsp8vw4d0m25fb7 (cost=0.45 rows=2) (actual time=1.43..2.45 rows=2 loops=1)\n -> Covering index lookup on p using FKbgw3lyxhsml3kfqnfr45o0vbj (seller_id=u.id) (cost=518 rows=10040) (actual time=0.71..21.6 rows=50000 loops=2)\n -> Filter: ((d.`visible` = 0x01) and (d.open_at <= (now())) and (d.close_at > (now())) and (d.remaining_quantity > 0)) (cost=3.91 rows=0.542) (actual time=0.0275..0.0289 rows=5 loops=100000)\n -> Index lookup on d using FK5fijulf0obt0d6wdvo34c3wcm (product_id=p.id) (cost=3.91 rows=9.75) (actual time=0.026..0.0274 rows=10 loops=100000)\n -EXPLAIN --> Aggregate: count(d.id) (cost=72990 rows=1) (actual time=2362..2362 rows=1 loops=1)\n -> Nested loop inner join (cost=71902 rows=10880) (actual time=1.04..2345 rows=500000 loops=1)\n -> Nested loop inner join (cost=2022 rows=20080) (actual time=0.468..41.5 rows=100000 loops=1)\n -> Covering index scan on u using UK6dotkott2kjsp8vw4d0m25fb7 (cost=0.45 rows=2) (actual time=0.016..0.727 rows=2 loops=1)\n -> Covering index lookup on p using FKbgw3lyxhsml3kfqnfr45o0vbj (seller_id=u.id) (cost=509 rows=10040) (actual time=0.224..17.7 rows=50000 loops=2)\n -> Filter: ((d.`visible` = 0x01) and (d.open_at <= (now())) and (d.close_at > (now())) and (d.remaining_quantity > 0)) (cost=2.5 rows=0.542) (actual time=0.0215..0.0226 rows=5 loops=100000)\n -> Index lookup on d using FK5fijulf0obt0d6wdvo34c3wcm (product_id=p.id) (cost=2.5 rows=9.75) (actual time=0.0202..0.0213 rows=10 loops=100000)\n diff --git a/performance/results/raw/drop-million-after.json b/performance/results/raw/drop-million-after.json deleted file mode 100644 index 31d55f7..0000000 --- a/performance/results/raw/drop-million-after.json +++ /dev/null @@ -1,237 +0,0 @@ -{ - "metrics": { - "data_received": { - "contains": "data", - "values": { - "count": 906460, - "rate": 8630.763827863526 - }, - "type": "counter" - }, - "data_sent": { - "contains": "data", - "values": { - "count": 316800, - "rate": 3016.3779765981567 - }, - "type": "counter" - }, - "dropped_iterations": { - "type": "counter", - "contains": "default", - "values": { - "rate": 45.69317521999544, - "count": 4799 - } - }, - "http_reqs": { - "values": { - "count": 635, - "rate": 6.046085906375724 - }, - "type": "counter", - "contains": "default" - }, - "vus": { - "type": "gauge", - "contains": "default", - "values": { - "value": 190, - "min": 10, - "max": 500 - } - }, - "http_req_duration{expected_response:true}": { - "type": "trend", - "contains": "time", - "values": { - "p(90)": 56584.2064628, - "p(95)": 58742.9753413, - "avg": 34323.692841070006, - "min": 7523.302737, - "med": 37750.737227, - "max": 58975.870409 - } - }, - "iteration_duration": { - "type": "trend", - "contains": "time", - "values": { - "min": 7526.616638, - "med": 48175.235512, - "max": 60011.027681, - "p(90)": 60001.9951246, - "p(95)": 60002.656534300004, - "avg": 44809.79793585037 - } - }, - "http_req_blocked": { - "type": "trend", - "contains": "time", - "values": { - "p(90)": 15.246710600000009, - "p(95)": 19.65092449999999, - "avg": 6.616195376377948, - "min": 0.004258, - "med": 3.605694, - "max": 150.219806 - } - }, - "http_req_connecting": { - "type": "trend", - "contains": "time", - "values": { - "avg": 6.476096869291338, - "min": 0, - "med": 3.404706, - "max": 150.111358, - "p(90)": 15.080012000000007, - "p(95)": 19.4628798 - } - }, - "checks": { - "type": "rate", - "contains": "default", - "values": { - "rate": 0.15748031496062992, - "passes": 200, - "fails": 1070 - } - }, - "http_req_duration": { - "type": "trend", - "contains": "time", - "values": { - "p(90)": 59997.781072, - "p(95)": 59998.189304, - "avg": 44797.13444110866, - "min": 7523.302737, - "med": 48151.948311, - "max": 60004.853025 - }, - "thresholds": { - "p(95)<2000": { - "ok": false - } - } - }, - "http_req_sending": { - "contains": "time", - "values": { - "avg": 0.1898148204724407, - "min": 0.018646, - "med": 0.127944, - "max": 10.310941, - "p(90)": 0.22461160000000002, - "p(95)": 0.28948139999999994 - }, - "type": "trend" - }, - "http_req_waiting": { - "type": "trend", - "contains": "time", - "values": { - "avg": 44796.22878477797, - "min": 7517.075616, - "med": 48151.572723, - "max": 60004.594369, - "p(90)": 59997.7447038, - "p(95)": 59998.155909199995 - } - }, - "http_req_receiving": { - "type": "trend", - "contains": "time", - "values": { - "max": 17.176256, - "p(90)": 1.3188148000000004, - "p(95)": 5.268856099999993, - "avg": 0.71584151023622, - "min": 0, - "med": 0.123255 - } - }, - "iterations": { - "type": "counter", - "contains": "default", - "values": { - "count": 635, - "rate": 6.046085906375724 - } - }, - "http_req_failed": { - "type": "rate", - "contains": "default", - "values": { - "fails": 100, - "rate": 0.84251968503937, - "passes": 535 - }, - "thresholds": { - "rate<0.01": { - "ok": false - } - } - }, - "vus_max": { - "type": "gauge", - "contains": "default", - "values": { - "min": 50, - "max": 500, - "value": 500 - } - }, - "http_req_tls_handshaking": { - "type": "trend", - "contains": "time", - "values": { - "avg": 0, - "min": 0, - "med": 0, - "max": 0, - "p(90)": 0, - "p(95)": 0 - } - } - }, - "root_group": { - "name": "", - "path": "", - "id": "d41d8cd98f00b204e9800998ecf8427e", - "groups": [], - "checks": [ - { - "name": "Drop 목록 조회 응답이 200이다", - "path": "::Drop 목록 조회 응답이 200이다", - "id": "634919e561b13374f34820e16887ae65", - "passes": 100, - "fails": 535 - }, - { - "passes": 100, - "fails": 535, - "name": "한 페이지는 최대 20개다", - "path": "::한 페이지는 최대 20개다", - "id": "c650329e4a118e15d6952cc13d36f54a" - } - ] - }, - "options": { - "summaryTrendStats": [ - "avg", - "min", - "med", - "max", - "p(90)", - "p(95)" - ], - "summaryTimeUnit": "", - "noColor": false - }, - "state": { - "isStdOutTTY": false, - "isStdErrTTY": false, - "testRunDurationMs": 105026.625462 - } -} \ No newline at end of file diff --git a/performance/results/raw/drop-million-before-explain.txt b/performance/results/raw/drop-million-before-explain.txt deleted file mode 100644 index 0d2d248..0000000 --- a/performance/results/raw/drop-million-before-explain.txt +++ /dev/null @@ -1,4 +0,0 @@ -EXPLAIN --> Limit: 20 row(s) (actual time=2683..2683 rows=20 loops=1)\n -> Sort: d.close_at, d.id DESC, limit input to 20 row(s) per chunk (actual time=2683..2683 rows=20 loops=1)\n -> Stream results (cost=89497 rows=3695) (actual time=6.45..2590 rows=500000 loops=1)\n -> Nested loop inner join (cost=89497 rows=3695) (actual time=6.32..2389 rows=500000 loops=1)\n -> Nested loop inner join (cost=2050 rows=20080) (actual time=4.08..63.5 rows=100000 loops=1)\n -> Covering index scan on u using UK6dotkott2kjsp8vw4d0m25fb7 (cost=1.2 rows=2) (actual time=1.36..2.1 rows=2 loops=1)\n -> Covering index lookup on p using FKbgw3lyxhsml3kfqnfr45o0vbj (seller_id=u.id) (cost=522 rows=10040) (actual time=1.33..28.1 rows=50000 loops=2)\n -> Filter: ((d.`visible` = 0x01) and (d.open_at <= (now())) and (d.close_at > (now())) and (d.remaining_quantity > 0)) (cost=3.36 rows=0.184) (actual time=0.0215..0.0228 rows=5 loops=100000)\n -> Index lookup on d using FK5fijulf0obt0d6wdvo34c3wcm (product_id=p.id) (cost=3.36 rows=9.94) (actual time=0.0202..0.0215 rows=10 loops=100000)\n -EXPLAIN --> Aggregate: count(d.id) (cost=72259 rows=1) (actual time=1916..1916 rows=1 loops=1)\n -> Nested loop inner join (cost=71889 rows=3695) (actual time=1.4..1900 rows=500000 loops=1)\n -> Nested loop inner join (cost=2026 rows=20080) (actual time=1.04..49 rows=100000 loops=1)\n -> Covering index scan on u using UK6dotkott2kjsp8vw4d0m25fb7 (cost=1.2 rows=2) (actual time=0.0114..0.724 rows=2 loops=1)\n -> Covering index lookup on p using FKbgw3lyxhsml3kfqnfr45o0vbj (seller_id=u.id) (cost=510 rows=10040) (actual time=0.512..21.6 rows=50000 loops=2)\n -> Filter: ((d.`visible` = 0x01) and (d.open_at <= (now())) and (d.close_at > (now())) and (d.remaining_quantity > 0)) (cost=2.49 rows=0.184) (actual time=0.0171..0.0181 rows=5 loops=100000)\n -> Index lookup on d using FK5fijulf0obt0d6wdvo34c3wcm (product_id=p.id) (cost=2.49 rows=9.94) (actual time=0.016..0.0169 rows=10 loops=100000)\n diff --git a/performance/results/raw/drop-million-before.json b/performance/results/raw/drop-million-before.json deleted file mode 100644 index 949dbef..0000000 --- a/performance/results/raw/drop-million-before.json +++ /dev/null @@ -1,237 +0,0 @@ -{ - "root_group": { - "groups": [], - "checks": [ - { - "name": "Drop 목록 조회 응답이 200이다", - "path": "::Drop 목록 조회 응답이 200이다", - "id": "634919e561b13374f34820e16887ae65", - "passes": 111, - "fails": 522 - }, - { - "name": "한 페이지는 최대 20개다", - "path": "::한 페이지는 최대 20개다", - "id": "c650329e4a118e15d6952cc13d36f54a", - "passes": 111, - "fails": 522 - } - ], - "name": "", - "path": "", - "id": "d41d8cd98f00b204e9800998ecf8427e" - }, - "options": { - "summaryTrendStats": [ - "avg", - "min", - "med", - "max", - "p(90)", - "p(95)" - ], - "summaryTimeUnit": "", - "noColor": false - }, - "state": { - "isStdOutTTY": false, - "isStdErrTTY": false, - "testRunDurationMs": 105029.143853 - }, - "metrics": { - "http_req_duration{expected_response:true}": { - "type": "trend", - "contains": "time", - "values": { - "min": 7228.713523, - "med": 37166.116704, - "max": 56567.531669, - "p(90)": 52991.271195, - "p(95)": 56380.2768525, - "avg": 34309.194948594595 - } - }, - "http_req_receiving": { - "type": "trend", - "contains": "time", - "values": { - "avg": 0.2792413917851501, - "min": 0, - "med": 0.117637, - "max": 16.908198, - "p(90)": 0.4495614000000024, - "p(95)": 1.279052199999999 - } - }, - "http_req_blocked": { - "contains": "time", - "values": { - "avg": 5.823815753554504, - "min": 0.004789, - "med": 3.642297, - "max": 80.002048, - "p(90)": 13.158617600000001, - "p(95)": 18.057035999999993 - }, - "type": "trend" - }, - "http_req_duration": { - "contains": "time", - "values": { - "avg": 45193.56148846289, - "min": 7228.713523, - "med": 48285.694827, - "max": 60011.133816, - "p(90)": 59997.709035, - "p(95)": 59998.3564662 - }, - "thresholds": { - "p(95)<2000": { - "ok": false - } - }, - "type": "trend" - }, - "http_req_connecting": { - "type": "trend", - "contains": "time", - "values": { - "avg": 5.67712754344392, - "min": 0, - "med": 3.507404, - "max": 79.880132, - "p(90)": 13.001469800000006, - "p(95)": 17.880307999999992 - } - }, - "iterations": { - "values": { - "count": 633, - "rate": 6.026898599553988 - }, - "type": "counter", - "contains": "default" - }, - "dropped_iterations": { - "values": { - "count": 4807, - "rate": 45.768248922679334 - }, - "type": "counter", - "contains": "default" - }, - "http_req_failed": { - "type": "rate", - "contains": "default", - "values": { - "rate": 0.8246445497630331, - "passes": 522, - "fails": 111 - }, - "thresholds": { - "rate<0.01": { - "ok": false - } - } - }, - "vus_max": { - "values": { - "value": 500, - "min": 50, - "max": 500 - }, - "type": "gauge", - "contains": "default" - }, - "http_req_waiting": { - "type": "trend", - "contains": "time", - "values": { - "max": 60011.019155, - "p(90)": 59997.6201646, - "p(95)": 59998.3136828, - "avg": 45193.10419417537, - "min": 7228.38779, - "med": 48285.444165 - } - }, - "iteration_duration": { - "contains": "time", - "values": { - "max": 60017.214523, - "p(90)": 60002.066131800006, - "p(95)": 60003.3647396, - "avg": 45202.92266992099, - "min": 7231.561481, - "med": 48301.07319 - }, - "type": "trend" - }, - "vus": { - "type": "gauge", - "contains": "default", - "values": { - "value": 184, - "min": 10, - "max": 500 - } - }, - "http_reqs": { - "type": "counter", - "contains": "default", - "values": { - "count": 633, - "rate": 6.026898599553988 - } - }, - "data_sent": { - "type": "counter", - "contains": "data", - "values": { - "count": 313728, - "rate": 2987.0566253410325 - } - }, - "data_received": { - "type": "counter", - "contains": "data", - "values": { - "count": 981678, - "rate": 9346.720005391722 - } - }, - "http_req_sending": { - "type": "trend", - "contains": "time", - "values": { - "avg": 0.1780528957345971, - "min": 0.017734, - "med": 0.11968, - "max": 4.613684, - "p(90)": 0.2269494000000001, - "p(95)": 0.30788039999999994 - } - }, - "checks": { - "contains": "default", - "values": { - "rate": 0.17535545023696683, - "passes": 222, - "fails": 1044 - }, - "type": "rate" - }, - "http_req_tls_handshaking": { - "type": "trend", - "contains": "time", - "values": { - "p(90)": 0, - "p(95)": 0, - "avg": 0, - "min": 0, - "med": 0, - "max": 0 - } - } - } -} \ No newline at end of file diff --git a/performance/results/raw/drop-million-optimized-explain.txt b/performance/results/raw/drop-million-optimized-explain.txt deleted file mode 100644 index d2c6221..0000000 --- a/performance/results/raw/drop-million-optimized-explain.txt +++ /dev/null @@ -1,4 +0,0 @@ -EXPLAIN --> Limit: 20 row(s) (cost=91094 rows=20) (actual time=3.19..3.26 rows=20 loops=1)\n -> Filter: ((d.`visible` = 0x01) and (d.open_at <= (now())) and (d.close_at > (now())) and (d.remaining_quantity > 0)) (cost=91094 rows=55224) (actual time=3.15..3.22 rows=20 loops=1)\n -> Covering index range scan on d using idx_drops_public_closing over (visible = 1 AND '2026-09-10 06:54:22.000000' < close_at) (cost=91094 rows=497113) (actual time=2.68..2.74 rows=20 loops=1)\n -EXPLAIN --> Aggregate: count(d.id) (cost=96616 rows=1) (actual time=714..714 rows=1 loops=1)\n -> Filter: ((d.`visible` = 0x01) and (d.open_at <= (now())) and (d.close_at > (now())) and (d.remaining_quantity > 0)) (cost=91094 rows=55224) (actual time=0.243..700 rows=500000 loops=1)\n -> Covering index range scan on d using idx_drops_public_closing over (visible = 1 AND '2026-09-10 06:54:22.000000' < close_at) (cost=91094 rows=497113) (actual time=0.214..621 rows=800000 loops=1)\n diff --git a/performance/results/raw/drop-million-optimized.json b/performance/results/raw/drop-million-optimized.json deleted file mode 100644 index cbbafd3..0000000 --- a/performance/results/raw/drop-million-optimized.json +++ /dev/null @@ -1,237 +0,0 @@ -{ - "root_group": { - "checks": [ - { - "fails": 0, - "name": "Drop 목록 조회 응답이 200이다", - "path": "::Drop 목록 조회 응답이 200이다", - "id": "634919e561b13374f34820e16887ae65", - "passes": 1897 - }, - { - "name": "한 페이지는 최대 20개다", - "path": "::한 페이지는 최대 20개다", - "id": "c650329e4a118e15d6952cc13d36f54a", - "passes": 1897, - "fails": 0 - } - ], - "name": "", - "path": "", - "id": "d41d8cd98f00b204e9800998ecf8427e", - "groups": [] - }, - "options": { - "summaryTrendStats": [ - "avg", - "min", - "med", - "max", - "p(90)", - "p(95)" - ], - "summaryTimeUnit": "", - "noColor": false - }, - "state": { - "isStdOutTTY": false, - "isStdErrTTY": false, - "testRunDurationMs": 95832.95986 - }, - "metrics": { - "http_req_tls_handshaking": { - "values": { - "avg": 0, - "min": 0, - "med": 0, - "max": 0, - "p(90)": 0, - "p(95)": 0 - }, - "type": "trend", - "contains": "time" - }, - "dropped_iterations": { - "type": "counter", - "contains": "default", - "values": { - "count": 3727, - "rate": 38.89058634362 - } - }, - "http_req_sending": { - "values": { - "avg": 0.11926170005271483, - "min": 0.008615, - "med": 0.048182, - "max": 19.448594, - "p(90)": 0.1678362, - "p(95)": 0.23836719999999967 - }, - "type": "trend", - "contains": "time" - }, - "http_req_waiting": { - "type": "trend", - "contains": "time", - "values": { - "min": 224.629885, - "med": 14778.714011, - "max": 32045.251855, - "p(90)": 23330.129581, - "p(95)": 23460.586428, - "avg": 13890.367516205584 - } - }, - "checks": { - "values": { - "rate": 1, - "passes": 3794, - "fails": 0 - }, - "type": "rate", - "contains": "default" - }, - "vus": { - "type": "gauge", - "contains": "default", - "values": { - "value": 22, - "min": 4, - "max": 500 - } - }, - "http_reqs": { - "type": "counter", - "contains": "default", - "values": { - "count": 1897, - "rate": 19.794859751501782 - } - }, - "http_req_blocked": { - "type": "trend", - "contains": "time", - "values": { - "avg": 3.3112790801265137, - "min": 0.004629, - "med": 0.009428, - "max": 315.597063, - "p(90)": 9.380277200000004, - "p(95)": 17.84343059999993 - } - }, - "http_req_receiving": { - "values": { - "med": 0.818686, - "max": 152.158865, - "p(90)": 5.521724600000002, - "p(95)": 9.082953199999986, - "avg": 2.504092324196103, - "min": 0.051593 - }, - "type": "trend", - "contains": "time" - }, - "http_req_failed": { - "type": "rate", - "contains": "default", - "values": { - "rate": 0, - "passes": 0, - "fails": 1897 - }, - "thresholds": { - "rate<0.01": { - "ok": true - } - } - }, - "vus_max": { - "type": "gauge", - "contains": "default", - "values": { - "value": 500, - "min": 50, - "max": 500 - } - }, - "iteration_duration": { - "type": "trend", - "contains": "time", - "values": { - "min": 225.470518, - "med": 14783.078036, - "max": 32048.978165, - "p(90)": 23336.218418200002, - "p(95)": 23464.499679999997, - "avg": 13897.89624026411 - } - }, - "http_req_duration": { - "type": "trend", - "contains": "time", - "values": { - "avg": 13892.990870229834, - "min": 224.965742, - "med": 14779.517483, - "max": 32045.499983, - "p(90)": 23332.6694232, - "p(95)": 23460.9237606 - }, - "thresholds": { - "p(95)<2000": { - "ok": false - } - } - }, - "iterations": { - "contains": "default", - "values": { - "count": 1897, - "rate": 19.794859751501782 - }, - "type": "counter" - }, - "http_req_duration{expected_response:true}": { - "type": "trend", - "contains": "time", - "values": { - "avg": 13892.990870229834, - "min": 224.965742, - "med": 14779.517483, - "max": 32045.499983, - "p(90)": 23332.6694232, - "p(95)": 23460.9237606 - } - }, - "data_received": { - "contains": "data", - "values": { - "count": 14678986, - "rate": 153172.6247571208 - }, - "type": "counter" - }, - "data_sent": { - "type": "counter", - "contains": "data", - "values": { - "count": 728448, - "rate": 7601.226144576684 - } - }, - "http_req_connecting": { - "type": "trend", - "contains": "time", - "values": { - "avg": 3.227838934633633, - "min": 0, - "med": 0, - "max": 315.522017, - "p(90)": 9.217130400000002, - "p(95)": 17.270925399999985 - } - } - } -} \ No newline at end of file From ebee0203b93a7e65a662923dfc3f80e171514d46 Mon Sep 17 00:00:00 2001 From: Sooyoung Yoon Date: Sat, 12 Sep 2026 11:42:30 +0900 Subject: [PATCH 34/98] =?UTF-8?q?feat(security):=20=EB=93=9C=EB=9E=8D=20?= =?UTF-8?q?=EB=AA=A9=EB=A1=9D=20=EB=B0=8F=20=EC=83=81=EC=84=B8=20=EC=A1=B0?= =?UTF-8?q?=ED=9A=8C=20=EA=B3=B5=EA=B0=9C?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../drop/controller/DropController.java | 3 ++ .../global/security/SecurityConfig.java | 3 +- .../controller/DropDocumentationTest.java | 7 ++--- .../global/security/SecurityConfigTest.java | 31 +++++++++++++++++++ 4 files changed, 39 insertions(+), 5 deletions(-) diff --git a/src/main/java/com/dropit/drop/controller/DropController.java b/src/main/java/com/dropit/drop/controller/DropController.java index 4dd4d01..0e435b4 100644 --- a/src/main/java/com/dropit/drop/controller/DropController.java +++ b/src/main/java/com/dropit/drop/controller/DropController.java @@ -7,6 +7,7 @@ import com.dropit.drop.dto.response.DropResponse; import com.dropit.drop.service.DropService; import com.dropit.global.security.principal.CurrentUserId; +import jakarta.annotation.security.PermitAll; import jakarta.validation.Valid; import lombok.RequiredArgsConstructor; import org.springframework.data.domain.Page; @@ -36,6 +37,7 @@ public ResponseEntity create( .body(dropId); } + @PermitAll @GetMapping("/drops") public ResponseEntity> getAll( @ModelAttribute DropSearchCondition condition, @@ -46,6 +48,7 @@ public ResponseEntity> getAll( return ResponseEntity.ok(response); } + @PermitAll @GetMapping("/drops/{dropId}") public ResponseEntity getOne( @PathVariable Long dropId diff --git a/src/main/java/com/dropit/global/security/SecurityConfig.java b/src/main/java/com/dropit/global/security/SecurityConfig.java index 1820a6b..d549944 100644 --- a/src/main/java/com/dropit/global/security/SecurityConfig.java +++ b/src/main/java/com/dropit/global/security/SecurityConfig.java @@ -27,7 +27,7 @@ @Configuration @RequiredArgsConstructor @EnableWebSecurity -@EnableMethodSecurity +@EnableMethodSecurity(jsr250Enabled = true) public class SecurityConfig { private final JwtFilter jwtFilter; @@ -96,6 +96,7 @@ public SecurityFilterChain securityFilterChain(HttpSecurity http) throws Excepti .authorizeHttpRequests(auth -> auth .requestMatchers(HttpMethod.GET, "/actuator/health").permitAll() .requestMatchers(HttpMethod.POST, "/auth/signup", "/auth/login", "/auth/reissue").permitAll() + .requestMatchers(HttpMethod.GET, "/drops", "/drops/*").permitAll() .anyRequest().authenticated() ) // JWT 인증이 익명 인증보다 먼저 처리되도록 순서 지정 diff --git a/src/test/java/com/dropit/drop/controller/DropDocumentationTest.java b/src/test/java/com/dropit/drop/controller/DropDocumentationTest.java index 3a7b13b..60676a9 100644 --- a/src/test/java/com/dropit/drop/controller/DropDocumentationTest.java +++ b/src/test/java/com/dropit/drop/controller/DropDocumentationTest.java @@ -75,11 +75,10 @@ void create() throws Exception { @Test void getAll() throws Exception { when(dropService.getAll(any(), any())).thenReturn(new PageImpl<>(List.of(dropResponse()), PageRequest.of(0, 20), 1)); - mockMvc.perform(authenticated(get("/drops").param("keyword", "hoodie").param("status", "OPEN").param("page", "0").param("size", "20"))) + mockMvc.perform(get("/drops").param("keyword", "hoodie").param("status", "OPEN").param("page", "0").param("size", "20")) .andExpect(status().isOk()) .andDo(document("drops-get-all", resource(builder() .tag("Drops").summary("드랍 목록 조회").description("검색 조건과 페이징 조건으로 드랍을 조회합니다.") - .requestHeaders(authorizationHeader()) .queryParameters( parameterWithName("keyword").optional().description("상품명 검색어"), parameterWithName("status").optional().description("드랍 상태"), @@ -93,10 +92,10 @@ void getAll() throws Exception { @Test void getOne() throws Exception { when(dropService.getOne(100L)).thenReturn(dropResponse()); - mockMvc.perform(authenticated(get("/drops/{dropId}", 100L))) + mockMvc.perform(get("/drops/{dropId}", 100L)) .andExpect(status().isOk()) .andDo(document("drops-get", resource(builder() - .tag("Drops").summary("드랍 단건 조회").requestHeaders(authorizationHeader()) + .tag("Drops").summary("드랍 단건 조회") .pathParameters(parameterWithName("dropId").description("드랍 ID")) .responseSchema(new Schema("DropResponse")).responseFields(dropFields()).build()))); } diff --git a/src/test/java/com/dropit/global/security/SecurityConfigTest.java b/src/test/java/com/dropit/global/security/SecurityConfigTest.java index 9cae1d6..980b523 100644 --- a/src/test/java/com/dropit/global/security/SecurityConfigTest.java +++ b/src/test/java/com/dropit/global/security/SecurityConfigTest.java @@ -106,6 +106,18 @@ void documentationWithInvalidCredentialsReturnsUnauthorized() throws Exception { .andExpect(status().isUnauthorized()); } + @Test + void publicDropListDoesNotRequireAuthentication() throws Exception { + mockMvc.perform(get("/drops")) + .andExpect(status().isOk()); + } + + @Test + void publicDropDetailDoesNotRequireAuthentication() throws Exception { + mockMvc.perform(get("/drops/100")) + .andExpect(status().isOk()); + } + @Configuration(proxyBeanMethods = false) @EnableWebSecurity @EnableWebMvc @@ -126,6 +138,11 @@ SecurityErrorResponseSender errorResponseSender() { DocumentationTestController documentationTestController() { return new DocumentationTestController(); } + + @Bean + PublicDropTestController publicDropTestController() { + return new PublicDropTestController(); + } } @RestController @@ -136,4 +153,18 @@ void getDocumentation(HttpServletResponse response) throws Exception { response.setStatus(HttpServletResponse.SC_OK); } } + + @RestController + static class PublicDropTestController { + + @GetMapping("/drops") + void getDrops(HttpServletResponse response) throws Exception { + response.setStatus(HttpServletResponse.SC_OK); + } + + @GetMapping("/drops/{dropId}") + void getDrop(HttpServletResponse response) throws Exception { + response.setStatus(HttpServletResponse.SC_OK); + } + } } From 436cf4c2b005a815421605cc979aa37efb4b1cba Mon Sep 17 00:00:00 2001 From: Sooyoung Yoon Date: Sat, 12 Sep 2026 11:48:17 +0900 Subject: [PATCH 35/98] =?UTF-8?q?feat(s3):=20=EC=83=81=ED=92=88=20?= =?UTF-8?q?=EB=B0=8F=20=ED=8C=90=EB=A7=A4=EC=9E=90=20=ED=94=84=EB=A1=9C?= =?UTF-8?q?=ED=95=84=20=EA=B3=B5=EA=B0=9C=20=EC=9D=B4=EB=AF=B8=EC=A7=80=20?= =?UTF-8?q?URL=20=EC=A0=81=EC=9A=A9?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../dropit/global/storage/S3ImageService.java | 18 +++++++++++++++++- .../dropit/product/service/ProductService.java | 2 +- .../service/SellerProfileService.java | 6 +++--- .../global/storage/S3ImageServiceTest.java | 17 +++++++++++++++++ .../product/service/ProductServiceTest.java | 12 ++++++------ .../service/SellerProfileServiceTest.java | 6 +++--- 6 files changed, 47 insertions(+), 14 deletions(-) diff --git a/src/main/java/com/dropit/global/storage/S3ImageService.java b/src/main/java/com/dropit/global/storage/S3ImageService.java index 8308397..d3f885f 100644 --- a/src/main/java/com/dropit/global/storage/S3ImageService.java +++ b/src/main/java/com/dropit/global/storage/S3ImageService.java @@ -2,6 +2,7 @@ import com.dropit.global.exception.ServiceException; import io.awspring.cloud.s3.ObjectMetadata; +import io.awspring.cloud.s3.S3Resource; import io.awspring.cloud.s3.S3Template; import lombok.RequiredArgsConstructor; import lombok.extern.slf4j.Slf4j; @@ -82,6 +83,21 @@ public String createDownloadUrl(String key) { } } + public String createPublicUrl(String key) { + if (key == null) { + return null; + } + + try { + S3Resource resource = s3Template.createResource(bucket, key); + return resource.getURL().toString(); + } catch (IOException | SdkException exception) { + throw new ServiceException( + StorageErrorCode.FILE_URL_CREATION_FAILED + ); + } + } + public void deleteQuietly(String key) { if (key == null) { return; @@ -116,4 +132,4 @@ private void validate(MultipartFile file) { ); } } -} \ No newline at end of file +} diff --git a/src/main/java/com/dropit/product/service/ProductService.java b/src/main/java/com/dropit/product/service/ProductService.java index 92bed48..774f7cf 100644 --- a/src/main/java/com/dropit/product/service/ProductService.java +++ b/src/main/java/com/dropit/product/service/ProductService.java @@ -215,7 +215,7 @@ private void validateOwner(Long sellerId, Product product) { } private ProductResponse toResponse(Product product) { - String imageUrl = s3ImageService.createDownloadUrl( + String imageUrl = s3ImageService.createPublicUrl( product.getImageUrl() ); diff --git a/src/main/java/com/dropit/sellerprofile/service/SellerProfileService.java b/src/main/java/com/dropit/sellerprofile/service/SellerProfileService.java index e37693c..e68c96e 100644 --- a/src/main/java/com/dropit/sellerprofile/service/SellerProfileService.java +++ b/src/main/java/com/dropit/sellerprofile/service/SellerProfileService.java @@ -171,12 +171,12 @@ private SellerProfile findByUserId(Long userId) { /* * The entity stores the private S3 object key. - * The response receives a temporary presigned URL. + * The response receives a public S3 object URL. */ private SellerProfileResponse toResponse( SellerProfile sellerProfile ) { - String imageUrl = s3ImageService.createDownloadUrl( + String imageUrl = s3ImageService.createPublicUrl( sellerProfile.getImageUrl() ); @@ -237,4 +237,4 @@ public void afterCommit() { } ); } -} \ No newline at end of file +} diff --git a/src/test/java/com/dropit/global/storage/S3ImageServiceTest.java b/src/test/java/com/dropit/global/storage/S3ImageServiceTest.java index 9577eef..db2fe2d 100644 --- a/src/test/java/com/dropit/global/storage/S3ImageServiceTest.java +++ b/src/test/java/com/dropit/global/storage/S3ImageServiceTest.java @@ -2,6 +2,7 @@ import com.dropit.global.exception.ServiceException; import io.awspring.cloud.s3.ObjectMetadata; +import io.awspring.cloud.s3.S3Resource; import io.awspring.cloud.s3.S3Template; import org.junit.jupiter.api.BeforeEach; import org.junit.jupiter.api.DisplayName; @@ -107,6 +108,22 @@ void createDownloadUrl() throws Exception { ); } + @Test + @DisplayName("이미지 키를 공개 S3 URL로 변환한다") + void createPublicUrl() throws Exception { + String key = "products/100/image.png"; + URL publicUrl = new URL( + "https://dropit-test.s3.ap-northeast-2.amazonaws.com/products/100/image.png" + ); + S3Resource resource = org.mockito.Mockito.mock(S3Resource.class); + when(s3Template.createResource(BUCKET, key)).thenReturn(resource); + when(resource.getURL()).thenReturn(publicUrl); + + assertEquals(publicUrl.toString(), s3ImageService.createPublicUrl(key)); + assertNull(s3ImageService.createPublicUrl(null)); + verify(s3Template).createResource(BUCKET, key); + } + private void assertErrorCode( StorageErrorCode errorCode, org.junit.jupiter.api.function.Executable executable diff --git a/src/test/java/com/dropit/product/service/ProductServiceTest.java b/src/test/java/com/dropit/product/service/ProductServiceTest.java index abd0af1..d1a0f22 100644 --- a/src/test/java/com/dropit/product/service/ProductServiceTest.java +++ b/src/test/java/com/dropit/product/service/ProductServiceTest.java @@ -134,8 +134,8 @@ void getProduct() { ReflectionTestUtils.setField(product, "id", productId); when(productRepository.findById(productId)).thenReturn(Optional.of(product)); - when(s3ImageService.createDownloadUrl("products/limited-hoodie.webp")) - .thenReturn("https://signed.example.com/limited-hoodie.webp"); + when(s3ImageService.createPublicUrl("products/limited-hoodie.webp")) + .thenReturn("https://public.example.com/limited-hoodie.webp"); ProductResponse response = productService.getProduct(productId); @@ -145,7 +145,7 @@ void getProduct() { assertEquals("Limited Hoodie", response.getName()); assertEquals("Limited edition hoodie", response.getDescription()); assertEquals( - "https://signed.example.com/limited-hoodie.webp", + "https://public.example.com/limited-hoodie.webp", response.getImageUrl() ); } @@ -322,8 +322,8 @@ void uploadImage() { when(productRepository.findById(productId)).thenReturn(Optional.of(product)); when(s3ImageService.upload(file, "products/100")) .thenReturn("products/100/new.png"); - when(s3ImageService.createDownloadUrl("products/100/new.png")) - .thenReturn("https://signed.example.com/new.png"); + when(s3ImageService.createPublicUrl("products/100/new.png")) + .thenReturn("https://public.example.com/new.png"); ProductResponse response = productService.uploadImage( sellerId, @@ -332,7 +332,7 @@ void uploadImage() { ); assertEquals("products/100/new.png", product.getImageUrl()); - assertEquals("https://signed.example.com/new.png", response.getImageUrl()); + assertEquals("https://public.example.com/new.png", response.getImageUrl()); verify(s3ImageService).upload(file, "products/100"); } diff --git a/src/test/java/com/dropit/sellerprofile/service/SellerProfileServiceTest.java b/src/test/java/com/dropit/sellerprofile/service/SellerProfileServiceTest.java index d7c34b9..5631848 100644 --- a/src/test/java/com/dropit/sellerprofile/service/SellerProfileServiceTest.java +++ b/src/test/java/com/dropit/sellerprofile/service/SellerProfileServiceTest.java @@ -178,13 +178,13 @@ void uploadImage() { .thenReturn(Optional.of(profile)); when(s3ImageService.upload(file, "seller-profiles/1")) .thenReturn("seller-profiles/1/new.png"); - when(s3ImageService.createDownloadUrl("seller-profiles/1/new.png")) - .thenReturn("https://signed.example.com/new.png"); + when(s3ImageService.createPublicUrl("seller-profiles/1/new.png")) + .thenReturn("https://public.example.com/new.png"); SellerProfileResponse response = sellerProfileService.uploadImage(userId, file); assertEquals("seller-profiles/1/new.png", profile.getImageUrl()); - assertEquals("https://signed.example.com/new.png", response.imageUrl()); + assertEquals("https://public.example.com/new.png", response.imageUrl()); verify(s3ImageService).upload(file, "seller-profiles/1"); } From 64f42308f68e4b2dbd6c7b4568a4bdc3f8a8a73b Mon Sep 17 00:00:00 2001 From: Sooyoung Yoon Date: Sat, 12 Sep 2026 12:00:58 +0900 Subject: [PATCH 36/98] =?UTF-8?q?fix(security):=20=EA=B3=B5=EA=B0=9C=20?= =?UTF-8?q?=EC=97=94=EB=93=9C=ED=8F=AC=EC=9D=B8=ED=8A=B8=20JWT=20=ED=95=84?= =?UTF-8?q?=ED=84=B0=20=EC=A0=9C=EC=99=B8?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../global/security/SecurityConfig.java | 16 +++++++++-- .../dropit/global/security/jwt/JwtFilter.java | 8 +++++- .../global/security/jwt/JwtFilterTest.java | 28 ++++++++++++++++++- 3 files changed, 47 insertions(+), 5 deletions(-) diff --git a/src/main/java/com/dropit/global/security/SecurityConfig.java b/src/main/java/com/dropit/global/security/SecurityConfig.java index d549944..8cb224b 100644 --- a/src/main/java/com/dropit/global/security/SecurityConfig.java +++ b/src/main/java/com/dropit/global/security/SecurityConfig.java @@ -22,6 +22,9 @@ import org.springframework.security.provisioning.InMemoryUserDetailsManager; import org.springframework.security.web.SecurityFilterChain; import org.springframework.security.web.authentication.AnonymousAuthenticationFilter; +import org.springframework.security.web.servlet.util.matcher.PathPatternRequestMatcher; +import org.springframework.security.web.util.matcher.OrRequestMatcher; +import org.springframework.security.web.util.matcher.RequestMatcher; import org.springframework.util.StringUtils; @Configuration @@ -30,6 +33,15 @@ @EnableMethodSecurity(jsr250Enabled = true) public class SecurityConfig { + public static final RequestMatcher PUBLIC_ENDPOINTS = new OrRequestMatcher( + PathPatternRequestMatcher.pathPattern(HttpMethod.GET, "/actuator/health"), + PathPatternRequestMatcher.pathPattern(HttpMethod.POST, "/auth/signup"), + PathPatternRequestMatcher.pathPattern(HttpMethod.POST, "/auth/login"), + PathPatternRequestMatcher.pathPattern(HttpMethod.POST, "/auth/reissue"), + PathPatternRequestMatcher.pathPattern(HttpMethod.GET, "/drops"), + PathPatternRequestMatcher.pathPattern(HttpMethod.GET, "/drops/{dropId}") + ); + private final JwtFilter jwtFilter; private final SecurityErrorResponseSender errorResponseSender; @@ -94,9 +106,7 @@ public SecurityFilterChain securityFilterChain(HttpSecurity http) throws Excepti errorResponseSender.send(response, JwtErrorCode.JWT_ACCESS_DENIED)) ) .authorizeHttpRequests(auth -> auth - .requestMatchers(HttpMethod.GET, "/actuator/health").permitAll() - .requestMatchers(HttpMethod.POST, "/auth/signup", "/auth/login", "/auth/reissue").permitAll() - .requestMatchers(HttpMethod.GET, "/drops", "/drops/*").permitAll() + .requestMatchers(PUBLIC_ENDPOINTS).permitAll() .anyRequest().authenticated() ) // JWT 인증이 익명 인증보다 먼저 처리되도록 순서 지정 diff --git a/src/main/java/com/dropit/global/security/jwt/JwtFilter.java b/src/main/java/com/dropit/global/security/jwt/JwtFilter.java index c0a0296..b5d484b 100644 --- a/src/main/java/com/dropit/global/security/jwt/JwtFilter.java +++ b/src/main/java/com/dropit/global/security/jwt/JwtFilter.java @@ -21,6 +21,8 @@ import java.io.IOException; import java.util.List; +import static com.dropit.global.security.SecurityConfig.PUBLIC_ENDPOINTS; + @Component @RequiredArgsConstructor public class JwtFilter extends OncePerRequestFilter { @@ -28,6 +30,11 @@ public class JwtFilter extends OncePerRequestFilter { private final JwtUtil jwtUtil; private final SecurityErrorResponseSender errorResponseSender; + @Override + protected boolean shouldNotFilter(HttpServletRequest request) { + return PUBLIC_ENDPOINTS.matches(request); + } + @Override protected void doFilterInternal( HttpServletRequest request, @@ -86,4 +93,3 @@ private UserRole parseRole(String roleClaim) { } } } - diff --git a/src/test/java/com/dropit/global/security/jwt/JwtFilterTest.java b/src/test/java/com/dropit/global/security/jwt/JwtFilterTest.java index 291728e..5a9490d 100644 --- a/src/test/java/com/dropit/global/security/jwt/JwtFilterTest.java +++ b/src/test/java/com/dropit/global/security/jwt/JwtFilterTest.java @@ -7,6 +7,8 @@ import jakarta.servlet.FilterChain; import org.junit.jupiter.api.AfterEach; import org.junit.jupiter.api.Test; +import org.junit.jupiter.params.ParameterizedTest; +import org.junit.jupiter.params.provider.CsvSource; import org.springframework.mock.web.MockHttpServletRequest; import org.springframework.mock.web.MockHttpServletResponse; import org.springframework.security.core.Authentication; @@ -41,6 +43,30 @@ void requestWithoutBearerTokenContinuesWithoutAuthentication() throws Exception assertThat(SecurityContextHolder.getContext().getAuthentication()).isNull(); } + @ParameterizedTest + @CsvSource({ + "GET, /actuator/health", + "POST, /auth/signup", + "POST, /auth/login", + "POST, /auth/reissue", + "GET, /drops", + "GET, /drops/100" + }) + void invalidTokenOnPermitAllPathIsIgnored(String method, String path) throws Exception { + MockHttpServletRequest request = new MockHttpServletRequest(method, path); + request.setServletPath(path); + request.addHeader("Authorization", "Bearer invalid-token"); + MockHttpServletResponse response = new MockHttpServletResponse(); + FilterChain filterChain = mock(FilterChain.class); + when(jwtUtil.getAccessTokenClaims("invalid-token")) + .thenThrow(new ServiceException(JwtErrorCode.JWT_TOKEN_SIGNATURE_ERROR)); + + jwtFilter.doFilter(request, response, filterChain); + + verify(jwtUtil, never()).getAccessTokenClaims("invalid-token"); + verify(filterChain).doFilter(request, response); + } + @Test void validAccessTokenCreatesAuthenticatedSecurityContext() throws Exception { MockHttpServletRequest request = new MockHttpServletRequest(); @@ -77,4 +103,4 @@ void invalidTokenWritesErrorAndStopsFilterChain() throws Exception { verify(errorResponseSender).send(response, exception); verify(filterChain, never()).doFilter(request, response); } -} \ No newline at end of file +} From 08f811f236d9c7a7d057349f007f4b75fce493d0 Mon Sep 17 00:00:00 2001 From: Hyiyek Date: Sat, 12 Sep 2026 19:30:06 +0900 Subject: [PATCH 37/98] =?UTF-8?q?test(performance):=20Drop=20=EC=83=81?= =?UTF-8?q?=EC=84=B8=20=EC=A1=B0=ED=9A=8C=20=EC=8A=A4=ED=8C=8C=EC=9D=B4?= =?UTF-8?q?=ED=81=AC=20=EC=8B=9C=EB=82=98=EB=A6=AC=EC=98=A4=20=EC=B6=94?= =?UTF-8?q?=EA=B0=80?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- performance/k6/drop-detail-spike.js | 87 +++++++++++++++++++++++++++++ 1 file changed, 87 insertions(+) create mode 100644 performance/k6/drop-detail-spike.js diff --git a/performance/k6/drop-detail-spike.js b/performance/k6/drop-detail-spike.js new file mode 100644 index 0000000..2506bda --- /dev/null +++ b/performance/k6/drop-detail-spike.js @@ -0,0 +1,87 @@ +import http from 'k6/http'; +import { check } from 'k6'; + +const baseUrl = __ENV.BASE_URL || 'http://host.docker.internal:8080'; +const testRun = __ENV.TEST_RUN || 'drop-detail-spike-before'; +const authToken = __ENV.AUTH_TOKEN; +const dropId = __ENV.DROP_ID; + +function numberFromEnvironment(name, defaultValue) { + const value = Number(__ENV[name] || defaultValue); + + if (!Number.isFinite(value) || value <= 0) { + throw new Error(`${name} must be a positive number.`); + } + + return value; +} + +if (!authToken) { + throw new Error('AUTH_TOKEN is required.'); +} + +if (!dropId) { + throw new Error('DROP_ID is required.'); +} + +const normalRps = numberFromEnvironment('NORMAL_RPS', 100); +const spikeRps = numberFromEnvironment('SPIKE_RPS', 1000); +const preAllocatedVUs = numberFromEnvironment('PRE_ALLOCATED_VUS', 200); +const maxVUs = numberFromEnvironment('MAX_VUS', 2000); + +export const options = { + discardResponseBodies: false, + scenarios: { + dropDetailAtOpeningTime: { + executor: 'ramping-arrival-rate', + startRate: normalRps, + timeUnit: '1s', + preAllocatedVUs, + maxVUs, + stages: [ + { duration: '30s', target: normalRps }, + { duration: '1s', target: spikeRps }, + { duration: '1m', target: spikeRps }, + { duration: '15s', target: 0 }, + ], + gracefulStop: '30s', + }, + }, + thresholds: { + http_req_failed: ['rate<0.01'], + http_req_duration: ['p(95)<2000'], + }, +}; + +export default function () { + const response = http.get(`${baseUrl}/drops/${dropId}`, { + headers: { + Authorization: `Bearer ${authToken}`, + }, + tags: { + endpoint: 'drop-detail', + test_run: testRun, + }, + }); + + check(response, { + 'Drop 상세 조회 응답이 200이다': (result) => result.status === 200, + '요청한 Drop ID가 반환된다': (result) => { + if (result.status !== 200) { + return false; + } + + try { + return String(result.json('id')) === String(dropId); + } catch (error) { + return false; + } + }, + }); +} + +export function handleSummary(data) { + return { + [`/results/${testRun}.json`]: JSON.stringify(data, null, 2), + }; +} From 2284b5135457c6a8277f267a63a382407565e06a Mon Sep 17 00:00:00 2001 From: Hyiyek Date: Sat, 12 Sep 2026 19:36:06 +0900 Subject: [PATCH 38/98] =?UTF-8?q?test(performance):=20Drop=20=EC=8A=A4?= =?UTF-8?q?=ED=8C=8C=EC=9D=B4=ED=81=AC=20=ED=85=8C=EC=8A=A4=ED=8A=B8=20?= =?UTF-8?q?=EC=8B=A4=ED=96=89=20=EC=9E=90=EB=8F=99=ED=99=94?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- performance/start-drop-detail-spike-test.ps1 | 189 +++++++++++++++++++ 1 file changed, 189 insertions(+) create mode 100644 performance/start-drop-detail-spike-test.ps1 diff --git a/performance/start-drop-detail-spike-test.ps1 b/performance/start-drop-detail-spike-test.ps1 new file mode 100644 index 0000000..cb2d37e --- /dev/null +++ b/performance/start-drop-detail-spike-test.ps1 @@ -0,0 +1,189 @@ +param( + [Parameter(Mandatory = $true)] + [ValidateSet('Before', 'After')] + [string]$Phase, + + [Parameter(Mandatory = $true)] + [ValidateRange(1, [long]::MaxValue)] + [long]$DropId, + + [ValidateRange(1, 1000000)] + [int]$NormalRps = 100, + + [ValidateRange(1, 1000000)] + [int]$SpikeRps = 1000, + + [ValidateRange(1, 1000000)] + [int]$PreAllocatedVUs = 200, + + [ValidateRange(1, 1000000)] + [int]$MaxVUs = 2000 +) + +$ErrorActionPreference = 'Stop' + +if ($SpikeRps -lt $NormalRps) { + throw 'SpikeRps must be greater than or equal to NormalRps.' +} + +if ($MaxVUs -lt $PreAllocatedVUs) { + throw 'MaxVUs must be greater than or equal to PreAllocatedVUs.' +} + +$performanceDirectory = Split-Path -Parent $MyInvocation.MyCommand.Path +$projectDirectory = Split-Path -Parent $performanceDirectory +$environmentFile = Join-Path $projectDirectory '.env.performance.local' +$composeFile = Join-Path $performanceDirectory 'compose.performance.yml' +$k6Directory = Join-Path $performanceDirectory 'k6' +$resultDirectory = Join-Path $performanceDirectory 'results\raw' +$testRun = "drop-detail-spike-$($Phase.ToLower())" +$containerName = "dropit-k6-$testRun" + +if (-not (Test-Path -LiteralPath $environmentFile)) { + throw '.env.performance.local is missing.' +} + +$settings = @{} +Get-Content -LiteralPath $environmentFile | ForEach-Object { + $line = $_.Trim() + + if ($line -and -not $line.StartsWith('#')) { + $parts = $line -split '=', 2 + + if ($parts.Count -eq 2) { + $settings[$parts[0].Trim()] = $parts[1].Trim() + } + } +} + +$healthCheckUrl = $settings['HEALTH_CHECK_URL'] +$baseUrl = $settings['BASE_URL'] +$authEmail = $settings['AUTH_EMAIL'] +$authPassword = $settings['AUTH_PASSWORD'] +$authUsername = $settings['AUTH_USERNAME'] + +if (-not $healthCheckUrl -or -not $baseUrl -or + -not $authEmail -or -not $authPassword -or -not $authUsername) { + throw 'Required performance environment values are missing.' +} + +$loginBody = @{ + email = $authEmail + password = $authPassword +} | ConvertTo-Json + +try { + $tokenResponse = Invoke-RestMethod ` + -Uri "$healthCheckUrl/auth/login" ` + -Method Post ` + -ContentType 'application/json' ` + -Body $loginBody +} catch { + $signupBody = @{ + email = $authEmail + password = $authPassword + username = $authUsername + role = 'USER' + } | ConvertTo-Json + + Invoke-RestMethod ` + -Uri "$healthCheckUrl/auth/signup" ` + -Method Post ` + -ContentType 'application/json' ` + -Body $signupBody | Out-Null + + $tokenResponse = Invoke-RestMethod ` + -Uri "$healthCheckUrl/auth/login" ` + -Method Post ` + -ContentType 'application/json' ` + -Body $loginBody +} + +$authToken = $tokenResponse.accessToken + +if (-not $authToken) { + throw 'Access token was not returned by the login API.' +} + +try { + $dropResponse = Invoke-RestMethod ` + -Uri "$healthCheckUrl/drops/$DropId" ` + -Headers @{ Authorization = "Bearer $authToken" } ` + -Method Get + + if ([long]$dropResponse.id -ne $DropId) { + throw 'The returned Drop ID does not match the requested Drop ID.' + } +} catch { + throw "Drop $DropId cannot be tested. Cause: $($_.Exception.Message)" +} + +New-Item -ItemType Directory -Path $resultDirectory -Force | Out-Null + +docker compose ` + --file $composeFile ` + --env-file $environmentFile ` + up --detach influxdb grafana | Out-Null + +if ($LASTEXITCODE -ne 0) { + throw 'InfluxDB or Grafana could not be started.' +} + +$grafanaReady = $false +for ($attempt = 1; $attempt -le 30; $attempt++) { + curl.exe --silent --fail --output NUL 'http://localhost:3000/api/health' + + if ($LASTEXITCODE -eq 0) { + $grafanaReady = $true + break + } + + Start-Sleep -Seconds 1 +} + +if (-not $grafanaReady) { + throw 'Grafana did not become ready within 30 seconds.' +} + +$existingContainer = docker ps -a --filter "name=^/$containerName$" --format '{{.Names}}' +if ($existingContainer) { + docker rm --force $containerName | Out-Null +} + +$dockerArguments = @( + 'run', '--rm', + '--name', $containerName, + '--network', 'dropit-performance_default', + '--volume', "${k6Directory}:/scripts:ro", + '--volume', "${resultDirectory}:/results", + 'grafana/k6:latest', + 'run', + '--out', 'influxdb=http://influxdb:8086/k6', + '--env', "BASE_URL=$baseUrl", + '--env', "TEST_RUN=$testRun", + '--env', "AUTH_TOKEN=$authToken", + '--env', "DROP_ID=$DropId", + '--env', "NORMAL_RPS=$NormalRps", + '--env', "SPIKE_RPS=$SpikeRps", + '--env', "PRE_ALLOCATED_VUS=$PreAllocatedVUs", + '--env', "MAX_VUS=$MaxVUs", + '--tag', "test_run=$testRun", + '/scripts/drop-detail-spike.js' +) + +Write-Host "Running $testRun against Drop $DropId." +Write-Host "Traffic: $NormalRps RPS to $SpikeRps RPS." +docker @dockerArguments + +if ($LASTEXITCODE -ne 0) { + $resultFile = Join-Path $resultDirectory "$testRun.json" + + if (-not (Test-Path -LiteralPath $resultFile)) { + throw 'k6 failed before producing a result file.' + } + + Write-Warning 'The test completed, but one or more performance thresholds were exceeded.' +} + +Write-Host "Result: $resultDirectory\$testRun.json" +Write-Host 'Grafana: http://localhost:3000' From 6d85448d88daa68b9c982bd2284902da9ca269ef Mon Sep 17 00:00:00 2001 From: Hyiyek Date: Sat, 12 Sep 2026 19:40:17 +0900 Subject: [PATCH 39/98] =?UTF-8?q?test(performance):=20Drop=20=EC=8A=A4?= =?UTF-8?q?=ED=8C=8C=EC=9D=B4=ED=81=AC=20=EB=B9=84=EA=B5=90=20=EB=8C=80?= =?UTF-8?q?=EC=8B=9C=EB=B3=B4=EB=93=9C=20=EC=B6=94=EA=B0=80?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../drop-detail-spike-comparison.json | 139 ++++++++++++++++++ 1 file changed, 139 insertions(+) create mode 100644 performance/grafana/dashboards/drop-detail-spike-comparison.json diff --git a/performance/grafana/dashboards/drop-detail-spike-comparison.json b/performance/grafana/dashboards/drop-detail-spike-comparison.json new file mode 100644 index 0000000..1974d83 --- /dev/null +++ b/performance/grafana/dashboards/drop-detail-spike-comparison.json @@ -0,0 +1,139 @@ +{ + "annotations": { + "list": [] + }, + "description": "판매 시작 시 동일 Drop 상세 조회 스파이크 테스트의 Before/After 비교", + "editable": true, + "graphTooltip": 0, + "panels": [ + { + "datasource": { "type": "influxdb", "uid": "k6-influxdb" }, + "fieldConfig": { "defaults": { "decimals": 2, "unit": "ms" }, "overrides": [] }, + "gridPos": { "h": 5, "w": 6, "x": 0, "y": 0 }, + "id": 1, + "options": { "colorMode": "value", "graphMode": "none", "justifyMode": "center", "reduceOptions": { "calcs": ["lastNotNull"], "fields": "", "values": false }, "textMode": "auto" }, + "targets": [ + { "query": "SELECT mean(\"value\") FROM \"http_req_duration\" WHERE (\"test_run\" = 'drop-detail-spike-before') AND $timeFilter", "rawQuery": true, "refId": "A", "resultFormat": "time_series" } + ], + "title": "Before 평균 응답시간", + "type": "stat" + }, + { + "datasource": { "type": "influxdb", "uid": "k6-influxdb" }, + "fieldConfig": { "defaults": { "decimals": 2, "unit": "ms" }, "overrides": [] }, + "gridPos": { "h": 5, "w": 6, "x": 6, "y": 0 }, + "id": 2, + "options": { "colorMode": "value", "graphMode": "none", "justifyMode": "center", "reduceOptions": { "calcs": ["lastNotNull"], "fields": "", "values": false }, "textMode": "auto" }, + "targets": [ + { "query": "SELECT mean(\"value\") FROM \"http_req_duration\" WHERE (\"test_run\" = 'drop-detail-spike-after') AND $timeFilter", "rawQuery": true, "refId": "A", "resultFormat": "time_series" } + ], + "title": "After 평균 응답시간", + "type": "stat" + }, + { + "datasource": { "type": "influxdb", "uid": "k6-influxdb" }, + "fieldConfig": { "defaults": { "decimals": 2, "unit": "ms" }, "overrides": [] }, + "gridPos": { "h": 5, "w": 6, "x": 12, "y": 0 }, + "id": 3, + "options": { "colorMode": "value", "graphMode": "none", "justifyMode": "center", "reduceOptions": { "calcs": ["lastNotNull"], "fields": "", "values": false }, "textMode": "auto" }, + "targets": [ + { "query": "SELECT percentile(\"value\", 95) FROM \"http_req_duration\" WHERE (\"test_run\" = 'drop-detail-spike-before') AND $timeFilter", "rawQuery": true, "refId": "A", "resultFormat": "time_series" } + ], + "title": "Before p95 응답시간", + "type": "stat" + }, + { + "datasource": { "type": "influxdb", "uid": "k6-influxdb" }, + "fieldConfig": { "defaults": { "decimals": 2, "unit": "ms" }, "overrides": [] }, + "gridPos": { "h": 5, "w": 6, "x": 18, "y": 0 }, + "id": 4, + "options": { "colorMode": "value", "graphMode": "none", "justifyMode": "center", "reduceOptions": { "calcs": ["lastNotNull"], "fields": "", "values": false }, "textMode": "auto" }, + "targets": [ + { "query": "SELECT percentile(\"value\", 95) FROM \"http_req_duration\" WHERE (\"test_run\" = 'drop-detail-spike-after') AND $timeFilter", "rawQuery": true, "refId": "A", "resultFormat": "time_series" } + ], + "title": "After p95 응답시간", + "type": "stat" + }, + { + "datasource": { "type": "influxdb", "uid": "k6-influxdb" }, + "fieldConfig": { "defaults": { "decimals": 2, "unit": "ms" }, "overrides": [] }, + "gridPos": { "h": 5, "w": 6, "x": 0, "y": 5 }, + "id": 5, + "options": { "colorMode": "value", "graphMode": "none", "justifyMode": "center", "reduceOptions": { "calcs": ["lastNotNull"], "fields": "", "values": false }, "textMode": "auto" }, + "targets": [ + { "query": "SELECT percentile(\"value\", 99) FROM \"http_req_duration\" WHERE (\"test_run\" = 'drop-detail-spike-before') AND $timeFilter", "rawQuery": true, "refId": "A", "resultFormat": "time_series" } + ], + "title": "Before p99 응답시간", + "type": "stat" + }, + { + "datasource": { "type": "influxdb", "uid": "k6-influxdb" }, + "fieldConfig": { "defaults": { "decimals": 2, "unit": "ms" }, "overrides": [] }, + "gridPos": { "h": 5, "w": 6, "x": 6, "y": 5 }, + "id": 6, + "options": { "colorMode": "value", "graphMode": "none", "justifyMode": "center", "reduceOptions": { "calcs": ["lastNotNull"], "fields": "", "values": false }, "textMode": "auto" }, + "targets": [ + { "query": "SELECT percentile(\"value\", 99) FROM \"http_req_duration\" WHERE (\"test_run\" = 'drop-detail-spike-after') AND $timeFilter", "rawQuery": true, "refId": "A", "resultFormat": "time_series" } + ], + "title": "After p99 응답시간", + "type": "stat" + }, + { + "datasource": { "type": "influxdb", "uid": "k6-influxdb" }, + "fieldConfig": { "defaults": { "decimals": 2, "unit": "percentunit" }, "overrides": [] }, + "gridPos": { "h": 5, "w": 6, "x": 12, "y": 5 }, + "id": 7, + "options": { "colorMode": "value", "graphMode": "none", "justifyMode": "center", "reduceOptions": { "calcs": ["lastNotNull"], "fields": "", "values": false }, "textMode": "auto" }, + "targets": [ + { "query": "SELECT mean(\"value\") FROM \"http_req_failed\" WHERE (\"test_run\" = 'drop-detail-spike-before') AND $timeFilter", "rawQuery": true, "refId": "A", "resultFormat": "time_series" } + ], + "title": "Before HTTP 실패율", + "type": "stat" + }, + { + "datasource": { "type": "influxdb", "uid": "k6-influxdb" }, + "fieldConfig": { "defaults": { "decimals": 2, "unit": "percentunit" }, "overrides": [] }, + "gridPos": { "h": 5, "w": 6, "x": 18, "y": 5 }, + "id": 8, + "options": { "colorMode": "value", "graphMode": "none", "justifyMode": "center", "reduceOptions": { "calcs": ["lastNotNull"], "fields": "", "values": false }, "textMode": "auto" }, + "targets": [ + { "query": "SELECT mean(\"value\") FROM \"http_req_failed\" WHERE (\"test_run\" = 'drop-detail-spike-after') AND $timeFilter", "rawQuery": true, "refId": "A", "resultFormat": "time_series" } + ], + "title": "After HTTP 실패율", + "type": "stat" + }, + { + "datasource": { "type": "influxdb", "uid": "k6-influxdb" }, + "fieldConfig": { "defaults": { "decimals": 0, "unit": "short" }, "overrides": [] }, + "gridPos": { "h": 5, "w": 12, "x": 0, "y": 10 }, + "id": 9, + "options": { "colorMode": "value", "graphMode": "none", "justifyMode": "center", "reduceOptions": { "calcs": ["lastNotNull"], "fields": "", "values": false }, "textMode": "auto" }, + "targets": [ + { "query": "SELECT sum(\"value\") FROM \"http_reqs\" WHERE (\"test_run\" = 'drop-detail-spike-before') AND $timeFilter", "rawQuery": true, "refId": "A", "resultFormat": "time_series" } + ], + "title": "Before 완료 HTTP 요청 수", + "type": "stat" + }, + { + "datasource": { "type": "influxdb", "uid": "k6-influxdb" }, + "fieldConfig": { "defaults": { "decimals": 0, "unit": "short" }, "overrides": [] }, + "gridPos": { "h": 5, "w": 12, "x": 12, "y": 10 }, + "id": 10, + "options": { "colorMode": "value", "graphMode": "none", "justifyMode": "center", "reduceOptions": { "calcs": ["lastNotNull"], "fields": "", "values": false }, "textMode": "auto" }, + "targets": [ + { "query": "SELECT sum(\"value\") FROM \"http_reqs\" WHERE (\"test_run\" = 'drop-detail-spike-after') AND $timeFilter", "rawQuery": true, "refId": "A", "resultFormat": "time_series" } + ], + "title": "After 완료 HTTP 요청 수", + "type": "stat" + } + ], + "refresh": "5s", + "schemaVersion": 41, + "tags": ["k6", "drop", "spike", "before-after"], + "templating": { "list": [] }, + "time": { "from": "now-7d", "to": "now" }, + "timezone": "browser", + "title": "Drop Detail Spike Before After", + "uid": "drop-detail-spike-comparison", + "version": 1 +} From 1a55a3e4e23e4fbc1354c29193390c16918938b2 Mon Sep 17 00:00:00 2001 From: Hyiyek Date: Sat, 12 Sep 2026 19:49:45 +0900 Subject: [PATCH 40/98] =?UTF-8?q?docs(performance):=20Drop=20=EC=83=81?= =?UTF-8?q?=EC=84=B8=20=EC=A1=B0=ED=9A=8C=20Before=20=EA=B2=B0=EA=B3=BC=20?= =?UTF-8?q?=EA=B8=B0=EB=A1=9D?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../results/drop-detail-spike/README.md | 65 +++++++++++++++++++ 1 file changed, 65 insertions(+) create mode 100644 performance/results/drop-detail-spike/README.md diff --git a/performance/results/drop-detail-spike/README.md b/performance/results/drop-detail-spike/README.md new file mode 100644 index 0000000..87a81c1 --- /dev/null +++ b/performance/results/drop-detail-spike/README.md @@ -0,0 +1,65 @@ +# Drop 상세 조회 판매 시작 스파이크 테스트 + +## 테스트 목적 + +판매 시작 시각에 사용자가 동일한 Drop 상세 페이지로 몰리는 상황을 재현하고, +현재 JPA 직접 조회 구조의 처리 한계를 Redis Cache 적용 전 기준으로 기록한다. + +대상 API: + +```http +GET /drops/{dropId} +``` + +## Before 테스트 조건 + +| 항목 | 값 | +|---|---:| +| 측정일 | 2026-09-12 | +| 대상 Drop ID | 1,262,071 | +| 평상시 부하 | 100 RPS, 30초 | +| 스파이크 | 1초 안에 1,000 RPS | +| 스파이크 유지 | 1분 | +| 최대 VU | 2,000 | +| 실행 환경 | Windows 로컬 Spring 서버, Docker k6·InfluxDB·Grafana·MySQL | + +## Before 결과 + +| 지표 | Before | +|---|---:| +| 완료 HTTP 요청 | 40,084건 | +| 실제 평균 처리량 | 377.31 RPS | +| 평균 응답시간 | 3,428.22ms | +| p95 응답시간 | 5,177.81ms | +| p99 응답시간 | 5,573.63ms | +| 최대 응답시간 | 6,934.71ms | +| HTTP 실패율 | 0% | +| 응답 검증 성공률 | 100% | +| 시작하지 못한 요청 | 30,965건 | +| 사용된 최대 VU | 2,000 | + +## 현재 코드 흐름 + +```text +k6 → JwtFilter → DropController.getOne() + → DropService.getOne() + → DropRepository.findById() + → DropResponse.from() + → HTTP 응답 +``` + +`DropService.getOne()`은 요청마다 `DropRepository.findById()`를 호출한다. +같은 Drop을 반복 조회해도 애플리케이션 수준의 캐시는 아직 사용하지 않는다. + +## 해석 + +- 서버 프로세스는 종료되지 않았고 완료된 HTTP 요청의 실패율은 0%였다. +- 목표 1,000 RPS를 유지하려고 k6가 최대 2,000 VU를 모두 사용했다. +- 실제 완료 처리량은 평균 377.31 RPS였으며 30,965회는 필요한 VU를 확보하지 못해 시작되지 않았다. +- p95가 목표 2초를 넘은 5.18초이므로 사용자 관점에서는 판매 시작 직후 심각한 지연이 발생한 상태다. +- 이번 결과만으로 DB·서버 스레드·CPU 중 주 병목을 확정할 수 없다. 다음 단계에서 서버 내부 지표를 수집한 뒤 개선 대상을 결정한다. + +## 비교 원칙 + +Redis 적용 후에도 같은 Drop ID, 요청 단계, 실행 시간, 최대 VU, 인증 방식과 로컬 환경을 유지한다. +원본 k6 JSON은 `performance/results/raw`에 로컬로 저장하고 Git에는 포함하지 않는다. From b9a36f72170ec339e8dba766131bb1a68516055f Mon Sep 17 00:00:00 2001 From: Hyiyek Date: Sat, 12 Sep 2026 19:53:05 +0900 Subject: [PATCH 41/98] =?UTF-8?q?perf(drop):=20=EC=83=81=EC=84=B8=20?= =?UTF-8?q?=EC=A1=B0=ED=9A=8C=20fetch=20join=20=EC=BF=BC=EB=A6=AC=20?= =?UTF-8?q?=EC=B6=94=EA=B0=80?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../java/com/dropit/drop/repository/DropRepository.java | 9 +++++++++ 1 file changed, 9 insertions(+) diff --git a/src/main/java/com/dropit/drop/repository/DropRepository.java b/src/main/java/com/dropit/drop/repository/DropRepository.java index 4305ba6..4bd3983 100644 --- a/src/main/java/com/dropit/drop/repository/DropRepository.java +++ b/src/main/java/com/dropit/drop/repository/DropRepository.java @@ -14,6 +14,15 @@ public interface DropRepository extends JpaRepository, DropRepositoryCustom { + @Query(""" + select d + from Drop d + join fetch d.product p + join fetch p.seller + where d.id = :dropId + """) + Optional findDetailById(@Param("dropId") Long dropId); + boolean existsByProductId(Long productId); Page findAllByVisibleTrue(Pageable pageable); From 4928f0566bea3ec772c31bcae07473b5e5a48172 Mon Sep 17 00:00:00 2001 From: Hyiyek Date: Sat, 12 Sep 2026 19:54:44 +0900 Subject: [PATCH 42/98] =?UTF-8?q?perf(drop):=20=EC=83=81=EC=84=B8=20?= =?UTF-8?q?=EC=A1=B0=ED=9A=8C=EC=97=90=20fetch=20join=20=EC=A0=81=EC=9A=A9?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- src/main/java/com/dropit/drop/service/DropService.java | 2 +- src/test/java/com/dropit/drop/service/DropServiceTest.java | 4 ++-- 2 files changed, 3 insertions(+), 3 deletions(-) diff --git a/src/main/java/com/dropit/drop/service/DropService.java b/src/main/java/com/dropit/drop/service/DropService.java index 6b6298a..a6ebf38 100644 --- a/src/main/java/com/dropit/drop/service/DropService.java +++ b/src/main/java/com/dropit/drop/service/DropService.java @@ -64,7 +64,7 @@ public Page getAll( @Transactional(readOnly = true) public DropResponse getOne(Long dropId) { - Drop drop = dropRepository.findById(dropId) + Drop drop = dropRepository.findDetailById(dropId) .orElseThrow(() -> new ServiceException(DropErrorCode.DROP_NOT_FOUND)); if (!drop.isVisible()) { diff --git a/src/test/java/com/dropit/drop/service/DropServiceTest.java b/src/test/java/com/dropit/drop/service/DropServiceTest.java index ad4c4c2..86e2799 100644 --- a/src/test/java/com/dropit/drop/service/DropServiceTest.java +++ b/src/test/java/com/dropit/drop/service/DropServiceTest.java @@ -107,7 +107,7 @@ void rejectCreatingDropForAnotherSellersProduct() { @DisplayName("공개된 드랍 상세 정보를 조회할 수 있다") void getOneDrop() { Drop drop = saveDrop(1L, 10L, 100L, LocalDateTime.now().plusDays(1)); - when(dropRepository.findById(100L)).thenReturn(Optional.of(drop)); + when(dropRepository.findDetailById(100L)).thenReturn(Optional.of(drop)); DropResponse response = dropService.getOne(100L); @@ -216,7 +216,7 @@ void rejectHiddenDropFromPublicDetail() { LocalDateTime.now().plusDays(1), LocalDateTime.now().plusDays(2) ); - when(dropRepository.findById(100L)).thenReturn(Optional.of(hiddenDrop)); + when(dropRepository.findDetailById(100L)).thenReturn(Optional.of(hiddenDrop)); ServiceException exception = assertThrows( ServiceException.class, From 3c3385f5a51103f0c3ea570050715a20e5ace9b7 Mon Sep 17 00:00:00 2001 From: Hyiyek Date: Sat, 12 Sep 2026 19:57:24 +0900 Subject: [PATCH 43/98] =?UTF-8?q?test(performance):=20=EC=BF=BC=EB=A6=AC?= =?UTF-8?q?=20=EA=B0=9C=EC=84=A0=20=EC=B8=A1=EC=A0=95=20=EB=8B=A8=EA=B3=84?= =?UTF-8?q?=20=EB=B6=84=EB=A6=AC?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- performance/start-drop-detail-spike-test.ps1 | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/performance/start-drop-detail-spike-test.ps1 b/performance/start-drop-detail-spike-test.ps1 index cb2d37e..6a8a9f8 100644 --- a/performance/start-drop-detail-spike-test.ps1 +++ b/performance/start-drop-detail-spike-test.ps1 @@ -1,6 +1,6 @@ param( [Parameter(Mandatory = $true)] - [ValidateSet('Before', 'After')] + [ValidateSet('Before', 'Query', 'After')] [string]$Phase, [Parameter(Mandatory = $true)] From 188f6feaa420a5c1cc1c0bdb799a753a8ac4fb6f Mon Sep 17 00:00:00 2001 From: Hyiyek Date: Sat, 12 Sep 2026 20:09:37 +0900 Subject: [PATCH 44/98] =?UTF-8?q?docs(performance):=20fetch=20join=20?= =?UTF-8?q?=EA=B0=9C=EC=84=A0=20=EA=B2=B0=EA=B3=BC=20=EA=B8=B0=EB=A1=9D?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../results/drop-detail-spike/README.md | 24 ++++++++++++++++++- 1 file changed, 23 insertions(+), 1 deletion(-) diff --git a/performance/results/drop-detail-spike/README.md b/performance/results/drop-detail-spike/README.md index 87a81c1..799530c 100644 --- a/performance/results/drop-detail-spike/README.md +++ b/performance/results/drop-detail-spike/README.md @@ -38,6 +38,19 @@ GET /drops/{dropId} | 시작하지 못한 요청 | 30,965건 | | 사용된 최대 VU | 2,000 | +## fetch join 적용 결과 + +| 지표 | Before | fetch join | 변화 | +|---|---:|---:|---:| +| 완료 HTTP 요청 | 40,084건 | 52,944건 | 32.08% 증가 | +| 실제 평균 처리량 | 377.31 RPS | 499.50 RPS | 32.38% 증가 | +| 평균 응답시간 | 3,428.22ms | 2,377.30ms | 30.65% 감소 | +| p95 응답시간 | 5,177.81ms | 3,243.02ms | 37.37% 감소 | +| p99 응답시간 | 5,573.63ms | 3,675.47ms | 34.05% 감소 | +| HTTP 실패율 | 0% | 0% | 동일 | +| 시작하지 못한 요청 | 30,965건 | 18,105건 | 41.53% 감소 | +| 사용된 최대 VU | 2,000 | 2,000 | 동일 | + ## 현재 코드 흐름 ```text @@ -51,13 +64,22 @@ k6 → JwtFilter → DropController.getOne() `DropService.getOne()`은 요청마다 `DropRepository.findById()`를 호출한다. 같은 Drop을 반복 조회해도 애플리케이션 수준의 캐시는 아직 사용하지 않는다. +fetch join 단계에서는 `findById()`를 다음 조회로 교체했다. + +```text +DropRepository.findDetailById() +→ Drop·Product·Seller를 한 SQL에서 fetch join +``` + ## 해석 - 서버 프로세스는 종료되지 않았고 완료된 HTTP 요청의 실패율은 0%였다. - 목표 1,000 RPS를 유지하려고 k6가 최대 2,000 VU를 모두 사용했다. - 실제 완료 처리량은 평균 377.31 RPS였으며 30,965회는 필요한 VU를 확보하지 못해 시작되지 않았다. - p95가 목표 2초를 넘은 5.18초이므로 사용자 관점에서는 판매 시작 직후 심각한 지연이 발생한 상태다. -- 이번 결과만으로 DB·서버 스레드·CPU 중 주 병목을 확정할 수 없다. 다음 단계에서 서버 내부 지표를 수집한 뒤 개선 대상을 결정한다. +- fetch join으로 처리량과 응답시간이 개선되어 연관 데이터 조회 왕복이 병목에 영향을 줬음을 확인했다. +- fetch join 이후에도 p95는 3.24초이고 18,105회가 시작되지 않아 DB 직접 조회 구조의 한계가 남았다. +- 다음 단계에서는 동일 Drop 반복 조회를 Redis Cache로 처리하고 같은 조건으로 최종 측정한다. ## 비교 원칙 From f3cf53d34e2449903529f4a91557f6921a11178b Mon Sep 17 00:00:00 2001 From: Hyiyek Date: Sat, 12 Sep 2026 20:13:34 +0900 Subject: [PATCH 45/98] =?UTF-8?q?feat(cache):=20Drop=20=EC=83=81=EC=84=B8?= =?UTF-8?q?=20Redis=20=EC=BA=90=EC=8B=9C=20=EC=84=A4=EC=A0=95=20=EC=B6=94?= =?UTF-8?q?=EA=B0=80?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../global/config/RedisCacheConfig.java | 44 +++++++++++++++++++ 1 file changed, 44 insertions(+) create mode 100644 src/main/java/com/dropit/global/config/RedisCacheConfig.java diff --git a/src/main/java/com/dropit/global/config/RedisCacheConfig.java b/src/main/java/com/dropit/global/config/RedisCacheConfig.java new file mode 100644 index 0000000..b1246ad --- /dev/null +++ b/src/main/java/com/dropit/global/config/RedisCacheConfig.java @@ -0,0 +1,44 @@ +package com.dropit.global.config; + +import org.springframework.cache.annotation.EnableCaching; +import org.springframework.context.annotation.Bean; +import org.springframework.context.annotation.Configuration; +import org.springframework.data.redis.cache.RedisCacheConfiguration; +import org.springframework.data.redis.cache.RedisCacheManager; +import org.springframework.data.redis.connection.RedisConnectionFactory; +import org.springframework.data.redis.serializer.RedisSerializationContext; +import org.springframework.data.redis.serializer.RedisSerializer; + +import java.time.Duration; + +@Configuration +@EnableCaching +public class RedisCacheConfig { + + public static final String DROP_DETAIL_CACHE = "dropDetail"; + public static final Duration DROP_DETAIL_TTL = Duration.ofSeconds(3); + + @Bean + public RedisCacheManager redisCacheManager(RedisConnectionFactory connectionFactory) { + RedisCacheConfiguration defaultConfiguration = RedisCacheConfiguration.defaultCacheConfig() + .disableCachingNullValues() + .computePrefixWith(cacheName -> "dropit::" + cacheName + "::") + .serializeKeysWith(RedisSerializationContext.SerializationPair.fromSerializer( + RedisSerializer.string() + )) + .serializeValuesWith(RedisSerializationContext.SerializationPair.fromSerializer( + RedisSerializer.json() + )); + + return RedisCacheManager.builder(connectionFactory) + .cacheDefaults(defaultConfiguration) + .withCacheConfiguration( + DROP_DETAIL_CACHE, + defaultConfiguration.entryTtl(DROP_DETAIL_TTL) + ) + .disableCreateOnMissingCache() + .transactionAware() + .enableStatistics() + .build(); + } +} From 8b4343fcc08ef0b6d62413f1cbbb9aad20d6cd2f Mon Sep 17 00:00:00 2001 From: Hyiyek Date: Sat, 12 Sep 2026 20:28:58 +0900 Subject: [PATCH 46/98] =?UTF-8?q?feat(drop):=20=EC=83=81=EC=84=B8=20?= =?UTF-8?q?=EC=A1=B0=ED=9A=8C=20Redis=20=EC=BA=90=EC=8B=9C=20=EC=A0=81?= =?UTF-8?q?=EC=9A=A9?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../com/dropit/drop/service/DropService.java | 7 ++ .../service/DropCacheIntegrationTest.java | 100 ++++++++++++++++++ 2 files changed, 107 insertions(+) create mode 100644 src/test/java/com/dropit/drop/service/DropCacheIntegrationTest.java diff --git a/src/main/java/com/dropit/drop/service/DropService.java b/src/main/java/com/dropit/drop/service/DropService.java index a6ebf38..0e1cfc7 100644 --- a/src/main/java/com/dropit/drop/service/DropService.java +++ b/src/main/java/com/dropit/drop/service/DropService.java @@ -8,11 +8,14 @@ import com.dropit.drop.entity.Drop; import com.dropit.drop.exception.DropErrorCode; import com.dropit.drop.repository.DropRepository; +import com.dropit.global.config.RedisCacheConfig; import com.dropit.global.exception.ServiceException; import com.dropit.product.entity.Product; import com.dropit.product.exception.ProductErrorCode; import com.dropit.product.repository.ProductRepository; import lombok.RequiredArgsConstructor; +import org.springframework.cache.annotation.CacheEvict; +import org.springframework.cache.annotation.Cacheable; import org.springframework.data.domain.Page; import org.springframework.data.domain.Pageable; import org.springframework.stereotype.Service; @@ -63,6 +66,7 @@ public Page getAll( } @Transactional(readOnly = true) + @Cacheable(cacheNames = RedisCacheConfig.DROP_DETAIL_CACHE, key = "#dropId", sync = true) public DropResponse getOne(Long dropId) { Drop drop = dropRepository.findDetailById(dropId) .orElseThrow(() -> new ServiceException(DropErrorCode.DROP_NOT_FOUND)); @@ -101,6 +105,7 @@ public Page getDropsForSellerManagement( } @Transactional + @CacheEvict(cacheNames = RedisCacheConfig.DROP_DETAIL_CACHE, key = "#dropId") public DropResponse update(Long sellerId, Long dropId, DropUpdateRequest request) { Drop drop = dropRepository.findById(dropId) .orElseThrow(() -> new ServiceException(DropErrorCode.DROP_NOT_FOUND)); @@ -124,6 +129,7 @@ public DropResponse update(Long sellerId, Long dropId, DropUpdateRequest request } @Transactional + @CacheEvict(cacheNames = RedisCacheConfig.DROP_DETAIL_CACHE, key = "#dropId") public DropResponse changeVisibility(Long sellerId, Long dropId, DropVisibilityUpdateRequest request) { Drop drop = dropRepository.findById(dropId) .orElseThrow(() -> new ServiceException(DropErrorCode.DROP_NOT_FOUND)); @@ -138,6 +144,7 @@ public DropResponse changeVisibility(Long sellerId, Long dropId, DropVisibilityU } @Transactional + @CacheEvict(cacheNames = RedisCacheConfig.DROP_DETAIL_CACHE, key = "#dropId") public void delete(Long sellerId, Long dropId) { Drop drop = dropRepository.findById(dropId) .orElseThrow(() -> new ServiceException(DropErrorCode.DROP_NOT_FOUND)); diff --git a/src/test/java/com/dropit/drop/service/DropCacheIntegrationTest.java b/src/test/java/com/dropit/drop/service/DropCacheIntegrationTest.java new file mode 100644 index 0000000..4f30829 --- /dev/null +++ b/src/test/java/com/dropit/drop/service/DropCacheIntegrationTest.java @@ -0,0 +1,100 @@ +package com.dropit.drop.service; + +import com.dropit.drop.dto.request.DropVisibilityUpdateRequest; +import com.dropit.drop.dto.response.DropResponse; +import com.dropit.drop.entity.Drop; +import com.dropit.drop.repository.DropRepository; +import com.dropit.global.config.RedisCacheConfig; +import com.dropit.global.storage.S3ImageService; +import com.dropit.product.entity.Product; +import com.dropit.user.entity.User; +import com.dropit.user.entity.UserRole; +import org.junit.jupiter.api.BeforeEach; +import org.junit.jupiter.api.Test; +import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.boot.test.context.SpringBootTest; +import org.springframework.cache.Cache; +import org.springframework.cache.CacheManager; +import org.springframework.test.context.bean.override.mockito.MockitoBean; +import org.springframework.test.util.ReflectionTestUtils; + +import java.math.BigDecimal; +import java.time.LocalDateTime; +import java.util.Optional; + +import static org.junit.jupiter.api.Assertions.assertEquals; +import static org.junit.jupiter.api.Assertions.assertNotNull; +import static org.junit.jupiter.api.Assertions.assertNull; +import static org.mockito.Mockito.times; +import static org.mockito.Mockito.verify; +import static org.mockito.Mockito.when; + +@SpringBootTest(properties = "spring.jpa.hibernate.ddl-auto=none") +class DropCacheIntegrationTest { + + @Autowired + private DropService dropService; + + @Autowired + private CacheManager cacheManager; + + @MockitoBean + private DropRepository dropRepository; + + @MockitoBean + private S3ImageService s3ImageService; + + private Cache dropDetailCache; + + @BeforeEach + void clearCache() { + dropDetailCache = cacheManager.getCache(RedisCacheConfig.DROP_DETAIL_CACHE); + assertNotNull(dropDetailCache); + dropDetailCache.clear(); + } + + @Test + void repeatedDetailRequestUsesRedisCache() { + Drop drop = visibleDrop(); + when(dropRepository.findDetailById(100L)).thenReturn(Optional.of(drop)); + + DropResponse first = dropService.getOne(100L); + DropResponse second = dropService.getOne(100L); + + assertEquals(first, second); + verify(dropRepository, times(1)).findDetailById(100L); + assertNotNull(dropDetailCache.get(100L, DropResponse.class)); + } + + @Test + void changingVisibilityEvictsCachedDetail() { + Drop drop = visibleDrop(); + when(dropRepository.findDetailById(100L)).thenReturn(Optional.of(drop)); + when(dropRepository.findById(100L)).thenReturn(Optional.of(drop)); + dropService.getOne(100L); + + dropService.changeVisibility(1L, 100L, new DropVisibilityUpdateRequest(false)); + + assertNull(dropDetailCache.get(100L)); + } + + private Drop visibleDrop() { + User seller = new User("seller@cache.test", "password", "cache-seller", UserRole.SELLER); + ReflectionTestUtils.setField(seller, "id", 1L); + Product product = new Product(seller, "Limited Hoodie", "Cache integration fixture", null); + ReflectionTestUtils.setField(product, "id", 10L); + LocalDateTime openAt = LocalDateTime.now().plusDays(1); + Drop drop = new Drop( + product, + new BigDecimal("59000"), + 100, + 10, + 2, + openAt, + openAt.plusDays(1) + ); + drop.changeVisibility(true); + ReflectionTestUtils.setField(drop, "id", 100L); + return drop; + } +} From 93617e6c0c30629d0079a417f02f8f229fc0f514 Mon Sep 17 00:00:00 2001 From: Hyiyek Date: Sat, 12 Sep 2026 20:48:43 +0900 Subject: [PATCH 47/98] =?UTF-8?q?docs(performance):=20Drop=20=EC=83=81?= =?UTF-8?q?=EC=84=B8=20=EC=BA=90=EC=8B=9C=20=EA=B0=9C=EC=84=A0=20=EA=B2=B0?= =?UTF-8?q?=EA=B3=BC=20=EA=B8=B0=EB=A1=9D?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../results/drop-detail-spike/README.md | 149 +++++++++++------- .../results/drop-detail-spike/comparison.png | Bin 0 -> 41377 bytes .../grafana-before-after.png | Bin 0 -> 81409 bytes 3 files changed, 90 insertions(+), 59 deletions(-) create mode 100644 performance/results/drop-detail-spike/comparison.png create mode 100644 performance/results/drop-detail-spike/grafana-before-after.png diff --git a/performance/results/drop-detail-spike/README.md b/performance/results/drop-detail-spike/README.md index 799530c..947030d 100644 --- a/performance/results/drop-detail-spike/README.md +++ b/performance/results/drop-detail-spike/README.md @@ -2,86 +2,117 @@ ## 테스트 목적 -판매 시작 시각에 사용자가 동일한 Drop 상세 페이지로 몰리는 상황을 재현하고, -현재 JPA 직접 조회 구조의 처리 한계를 Redis Cache 적용 전 기준으로 기록한다. - -대상 API: +판매 시작 시각에 사용자가 같은 한정판 상품의 Drop 상세 페이지로 몰리는 상황을 재현했다. +프론트 화면으로 보면 사용자가 판매 페이지를 새로고침하거나 상세 정보를 확인하는 요청이다. ```http GET /drops/{dropId} ``` -## Before 테스트 조건 +목표는 1초 안에 100 RPS에서 1,000 RPS로 증가해도 p95 응답시간 2초 미만과 HTTP 실패율 1% 미만을 유지하는 것이다. + +## 테스트 조건 | 항목 | 값 | |---|---:| | 측정일 | 2026-09-12 | | 대상 Drop ID | 1,262,071 | | 평상시 부하 | 100 RPS, 30초 | -| 스파이크 | 1초 안에 1,000 RPS | +| 판매 시작 스파이크 | 1초 안에 1,000 RPS | | 스파이크 유지 | 1분 | +| 감소 구간 | 15초 | | 최대 VU | 2,000 | -| 실행 환경 | Windows 로컬 Spring 서버, Docker k6·InfluxDB·Grafana·MySQL | +| 실행 환경 | Windows 로컬 Spring 서버, Docker k6·InfluxDB·Grafana·MySQL·Redis | -## Before 결과 +각 단계는 같은 Drop ID, 부하 단계, JWT 인증, 실행 시간과 최대 VU로 1회씩 측정했다. -| 지표 | Before | -|---|---:| -| 완료 HTTP 요청 | 40,084건 | -| 실제 평균 처리량 | 377.31 RPS | -| 평균 응답시간 | 3,428.22ms | -| p95 응답시간 | 5,177.81ms | -| p99 응답시간 | 5,573.63ms | -| 최대 응답시간 | 6,934.71ms | -| HTTP 실패율 | 0% | -| 응답 검증 성공률 | 100% | -| 시작하지 못한 요청 | 30,965건 | -| 사용된 최대 VU | 2,000 | - -## fetch join 적용 결과 - -| 지표 | Before | fetch join | 변화 | -|---|---:|---:|---:| -| 완료 HTTP 요청 | 40,084건 | 52,944건 | 32.08% 증가 | -| 실제 평균 처리량 | 377.31 RPS | 499.50 RPS | 32.38% 증가 | -| 평균 응답시간 | 3,428.22ms | 2,377.30ms | 30.65% 감소 | -| p95 응답시간 | 5,177.81ms | 3,243.02ms | 37.37% 감소 | -| p99 응답시간 | 5,573.63ms | 3,675.47ms | 34.05% 감소 | -| HTTP 실패율 | 0% | 0% | 동일 | -| 시작하지 못한 요청 | 30,965건 | 18,105건 | 41.53% 감소 | -| 사용된 최대 VU | 2,000 | 2,000 | 동일 | - -## 현재 코드 흐름 - -```text -k6 → JwtFilter → DropController.getOne() - → DropService.getOne() - → DropRepository.findById() - → DropResponse.from() - → HTTP 응답 +## Before / After 결과 + +| 지표 | 기본 JPA | fetch join | Redis Cache | Before → After | +|---|---:|---:|---:|---:| +| 완료 HTTP 요청 | 40,084건 | 52,944건 | 71,049건 | 77.25% 증가 | +| 실제 평균 처리량 | 377.31 RPS | 499.50 RPS | 670.31 RPS | 77.66% 증가 | +| 평균 응답시간 | 3,428.22ms | 2,377.30ms | 6.49ms | 99.81% 감소 | +| p95 응답시간 | 5,177.79ms | 3,243.02ms | 20.12ms | 99.61% 감소 | +| p99 응답시간 | 5,573.63ms | 3,675.47ms | 51.93ms | 99.07% 감소 | +| 최대 응답시간 | 6,934.71ms | 4,560.20ms | 381.40ms | 94.50% 감소 | +| HTTP 실패율 | 0% | 0% | 0% | 동일 | +| 시작하지 못한 요청 | 30,965건 | 18,105건 | 0건 | 100% 감소 | +| 최대 활성 VU | 2,000명 | 2,000명 | 75명 | 96.25% 감소 | + +![Drop 상세 조회 성능 비교](./comparison.png) + +## 단계별 코드 변화 + +### 1. 기본 JPA 조회 + +```java +dropRepository.findById(dropId) +``` + +요청마다 DB에서 Drop을 조회했다. 응답을 만들면서 Product와 Seller도 사용하므로 연관 데이터 조회 비용까지 반복됐다. + +### 2. fetch join 적용 + +```java +@Query(""" + select d + from Drop d + join fetch d.product p + join fetch p.seller + where d.id = :dropId + """) +Optional findDetailById(@Param("dropId") Long dropId); +``` + +Drop·Product·Seller를 한 SQL로 가져와 DB 왕복을 줄였다. 그 결과 p95는 5.18초에서 3.24초로 줄었지만, 같은 데이터를 요청마다 DB에서 읽는 구조는 남았다. + +### 3. Redis Cache 적용 + +```java +@Cacheable(cacheNames = RedisCacheConfig.DROP_DETAIL_CACHE, + key = "#dropId", sync = true) +public DropResponse getOne(Long dropId) { + // 캐시가 없을 때만 DB 조회 +} ``` -`DropService.getOne()`은 요청마다 `DropRepository.findById()`를 호출한다. -같은 Drop을 반복 조회해도 애플리케이션 수준의 캐시는 아직 사용하지 않는다. +첫 요청의 `DropResponse`를 Redis에 저장하고 같은 Drop ID 요청은 3초 동안 저장된 응답을 재사용한다. `sync = true`는 한 애플리케이션 인스턴스에서 캐시가 비었을 때 여러 요청이 동시에 DB로 몰리는 현상을 줄인다. -fetch join 단계에서는 `findById()`를 다음 조회로 교체했다. +수정·공개 여부 변경·삭제 시에는 다음 설정으로 해당 Drop 캐시를 제거한다. -```text -DropRepository.findDetailById() -→ Drop·Product·Seller를 한 SQL에서 fetch join +```java +@CacheEvict(cacheNames = RedisCacheConfig.DROP_DETAIL_CACHE, key = "#dropId") ``` -## 해석 +## 캐시 정책 + +| 정책 | 선택 | 이유 | +|---|---|---| +| 캐시 대상 | Drop 상세 응답 | 판매 시작 시 같은 Drop에 조회가 집중됨 | +| TTL | 3초 | 상태와 남은 재고가 오래된 값으로 보이는 시간을 제한 | +| 캐시 키 | Drop ID | 상세 API의 조회 단위와 일치 | +| 무효화 | 수정·공개 변경·삭제 시 즉시 제거 | 변경 전 응답이 남는 문제 방지 | +| 재고 정확성 | 구매 시 DB에서 다시 검증 | 조회 캐시는 화면 표시용이며 주문 성공 여부를 결정하지 않음 | + +실제 확인 결과 상세 조회 직후 `dropit::dropDetail::1262071` 키가 생성됐고 약 3초 TTL이 적용됐다. 통합 테스트에서는 같은 Drop을 두 번 조회해 Repository가 한 번만 호출되는 것과 공개 여부 변경 후 캐시가 제거되는 것을 검증했다. + +## Grafana 측정 화면 + +![Grafana Drop 상세 조회 Before After](./grafana-before-after.png) + +## 결론 + +- 기본 JPA 단계는 1,000 RPS를 만들기 위해 최대 VU 2,000명을 모두 사용했지만 30,965건을 시작하지 못했다. +- fetch join은 연관 조회 비용을 줄였으나 p95 3.24초와 누락 요청 18,105건이 남았다. +- Redis Cache 적용 후 목표 요청 71,049건을 모두 처리했고 시작하지 못한 요청은 0건이었다. +- p95는 20.12ms로 목표 2초를 충족했고 HTTP 실패율은 0%였다. -- 서버 프로세스는 종료되지 않았고 완료된 HTTP 요청의 실패율은 0%였다. -- 목표 1,000 RPS를 유지하려고 k6가 최대 2,000 VU를 모두 사용했다. -- 실제 완료 처리량은 평균 377.31 RPS였으며 30,965회는 필요한 VU를 확보하지 못해 시작되지 않았다. -- p95가 목표 2초를 넘은 5.18초이므로 사용자 관점에서는 판매 시작 직후 심각한 지연이 발생한 상태다. -- fetch join으로 처리량과 응답시간이 개선되어 연관 데이터 조회 왕복이 병목에 영향을 줬음을 확인했다. -- fetch join 이후에도 p95는 3.24초이고 18,105회가 시작되지 않아 DB 직접 조회 구조의 한계가 남았다. -- 다음 단계에서는 동일 Drop 반복 조회를 Redis Cache로 처리하고 같은 조건으로 최종 측정한다. +## 한계와 다음 검증 -## 비교 원칙 +- 로컬 단일 서버에서 각 단계를 1회 측정한 결과이므로 운영 용량으로 일반화할 수 없다. +- `sync = true`는 단일 인스턴스 안에서만 동시 캐시 생성을 막는다. 다중 서버 환경에서는 분산 락이나 사전 캐시 적재를 별도로 검토해야 한다. +- 3초 동안 상태와 표시용 남은 재고가 실제 값보다 늦게 보일 수 있다. 구매 처리는 반드시 DB 또는 원자적 재고 저장소를 기준으로 판단해야 한다. +- 다음 단계에서는 테스트를 여러 번 반복해 중앙값을 비교하고, Spring·JVM·DB·Redis 지표를 함께 수집해 병목 이동을 확인한다. -Redis 적용 후에도 같은 Drop ID, 요청 단계, 실행 시간, 최대 VU, 인증 방식과 로컬 환경을 유지한다. -원본 k6 JSON은 `performance/results/raw`에 로컬로 저장하고 Git에는 포함하지 않는다. +원본 k6 JSON은 `performance/results/raw`에 로컬로만 보관하며 Git에는 포함하지 않는다. diff --git a/performance/results/drop-detail-spike/comparison.png b/performance/results/drop-detail-spike/comparison.png new file mode 100644 index 0000000000000000000000000000000000000000..666634ebf0988c75f7a6902d37a0ef227de099d3 GIT binary patch literal 41377 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 Lv3AXs+tL3EJ8b!i literal 0 HcmV?d00001 diff --git a/performance/results/drop-detail-spike/grafana-before-after.png b/performance/results/drop-detail-spike/grafana-before-after.png new file mode 100644 index 0000000000000000000000000000000000000000..6b4bd3cb2ee348eac0520fb25ecba078fbae035d GIT binary patch literal 81409 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
MO#qv9$#i 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 literal 0 HcmV?d00001 From adba19d9b08592f5e5f32252a5cd28e791727e48 Mon Sep 17 00:00:00 2001 From: Hyiyek Date: Sat, 12 Sep 2026 21:08:03 +0900 Subject: [PATCH 48/98] =?UTF-8?q?test(performance):=20Drop=201=EB=A7=8C?= =?UTF-8?q?=EB=AA=85=20=EB=8F=99=EC=8B=9C=20=EC=A1=B0=ED=9A=8C=20=EC=8B=9C?= =?UTF-8?q?=EB=82=98=EB=A6=AC=EC=98=A4=20=EC=B6=94=EA=B0=80?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- performance/k6/drop-detail-concurrent.js | 91 ++++++++++++++++++++++++ 1 file changed, 91 insertions(+) create mode 100644 performance/k6/drop-detail-concurrent.js diff --git a/performance/k6/drop-detail-concurrent.js b/performance/k6/drop-detail-concurrent.js new file mode 100644 index 0000000..2873c07 --- /dev/null +++ b/performance/k6/drop-detail-concurrent.js @@ -0,0 +1,91 @@ +import http from 'k6/http'; +import { check } from 'k6'; + +const baseUrl = __ENV.BASE_URL || 'http://host.docker.internal:8080'; +const testRun = __ENV.TEST_RUN || 'drop-detail-concurrent-before'; +const authToken = __ENV.AUTH_TOKEN; +const dropId = __ENV.DROP_ID; +const concurrentUsers = Number(__ENV.CONCURRENT_USERS || 10000); +const warmCache = (__ENV.WARM_CACHE || 'true').toLowerCase() === 'true'; + +if (!authToken) { + throw new Error('AUTH_TOKEN is required.'); +} + +if (!dropId) { + throw new Error('DROP_ID is required.'); +} + +if (!Number.isInteger(concurrentUsers) || concurrentUsers <= 0) { + throw new Error('CONCURRENT_USERS must be a positive integer.'); +} + +export const options = { + discardResponseBodies: false, + scenarios: { + openingBurst: { + executor: 'per-vu-iterations', + vus: concurrentUsers, + iterations: 1, + maxDuration: '3m', + }, + }, + thresholds: { + 'http_req_failed{endpoint:drop-detail}': ['rate<0.01'], + 'http_req_duration{endpoint:drop-detail}': ['p(95)<2000'], + checks: ['rate>0.99'], + }, +}; + +export function setup() { + if (!warmCache) { + return; + } + + const response = http.get(`${baseUrl}/drops/${dropId}`, { + headers: { + Authorization: `Bearer ${authToken}`, + }, + tags: { + endpoint: 'cache-warmup', + test_run: testRun, + }, + }); + + if (response.status !== 200) { + throw new Error(`Cache warm-up failed with HTTP ${response.status}.`); + } +} + +export default function () { + const response = http.get(`${baseUrl}/drops/${dropId}`, { + headers: { + Authorization: `Bearer ${authToken}`, + }, + tags: { + endpoint: 'drop-detail', + test_run: testRun, + }, + }); + + check(response, { + 'Drop 상세 조회 응답이 200이다': (result) => result.status === 200, + '요청한 Drop ID가 반환된다': (result) => { + if (result.status !== 200) { + return false; + } + + try { + return String(result.json('id')) === String(dropId); + } catch (error) { + return false; + } + }, + }); +} + +export function handleSummary(data) { + return { + [`/results/${testRun}.json`]: JSON.stringify(data, null, 2), + }; +} From 6eaf4fe2d65fe22ffa58586182ef5615786f1d64 Mon Sep 17 00:00:00 2001 From: Hyiyek Date: Sat, 12 Sep 2026 21:09:13 +0900 Subject: [PATCH 49/98] =?UTF-8?q?test(performance):=20=EB=8F=99=EC=8B=9C?= =?UTF-8?q?=20=EC=A1=B0=ED=9A=8C=20=ED=85=8C=EC=8A=A4=ED=8A=B8=20=EC=8B=A4?= =?UTF-8?q?=ED=96=89=20=EC=9E=90=EB=8F=99=ED=99=94?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../start-drop-detail-concurrent-test.ps1 | 189 ++++++++++++++++++ 1 file changed, 189 insertions(+) create mode 100644 performance/start-drop-detail-concurrent-test.ps1 diff --git a/performance/start-drop-detail-concurrent-test.ps1 b/performance/start-drop-detail-concurrent-test.ps1 new file mode 100644 index 0000000..16eba92 --- /dev/null +++ b/performance/start-drop-detail-concurrent-test.ps1 @@ -0,0 +1,189 @@ +param( + [Parameter(Mandatory = $true)] + [ValidateSet('Before', 'After')] + [string]$Phase, + + [Parameter(Mandatory = $true)] + [ValidateRange(1, [long]::MaxValue)] + [long]$DropId, + + [ValidateRange(1, 100000)] + [int]$ConcurrentUsers = 10000, + + [ValidateSet('Warm', 'Cold')] + [string]$CacheMode = 'Warm' +) + +$ErrorActionPreference = 'Stop' + +$performanceDirectory = Split-Path -Parent $MyInvocation.MyCommand.Path +$projectDirectory = Split-Path -Parent $performanceDirectory +$environmentFile = Join-Path $projectDirectory '.env.performance.local' +$composeFile = Join-Path $performanceDirectory 'compose.performance.yml' +$k6Directory = Join-Path $performanceDirectory 'k6' +$resultDirectory = Join-Path $performanceDirectory 'results\raw' +$phaseName = $Phase.ToLower() +$testRun = "drop-detail-concurrent-$phaseName-$ConcurrentUsers-vu" +$containerName = "dropit-k6-$testRun" + +if (-not (Test-Path -LiteralPath $environmentFile)) { + throw '.env.performance.local is missing.' +} + +$settings = @{} +Get-Content -LiteralPath $environmentFile | ForEach-Object { + $line = $_.Trim() + + if ($line -and -not $line.StartsWith('#')) { + $parts = $line -split '=', 2 + + if ($parts.Count -eq 2) { + $settings[$parts[0].Trim()] = $parts[1].Trim() + } + } +} + +$healthCheckUrl = $settings['HEALTH_CHECK_URL'] +$baseUrl = $settings['BASE_URL'] +$authEmail = $settings['AUTH_EMAIL'] +$authPassword = $settings['AUTH_PASSWORD'] +$authUsername = $settings['AUTH_USERNAME'] + +if (-not $healthCheckUrl -or -not $baseUrl -or + -not $authEmail -or -not $authPassword -or -not $authUsername) { + throw 'Required performance environment values are missing.' +} + +$loginBody = @{ + email = $authEmail + password = $authPassword +} | ConvertTo-Json + +try { + $tokenResponse = Invoke-RestMethod ` + -Uri "$healthCheckUrl/auth/login" ` + -Method Post ` + -ContentType 'application/json' ` + -Body $loginBody +} catch { + $signupBody = @{ + email = $authEmail + password = $authPassword + username = $authUsername + role = 'USER' + } | ConvertTo-Json + + Invoke-RestMethod ` + -Uri "$healthCheckUrl/auth/signup" ` + -Method Post ` + -ContentType 'application/json' ` + -Body $signupBody | Out-Null + + $tokenResponse = Invoke-RestMethod ` + -Uri "$healthCheckUrl/auth/login" ` + -Method Post ` + -ContentType 'application/json' ` + -Body $loginBody +} + +$authToken = $tokenResponse.accessToken + +if (-not $authToken) { + throw 'Access token was not returned by the login API.' +} + +try { + $dropResponse = Invoke-RestMethod ` + -Uri "$healthCheckUrl/drops/$DropId" ` + -Headers @{ Authorization = "Bearer $authToken" } ` + -Method Get + + if ([long]$dropResponse.id -ne $DropId) { + throw 'The returned Drop ID does not match the requested Drop ID.' + } +} catch { + throw "Drop $DropId cannot be tested. Cause: $($_.Exception.Message)" +} + +if ($CacheMode -eq 'Cold') { + $redisContainer = docker ps --filter 'name=redis' --format '{{.Names}}' | Select-Object -First 1 + + if (-not $redisContainer) { + throw 'Redis container is not running.' + } + + docker exec $redisContainer redis-cli DEL "dropit::dropDetail::$DropId" | Out-Null + + if ($LASTEXITCODE -ne 0) { + throw 'The Drop detail cache key could not be removed.' + } +} + +New-Item -ItemType Directory -Path $resultDirectory -Force | Out-Null + +docker compose ` + --file $composeFile ` + --env-file $environmentFile ` + up --detach influxdb grafana | Out-Null + +if ($LASTEXITCODE -ne 0) { + throw 'InfluxDB or Grafana could not be started.' +} + +$grafanaReady = $false +for ($attempt = 1; $attempt -le 30; $attempt++) { + curl.exe --silent --fail --output NUL 'http://localhost:3000/api/health' + + if ($LASTEXITCODE -eq 0) { + $grafanaReady = $true + break + } + + Start-Sleep -Seconds 1 +} + +if (-not $grafanaReady) { + throw 'Grafana did not become ready within 30 seconds.' +} + +$existingContainer = docker ps -a --filter "name=^/$containerName$" --format '{{.Names}}' +if ($existingContainer) { + docker rm --force $containerName | Out-Null +} + +$warmCache = if ($CacheMode -eq 'Warm') { 'true' } else { 'false' } +$dockerArguments = @( + 'run', '--rm', + '--name', $containerName, + '--network', 'dropit-performance_default', + '--volume', "${k6Directory}:/scripts:ro", + '--volume', "${resultDirectory}:/results", + 'grafana/k6:latest', + 'run', + '--out', 'influxdb=http://influxdb:8086/k6', + '--env', "BASE_URL=$baseUrl", + '--env', "TEST_RUN=$testRun", + '--env', "AUTH_TOKEN=$authToken", + '--env', "DROP_ID=$DropId", + '--env', "CONCURRENT_USERS=$ConcurrentUsers", + '--env', "WARM_CACHE=$warmCache", + '--tag', "test_run=$testRun", + '/scripts/drop-detail-concurrent.js' +) + +Write-Host "Running $testRun against Drop $DropId." +Write-Host "Concurrent users: $ConcurrentUsers, cache: $CacheMode." +docker @dockerArguments + +if ($LASTEXITCODE -ne 0) { + $resultFile = Join-Path $resultDirectory "$testRun.json" + + if (-not (Test-Path -LiteralPath $resultFile)) { + throw 'k6 failed before producing a result file.' + } + + Write-Warning 'The test completed, but one or more performance thresholds were exceeded.' +} + +Write-Host "Result: $resultDirectory\$testRun.json" +Write-Host 'Grafana: http://localhost:3000' From 12c020d9a24104239f80da81df6353147a21519b Mon Sep 17 00:00:00 2001 From: Hyiyek Date: Sat, 12 Sep 2026 21:16:00 +0900 Subject: [PATCH 50/98] =?UTF-8?q?perf(server):=20Drop=20=EC=98=A4=ED=94=88?= =?UTF-8?q?=20=EC=97=B0=EA=B2=B0=20=EB=8C=80=EA=B8=B0=EC=97=B4=20=ED=99=95?= =?UTF-8?q?=EC=9E=A5?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- src/main/resources/application-performance.properties | 4 ++++ 1 file changed, 4 insertions(+) create mode 100644 src/main/resources/application-performance.properties diff --git a/src/main/resources/application-performance.properties b/src/main/resources/application-performance.properties new file mode 100644 index 0000000..b8b99c5 --- /dev/null +++ b/src/main/resources/application-performance.properties @@ -0,0 +1,4 @@ +# Buffer the short connection burst generated at Drop opening time. +# This profile is enabled only while measuring the local performance scenario. +server.tomcat.accept-count=10000 +server.tomcat.max-connections=12000 From 262c93f6d5ddece67bca8cd67c2e827afbabd56b Mon Sep 17 00:00:00 2001 From: Hyiyek Date: Sat, 12 Sep 2026 21:26:08 +0900 Subject: [PATCH 51/98] =?UTF-8?q?test(performance):=20Docker=20=EB=82=B4?= =?UTF-8?q?=EB=B6=80=20=ED=85=8C=EC=8A=A4=ED=8A=B8=20=EC=A3=BC=EC=86=8C=20?= =?UTF-8?q?=EC=A7=80=EC=9B=90?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- performance/start-drop-detail-concurrent-test.ps1 | 8 +++++++- 1 file changed, 7 insertions(+), 1 deletion(-) diff --git a/performance/start-drop-detail-concurrent-test.ps1 b/performance/start-drop-detail-concurrent-test.ps1 index 16eba92..fa2987b 100644 --- a/performance/start-drop-detail-concurrent-test.ps1 +++ b/performance/start-drop-detail-concurrent-test.ps1 @@ -11,7 +11,9 @@ param( [int]$ConcurrentUsers = 10000, [ValidateSet('Warm', 'Cold')] - [string]$CacheMode = 'Warm' + [string]$CacheMode = 'Warm', + + [string]$TargetBaseUrl ) $ErrorActionPreference = 'Stop' @@ -54,6 +56,10 @@ if (-not $healthCheckUrl -or -not $baseUrl -or throw 'Required performance environment values are missing.' } +if ($TargetBaseUrl) { + $baseUrl = $TargetBaseUrl.TrimEnd('/') +} + $loginBody = @{ email = $authEmail password = $authPassword From b4e76db0d7c3acf0c391fdd83bce6e928d36a328 Mon Sep 17 00:00:00 2001 From: Sooyoung Yoon Date: Sun, 13 Sep 2026 00:52:57 +0900 Subject: [PATCH 52/98] =?UTF-8?q?feat(order):=20OrderRequest=20=EC=97=94?= =?UTF-8?q?=ED=8B=B0=ED=8B=B0=20=EA=B5=AC=EC=84=B1,=20=EB=B3=B5=ED=95=A9?= =?UTF-8?q?=20=EC=9C=A0=EB=8B=88=ED=81=AC=20=EC=A0=9C=EC=95=BD=20=EC=A0=81?= =?UTF-8?q?=EC=9A=A9?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../java/com/dropit/order/entity/Order.java | 3 + .../com/dropit/order/entity/OrderRequest.java | 82 +++++++++++++++++++ .../order/entity/OrderRequestStatus.java | 7 ++ .../repository/OrderRequestRepository.java | 7 ++ 4 files changed, 99 insertions(+) create mode 100644 src/main/java/com/dropit/order/entity/OrderRequest.java create mode 100644 src/main/java/com/dropit/order/entity/OrderRequestStatus.java create mode 100644 src/main/java/com/dropit/order/repository/OrderRequestRepository.java diff --git a/src/main/java/com/dropit/order/entity/Order.java b/src/main/java/com/dropit/order/entity/Order.java index 5a82926..a1175df 100644 --- a/src/main/java/com/dropit/order/entity/Order.java +++ b/src/main/java/com/dropit/order/entity/Order.java @@ -33,6 +33,9 @@ public class Order extends BaseEntity { @Column(nullable = false) private OrderStatus status; + @OneToOne(mappedBy = "order") + private OrderRequest orderRequest; + public Order(User user, BigDecimal totalPrice) { this.user = user; this.totalPrice = totalPrice; diff --git a/src/main/java/com/dropit/order/entity/OrderRequest.java b/src/main/java/com/dropit/order/entity/OrderRequest.java new file mode 100644 index 0000000..b53af83 --- /dev/null +++ b/src/main/java/com/dropit/order/entity/OrderRequest.java @@ -0,0 +1,82 @@ +package com.dropit.order.entity; + +import com.dropit.global.entity.BaseEntity; +import jakarta.persistence.*; +import lombok.AccessLevel; +import lombok.Getter; +import lombok.NoArgsConstructor; + +import java.math.BigDecimal; +import java.util.UUID; + +@Getter +@Entity +@Table( + name = "order_requests", + uniqueConstraints = @UniqueConstraint( + name = "uk_order_requests_user_drop_key_hash", + columnNames = {"user_id", "drop_id", "idempotency_key_hash"} + ) +) +@NoArgsConstructor(access = AccessLevel.PROTECTED) +public class OrderRequest extends BaseEntity { + + @Id + @Column(name = "id", nullable = false, updatable = false) + private UUID id; + + @Enumerated(EnumType.STRING) + @Column(nullable = false, length = 20) + private OrderRequestStatus status; + + @OneToOne(fetch = FetchType.LAZY) + @JoinColumn(name = "order_id", unique = true) + private Order order; + + @Column(name = "user_id", nullable = false) + private Long userId; + + @Column(name = "drop_id", nullable = false) + private Long dropId; + + @Column(name = "idempotency_key_hash", nullable = false, length = 64) + private String idempotencyKeyHash; + + @Column(name = "payload_hash", nullable = false, length = 64) + private String payloadHash; + + @Column(name = "product_name", nullable = false, length = 100) + private String productName; + + @Column(name = "unit_price", nullable = false, precision = 13, scale = 0) + private BigDecimal unitPrice; + + @Column(nullable = false) + private int quantity; + + @Column(name = "discount_rate", nullable = false) + private int discountRate; + + public OrderRequest( + UUID requestId, + Long userId, + Long dropId, + String idempotencyKeyHash, + String payloadHash, + String productName, + BigDecimal unitPrice, + int quantity, + int discountRate + ) { + this.id = requestId; + this.status = OrderRequestStatus.PENDING; + this.userId = userId; + this.dropId = dropId; + this.idempotencyKeyHash = idempotencyKeyHash; + this.payloadHash = payloadHash; + this.productName = productName; + this.unitPrice = unitPrice; + this.quantity = quantity; + this.discountRate = discountRate; + } +} diff --git a/src/main/java/com/dropit/order/entity/OrderRequestStatus.java b/src/main/java/com/dropit/order/entity/OrderRequestStatus.java new file mode 100644 index 0000000..e9421c5 --- /dev/null +++ b/src/main/java/com/dropit/order/entity/OrderRequestStatus.java @@ -0,0 +1,7 @@ +package com.dropit.order.entity; + +public enum OrderRequestStatus { + PENDING, + SUCCEEDED, + FAILED +} diff --git a/src/main/java/com/dropit/order/repository/OrderRequestRepository.java b/src/main/java/com/dropit/order/repository/OrderRequestRepository.java new file mode 100644 index 0000000..3f44de4 --- /dev/null +++ b/src/main/java/com/dropit/order/repository/OrderRequestRepository.java @@ -0,0 +1,7 @@ +package com.dropit.order.repository; + +import com.dropit.order.entity.OrderRequest; +import org.springframework.data.jpa.repository.JpaRepository; + +public interface OrderRequestRepository extends JpaRepository { +} From c12a2e9ff06c4573126d5a7c15f2cb7534e37ccf Mon Sep 17 00:00:00 2001 From: Sooyoung Yoon Date: Sun, 13 Sep 2026 01:22:07 +0900 Subject: [PATCH 53/98] =?UTF-8?q?feat(order):=20OrderRequestRepository=20?= =?UTF-8?q?=EC=B6=94=EA=B0=80,=20=EC=A3=BC=EB=AC=B8=20=EC=A4=91=EB=B3=B5?= =?UTF-8?q?=20=EC=9A=94=EC=B2=AD=20=EA=B2=80=EC=82=AC=EC=9A=A9=20X-lock=20?= =?UTF-8?q?=EC=A1=B0=ED=9A=8C=20=EC=B6=94=EA=B0=80?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../repository/OrderRequestRepository.java | 26 ++++++++++++++++++- 1 file changed, 25 insertions(+), 1 deletion(-) diff --git a/src/main/java/com/dropit/order/repository/OrderRequestRepository.java b/src/main/java/com/dropit/order/repository/OrderRequestRepository.java index 3f44de4..c4bd3ea 100644 --- a/src/main/java/com/dropit/order/repository/OrderRequestRepository.java +++ b/src/main/java/com/dropit/order/repository/OrderRequestRepository.java @@ -1,7 +1,31 @@ package com.dropit.order.repository; import com.dropit.order.entity.OrderRequest; +import jakarta.persistence.LockModeType; import org.springframework.data.jpa.repository.JpaRepository; +import org.springframework.data.jpa.repository.Lock; +import org.springframework.data.jpa.repository.Query; +import org.springframework.data.repository.query.Param; -public interface OrderRequestRepository extends JpaRepository { +import java.util.Optional; +import java.util.UUID; + +public interface OrderRequestRepository extends JpaRepository { + + @Lock(LockModeType.PESSIMISTIC_WRITE) + @Query("select r from OrderRequest r where r.id = :requestId") + Optional findByRequestIdForUpdate(@Param("requestId") UUID requestId); + + @Lock(LockModeType.PESSIMISTIC_WRITE) + @Query(""" + select r from OrderRequest r + where r.userId = :userId + and r.dropId = :dropId + and r.idempotencyKeyHash = :idempotencyKeyHash + """) + Optional findByUserIdAndDropIdAndIdempotencyKeyHashForUpdate( + @Param("userId") Long userId, + @Param("dropId") Long dropId, + @Param("idempotencyKeyHash") String idempotencyKeyHash + ); } From 22832f7eba250bc9bf3a0b6d7768a7286cab6300 Mon Sep 17 00:00:00 2001 From: Sooyoung Yoon Date: Sun, 13 Sep 2026 01:34:31 +0900 Subject: [PATCH 54/98] =?UTF-8?q?feat(order):=20=EC=B5=9C=EC=A2=85=20?= =?UTF-8?q?=EC=A3=BC=EB=AC=B8=ED=99=95=EC=A0=95=20=EB=A9=B1=EB=93=B1?= =?UTF-8?q?=EC=B2=98=EB=A6=AC=EB=A5=BC=20=EC=9C=84=ED=95=9C=20=EA=B8=B0?= =?UTF-8?q?=EB=B0=98=20=EA=B5=AC=ED=98=84?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../java/com/dropit/drop/entity/Drop.java | 18 ++- .../dto/request/OrderFinalizationRequest.java | 18 +++ .../com/dropit/order/entity/OrderRequest.java | 49 +++++++ .../order/exception/OrderErrorCode.java | 4 +- .../service/OrderFinalizationService.java | 132 ++++++++++++++++++ .../OrderFinalizationValidator.java | 54 +++++++ 6 files changed, 272 insertions(+), 3 deletions(-) create mode 100644 src/main/java/com/dropit/order/dto/request/OrderFinalizationRequest.java create mode 100644 src/main/java/com/dropit/order/service/OrderFinalizationService.java create mode 100644 src/main/java/com/dropit/order/validation/OrderFinalizationValidator.java diff --git a/src/main/java/com/dropit/drop/entity/Drop.java b/src/main/java/com/dropit/drop/entity/Drop.java index 418cdc9..f91a0df 100644 --- a/src/main/java/com/dropit/drop/entity/Drop.java +++ b/src/main/java/com/dropit/drop/entity/Drop.java @@ -152,6 +152,10 @@ public void changeVisibility(boolean visible) { this.visible = visible; } + public void restoreStock(int quantity) { + this.remainingQuantity += quantity; + } + public void decreaseStock(int quantity, LocalDateTime now) { if (quantity <= 0) { throw new ServiceException(DropErrorCode.INVALID_DROP_VALUE); @@ -166,7 +170,17 @@ public void decreaseStock(int quantity, LocalDateTime now) { this.remainingQuantity -= quantity; } - public void restoreStock(int quantity) { - this.remainingQuantity += quantity; + public void decreaseStockForFinalization(int quantity) { + validateStockForFinalization(quantity); + this.remainingQuantity -= quantity; + } + + public void validateStockForFinalization(int quantity) { + if (quantity <= 0) { + throw new ServiceException(DropErrorCode.INVALID_DROP_VALUE); + } + if (remainingQuantity < quantity) { + throw new ServiceException(DropErrorCode.INSUFFICIENT_STOCK); + } } } diff --git a/src/main/java/com/dropit/order/dto/request/OrderFinalizationRequest.java b/src/main/java/com/dropit/order/dto/request/OrderFinalizationRequest.java new file mode 100644 index 0000000..ee2caa5 --- /dev/null +++ b/src/main/java/com/dropit/order/dto/request/OrderFinalizationRequest.java @@ -0,0 +1,18 @@ +package com.dropit.order.dto.request; + +import java.math.BigDecimal; +import java.util.UUID; + +/** Consumer 내부 주문 확정 입력용 */ +public record OrderFinalizationRequest( + UUID requestId, + Long userId, + Long dropId, + String idempotencyKeyHash, + String payloadHash, + String productName, + int quantity, + BigDecimal unitPrice, + int discountRate +) { +} diff --git a/src/main/java/com/dropit/order/entity/OrderRequest.java b/src/main/java/com/dropit/order/entity/OrderRequest.java index b53af83..fba8e80 100644 --- a/src/main/java/com/dropit/order/entity/OrderRequest.java +++ b/src/main/java/com/dropit/order/entity/OrderRequest.java @@ -7,6 +7,7 @@ import lombok.NoArgsConstructor; import java.math.BigDecimal; +import java.util.Objects; import java.util.UUID; @Getter @@ -57,6 +58,9 @@ public class OrderRequest extends BaseEntity { @Column(name = "discount_rate", nullable = false) private int discountRate; + @Column(name = "failure_code", length = 50) + private String failureCode; + public OrderRequest( UUID requestId, Long userId, @@ -79,4 +83,49 @@ public OrderRequest( this.quantity = quantity; this.discountRate = discountRate; } + + public boolean matches( + Long userId, + Long dropId, + String idempotencyKeyHash, + String payloadHash, + int quantity, + String productName, + BigDecimal unitPrice, + int discountRate + ) { + return Objects.equals(this.userId, userId) + && Objects.equals(this.dropId, dropId) + && Objects.equals(this.idempotencyKeyHash, idempotencyKeyHash) + && Objects.equals(this.payloadHash, payloadHash) + && this.quantity == quantity + && Objects.equals(this.productName, productName) + && this.unitPrice.compareTo(unitPrice) == 0 + && this.discountRate == discountRate; + } + + public boolean isTerminal() { + return status == OrderRequestStatus.SUCCEEDED || status == OrderRequestStatus.FAILED; + } + + public boolean succeed(Order order) { + if (status != OrderRequestStatus.PENDING) { + return false; + } + + this.status = OrderRequestStatus.SUCCEEDED; + this.order = order; + this.failureCode = null; + return true; + } + + public boolean fail(String failureCode) { + if (status != OrderRequestStatus.PENDING) { + return false; + } + + this.status = OrderRequestStatus.FAILED; + this.failureCode = failureCode; + return true; + } } diff --git a/src/main/java/com/dropit/order/exception/OrderErrorCode.java b/src/main/java/com/dropit/order/exception/OrderErrorCode.java index db8aad9..7d60ec0 100644 --- a/src/main/java/com/dropit/order/exception/OrderErrorCode.java +++ b/src/main/java/com/dropit/order/exception/OrderErrorCode.java @@ -9,7 +9,9 @@ public enum OrderErrorCode implements ErrorCode { ORDER_NOT_FOUND(HttpStatus.NOT_FOUND, "존재하지 않는 주문입니다."), ORDER_ALREADY_CANCELED(HttpStatus.CONFLICT, "이미 취소된 주문입니다."), - PURCHASE_LIMIT_EXCEEDED(HttpStatus.CONFLICT, "드랍의 1인당 구매 제한 수량을 초과했습니다."); + PURCHASE_LIMIT_EXCEEDED(HttpStatus.CONFLICT, "드랍의 1인당 구매 제한 수량을 초과했습니다."), + ORDER_REQUEST_PAYLOAD_MISMATCH(HttpStatus.CONFLICT, "주문 요청 내용이 기존 요청과 다릅니다."), + IDEMPOTENCY_KEY_REUSED(HttpStatus.CONFLICT, "이미 다른 주문 요청에 사용된 멱등키입니다."); private final HttpStatus status; private final String message; diff --git a/src/main/java/com/dropit/order/service/OrderFinalizationService.java b/src/main/java/com/dropit/order/service/OrderFinalizationService.java new file mode 100644 index 0000000..7284c9e --- /dev/null +++ b/src/main/java/com/dropit/order/service/OrderFinalizationService.java @@ -0,0 +1,132 @@ +package com.dropit.order.service; + +import com.dropit.drop.entity.Drop; +import com.dropit.drop.exception.DropErrorCode; +import com.dropit.drop.repository.DropRepository; +import com.dropit.global.exception.ServiceException; +import com.dropit.order.dto.request.OrderFinalizationRequest; +import com.dropit.order.entity.Order; +import com.dropit.order.entity.OrderItem; +import com.dropit.order.entity.OrderRequest; +import com.dropit.order.entity.OrderRequestStatus; +import com.dropit.order.exception.OrderErrorCode; +import com.dropit.order.repository.DropUserPurchaseRepository; +import com.dropit.order.repository.OrderItemRepository; +import com.dropit.order.repository.OrderRepository; +import com.dropit.order.repository.OrderRequestRepository; +import com.dropit.order.validation.OrderFinalizationValidator; +import com.dropit.user.entity.User; +import com.dropit.user.exception.UserErrorCode; +import com.dropit.user.repository.UserRepository; +import lombok.RequiredArgsConstructor; +import org.springframework.stereotype.Service; +import org.springframework.transaction.annotation.Transactional; + +import java.math.BigDecimal; +import java.util.Optional; + +/** + * Consumer가 전달한 주문 요청을 MySQL 트랜잭션으로 중복 없이 최종 주문 처리 + */ +@Service +@RequiredArgsConstructor +public class OrderFinalizationService { + + private final OrderRequestRepository orderRequestRepository; + private final DropUserPurchaseRepository dropUserPurchaseRepository; + private final DropRepository dropRepository; + private final UserRepository userRepository; + private final OrderRepository orderRepository; + private final OrderItemRepository orderItemRepository; + + @Transactional + public OrderRequestStatus finalizeOrder(OrderFinalizationRequest input) { + // 1. 입력 검증 및 처리 대상 Drop 확인 + OrderFinalizationValidator.validate(input); + + Optional knownRequest = orderRequestRepository.findById(input.requestId()); + Long dropIdToLock = knownRequest.map(OrderRequest::getDropId).orElse(input.dropId()); + // 모든 주문 확정 경로는 Drop을 먼저 잠근 뒤 OrderRequest를 잠근다. + Drop drop = dropRepository.findByIdForUpdate(dropIdToLock) + .orElseThrow(() -> new ServiceException(DropErrorCode.DROP_NOT_FOUND)); + + // 2. 접수 기록 확인 및 중복 처리 방지 + OrderRequest request = orderRequestRepository.findByRequestIdForUpdate(input.requestId()) + .orElseGet(() -> createRequest(input)); + + OrderFinalizationValidator.validateStoredRequest(request, input); + if (request.isTerminal()) { + return request.getStatus(); + } + + // 3. 유저, 재고, 구매한도 검증 + User user; + try { + user = userRepository.findById(request.getUserId()) + .orElseThrow(() -> new ServiceException(UserErrorCode.USER_NOT_FOUND)); + drop.validateStockForFinalization(request.getQuantity()); + reservePurchaseLimit(user.getId(), drop, request.getQuantity()); + } catch (ServiceException exception) { + request.fail(exception.getErrorCode().toString()); + return request.getStatus(); + } + + // 4. 재고 차감 및 주문 생성 + drop.decreaseStockForFinalization(request.getQuantity()); + + BigDecimal totalPrice = OrderItem.calculateItemTotalPrice( + request.getUnitPrice(), + request.getDiscountRate(), + request.getQuantity() + ); + Order order = orderRepository.save(new Order(user, totalPrice)); + orderItemRepository.save(new OrderItem( + order, + drop, + request.getProductName(), + request.getUnitPrice(), + request.getDiscountRate(), + request.getQuantity() + )); + request.succeed(order); + return request.getStatus(); + } + + private OrderRequest createRequest(OrderFinalizationRequest input) { + OrderRequest existingRequest = orderRequestRepository + .findByUserIdAndDropIdAndIdempotencyKeyHashForUpdate( + input.userId(), + input.dropId(), + input.idempotencyKeyHash() + ) + .orElse(null); + if (existingRequest != null) { + throw new ServiceException(OrderErrorCode.IDEMPOTENCY_KEY_REUSED); + } + + return orderRequestRepository.saveAndFlush(new OrderRequest( + input.requestId(), + input.userId(), + input.dropId(), + input.idempotencyKeyHash(), + input.payloadHash(), + input.productName(), + input.unitPrice(), + input.quantity(), + input.discountRate() + )); + } + + private void reservePurchaseLimit(Long userId, Drop drop, int quantity) { + dropUserPurchaseRepository.createCounterIfAbsent(drop.getId(), userId); + int increasedCount = dropUserPurchaseRepository.increaseWithinLimit( + drop.getId(), + userId, + quantity, + drop.getPurchaseLimit() + ); + if (increasedCount != 1) { + throw new ServiceException(OrderErrorCode.PURCHASE_LIMIT_EXCEEDED); + } + } +} diff --git a/src/main/java/com/dropit/order/validation/OrderFinalizationValidator.java b/src/main/java/com/dropit/order/validation/OrderFinalizationValidator.java new file mode 100644 index 0000000..512605c --- /dev/null +++ b/src/main/java/com/dropit/order/validation/OrderFinalizationValidator.java @@ -0,0 +1,54 @@ +package com.dropit.order.validation; + +import com.dropit.global.exception.CommonErrorCode; +import com.dropit.global.exception.ServiceException; +import com.dropit.order.dto.request.OrderFinalizationRequest; +import com.dropit.order.entity.OrderRequest; +import com.dropit.order.exception.OrderErrorCode; + +public final class OrderFinalizationValidator { + + private OrderFinalizationValidator() { + } + + public static void validate(OrderFinalizationRequest input) { + if (input == null + || input.requestId() == null + || input.userId() == null + || input.dropId() == null + || isBlank(input.idempotencyKeyHash()) + || input.idempotencyKeyHash().length() > 64 + || isBlank(input.payloadHash()) + || input.payloadHash().length() > 64 + || input.quantity() <= 0 + || isBlank(input.productName()) + || input.productName().length() > 100 + || input.unitPrice() == null + || input.unitPrice().signum() <= 0 + || input.unitPrice().scale() > 0 + || input.unitPrice().precision() - input.unitPrice().scale() > 13 + || input.discountRate() < 0 + || input.discountRate() > 100) { + throw new ServiceException(CommonErrorCode.INVALID_INPUT); + } + } + + public static void validateStoredRequest(OrderRequest request, OrderFinalizationRequest input) { + if (!request.matches( + input.userId(), + input.dropId(), + input.idempotencyKeyHash(), + input.payloadHash(), + input.quantity(), + input.productName(), + input.unitPrice(), + input.discountRate() + )) { + throw new ServiceException(OrderErrorCode.ORDER_REQUEST_PAYLOAD_MISMATCH); + } + } + + private static boolean isBlank(String value) { + return value == null || value.isBlank(); + } +} From 3fc36757b71668b239800a242546223734438826 Mon Sep 17 00:00:00 2001 From: Sooyoung Yoon Date: Sun, 13 Sep 2026 02:07:03 +0900 Subject: [PATCH 55/98] =?UTF-8?q?feat(order):=20Redis=20=EC=A3=BC=EB=AC=B8?= =?UTF-8?q?=EC=98=88=EC=95=BD=20=EA=B8=B0=EB=B0=98=20=EA=B5=AC=ED=98=84,?= =?UTF-8?q?=20Lua=20=EC=8A=A4=ED=81=AC=EB=A6=BD=ED=8A=B8=20=EC=B6=94?= =?UTF-8?q?=EA=B0=80?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../order/redis/OrderAdmissionRequest.java | 36 ++++++++ .../order/redis/OrderAdmissionResult.java | 21 +++++ .../order/redis/OrderAdmissionResultType.java | 10 +++ .../redis/RedisOrderAdmissionAdapter.java | 83 +++++++++++++++++++ .../order/redis/RedisOrderKeyFactory.java | 27 ++++++ .../order/service/OrderAdmissionService.java | 37 +++++++++ .../validation/OrderAdmissionValidator.java | 31 +++++++ .../OrderFinalizationValidator.java | 6 +- src/main/resources/redis/reserve-order.lua | 48 +++++++++++ 9 files changed, 296 insertions(+), 3 deletions(-) create mode 100644 src/main/java/com/dropit/order/redis/OrderAdmissionRequest.java create mode 100644 src/main/java/com/dropit/order/redis/OrderAdmissionResult.java create mode 100644 src/main/java/com/dropit/order/redis/OrderAdmissionResultType.java create mode 100644 src/main/java/com/dropit/order/redis/RedisOrderAdmissionAdapter.java create mode 100644 src/main/java/com/dropit/order/redis/RedisOrderKeyFactory.java create mode 100644 src/main/java/com/dropit/order/service/OrderAdmissionService.java create mode 100644 src/main/java/com/dropit/order/validation/OrderAdmissionValidator.java create mode 100644 src/main/resources/redis/reserve-order.lua diff --git a/src/main/java/com/dropit/order/redis/OrderAdmissionRequest.java b/src/main/java/com/dropit/order/redis/OrderAdmissionRequest.java new file mode 100644 index 0000000..bacf491 --- /dev/null +++ b/src/main/java/com/dropit/order/redis/OrderAdmissionRequest.java @@ -0,0 +1,36 @@ +package com.dropit.order.redis; + +import java.util.UUID; + +public record OrderAdmissionRequest( + UUID requestId, + Long userId, + Long dropId, + String idempotencyKeyHash, + String fingerprint, + int quantity, + int purchaseLimit +) { + + public static OrderAdmissionRequest create( + Long userId, + Long dropId, + String idempotencyKeyHash, + int quantity, + int purchaseLimit + ) { + return new OrderAdmissionRequest( + UUID.randomUUID(), + userId, + dropId, + idempotencyKeyHash, + fingerprintOf(dropId, quantity), + quantity, + purchaseLimit + ); + } + + public static String fingerprintOf(Long dropId, int quantity) { + return dropId + ":" + quantity; + } +} diff --git a/src/main/java/com/dropit/order/redis/OrderAdmissionResult.java b/src/main/java/com/dropit/order/redis/OrderAdmissionResult.java new file mode 100644 index 0000000..b2d91a2 --- /dev/null +++ b/src/main/java/com/dropit/order/redis/OrderAdmissionResult.java @@ -0,0 +1,21 @@ +package com.dropit.order.redis; + +import java.util.UUID; + +public record OrderAdmissionResult( + OrderAdmissionResultType type, + UUID requestId +) { + + public static OrderAdmissionResult newReservation(UUID requestId) { + return new OrderAdmissionResult(OrderAdmissionResultType.NEW, requestId); + } + + public static OrderAdmissionResult replay(UUID requestId) { + return new OrderAdmissionResult(OrderAdmissionResultType.REPLAY, requestId); + } + + public static OrderAdmissionResult of(OrderAdmissionResultType type) { + return new OrderAdmissionResult(type, null); + } +} diff --git a/src/main/java/com/dropit/order/redis/OrderAdmissionResultType.java b/src/main/java/com/dropit/order/redis/OrderAdmissionResultType.java new file mode 100644 index 0000000..cf2d03c --- /dev/null +++ b/src/main/java/com/dropit/order/redis/OrderAdmissionResultType.java @@ -0,0 +1,10 @@ +package com.dropit.order.redis; + +public enum OrderAdmissionResultType { + NEW, + REPLAY, + CONFLICT, + OUT_OF_STOCK, + PURCHASE_LIMIT_EXCEEDED, + NOT_READY +} diff --git a/src/main/java/com/dropit/order/redis/RedisOrderAdmissionAdapter.java b/src/main/java/com/dropit/order/redis/RedisOrderAdmissionAdapter.java new file mode 100644 index 0000000..89f6084 --- /dev/null +++ b/src/main/java/com/dropit/order/redis/RedisOrderAdmissionAdapter.java @@ -0,0 +1,83 @@ +package com.dropit.order.redis; + +import lombok.RequiredArgsConstructor; +import org.springframework.core.io.ClassPathResource; +import org.springframework.data.redis.core.StringRedisTemplate; +import org.springframework.data.redis.core.script.DefaultRedisScript; +import org.springframework.stereotype.Component; + +import java.util.List; +import java.util.UUID; + +@Component +@RequiredArgsConstructor +public class RedisOrderAdmissionAdapter { + + private static final DefaultRedisScript RESERVE_ORDER_SCRIPT = createScript(); + + private final StringRedisTemplate redisTemplate; + + private static DefaultRedisScript createScript() { + DefaultRedisScript script = new DefaultRedisScript<>(); + script.setLocation(new ClassPathResource("redis/reserve-order.lua")); + script.setResultType(String.class); + return script; + } + + public OrderAdmissionResult reserve(OrderAdmissionRequest request) { + try { + String result = redisTemplate.execute( + RESERVE_ORDER_SCRIPT, + List.of( + RedisOrderKeyFactory.stockKey(request.dropId()), + RedisOrderKeyFactory.purchaseKey(request.dropId(), request.userId()), + RedisOrderKeyFactory.idempotencyKey( + request.dropId(), + request.userId(), + request.idempotencyKeyHash() + ) + ), + request.requestId().toString(), + request.fingerprint(), + String.valueOf(request.quantity()), + String.valueOf(request.purchaseLimit()) + ); + return parseResult(result); + } catch (RuntimeException exception) { + return OrderAdmissionResult.of(OrderAdmissionResultType.NOT_READY); + } + } + + private static OrderAdmissionResult parseResult(String result) { + if (result == null) { + return OrderAdmissionResult.of(OrderAdmissionResultType.NOT_READY); + } + + String[] parts = result.split("\\|", 2); + return switch (parts[0]) { + case "NEW" -> resultWithRequestId(parts, OrderAdmissionResultType.NEW); + case "REPLAY" -> resultWithRequestId(parts, OrderAdmissionResultType.REPLAY); + case "CONFLICT" -> OrderAdmissionResult.of(OrderAdmissionResultType.CONFLICT); + case "OUT_OF_STOCK" -> OrderAdmissionResult.of(OrderAdmissionResultType.OUT_OF_STOCK); + case "PURCHASE_LIMIT_EXCEEDED" -> + OrderAdmissionResult.of(OrderAdmissionResultType.PURCHASE_LIMIT_EXCEEDED); + default -> OrderAdmissionResult.of(OrderAdmissionResultType.NOT_READY); + }; + } + + private static OrderAdmissionResult resultWithRequestId( + String[] parts, + OrderAdmissionResultType type + ) { + if (parts.length != 2) { + return OrderAdmissionResult.of(OrderAdmissionResultType.NOT_READY); + } + + try { + UUID requestId = UUID.fromString(parts[1]); + return new OrderAdmissionResult(type, requestId); + } catch (IllegalArgumentException exception) { + return OrderAdmissionResult.of(OrderAdmissionResultType.NOT_READY); + } + } +} diff --git a/src/main/java/com/dropit/order/redis/RedisOrderKeyFactory.java b/src/main/java/com/dropit/order/redis/RedisOrderKeyFactory.java new file mode 100644 index 0000000..838b08d --- /dev/null +++ b/src/main/java/com/dropit/order/redis/RedisOrderKeyFactory.java @@ -0,0 +1,27 @@ +package com.dropit.order.redis; + +import lombok.AccessLevel; +import lombok.NoArgsConstructor; + +@NoArgsConstructor(access = AccessLevel.PRIVATE) +public final class RedisOrderKeyFactory { + + public static String stockKey(Long dropId) { + return dropKey(dropId) + ":stock"; + } + + public static String purchaseKey(Long dropId, Long userId) { + return dropKey(dropId) + ":purchase:user:" + userId; + } + + public static String idempotencyKey(Long dropId, Long userId, String idempotencyKeyHash) { + return dropKey(dropId) + ":idempotency:user:" + userId + ":" + idempotencyKeyHash; + } + + private static String dropKey(Long dropId) { + if (dropId == null || dropId <= 0) { + throw new IllegalArgumentException("dropId must be positive"); + } + return "{drop:" + dropId + "}"; + } +} diff --git a/src/main/java/com/dropit/order/service/OrderAdmissionService.java b/src/main/java/com/dropit/order/service/OrderAdmissionService.java new file mode 100644 index 0000000..0a7eaf4 --- /dev/null +++ b/src/main/java/com/dropit/order/service/OrderAdmissionService.java @@ -0,0 +1,37 @@ +package com.dropit.order.service; + +import com.dropit.order.redis.OrderAdmissionRequest; +import com.dropit.order.redis.OrderAdmissionResult; +import com.dropit.order.redis.RedisOrderAdmissionAdapter; +import com.dropit.order.validation.OrderAdmissionValidator; +import lombok.RequiredArgsConstructor; +import org.springframework.stereotype.Service; + +/** Redis Lua로 주문 요청을 원자적으로 검증 및 예약하고 중복 요청 결과를 반환 */ +@Service +@RequiredArgsConstructor +public class OrderAdmissionService { + + private final RedisOrderAdmissionAdapter redisAdapter; + + public OrderAdmissionResult reserve( + Long userId, + Long dropId, + String idempotencyKeyHash, + int quantity, + int purchaseLimit + ) { + return reserve(OrderAdmissionRequest.create( + userId, + dropId, + idempotencyKeyHash, + quantity, + purchaseLimit + )); + } + + public OrderAdmissionResult reserve(OrderAdmissionRequest request) { + OrderAdmissionValidator.validate(request); + return redisAdapter.reserve(request); + } +} diff --git a/src/main/java/com/dropit/order/validation/OrderAdmissionValidator.java b/src/main/java/com/dropit/order/validation/OrderAdmissionValidator.java new file mode 100644 index 0000000..77bd658 --- /dev/null +++ b/src/main/java/com/dropit/order/validation/OrderAdmissionValidator.java @@ -0,0 +1,31 @@ +package com.dropit.order.validation; + +import com.dropit.global.exception.CommonErrorCode; +import com.dropit.global.exception.ServiceException; +import com.dropit.order.redis.OrderAdmissionRequest; +import lombok.AccessLevel; +import lombok.NoArgsConstructor; + +@NoArgsConstructor(access = AccessLevel.PRIVATE) +public final class OrderAdmissionValidator { + + public static void validate(OrderAdmissionRequest request) { + if (request == null + || request.requestId() == null + || request.userId() == null + || request.userId() <= 0 + || request.dropId() == null + || request.dropId() <= 0 + || request.idempotencyKeyHash() == null + || request.idempotencyKeyHash().isBlank() + || request.idempotencyKeyHash().length() > 64 + || request.fingerprint() == null + || !request.fingerprint().equals( + OrderAdmissionRequest.fingerprintOf(request.dropId(), request.quantity()) + ) + || request.quantity() <= 0 + || request.purchaseLimit() < 0) { + throw new ServiceException(CommonErrorCode.INVALID_INPUT); + } + } +} diff --git a/src/main/java/com/dropit/order/validation/OrderFinalizationValidator.java b/src/main/java/com/dropit/order/validation/OrderFinalizationValidator.java index 512605c..bc928d4 100644 --- a/src/main/java/com/dropit/order/validation/OrderFinalizationValidator.java +++ b/src/main/java/com/dropit/order/validation/OrderFinalizationValidator.java @@ -5,12 +5,12 @@ import com.dropit.order.dto.request.OrderFinalizationRequest; import com.dropit.order.entity.OrderRequest; import com.dropit.order.exception.OrderErrorCode; +import lombok.AccessLevel; +import lombok.NoArgsConstructor; +@NoArgsConstructor(access = AccessLevel.PRIVATE) public final class OrderFinalizationValidator { - private OrderFinalizationValidator() { - } - public static void validate(OrderFinalizationRequest input) { if (input == null || input.requestId() == null diff --git a/src/main/resources/redis/reserve-order.lua b/src/main/resources/redis/reserve-order.lua new file mode 100644 index 0000000..46ffc7a --- /dev/null +++ b/src/main/resources/redis/reserve-order.lua @@ -0,0 +1,48 @@ +-- Redis는 이 스크립트 전체를 하나의 원자적 연산으로 실행한다. +-- 따라서 idempotency, 재고, 사용자 예약량의 결과를 이 실행 안에서 함께 결정한다. +-- KEYS[1] = {drop:}:stock +-- KEYS[2] = {drop:}:purchase:user: +-- KEYS[3] = {drop:}:idempotency:user:: +-- ARGV[1] = requestId, ARGV[2] = fingerprint, ARGV[3] = quantity, +-- ARGV[4] = purchaseLimit +local request_id = ARGV[1] +local fingerprint = ARGV[2] +local quantity = tonumber(ARGV[3]) +local purchase_limit = tonumber(ARGV[4]) + +local existing_request_id = redis.call('HGET', KEYS[3], 'requestId') +if existing_request_id then + -- replay/conflict는 기존 idempotency 기록만 읽으며 재고와 예약량을 변경하지 않는다. + local existing_fingerprint = redis.call('HGET', KEYS[3], 'fingerprint') + if existing_fingerprint == fingerprint then + return 'REPLAY|' .. existing_request_id + end + return 'CONFLICT' +end + +local stock = tonumber(redis.call('GET', KEYS[1]) or '0') +if stock < quantity then + -- 실패 결과는 여기서 즉시 반환하므로 신규 idempotency 기록을 남기지 않는다. + return 'OUT_OF_STOCK' +end + +local purchased_quantity = tonumber(redis.call('GET', KEYS[2]) or '0') +if purchase_limit ~= 0 and purchased_quantity + quantity > purchase_limit then + -- 실패 결과는 여기서 즉시 반환하므로 신규 idempotency 기록을 남기지 않는다. + return 'PURCHASE_LIMIT_EXCEEDED' +end + +-- 신규 성공 요청의 차감, 예약량 증가, idempotency 기록, 24시간 TTL 설정도 +-- 위 검증과 같은 원자적 스크립트 실행 안에서 함께 완료한다. +redis.call('DECRBY', KEYS[1], quantity) +redis.call('INCRBY', KEYS[2], quantity) +redis.call( + 'HSET', + KEYS[3], + 'requestId', request_id, + 'fingerprint', fingerprint, + 'status', 'RESERVED' +) +redis.call('EXPIRE', KEYS[3], 86400) + +return 'NEW|' .. request_id From 76084352c648e948a2308bccdaf04f8d186159ce Mon Sep 17 00:00:00 2001 From: Sooyoung Yoon Date: Sun, 13 Sep 2026 10:07:49 +0900 Subject: [PATCH 56/98] =?UTF-8?q?chore(sqs):=20=EC=A3=BC=EB=AC=B8=ED=99=95?= =?UTF-8?q?=EC=A0=95=20=EC=B2=98=EB=A6=AC=20=EB=AA=A9=EC=A0=81=20SQS=20?= =?UTF-8?q?=ED=99=98=EA=B2=BD=20=EA=B5=AC=EC=84=B1?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .env.example | 7 ++++++- build.gradle | 2 ++ .../com/dropit/DropitServerApplication.java | 3 ++- .../com/dropit/global/config/SqsConfig.java | 19 +++++++++++++++++++ .../dropit/order/messaging/SqsProperties.java | 10 ++++++++++ src/main/resources/application.properties | 10 +++++++++- 6 files changed, 48 insertions(+), 3 deletions(-) create mode 100644 src/main/java/com/dropit/global/config/SqsConfig.java create mode 100644 src/main/java/com/dropit/order/messaging/SqsProperties.java diff --git a/.env.example b/.env.example index c6d2413..ea10461 100644 --- a/.env.example +++ b/.env.example @@ -6,9 +6,14 @@ DB_PASSWORD= MYSQL_ROOT_PASSWORD= REDIS_HOST= REDIS_PORT= + JWT_SECRET= + AWS_S3_BUCKET= AWS_ACCESS_KEY_ID= AWS_SECRET_ACCESS_KEY= + +AWS_SQS_ORDER_QUEUE_URL= + DOCS_AUTH_USERNAME= -DOCS_AUTH_PASSWORD= +DOCS_AUTH_PASSWORD= \ No newline at end of file diff --git a/build.gradle b/build.gradle index 4408f9c..b1995b5 100644 --- a/build.gradle +++ b/build.gradle @@ -35,6 +35,8 @@ dependencies { implementation platform('io.awspring.cloud:spring-cloud-aws-dependencies:4.1.0') implementation 'io.awspring.cloud:spring-cloud-aws-starter-parameter-store' implementation 'io.awspring.cloud:spring-cloud-aws-starter-s3' + implementation 'software.amazon.awssdk:sqs' + implementation 'software.amazon.awssdk:url-connection-client' implementation 'io.jsonwebtoken:jjwt-api:0.13.0' runtimeOnly 'io.jsonwebtoken:jjwt-impl:0.13.0' diff --git a/src/main/java/com/dropit/DropitServerApplication.java b/src/main/java/com/dropit/DropitServerApplication.java index b10bd26..78e07d4 100644 --- a/src/main/java/com/dropit/DropitServerApplication.java +++ b/src/main/java/com/dropit/DropitServerApplication.java @@ -1,6 +1,7 @@ package com.dropit; import com.dropit.global.security.jwt.JwtProperties; +import com.dropit.order.messaging.SqsProperties; import org.springframework.boot.SpringApplication; import org.springframework.boot.autoconfigure.SpringBootApplication; import org.springframework.boot.context.properties.EnableConfigurationProperties; @@ -8,7 +9,7 @@ import org.springframework.data.jpa.repository.config.EnableJpaAuditing; @EnableJpaAuditing -@EnableConfigurationProperties(JwtProperties.class) +@EnableConfigurationProperties({JwtProperties.class, SqsProperties.class}) @SpringBootApplication(exclude = UserDetailsServiceAutoConfiguration.class) public class DropitServerApplication { diff --git a/src/main/java/com/dropit/global/config/SqsConfig.java b/src/main/java/com/dropit/global/config/SqsConfig.java new file mode 100644 index 0000000..bf5e969 --- /dev/null +++ b/src/main/java/com/dropit/global/config/SqsConfig.java @@ -0,0 +1,19 @@ +package com.dropit.global.config; + +import org.springframework.context.annotation.Bean; +import org.springframework.context.annotation.Configuration; +import software.amazon.awssdk.http.urlconnection.UrlConnectionHttpClient; +import software.amazon.awssdk.regions.providers.AwsRegionProvider; +import software.amazon.awssdk.services.sqs.SqsClient; + +@Configuration +public class SqsConfig { + + @Bean + SqsClient sqsClient(AwsRegionProvider regionProvider) { + return SqsClient.builder() + .region(regionProvider.getRegion()) + .httpClientBuilder(UrlConnectionHttpClient.builder()) + .build(); + } +} diff --git a/src/main/java/com/dropit/order/messaging/SqsProperties.java b/src/main/java/com/dropit/order/messaging/SqsProperties.java new file mode 100644 index 0000000..bc7fbf0 --- /dev/null +++ b/src/main/java/com/dropit/order/messaging/SqsProperties.java @@ -0,0 +1,10 @@ +package com.dropit.order.messaging; + +import org.springframework.boot.context.properties.ConfigurationProperties; + +@ConfigurationProperties(prefix = "app.order.sqs") +public record SqsProperties( + String orderQueueUrl, + boolean consumerEnabled +) { +} diff --git a/src/main/resources/application.properties b/src/main/resources/application.properties index 6452a26..499555c 100644 --- a/src/main/resources/application.properties +++ b/src/main/resources/application.properties @@ -19,10 +19,18 @@ management.endpoints.web.exposure.include=health spring.cloud.aws.region.static=ap-northeast-2 spring.cloud.aws.s3.bucket=${AWS_S3_BUCKET} +# SQS - order +app.order.sqs.order-queue-url=${AWS_SQS_ORDER_QUEUE_URL} +app.order.sqs.consumer-enabled=${AWS_SQS_CONSUMER_ENABLED:false} +#app.order.sqs.consumer-initial-delay=${AWS_SQS_CONSUMER_INITIAL_DELAY:1000} +#app.order.sqs.consumer-poll-delay=${AWS_SQS_CONSUMER_POLL_DELAY:1000} +#app.order.sqs.consumer-max-number-of-messages=${AWS_SQS_CONSUMER_MAX_NUMBER_OF_MESSAGES:10} +#app.order.sqs.consumer-wait-time-seconds=${AWS_SQS_CONSUMER_WAIT_TIME_SECONDS:20} + # Multipart upload limits spring.servlet.multipart.max-file-size=10MB spring.servlet.multipart.max-request-size=10MB # Swagger UI Basic Auth credentials docs.auth.username=${DOCS_AUTH_USERNAME} -docs.auth.password=${DOCS_AUTH_PASSWORD} \ No newline at end of file +docs.auth.password=${DOCS_AUTH_PASSWORD} From 66f40e915f9b32fa256175c845a5d8a21133c6c7 Mon Sep 17 00:00:00 2001 From: Sooyoung Yoon Date: Sun, 13 Sep 2026 12:04:50 +0900 Subject: [PATCH 57/98] =?UTF-8?q?feat(order):=20=EC=A1=B0=EA=B1=B4?= =?UTF-8?q?=EB=B6=80=20=EC=9E=AC=EA=B3=A0=EC=B0=A8=EA=B0=90=20=EA=B8=B0?= =?UTF-8?q?=EB=B0=98=EC=9C=BC=EB=A1=9C=20=EC=A3=BC=EB=AC=B8=ED=99=95?= =?UTF-8?q?=EC=A0=95=20=EC=B2=98=EB=A6=AC?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../drop/repository/DropRepository.java | 14 +++ .../com/dropit/order/entity/OrderRequest.java | 45 +++++++++- .../order/exception/OrderErrorCode.java | 1 + .../InvalidOrderMessageException.java | 8 ++ .../dropit/order/messaging/OrderMessage.java | 22 +++++ .../service/OrderFinalizationService.java | 87 ++++++------------- .../service/OrderRequestFailureService.java | 29 +++++++ .../OrderRequestRegistrationService.java | 49 +++++++++++ .../validation/OrderMessageValidator.java | 60 +++++++++++++ 9 files changed, 254 insertions(+), 61 deletions(-) create mode 100644 src/main/java/com/dropit/order/messaging/InvalidOrderMessageException.java create mode 100644 src/main/java/com/dropit/order/messaging/OrderMessage.java create mode 100644 src/main/java/com/dropit/order/service/OrderRequestFailureService.java create mode 100644 src/main/java/com/dropit/order/service/OrderRequestRegistrationService.java create mode 100644 src/main/java/com/dropit/order/validation/OrderMessageValidator.java diff --git a/src/main/java/com/dropit/drop/repository/DropRepository.java b/src/main/java/com/dropit/drop/repository/DropRepository.java index 4305ba6..8231d6d 100644 --- a/src/main/java/com/dropit/drop/repository/DropRepository.java +++ b/src/main/java/com/dropit/drop/repository/DropRepository.java @@ -3,6 +3,7 @@ import com.dropit.drop.entity.Drop; import org.springframework.data.domain.Page; import org.springframework.data.domain.Pageable; +import org.springframework.data.jpa.repository.Modifying; import org.springframework.data.jpa.repository.Lock; import org.springframework.data.jpa.repository.Query; import org.springframework.data.repository.query.Param; @@ -31,4 +32,17 @@ Page findAllByProductSellerId( @Lock(LockModeType.PESSIMISTIC_WRITE) @Query("select d from Drop d where d.id = :dropId") Optional findByIdForUpdate(@Param("dropId") Long dropId); + + @Modifying(flushAutomatically = true, clearAutomatically = true) + @Query(""" + update Drop d + set d.remainingQuantity = d.remainingQuantity - :quantity + where d.id = :dropId + and :quantity > 0 + and d.remainingQuantity >= :quantity + """) + int decreaseStockIfAvailable( + @Param("dropId") Long dropId, + @Param("quantity") int quantity + ); } diff --git a/src/main/java/com/dropit/order/entity/OrderRequest.java b/src/main/java/com/dropit/order/entity/OrderRequest.java index fba8e80..1f82ca0 100644 --- a/src/main/java/com/dropit/order/entity/OrderRequest.java +++ b/src/main/java/com/dropit/order/entity/OrderRequest.java @@ -1,12 +1,22 @@ package com.dropit.order.entity; import com.dropit.global.entity.BaseEntity; -import jakarta.persistence.*; +import jakarta.persistence.Column; +import jakarta.persistence.Entity; +import jakarta.persistence.EnumType; +import jakarta.persistence.Enumerated; +import jakarta.persistence.FetchType; +import jakarta.persistence.Id; +import jakarta.persistence.JoinColumn; +import jakarta.persistence.OneToOne; +import jakarta.persistence.Table; +import jakarta.persistence.UniqueConstraint; import lombok.AccessLevel; import lombok.Getter; import lombok.NoArgsConstructor; import java.math.BigDecimal; +import java.time.LocalDateTime; import java.util.Objects; import java.util.UUID; @@ -58,9 +68,18 @@ public class OrderRequest extends BaseEntity { @Column(name = "discount_rate", nullable = false) private int discountRate; + @Column(name = "accepted_at", nullable = false) + private LocalDateTime acceptedAt; + @Column(name = "failure_code", length = 50) private String failureCode; + @Column(name = "redis_sync_pending", nullable = false) + private boolean redisSyncPending; + + @Column(name = "desired_version", nullable = false) + private long desiredVersion; + public OrderRequest( UUID requestId, Long userId, @@ -70,7 +89,8 @@ public OrderRequest( String productName, BigDecimal unitPrice, int quantity, - int discountRate + int discountRate, + LocalDateTime acceptedAt ) { this.id = requestId; this.status = OrderRequestStatus.PENDING; @@ -82,6 +102,7 @@ public OrderRequest( this.unitPrice = unitPrice; this.quantity = quantity; this.discountRate = discountRate; + this.acceptedAt = acceptedAt; } public boolean matches( @@ -116,6 +137,7 @@ public boolean succeed(Order order) { this.status = OrderRequestStatus.SUCCEEDED; this.order = order; this.failureCode = null; + requestRedisSync(); return true; } @@ -126,6 +148,25 @@ public boolean fail(String failureCode) { this.status = OrderRequestStatus.FAILED; this.failureCode = failureCode; + requestRedisSync(); + return true; + } + + public Long getOrderId() { + return order == null ? null : order.getId(); + } + + public boolean completeRedisSync(long appliedVersion) { + if (!redisSyncPending || desiredVersion != appliedVersion) { + return false; + } + + redisSyncPending = false; return true; } + + private void requestRedisSync() { + redisSyncPending = true; + desiredVersion++; + } } diff --git a/src/main/java/com/dropit/order/exception/OrderErrorCode.java b/src/main/java/com/dropit/order/exception/OrderErrorCode.java index 7d60ec0..8eb73e0 100644 --- a/src/main/java/com/dropit/order/exception/OrderErrorCode.java +++ b/src/main/java/com/dropit/order/exception/OrderErrorCode.java @@ -8,6 +8,7 @@ public enum OrderErrorCode implements ErrorCode { ORDER_NOT_FOUND(HttpStatus.NOT_FOUND, "존재하지 않는 주문입니다."), + ORDER_REQUEST_NOT_FOUND(HttpStatus.NOT_FOUND, "존재하지 않는 주문 요청입니다."), ORDER_ALREADY_CANCELED(HttpStatus.CONFLICT, "이미 취소된 주문입니다."), PURCHASE_LIMIT_EXCEEDED(HttpStatus.CONFLICT, "드랍의 1인당 구매 제한 수량을 초과했습니다."), ORDER_REQUEST_PAYLOAD_MISMATCH(HttpStatus.CONFLICT, "주문 요청 내용이 기존 요청과 다릅니다."), diff --git a/src/main/java/com/dropit/order/messaging/InvalidOrderMessageException.java b/src/main/java/com/dropit/order/messaging/InvalidOrderMessageException.java new file mode 100644 index 0000000..4f332fc --- /dev/null +++ b/src/main/java/com/dropit/order/messaging/InvalidOrderMessageException.java @@ -0,0 +1,8 @@ +package com.dropit.order.messaging; + +public class InvalidOrderMessageException extends RuntimeException { + + public InvalidOrderMessageException(String message) { + super(message); + } +} diff --git a/src/main/java/com/dropit/order/messaging/OrderMessage.java b/src/main/java/com/dropit/order/messaging/OrderMessage.java new file mode 100644 index 0000000..f6a6aef --- /dev/null +++ b/src/main/java/com/dropit/order/messaging/OrderMessage.java @@ -0,0 +1,22 @@ +package com.dropit.order.messaging; + +import java.math.BigDecimal; +import java.time.Instant; +import java.util.UUID; + +public record OrderMessage( + int schemaVersion, + UUID requestId, + Long userId, + Long dropId, + String idempotencyKeyHash, + String requestFingerprint, + String productName, + BigDecimal unitPrice, + int quantity, + int discountRate, + Instant acceptedAt +) { + + public static final int CURRENT_SCHEMA_VERSION = 1; +} diff --git a/src/main/java/com/dropit/order/service/OrderFinalizationService.java b/src/main/java/com/dropit/order/service/OrderFinalizationService.java index 7284c9e..ab5d0cd 100644 --- a/src/main/java/com/dropit/order/service/OrderFinalizationService.java +++ b/src/main/java/com/dropit/order/service/OrderFinalizationService.java @@ -4,17 +4,14 @@ import com.dropit.drop.exception.DropErrorCode; import com.dropit.drop.repository.DropRepository; import com.dropit.global.exception.ServiceException; -import com.dropit.order.dto.request.OrderFinalizationRequest; import com.dropit.order.entity.Order; import com.dropit.order.entity.OrderItem; import com.dropit.order.entity.OrderRequest; -import com.dropit.order.entity.OrderRequestStatus; import com.dropit.order.exception.OrderErrorCode; import com.dropit.order.repository.DropUserPurchaseRepository; import com.dropit.order.repository.OrderItemRepository; import com.dropit.order.repository.OrderRepository; import com.dropit.order.repository.OrderRequestRepository; -import com.dropit.order.validation.OrderFinalizationValidator; import com.dropit.user.entity.User; import com.dropit.user.exception.UserErrorCode; import com.dropit.user.repository.UserRepository; @@ -23,7 +20,7 @@ import org.springframework.transaction.annotation.Transactional; import java.math.BigDecimal; -import java.util.Optional; +import java.util.UUID; /** * Consumer가 전달한 주문 요청을 MySQL 트랜잭션으로 중복 없이 최종 주문 처리 @@ -40,45 +37,31 @@ public class OrderFinalizationService { private final OrderItemRepository orderItemRepository; @Transactional - public OrderRequestStatus finalizeOrder(OrderFinalizationRequest input) { - // 1. 입력 검증 및 처리 대상 Drop 확인 - OrderFinalizationValidator.validate(input); - - Optional knownRequest = orderRequestRepository.findById(input.requestId()); - Long dropIdToLock = knownRequest.map(OrderRequest::getDropId).orElse(input.dropId()); - // 모든 주문 확정 경로는 Drop을 먼저 잠근 뒤 OrderRequest를 잠근다. - Drop drop = dropRepository.findByIdForUpdate(dropIdToLock) - .orElseThrow(() -> new ServiceException(DropErrorCode.DROP_NOT_FOUND)); - - // 2. 접수 기록 확인 및 중복 처리 방지 - OrderRequest request = orderRequestRepository.findByRequestIdForUpdate(input.requestId()) - .orElseGet(() -> createRequest(input)); - - OrderFinalizationValidator.validateStoredRequest(request, input); + public void finalizeOrder(UUID requestId) { + // 1. 중복 orderRequest 처리 방지 + OrderRequest request = orderRequestRepository.findByRequestIdForUpdate(requestId) + .orElseThrow(() -> new ServiceException(OrderErrorCode.ORDER_REQUEST_NOT_FOUND)); if (request.isTerminal()) { - return request.getStatus(); + return; } - // 3. 유저, 재고, 구매한도 검증 - User user; - try { - user = userRepository.findById(request.getUserId()) - .orElseThrow(() -> new ServiceException(UserErrorCode.USER_NOT_FOUND)); - drop.validateStockForFinalization(request.getQuantity()); - reservePurchaseLimit(user.getId(), drop, request.getQuantity()); - } catch (ServiceException exception) { - request.fail(exception.getErrorCode().toString()); - return request.getStatus(); - } + // 2. 주문 확정용 user, drop 조회 + User user = userRepository.findById(request.getUserId()) + .orElseThrow(() -> new ServiceException(UserErrorCode.USER_NOT_FOUND)); + Drop drop = dropRepository.findById(request.getDropId()) + .orElseThrow(() -> new ServiceException(DropErrorCode.DROP_NOT_FOUND)); - // 4. 재고 차감 및 주문 생성 - drop.decreaseStockForFinalization(request.getQuantity()); + // 3. 인당 한도 내 구매량 증가 및 조건부 재고 차감 + reservePurchaseLimit(user.getId(), drop, request.getQuantity()); + decreaseStock(drop.getId(), request.getQuantity()); + // 4. Order, OrderItem 생성 및 주문 요청 확정 BigDecimal totalPrice = OrderItem.calculateItemTotalPrice( request.getUnitPrice(), request.getDiscountRate(), request.getQuantity() ); + Order order = orderRepository.save(new Order(user, totalPrice)); orderItemRepository.save(new OrderItem( order, @@ -88,37 +71,13 @@ public OrderRequestStatus finalizeOrder(OrderFinalizationRequest input) { request.getDiscountRate(), request.getQuantity() )); - request.succeed(order); - return request.getStatus(); - } - private OrderRequest createRequest(OrderFinalizationRequest input) { - OrderRequest existingRequest = orderRequestRepository - .findByUserIdAndDropIdAndIdempotencyKeyHashForUpdate( - input.userId(), - input.dropId(), - input.idempotencyKeyHash() - ) - .orElse(null); - if (existingRequest != null) { - throw new ServiceException(OrderErrorCode.IDEMPOTENCY_KEY_REUSED); - } - - return orderRequestRepository.saveAndFlush(new OrderRequest( - input.requestId(), - input.userId(), - input.dropId(), - input.idempotencyKeyHash(), - input.payloadHash(), - input.productName(), - input.unitPrice(), - input.quantity(), - input.discountRate() - )); + request.succeed(order); } private void reservePurchaseLimit(Long userId, Drop drop, int quantity) { dropUserPurchaseRepository.createCounterIfAbsent(drop.getId(), userId); + int increasedCount = dropUserPurchaseRepository.increaseWithinLimit( drop.getId(), userId, @@ -129,4 +88,14 @@ private void reservePurchaseLimit(Long userId, Drop drop, int quantity) { throw new ServiceException(OrderErrorCode.PURCHASE_LIMIT_EXCEEDED); } } + + private void decreaseStock(Long dropId, int quantity) { + int decreasedCount = dropRepository.decreaseStockIfAvailable( + dropId, + quantity + ); + if (decreasedCount != 1) { + throw new ServiceException(DropErrorCode.INSUFFICIENT_STOCK); + } + } } diff --git a/src/main/java/com/dropit/order/service/OrderRequestFailureService.java b/src/main/java/com/dropit/order/service/OrderRequestFailureService.java new file mode 100644 index 0000000..79f955d --- /dev/null +++ b/src/main/java/com/dropit/order/service/OrderRequestFailureService.java @@ -0,0 +1,29 @@ +package com.dropit.order.service; + +import com.dropit.global.exception.ServiceException; +import com.dropit.order.entity.OrderRequest; +import com.dropit.order.exception.OrderErrorCode; +import com.dropit.order.repository.OrderRequestRepository; +import lombok.RequiredArgsConstructor; +import org.springframework.stereotype.Service; +import org.springframework.transaction.annotation.Propagation; +import org.springframework.transaction.annotation.Transactional; + +import java.util.UUID; + +/** + * 주문요청 확정 실패 시 별도의 트랜잭션으로 failureCode 기록 + */ +@Service +@RequiredArgsConstructor +public class OrderRequestFailureService { + + private final OrderRequestRepository orderRequestRepository; + + @Transactional(propagation = Propagation.REQUIRES_NEW) + public void fail(UUID requestId, String failureCode) { + OrderRequest request = orderRequestRepository.findByRequestIdForUpdate(requestId) + .orElseThrow(() -> new ServiceException(OrderErrorCode.ORDER_REQUEST_NOT_FOUND)); + request.fail(failureCode); + } +} diff --git a/src/main/java/com/dropit/order/service/OrderRequestRegistrationService.java b/src/main/java/com/dropit/order/service/OrderRequestRegistrationService.java new file mode 100644 index 0000000..1a896cf --- /dev/null +++ b/src/main/java/com/dropit/order/service/OrderRequestRegistrationService.java @@ -0,0 +1,49 @@ +package com.dropit.order.service; + +import com.dropit.order.entity.OrderRequest; +import com.dropit.order.messaging.InvalidOrderMessageException; +import com.dropit.order.messaging.OrderMessage; +import com.dropit.order.repository.OrderRequestRepository; +import com.dropit.order.validation.OrderMessageValidator; +import lombok.RequiredArgsConstructor; +import org.springframework.stereotype.Service; +import org.springframework.transaction.annotation.Propagation; +import org.springframework.transaction.annotation.Transactional; + +@Service +@RequiredArgsConstructor +public class OrderRequestRegistrationService { + + private final OrderRequestRepository orderRequestRepository; + + @Transactional(propagation = Propagation.REQUIRES_NEW) + public void register(OrderMessage message) { + OrderMessageValidator.validate(message); + + OrderRequest existing = orderRequestRepository.findById(message.requestId()).orElse(null); + if (existing != null) { + OrderMessageValidator.validateSameRequest(existing, message); + return; + } + + orderRequestRepository.saveAndFlush(new OrderRequest( + message.requestId(), + message.userId(), + message.dropId(), + message.idempotencyKeyHash(), + message.requestFingerprint(), + message.productName(), + message.unitPrice(), + message.quantity(), + message.discountRate(), + OrderMessageValidator.acceptedAt(message) + )); + } + + @Transactional(readOnly = true, propagation = Propagation.REQUIRES_NEW) + public void verifyExisting(OrderMessage message) { + OrderRequest existing = orderRequestRepository.findById(message.requestId()) + .orElseThrow(() -> new InvalidOrderMessageException("중복된 주문 요청 원장을 찾을 수 없습니다.")); + OrderMessageValidator.validateSameRequest(existing, message); + } +} diff --git a/src/main/java/com/dropit/order/validation/OrderMessageValidator.java b/src/main/java/com/dropit/order/validation/OrderMessageValidator.java new file mode 100644 index 0000000..603466f --- /dev/null +++ b/src/main/java/com/dropit/order/validation/OrderMessageValidator.java @@ -0,0 +1,60 @@ +package com.dropit.order.validation; + +import com.dropit.order.entity.OrderRequest; +import com.dropit.order.messaging.InvalidOrderMessageException; +import com.dropit.order.messaging.OrderMessage; +import lombok.AccessLevel; +import lombok.NoArgsConstructor; + +import java.time.LocalDateTime; +import java.time.ZoneId; +import java.util.Objects; + +@NoArgsConstructor(access = AccessLevel.PRIVATE) +public final class OrderMessageValidator { + + private static final ZoneId BUSINESS_ZONE = ZoneId.of("Asia/Seoul"); + + public static void validate(OrderMessage message) { + if (message == null + || message.schemaVersion() != OrderMessage.CURRENT_SCHEMA_VERSION + || message.requestId() == null + || message.userId() == null || message.userId() <= 0 + || message.dropId() == null || message.dropId() <= 0 + || invalidHash(message.idempotencyKeyHash()) + || invalidHash(message.requestFingerprint()) + || message.quantity() <= 0 + || message.acceptedAt() == null + || message.productName() == null || message.productName().isBlank() + || message.productName().length() > 100 + || message.unitPrice() == null + || message.unitPrice().signum() <= 0 + || message.unitPrice().scale() > 0 + || message.unitPrice().precision() - message.unitPrice().scale() > 13 + || message.discountRate() < 0 || message.discountRate() > 100) { + throw new InvalidOrderMessageException("지원하지 않거나 필수 값이 없는 주문 메시지입니다."); + } + } + + public static void validateSameRequest(OrderRequest request, OrderMessage message) { + if (!Objects.equals(request.getUserId(), message.userId()) + || !Objects.equals(request.getDropId(), message.dropId()) + || !Objects.equals(request.getIdempotencyKeyHash(), message.idempotencyKeyHash()) + || !Objects.equals(request.getPayloadHash(), message.requestFingerprint()) + || request.getQuantity() != message.quantity() + || !Objects.equals(request.getAcceptedAt(), acceptedAt(message)) + || !Objects.equals(request.getProductName(), message.productName()) + || request.getUnitPrice().compareTo(message.unitPrice()) != 0 + || request.getDiscountRate() != message.discountRate()) { + throw new InvalidOrderMessageException("동일 requestId에 서로 다른 주문 payload가 전달되었습니다."); + } + } + + public static LocalDateTime acceptedAt(OrderMessage message) { + return LocalDateTime.ofInstant(message.acceptedAt(), BUSINESS_ZONE); + } + + private static boolean invalidHash(String value) { + return value == null || value.isBlank() || value.length() > 64; + } +} From 17a07c22ad25a42c2c1d6dbe78b2e5cdc1102d4f Mon Sep 17 00:00:00 2001 From: Sooyoung Yoon Date: Sun, 13 Sep 2026 15:41:21 +0900 Subject: [PATCH 58/98] =?UTF-8?q?feat(order):=20Redis=20=EC=A3=BC=EB=AC=B8?= =?UTF-8?q?=EC=98=88=EC=95=BD=20=EC=B5=9C=EC=A2=85=EC=83=81=ED=83=9C=20?= =?UTF-8?q?=EB=8F=99=EA=B8=B0=ED=99=94=20=EA=B5=AC=ED=98=84?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../order/redis/OrderRequestSyncCommand.java | 18 ++++++ .../order/redis/OrderRequestSyncResult.java | 8 +++ .../RedisOrderFinalizationSyncAdapter.java | 49 +++++++++++++++ .../service/OrderRequestRedisSyncService.java | 49 +++++++++++++++ src/main/resources/redis/reserve-order.lua | 1 + .../resources/redis/sync-order-request.lua | 63 +++++++++++++++++++ 6 files changed, 188 insertions(+) create mode 100644 src/main/java/com/dropit/order/redis/OrderRequestSyncCommand.java create mode 100644 src/main/java/com/dropit/order/redis/OrderRequestSyncResult.java create mode 100644 src/main/java/com/dropit/order/redis/RedisOrderFinalizationSyncAdapter.java create mode 100644 src/main/java/com/dropit/order/service/OrderRequestRedisSyncService.java create mode 100644 src/main/resources/redis/sync-order-request.lua diff --git a/src/main/java/com/dropit/order/redis/OrderRequestSyncCommand.java b/src/main/java/com/dropit/order/redis/OrderRequestSyncCommand.java new file mode 100644 index 0000000..98d9887 --- /dev/null +++ b/src/main/java/com/dropit/order/redis/OrderRequestSyncCommand.java @@ -0,0 +1,18 @@ +package com.dropit.order.redis; + +import com.dropit.order.entity.OrderRequestStatus; + +import java.util.UUID; + +public record OrderRequestSyncCommand( + UUID requestId, + OrderRequestStatus status, + Long orderId, + Long userId, + Long dropId, + String idempotencyKeyHash, + int quantity, + String failureCode, + long desiredVersion +) { +} diff --git a/src/main/java/com/dropit/order/redis/OrderRequestSyncResult.java b/src/main/java/com/dropit/order/redis/OrderRequestSyncResult.java new file mode 100644 index 0000000..465bc65 --- /dev/null +++ b/src/main/java/com/dropit/order/redis/OrderRequestSyncResult.java @@ -0,0 +1,8 @@ +package com.dropit.order.redis; + +public enum OrderRequestSyncResult { + APPLIED, + ALREADY_APPLIED, + MISSING, + INVALID +} diff --git a/src/main/java/com/dropit/order/redis/RedisOrderFinalizationSyncAdapter.java b/src/main/java/com/dropit/order/redis/RedisOrderFinalizationSyncAdapter.java new file mode 100644 index 0000000..5ed021f --- /dev/null +++ b/src/main/java/com/dropit/order/redis/RedisOrderFinalizationSyncAdapter.java @@ -0,0 +1,49 @@ +package com.dropit.order.redis; + +import lombok.RequiredArgsConstructor; +import org.springframework.core.io.ClassPathResource; +import org.springframework.data.redis.core.StringRedisTemplate; +import org.springframework.data.redis.core.script.DefaultRedisScript; +import org.springframework.stereotype.Component; + +import java.util.List; + +@Component +@RequiredArgsConstructor +public class RedisOrderFinalizationSyncAdapter { + + private static final DefaultRedisScript SYNC_SCRIPT = createScript(); + + private final StringRedisTemplate redisTemplate; + + public OrderRequestSyncResult sync(OrderRequestSyncCommand command) { + String result = redisTemplate.execute( + SYNC_SCRIPT, + List.of( + RedisOrderKeyFactory.idempotencyKey( + command.dropId(), + command.userId(), + command.idempotencyKeyHash() + ), + RedisOrderKeyFactory.stockKey(command.dropId()), + RedisOrderKeyFactory.purchaseKey(command.dropId(), command.userId()) + ), + command.status().name(), + Integer.toString(command.quantity()), + command.orderId() == null ? "" : command.orderId().toString(), + command.failureCode() == null ? "" : command.failureCode(), + Long.toString(command.desiredVersion()) + ); + if (result == null) { + throw new IllegalStateException("Redis 주문 최종 상태 반영 결과가 없습니다."); + } + return OrderRequestSyncResult.valueOf(result); + } + + private static DefaultRedisScript createScript() { + DefaultRedisScript script = new DefaultRedisScript<>(); + script.setLocation(new ClassPathResource("redis/sync-order-request.lua")); + script.setResultType(String.class); + return script; + } +} diff --git a/src/main/java/com/dropit/order/service/OrderRequestRedisSyncService.java b/src/main/java/com/dropit/order/service/OrderRequestRedisSyncService.java new file mode 100644 index 0000000..fd0b054 --- /dev/null +++ b/src/main/java/com/dropit/order/service/OrderRequestRedisSyncService.java @@ -0,0 +1,49 @@ +package com.dropit.order.service; + +import com.dropit.global.exception.ServiceException; +import com.dropit.order.entity.OrderRequest; +import com.dropit.order.exception.OrderErrorCode; +import com.dropit.order.redis.OrderRequestSyncCommand; +import com.dropit.order.redis.OrderRequestSyncResult; +import com.dropit.order.redis.RedisOrderFinalizationSyncAdapter; +import com.dropit.order.repository.OrderRequestRepository; +import lombok.RequiredArgsConstructor; +import org.springframework.stereotype.Service; +import org.springframework.transaction.annotation.Propagation; +import org.springframework.transaction.annotation.Transactional; + +import java.util.UUID; + +@Service +@RequiredArgsConstructor +public class OrderRequestRedisSyncService { + + private final OrderRequestRepository orderRequestRepository; + private final RedisOrderFinalizationSyncAdapter syncAdapter; + + @Transactional(propagation = Propagation.REQUIRES_NEW) + public void sync(UUID requestId) { + OrderRequest request = orderRequestRepository.findByRequestIdForUpdate(requestId) + .orElseThrow(() -> new ServiceException(OrderErrorCode.ORDER_REQUEST_NOT_FOUND)); + if (!request.isRedisSyncPending()) { + return; + } + + OrderRequestSyncResult result = syncAdapter.sync(new OrderRequestSyncCommand( + request.getId(), + request.getStatus(), + request.getOrderId(), + request.getUserId(), + request.getDropId(), + request.getIdempotencyKeyHash(), + request.getQuantity(), + request.getFailureCode(), + request.getDesiredVersion() + )); + if (result != OrderRequestSyncResult.APPLIED + && result != OrderRequestSyncResult.ALREADY_APPLIED) { + throw new IllegalStateException("Redis 주문 최종 상태를 반영할 수 없습니다: " + result); + } + request.completeRedisSync(request.getDesiredVersion()); + } +} diff --git a/src/main/resources/redis/reserve-order.lua b/src/main/resources/redis/reserve-order.lua index 46ffc7a..a27cd66 100644 --- a/src/main/resources/redis/reserve-order.lua +++ b/src/main/resources/redis/reserve-order.lua @@ -41,6 +41,7 @@ redis.call( KEYS[3], 'requestId', request_id, 'fingerprint', fingerprint, + 'quantity', quantity, 'status', 'RESERVED' ) redis.call('EXPIRE', KEYS[3], 86400) diff --git a/src/main/resources/redis/sync-order-request.lua b/src/main/resources/redis/sync-order-request.lua new file mode 100644 index 0000000..c7b57b4 --- /dev/null +++ b/src/main/resources/redis/sync-order-request.lua @@ -0,0 +1,63 @@ +-- Redis는 이 스크립트 전체를 하나의 원자적 연산으로 실행한다. +-- DB 주문 처리가 끝난 뒤, Redis에 남아 있는 예약을 최종 상태로 바꾸는 후처리 스크립트 +-- SUCCEEDED: (확정) 이미 차감된 예약 수량은 그대로 두고 상태만 확정한다. +-- FAILED: (복원) 예약 당시 차감했던 재고와 구매량을 한 번 되돌린 뒤 상태를 확정한다. +-- KEYS[1] = {drop:}:idempotency:user:: +-- KEYS[2] = {drop:}:stock +-- KEYS[3] = {drop:}:purchase:user: +-- ARGV[1] = 최종 상태(SUCCEEDED/FAILED), ARGV[2] = quantity, +-- ARGV[3] = orderId, ARGV[4] = failureCode, ARGV[5] = DB 동기화 버전 +local reservationKey = KEYS[1] +local stockKey = KEYS[2] +local purchaseKey = KEYS[3] + +local targetStatus = ARGV[1] +local quantity = tonumber(ARGV[2]) +local orderId = ARGV[3] +local failureCode = ARGV[4] +local desiredVersion = ARGV[5] + +if redis.call('TYPE', reservationKey).ok ~= 'hash' then + -- 어떤 예약을 확정해야 하는지 모르므로 재고·구매량을 임의로 바꾸지 않는다. + return 'MISSING' +end + +local currentStatus = redis.call('HGET', reservationKey, 'status') +if currentStatus == targetStatus then + -- 같은 SQS 메시지가 다시 와도 이미 끝난 작업이므로 아무것도 하지 않는다. + return 'ALREADY_APPLIED' +end +if currentStatus ~= 'RESERVED' then + -- 이미 다른 최종 상태가 기록됐다면 그 결정을 바꾸지 않는다. + return 'INVALID' +end +if tonumber(redis.call('HGET', reservationKey, 'quantity')) ~= quantity then + -- DB 요청과 Redis 예약의 수량이 다르면 잘못된 수량을 복원할 수 있으므로 중단한다. + return 'INVALID' +end + +if targetStatus == 'FAILED' then + -- DB 주문 생성이 실패했으므로 Redis에 미리 잡아 둔 자리를 다시 돌려준다. + if redis.call('TYPE', stockKey).ok ~= 'string' + or redis.call('TYPE', purchaseKey).ok ~= 'string' then + return 'INVALID' + end + local purchased = tonumber(redis.call('GET', purchaseKey)) + if not purchased or purchased < quantity then + return 'INVALID' + end + redis.call('INCRBY', stockKey, quantity) + redis.call('DECRBY', purchaseKey, quantity) +elseif targetStatus ~= 'SUCCEEDED' then + -- 예약은 성공 확정 또는 실패 반환만 가능하다. + return 'INVALID' +end + +-- 상태를 RESERVED에서 최종 상태로 바꾸면, 다음 재시도는 위의 ALREADY_APPLIED로 끝난다. +redis.call('HSET', reservationKey, + 'status', targetStatus, + 'orderId', orderId, + 'failureCode', failureCode, + 'appliedVersion', desiredVersion) + +return 'APPLIED' From 92d054316d2bb028d781a7336d25dfce73e3325c Mon Sep 17 00:00:00 2001 From: Sooyoung Yoon Date: Sun, 13 Sep 2026 16:48:25 +0900 Subject: [PATCH 59/98] =?UTF-8?q?feat(order):=20SQS=20=EC=A3=BC=EB=AC=B8?= =?UTF-8?q?=ED=99=95=EC=A0=95=20Consumer=20=EC=97=B0=EA=B2=B0?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .env.example | 1 + .../com/dropit/DropitServerApplication.java | 2 + .../messaging/OrderMessageProcessor.java | 36 +++++++++++ .../messaging/SqsOrderMessageConsumer.java | 62 +++++++++++++++++++ .../dropit/order/messaging/SqsProperties.java | 7 ++- src/main/resources/application.properties | 9 +-- 6 files changed, 112 insertions(+), 5 deletions(-) create mode 100644 src/main/java/com/dropit/order/messaging/OrderMessageProcessor.java create mode 100644 src/main/java/com/dropit/order/messaging/SqsOrderMessageConsumer.java diff --git a/.env.example b/.env.example index ea10461..3c41bbb 100644 --- a/.env.example +++ b/.env.example @@ -14,6 +14,7 @@ AWS_ACCESS_KEY_ID= AWS_SECRET_ACCESS_KEY= AWS_SQS_ORDER_QUEUE_URL= +AWS_SQS_CONSUMER_ENABLED= DOCS_AUTH_USERNAME= DOCS_AUTH_PASSWORD= \ No newline at end of file diff --git a/src/main/java/com/dropit/DropitServerApplication.java b/src/main/java/com/dropit/DropitServerApplication.java index 78e07d4..beac310 100644 --- a/src/main/java/com/dropit/DropitServerApplication.java +++ b/src/main/java/com/dropit/DropitServerApplication.java @@ -7,8 +7,10 @@ import org.springframework.boot.context.properties.EnableConfigurationProperties; import org.springframework.boot.security.autoconfigure.UserDetailsServiceAutoConfiguration; import org.springframework.data.jpa.repository.config.EnableJpaAuditing; +import org.springframework.scheduling.annotation.EnableScheduling; @EnableJpaAuditing +@EnableScheduling @EnableConfigurationProperties({JwtProperties.class, SqsProperties.class}) @SpringBootApplication(exclude = UserDetailsServiceAutoConfiguration.class) public class DropitServerApplication { diff --git a/src/main/java/com/dropit/order/messaging/OrderMessageProcessor.java b/src/main/java/com/dropit/order/messaging/OrderMessageProcessor.java new file mode 100644 index 0000000..44b4b9c --- /dev/null +++ b/src/main/java/com/dropit/order/messaging/OrderMessageProcessor.java @@ -0,0 +1,36 @@ +package com.dropit.order.messaging; + +import com.dropit.global.exception.ServiceException; +import com.dropit.order.service.OrderFinalizationService; +import com.dropit.order.service.OrderRequestFailureService; +import com.dropit.order.service.OrderRequestRedisSyncService; +import com.dropit.order.service.OrderRequestRegistrationService; +import lombok.RequiredArgsConstructor; +import org.springframework.dao.DataIntegrityViolationException; +import org.springframework.stereotype.Component; + +@Component +@RequiredArgsConstructor +public class OrderMessageProcessor { + + private final OrderRequestRegistrationService registrationService; + private final OrderFinalizationService finalizationService; + private final OrderRequestFailureService failureService; + private final OrderRequestRedisSyncService redisSyncService; + + public void process(OrderMessage message) { + try { + registrationService.register(message); + } catch (DataIntegrityViolationException exception) { + registrationService.verifyExisting(message); + } + + try { + finalizationService.finalizeOrder(message.requestId()); + } catch (ServiceException exception) { + failureService.fail(message.requestId(), exception.getErrorCode().toString()); + } + + redisSyncService.sync(message.requestId()); + } +} diff --git a/src/main/java/com/dropit/order/messaging/SqsOrderMessageConsumer.java b/src/main/java/com/dropit/order/messaging/SqsOrderMessageConsumer.java new file mode 100644 index 0000000..f2efcab --- /dev/null +++ b/src/main/java/com/dropit/order/messaging/SqsOrderMessageConsumer.java @@ -0,0 +1,62 @@ +package com.dropit.order.messaging; + +import lombok.RequiredArgsConstructor; +import lombok.extern.slf4j.Slf4j; +import org.springframework.scheduling.annotation.Scheduled; +import org.springframework.stereotype.Component; +import software.amazon.awssdk.services.sqs.SqsClient; +import software.amazon.awssdk.services.sqs.model.DeleteMessageRequest; +import software.amazon.awssdk.services.sqs.model.Message; +import software.amazon.awssdk.services.sqs.model.ReceiveMessageRequest; +import tools.jackson.databind.ObjectMapper; + +@Slf4j +@Component +@RequiredArgsConstructor +public class SqsOrderMessageConsumer { + + private final SqsClient sqsClient; + private final SqsProperties properties; + private final ObjectMapper objectMapper; + private final OrderMessageProcessor messageProcessor; + + @Scheduled( + initialDelayString = "${app.order.sqs.consumer-initial-delay}", + fixedDelayString = "${app.order.sqs.consumer-poll-delay}" + ) + public void poll() { + if (!properties.consumerEnabled() + || properties.orderQueueUrl() == null + || properties.orderQueueUrl().isBlank()) { + return; + } + + ReceiveMessageRequest request = ReceiveMessageRequest.builder() + .queueUrl(properties.orderQueueUrl()) + .maxNumberOfMessages(properties.consumerMaxNumberOfMessages()) + .waitTimeSeconds(properties.consumerWaitTimeSeconds()) + .visibilityTimeout(properties.consumerVisibilityTimeoutSeconds()) + .build(); + + try { + for (Message message : sqsClient.receiveMessage(request).messages()) { + process(message); + } + } catch (RuntimeException exception) { + log.warn("주문 SQS 수신에 실패했습니다. 메시지를 삭제하지 않고 다음 poll을 기다립니다.", exception); + } + } + + private void process(Message sqsMessage) { + try { + OrderMessage orderMessage = objectMapper.readValue(sqsMessage.body(), OrderMessage.class); + messageProcessor.process(orderMessage); + sqsClient.deleteMessage(DeleteMessageRequest.builder() + .queueUrl(properties.orderQueueUrl()) + .receiptHandle(sqsMessage.receiptHandle()) + .build()); + } catch (RuntimeException exception) { + log.warn("주문 SQS 메시지 처리에 실패했습니다. messageId={}", sqsMessage.messageId(), exception); + } + } +} diff --git a/src/main/java/com/dropit/order/messaging/SqsProperties.java b/src/main/java/com/dropit/order/messaging/SqsProperties.java index bc7fbf0..8addb34 100644 --- a/src/main/java/com/dropit/order/messaging/SqsProperties.java +++ b/src/main/java/com/dropit/order/messaging/SqsProperties.java @@ -5,6 +5,11 @@ @ConfigurationProperties(prefix = "app.order.sqs") public record SqsProperties( String orderQueueUrl, - boolean consumerEnabled + boolean consumerEnabled, + int consumerMaxNumberOfMessages, + int consumerWaitTimeSeconds, + int consumerVisibilityTimeoutSeconds, + long consumerInitialDelay, + long consumerPollDelay ) { } diff --git a/src/main/resources/application.properties b/src/main/resources/application.properties index 499555c..a109bf4 100644 --- a/src/main/resources/application.properties +++ b/src/main/resources/application.properties @@ -22,10 +22,11 @@ spring.cloud.aws.s3.bucket=${AWS_S3_BUCKET} # SQS - order app.order.sqs.order-queue-url=${AWS_SQS_ORDER_QUEUE_URL} app.order.sqs.consumer-enabled=${AWS_SQS_CONSUMER_ENABLED:false} -#app.order.sqs.consumer-initial-delay=${AWS_SQS_CONSUMER_INITIAL_DELAY:1000} -#app.order.sqs.consumer-poll-delay=${AWS_SQS_CONSUMER_POLL_DELAY:1000} -#app.order.sqs.consumer-max-number-of-messages=${AWS_SQS_CONSUMER_MAX_NUMBER_OF_MESSAGES:10} -#app.order.sqs.consumer-wait-time-seconds=${AWS_SQS_CONSUMER_WAIT_TIME_SECONDS:20} +app.order.sqs.consumer-max-number-of-messages=${AWS_SQS_CONSUMER_MAX_NUMBER_OF_MESSAGES:2} +app.order.sqs.consumer-wait-time-seconds=${AWS_SQS_CONSUMER_WAIT_TIME_SECONDS:20} +app.order.sqs.consumer-visibility-timeout-seconds=${AWS_SQS_CONSUMER_VISIBILITY_TIMEOUT_SECONDS:60} +app.order.sqs.consumer-initial-delay=${AWS_SQS_CONSUMER_INITIAL_DELAY:1000} +app.order.sqs.consumer-poll-delay=${AWS_SQS_CONSUMER_POLL_DELAY:1000} # Multipart upload limits spring.servlet.multipart.max-file-size=10MB From b833f4b80a3b3cb5eb9ca7a65151f29a3196d6b2 Mon Sep 17 00:00:00 2001 From: Sooyoung Yoon Date: Sun, 13 Sep 2026 16:48:31 +0900 Subject: [PATCH 60/98] =?UTF-8?q?refactor(order):=20Redis=20=EC=B5=9C?= =?UTF-8?q?=EC=A2=85=EC=83=81=ED=83=9C=20=EB=8F=99=EA=B8=B0=ED=99=94=20?= =?UTF-8?q?=ED=8A=B8=EB=9E=9C=EC=9E=AD=EC=85=98=20=EB=B6=84=EB=A6=AC?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../service/OrderRequestRedisSyncService.java | 27 +++------- .../OrderRequestRedisSyncStateService.java | 52 +++++++++++++++++++ 2 files changed, 59 insertions(+), 20 deletions(-) create mode 100644 src/main/java/com/dropit/order/service/OrderRequestRedisSyncStateService.java diff --git a/src/main/java/com/dropit/order/service/OrderRequestRedisSyncService.java b/src/main/java/com/dropit/order/service/OrderRequestRedisSyncService.java index fd0b054..563f506 100644 --- a/src/main/java/com/dropit/order/service/OrderRequestRedisSyncService.java +++ b/src/main/java/com/dropit/order/service/OrderRequestRedisSyncService.java @@ -1,49 +1,36 @@ package com.dropit.order.service; -import com.dropit.global.exception.ServiceException; -import com.dropit.order.entity.OrderRequest; -import com.dropit.order.exception.OrderErrorCode; import com.dropit.order.redis.OrderRequestSyncCommand; import com.dropit.order.redis.OrderRequestSyncResult; import com.dropit.order.redis.RedisOrderFinalizationSyncAdapter; -import com.dropit.order.repository.OrderRequestRepository; import lombok.RequiredArgsConstructor; import org.springframework.stereotype.Service; import org.springframework.transaction.annotation.Propagation; import org.springframework.transaction.annotation.Transactional; +import java.util.Optional; import java.util.UUID; @Service @RequiredArgsConstructor public class OrderRequestRedisSyncService { - private final OrderRequestRepository orderRequestRepository; + private final OrderRequestRedisSyncStateService stateService; private final RedisOrderFinalizationSyncAdapter syncAdapter; @Transactional(propagation = Propagation.REQUIRES_NEW) public void sync(UUID requestId) { - OrderRequest request = orderRequestRepository.findByRequestIdForUpdate(requestId) - .orElseThrow(() -> new ServiceException(OrderErrorCode.ORDER_REQUEST_NOT_FOUND)); - if (!request.isRedisSyncPending()) { + Optional pendingCommand = stateService.loadPending(requestId); + if (pendingCommand.isEmpty()) { return; } - OrderRequestSyncResult result = syncAdapter.sync(new OrderRequestSyncCommand( - request.getId(), - request.getStatus(), - request.getOrderId(), - request.getUserId(), - request.getDropId(), - request.getIdempotencyKeyHash(), - request.getQuantity(), - request.getFailureCode(), - request.getDesiredVersion() - )); + OrderRequestSyncCommand command = pendingCommand.get(); + OrderRequestSyncResult result = syncAdapter.sync(command); if (result != OrderRequestSyncResult.APPLIED && result != OrderRequestSyncResult.ALREADY_APPLIED) { throw new IllegalStateException("Redis 주문 최종 상태를 반영할 수 없습니다: " + result); } - request.completeRedisSync(request.getDesiredVersion()); + stateService.clearPending(command.requestId(), command.desiredVersion()); } } diff --git a/src/main/java/com/dropit/order/service/OrderRequestRedisSyncStateService.java b/src/main/java/com/dropit/order/service/OrderRequestRedisSyncStateService.java new file mode 100644 index 0000000..3dc0208 --- /dev/null +++ b/src/main/java/com/dropit/order/service/OrderRequestRedisSyncStateService.java @@ -0,0 +1,52 @@ +package com.dropit.order.service; + +import com.dropit.global.exception.ServiceException; +import com.dropit.order.entity.OrderRequest; +import com.dropit.order.exception.OrderErrorCode; +import com.dropit.order.redis.OrderRequestSyncCommand; +import com.dropit.order.repository.OrderRequestRepository; +import lombok.RequiredArgsConstructor; +import org.springframework.stereotype.Service; +import org.springframework.transaction.annotation.Propagation; +import org.springframework.transaction.annotation.Transactional; + +import java.util.Optional; +import java.util.UUID; + +@Service +@RequiredArgsConstructor +public class OrderRequestRedisSyncStateService { + + private final OrderRequestRepository orderRequestRepository; + + @Transactional(propagation = Propagation.REQUIRES_NEW) + public Optional loadPending(UUID requestId) { + OrderRequest request = findForUpdate(requestId); + if (!request.isRedisSyncPending()) { + return Optional.empty(); + } + + return Optional.of(new OrderRequestSyncCommand( + request.getId(), + request.getStatus(), + request.getOrderId(), + request.getUserId(), + request.getDropId(), + request.getIdempotencyKeyHash(), + request.getQuantity(), + request.getFailureCode(), + request.getDesiredVersion() + )); + } + + @Transactional(propagation = Propagation.REQUIRES_NEW) + public void clearPending(UUID requestId, long desiredVersion) { + OrderRequest request = findForUpdate(requestId); + request.completeRedisSync(desiredVersion); + } + + private OrderRequest findForUpdate(UUID requestId) { + return orderRequestRepository.findByRequestIdForUpdate(requestId) + .orElseThrow(() -> new ServiceException(OrderErrorCode.ORDER_REQUEST_NOT_FOUND)); + } +} From a50f66c16db7d703bfb984b3e4e6a2b7ca48cc1b Mon Sep 17 00:00:00 2001 From: Sooyoung Yoon Date: Sun, 13 Sep 2026 17:06:45 +0900 Subject: [PATCH 61/98] =?UTF-8?q?chore(order):=20SQS=20=EC=A3=BC=EB=AC=B8?= =?UTF-8?q?=ED=99=95=EC=A0=95=20Consumer=EC=97=90=20=EB=8F=99=EC=8B=9C?= =?UTF-8?q?=EC=B2=98=EB=A6=AC=20=EC=83=81=ED=95=9C=20=EC=84=A4=EC=A0=95?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../messaging/OrderSqsConsumerConfig.java | 29 +++++++++++++++++++ .../messaging/SqsOrderMessageConsumer.java | 13 ++++++++- .../dropit/order/messaging/SqsProperties.java | 1 + src/main/resources/application.properties | 1 + 4 files changed, 43 insertions(+), 1 deletion(-) create mode 100644 src/main/java/com/dropit/order/messaging/OrderSqsConsumerConfig.java diff --git a/src/main/java/com/dropit/order/messaging/OrderSqsConsumerConfig.java b/src/main/java/com/dropit/order/messaging/OrderSqsConsumerConfig.java new file mode 100644 index 0000000..3b72b3f --- /dev/null +++ b/src/main/java/com/dropit/order/messaging/OrderSqsConsumerConfig.java @@ -0,0 +1,29 @@ +package com.dropit.order.messaging; + +import org.springframework.context.annotation.Bean; +import org.springframework.context.annotation.Configuration; + +import java.util.concurrent.ExecutorService; +import java.util.concurrent.SynchronousQueue; +import java.util.concurrent.ThreadPoolExecutor; +import java.util.concurrent.TimeUnit; + +@Configuration +public class OrderSqsConsumerConfig { + + @Bean(destroyMethod = "shutdown") + ExecutorService sqsOrderConsumerExecutor(SqsProperties properties) { + if (properties.consumerConcurrency() <= 0) { + throw new IllegalArgumentException("app.order.sqs.consumer-concurrency must be positive"); + } + + return new ThreadPoolExecutor( + properties.consumerConcurrency(), + properties.consumerConcurrency(), + 0L, + TimeUnit.MILLISECONDS, + new SynchronousQueue<>(), + new ThreadPoolExecutor.AbortPolicy() + ); + } +} diff --git a/src/main/java/com/dropit/order/messaging/SqsOrderMessageConsumer.java b/src/main/java/com/dropit/order/messaging/SqsOrderMessageConsumer.java index f2efcab..94e7bc1 100644 --- a/src/main/java/com/dropit/order/messaging/SqsOrderMessageConsumer.java +++ b/src/main/java/com/dropit/order/messaging/SqsOrderMessageConsumer.java @@ -10,6 +10,9 @@ import software.amazon.awssdk.services.sqs.model.ReceiveMessageRequest; import tools.jackson.databind.ObjectMapper; +import java.util.concurrent.ExecutorService; +import java.util.concurrent.RejectedExecutionException; + @Slf4j @Component @RequiredArgsConstructor @@ -19,6 +22,7 @@ public class SqsOrderMessageConsumer { private final SqsProperties properties; private final ObjectMapper objectMapper; private final OrderMessageProcessor messageProcessor; + private final ExecutorService sqsOrderConsumerExecutor; @Scheduled( initialDelayString = "${app.order.sqs.consumer-initial-delay}", @@ -40,7 +44,14 @@ public void poll() { try { for (Message message : sqsClient.receiveMessage(request).messages()) { - process(message); + try { + // 설정된 동시 처리량 안에서 메시지를 병렬 처리한다. + sqsOrderConsumerExecutor.execute(() -> process(message)); + } catch (RejectedExecutionException exception) { + // 처리 여유가 없으면 ACK하지 않아 visibility timeout 후 재전달된다. + log.warn("주문 SQS 처리 작업이 가득 차 메시지를 삭제하지 않습니다. messageId={}", + message.messageId()); + } } } catch (RuntimeException exception) { log.warn("주문 SQS 수신에 실패했습니다. 메시지를 삭제하지 않고 다음 poll을 기다립니다.", exception); diff --git a/src/main/java/com/dropit/order/messaging/SqsProperties.java b/src/main/java/com/dropit/order/messaging/SqsProperties.java index 8addb34..5e720f1 100644 --- a/src/main/java/com/dropit/order/messaging/SqsProperties.java +++ b/src/main/java/com/dropit/order/messaging/SqsProperties.java @@ -6,6 +6,7 @@ public record SqsProperties( String orderQueueUrl, boolean consumerEnabled, + int consumerConcurrency, int consumerMaxNumberOfMessages, int consumerWaitTimeSeconds, int consumerVisibilityTimeoutSeconds, diff --git a/src/main/resources/application.properties b/src/main/resources/application.properties index a109bf4..0371f6c 100644 --- a/src/main/resources/application.properties +++ b/src/main/resources/application.properties @@ -22,6 +22,7 @@ spring.cloud.aws.s3.bucket=${AWS_S3_BUCKET} # SQS - order app.order.sqs.order-queue-url=${AWS_SQS_ORDER_QUEUE_URL} app.order.sqs.consumer-enabled=${AWS_SQS_CONSUMER_ENABLED:false} +app.order.sqs.consumer-concurrency=${AWS_SQS_CONSUMER_CONCURRENCY:2} app.order.sqs.consumer-max-number-of-messages=${AWS_SQS_CONSUMER_MAX_NUMBER_OF_MESSAGES:2} app.order.sqs.consumer-wait-time-seconds=${AWS_SQS_CONSUMER_WAIT_TIME_SECONDS:20} app.order.sqs.consumer-visibility-timeout-seconds=${AWS_SQS_CONSUMER_VISIBILITY_TIMEOUT_SECONDS:60} From 8abd0a112804c88a65e139381b46237cdf343dc1 Mon Sep 17 00:00:00 2001 From: Sooyoung Yoon Date: Sun, 13 Sep 2026 17:12:47 +0900 Subject: [PATCH 62/98] =?UTF-8?q?fix(order):=20Consumer=20=EC=B2=98?= =?UTF-8?q?=EB=A6=AC=20=EC=97=AC=EC=9C=A0=EB=A7=8C=ED=81=BC=20SQS=20?= =?UTF-8?q?=EB=A9=94=EC=8B=9C=EC=A7=80=20=EC=88=98=EC=8B=A0?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../order/messaging/OrderSqsConsumerConfig.java | 3 +-- .../order/messaging/SqsOrderMessageConsumer.java | 12 +++++++++--- 2 files changed, 10 insertions(+), 5 deletions(-) diff --git a/src/main/java/com/dropit/order/messaging/OrderSqsConsumerConfig.java b/src/main/java/com/dropit/order/messaging/OrderSqsConsumerConfig.java index 3b72b3f..511d721 100644 --- a/src/main/java/com/dropit/order/messaging/OrderSqsConsumerConfig.java +++ b/src/main/java/com/dropit/order/messaging/OrderSqsConsumerConfig.java @@ -3,7 +3,6 @@ import org.springframework.context.annotation.Bean; import org.springframework.context.annotation.Configuration; -import java.util.concurrent.ExecutorService; import java.util.concurrent.SynchronousQueue; import java.util.concurrent.ThreadPoolExecutor; import java.util.concurrent.TimeUnit; @@ -12,7 +11,7 @@ public class OrderSqsConsumerConfig { @Bean(destroyMethod = "shutdown") - ExecutorService sqsOrderConsumerExecutor(SqsProperties properties) { + ThreadPoolExecutor sqsOrderConsumerExecutor(SqsProperties properties) { if (properties.consumerConcurrency() <= 0) { throw new IllegalArgumentException("app.order.sqs.consumer-concurrency must be positive"); } diff --git a/src/main/java/com/dropit/order/messaging/SqsOrderMessageConsumer.java b/src/main/java/com/dropit/order/messaging/SqsOrderMessageConsumer.java index 94e7bc1..75464cd 100644 --- a/src/main/java/com/dropit/order/messaging/SqsOrderMessageConsumer.java +++ b/src/main/java/com/dropit/order/messaging/SqsOrderMessageConsumer.java @@ -10,8 +10,8 @@ import software.amazon.awssdk.services.sqs.model.ReceiveMessageRequest; import tools.jackson.databind.ObjectMapper; -import java.util.concurrent.ExecutorService; import java.util.concurrent.RejectedExecutionException; +import java.util.concurrent.ThreadPoolExecutor; @Slf4j @Component @@ -22,7 +22,7 @@ public class SqsOrderMessageConsumer { private final SqsProperties properties; private final ObjectMapper objectMapper; private final OrderMessageProcessor messageProcessor; - private final ExecutorService sqsOrderConsumerExecutor; + private final ThreadPoolExecutor sqsOrderConsumerExecutor; @Scheduled( initialDelayString = "${app.order.sqs.consumer-initial-delay}", @@ -35,9 +35,15 @@ public void poll() { return; } + int availableWorkerCount = properties.consumerConcurrency() - sqsOrderConsumerExecutor.getActiveCount(); + if (availableWorkerCount <= 0) { + return; + } + ReceiveMessageRequest request = ReceiveMessageRequest.builder() .queueUrl(properties.orderQueueUrl()) - .maxNumberOfMessages(properties.consumerMaxNumberOfMessages()) + // 처리 가능한 수만 받아, 실행 대기열에 넣지 못한 메시지의 재전달을 줄인다. + .maxNumberOfMessages(Math.min(properties.consumerMaxNumberOfMessages(), availableWorkerCount)) .waitTimeSeconds(properties.consumerWaitTimeSeconds()) .visibilityTimeout(properties.consumerVisibilityTimeoutSeconds()) .build(); From 5455fd5eac253115245e5825976c59bfc3928f0f Mon Sep 17 00:00:00 2001 From: Sooyoung Yoon Date: Sun, 13 Sep 2026 17:16:53 +0900 Subject: [PATCH 63/98] =?UTF-8?q?fix(order):=20Redis=20=EB=8F=99=EA=B8=B0?= =?UTF-8?q?=ED=99=94=EB=A5=BC=20=ED=8A=B8=EB=9E=9C=EC=9E=AD=EC=85=98=20?= =?UTF-8?q?=EB=B0=96=EC=97=90=EC=84=9C=20=EC=8B=A4=ED=96=89?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../com/dropit/order/service/OrderRequestRedisSyncService.java | 3 --- 1 file changed, 3 deletions(-) diff --git a/src/main/java/com/dropit/order/service/OrderRequestRedisSyncService.java b/src/main/java/com/dropit/order/service/OrderRequestRedisSyncService.java index 563f506..2f96cd7 100644 --- a/src/main/java/com/dropit/order/service/OrderRequestRedisSyncService.java +++ b/src/main/java/com/dropit/order/service/OrderRequestRedisSyncService.java @@ -5,8 +5,6 @@ import com.dropit.order.redis.RedisOrderFinalizationSyncAdapter; import lombok.RequiredArgsConstructor; import org.springframework.stereotype.Service; -import org.springframework.transaction.annotation.Propagation; -import org.springframework.transaction.annotation.Transactional; import java.util.Optional; import java.util.UUID; @@ -18,7 +16,6 @@ public class OrderRequestRedisSyncService { private final OrderRequestRedisSyncStateService stateService; private final RedisOrderFinalizationSyncAdapter syncAdapter; - @Transactional(propagation = Propagation.REQUIRES_NEW) public void sync(UUID requestId) { Optional pendingCommand = stateService.loadPending(requestId); if (pendingCommand.isEmpty()) { From 235a9be149dc934e1cd38309b8ffbb04628aa155 Mon Sep 17 00:00:00 2001 From: Sooyoung Yoon Date: Sun, 13 Sep 2026 17:44:17 +0900 Subject: [PATCH 64/98] =?UTF-8?q?fix(order):=20order-queue-url=20=EA=B8=B0?= =?UTF-8?q?=EB=B3=B8=EA=B0=92=20=EC=A7=80=EC=A0=95,=20clearAutomatically?= =?UTF-8?q?=20=EC=A0=9C=EA=B1=B0=20=ED=94=BC=EB=93=9C=EB=B0=B1=20=EB=B0=98?= =?UTF-8?q?=EC=98=81?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- src/main/java/com/dropit/drop/repository/DropRepository.java | 2 +- src/main/resources/application.properties | 2 +- 2 files changed, 2 insertions(+), 2 deletions(-) diff --git a/src/main/java/com/dropit/drop/repository/DropRepository.java b/src/main/java/com/dropit/drop/repository/DropRepository.java index 8231d6d..a6fee0d 100644 --- a/src/main/java/com/dropit/drop/repository/DropRepository.java +++ b/src/main/java/com/dropit/drop/repository/DropRepository.java @@ -33,7 +33,7 @@ Page findAllByProductSellerId( @Query("select d from Drop d where d.id = :dropId") Optional findByIdForUpdate(@Param("dropId") Long dropId); - @Modifying(flushAutomatically = true, clearAutomatically = true) + @Modifying(flushAutomatically = true) @Query(""" update Drop d set d.remainingQuantity = d.remainingQuantity - :quantity diff --git a/src/main/resources/application.properties b/src/main/resources/application.properties index 0371f6c..01262c2 100644 --- a/src/main/resources/application.properties +++ b/src/main/resources/application.properties @@ -20,7 +20,7 @@ spring.cloud.aws.region.static=ap-northeast-2 spring.cloud.aws.s3.bucket=${AWS_S3_BUCKET} # SQS - order -app.order.sqs.order-queue-url=${AWS_SQS_ORDER_QUEUE_URL} +app.order.sqs.order-queue-url=${AWS_SQS_ORDER_QUEUE_URL:} app.order.sqs.consumer-enabled=${AWS_SQS_CONSUMER_ENABLED:false} app.order.sqs.consumer-concurrency=${AWS_SQS_CONSUMER_CONCURRENCY:2} app.order.sqs.consumer-max-number-of-messages=${AWS_SQS_CONSUMER_MAX_NUMBER_OF_MESSAGES:2} From 3434f08f70d897c7b277906881f8ed8774e020a7 Mon Sep 17 00:00:00 2001 From: Hyiyek Date: Sun, 13 Sep 2026 17:44:47 +0900 Subject: [PATCH 65/98] =?UTF-8?q?perf(server):=20=EC=84=B1=EB=8A=A5=20?= =?UTF-8?q?=ED=94=84=EB=A1=9C=ED=95=84=EC=97=90=20=EA=B0=80=EC=83=81=20?= =?UTF-8?q?=EC=8A=A4=EB=A0=88=EB=93=9C=20=EC=A0=81=EC=9A=A9?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- src/main/resources/application-performance.properties | 3 +++ 1 file changed, 3 insertions(+) diff --git a/src/main/resources/application-performance.properties b/src/main/resources/application-performance.properties index b8b99c5..6437227 100644 --- a/src/main/resources/application-performance.properties +++ b/src/main/resources/application-performance.properties @@ -2,3 +2,6 @@ # This profile is enabled only while measuring the local performance scenario. server.tomcat.accept-count=10000 server.tomcat.max-connections=12000 + +# Let blocking HTTP requests wait on lightweight Java 21 virtual threads. +spring.threads.virtual.enabled=true From fd70f4381f21506cb5498246e69ab9ba501d78e3 Mon Sep 17 00:00:00 2001 From: Sooyoung Yoon Date: Sun, 13 Sep 2026 17:53:28 +0900 Subject: [PATCH 66/98] =?UTF-8?q?fix(order):=20acceptedAt=20=EC=A0=95?= =?UTF-8?q?=EB=B0=80=EB=8F=84=EB=A5=BC=20=EB=82=98=EB=85=B8=EC=B4=88?= =?UTF-8?q?=EC=97=90=EC=84=9C=20=EB=A7=88=EC=9D=B4=ED=81=AC=EB=A1=9C?= =?UTF-8?q?=EC=B4=88=20=EB=8B=A8=EC=9C=84=EB=A1=9C=20=EC=A0=95=EA=B7=9C?= =?UTF-8?q?=ED=99=94?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../validation/OrderMessageValidator.java | 6 ++- .../validation/OrderMessageValidatorTest.java | 51 +++++++++++++++++++ 2 files changed, 56 insertions(+), 1 deletion(-) create mode 100644 src/test/java/com/dropit/order/validation/OrderMessageValidatorTest.java diff --git a/src/main/java/com/dropit/order/validation/OrderMessageValidator.java b/src/main/java/com/dropit/order/validation/OrderMessageValidator.java index 603466f..8d66391 100644 --- a/src/main/java/com/dropit/order/validation/OrderMessageValidator.java +++ b/src/main/java/com/dropit/order/validation/OrderMessageValidator.java @@ -8,6 +8,7 @@ import java.time.LocalDateTime; import java.time.ZoneId; +import java.time.temporal.ChronoUnit; import java.util.Objects; @NoArgsConstructor(access = AccessLevel.PRIVATE) @@ -51,7 +52,10 @@ public static void validateSameRequest(OrderRequest request, OrderMessage messag } public static LocalDateTime acceptedAt(OrderMessage message) { - return LocalDateTime.ofInstant(message.acceptedAt(), BUSINESS_ZONE); + return LocalDateTime.ofInstant( + message.acceptedAt().truncatedTo(ChronoUnit.MICROS), + BUSINESS_ZONE + ); } private static boolean invalidHash(String value) { diff --git a/src/test/java/com/dropit/order/validation/OrderMessageValidatorTest.java b/src/test/java/com/dropit/order/validation/OrderMessageValidatorTest.java new file mode 100644 index 0000000..44d1af5 --- /dev/null +++ b/src/test/java/com/dropit/order/validation/OrderMessageValidatorTest.java @@ -0,0 +1,51 @@ +package com.dropit.order.validation; + +import com.dropit.order.entity.OrderRequest; +import com.dropit.order.messaging.OrderMessage; +import org.junit.jupiter.api.DisplayName; +import org.junit.jupiter.api.Test; + +import java.math.BigDecimal; +import java.time.Instant; +import java.time.LocalDateTime; +import java.util.UUID; + +import static org.junit.jupiter.api.Assertions.assertDoesNotThrow; +import static org.junit.jupiter.api.Assertions.assertEquals; + +class OrderMessageValidatorTest { + + @Test + @DisplayName("acceptedAt의 나노초 차이는 MySQL 저장 정밀도에 맞춰 동일 요청으로 판단한다") + void normalizeAcceptedAtToMicroseconds() { + OrderMessage message = new OrderMessage( + OrderMessage.CURRENT_SCHEMA_VERSION, + UUID.randomUUID(), + 1L, + 2L, + "idempotency-key-hash", + "2:1", + "Limited Hoodie", + new BigDecimal("59000"), + 1, + 20, + Instant.parse("2026-09-13T12:34:56.123456789Z") + ); + LocalDateTime acceptedAt = OrderMessageValidator.acceptedAt(message); + OrderRequest request = new OrderRequest( + message.requestId(), + message.userId(), + message.dropId(), + message.idempotencyKeyHash(), + message.requestFingerprint(), + message.productName(), + message.unitPrice(), + message.quantity(), + message.discountRate(), + acceptedAt + ); + + assertEquals(123_456_000, acceptedAt.getNano()); + assertDoesNotThrow(() -> OrderMessageValidator.validateSameRequest(request, message)); + } +} From 9ea61be24a2d572de1c5b9e5af8fe15b18b01b57 Mon Sep 17 00:00:00 2001 From: Sooyoung Yoon Date: Sun, 13 Sep 2026 18:05:13 +0900 Subject: [PATCH 67/98] =?UTF-8?q?fix(order):=20Consumer=20=EC=88=98?= =?UTF-8?q?=EC=8B=A0=20=EC=84=A4=EC=A0=95=20=EC=8B=9C=EC=9E=91=20=EC=8B=9C?= =?UTF-8?q?=20=EA=B2=80=EC=A6=9D?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../messaging/OrderSqsConsumerConfig.java | 25 +++++++ .../messaging/OrderSqsConsumerConfigTest.java | 66 +++++++++++++++++++ 2 files changed, 91 insertions(+) create mode 100644 src/test/java/com/dropit/order/messaging/OrderSqsConsumerConfigTest.java diff --git a/src/main/java/com/dropit/order/messaging/OrderSqsConsumerConfig.java b/src/main/java/com/dropit/order/messaging/OrderSqsConsumerConfig.java index 511d721..f6e13ec 100644 --- a/src/main/java/com/dropit/order/messaging/OrderSqsConsumerConfig.java +++ b/src/main/java/com/dropit/order/messaging/OrderSqsConsumerConfig.java @@ -15,6 +15,7 @@ ThreadPoolExecutor sqsOrderConsumerExecutor(SqsProperties properties) { if (properties.consumerConcurrency() <= 0) { throw new IllegalArgumentException("app.order.sqs.consumer-concurrency must be positive"); } + validateActiveConsumer(properties); return new ThreadPoolExecutor( properties.consumerConcurrency(), @@ -25,4 +26,28 @@ ThreadPoolExecutor sqsOrderConsumerExecutor(SqsProperties properties) { new ThreadPoolExecutor.AbortPolicy() ); } + + private void validateActiveConsumer(SqsProperties properties) { + if (!properties.consumerEnabled()) { + return; + } + if (properties.orderQueueUrl() == null || properties.orderQueueUrl().isBlank()) { + throw new IllegalArgumentException("app.order.sqs.order-queue-url must be configured"); + } + + requireRange(properties.consumerMaxNumberOfMessages(), 1, 10, + "app.order.sqs.consumer-max-number-of-messages"); + requireRange(properties.consumerWaitTimeSeconds(), 0, 20, + "app.order.sqs.consumer-wait-time-seconds"); + requireRange(properties.consumerVisibilityTimeoutSeconds(), 0, 43_200, + "app.order.sqs.consumer-visibility-timeout-seconds"); + } + + private void requireRange(int value, int min, int max, String propertyName) { + if (value < min || value > max) { + throw new IllegalArgumentException( + propertyName + " must be between " + min + " and " + max + ); + } + } } diff --git a/src/test/java/com/dropit/order/messaging/OrderSqsConsumerConfigTest.java b/src/test/java/com/dropit/order/messaging/OrderSqsConsumerConfigTest.java new file mode 100644 index 0000000..31e7a33 --- /dev/null +++ b/src/test/java/com/dropit/order/messaging/OrderSqsConsumerConfigTest.java @@ -0,0 +1,66 @@ +package com.dropit.order.messaging; + +import org.junit.jupiter.api.DisplayName; +import org.junit.jupiter.api.Test; +import org.junit.jupiter.params.ParameterizedTest; +import org.junit.jupiter.params.provider.MethodSource; + +import java.util.concurrent.ThreadPoolExecutor; +import java.util.stream.Stream; + +import static org.junit.jupiter.api.Assertions.assertDoesNotThrow; +import static org.junit.jupiter.api.Assertions.assertThrows; + +class OrderSqsConsumerConfigTest { + + private final OrderSqsConsumerConfig config = new OrderSqsConsumerConfig(); + + @ParameterizedTest + @MethodSource("invalidActiveProperties") + @DisplayName("활성화된 Consumer의 SQS 수신 설정이 유효하지 않으면 시작에 실패한다") + void rejectInvalidActiveConsumerProperties(SqsProperties properties) { + assertThrows(IllegalArgumentException.class, () -> config.sqsOrderConsumerExecutor(properties)); + } + + @Test + @DisplayName("비활성화된 Consumer는 SQS 수신 설정을 사용하지 않는다") + void ignoreReceivePropertiesWhenConsumerIsDisabled() { + SqsProperties properties = properties(false, "", 0, -1, 43_201); + + ThreadPoolExecutor executor = assertDoesNotThrow( + () -> config.sqsOrderConsumerExecutor(properties) + ); + executor.shutdown(); + } + + private static Stream invalidActiveProperties() { + return Stream.of( + properties(true, "", 1, 0, 0), + properties(true, "queue-url", 0, 0, 0), + properties(true, "queue-url", 11, 0, 0), + properties(true, "queue-url", 1, -1, 0), + properties(true, "queue-url", 1, 21, 0), + properties(true, "queue-url", 1, 0, -1), + properties(true, "queue-url", 1, 0, 43_201) + ); + } + + private static SqsProperties properties( + boolean enabled, + String queueUrl, + int maxNumberOfMessages, + int waitTimeSeconds, + int visibilityTimeoutSeconds + ) { + return new SqsProperties( + queueUrl, + enabled, + 1, + maxNumberOfMessages, + waitTimeSeconds, + visibilityTimeoutSeconds, + 1_000, + 1_000 + ); + } +} From ef88ef9276751fde7c054152a83ec4625457a97a Mon Sep 17 00:00:00 2001 From: Hyiyek Date: Sun, 13 Sep 2026 18:26:02 +0900 Subject: [PATCH 68/98] =?UTF-8?q?perf(server):=20Drop=20=EC=A1=B0=ED=9A=8C?= =?UTF-8?q?=204=EB=8C=80=20=EB=B6=84=EC=82=B0=20=ED=99=98=EA=B2=BD=20?= =?UTF-8?q?=EC=B6=94=EA=B0=80?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- performance/nginx/drop-detail-cluster.conf | 29 ++++ performance/start-drop-detail-cluster.ps1 | 155 +++++++++++++++++++++ 2 files changed, 184 insertions(+) create mode 100644 performance/nginx/drop-detail-cluster.conf create mode 100644 performance/start-drop-detail-cluster.ps1 diff --git a/performance/nginx/drop-detail-cluster.conf b/performance/nginx/drop-detail-cluster.conf new file mode 100644 index 0000000..a8d47be --- /dev/null +++ b/performance/nginx/drop-detail-cluster.conf @@ -0,0 +1,29 @@ +worker_processes auto; + +events { + worker_connections 16384; +} + +http { + upstream dropit_backend { + least_conn; + server dropit-performance-app-1:8080; + server dropit-performance-app-2:8080; + server dropit-performance-app-3:8080; + server dropit-performance-app-4:8080; + keepalive 256; + } + + server { + listen 8080 backlog=16384; + + location / { + proxy_pass http://dropit_backend; + proxy_http_version 1.1; + proxy_set_header Connection ""; + proxy_set_header Host $host; + proxy_connect_timeout 5s; + proxy_read_timeout 30s; + } + } +} diff --git a/performance/start-drop-detail-cluster.ps1 b/performance/start-drop-detail-cluster.ps1 new file mode 100644 index 0000000..7b8876c --- /dev/null +++ b/performance/start-drop-detail-cluster.ps1 @@ -0,0 +1,155 @@ +param( + [ValidateRange(4, 4)] + [int]$InstanceCount = 4, + + [string]$JarPath = 'tmp\dropit-server-performance.jar' +) + +$ErrorActionPreference = 'Stop' + +$performanceDirectory = Split-Path -Parent $MyInvocation.MyCommand.Path +$projectDirectory = Split-Path -Parent $performanceDirectory +$environmentFile = Join-Path $projectDirectory '.env.local' +$composeFile = Join-Path $projectDirectory 'compose.yml' +$performanceComposeFile = Join-Path $performanceDirectory 'compose.performance.yml' +$nginxConfig = Join-Path $performanceDirectory 'nginx\drop-detail-cluster.conf' + +if (-not [System.IO.Path]::IsPathRooted($JarPath)) { + $JarPath = Join-Path $projectDirectory $JarPath +} + +foreach ($requiredFile in @($environmentFile, $composeFile, $performanceComposeFile, $nginxConfig, $JarPath)) { + if (-not (Test-Path -LiteralPath $requiredFile)) { + throw "Required file is missing: $requiredFile" + } +} + +docker compose ` + --file $composeFile ` + --env-file $environmentFile ` + up --detach db redis | Out-Null + +if ($LASTEXITCODE -ne 0) { + throw 'MySQL or Redis could not be started.' +} + +docker compose ` + --file $performanceComposeFile ` + --env-file (Join-Path $projectDirectory '.env.performance.local') ` + up --detach influxdb grafana | Out-Null + +if ($LASTEXITCODE -ne 0) { + throw 'InfluxDB or Grafana could not be started.' +} + +$singleApp = docker ps -a --filter 'name=^/dropit-performance-app$' --format '{{.Names}}' +if ($singleApp) { + docker rm --force dropit-performance-app | Out-Null +} + +$existingGateway = docker ps -a --filter 'name=^/dropit-performance-gateway$' --format '{{.Names}}' +if ($existingGateway) { + docker rm --force dropit-performance-gateway | Out-Null +} + +for ($index = 1; $index -le $InstanceCount; $index++) { + $containerName = "dropit-performance-app-$index" + $existingApp = docker ps -a --filter "name=^/$containerName$" --format '{{.Names}}' + + if ($existingApp) { + docker rm --force $containerName | Out-Null + } + + docker run ` + --detach ` + --name $containerName ` + --network dropit_default ` + --memory 768m ` + --env-file $environmentFile ` + --env DB_HOST=db ` + --env DB_PORT=3306 ` + --env REDIS_HOST=redis ` + --env REDIS_PORT=6379 ` + --env SPRING_PROFILES_ACTIVE=performance ` + --env SPRING_JPA_HIBERNATE_DDL_AUTO=none ` + --env 'spring.jpa.hibernate.ddl-auto=none' ` + --env 'JAVA_TOOL_OPTIONS=-Xms128m -Xmx512m' ` + --mount "type=bind,source=$JarPath,destination=/app/app.jar,readonly" ` + eclipse-temurin:21-jre ` + java -jar /app/app.jar | Out-Null + + if ($LASTEXITCODE -ne 0) { + throw "Spring container could not be started: $containerName" + } + + docker network connect dropit-performance_default $containerName + + if ($LASTEXITCODE -ne 0) { + throw "Spring container could not join the performance network: $containerName" + } +} + +$deadline = (Get-Date).AddSeconds(120) +do { + $startedCount = 0 + + for ($index = 1; $index -le $InstanceCount; $index++) { + $containerName = "dropit-performance-app-$index" + $state = docker inspect --format '{{.State.Status}}' $containerName + + if ($state -ne 'running') { + docker logs --tail 80 $containerName + throw "Spring container stopped during startup: $containerName" + } + + $logs = docker logs $containerName 2>&1 + if ($logs -match 'Started DropitServerApplication') { + $startedCount++ + } + } + + if ($startedCount -eq $InstanceCount) { + break + } + + Start-Sleep -Seconds 3 +} while ((Get-Date) -lt $deadline) + +if ($startedCount -ne $InstanceCount) { + throw "Only $startedCount of $InstanceCount Spring containers became ready." +} + +docker run ` + --detach ` + --name dropit-performance-gateway ` + --network dropit-performance_default ` + --publish '127.0.0.1:8080:8080' ` + --mount "type=bind,source=$nginxConfig,destination=/etc/nginx/nginx.conf,readonly" ` + nginx:1.29-alpine | Out-Null + +if ($LASTEXITCODE -ne 0) { + throw 'Nginx gateway could not be started.' +} + +$deadline = (Get-Date).AddSeconds(30) +do { + Start-Sleep -Seconds 2 + $gatewayState = docker inspect --format '{{.State.Status}}' dropit-performance-gateway + + if ($gatewayState -ne 'running') { + docker logs --tail 80 dropit-performance-gateway + throw "Nginx gateway state: $gatewayState" + } + + $listener = Get-NetTCPConnection -LocalPort 8080 -State Listen -ErrorAction SilentlyContinue | + Select-Object -First 1 + + if ($listener) { + Write-Host "Drop performance cluster is ready: $InstanceCount Spring instances and Nginx." + Write-Host 'Docker test URL: http://dropit-performance-gateway:8080' + Write-Host 'Host test URL: http://localhost:8080' + exit 0 + } +} while ((Get-Date) -lt $deadline) + +throw 'Nginx gateway did not bind port 8080.' From 2cbf5e6f70ec02d5e2774479b0af2b2924fa410b Mon Sep 17 00:00:00 2001 From: Hyiyek Date: Sun, 13 Sep 2026 18:32:57 +0900 Subject: [PATCH 69/98] =?UTF-8?q?fix(performance):=20=ED=81=B4=EB=9F=AC?= =?UTF-8?q?=EC=8A=A4=ED=84=B0=20=EC=8B=9C=EC=9E=91=20=EB=A1=9C=EA=B7=B8=20?= =?UTF-8?q?=EA=B2=80=EC=82=AC=20=EC=95=88=EC=A0=95=ED=99=94?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- performance/start-drop-detail-cluster.ps1 | 12 +++++++++--- 1 file changed, 9 insertions(+), 3 deletions(-) diff --git a/performance/start-drop-detail-cluster.ps1 b/performance/start-drop-detail-cluster.ps1 index 7b8876c..46fd502 100644 --- a/performance/start-drop-detail-cluster.ps1 +++ b/performance/start-drop-detail-cluster.ps1 @@ -98,11 +98,17 @@ do { $state = docker inspect --format '{{.State.Status}}' $containerName if ($state -ne 'running') { - docker logs --tail 80 $containerName + & cmd.exe /d /c "docker logs --tail 80 $containerName 2>&1" throw "Spring container stopped during startup: $containerName" } - $logs = docker logs $containerName 2>&1 + # Windows PowerShell 5.1 treats normal container stderr as a NativeCommandError. + # cmd.exe merges both streams so startup messages can be inspected as plain text. + $logs = & cmd.exe /d /c "docker logs $containerName 2>&1" + if ($LASTEXITCODE -ne 0) { + throw "Spring container logs could not be read: $containerName" + } + if ($logs -match 'Started DropitServerApplication') { $startedCount++ } @@ -137,7 +143,7 @@ do { $gatewayState = docker inspect --format '{{.State.Status}}' dropit-performance-gateway if ($gatewayState -ne 'running') { - docker logs --tail 80 dropit-performance-gateway + & cmd.exe /d /c 'docker logs --tail 80 dropit-performance-gateway 2>&1' throw "Nginx gateway state: $gatewayState" } From 33342cf6be7b42877d8914805aa6317c438366fb Mon Sep 17 00:00:00 2001 From: Hyiyek Date: Sun, 13 Sep 2026 18:46:45 +0900 Subject: [PATCH 70/98] =?UTF-8?q?fix(performance):=20=EB=B6=80=ED=95=98=20?= =?UTF-8?q?=EC=A7=81=ED=9B=84=20=EC=9D=B8=EC=A6=9D=20=EC=9E=AC=EC=8B=9C?= =?UTF-8?q?=EB=8F=84=20=EC=B2=98=EB=A6=AC?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../start-drop-detail-concurrent-test.ps1 | 62 ++++++++++++++----- 1 file changed, 46 insertions(+), 16 deletions(-) diff --git a/performance/start-drop-detail-concurrent-test.ps1 b/performance/start-drop-detail-concurrent-test.ps1 index fa2987b..6bcb61b 100644 --- a/performance/start-drop-detail-concurrent-test.ps1 +++ b/performance/start-drop-detail-concurrent-test.ps1 @@ -60,17 +60,40 @@ if ($TargetBaseUrl) { $baseUrl = $TargetBaseUrl.TrimEnd('/') } +function Invoke-LoginWithRetry { + param( + [string]$Url, + [string]$Body, + [int]$MaxAttempts = 5 + ) + + for ($attempt = 1; $attempt -le $MaxAttempts; $attempt++) { + try { + return Invoke-RestMethod ` + -Uri $Url ` + -Method Post ` + -ContentType 'application/json' ` + -Body $Body + } catch { + if ($attempt -eq $MaxAttempts) { + throw + } + + Start-Sleep -Seconds 2 + } + } +} + $loginBody = @{ email = $authEmail password = $authPassword } | ConvertTo-Json try { - $tokenResponse = Invoke-RestMethod ` - -Uri "$healthCheckUrl/auth/login" ` - -Method Post ` - -ContentType 'application/json' ` - -Body $loginBody + $tokenResponse = Invoke-LoginWithRetry ` + -Url "$healthCheckUrl/auth/login" ` + -Body $loginBody ` + -MaxAttempts 3 } catch { $signupBody = @{ email = $authEmail @@ -79,17 +102,24 @@ try { role = 'USER' } | ConvertTo-Json - Invoke-RestMethod ` - -Uri "$healthCheckUrl/auth/signup" ` - -Method Post ` - -ContentType 'application/json' ` - -Body $signupBody | Out-Null - - $tokenResponse = Invoke-RestMethod ` - -Uri "$healthCheckUrl/auth/login" ` - -Method Post ` - -ContentType 'application/json' ` - -Body $loginBody + try { + Invoke-RestMethod ` + -Uri "$healthCheckUrl/auth/signup" ` + -Method Post ` + -ContentType 'application/json' ` + -Body $signupBody | Out-Null + } catch { + $statusCode = [int]$_.Exception.Response.StatusCode + + if ($statusCode -ne 409) { + throw + } + } + + $tokenResponse = Invoke-LoginWithRetry ` + -Url "$healthCheckUrl/auth/login" ` + -Body $loginBody ` + -MaxAttempts 10 } $authToken = $tokenResponse.accessToken From 27d41f678c60c39bdc0e5ac340d65f57ab777464 Mon Sep 17 00:00:00 2001 From: Sooyoung Yoon Date: Sun, 13 Sep 2026 18:51:47 +0900 Subject: [PATCH 71/98] =?UTF-8?q?refactor(order):=20SQS=20=EC=A3=BC?= =?UTF-8?q?=EB=AC=B8=20=EC=86=8C=EB=B9=84=EB=A5=BC=20manual=20ACK=20listen?= =?UTF-8?q?er=EB=A1=9C=20=EC=A0=84=ED=99=98?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- build.gradle | 2 +- .../com/dropit/global/config/SqsConfig.java | 19 ----- .../messaging/OrderSqsConsumerConfig.java | 53 ------------- .../messaging/OrderSqsListenerConfig.java | 57 +++++++++++++ .../messaging/SqsOrderMessageConsumer.java | 79 ------------------- .../messaging/SqsOrderMessageListener.java | 22 ++++++ .../dropit/order/messaging/SqsProperties.java | 3 +- .../RedisOrderFinalizationSyncAdapter.java | 1 + .../validation/OrderMessageValidator.java | 11 +++ .../validation/OrderRequestFingerprint.java | 15 ++++ src/main/resources/application.properties | 5 +- .../resources/redis/sync-order-request.lua | 20 +++-- 12 files changed, 123 insertions(+), 164 deletions(-) delete mode 100644 src/main/java/com/dropit/global/config/SqsConfig.java delete mode 100644 src/main/java/com/dropit/order/messaging/OrderSqsConsumerConfig.java create mode 100644 src/main/java/com/dropit/order/messaging/OrderSqsListenerConfig.java delete mode 100644 src/main/java/com/dropit/order/messaging/SqsOrderMessageConsumer.java create mode 100644 src/main/java/com/dropit/order/messaging/SqsOrderMessageListener.java create mode 100644 src/main/java/com/dropit/order/validation/OrderRequestFingerprint.java diff --git a/build.gradle b/build.gradle index b1995b5..e7dfa32 100644 --- a/build.gradle +++ b/build.gradle @@ -35,7 +35,7 @@ dependencies { implementation platform('io.awspring.cloud:spring-cloud-aws-dependencies:4.1.0') implementation 'io.awspring.cloud:spring-cloud-aws-starter-parameter-store' implementation 'io.awspring.cloud:spring-cloud-aws-starter-s3' - implementation 'software.amazon.awssdk:sqs' + implementation 'io.awspring.cloud:spring-cloud-aws-starter-sqs' implementation 'software.amazon.awssdk:url-connection-client' implementation 'io.jsonwebtoken:jjwt-api:0.13.0' diff --git a/src/main/java/com/dropit/global/config/SqsConfig.java b/src/main/java/com/dropit/global/config/SqsConfig.java deleted file mode 100644 index bf5e969..0000000 --- a/src/main/java/com/dropit/global/config/SqsConfig.java +++ /dev/null @@ -1,19 +0,0 @@ -package com.dropit.global.config; - -import org.springframework.context.annotation.Bean; -import org.springframework.context.annotation.Configuration; -import software.amazon.awssdk.http.urlconnection.UrlConnectionHttpClient; -import software.amazon.awssdk.regions.providers.AwsRegionProvider; -import software.amazon.awssdk.services.sqs.SqsClient; - -@Configuration -public class SqsConfig { - - @Bean - SqsClient sqsClient(AwsRegionProvider regionProvider) { - return SqsClient.builder() - .region(regionProvider.getRegion()) - .httpClientBuilder(UrlConnectionHttpClient.builder()) - .build(); - } -} diff --git a/src/main/java/com/dropit/order/messaging/OrderSqsConsumerConfig.java b/src/main/java/com/dropit/order/messaging/OrderSqsConsumerConfig.java deleted file mode 100644 index f6e13ec..0000000 --- a/src/main/java/com/dropit/order/messaging/OrderSqsConsumerConfig.java +++ /dev/null @@ -1,53 +0,0 @@ -package com.dropit.order.messaging; - -import org.springframework.context.annotation.Bean; -import org.springframework.context.annotation.Configuration; - -import java.util.concurrent.SynchronousQueue; -import java.util.concurrent.ThreadPoolExecutor; -import java.util.concurrent.TimeUnit; - -@Configuration -public class OrderSqsConsumerConfig { - - @Bean(destroyMethod = "shutdown") - ThreadPoolExecutor sqsOrderConsumerExecutor(SqsProperties properties) { - if (properties.consumerConcurrency() <= 0) { - throw new IllegalArgumentException("app.order.sqs.consumer-concurrency must be positive"); - } - validateActiveConsumer(properties); - - return new ThreadPoolExecutor( - properties.consumerConcurrency(), - properties.consumerConcurrency(), - 0L, - TimeUnit.MILLISECONDS, - new SynchronousQueue<>(), - new ThreadPoolExecutor.AbortPolicy() - ); - } - - private void validateActiveConsumer(SqsProperties properties) { - if (!properties.consumerEnabled()) { - return; - } - if (properties.orderQueueUrl() == null || properties.orderQueueUrl().isBlank()) { - throw new IllegalArgumentException("app.order.sqs.order-queue-url must be configured"); - } - - requireRange(properties.consumerMaxNumberOfMessages(), 1, 10, - "app.order.sqs.consumer-max-number-of-messages"); - requireRange(properties.consumerWaitTimeSeconds(), 0, 20, - "app.order.sqs.consumer-wait-time-seconds"); - requireRange(properties.consumerVisibilityTimeoutSeconds(), 0, 43_200, - "app.order.sqs.consumer-visibility-timeout-seconds"); - } - - private void requireRange(int value, int min, int max, String propertyName) { - if (value < min || value > max) { - throw new IllegalArgumentException( - propertyName + " must be between " + min + " and " + max - ); - } - } -} diff --git a/src/main/java/com/dropit/order/messaging/OrderSqsListenerConfig.java b/src/main/java/com/dropit/order/messaging/OrderSqsListenerConfig.java new file mode 100644 index 0000000..c6a7c26 --- /dev/null +++ b/src/main/java/com/dropit/order/messaging/OrderSqsListenerConfig.java @@ -0,0 +1,57 @@ +package com.dropit.order.messaging; + +import io.awspring.cloud.sqs.config.SqsMessageListenerContainerFactory; +import io.awspring.cloud.sqs.listener.QueueNotFoundStrategy; +import io.awspring.cloud.sqs.listener.acknowledgement.handler.AcknowledgementMode; +import org.springframework.context.annotation.Bean; +import org.springframework.context.annotation.Configuration; +import software.amazon.awssdk.services.sqs.SqsAsyncClient; + +import java.time.Duration; + +@Configuration +public class OrderSqsListenerConfig { + + @Bean + SqsMessageListenerContainerFactory orderSqsListenerContainerFactory( + SqsAsyncClient sqsAsyncClient, + SqsProperties properties + ) { + validate(properties); + + return SqsMessageListenerContainerFactory.builder() + .sqsAsyncClient(sqsAsyncClient) + .configure(options -> options + .autoStartup(properties.consumerEnabled()) + .acknowledgementMode(AcknowledgementMode.MANUAL) + .acknowledgementInterval(Duration.ZERO) + .acknowledgementThreshold(0) + .maxConcurrentMessages(properties.consumerConcurrency()) + .maxMessagesPerPoll(properties.consumerMaxNumberOfMessages()) + .pollTimeout(Duration.ofSeconds(properties.consumerWaitTimeSeconds())) + .messageVisibility(Duration.ofSeconds(properties.consumerVisibilityTimeoutSeconds())) + .queueNotFoundStrategy(QueueNotFoundStrategy.FAIL)) + .build(); + } + + private void validate(SqsProperties properties) { + requireRange(properties.consumerConcurrency(), 1, Integer.MAX_VALUE, + "app.order.sqs.consumer-concurrency"); + requireRange(properties.consumerMaxNumberOfMessages(), 1, 10, + "app.order.sqs.consumer-max-number-of-messages"); + requireRange(properties.consumerWaitTimeSeconds(), 0, 20, + "app.order.sqs.consumer-wait-time-seconds"); + requireRange(properties.consumerVisibilityTimeoutSeconds(), 0, 43_200, + "app.order.sqs.consumer-visibility-timeout-seconds"); + if (properties.consumerEnabled() + && (properties.orderQueueUrl() == null || properties.orderQueueUrl().isBlank())) { + throw new IllegalArgumentException("app.order.sqs.order-queue-url must be configured"); + } + } + + private void requireRange(int value, int min, int max, String propertyName) { + if (value < min || value > max) { + throw new IllegalArgumentException(propertyName + " must be between " + min + " and " + max); + } + } +} diff --git a/src/main/java/com/dropit/order/messaging/SqsOrderMessageConsumer.java b/src/main/java/com/dropit/order/messaging/SqsOrderMessageConsumer.java deleted file mode 100644 index 75464cd..0000000 --- a/src/main/java/com/dropit/order/messaging/SqsOrderMessageConsumer.java +++ /dev/null @@ -1,79 +0,0 @@ -package com.dropit.order.messaging; - -import lombok.RequiredArgsConstructor; -import lombok.extern.slf4j.Slf4j; -import org.springframework.scheduling.annotation.Scheduled; -import org.springframework.stereotype.Component; -import software.amazon.awssdk.services.sqs.SqsClient; -import software.amazon.awssdk.services.sqs.model.DeleteMessageRequest; -import software.amazon.awssdk.services.sqs.model.Message; -import software.amazon.awssdk.services.sqs.model.ReceiveMessageRequest; -import tools.jackson.databind.ObjectMapper; - -import java.util.concurrent.RejectedExecutionException; -import java.util.concurrent.ThreadPoolExecutor; - -@Slf4j -@Component -@RequiredArgsConstructor -public class SqsOrderMessageConsumer { - - private final SqsClient sqsClient; - private final SqsProperties properties; - private final ObjectMapper objectMapper; - private final OrderMessageProcessor messageProcessor; - private final ThreadPoolExecutor sqsOrderConsumerExecutor; - - @Scheduled( - initialDelayString = "${app.order.sqs.consumer-initial-delay}", - fixedDelayString = "${app.order.sqs.consumer-poll-delay}" - ) - public void poll() { - if (!properties.consumerEnabled() - || properties.orderQueueUrl() == null - || properties.orderQueueUrl().isBlank()) { - return; - } - - int availableWorkerCount = properties.consumerConcurrency() - sqsOrderConsumerExecutor.getActiveCount(); - if (availableWorkerCount <= 0) { - return; - } - - ReceiveMessageRequest request = ReceiveMessageRequest.builder() - .queueUrl(properties.orderQueueUrl()) - // 처리 가능한 수만 받아, 실행 대기열에 넣지 못한 메시지의 재전달을 줄인다. - .maxNumberOfMessages(Math.min(properties.consumerMaxNumberOfMessages(), availableWorkerCount)) - .waitTimeSeconds(properties.consumerWaitTimeSeconds()) - .visibilityTimeout(properties.consumerVisibilityTimeoutSeconds()) - .build(); - - try { - for (Message message : sqsClient.receiveMessage(request).messages()) { - try { - // 설정된 동시 처리량 안에서 메시지를 병렬 처리한다. - sqsOrderConsumerExecutor.execute(() -> process(message)); - } catch (RejectedExecutionException exception) { - // 처리 여유가 없으면 ACK하지 않아 visibility timeout 후 재전달된다. - log.warn("주문 SQS 처리 작업이 가득 차 메시지를 삭제하지 않습니다. messageId={}", - message.messageId()); - } - } - } catch (RuntimeException exception) { - log.warn("주문 SQS 수신에 실패했습니다. 메시지를 삭제하지 않고 다음 poll을 기다립니다.", exception); - } - } - - private void process(Message sqsMessage) { - try { - OrderMessage orderMessage = objectMapper.readValue(sqsMessage.body(), OrderMessage.class); - messageProcessor.process(orderMessage); - sqsClient.deleteMessage(DeleteMessageRequest.builder() - .queueUrl(properties.orderQueueUrl()) - .receiptHandle(sqsMessage.receiptHandle()) - .build()); - } catch (RuntimeException exception) { - log.warn("주문 SQS 메시지 처리에 실패했습니다. messageId={}", sqsMessage.messageId(), exception); - } - } -} diff --git a/src/main/java/com/dropit/order/messaging/SqsOrderMessageListener.java b/src/main/java/com/dropit/order/messaging/SqsOrderMessageListener.java new file mode 100644 index 0000000..9d53ded --- /dev/null +++ b/src/main/java/com/dropit/order/messaging/SqsOrderMessageListener.java @@ -0,0 +1,22 @@ +package com.dropit.order.messaging; + +import io.awspring.cloud.sqs.annotation.SqsListener; +import io.awspring.cloud.sqs.listener.acknowledgement.Acknowledgement; +import lombok.RequiredArgsConstructor; +import org.springframework.stereotype.Component; + +@Component +@RequiredArgsConstructor +public class SqsOrderMessageListener { + + private final OrderMessageProcessor messageProcessor; + + @SqsListener( + value = "${app.order.sqs.order-queue-url}", + factory = "orderSqsListenerContainerFactory" + ) + public void listen(OrderMessage message, Acknowledgement acknowledgement) { + messageProcessor.process(message); + acknowledgement.acknowledge(); + } +} diff --git a/src/main/java/com/dropit/order/messaging/SqsProperties.java b/src/main/java/com/dropit/order/messaging/SqsProperties.java index 5e720f1..344bb37 100644 --- a/src/main/java/com/dropit/order/messaging/SqsProperties.java +++ b/src/main/java/com/dropit/order/messaging/SqsProperties.java @@ -10,7 +10,6 @@ public record SqsProperties( int consumerMaxNumberOfMessages, int consumerWaitTimeSeconds, int consumerVisibilityTimeoutSeconds, - long consumerInitialDelay, - long consumerPollDelay + long publisherTimeoutMillis ) { } diff --git a/src/main/java/com/dropit/order/redis/RedisOrderFinalizationSyncAdapter.java b/src/main/java/com/dropit/order/redis/RedisOrderFinalizationSyncAdapter.java index 5ed021f..a54e000 100644 --- a/src/main/java/com/dropit/order/redis/RedisOrderFinalizationSyncAdapter.java +++ b/src/main/java/com/dropit/order/redis/RedisOrderFinalizationSyncAdapter.java @@ -28,6 +28,7 @@ public OrderRequestSyncResult sync(OrderRequestSyncCommand command) { RedisOrderKeyFactory.stockKey(command.dropId()), RedisOrderKeyFactory.purchaseKey(command.dropId(), command.userId()) ), + command.requestId().toString(), command.status().name(), Integer.toString(command.quantity()), command.orderId() == null ? "" : command.orderId().toString(), diff --git a/src/main/java/com/dropit/order/validation/OrderMessageValidator.java b/src/main/java/com/dropit/order/validation/OrderMessageValidator.java index 8d66391..149735c 100644 --- a/src/main/java/com/dropit/order/validation/OrderMessageValidator.java +++ b/src/main/java/com/dropit/order/validation/OrderMessageValidator.java @@ -24,6 +24,10 @@ public static void validate(OrderMessage message) { || message.dropId() == null || message.dropId() <= 0 || invalidHash(message.idempotencyKeyHash()) || invalidHash(message.requestFingerprint()) + || !Objects.equals( + message.requestFingerprint(), + expectedFingerprint(message) + ) || message.quantity() <= 0 || message.acceptedAt() == null || message.productName() == null || message.productName().isBlank() @@ -61,4 +65,11 @@ public static LocalDateTime acceptedAt(OrderMessage message) { private static boolean invalidHash(String value) { return value == null || value.isBlank() || value.length() > 64; } + + private static String expectedFingerprint(OrderMessage message) { + if (message == null || message.dropId() == null || message.dropId() <= 0 || message.quantity() <= 0) { + return null; + } + return OrderRequestFingerprint.of(message.dropId(), message.quantity()); + } } diff --git a/src/main/java/com/dropit/order/validation/OrderRequestFingerprint.java b/src/main/java/com/dropit/order/validation/OrderRequestFingerprint.java new file mode 100644 index 0000000..de479fe --- /dev/null +++ b/src/main/java/com/dropit/order/validation/OrderRequestFingerprint.java @@ -0,0 +1,15 @@ +package com.dropit.order.validation; + +import lombok.AccessLevel; +import lombok.NoArgsConstructor; + +@NoArgsConstructor(access = AccessLevel.PRIVATE) +public final class OrderRequestFingerprint { + + public static String of(Long dropId, int quantity) { + if (dropId == null || dropId <= 0 || quantity <= 0) { + throw new IllegalArgumentException("dropId and quantity must be positive"); + } + return dropId + ":" + quantity; + } +} diff --git a/src/main/resources/application.properties b/src/main/resources/application.properties index 01262c2..fef4237 100644 --- a/src/main/resources/application.properties +++ b/src/main/resources/application.properties @@ -24,10 +24,9 @@ app.order.sqs.order-queue-url=${AWS_SQS_ORDER_QUEUE_URL:} app.order.sqs.consumer-enabled=${AWS_SQS_CONSUMER_ENABLED:false} app.order.sqs.consumer-concurrency=${AWS_SQS_CONSUMER_CONCURRENCY:2} app.order.sqs.consumer-max-number-of-messages=${AWS_SQS_CONSUMER_MAX_NUMBER_OF_MESSAGES:2} -app.order.sqs.consumer-wait-time-seconds=${AWS_SQS_CONSUMER_WAIT_TIME_SECONDS:20} +app.order.sqs.consumer-wait-time-seconds=${AWS_SQS_CONSUMER_WAIT_TIME_SECONDS:10} app.order.sqs.consumer-visibility-timeout-seconds=${AWS_SQS_CONSUMER_VISIBILITY_TIMEOUT_SECONDS:60} -app.order.sqs.consumer-initial-delay=${AWS_SQS_CONSUMER_INITIAL_DELAY:1000} -app.order.sqs.consumer-poll-delay=${AWS_SQS_CONSUMER_POLL_DELAY:1000} +app.order.sqs.publisher-timeout-millis=${AWS_SQS_PUBLISHER_TIMEOUT_MILLIS:3000} # Multipart upload limits spring.servlet.multipart.max-file-size=10MB diff --git a/src/main/resources/redis/sync-order-request.lua b/src/main/resources/redis/sync-order-request.lua index c7b57b4..a47017d 100644 --- a/src/main/resources/redis/sync-order-request.lua +++ b/src/main/resources/redis/sync-order-request.lua @@ -5,23 +5,29 @@ -- KEYS[1] = {drop:}:idempotency:user:: -- KEYS[2] = {drop:}:stock -- KEYS[3] = {drop:}:purchase:user: --- ARGV[1] = 최종 상태(SUCCEEDED/FAILED), ARGV[2] = quantity, --- ARGV[3] = orderId, ARGV[4] = failureCode, ARGV[5] = DB 동기화 버전 +-- ARGV[1] = requestId, ARGV[2] = 최종 상태(SUCCEEDED/FAILED), ARGV[3] = quantity, +-- ARGV[4] = orderId, ARGV[5] = failureCode, ARGV[6] = DB 동기화 버전 local reservationKey = KEYS[1] local stockKey = KEYS[2] local purchaseKey = KEYS[3] -local targetStatus = ARGV[1] -local quantity = tonumber(ARGV[2]) -local orderId = ARGV[3] -local failureCode = ARGV[4] -local desiredVersion = ARGV[5] +local requestId = ARGV[1] +local targetStatus = ARGV[2] +local quantity = tonumber(ARGV[3]) +local orderId = ARGV[4] +local failureCode = ARGV[5] +local desiredVersion = ARGV[6] if redis.call('TYPE', reservationKey).ok ~= 'hash' then -- 어떤 예약을 확정해야 하는지 모르므로 재고·구매량을 임의로 바꾸지 않는다. return 'MISSING' end +if redis.call('HGET', reservationKey, 'requestId') ~= requestId then + -- TTL 만료 뒤 같은 키가 재사용되어도 다른 요청의 예약을 변경하지 않는다. + return 'INVALID' +end + local currentStatus = redis.call('HGET', reservationKey, 'status') if currentStatus == targetStatus then -- 같은 SQS 메시지가 다시 와도 이미 끝난 작업이므로 아무것도 하지 않는다. From 32d8100d66f44a49a17a24302959e2501b9554d6 Mon Sep 17 00:00:00 2001 From: Sooyoung Yoon Date: Sun, 13 Sep 2026 18:56:27 +0900 Subject: [PATCH 72/98] =?UTF-8?q?feat(drop):=20=EA=B3=B5=EA=B0=9C=20?= =?UTF-8?q?=EC=8B=9C=20=EC=A3=BC=EB=AC=B8=20admission=20=EC=83=81=ED=83=9C?= =?UTF-8?q?=20=EC=A4=80=EB=B9=84?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../drop/cache/DropSaleCacheWriter.java | 52 ++++++++++++++++ .../dropit/drop/cache/DropSaleSnapshot.java | 37 +++++++++++ .../drop/controller/DropController.java | 4 +- .../java/com/dropit/drop/entity/Drop.java | 22 +++++++ .../dropit/drop/exception/DropErrorCode.java | 2 + .../drop/service/DropVisibilityService.java | 62 +++++++++++++++++++ .../global/exception/ServiceException.java | 7 ++- .../order/redis/RedisOrderKeyFactory.java | 14 ++++- .../DropUserPurchaseRepository.java | 2 + .../order/repository/OrderItemRepository.java | 2 + .../resources/redis/prepare-drop-sale.lua | 37 +++++++++++ 11 files changed, 238 insertions(+), 3 deletions(-) create mode 100644 src/main/java/com/dropit/drop/cache/DropSaleCacheWriter.java create mode 100644 src/main/java/com/dropit/drop/cache/DropSaleSnapshot.java create mode 100644 src/main/java/com/dropit/drop/service/DropVisibilityService.java create mode 100644 src/main/resources/redis/prepare-drop-sale.lua diff --git a/src/main/java/com/dropit/drop/cache/DropSaleCacheWriter.java b/src/main/java/com/dropit/drop/cache/DropSaleCacheWriter.java new file mode 100644 index 0000000..90fb3e8 --- /dev/null +++ b/src/main/java/com/dropit/drop/cache/DropSaleCacheWriter.java @@ -0,0 +1,52 @@ +package com.dropit.drop.cache; + +import com.dropit.order.redis.RedisOrderKeyFactory; +import org.springframework.core.io.ClassPathResource; +import org.springframework.data.redis.core.StringRedisTemplate; +import org.springframework.data.redis.core.script.DefaultRedisScript; +import org.springframework.stereotype.Component; + +import java.util.List; + +@Component +public class DropSaleCacheWriter { + + private static final DefaultRedisScript SCRIPT = script(); + private final StringRedisTemplate redisTemplate; + + public DropSaleCacheWriter(StringRedisTemplate redisTemplate) { + this.redisTemplate = redisTemplate; + } + + public void apply(DropSaleSnapshot snapshot) { + Long result = redisTemplate.execute( + SCRIPT, + List.of( + RedisOrderKeyFactory.saleKey(snapshot.dropId()), + RedisOrderKeyFactory.stockKey(snapshot.dropId()), + RedisOrderKeyFactory.admissionControlKey(snapshot.dropId()) + ), + Long.toString(snapshot.operationVersion()), + Long.toString(snapshot.saleVersion()), + Boolean.toString(snapshot.visible()), + Long.toString(snapshot.openAtEpochMillis()), + Long.toString(snapshot.closeAtEpochMillis()), + snapshot.unitPrice().toPlainString(), + Integer.toString(snapshot.discountRate()), + Integer.toString(snapshot.purchaseLimit()), + snapshot.productName(), + Integer.toString(snapshot.remainingQuantity()), + Long.toString(snapshot.retentionUntilEpochMillis()) + ); + if (result == null || result < 0) { + throw new IllegalStateException("Redis 판매 준비 결과가 올바르지 않습니다."); + } + } + + private static DefaultRedisScript script() { + DefaultRedisScript script = new DefaultRedisScript<>(); + script.setLocation(new ClassPathResource("redis/prepare-drop-sale.lua")); + script.setResultType(Long.class); + return script; + } +} diff --git a/src/main/java/com/dropit/drop/cache/DropSaleSnapshot.java b/src/main/java/com/dropit/drop/cache/DropSaleSnapshot.java new file mode 100644 index 0000000..9c2eeef --- /dev/null +++ b/src/main/java/com/dropit/drop/cache/DropSaleSnapshot.java @@ -0,0 +1,37 @@ +package com.dropit.drop.cache; + +import com.dropit.drop.entity.Drop; + +import java.math.BigDecimal; +import java.time.ZoneId; + +public record DropSaleSnapshot( + Long dropId, + boolean visible, + long openAtEpochMillis, + long closeAtEpochMillis, + BigDecimal unitPrice, + int discountRate, + int purchaseLimit, + String productName, + long saleVersion, + long operationVersion, + int remainingQuantity +) { + private static final ZoneId SALE_ZONE = ZoneId.of("Asia/Seoul"); + + public static DropSaleSnapshot from(Drop drop) { + return new DropSaleSnapshot( + drop.getId(), drop.isVisible(), + drop.getOpenAt().atZone(SALE_ZONE).toInstant().toEpochMilli(), + drop.getCloseAt().atZone(SALE_ZONE).toInstant().toEpochMilli(), + drop.getPrice(), drop.getDiscountRate(), drop.getPurchaseLimit(), + drop.getProduct().getName(), drop.getSaleVersion(), + drop.getAdmissionOperationVersion(), drop.getRemainingQuantity() + ); + } + + public long retentionUntilEpochMillis() { + return closeAtEpochMillis + 86_400_000L; + } +} diff --git a/src/main/java/com/dropit/drop/controller/DropController.java b/src/main/java/com/dropit/drop/controller/DropController.java index 0e435b4..df853db 100644 --- a/src/main/java/com/dropit/drop/controller/DropController.java +++ b/src/main/java/com/dropit/drop/controller/DropController.java @@ -6,6 +6,7 @@ import com.dropit.drop.dto.request.DropVisibilityUpdateRequest; import com.dropit.drop.dto.response.DropResponse; import com.dropit.drop.service.DropService; +import com.dropit.drop.service.DropVisibilityService; import com.dropit.global.security.principal.CurrentUserId; import jakarta.annotation.security.PermitAll; import jakarta.validation.Valid; @@ -24,6 +25,7 @@ public class DropController { private final DropService dropService; + private final DropVisibilityService dropVisibilityService; @PostMapping("/drops") public ResponseEntity create( @@ -105,7 +107,7 @@ public ResponseEntity changeVisibility( @PathVariable Long dropId, @Valid @RequestBody DropVisibilityUpdateRequest request ) { - return ResponseEntity.ok(dropService.changeVisibility(sellerId, dropId, request)); + return ResponseEntity.ok(dropVisibilityService.changeVisibility(sellerId, dropId, request)); } @DeleteMapping("/drops/{dropId}") diff --git a/src/main/java/com/dropit/drop/entity/Drop.java b/src/main/java/com/dropit/drop/entity/Drop.java index f91a0df..5f8b0a4 100644 --- a/src/main/java/com/dropit/drop/entity/Drop.java +++ b/src/main/java/com/dropit/drop/entity/Drop.java @@ -56,6 +56,15 @@ public class Drop extends BaseEntity { @Column(name = "close_at", nullable = false) private LocalDateTime closeAt; + @Column(name = "sale_version", nullable = false) + private long saleVersion; + + @Column(name = "admission_operation_version", nullable = false) + private long admissionOperationVersion; + + @Column(name = "sale_prepared", nullable = false) + private boolean salePrepared; + public Drop( Product product, BigDecimal price, @@ -143,6 +152,9 @@ private static void validateSalesValues( } public void ensureEditable(LocalDateTime now) { + if (salePrepared) { + throw new ServiceException(DropErrorCode.DROP_SALE_PREPARED); + } if (!now.isBefore(openAt)) { throw new ServiceException(DropErrorCode.DROP_ALREADY_STARTED); } @@ -150,6 +162,16 @@ public void ensureEditable(LocalDateTime now) { public void changeVisibility(boolean visible) { this.visible = visible; + this.admissionOperationVersion++; + } + + public void prepareSale() { + if (salePrepared) { + return; + } + this.salePrepared = true; + this.saleVersion++; + this.admissionOperationVersion++; } public void restoreStock(int quantity) { diff --git a/src/main/java/com/dropit/drop/exception/DropErrorCode.java b/src/main/java/com/dropit/drop/exception/DropErrorCode.java index 6dc449d..f794d0e 100644 --- a/src/main/java/com/dropit/drop/exception/DropErrorCode.java +++ b/src/main/java/com/dropit/drop/exception/DropErrorCode.java @@ -13,6 +13,8 @@ public enum DropErrorCode implements ErrorCode { INSUFFICIENT_STOCK(HttpStatus.CONFLICT, "드랍 재고가 부족합니다."), INVALID_DROP_VALUE(HttpStatus.BAD_REQUEST, "드랍 판매 값이 올바르지 않습니다."), INVALID_DROP_PERIOD(HttpStatus.BAD_REQUEST, "판매 종료 시각은 시작 시각보다 늦어야 합니다."), + DROP_SALE_PREPARED(HttpStatus.CONFLICT, "판매 준비가 완료되어 판매 설정을 변경할 수 없습니다."), + DROP_ADMISSION_NOT_READY(HttpStatus.SERVICE_UNAVAILABLE, "주문 접수용 판매 상태를 준비할 수 없습니다."), DROP_ALREADY_STARTED(HttpStatus.CONFLICT, "이미 판매가 시작된 드랍입니다."); private final HttpStatus status; diff --git a/src/main/java/com/dropit/drop/service/DropVisibilityService.java b/src/main/java/com/dropit/drop/service/DropVisibilityService.java new file mode 100644 index 0000000..8ac95f9 --- /dev/null +++ b/src/main/java/com/dropit/drop/service/DropVisibilityService.java @@ -0,0 +1,62 @@ +package com.dropit.drop.service; + +import com.dropit.drop.cache.DropSaleCacheWriter; +import com.dropit.drop.cache.DropSaleSnapshot; +import com.dropit.drop.dto.request.DropVisibilityUpdateRequest; +import com.dropit.drop.dto.response.DropResponse; +import com.dropit.drop.entity.Drop; +import com.dropit.drop.exception.DropErrorCode; +import com.dropit.drop.repository.DropRepository; +import com.dropit.global.exception.ServiceException; +import com.dropit.order.repository.DropUserPurchaseRepository; +import com.dropit.order.repository.OrderItemRepository; +import lombok.RequiredArgsConstructor; +import org.springframework.stereotype.Service; +import org.springframework.transaction.support.TransactionTemplate; + +import java.time.LocalDateTime; +import java.util.Objects; + +@Service +@RequiredArgsConstructor +public class DropVisibilityService { + + private final DropRepository dropRepository; + private final OrderItemRepository orderItemRepository; + private final DropUserPurchaseRepository purchaseRepository; + private final DropSaleCacheWriter cacheWriter; + private final TransactionTemplate transactionTemplate; + + public DropResponse changeVisibility(Long sellerId, Long dropId, DropVisibilityUpdateRequest request) { + ChangeResult result = transactionTemplate.execute(status -> changeInTransaction(sellerId, dropId, request)); + if (result == null) { + throw new ServiceException(DropErrorCode.DROP_ADMISSION_NOT_READY); + } + try { + cacheWriter.apply(result.snapshot()); + } catch (RuntimeException exception) { + throw new ServiceException(DropErrorCode.DROP_ADMISSION_NOT_READY, exception); + } + return result.response(); + } + + private ChangeResult changeInTransaction(Long sellerId, Long dropId, DropVisibilityUpdateRequest request) { + Drop drop = dropRepository.findByIdForUpdate(dropId) + .orElseThrow(() -> new ServiceException(DropErrorCode.DROP_NOT_FOUND)); + if (!Objects.equals(drop.getProduct().getSeller().getId(), sellerId)) { + throw new ServiceException(DropErrorCode.DROP_OWNER_REQUIRED); + } + if (request.visible() && !drop.isSalePrepared()) { + drop.ensureEditable(LocalDateTime.now()); + if (orderItemRepository.existsByDropId(dropId) || purchaseRepository.existsByDropId(dropId)) { + throw new ServiceException(DropErrorCode.DROP_SALE_PREPARED); + } + drop.prepareSale(); + } + drop.changeVisibility(request.visible()); + return new ChangeResult(DropResponse.from(drop), DropSaleSnapshot.from(drop)); + } + + private record ChangeResult(DropResponse response, DropSaleSnapshot snapshot) { + } +} diff --git a/src/main/java/com/dropit/global/exception/ServiceException.java b/src/main/java/com/dropit/global/exception/ServiceException.java index 3974e1e..c68fab4 100644 --- a/src/main/java/com/dropit/global/exception/ServiceException.java +++ b/src/main/java/com/dropit/global/exception/ServiceException.java @@ -11,4 +11,9 @@ public ServiceException(ErrorCode errorCode) { super(errorCode.message()); this.errorCode = errorCode; } -} \ No newline at end of file + + public ServiceException(ErrorCode errorCode, Throwable cause) { + super(errorCode.message(), cause); + this.errorCode = errorCode; + } +} diff --git a/src/main/java/com/dropit/order/redis/RedisOrderKeyFactory.java b/src/main/java/com/dropit/order/redis/RedisOrderKeyFactory.java index 838b08d..64f5cd0 100644 --- a/src/main/java/com/dropit/order/redis/RedisOrderKeyFactory.java +++ b/src/main/java/com/dropit/order/redis/RedisOrderKeyFactory.java @@ -10,8 +10,20 @@ public static String stockKey(Long dropId) { return dropKey(dropId) + ":stock"; } + public static String saleKey(Long dropId) { + return dropKey(dropId) + ":sale"; + } + + public static String admissionControlKey(Long dropId) { + return dropKey(dropId) + ":admission"; + } + + public static String purchaseKey(Long dropId) { + return dropKey(dropId) + ":purchases"; + } + public static String purchaseKey(Long dropId, Long userId) { - return dropKey(dropId) + ":purchase:user:" + userId; + return purchaseKey(dropId); } public static String idempotencyKey(Long dropId, Long userId, String idempotencyKeyHash) { diff --git a/src/main/java/com/dropit/order/repository/DropUserPurchaseRepository.java b/src/main/java/com/dropit/order/repository/DropUserPurchaseRepository.java index b8fcbbc..79b77a6 100644 --- a/src/main/java/com/dropit/order/repository/DropUserPurchaseRepository.java +++ b/src/main/java/com/dropit/order/repository/DropUserPurchaseRepository.java @@ -10,6 +10,8 @@ public interface DropUserPurchaseRepository extends JpaRepository { + boolean existsByDropId(Long dropId); + Optional findByDropIdAndUserId(Long dropId, Long userId); @Modifying diff --git a/src/main/java/com/dropit/order/repository/OrderItemRepository.java b/src/main/java/com/dropit/order/repository/OrderItemRepository.java index 8fd03db..044a57a 100644 --- a/src/main/java/com/dropit/order/repository/OrderItemRepository.java +++ b/src/main/java/com/dropit/order/repository/OrderItemRepository.java @@ -7,5 +7,7 @@ public interface OrderItemRepository extends JpaRepository { + boolean existsByDropId(Long dropId); + List findAllByOrder_IdOrderByIdAsc(Long orderId); } diff --git a/src/main/resources/redis/prepare-drop-sale.lua b/src/main/resources/redis/prepare-drop-sale.lua new file mode 100644 index 0000000..3121718 --- /dev/null +++ b/src/main/resources/redis/prepare-drop-sale.lua @@ -0,0 +1,37 @@ +local saleKey = KEYS[1] +local stockKey = KEYS[2] +local controlKey = KEYS[3] + +local operationVersion = tonumber(ARGV[1]) +local saleVersion = tonumber(ARGV[2]) +local currentOperationVersion = tonumber(redis.call('HGET', controlKey, 'operationVersion') or '-1') +local currentSaleVersion = tonumber(redis.call('HGET', controlKey, 'saleVersion') or '-1') + +if currentOperationVersion > operationVersion then + return 0 +end + +redis.call('HSET', controlKey, 'operationVersion', ARGV[1], 'saleVersion', ARGV[2]) +redis.call('PEXPIREAT', controlKey, ARGV[11]) + +if ARGV[3] ~= 'true' then + redis.call('DEL', saleKey) + return 2 +end + +if currentSaleVersion < saleVersion then + redis.call('SET', stockKey, ARGV[10]) +end + +redis.call('HSET', saleKey, + 'operationVersion', ARGV[1], + 'saleVersion', ARGV[2], + 'openAt', ARGV[4], + 'closeAt', ARGV[5], + 'unitPrice', ARGV[6], + 'discountRate', ARGV[7], + 'purchaseLimit', ARGV[8], + 'productName', ARGV[9]) +redis.call('PEXPIREAT', saleKey, ARGV[5]) +redis.call('PEXPIREAT', stockKey, ARGV[11]) +return 1 From dd44c89e063da19be38b8ae422924327fd325b5d Mon Sep 17 00:00:00 2001 From: Sooyoung Yoon Date: Sun, 13 Sep 2026 19:03:39 +0900 Subject: [PATCH 73/98] =?UTF-8?q?feat(order):=20Redis=20=EC=98=88=EC=95=BD?= =?UTF-8?q?=20=ED=9B=84=20SQS=20=EB=A9=94=EC=8B=9C=EC=A7=80=20=EB=B0=9C?= =?UTF-8?q?=ED=96=89?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../order/exception/OrderErrorCode.java | 5 +- .../messaging/OrderMessagePublisher.java | 35 +++++++ .../messaging/OrderSqsListenerConfig.java | 3 + .../order/redis/OrderAdmissionRequest.java | 12 +-- .../order/redis/OrderAdmissionResultType.java | 1 + .../redis/RedisOrderAdmissionAdapter.java | 98 ++++++++++++++++++- .../order/redis/RedisOrderKeyFactory.java | 7 ++ .../order/redis/ReservedOrderSnapshot.java | 42 ++++++++ .../order/service/OrderAdmissionService.java | 92 ++++++++++++++--- .../OrderPublicationUnconfirmedException.java | 17 ++++ .../validation/OrderAdmissionValidator.java | 6 +- .../validation/OrderIdempotencyKeyHasher.java | 22 +++++ src/main/resources/redis/reserve-order.lua | 66 ++++++++++--- 13 files changed, 362 insertions(+), 44 deletions(-) create mode 100644 src/main/java/com/dropit/order/messaging/OrderMessagePublisher.java create mode 100644 src/main/java/com/dropit/order/redis/ReservedOrderSnapshot.java create mode 100644 src/main/java/com/dropit/order/service/OrderPublicationUnconfirmedException.java create mode 100644 src/main/java/com/dropit/order/validation/OrderIdempotencyKeyHasher.java diff --git a/src/main/java/com/dropit/order/exception/OrderErrorCode.java b/src/main/java/com/dropit/order/exception/OrderErrorCode.java index 8eb73e0..e443de8 100644 --- a/src/main/java/com/dropit/order/exception/OrderErrorCode.java +++ b/src/main/java/com/dropit/order/exception/OrderErrorCode.java @@ -12,7 +12,10 @@ public enum OrderErrorCode implements ErrorCode { ORDER_ALREADY_CANCELED(HttpStatus.CONFLICT, "이미 취소된 주문입니다."), PURCHASE_LIMIT_EXCEEDED(HttpStatus.CONFLICT, "드랍의 1인당 구매 제한 수량을 초과했습니다."), ORDER_REQUEST_PAYLOAD_MISMATCH(HttpStatus.CONFLICT, "주문 요청 내용이 기존 요청과 다릅니다."), - IDEMPOTENCY_KEY_REUSED(HttpStatus.CONFLICT, "이미 다른 주문 요청에 사용된 멱등키입니다."); + IDEMPOTENCY_KEY_REUSED(HttpStatus.CONFLICT, "이미 다른 주문 요청에 사용된 멱등키입니다."), + ORDER_ADMISSION_NOT_READY(HttpStatus.SERVICE_UNAVAILABLE, "주문 접수 상태를 사용할 수 없습니다."), + ORDER_PUBLICATION_UNCONFIRMED(HttpStatus.SERVICE_UNAVAILABLE, "주문 메시지 발행 결과를 확인할 수 없습니다."), + IDEMPOTENCY_KEY_INVALID(HttpStatus.BAD_REQUEST, "Idempotency-Key 헤더가 올바르지 않습니다."); private final HttpStatus status; private final String message; diff --git a/src/main/java/com/dropit/order/messaging/OrderMessagePublisher.java b/src/main/java/com/dropit/order/messaging/OrderMessagePublisher.java new file mode 100644 index 0000000..aeaee9e --- /dev/null +++ b/src/main/java/com/dropit/order/messaging/OrderMessagePublisher.java @@ -0,0 +1,35 @@ +package com.dropit.order.messaging; + +import lombok.RequiredArgsConstructor; +import org.springframework.stereotype.Component; +import software.amazon.awssdk.services.sqs.SqsAsyncClient; +import software.amazon.awssdk.services.sqs.model.SendMessageRequest; +import software.amazon.awssdk.services.sqs.model.SendMessageResponse; +import tools.jackson.databind.ObjectMapper; + +import java.util.concurrent.TimeUnit; + +@Component +@RequiredArgsConstructor +public class OrderMessagePublisher { + + private final SqsAsyncClient sqsClient; + private final SqsProperties properties; + private final ObjectMapper objectMapper; + + public String publish(OrderMessage message) { + if (properties.orderQueueUrl() == null || properties.orderQueueUrl().isBlank()) { + throw new IllegalStateException("주문 SQS 큐 URL이 설정되지 않았습니다."); + } + SendMessageResponse response = sqsClient.sendMessage(SendMessageRequest.builder() + .queueUrl(properties.orderQueueUrl()) + .messageBody(objectMapper.writeValueAsString(message)) + .build()) + .orTimeout(properties.publisherTimeoutMillis(), TimeUnit.MILLISECONDS) + .join(); + if (response.messageId() == null || response.messageId().isBlank()) { + throw new IllegalStateException("SQS가 주문 메시지 ID를 반환하지 않았습니다."); + } + return response.messageId(); + } +} diff --git a/src/main/java/com/dropit/order/messaging/OrderSqsListenerConfig.java b/src/main/java/com/dropit/order/messaging/OrderSqsListenerConfig.java index c6a7c26..2c41719 100644 --- a/src/main/java/com/dropit/order/messaging/OrderSqsListenerConfig.java +++ b/src/main/java/com/dropit/order/messaging/OrderSqsListenerConfig.java @@ -43,6 +43,9 @@ private void validate(SqsProperties properties) { "app.order.sqs.consumer-wait-time-seconds"); requireRange(properties.consumerVisibilityTimeoutSeconds(), 0, 43_200, "app.order.sqs.consumer-visibility-timeout-seconds"); + if (properties.publisherTimeoutMillis() <= 0) { + throw new IllegalArgumentException("app.order.sqs.publisher-timeout-millis must be positive"); + } if (properties.consumerEnabled() && (properties.orderQueueUrl() == null || properties.orderQueueUrl().isBlank())) { throw new IllegalArgumentException("app.order.sqs.order-queue-url must be configured"); diff --git a/src/main/java/com/dropit/order/redis/OrderAdmissionRequest.java b/src/main/java/com/dropit/order/redis/OrderAdmissionRequest.java index bacf491..133391d 100644 --- a/src/main/java/com/dropit/order/redis/OrderAdmissionRequest.java +++ b/src/main/java/com/dropit/order/redis/OrderAdmissionRequest.java @@ -9,7 +9,7 @@ public record OrderAdmissionRequest( String idempotencyKeyHash, String fingerprint, int quantity, - int purchaseLimit + long acceptedAtEpochMicros ) { public static OrderAdmissionRequest create( @@ -17,20 +17,16 @@ public static OrderAdmissionRequest create( Long dropId, String idempotencyKeyHash, int quantity, - int purchaseLimit + long acceptedAtEpochMicros ) { return new OrderAdmissionRequest( UUID.randomUUID(), userId, dropId, idempotencyKeyHash, - fingerprintOf(dropId, quantity), + com.dropit.order.validation.OrderRequestFingerprint.of(dropId, quantity), quantity, - purchaseLimit + acceptedAtEpochMicros ); } - - public static String fingerprintOf(Long dropId, int quantity) { - return dropId + ":" + quantity; - } } diff --git a/src/main/java/com/dropit/order/redis/OrderAdmissionResultType.java b/src/main/java/com/dropit/order/redis/OrderAdmissionResultType.java index cf2d03c..20f369f 100644 --- a/src/main/java/com/dropit/order/redis/OrderAdmissionResultType.java +++ b/src/main/java/com/dropit/order/redis/OrderAdmissionResultType.java @@ -6,5 +6,6 @@ public enum OrderAdmissionResultType { CONFLICT, OUT_OF_STOCK, PURCHASE_LIMIT_EXCEEDED, + NOT_OPEN, NOT_READY } diff --git a/src/main/java/com/dropit/order/redis/RedisOrderAdmissionAdapter.java b/src/main/java/com/dropit/order/redis/RedisOrderAdmissionAdapter.java index 89f6084..20fd8bb 100644 --- a/src/main/java/com/dropit/order/redis/RedisOrderAdmissionAdapter.java +++ b/src/main/java/com/dropit/order/redis/RedisOrderAdmissionAdapter.java @@ -6,7 +6,9 @@ import org.springframework.data.redis.core.script.DefaultRedisScript; import org.springframework.stereotype.Component; +import java.time.Instant; import java.util.List; +import java.util.Map; import java.util.UUID; @Component @@ -14,6 +16,7 @@ public class RedisOrderAdmissionAdapter { private static final DefaultRedisScript RESERVE_ORDER_SCRIPT = createScript(); + private static final DefaultRedisScript CONFIRM_PUBLICATION_SCRIPT = confirmPublicationScript(); private final StringRedisTemplate redisTemplate; @@ -29,8 +32,9 @@ public OrderAdmissionResult reserve(OrderAdmissionRequest request) { String result = redisTemplate.execute( RESERVE_ORDER_SCRIPT, List.of( + RedisOrderKeyFactory.saleKey(request.dropId()), RedisOrderKeyFactory.stockKey(request.dropId()), - RedisOrderKeyFactory.purchaseKey(request.dropId(), request.userId()), + RedisOrderKeyFactory.purchaseKey(request.dropId()), RedisOrderKeyFactory.idempotencyKey( request.dropId(), request.userId(), @@ -40,7 +44,10 @@ public OrderAdmissionResult reserve(OrderAdmissionRequest request) { request.requestId().toString(), request.fingerprint(), String.valueOf(request.quantity()), - String.valueOf(request.purchaseLimit()) + Long.toString(request.acceptedAtEpochMicros()), + Long.toString(request.userId()), + Long.toString(request.dropId()), + request.idempotencyKeyHash() ); return parseResult(result); } catch (RuntimeException exception) { @@ -48,6 +55,79 @@ public OrderAdmissionResult reserve(OrderAdmissionRequest request) { } } + public ReservedOrderSnapshot getSnapshot(Long dropId, Long userId, String keyHash) { + Map values = redisTemplate.opsForHash().entries( + RedisOrderKeyFactory.idempotencyKey(dropId, userId, keyHash) + ); + if (values.isEmpty()) { + throw new IllegalStateException("Redis 주문 예약 snapshot이 없습니다."); + } + long acceptedAtMicros = Long.parseLong(required(values, "acceptedAtEpochMicros")); + long seconds = Math.floorDiv(acceptedAtMicros, 1_000_000L); + long micros = Math.floorMod(acceptedAtMicros, 1_000_000L); + return new ReservedOrderSnapshot( + UUID.fromString(required(values, "requestId")), + Long.valueOf(required(values, "userId")), + Long.valueOf(required(values, "dropId")), + required(values, "idempotencyKeyHash"), + required(values, "fingerprint"), + Integer.parseInt(required(values, "quantity")), + Instant.ofEpochSecond(seconds, micros * 1_000L), + required(values, "productName"), + new java.math.BigDecimal(required(values, "unitPrice")), + Integer.parseInt(required(values, "discountRate")), + required(values, "publicationState"), + com.dropit.order.entity.OrderRequestStatus.valueOf(required(values, "status")), + optionalLong(values, "orderId"), + optional(values, "failureCode"), + Long.parseLong(required(values, "expiresAtEpochMillis")) + ); + } + + public void confirmPublication(ReservedOrderSnapshot snapshot) { + String key = RedisOrderKeyFactory.idempotencyKey( + snapshot.dropId(), snapshot.userId(), snapshot.idempotencyKeyHash() + ); + Long result = redisTemplate.execute( + CONFIRM_PUBLICATION_SCRIPT, + List.of(key), + snapshot.requestId().toString() + ); + if (result == null || result != 1L) { + throw new IllegalStateException("Redis 주문 발행 상태를 확인할 수 없습니다."); + } + } + + public void indexRequest(ReservedOrderSnapshot snapshot) { + String key = RedisOrderKeyFactory.requestIndexKey(snapshot.requestId()); + redisTemplate.opsForHash().putAll(key, Map.of( + "requestId", snapshot.requestId().toString(), + "userId", snapshot.userId().toString(), + "dropId", snapshot.dropId().toString(), + "idempotencyKey", RedisOrderKeyFactory.idempotencyKey( + snapshot.dropId(), snapshot.userId(), snapshot.idempotencyKeyHash()) + )); + redisTemplate.expireAt(key, Instant.ofEpochMilli(snapshot.expiresAtEpochMillis())); + } + + private static String required(Map values, String field) { + String value = optional(values, field); + if (value == null || value.isBlank()) { + throw new IllegalStateException("Redis 주문 예약 필드가 없습니다: " + field); + } + return value; + } + + private static String optional(Map values, String field) { + Object value = values.get(field); + return value == null ? null : value.toString(); + } + + private static Long optionalLong(Map values, String field) { + String value = optional(values, field); + return value == null || value.isBlank() ? null : Long.valueOf(value); + } + private static OrderAdmissionResult parseResult(String result) { if (result == null) { return OrderAdmissionResult.of(OrderAdmissionResultType.NOT_READY); @@ -61,10 +141,24 @@ private static OrderAdmissionResult parseResult(String result) { case "OUT_OF_STOCK" -> OrderAdmissionResult.of(OrderAdmissionResultType.OUT_OF_STOCK); case "PURCHASE_LIMIT_EXCEEDED" -> OrderAdmissionResult.of(OrderAdmissionResultType.PURCHASE_LIMIT_EXCEEDED); + case "NOT_OPEN" -> OrderAdmissionResult.of(OrderAdmissionResultType.NOT_OPEN); default -> OrderAdmissionResult.of(OrderAdmissionResultType.NOT_READY); }; } + private static DefaultRedisScript confirmPublicationScript() { + DefaultRedisScript script = new DefaultRedisScript<>(); + script.setScriptText(""" + if redis.call('HGET', KEYS[1], 'requestId') ~= ARGV[1] then + return 0 + end + redis.call('HSET', KEYS[1], 'publicationState', 'CONFIRMED') + return 1 + """); + script.setResultType(Long.class); + return script; + } + private static OrderAdmissionResult resultWithRequestId( String[] parts, OrderAdmissionResultType type diff --git a/src/main/java/com/dropit/order/redis/RedisOrderKeyFactory.java b/src/main/java/com/dropit/order/redis/RedisOrderKeyFactory.java index 64f5cd0..bce7ec1 100644 --- a/src/main/java/com/dropit/order/redis/RedisOrderKeyFactory.java +++ b/src/main/java/com/dropit/order/redis/RedisOrderKeyFactory.java @@ -6,6 +6,13 @@ @NoArgsConstructor(access = AccessLevel.PRIVATE) public final class RedisOrderKeyFactory { + public static String requestIndexKey(java.util.UUID requestId) { + if (requestId == null) { + throw new IllegalArgumentException("requestId is required"); + } + return "order-request:" + requestId; + } + public static String stockKey(Long dropId) { return dropKey(dropId) + ":stock"; } diff --git a/src/main/java/com/dropit/order/redis/ReservedOrderSnapshot.java b/src/main/java/com/dropit/order/redis/ReservedOrderSnapshot.java new file mode 100644 index 0000000..d048766 --- /dev/null +++ b/src/main/java/com/dropit/order/redis/ReservedOrderSnapshot.java @@ -0,0 +1,42 @@ +package com.dropit.order.redis; + +import com.dropit.order.entity.OrderRequestStatus; +import com.dropit.order.messaging.OrderMessage; + +import java.math.BigDecimal; +import java.time.Instant; +import java.util.UUID; + +public record ReservedOrderSnapshot( + UUID requestId, + Long userId, + Long dropId, + String idempotencyKeyHash, + String fingerprint, + int quantity, + Instant acceptedAt, + String productName, + BigDecimal unitPrice, + int discountRate, + String publicationState, + OrderRequestStatus status, + Long orderId, + String failureCode, + long expiresAtEpochMillis +) { + public OrderMessage toMessage() { + return new OrderMessage( + OrderMessage.CURRENT_SCHEMA_VERSION, requestId, userId, dropId, + idempotencyKeyHash, fingerprint, productName, unitPrice, + quantity, discountRate, acceptedAt + ); + } + + public boolean terminal() { + return status == OrderRequestStatus.SUCCEEDED || status == OrderRequestStatus.FAILED; + } + + public boolean publicationConfirmed() { + return "CONFIRMED".equals(publicationState); + } +} diff --git a/src/main/java/com/dropit/order/service/OrderAdmissionService.java b/src/main/java/com/dropit/order/service/OrderAdmissionService.java index 0a7eaf4..0d6cb20 100644 --- a/src/main/java/com/dropit/order/service/OrderAdmissionService.java +++ b/src/main/java/com/dropit/order/service/OrderAdmissionService.java @@ -1,37 +1,99 @@ package com.dropit.order.service; +import com.dropit.drop.exception.DropErrorCode; +import com.dropit.global.exception.CommonErrorCode; +import com.dropit.global.exception.ServiceException; +import com.dropit.order.dto.request.OrderCreateRequest; +import com.dropit.order.dto.request.OrderItemCreateRequest; +import com.dropit.order.exception.OrderErrorCode; +import com.dropit.order.messaging.OrderMessagePublisher; import com.dropit.order.redis.OrderAdmissionRequest; import com.dropit.order.redis.OrderAdmissionResult; import com.dropit.order.redis.RedisOrderAdmissionAdapter; +import com.dropit.order.redis.ReservedOrderSnapshot; import com.dropit.order.validation.OrderAdmissionValidator; +import com.dropit.order.validation.OrderIdempotencyKeyHasher; import lombok.RequiredArgsConstructor; import org.springframework.stereotype.Service; -/** Redis Lua로 주문 요청을 원자적으로 검증 및 예약하고 중복 요청 결과를 반환 */ +import java.time.Instant; +import java.time.temporal.ChronoUnit; + @Service @RequiredArgsConstructor public class OrderAdmissionService { private final RedisOrderAdmissionAdapter redisAdapter; + private final OrderMessagePublisher messagePublisher; + + public ReservedOrderSnapshot admit(Long userId, String rawIdempotencyKey, OrderCreateRequest request) { + validateInput(rawIdempotencyKey, request); + OrderItemCreateRequest item = request.items().getFirst(); + String keyHash = OrderIdempotencyKeyHasher.sha256(rawIdempotencyKey); + Instant acceptedAt = Instant.now().truncatedTo(ChronoUnit.MICROS); + long acceptedAtMicros = Math.addExact( + Math.multiplyExact(acceptedAt.getEpochSecond(), 1_000_000L), + acceptedAt.getNano() / 1_000L + ); + + OrderAdmissionRequest command = OrderAdmissionRequest.create( + userId, item.dropId(), keyHash, item.quantity(), acceptedAtMicros + ); + OrderAdmissionResult result = reserve(command); + validateResult(result); - public OrderAdmissionResult reserve( - Long userId, - Long dropId, - String idempotencyKeyHash, - int quantity, - int purchaseLimit - ) { - return reserve(OrderAdmissionRequest.create( - userId, - dropId, - idempotencyKeyHash, - quantity, - purchaseLimit - )); + ReservedOrderSnapshot snapshot; + try { + snapshot = redisAdapter.getSnapshot(item.dropId(), userId, keyHash); + redisAdapter.indexRequest(snapshot); + } catch (RuntimeException exception) { + throw new ServiceException(OrderErrorCode.ORDER_ADMISSION_NOT_READY, exception); + } + + if (snapshot.terminal() || snapshot.publicationConfirmed()) { + return snapshot; + } + try { + messagePublisher.publish(snapshot.toMessage()); + } catch (RuntimeException exception) { + throw new OrderPublicationUnconfirmedException(snapshot.requestId(), exception); + } + try { + redisAdapter.confirmPublication(snapshot); + } catch (RuntimeException ignored) { + // SQS가 이미 수락했으므로 접수 성공을 반환한다. replay는 같은 requestId로 안전하게 재발행할 수 있다. + } + return snapshot; } public OrderAdmissionResult reserve(OrderAdmissionRequest request) { OrderAdmissionValidator.validate(request); return redisAdapter.reserve(request); } + + public OrderAdmissionResult reserve(Long userId, Long dropId, String keyHash, int quantity, int ignoredLimit) { + Instant now = Instant.now().truncatedTo(ChronoUnit.MICROS); + long micros = now.getEpochSecond() * 1_000_000L + now.getNano() / 1_000L; + return reserve(OrderAdmissionRequest.create(userId, dropId, keyHash, quantity, micros)); + } + + private void validateInput(String key, OrderCreateRequest request) { + if (key == null || key.isBlank() || key.length() > 128) { + throw new ServiceException(OrderErrorCode.IDEMPOTENCY_KEY_INVALID); + } + if (request == null || request.items() == null || request.items().size() != 1) { + throw new ServiceException(CommonErrorCode.INVALID_INPUT); + } + } + + private void validateResult(OrderAdmissionResult result) { + switch (result.type()) { + case NEW, REPLAY -> { } + case CONFLICT -> throw new ServiceException(OrderErrorCode.IDEMPOTENCY_KEY_REUSED); + case OUT_OF_STOCK -> throw new ServiceException(DropErrorCode.INSUFFICIENT_STOCK); + case PURCHASE_LIMIT_EXCEEDED -> throw new ServiceException(OrderErrorCode.PURCHASE_LIMIT_EXCEEDED); + case NOT_OPEN -> throw new ServiceException(DropErrorCode.DROP_NOT_OPEN); + case NOT_READY -> throw new ServiceException(OrderErrorCode.ORDER_ADMISSION_NOT_READY); + } + } } diff --git a/src/main/java/com/dropit/order/service/OrderPublicationUnconfirmedException.java b/src/main/java/com/dropit/order/service/OrderPublicationUnconfirmedException.java new file mode 100644 index 0000000..9c54f6a --- /dev/null +++ b/src/main/java/com/dropit/order/service/OrderPublicationUnconfirmedException.java @@ -0,0 +1,17 @@ +package com.dropit.order.service; + +import java.util.UUID; + +public class OrderPublicationUnconfirmedException extends RuntimeException { + + private final UUID requestId; + + public OrderPublicationUnconfirmedException(UUID requestId, Throwable cause) { + super("주문 메시지 발행 결과를 확인할 수 없습니다.", cause); + this.requestId = requestId; + } + + public UUID getRequestId() { + return requestId; + } +} diff --git a/src/main/java/com/dropit/order/validation/OrderAdmissionValidator.java b/src/main/java/com/dropit/order/validation/OrderAdmissionValidator.java index 77bd658..f492db1 100644 --- a/src/main/java/com/dropit/order/validation/OrderAdmissionValidator.java +++ b/src/main/java/com/dropit/order/validation/OrderAdmissionValidator.java @@ -19,12 +19,12 @@ public static void validate(OrderAdmissionRequest request) { || request.idempotencyKeyHash() == null || request.idempotencyKeyHash().isBlank() || request.idempotencyKeyHash().length() > 64 + || request.quantity() <= 0 || request.fingerprint() == null || !request.fingerprint().equals( - OrderAdmissionRequest.fingerprintOf(request.dropId(), request.quantity()) + OrderRequestFingerprint.of(request.dropId(), request.quantity()) ) - || request.quantity() <= 0 - || request.purchaseLimit() < 0) { + || request.acceptedAtEpochMicros() <= 0) { throw new ServiceException(CommonErrorCode.INVALID_INPUT); } } diff --git a/src/main/java/com/dropit/order/validation/OrderIdempotencyKeyHasher.java b/src/main/java/com/dropit/order/validation/OrderIdempotencyKeyHasher.java new file mode 100644 index 0000000..5a4cf7c --- /dev/null +++ b/src/main/java/com/dropit/order/validation/OrderIdempotencyKeyHasher.java @@ -0,0 +1,22 @@ +package com.dropit.order.validation; + +import lombok.AccessLevel; +import lombok.NoArgsConstructor; + +import java.nio.charset.StandardCharsets; +import java.security.MessageDigest; +import java.security.NoSuchAlgorithmException; +import java.util.HexFormat; + +@NoArgsConstructor(access = AccessLevel.PRIVATE) +public final class OrderIdempotencyKeyHasher { + + public static String sha256(String rawKey) { + try { + return HexFormat.of().formatHex(MessageDigest.getInstance("SHA-256") + .digest(rawKey.getBytes(StandardCharsets.UTF_8))); + } catch (NoSuchAlgorithmException exception) { + throw new IllegalStateException("SHA-256 해시를 사용할 수 없습니다.", exception); + } + } +} diff --git a/src/main/resources/redis/reserve-order.lua b/src/main/resources/redis/reserve-order.lua index a27cd66..25b34e0 100644 --- a/src/main/resources/redis/reserve-order.lua +++ b/src/main/resources/redis/reserve-order.lua @@ -1,32 +1,57 @@ -- Redis는 이 스크립트 전체를 하나의 원자적 연산으로 실행한다. -- 따라서 idempotency, 재고, 사용자 예약량의 결과를 이 실행 안에서 함께 결정한다. --- KEYS[1] = {drop:}:stock --- KEYS[2] = {drop:}:purchase:user: --- KEYS[3] = {drop:}:idempotency:user:: --- ARGV[1] = requestId, ARGV[2] = fingerprint, ARGV[3] = quantity, --- ARGV[4] = purchaseLimit +-- KEYS[1] = {drop:}:sale +-- KEYS[2] = {drop:}:stock +-- KEYS[3] = {drop:}:purchases +-- KEYS[4] = {drop:}:idempotency:user:: +-- ARGV[1..7] = requestId, fingerprint, quantity, acceptedAt micros, userId, dropId, key hash local request_id = ARGV[1] local fingerprint = ARGV[2] local quantity = tonumber(ARGV[3]) -local purchase_limit = tonumber(ARGV[4]) +local accepted_at = ARGV[4] +local user_id = ARGV[5] +local drop_id = ARGV[6] +local key_hash = ARGV[7] -local existing_request_id = redis.call('HGET', KEYS[3], 'requestId') +local existing_request_id = redis.call('HGET', KEYS[4], 'requestId') if existing_request_id then -- replay/conflict는 기존 idempotency 기록만 읽으며 재고와 예약량을 변경하지 않는다. - local existing_fingerprint = redis.call('HGET', KEYS[3], 'fingerprint') + local existing_fingerprint = redis.call('HGET', KEYS[4], 'fingerprint') if existing_fingerprint == fingerprint then return 'REPLAY|' .. existing_request_id end return 'CONFLICT' end -local stock = tonumber(redis.call('GET', KEYS[1]) or '0') +if redis.call('TYPE', KEYS[1]).ok ~= 'hash' + or redis.call('TYPE', KEYS[2]).ok ~= 'string' + or (redis.call('TYPE', KEYS[3]).ok ~= 'none' and redis.call('TYPE', KEYS[3]).ok ~= 'hash') then + return 'NOT_READY' +end + +local purchase_limit = tonumber(redis.call('HGET', KEYS[1], 'purchaseLimit')) +local open_at = tonumber(redis.call('HGET', KEYS[1], 'openAt')) +local close_at = tonumber(redis.call('HGET', KEYS[1], 'closeAt')) +local accepted_at_millis = math.floor(tonumber(accepted_at) / 1000) +local expires_at = close_at + 86400000 +if not quantity or quantity < 1 or quantity % 1 ~= 0 + or not purchase_limit or not open_at or not close_at or not accepted_at_millis then + return 'NOT_READY' +end +if accepted_at_millis < open_at or accepted_at_millis >= close_at then + return 'NOT_OPEN' +end + +local stock = tonumber(redis.call('GET', KEYS[2])) +if not stock then + return 'NOT_READY' +end if stock < quantity then -- 실패 결과는 여기서 즉시 반환하므로 신규 idempotency 기록을 남기지 않는다. return 'OUT_OF_STOCK' end -local purchased_quantity = tonumber(redis.call('GET', KEYS[2]) or '0') +local purchased_quantity = tonumber(redis.call('HGET', KEYS[3], user_id) or '0') if purchase_limit ~= 0 and purchased_quantity + quantity > purchase_limit then -- 실패 결과는 여기서 즉시 반환하므로 신규 idempotency 기록을 남기지 않는다. return 'PURCHASE_LIMIT_EXCEEDED' @@ -34,16 +59,27 @@ end -- 신규 성공 요청의 차감, 예약량 증가, idempotency 기록, 24시간 TTL 설정도 -- 위 검증과 같은 원자적 스크립트 실행 안에서 함께 완료한다. -redis.call('DECRBY', KEYS[1], quantity) -redis.call('INCRBY', KEYS[2], quantity) +redis.call('DECRBY', KEYS[2], quantity) +redis.call('HINCRBY', KEYS[3], user_id, quantity) redis.call( 'HSET', - KEYS[3], + KEYS[4], 'requestId', request_id, + 'userId', user_id, + 'dropId', drop_id, + 'idempotencyKeyHash', key_hash, 'fingerprint', fingerprint, 'quantity', quantity, - 'status', 'RESERVED' + 'acceptedAtEpochMicros', accepted_at, + 'status', 'RESERVED', + 'publicationState', 'UNCONFIRMED', + 'productName', redis.call('HGET', KEYS[1], 'productName'), + 'unitPrice', redis.call('HGET', KEYS[1], 'unitPrice'), + 'discountRate', redis.call('HGET', KEYS[1], 'discountRate'), + 'expiresAtEpochMillis', expires_at ) -redis.call('EXPIRE', KEYS[3], 86400) +redis.call('PEXPIREAT', KEYS[2], expires_at) +redis.call('PEXPIREAT', KEYS[3], expires_at) +redis.call('PEXPIREAT', KEYS[4], expires_at) return 'NEW|' .. request_id From 91641b151581b08f6ec337aa554bb43c8fa33b43 Mon Sep 17 00:00:00 2001 From: Sooyoung Yoon Date: Sun, 13 Sep 2026 19:06:44 +0900 Subject: [PATCH 74/98] =?UTF-8?q?feat(order):=20=EA=B3=B5=EA=B0=9C=20?= =?UTF-8?q?=EC=A3=BC=EB=AC=B8=20=EC=A0=91=EC=88=98=EC=99=80=20=EC=9A=94?= =?UTF-8?q?=EC=B2=AD=20=EC=83=81=ED=83=9C=20=EC=A1=B0=ED=9A=8C=20=EC=97=B0?= =?UTF-8?q?=EA=B2=B0?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../exception/GlobalExceptionHandler.java | 17 +++++ .../order/controller/OrderController.java | 24 ++++++- .../dto/response/OrderAdmissionResponse.java | 6 ++ .../OrderPublicationErrorResponse.java | 6 ++ .../response/OrderRequestStatusResponse.java | 15 ++++ .../redis/RedisOrderAdmissionAdapter.java | 27 ++++++- .../repository/OrderRequestRepository.java | 2 + .../service/OrderRequestQueryService.java | 72 +++++++++++++++++++ 8 files changed, 164 insertions(+), 5 deletions(-) create mode 100644 src/main/java/com/dropit/order/dto/response/OrderAdmissionResponse.java create mode 100644 src/main/java/com/dropit/order/dto/response/OrderPublicationErrorResponse.java create mode 100644 src/main/java/com/dropit/order/dto/response/OrderRequestStatusResponse.java create mode 100644 src/main/java/com/dropit/order/service/OrderRequestQueryService.java diff --git a/src/main/java/com/dropit/global/exception/GlobalExceptionHandler.java b/src/main/java/com/dropit/global/exception/GlobalExceptionHandler.java index 1b48e0d..2512e6e 100644 --- a/src/main/java/com/dropit/global/exception/GlobalExceptionHandler.java +++ b/src/main/java/com/dropit/global/exception/GlobalExceptionHandler.java @@ -1,5 +1,9 @@ package com.dropit.global.exception; +import com.dropit.order.dto.response.OrderPublicationErrorResponse; +import com.dropit.order.exception.OrderErrorCode; +import com.dropit.order.service.OrderPublicationUnconfirmedException; +import org.springframework.http.HttpHeaders; import org.springframework.http.ResponseEntity; import org.springframework.http.converter.HttpMessageNotReadableException; import org.springframework.web.bind.MethodArgumentNotValidException; @@ -12,6 +16,19 @@ @RestControllerAdvice public class GlobalExceptionHandler { + @ExceptionHandler(OrderPublicationUnconfirmedException.class) + public ResponseEntity handleOrderPublicationUnconfirmed( + OrderPublicationUnconfirmedException exception + ) { + OrderErrorCode errorCode = OrderErrorCode.ORDER_PUBLICATION_UNCONFIRMED; + return ResponseEntity + .status(errorCode.status()) + .header(HttpHeaders.LOCATION, "/order-requests/" + exception.getRequestId()) + .body(new OrderPublicationErrorResponse( + errorCode.code(), errorCode.message(), exception.getRequestId() + )); + } + @ExceptionHandler(ServiceException.class) public ResponseEntity handleServiceException(ServiceException e) { ErrorCode errorCode = e.getErrorCode(); diff --git a/src/main/java/com/dropit/order/controller/OrderController.java b/src/main/java/com/dropit/order/controller/OrderController.java index 170cba6..9510762 100644 --- a/src/main/java/com/dropit/order/controller/OrderController.java +++ b/src/main/java/com/dropit/order/controller/OrderController.java @@ -3,6 +3,11 @@ import com.dropit.global.security.principal.CurrentUserId; import com.dropit.order.dto.request.OrderCreateRequest; import com.dropit.order.dto.response.OrderResponse; +import com.dropit.order.dto.response.OrderAdmissionResponse; +import com.dropit.order.dto.response.OrderRequestStatusResponse; +import com.dropit.order.redis.ReservedOrderSnapshot; +import com.dropit.order.service.OrderAdmissionService; +import com.dropit.order.service.OrderRequestQueryService; import com.dropit.order.dto.response.OrderSummaryResponse; import com.dropit.order.service.OrderService; import jakarta.validation.Valid; @@ -18,19 +23,32 @@ public class OrderController { private final OrderService orderService; + private final OrderAdmissionService orderAdmissionService; + private final OrderRequestQueryService orderRequestQueryService; @PostMapping("/orders") - public ResponseEntity create( + public ResponseEntity create( @CurrentUserId Long userId, + @RequestHeader(value = "Idempotency-Key", required = false) String idempotencyKey, @Valid @RequestBody OrderCreateRequest request ) { - OrderResponse response = orderService.create(userId, request); + ReservedOrderSnapshot admitted = orderAdmissionService.admit(userId, idempotencyKey, request); + OrderAdmissionResponse response = new OrderAdmissionResponse(admitted.requestId()); return ResponseEntity - .created(URI.create("/orders/" + response.id())) + .accepted() + .location(URI.create("/order-requests/" + response.requestId())) .body(response); } + @GetMapping("/order-requests/{requestId}") + public ResponseEntity getOrderRequest( + @CurrentUserId Long userId, + @PathVariable java.util.UUID requestId + ) { + return ResponseEntity.ok(orderRequestQueryService.get(userId, requestId)); + } + @GetMapping("/orders/me") public ResponseEntity> getMyOrders( @CurrentUserId Long userId diff --git a/src/main/java/com/dropit/order/dto/response/OrderAdmissionResponse.java b/src/main/java/com/dropit/order/dto/response/OrderAdmissionResponse.java new file mode 100644 index 0000000..f34a1fb --- /dev/null +++ b/src/main/java/com/dropit/order/dto/response/OrderAdmissionResponse.java @@ -0,0 +1,6 @@ +package com.dropit.order.dto.response; + +import java.util.UUID; + +public record OrderAdmissionResponse(UUID requestId) { +} diff --git a/src/main/java/com/dropit/order/dto/response/OrderPublicationErrorResponse.java b/src/main/java/com/dropit/order/dto/response/OrderPublicationErrorResponse.java new file mode 100644 index 0000000..cb87441 --- /dev/null +++ b/src/main/java/com/dropit/order/dto/response/OrderPublicationErrorResponse.java @@ -0,0 +1,6 @@ +package com.dropit.order.dto.response; + +import java.util.UUID; + +public record OrderPublicationErrorResponse(String code, String message, UUID requestId) { +} diff --git a/src/main/java/com/dropit/order/dto/response/OrderRequestStatusResponse.java b/src/main/java/com/dropit/order/dto/response/OrderRequestStatusResponse.java new file mode 100644 index 0000000..0e213c3 --- /dev/null +++ b/src/main/java/com/dropit/order/dto/response/OrderRequestStatusResponse.java @@ -0,0 +1,15 @@ +package com.dropit.order.dto.response; + +import com.dropit.order.entity.OrderRequestStatus; +import com.dropit.order.entity.OrderStatus; + +import java.util.UUID; + +public record OrderRequestStatusResponse( + UUID requestId, + OrderRequestStatus status, + Long orderId, + OrderStatus orderStatus, + String failureCode +) { +} diff --git a/src/main/java/com/dropit/order/redis/RedisOrderAdmissionAdapter.java b/src/main/java/com/dropit/order/redis/RedisOrderAdmissionAdapter.java index 20fd8bb..aa6bdb6 100644 --- a/src/main/java/com/dropit/order/redis/RedisOrderAdmissionAdapter.java +++ b/src/main/java/com/dropit/order/redis/RedisOrderAdmissionAdapter.java @@ -9,6 +9,7 @@ import java.time.Instant; import java.util.List; import java.util.Map; +import java.util.Optional; import java.util.UUID; @Component @@ -56,9 +57,31 @@ public OrderAdmissionResult reserve(OrderAdmissionRequest request) { } public ReservedOrderSnapshot getSnapshot(Long dropId, Long userId, String keyHash) { - Map values = redisTemplate.opsForHash().entries( - RedisOrderKeyFactory.idempotencyKey(dropId, userId, keyHash) + return parseSnapshot(redisTemplate.opsForHash().entries( + RedisOrderKeyFactory.idempotencyKey(dropId, userId, keyHash))); + } + + public Optional findByRequestId(UUID requestId, Long userId) { + Map index = redisTemplate.opsForHash().entries( + RedisOrderKeyFactory.requestIndexKey(requestId) ); + if (index.isEmpty() || !requestId.toString().equals(optional(index, "requestId")) + || !userId.toString().equals(optional(index, "userId"))) { + return Optional.empty(); + } + String idempotencyKey = required(index, "idempotencyKey"); + Map values = redisTemplate.opsForHash().entries(idempotencyKey); + if (values.isEmpty()) { + return Optional.empty(); + } + ReservedOrderSnapshot snapshot = parseSnapshot(values); + if (!requestId.equals(snapshot.requestId()) || !userId.equals(snapshot.userId())) { + return Optional.empty(); + } + return Optional.of(snapshot); + } + + private ReservedOrderSnapshot parseSnapshot(Map values) { if (values.isEmpty()) { throw new IllegalStateException("Redis 주문 예약 snapshot이 없습니다."); } diff --git a/src/main/java/com/dropit/order/repository/OrderRequestRepository.java b/src/main/java/com/dropit/order/repository/OrderRequestRepository.java index c4bd3ea..9a0d488 100644 --- a/src/main/java/com/dropit/order/repository/OrderRequestRepository.java +++ b/src/main/java/com/dropit/order/repository/OrderRequestRepository.java @@ -12,6 +12,8 @@ public interface OrderRequestRepository extends JpaRepository { + Optional findByIdAndUserId(UUID id, Long userId); + @Lock(LockModeType.PESSIMISTIC_WRITE) @Query("select r from OrderRequest r where r.id = :requestId") Optional findByRequestIdForUpdate(@Param("requestId") UUID requestId); diff --git a/src/main/java/com/dropit/order/service/OrderRequestQueryService.java b/src/main/java/com/dropit/order/service/OrderRequestQueryService.java new file mode 100644 index 0000000..db7b603 --- /dev/null +++ b/src/main/java/com/dropit/order/service/OrderRequestQueryService.java @@ -0,0 +1,72 @@ +package com.dropit.order.service; + +import com.dropit.global.exception.ServiceException; +import com.dropit.order.dto.response.OrderRequestStatusResponse; +import com.dropit.order.entity.OrderRequest; +import com.dropit.order.entity.OrderRequestStatus; +import com.dropit.order.exception.OrderErrorCode; +import com.dropit.order.redis.RedisOrderAdmissionAdapter; +import com.dropit.order.redis.ReservedOrderSnapshot; +import com.dropit.order.repository.OrderRequestRepository; +import lombok.RequiredArgsConstructor; +import org.springframework.stereotype.Service; +import org.springframework.transaction.annotation.Transactional; + +import java.util.Optional; +import java.util.Set; +import java.util.UUID; + +@Service +@RequiredArgsConstructor +public class OrderRequestQueryService { + + private static final Set EXPOSED_FAILURE_CODES = Set.of( + "INSUFFICIENT_STOCK", "PURCHASE_LIMIT_EXCEEDED", "DROP_NOT_OPEN" + ); + + private final OrderRequestRepository repository; + private final RedisOrderAdmissionAdapter redisAdapter; + + @Transactional(readOnly = true) + public OrderRequestStatusResponse get(Long userId, UUID requestId) { + Optional stored; + try { + stored = repository.findByIdAndUserId(requestId, userId); + } catch (RuntimeException exception) { + throw new ServiceException(OrderErrorCode.ORDER_ADMISSION_NOT_READY, exception); + } + if (stored.isPresent() && stored.get().isTerminal()) { + OrderRequest request = stored.get(); + return new OrderRequestStatusResponse( + request.getId(), request.getStatus(), request.getOrderId(), + request.getOrder() == null ? null : request.getOrder().getStatus(), + exposedFailureCode(request.getFailureCode()) + ); + } + + Optional pending; + try { + pending = redisAdapter.findByRequestId(requestId, userId); + } catch (RuntimeException exception) { + throw new ServiceException(OrderErrorCode.ORDER_ADMISSION_NOT_READY, exception); + } + if (pending.isPresent()) { + ReservedOrderSnapshot snapshot = pending.get(); + return new OrderRequestStatusResponse( + snapshot.requestId(), snapshot.status(), snapshot.orderId(), null, + exposedFailureCode(snapshot.failureCode()) + ); + } + if (stored.isPresent()) { + throw new ServiceException(OrderErrorCode.ORDER_ADMISSION_NOT_READY); + } + throw new ServiceException(OrderErrorCode.ORDER_REQUEST_NOT_FOUND); + } + + private String exposedFailureCode(String failureCode) { + if (failureCode == null) { + return null; + } + return EXPOSED_FAILURE_CODES.contains(failureCode) ? failureCode : "ORDER_FINALIZATION_FAILED"; + } +} From 5ae2b35e337e51b487d50b4b297f2721ab6dc66a Mon Sep 17 00:00:00 2001 From: Sooyoung Yoon Date: Sun, 13 Sep 2026 19:11:44 +0900 Subject: [PATCH 75/98] =?UTF-8?q?feat(order):=20=EC=B7=A8=EC=86=8C=20Redis?= =?UTF-8?q?=20=EB=B3=B5=EA=B5=AC=EC=99=80=20=EC=9E=AC=EC=8B=9C=EB=8F=84=20?= =?UTF-8?q?=EC=83=81=ED=83=9C=20=EA=B8=B0=EB=A1=9D?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../order/controller/OrderController.java | 4 +- .../com/dropit/order/entity/OrderRequest.java | 24 +++++-- .../messaging/OrderSqsListenerConfig.java | 16 +++-- .../order/redis/OrderRequestSyncCommand.java | 8 +-- .../RedisOrderFinalizationSyncAdapter.java | 5 +- .../order/redis/RedisOrderRequestState.java | 7 ++ .../DropUserPurchaseRepository.java | 9 +++ .../repository/OrderRequestRepository.java | 7 ++ .../service/OrderCancellationService.java | 70 +++++++++++++++++++ .../service/OrderRedisSyncRetryScheduler.java | 28 ++++++++ .../service/OrderRequestRedisSyncService.java | 5 ++ .../OrderRequestRedisSyncStateService.java | 5 +- .../OrderRequestRegistrationService.java | 14 +++- .../resources/redis/sync-order-request.lua | 26 ++++--- 14 files changed, 196 insertions(+), 32 deletions(-) create mode 100644 src/main/java/com/dropit/order/redis/RedisOrderRequestState.java create mode 100644 src/main/java/com/dropit/order/service/OrderCancellationService.java create mode 100644 src/main/java/com/dropit/order/service/OrderRedisSyncRetryScheduler.java diff --git a/src/main/java/com/dropit/order/controller/OrderController.java b/src/main/java/com/dropit/order/controller/OrderController.java index 9510762..0f44124 100644 --- a/src/main/java/com/dropit/order/controller/OrderController.java +++ b/src/main/java/com/dropit/order/controller/OrderController.java @@ -8,6 +8,7 @@ import com.dropit.order.redis.ReservedOrderSnapshot; import com.dropit.order.service.OrderAdmissionService; import com.dropit.order.service.OrderRequestQueryService; +import com.dropit.order.service.OrderCancellationService; import com.dropit.order.dto.response.OrderSummaryResponse; import com.dropit.order.service.OrderService; import jakarta.validation.Valid; @@ -25,6 +26,7 @@ public class OrderController { private final OrderService orderService; private final OrderAdmissionService orderAdmissionService; private final OrderRequestQueryService orderRequestQueryService; + private final OrderCancellationService orderCancellationService; @PostMapping("/orders") public ResponseEntity create( @@ -69,7 +71,7 @@ public ResponseEntity cancel( @CurrentUserId Long userId, @PathVariable Long orderId ) { - orderService.cancel(userId, orderId); + orderCancellationService.cancel(userId, orderId); return ResponseEntity.noContent().build(); } diff --git a/src/main/java/com/dropit/order/entity/OrderRequest.java b/src/main/java/com/dropit/order/entity/OrderRequest.java index 1f82ca0..5f29d0d 100644 --- a/src/main/java/com/dropit/order/entity/OrderRequest.java +++ b/src/main/java/com/dropit/order/entity/OrderRequest.java @@ -17,6 +17,8 @@ import java.math.BigDecimal; import java.time.LocalDateTime; +import java.time.Instant; +import com.dropit.order.redis.RedisOrderRequestState; import java.util.Objects; import java.util.UUID; @@ -80,6 +82,13 @@ public class OrderRequest extends BaseEntity { @Column(name = "desired_version", nullable = false) private long desiredVersion; + @Enumerated(EnumType.STRING) + @Column(name = "desired_redis_state", length = 20) + private RedisOrderRequestState desiredRedisState; + + @Column(name = "redis_expires_at", nullable = false) + private Instant redisExpiresAt; + public OrderRequest( UUID requestId, Long userId, @@ -90,7 +99,8 @@ public OrderRequest( BigDecimal unitPrice, int quantity, int discountRate, - LocalDateTime acceptedAt + LocalDateTime acceptedAt, + Instant redisExpiresAt ) { this.id = requestId; this.status = OrderRequestStatus.PENDING; @@ -103,6 +113,7 @@ public OrderRequest( this.quantity = quantity; this.discountRate = discountRate; this.acceptedAt = acceptedAt; + this.redisExpiresAt = redisExpiresAt; } public boolean matches( @@ -137,7 +148,7 @@ public boolean succeed(Order order) { this.status = OrderRequestStatus.SUCCEEDED; this.order = order; this.failureCode = null; - requestRedisSync(); + requestRedisSync(RedisOrderRequestState.SUCCEEDED); return true; } @@ -148,7 +159,7 @@ public boolean fail(String failureCode) { this.status = OrderRequestStatus.FAILED; this.failureCode = failureCode; - requestRedisSync(); + requestRedisSync(RedisOrderRequestState.FAILED); return true; } @@ -165,8 +176,13 @@ public boolean completeRedisSync(long appliedVersion) { return true; } - private void requestRedisSync() { + public void requestCancellationSync() { + requestRedisSync(RedisOrderRequestState.CANCELED); + } + + private void requestRedisSync(RedisOrderRequestState desiredState) { redisSyncPending = true; + desiredRedisState = desiredState; desiredVersion++; } } diff --git a/src/main/java/com/dropit/order/messaging/OrderSqsListenerConfig.java b/src/main/java/com/dropit/order/messaging/OrderSqsListenerConfig.java index 2c41719..09e5540 100644 --- a/src/main/java/com/dropit/order/messaging/OrderSqsListenerConfig.java +++ b/src/main/java/com/dropit/order/messaging/OrderSqsListenerConfig.java @@ -35,6 +35,15 @@ SqsMessageListenerContainerFactory orderSqsListenerContainerFactory( } private void validate(SqsProperties properties) { + if (properties.publisherTimeoutMillis() <= 0) { + throw new IllegalArgumentException("app.order.sqs.publisher-timeout-millis must be positive"); + } + if (!properties.consumerEnabled()) { + return; + } + if (properties.orderQueueUrl() == null || properties.orderQueueUrl().isBlank()) { + throw new IllegalArgumentException("app.order.sqs.order-queue-url must be configured"); + } requireRange(properties.consumerConcurrency(), 1, Integer.MAX_VALUE, "app.order.sqs.consumer-concurrency"); requireRange(properties.consumerMaxNumberOfMessages(), 1, 10, @@ -43,13 +52,6 @@ private void validate(SqsProperties properties) { "app.order.sqs.consumer-wait-time-seconds"); requireRange(properties.consumerVisibilityTimeoutSeconds(), 0, 43_200, "app.order.sqs.consumer-visibility-timeout-seconds"); - if (properties.publisherTimeoutMillis() <= 0) { - throw new IllegalArgumentException("app.order.sqs.publisher-timeout-millis must be positive"); - } - if (properties.consumerEnabled() - && (properties.orderQueueUrl() == null || properties.orderQueueUrl().isBlank())) { - throw new IllegalArgumentException("app.order.sqs.order-queue-url must be configured"); - } } private void requireRange(int value, int min, int max, String propertyName) { diff --git a/src/main/java/com/dropit/order/redis/OrderRequestSyncCommand.java b/src/main/java/com/dropit/order/redis/OrderRequestSyncCommand.java index 98d9887..dcddbc4 100644 --- a/src/main/java/com/dropit/order/redis/OrderRequestSyncCommand.java +++ b/src/main/java/com/dropit/order/redis/OrderRequestSyncCommand.java @@ -1,18 +1,18 @@ package com.dropit.order.redis; -import com.dropit.order.entity.OrderRequestStatus; - +import java.time.Instant; import java.util.UUID; public record OrderRequestSyncCommand( UUID requestId, - OrderRequestStatus status, + RedisOrderRequestState status, Long orderId, Long userId, Long dropId, String idempotencyKeyHash, int quantity, String failureCode, - long desiredVersion + long desiredVersion, + Instant expiresAt ) { } diff --git a/src/main/java/com/dropit/order/redis/RedisOrderFinalizationSyncAdapter.java b/src/main/java/com/dropit/order/redis/RedisOrderFinalizationSyncAdapter.java index a54e000..5a1591d 100644 --- a/src/main/java/com/dropit/order/redis/RedisOrderFinalizationSyncAdapter.java +++ b/src/main/java/com/dropit/order/redis/RedisOrderFinalizationSyncAdapter.java @@ -23,7 +23,7 @@ public OrderRequestSyncResult sync(OrderRequestSyncCommand command) { RedisOrderKeyFactory.idempotencyKey( command.dropId(), command.userId(), - command.idempotencyKeyHash() + command.idempotencyKeyHash() ), RedisOrderKeyFactory.stockKey(command.dropId()), RedisOrderKeyFactory.purchaseKey(command.dropId(), command.userId()) @@ -33,7 +33,8 @@ public OrderRequestSyncResult sync(OrderRequestSyncCommand command) { Integer.toString(command.quantity()), command.orderId() == null ? "" : command.orderId().toString(), command.failureCode() == null ? "" : command.failureCode(), - Long.toString(command.desiredVersion()) + Long.toString(command.desiredVersion()), + command.userId().toString() ); if (result == null) { throw new IllegalStateException("Redis 주문 최종 상태 반영 결과가 없습니다."); diff --git a/src/main/java/com/dropit/order/redis/RedisOrderRequestState.java b/src/main/java/com/dropit/order/redis/RedisOrderRequestState.java new file mode 100644 index 0000000..f36f1c6 --- /dev/null +++ b/src/main/java/com/dropit/order/redis/RedisOrderRequestState.java @@ -0,0 +1,7 @@ +package com.dropit.order.redis; + +public enum RedisOrderRequestState { + SUCCEEDED, + FAILED, + CANCELED +} diff --git a/src/main/java/com/dropit/order/repository/DropUserPurchaseRepository.java b/src/main/java/com/dropit/order/repository/DropUserPurchaseRepository.java index 79b77a6..d03d669 100644 --- a/src/main/java/com/dropit/order/repository/DropUserPurchaseRepository.java +++ b/src/main/java/com/dropit/order/repository/DropUserPurchaseRepository.java @@ -7,6 +7,8 @@ import org.springframework.data.repository.query.Param; import java.util.Optional; +import jakarta.persistence.LockModeType; +import org.springframework.data.jpa.repository.Lock; public interface DropUserPurchaseRepository extends JpaRepository { @@ -14,6 +16,13 @@ public interface DropUserPurchaseRepository extends JpaRepository findByDropIdAndUserId(Long dropId, Long userId); + @Lock(LockModeType.PESSIMISTIC_WRITE) + @Query("select p from DropUserPurchase p where p.dropId = :dropId and p.userId = :userId") + Optional findByDropIdAndUserIdForUpdate( + @Param("dropId") Long dropId, + @Param("userId") Long userId + ); + @Modifying @Query(value = """ INSERT IGNORE INTO drop_user_purchases ( diff --git a/src/main/java/com/dropit/order/repository/OrderRequestRepository.java b/src/main/java/com/dropit/order/repository/OrderRequestRepository.java index 9a0d488..d19d618 100644 --- a/src/main/java/com/dropit/order/repository/OrderRequestRepository.java +++ b/src/main/java/com/dropit/order/repository/OrderRequestRepository.java @@ -9,11 +9,18 @@ import java.util.Optional; import java.util.UUID; +import java.util.List; public interface OrderRequestRepository extends JpaRepository { Optional findByIdAndUserId(UUID id, Long userId); + @Lock(LockModeType.PESSIMISTIC_WRITE) + @Query("select r from OrderRequest r where r.order.id = :orderId") + Optional findByOrderIdForUpdate(@Param("orderId") Long orderId); + + List findTop100ByRedisSyncPendingTrueOrderByUpdatedAtAsc(); + @Lock(LockModeType.PESSIMISTIC_WRITE) @Query("select r from OrderRequest r where r.id = :requestId") Optional findByRequestIdForUpdate(@Param("requestId") UUID requestId); diff --git a/src/main/java/com/dropit/order/service/OrderCancellationService.java b/src/main/java/com/dropit/order/service/OrderCancellationService.java new file mode 100644 index 0000000..6e1b69f --- /dev/null +++ b/src/main/java/com/dropit/order/service/OrderCancellationService.java @@ -0,0 +1,70 @@ +package com.dropit.order.service; + +import com.dropit.drop.entity.Drop; +import com.dropit.drop.exception.DropErrorCode; +import com.dropit.drop.repository.DropRepository; +import com.dropit.global.exception.CommonErrorCode; +import com.dropit.global.exception.ServiceException; +import com.dropit.order.entity.Order; +import com.dropit.order.entity.OrderItem; +import com.dropit.order.entity.OrderRequest; +import com.dropit.order.exception.OrderErrorCode; +import com.dropit.order.repository.DropUserPurchaseRepository; +import com.dropit.order.repository.OrderItemRepository; +import com.dropit.order.repository.OrderRepository; +import com.dropit.order.repository.OrderRequestRepository; +import lombok.RequiredArgsConstructor; +import lombok.extern.slf4j.Slf4j; +import org.springframework.stereotype.Service; +import org.springframework.transaction.support.TransactionTemplate; + +import java.util.List; + +@Slf4j +@Service +@RequiredArgsConstructor +public class OrderCancellationService { + + private final OrderRepository orderRepository; + private final OrderRequestRepository requestRepository; + private final OrderItemRepository itemRepository; + private final DropUserPurchaseRepository purchaseRepository; + private final DropRepository dropRepository; + private final OrderRequestRedisSyncService redisSyncService; + private final TransactionTemplate transactionTemplate; + + public void cancel(Long userId, Long orderId) { + OrderRequest request = transactionTemplate.execute(status -> cancelInTransaction(userId, orderId)); + if (request == null) { + return; + } + try { + redisSyncService.sync(request.getId()); + } catch (RuntimeException exception) { + log.warn("주문 취소 Redis 동기화를 지연 처리합니다. requestId={}", request.getId(), exception); + } + } + + private OrderRequest cancelInTransaction(Long userId, Long orderId) { + OrderRequest request = requestRepository.findByOrderIdForUpdate(orderId).orElse(null); + Order order = orderRepository.findByIdAndUser_IdForUpdate(orderId, userId) + .orElseThrow(() -> new ServiceException(OrderErrorCode.ORDER_NOT_FOUND)); + List items = itemRepository.findAllByOrder_IdOrderByIdAsc(orderId); + order.cancel(); + for (OrderItem item : items) { + Long dropId = item.getDrop().getId(); + purchaseRepository.findByDropIdAndUserIdForUpdate(dropId, userId) + .orElseThrow(() -> new ServiceException(CommonErrorCode.INTERNAL_SERVER_ERROR)); + Drop drop = dropRepository.findByIdForUpdate(dropId) + .orElseThrow(() -> new ServiceException(DropErrorCode.DROP_NOT_FOUND)); + if (purchaseRepository.decreaseConfirmedQuantity(dropId, userId, item.getQuantity()) != 1) { + throw new ServiceException(CommonErrorCode.INTERNAL_SERVER_ERROR); + } + drop.restoreStock(item.getQuantity()); + } + if (request != null) { + request.requestCancellationSync(); + } + return request; + } +} diff --git a/src/main/java/com/dropit/order/service/OrderRedisSyncRetryScheduler.java b/src/main/java/com/dropit/order/service/OrderRedisSyncRetryScheduler.java new file mode 100644 index 0000000..9850fac --- /dev/null +++ b/src/main/java/com/dropit/order/service/OrderRedisSyncRetryScheduler.java @@ -0,0 +1,28 @@ +package com.dropit.order.service; + +import com.dropit.order.entity.OrderRequest; +import com.dropit.order.repository.OrderRequestRepository; +import lombok.RequiredArgsConstructor; +import lombok.extern.slf4j.Slf4j; +import org.springframework.scheduling.annotation.Scheduled; +import org.springframework.stereotype.Component; + +@Slf4j +@Component +@RequiredArgsConstructor +public class OrderRedisSyncRetryScheduler { + + private final OrderRequestRepository repository; + private final OrderRequestRedisSyncService syncService; + + @Scheduled(fixedDelayString = "${app.order.redis-sync-retry-delay:5000}") + public void retryPending() { + for (OrderRequest request : repository.findTop100ByRedisSyncPendingTrueOrderByUpdatedAtAsc()) { + try { + syncService.sync(request.getId()); + } catch (RuntimeException exception) { + log.warn("주문 Redis 동기화 재시도에 실패했습니다. requestId={}", request.getId(), exception); + } + } + } +} diff --git a/src/main/java/com/dropit/order/service/OrderRequestRedisSyncService.java b/src/main/java/com/dropit/order/service/OrderRequestRedisSyncService.java index 2f96cd7..8e9c957 100644 --- a/src/main/java/com/dropit/order/service/OrderRequestRedisSyncService.java +++ b/src/main/java/com/dropit/order/service/OrderRequestRedisSyncService.java @@ -8,6 +8,7 @@ import java.util.Optional; import java.util.UUID; +import java.time.Instant; @Service @RequiredArgsConstructor @@ -24,6 +25,10 @@ public void sync(UUID requestId) { OrderRequestSyncCommand command = pendingCommand.get(); OrderRequestSyncResult result = syncAdapter.sync(command); + if (result == OrderRequestSyncResult.MISSING && !Instant.now().isBefore(command.expiresAt())) { + stateService.clearPending(command.requestId(), command.desiredVersion()); + return; + } if (result != OrderRequestSyncResult.APPLIED && result != OrderRequestSyncResult.ALREADY_APPLIED) { throw new IllegalStateException("Redis 주문 최종 상태를 반영할 수 없습니다: " + result); diff --git a/src/main/java/com/dropit/order/service/OrderRequestRedisSyncStateService.java b/src/main/java/com/dropit/order/service/OrderRequestRedisSyncStateService.java index 3dc0208..07be3d7 100644 --- a/src/main/java/com/dropit/order/service/OrderRequestRedisSyncStateService.java +++ b/src/main/java/com/dropit/order/service/OrderRequestRedisSyncStateService.java @@ -28,14 +28,15 @@ public Optional loadPending(UUID requestId) { return Optional.of(new OrderRequestSyncCommand( request.getId(), - request.getStatus(), + request.getDesiredRedisState(), request.getOrderId(), request.getUserId(), request.getDropId(), request.getIdempotencyKeyHash(), request.getQuantity(), request.getFailureCode(), - request.getDesiredVersion() + request.getDesiredVersion(), + request.getRedisExpiresAt() )); } diff --git a/src/main/java/com/dropit/order/service/OrderRequestRegistrationService.java b/src/main/java/com/dropit/order/service/OrderRequestRegistrationService.java index 1a896cf..e4ab61d 100644 --- a/src/main/java/com/dropit/order/service/OrderRequestRegistrationService.java +++ b/src/main/java/com/dropit/order/service/OrderRequestRegistrationService.java @@ -1,5 +1,9 @@ package com.dropit.order.service; +import com.dropit.drop.entity.Drop; +import com.dropit.drop.exception.DropErrorCode; +import com.dropit.drop.repository.DropRepository; +import com.dropit.global.exception.ServiceException; import com.dropit.order.entity.OrderRequest; import com.dropit.order.messaging.InvalidOrderMessageException; import com.dropit.order.messaging.OrderMessage; @@ -15,6 +19,7 @@ public class OrderRequestRegistrationService { private final OrderRequestRepository orderRequestRepository; + private final DropRepository dropRepository; @Transactional(propagation = Propagation.REQUIRES_NEW) public void register(OrderMessage message) { @@ -26,6 +31,12 @@ public void register(OrderMessage message) { return; } + Drop drop = dropRepository.findById(message.dropId()) + .orElseThrow(() -> new ServiceException(DropErrorCode.DROP_NOT_FOUND)); + java.time.Instant redisExpiresAt = drop.getCloseAt() + .atZone(java.time.ZoneId.of("Asia/Seoul")) + .toInstant() + .plus(java.time.Duration.ofHours(24)); orderRequestRepository.saveAndFlush(new OrderRequest( message.requestId(), message.userId(), @@ -36,7 +47,8 @@ public void register(OrderMessage message) { message.unitPrice(), message.quantity(), message.discountRate(), - OrderMessageValidator.acceptedAt(message) + OrderMessageValidator.acceptedAt(message), + redisExpiresAt )); } diff --git a/src/main/resources/redis/sync-order-request.lua b/src/main/resources/redis/sync-order-request.lua index a47017d..a36a426 100644 --- a/src/main/resources/redis/sync-order-request.lua +++ b/src/main/resources/redis/sync-order-request.lua @@ -6,7 +6,7 @@ -- KEYS[2] = {drop:}:stock -- KEYS[3] = {drop:}:purchase:user: -- ARGV[1] = requestId, ARGV[2] = 최종 상태(SUCCEEDED/FAILED), ARGV[3] = quantity, --- ARGV[4] = orderId, ARGV[5] = failureCode, ARGV[6] = DB 동기화 버전 +-- ARGV[4] = orderId, ARGV[5] = failureCode, ARGV[6] = DB 동기화 버전, ARGV[7] = userId local reservationKey = KEYS[1] local stockKey = KEYS[2] local purchaseKey = KEYS[3] @@ -17,6 +17,7 @@ local quantity = tonumber(ARGV[3]) local orderId = ARGV[4] local failureCode = ARGV[5] local desiredVersion = ARGV[6] +local userId = ARGV[7] if redis.call('TYPE', reservationKey).ok ~= 'hash' then -- 어떤 예약을 확정해야 하는지 모르므로 재고·구매량을 임의로 바꾸지 않는다. @@ -29,31 +30,34 @@ if redis.call('HGET', reservationKey, 'requestId') ~= requestId then end local currentStatus = redis.call('HGET', reservationKey, 'status') +if tonumber(redis.call('HGET', reservationKey, 'quantity')) ~= quantity then + -- 같은 키가 재사용됐더라도 DB 요청 수량과 다른 예약은 절대 변경하지 않는다. + return 'INVALID' +end if currentStatus == targetStatus then -- 같은 SQS 메시지가 다시 와도 이미 끝난 작업이므로 아무것도 하지 않는다. return 'ALREADY_APPLIED' end -if currentStatus ~= 'RESERVED' then +if targetStatus == 'CANCELED' then + if currentStatus ~= 'RESERVED' and currentStatus ~= 'SUCCEEDED' then + return 'INVALID' + end +elseif currentStatus ~= 'RESERVED' then -- 이미 다른 최종 상태가 기록됐다면 그 결정을 바꾸지 않는다. return 'INVALID' end -if tonumber(redis.call('HGET', reservationKey, 'quantity')) ~= quantity then - -- DB 요청과 Redis 예약의 수량이 다르면 잘못된 수량을 복원할 수 있으므로 중단한다. - return 'INVALID' -end - -if targetStatus == 'FAILED' then +if targetStatus == 'FAILED' or targetStatus == 'CANCELED' then -- DB 주문 생성이 실패했으므로 Redis에 미리 잡아 둔 자리를 다시 돌려준다. if redis.call('TYPE', stockKey).ok ~= 'string' - or redis.call('TYPE', purchaseKey).ok ~= 'string' then + or redis.call('TYPE', purchaseKey).ok ~= 'hash' then return 'INVALID' end - local purchased = tonumber(redis.call('GET', purchaseKey)) + local purchased = tonumber(redis.call('HGET', purchaseKey, userId)) if not purchased or purchased < quantity then return 'INVALID' end redis.call('INCRBY', stockKey, quantity) - redis.call('DECRBY', purchaseKey, quantity) + redis.call('HINCRBY', purchaseKey, userId, -quantity) elseif targetStatus ~= 'SUCCEEDED' then -- 예약은 성공 확정 또는 실패 반환만 가능하다. return 'INVALID' From 493ddb0b6306404079e4d6f3e1e00698479119bd Mon Sep 17 00:00:00 2001 From: Sooyoung Yoon Date: Sun, 13 Sep 2026 19:14:31 +0900 Subject: [PATCH 76/98] =?UTF-8?q?refactor(order):=20=EA=B8=B0=EC=A1=B4=20?= =?UTF-8?q?=EB=8F=99=EA=B8=B0=20=EA=B3=B5=EA=B0=9C=20=EC=A3=BC=EB=AC=B8=20?= =?UTF-8?q?=EA=B2=BD=EB=A1=9C=20=EC=A0=9C=EA=B1=B0?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../com/dropit/drop/service/DropService.java | 15 ---- .../dropit/order/service/OrderService.java | 85 ------------------- 2 files changed, 100 deletions(-) diff --git a/src/main/java/com/dropit/drop/service/DropService.java b/src/main/java/com/dropit/drop/service/DropService.java index 6b6298a..3be6454 100644 --- a/src/main/java/com/dropit/drop/service/DropService.java +++ b/src/main/java/com/dropit/drop/service/DropService.java @@ -3,7 +3,6 @@ import com.dropit.drop.dto.request.DropCreateRequest; import com.dropit.drop.dto.request.DropSearchCondition; import com.dropit.drop.dto.request.DropUpdateRequest; -import com.dropit.drop.dto.request.DropVisibilityUpdateRequest; import com.dropit.drop.dto.response.DropResponse; import com.dropit.drop.entity.Drop; import com.dropit.drop.exception.DropErrorCode; @@ -123,20 +122,6 @@ public DropResponse update(Long sellerId, Long dropId, DropUpdateRequest request return DropResponse.from(drop); } - @Transactional - public DropResponse changeVisibility(Long sellerId, Long dropId, DropVisibilityUpdateRequest request) { - Drop drop = dropRepository.findById(dropId) - .orElseThrow(() -> new ServiceException(DropErrorCode.DROP_NOT_FOUND)); - - if (!Objects.equals(drop.getProduct().getSeller().getId(), sellerId)) { - throw new ServiceException(DropErrorCode.DROP_OWNER_REQUIRED); - } - - drop.changeVisibility(request.visible()); - - return DropResponse.from(drop); - } - @Transactional public void delete(Long sellerId, Long dropId) { Drop drop = dropRepository.findById(dropId) diff --git a/src/main/java/com/dropit/order/service/OrderService.java b/src/main/java/com/dropit/order/service/OrderService.java index ea10dc2..ccea7d1 100644 --- a/src/main/java/com/dropit/order/service/OrderService.java +++ b/src/main/java/com/dropit/order/service/OrderService.java @@ -1,64 +1,25 @@ package com.dropit.order.service; -import com.dropit.drop.entity.Drop; -import com.dropit.drop.exception.DropErrorCode; -import com.dropit.drop.repository.DropRepository; -import com.dropit.global.exception.CommonErrorCode; import com.dropit.global.exception.ServiceException; -import com.dropit.order.dto.request.OrderCreateRequest; -import com.dropit.order.dto.request.OrderItemCreateRequest; import com.dropit.order.dto.response.OrderResponse; import com.dropit.order.dto.response.OrderSummaryResponse; import com.dropit.order.entity.Order; import com.dropit.order.entity.OrderItem; import com.dropit.order.exception.OrderErrorCode; -import com.dropit.order.repository.DropUserPurchaseRepository; import com.dropit.order.repository.OrderItemRepository; import com.dropit.order.repository.OrderRepository; -import com.dropit.user.entity.User; -import com.dropit.user.exception.UserErrorCode; -import com.dropit.user.repository.UserRepository; import lombok.RequiredArgsConstructor; import org.springframework.stereotype.Service; import org.springframework.transaction.annotation.Transactional; -import java.math.BigDecimal; -import java.time.LocalDateTime; import java.util.List; @Service @RequiredArgsConstructor public class OrderService { - private final UserRepository userRepository; - private final DropRepository dropRepository; private final OrderRepository orderRepository; private final OrderItemRepository orderItemRepository; - private final DropUserPurchaseRepository dropUserPurchaseRepository; - - @Transactional - public OrderResponse create(Long userId, OrderCreateRequest request) { - User user = userRepository.findById(userId) - .orElseThrow(() -> new ServiceException(UserErrorCode.USER_NOT_FOUND)); - - OrderItemCreateRequest itemRequest = request.items().getFirst(); - Drop drop = dropRepository.findByIdForUpdate(itemRequest.dropId()) - .orElseThrow(() -> new ServiceException(DropErrorCode.DROP_NOT_FOUND)); - LocalDateTime now = LocalDateTime.now(); - reservePurchaseLimit(userId, drop, itemRequest.quantity()); - drop.decreaseStock(itemRequest.quantity(), now); - BigDecimal totalPrice = OrderItem.calculateItemTotalPrice( - drop.getPrice(), - drop.getDiscountRate(), - itemRequest.quantity() - ); - - Order order = orderRepository.save(new Order(user, totalPrice)); - List orderItems = List.of(createOrderItem(order, drop, itemRequest.quantity())); - List savedOrderItems = orderItemRepository.saveAll(orderItems); - - return OrderResponse.from(order, savedOrderItems); - } @Transactional(readOnly = true) public List getMyOrders(Long userId) { @@ -76,50 +37,4 @@ public OrderResponse getMyOrder(Long userId, Long orderId) { return OrderResponse.from(order, orderItems); } - @Transactional - public void cancel(Long userId, Long orderId) { - Order order = orderRepository.findByIdAndUser_IdForUpdate(orderId, userId) - .orElseThrow(() -> new ServiceException(OrderErrorCode.ORDER_NOT_FOUND)); - List orderItems = orderItemRepository.findAllByOrder_IdOrderByIdAsc(orderId); - - order.cancel(); - for (OrderItem orderItem : orderItems) { - Drop drop = dropRepository.findByIdForUpdate(orderItem.getDrop().getId()) - .orElseThrow(() -> new ServiceException(DropErrorCode.DROP_NOT_FOUND)); - drop.restoreStock(orderItem.getQuantity()); - int decreasedCount = dropUserPurchaseRepository.decreaseConfirmedQuantity( - drop.getId(), - userId, - orderItem.getQuantity() - ); - if (decreasedCount != 1) { - // 구매 수량 카운터가 정상적으로 차감되지 않으면 취소 전체를 롤백한다. - throw new ServiceException(CommonErrorCode.INTERNAL_SERVER_ERROR); - } - } - } - - private void reservePurchaseLimit(Long userId, Drop drop, int quantity) { - dropUserPurchaseRepository.createCounterIfAbsent(drop.getId(), userId); - int increasedCount = dropUserPurchaseRepository.increaseWithinLimit( - drop.getId(), - userId, - quantity, - drop.getPurchaseLimit() - ); - if (increasedCount == 0) { - throw new ServiceException(OrderErrorCode.PURCHASE_LIMIT_EXCEEDED); - } - } - - private OrderItem createOrderItem(Order order, Drop drop, int quantity) { - return new OrderItem( - order, - drop, - drop.getProduct().getName(), - drop.getPrice(), - drop.getDiscountRate(), - quantity - ); - } } From 3dec8af3f0e595326676df33bbafe2e4fe3b2170 Mon Sep 17 00:00:00 2001 From: Sooyoung Yoon Date: Sun, 13 Sep 2026 23:33:59 +0900 Subject: [PATCH 77/98] =?UTF-8?q?fix(order):=20admission=20=ED=9B=84?= =?UTF-8?q?=EC=B2=98=EB=A6=AC=20=EC=9E=AC=EC=8B=9C=EB=8F=84=20=EC=95=88?= =?UTF-8?q?=EC=A0=84=EC=84=B1=20=EB=B3=B4=EA=B0=95?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../com/dropit/order/entity/OrderRequest.java | 17 ++++++++ .../messaging/OrderSqsListenerConfig.java | 6 +-- .../redis/RedisOrderAdmissionAdapter.java | 40 +++++++++++++++---- .../order/repository/OrderItemRepository.java | 9 +++++ .../repository/OrderRequestRepository.java | 5 ++- .../service/OrderCancellationService.java | 2 +- .../service/OrderRedisSyncRetryScheduler.java | 9 ++++- .../service/OrderRequestRedisSyncService.java | 5 +++ .../OrderRequestRedisSyncStateService.java | 6 +++ 9 files changed, 85 insertions(+), 14 deletions(-) diff --git a/src/main/java/com/dropit/order/entity/OrderRequest.java b/src/main/java/com/dropit/order/entity/OrderRequest.java index 5f29d0d..9c54d12 100644 --- a/src/main/java/com/dropit/order/entity/OrderRequest.java +++ b/src/main/java/com/dropit/order/entity/OrderRequest.java @@ -89,6 +89,12 @@ public class OrderRequest extends BaseEntity { @Column(name = "redis_expires_at", nullable = false) private Instant redisExpiresAt; + @Column(name = "redis_sync_attempt_count", nullable = false) + private int redisSyncAttemptCount; + + @Column(name = "redis_sync_next_attempt_at") + private Instant redisSyncNextAttemptAt; + public OrderRequest( UUID requestId, Long userId, @@ -173,9 +179,18 @@ public boolean completeRedisSync(long appliedVersion) { } redisSyncPending = false; + redisSyncNextAttemptAt = null; return true; } + public void deferRedisSync(Instant nextAttemptAt) { + if (!redisSyncPending) { + return; + } + redisSyncAttemptCount++; + redisSyncNextAttemptAt = nextAttemptAt; + } + public void requestCancellationSync() { requestRedisSync(RedisOrderRequestState.CANCELED); } @@ -184,5 +199,7 @@ private void requestRedisSync(RedisOrderRequestState desiredState) { redisSyncPending = true; desiredRedisState = desiredState; desiredVersion++; + redisSyncAttemptCount = 0; + redisSyncNextAttemptAt = Instant.now(); } } diff --git a/src/main/java/com/dropit/order/messaging/OrderSqsListenerConfig.java b/src/main/java/com/dropit/order/messaging/OrderSqsListenerConfig.java index 09e5540..fcf14ed 100644 --- a/src/main/java/com/dropit/order/messaging/OrderSqsListenerConfig.java +++ b/src/main/java/com/dropit/order/messaging/OrderSqsListenerConfig.java @@ -38,12 +38,12 @@ private void validate(SqsProperties properties) { if (properties.publisherTimeoutMillis() <= 0) { throw new IllegalArgumentException("app.order.sqs.publisher-timeout-millis must be positive"); } - if (!properties.consumerEnabled()) { - return; - } if (properties.orderQueueUrl() == null || properties.orderQueueUrl().isBlank()) { throw new IllegalArgumentException("app.order.sqs.order-queue-url must be configured"); } + if (!properties.consumerEnabled()) { + return; + } requireRange(properties.consumerConcurrency(), 1, Integer.MAX_VALUE, "app.order.sqs.consumer-concurrency"); requireRange(properties.consumerMaxNumberOfMessages(), 1, 10, diff --git a/src/main/java/com/dropit/order/redis/RedisOrderAdmissionAdapter.java b/src/main/java/com/dropit/order/redis/RedisOrderAdmissionAdapter.java index aa6bdb6..f9827fc 100644 --- a/src/main/java/com/dropit/order/redis/RedisOrderAdmissionAdapter.java +++ b/src/main/java/com/dropit/order/redis/RedisOrderAdmissionAdapter.java @@ -18,6 +18,7 @@ public class RedisOrderAdmissionAdapter { private static final DefaultRedisScript RESERVE_ORDER_SCRIPT = createScript(); private static final DefaultRedisScript CONFIRM_PUBLICATION_SCRIPT = confirmPublicationScript(); + private static final DefaultRedisScript INDEX_REQUEST_SCRIPT = indexRequestScript(); private final StringRedisTemplate redisTemplate; @@ -123,14 +124,19 @@ public void confirmPublication(ReservedOrderSnapshot snapshot) { public void indexRequest(ReservedOrderSnapshot snapshot) { String key = RedisOrderKeyFactory.requestIndexKey(snapshot.requestId()); - redisTemplate.opsForHash().putAll(key, Map.of( - "requestId", snapshot.requestId().toString(), - "userId", snapshot.userId().toString(), - "dropId", snapshot.dropId().toString(), - "idempotencyKey", RedisOrderKeyFactory.idempotencyKey( - snapshot.dropId(), snapshot.userId(), snapshot.idempotencyKeyHash()) - )); - redisTemplate.expireAt(key, Instant.ofEpochMilli(snapshot.expiresAtEpochMillis())); + Long result = redisTemplate.execute( + INDEX_REQUEST_SCRIPT, + List.of(key), + snapshot.requestId().toString(), + snapshot.userId().toString(), + snapshot.dropId().toString(), + RedisOrderKeyFactory.idempotencyKey( + snapshot.dropId(), snapshot.userId(), snapshot.idempotencyKeyHash()), + Long.toString(snapshot.expiresAtEpochMillis()) + ); + if (result == null || result != 1L) { + throw new IllegalStateException("Redis 주문 요청 index를 저장할 수 없습니다."); + } } private static String required(Map values, String field) { @@ -182,6 +188,24 @@ private static DefaultRedisScript confirmPublicationScript() { return script; } + private static DefaultRedisScript indexRequestScript() { + DefaultRedisScript script = new DefaultRedisScript<>(); + script.setScriptText(""" + redis.call('HSET', KEYS[1], + 'requestId', ARGV[1], + 'userId', ARGV[2], + 'dropId', ARGV[3], + 'idempotencyKey', ARGV[4]) + if redis.call('PEXPIREAT', KEYS[1], ARGV[5]) ~= 1 then + redis.call('DEL', KEYS[1]) + return 0 + end + return 1 + """); + script.setResultType(Long.class); + return script; + } + private static OrderAdmissionResult resultWithRequestId( String[] parts, OrderAdmissionResultType type diff --git a/src/main/java/com/dropit/order/repository/OrderItemRepository.java b/src/main/java/com/dropit/order/repository/OrderItemRepository.java index 044a57a..0e47405 100644 --- a/src/main/java/com/dropit/order/repository/OrderItemRepository.java +++ b/src/main/java/com/dropit/order/repository/OrderItemRepository.java @@ -2,6 +2,8 @@ import com.dropit.order.entity.OrderItem; import org.springframework.data.jpa.repository.JpaRepository; +import org.springframework.data.jpa.repository.Query; +import org.springframework.data.repository.query.Param; import java.util.List; @@ -10,4 +12,11 @@ public interface OrderItemRepository extends JpaRepository { boolean existsByDropId(Long dropId); List findAllByOrder_IdOrderByIdAsc(Long orderId); + + @Query(""" + select i from OrderItem i + where i.order.id = :orderId + order by i.drop.id asc, i.id asc + """) + List findAllForCancellationOrderByDropIdAsc(@Param("orderId") Long orderId); } diff --git a/src/main/java/com/dropit/order/repository/OrderRequestRepository.java b/src/main/java/com/dropit/order/repository/OrderRequestRepository.java index d19d618..7deed83 100644 --- a/src/main/java/com/dropit/order/repository/OrderRequestRepository.java +++ b/src/main/java/com/dropit/order/repository/OrderRequestRepository.java @@ -10,6 +10,7 @@ import java.util.Optional; import java.util.UUID; import java.util.List; +import java.time.Instant; public interface OrderRequestRepository extends JpaRepository { @@ -19,7 +20,9 @@ public interface OrderRequestRepository extends JpaRepository findByOrderIdForUpdate(@Param("orderId") Long orderId); - List findTop100ByRedisSyncPendingTrueOrderByUpdatedAtAsc(); + List findTop100ByRedisSyncPendingTrueAndRedisSyncNextAttemptAtLessThanEqualOrderByRedisSyncNextAttemptAtAsc( + Instant now + ); @Lock(LockModeType.PESSIMISTIC_WRITE) @Query("select r from OrderRequest r where r.id = :requestId") diff --git a/src/main/java/com/dropit/order/service/OrderCancellationService.java b/src/main/java/com/dropit/order/service/OrderCancellationService.java index 6e1b69f..a682c61 100644 --- a/src/main/java/com/dropit/order/service/OrderCancellationService.java +++ b/src/main/java/com/dropit/order/service/OrderCancellationService.java @@ -49,7 +49,7 @@ private OrderRequest cancelInTransaction(Long userId, Long orderId) { OrderRequest request = requestRepository.findByOrderIdForUpdate(orderId).orElse(null); Order order = orderRepository.findByIdAndUser_IdForUpdate(orderId, userId) .orElseThrow(() -> new ServiceException(OrderErrorCode.ORDER_NOT_FOUND)); - List items = itemRepository.findAllByOrder_IdOrderByIdAsc(orderId); + List items = itemRepository.findAllForCancellationOrderByDropIdAsc(orderId); order.cancel(); for (OrderItem item : items) { Long dropId = item.getDrop().getId(); diff --git a/src/main/java/com/dropit/order/service/OrderRedisSyncRetryScheduler.java b/src/main/java/com/dropit/order/service/OrderRedisSyncRetryScheduler.java index 9850fac..f1da33e 100644 --- a/src/main/java/com/dropit/order/service/OrderRedisSyncRetryScheduler.java +++ b/src/main/java/com/dropit/order/service/OrderRedisSyncRetryScheduler.java @@ -6,21 +6,28 @@ import lombok.extern.slf4j.Slf4j; import org.springframework.scheduling.annotation.Scheduled; import org.springframework.stereotype.Component; +import java.time.Duration; +import java.time.Instant; @Slf4j @Component @RequiredArgsConstructor public class OrderRedisSyncRetryScheduler { + private static final Duration RETRY_DELAY = Duration.ofSeconds(5); + private final OrderRequestRepository repository; private final OrderRequestRedisSyncService syncService; @Scheduled(fixedDelayString = "${app.order.redis-sync-retry-delay:5000}") public void retryPending() { - for (OrderRequest request : repository.findTop100ByRedisSyncPendingTrueOrderByUpdatedAtAsc()) { + for (OrderRequest request : repository + .findTop100ByRedisSyncPendingTrueAndRedisSyncNextAttemptAtLessThanEqualOrderByRedisSyncNextAttemptAtAsc( + Instant.now())) { try { syncService.sync(request.getId()); } catch (RuntimeException exception) { + syncService.defer(request.getId(), RETRY_DELAY); log.warn("주문 Redis 동기화 재시도에 실패했습니다. requestId={}", request.getId(), exception); } } diff --git a/src/main/java/com/dropit/order/service/OrderRequestRedisSyncService.java b/src/main/java/com/dropit/order/service/OrderRequestRedisSyncService.java index 8e9c957..6fe7eed 100644 --- a/src/main/java/com/dropit/order/service/OrderRequestRedisSyncService.java +++ b/src/main/java/com/dropit/order/service/OrderRequestRedisSyncService.java @@ -9,6 +9,7 @@ import java.util.Optional; import java.util.UUID; import java.time.Instant; +import java.time.Duration; @Service @RequiredArgsConstructor @@ -35,4 +36,8 @@ public void sync(UUID requestId) { } stateService.clearPending(command.requestId(), command.desiredVersion()); } + + public void defer(UUID requestId, Duration delay) { + stateService.defer(requestId, Instant.now().plus(delay)); + } } diff --git a/src/main/java/com/dropit/order/service/OrderRequestRedisSyncStateService.java b/src/main/java/com/dropit/order/service/OrderRequestRedisSyncStateService.java index 07be3d7..093c78a 100644 --- a/src/main/java/com/dropit/order/service/OrderRequestRedisSyncStateService.java +++ b/src/main/java/com/dropit/order/service/OrderRequestRedisSyncStateService.java @@ -12,6 +12,7 @@ import java.util.Optional; import java.util.UUID; +import java.time.Instant; @Service @RequiredArgsConstructor @@ -46,6 +47,11 @@ public void clearPending(UUID requestId, long desiredVersion) { request.completeRedisSync(desiredVersion); } + @Transactional(propagation = Propagation.REQUIRES_NEW) + public void defer(UUID requestId, Instant nextAttemptAt) { + findForUpdate(requestId).deferRedisSync(nextAttemptAt); + } + private OrderRequest findForUpdate(UUID requestId) { return orderRequestRepository.findByRequestIdForUpdate(requestId) .orElseThrow(() -> new ServiceException(OrderErrorCode.ORDER_REQUEST_NOT_FOUND)); From 762b957a0d9397fda003b62249fd64cbeb633f7c Mon Sep 17 00:00:00 2001 From: Sooyoung Yoon Date: Sun, 13 Sep 2026 23:46:56 +0900 Subject: [PATCH 78/98] =?UTF-8?q?fix(order):=20Redis=20=EC=9E=AC=EC=8B=9C?= =?UTF-8?q?=EB=8F=84=20=EC=9A=94=EC=B2=AD=EB=B3=84=20=EC=8B=A4=ED=8C=A8=20?= =?UTF-8?q?=EA=B2=A9=EB=A6=AC?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../dropit/order/service/OrderRedisSyncRetryScheduler.java | 6 +++++- 1 file changed, 5 insertions(+), 1 deletion(-) diff --git a/src/main/java/com/dropit/order/service/OrderRedisSyncRetryScheduler.java b/src/main/java/com/dropit/order/service/OrderRedisSyncRetryScheduler.java index f1da33e..ec3f70c 100644 --- a/src/main/java/com/dropit/order/service/OrderRedisSyncRetryScheduler.java +++ b/src/main/java/com/dropit/order/service/OrderRedisSyncRetryScheduler.java @@ -27,7 +27,11 @@ public void retryPending() { try { syncService.sync(request.getId()); } catch (RuntimeException exception) { - syncService.defer(request.getId(), RETRY_DELAY); + try { + syncService.defer(request.getId(), RETRY_DELAY); + } catch (RuntimeException deferException) { + exception.addSuppressed(deferException); + } log.warn("주문 Redis 동기화 재시도에 실패했습니다. requestId={}", request.getId(), exception); } } From 97af1d388f82022d722a08078f5d91a96b9ceb4a Mon Sep 17 00:00:00 2001 From: Sooyoung Yoon Date: Sun, 13 Sep 2026 23:51:44 +0900 Subject: [PATCH 79/98] =?UTF-8?q?test(order):=20=EB=B9=84=EB=8F=99?= =?UTF-8?q?=EA=B8=B0=20=EC=A3=BC=EB=AC=B8=20=EC=A0=91=EC=88=98=EC=99=80=20?= =?UTF-8?q?=EB=B3=B5=EA=B5=AC=20=ED=9D=90=EB=A6=84=20=EA=B2=80=EC=A6=9D?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../drop/controller/DropControllerTest.java | 8 +- .../controller/DropDocumentationTest.java | 8 +- .../dropit/drop/service/DropServiceTest.java | 30 -- .../service/DropVisibilityServiceTest.java | 90 +++++ .../order/controller/OrderControllerTest.java | 118 +++---- .../controller/OrderDocumentationTest.java | 36 +- .../messaging/OrderSqsConsumerConfigTest.java | 66 ---- .../messaging/OrderSqsListenerConfigTest.java | 58 ++++ .../SqsOrderMessageListenerTest.java | 38 +++ .../redis/RedisOrderAdmissionAdapterTest.java | 59 ++++ .../redis/RedisOrderFlowIntegrationTest.java | 92 +++++ .../service/OrderAdmissionServiceTest.java | 92 +++++ .../service/OrderCancellationServiceTest.java | 88 +++++ .../OrderRedisSyncRetrySchedulerTest.java | 42 +++ .../service/OrderRequestQueryServiceTest.java | 56 +++ .../service/OrderServiceConcurrencyTest.java | 323 ------------------ .../order/service/OrderServiceTest.java | 177 ++-------- .../validation/OrderMessageValidatorTest.java | 3 +- 18 files changed, 725 insertions(+), 659 deletions(-) create mode 100644 src/test/java/com/dropit/drop/service/DropVisibilityServiceTest.java delete mode 100644 src/test/java/com/dropit/order/messaging/OrderSqsConsumerConfigTest.java create mode 100644 src/test/java/com/dropit/order/messaging/OrderSqsListenerConfigTest.java create mode 100644 src/test/java/com/dropit/order/messaging/SqsOrderMessageListenerTest.java create mode 100644 src/test/java/com/dropit/order/redis/RedisOrderAdmissionAdapterTest.java create mode 100644 src/test/java/com/dropit/order/redis/RedisOrderFlowIntegrationTest.java create mode 100644 src/test/java/com/dropit/order/service/OrderAdmissionServiceTest.java create mode 100644 src/test/java/com/dropit/order/service/OrderCancellationServiceTest.java create mode 100644 src/test/java/com/dropit/order/service/OrderRedisSyncRetrySchedulerTest.java create mode 100644 src/test/java/com/dropit/order/service/OrderRequestQueryServiceTest.java delete mode 100644 src/test/java/com/dropit/order/service/OrderServiceConcurrencyTest.java diff --git a/src/test/java/com/dropit/drop/controller/DropControllerTest.java b/src/test/java/com/dropit/drop/controller/DropControllerTest.java index dd2ee4f..2ee61a0 100644 --- a/src/test/java/com/dropit/drop/controller/DropControllerTest.java +++ b/src/test/java/com/dropit/drop/controller/DropControllerTest.java @@ -4,6 +4,7 @@ import com.dropit.drop.dto.request.DropSearchCondition; import com.dropit.drop.entity.DropStatus; import com.dropit.drop.service.DropService; +import com.dropit.drop.service.DropVisibilityService; import com.dropit.global.exception.GlobalExceptionHandler; import com.dropit.global.security.authentication.JwtAuthenticationToken; import com.dropit.global.security.principal.AuthUser; @@ -42,6 +43,9 @@ class DropControllerTest { @Mock private DropService dropService; + @Mock + private DropVisibilityService dropVisibilityService; + private MockMvc mockMvc; @BeforeEach @@ -50,7 +54,7 @@ void setUp() { validator.afterPropertiesSet(); mockMvc = MockMvcBuilders - .standaloneSetup(new DropController(dropService)) + .standaloneSetup(new DropController(dropService, dropVisibilityService)) .setControllerAdvice(new GlobalExceptionHandler()) .setCustomArgumentResolvers( new PageableHandlerMethodArgumentResolver(), @@ -201,7 +205,7 @@ void updateDrop() throws Exception { @Test @DisplayName("드랍 공개 여부 변경 요청 시 200 상태를 반환한다") void changeVisibility() throws Exception { - when(dropService.changeVisibility(eq(1L), eq(100L), any())).thenReturn(response()); + when(dropVisibilityService.changeVisibility(eq(1L), eq(100L), any())).thenReturn(response()); mockMvc.perform(patch("/drops/100/visibility") .contentType(MediaType.APPLICATION_JSON) diff --git a/src/test/java/com/dropit/drop/controller/DropDocumentationTest.java b/src/test/java/com/dropit/drop/controller/DropDocumentationTest.java index 60676a9..fe9e372 100644 --- a/src/test/java/com/dropit/drop/controller/DropDocumentationTest.java +++ b/src/test/java/com/dropit/drop/controller/DropDocumentationTest.java @@ -5,6 +5,7 @@ import com.dropit.drop.dto.response.DropResponse; import com.dropit.drop.entity.Drop; import com.dropit.drop.service.DropService; +import com.dropit.drop.service.DropVisibilityService; import com.dropit.product.entity.Product; import com.dropit.user.entity.User; import com.dropit.user.entity.UserRole; @@ -45,11 +46,14 @@ class DropDocumentationTest extends DocumentationTestSupport { private DropService dropService; + private DropVisibilityService dropVisibilityService; @BeforeEach void setUp(RestDocumentationContextProvider restDocumentation) { dropService = mock(DropService.class); - configure(restDocumentation, new DropController(dropService), new PageableHandlerMethodArgumentResolver()); + dropVisibilityService = mock(DropVisibilityService.class); + configure(restDocumentation, new DropController(dropService, dropVisibilityService), + new PageableHandlerMethodArgumentResolver()); } @Test @@ -147,7 +151,7 @@ void update() throws Exception { @Test void changeVisibility() throws Exception { - when(dropService.changeVisibility(eq(1L), eq(100L), any())).thenReturn(dropResponse()); + when(dropVisibilityService.changeVisibility(eq(1L), eq(100L), any())).thenReturn(dropResponse()); mockMvc.perform(authenticated(patch("/drops/{dropId}/visibility", 100L).contentType(MediaType.APPLICATION_JSON) .content("{\"visible\":true}"))) .andExpect(status().isOk()) diff --git a/src/test/java/com/dropit/drop/service/DropServiceTest.java b/src/test/java/com/dropit/drop/service/DropServiceTest.java index ad4c4c2..828e9cd 100644 --- a/src/test/java/com/dropit/drop/service/DropServiceTest.java +++ b/src/test/java/com/dropit/drop/service/DropServiceTest.java @@ -290,36 +290,6 @@ void rejectUpdatingAnotherSellersDrop() { assertEquals(DropErrorCode.DROP_OWNER_REQUIRED, exception.getErrorCode()); } - @Test - @DisplayName("드랍 소유자는 공개 여부를 변경할 수 있다") - void changeVisibilityOwnedBySeller() { - Drop drop = saveDrop(1L, 10L, 100L, LocalDateTime.now().plusDays(1)); - when(dropRepository.findById(100L)).thenReturn(Optional.of(drop)); - - DropResponse response = dropService.changeVisibility( - 1L, - 100L, - new DropVisibilityUpdateRequest(false) - ); - - assertEquals(false, response.visible()); - } - - @Test - @DisplayName("다른 판매자는 드랍 공개 여부를 변경할 수 없다") - void rejectChangingVisibilityOfAnotherSellersDrop() { - Drop drop = saveDrop(1L, 10L, 100L, LocalDateTime.now().plusDays(1)); - when(dropRepository.findById(100L)).thenReturn(Optional.of(drop)); - - ServiceException exception = assertThrows( - ServiceException.class, - () -> dropService.changeVisibility(2L, 100L, new DropVisibilityUpdateRequest(false)) - ); - - assertEquals(DropErrorCode.DROP_OWNER_REQUIRED, exception.getErrorCode()); - assertEquals(true, drop.isVisible()); - } - @Test @DisplayName("판매가 시작된 드랍은 삭제할 수 없다") void rejectDeletingStartedDrop() { diff --git a/src/test/java/com/dropit/drop/service/DropVisibilityServiceTest.java b/src/test/java/com/dropit/drop/service/DropVisibilityServiceTest.java new file mode 100644 index 0000000..6892d57 --- /dev/null +++ b/src/test/java/com/dropit/drop/service/DropVisibilityServiceTest.java @@ -0,0 +1,90 @@ +package com.dropit.drop.service; + +import com.dropit.drop.cache.DropSaleCacheWriter; +import com.dropit.drop.cache.DropSaleSnapshot; +import com.dropit.drop.dto.request.DropVisibilityUpdateRequest; +import com.dropit.drop.entity.Drop; +import com.dropit.drop.repository.DropRepository; +import com.dropit.order.repository.DropUserPurchaseRepository; +import com.dropit.order.repository.OrderItemRepository; +import com.dropit.product.entity.Product; +import com.dropit.user.entity.User; +import com.dropit.user.entity.UserRole; +import org.junit.jupiter.api.DisplayName; +import org.junit.jupiter.api.Test; +import org.springframework.test.util.ReflectionTestUtils; +import org.springframework.transaction.TransactionStatus; +import org.springframework.transaction.support.TransactionCallback; +import org.springframework.transaction.support.TransactionTemplate; + +import java.math.BigDecimal; +import java.time.LocalDateTime; +import java.util.Optional; + +import static org.junit.jupiter.api.Assertions.*; +import static org.mockito.ArgumentMatchers.any; +import static org.mockito.Mockito.*; + +class DropVisibilityServiceTest { + + @Test + @DisplayName("최초 공개는 판매 조건을 동결하고 DB 트랜잭션 뒤 Redis에 준비한다") + @SuppressWarnings("unchecked") + void prepareSaleOnFirstPublication() { + DropRepository dropRepository = mock(DropRepository.class); + OrderItemRepository itemRepository = mock(OrderItemRepository.class); + DropUserPurchaseRepository purchaseRepository = mock(DropUserPurchaseRepository.class); + DropSaleCacheWriter cacheWriter = mock(DropSaleCacheWriter.class); + TransactionTemplate transactionTemplate = mock(TransactionTemplate.class); + when(transactionTemplate.execute(any())).thenAnswer(invocation -> + ((TransactionCallback) invocation.getArgument(0)) + .doInTransaction(mock(TransactionStatus.class))); + Drop drop = drop(); + when(dropRepository.findByIdForUpdate(100L)).thenReturn(Optional.of(drop)); + + var response = new DropVisibilityService( + dropRepository, itemRepository, purchaseRepository, cacheWriter, transactionTemplate) + .changeVisibility(1L, 100L, new DropVisibilityUpdateRequest(true)); + + assertAll( + () -> assertTrue(response.visible()), + () -> assertTrue(drop.isSalePrepared()), + () -> assertEquals(1L, drop.getSaleVersion()) + ); + verify(cacheWriter).apply(any(DropSaleSnapshot.class)); + } + + @Test + @DisplayName("재공개는 준비된 판매 재고를 초기화하는 새 saleVersion을 만들지 않는다") + @SuppressWarnings("unchecked") + void doNotCreateNewSaleVersionOnReplay() { + DropRepository dropRepository = mock(DropRepository.class); + OrderItemRepository itemRepository = mock(OrderItemRepository.class); + DropUserPurchaseRepository purchaseRepository = mock(DropUserPurchaseRepository.class); + DropSaleCacheWriter cacheWriter = mock(DropSaleCacheWriter.class); + TransactionTemplate transactionTemplate = mock(TransactionTemplate.class); + when(transactionTemplate.execute(any())).thenAnswer(invocation -> + ((TransactionCallback) invocation.getArgument(0)) + .doInTransaction(mock(TransactionStatus.class))); + Drop drop = drop(); + drop.prepareSale(); + drop.changeVisibility(false); + when(dropRepository.findByIdForUpdate(100L)).thenReturn(Optional.of(drop)); + + new DropVisibilityService(dropRepository, itemRepository, purchaseRepository, cacheWriter, transactionTemplate) + .changeVisibility(1L, 100L, new DropVisibilityUpdateRequest(true)); + + assertEquals(1L, drop.getSaleVersion()); + verifyNoInteractions(itemRepository, purchaseRepository); + } + + private Drop drop() { + User seller = new User("seller@example.com", "password", "seller", UserRole.SELLER); + ReflectionTestUtils.setField(seller, "id", 1L); + Product product = new Product(seller, "product", "description", null); + Drop drop = new Drop(product, new BigDecimal("1000"), 10, 0, 3, + LocalDateTime.now().plusHours(1), LocalDateTime.now().plusHours(2)); + ReflectionTestUtils.setField(drop, "id", 100L); + return drop; + } +} diff --git a/src/test/java/com/dropit/order/controller/OrderControllerTest.java b/src/test/java/com/dropit/order/controller/OrderControllerTest.java index 7b3bb34..e546a2b 100644 --- a/src/test/java/com/dropit/order/controller/OrderControllerTest.java +++ b/src/test/java/com/dropit/order/controller/OrderControllerTest.java @@ -3,16 +3,17 @@ import com.dropit.global.exception.GlobalExceptionHandler; import com.dropit.global.security.authentication.JwtAuthenticationToken; import com.dropit.global.security.principal.AuthUser; -import com.dropit.order.dto.request.OrderCreateRequest; -import com.dropit.order.dto.response.OrderResponse; -import com.dropit.order.dto.response.OrderSummaryResponse; -import com.dropit.order.entity.OrderStatus; +import com.dropit.order.dto.response.OrderRequestStatusResponse; +import com.dropit.order.entity.OrderRequestStatus; +import com.dropit.order.redis.ReservedOrderSnapshot; +import com.dropit.order.service.OrderAdmissionService; +import com.dropit.order.service.OrderCancellationService; +import com.dropit.order.service.OrderRequestQueryService; import com.dropit.order.service.OrderService; import org.junit.jupiter.api.AfterEach; import org.junit.jupiter.api.BeforeEach; import org.junit.jupiter.api.DisplayName; import org.junit.jupiter.api.Test; -import org.mockito.ArgumentCaptor; import org.springframework.http.MediaType; import org.springframework.security.core.context.SecurityContextHolder; import org.springframework.security.web.method.annotation.AuthenticationPrincipalArgumentResolver; @@ -20,9 +21,10 @@ import org.springframework.test.web.servlet.setup.MockMvcBuilders; import java.math.BigDecimal; +import java.time.Instant; import java.util.List; +import java.util.UUID; -import static org.junit.jupiter.api.Assertions.assertEquals; import static org.mockito.ArgumentMatchers.any; import static org.mockito.ArgumentMatchers.eq; import static org.mockito.Mockito.*; @@ -34,12 +36,18 @@ class OrderControllerTest { private MockMvc mockMvc; private OrderService orderService; + private OrderAdmissionService admissionService; + private OrderRequestQueryService queryService; + private OrderCancellationService cancellationService; @BeforeEach void setUp() { orderService = mock(OrderService.class); - mockMvc = MockMvcBuilders - .standaloneSetup(new OrderController(orderService)) + admissionService = mock(OrderAdmissionService.class); + queryService = mock(OrderRequestQueryService.class); + cancellationService = mock(OrderCancellationService.class); + mockMvc = MockMvcBuilders.standaloneSetup( + new OrderController(orderService, admissionService, queryService, cancellationService)) .setControllerAdvice(new GlobalExceptionHandler()) .setCustomArgumentResolvers(new AuthenticationPrincipalArgumentResolver()) .build(); @@ -54,90 +62,58 @@ void tearDown() { } @Test - @DisplayName("배열 형태의 주문 항목으로 주문을 생성한다") - void createOrder() throws Exception { - OrderResponse response = new OrderResponse( - 1000L, - OrderStatus.ORDERED, - new BigDecimal("94400"), - null, - List.of() - ); - when(orderService.create(eq(1L), any(OrderCreateRequest.class))).thenReturn(response); + @DisplayName("Redis 예약과 SQS 발행이 확인되면 같은 requestId로 202를 반환한다") + void admitOrder() throws Exception { + UUID requestId = UUID.randomUUID(); + when(admissionService.admit(eq(1L), eq("key-1"), any())).thenReturn(snapshot(requestId)); mockMvc.perform(post("/orders") + .header("Idempotency-Key", "key-1") .contentType(MediaType.APPLICATION_JSON) - .content(""" - { - "items": [ - {"dropId": 100, "quantity": 2} - ] - } - """)) - .andExpect(status().isCreated()) - .andExpect(header().string("Location", "/orders/1000")) - .andExpect(jsonPath("$.id").value(1000L)) - .andExpect(jsonPath("$.status").value("ORDERED")) - .andExpect(jsonPath("$.totalPrice").value(94400)); - - ArgumentCaptor captor = ArgumentCaptor.forClass(OrderCreateRequest.class); - verify(orderService).create(eq(1L), captor.capture()); - assertEquals(1, captor.getValue().items().size()); - assertEquals(100L, captor.getValue().items().getFirst().dropId()); - assertEquals(2, captor.getValue().items().getFirst().quantity()); + .content("{\"items\":[{\"dropId\":100,\"quantity\":2}]}")) + .andExpect(status().isAccepted()) + .andExpect(header().string("Location", "/order-requests/" + requestId)) + .andExpect(jsonPath("$.requestId").value(requestId.toString())); } @Test - @DisplayName("현재 MVP에서는 주문 항목을 두 개 이상 요청할 수 없다") - void rejectMultipleOrderItems() throws Exception { + @DisplayName("여러 Drop 주문은 admission을 호출하기 전에 거절한다") + void rejectMultipleItems() throws Exception { mockMvc.perform(post("/orders") + .header("Idempotency-Key", "key-1") .contentType(MediaType.APPLICATION_JSON) - .content(""" - { - "items": [ - {"dropId": 100, "quantity": 1}, - {"dropId": 101, "quantity": 1} - ] - } - """)) + .content("{\"items\":[{\"dropId\":100,\"quantity\":1},{\"dropId\":101,\"quantity\":1}]}")) .andExpect(status().isBadRequest()) .andExpect(jsonPath("$.code").value("INVALID_INPUT")); - - verifyNoInteractions(orderService); + verifyNoInteractions(admissionService); } @Test - @DisplayName("내 주문 목록을 조회한다") - void getMyOrders() throws Exception { - when(orderService.getMyOrders(1L)).thenReturn(List.of( - new OrderSummaryResponse(1000L, OrderStatus.ORDERED, new BigDecimal("94400"), null) - )); + @DisplayName("본인의 주문 요청 상태를 조회한다") + void getOrderRequest() throws Exception { + UUID requestId = UUID.randomUUID(); + when(queryService.get(1L, requestId)).thenReturn( + new OrderRequestStatusResponse(requestId, OrderRequestStatus.PENDING, null, null, null)); - mockMvc.perform(get("/orders/me")) + mockMvc.perform(get("/order-requests/{requestId}", requestId)) .andExpect(status().isOk()) - .andExpect(jsonPath("$[0].id").value(1000L)) - .andExpect(jsonPath("$[0].status").value("ORDERED")); + .andExpect(jsonPath("$.status").value("PENDING")); } @Test - @DisplayName("내 주문 상세를 조회한다") - void getMyOrder() throws Exception { - when(orderService.getMyOrder(1L, 1000L)).thenReturn( - new OrderResponse(1000L, OrderStatus.ORDERED, new BigDecimal("94400"), null, List.of()) - ); - - mockMvc.perform(get("/orders/{orderId}", 1000L)) - .andExpect(status().isOk()) - .andExpect(jsonPath("$.id").value(1000L)) - .andExpect(jsonPath("$.totalPrice").value(94400)); - } - - @Test - @DisplayName("내 주문을 취소한다") + @DisplayName("주문 취소는 취소 조정 서비스에 위임한다") void cancelOrder() throws Exception { mockMvc.perform(post("/orders/{orderId}/cancel", 1000L)) .andExpect(status().isNoContent()); + verify(cancellationService).cancel(1L, 1000L); + } - verify(orderService).cancel(1L, 1000L); + private ReservedOrderSnapshot snapshot(UUID requestId) { + return new ReservedOrderSnapshot( + requestId, 1L, 100L, "hash", "100:2", 2, Instant.now(), + "Limited Hoodie", new BigDecimal("59000"), 20, + "CONFIRMED", OrderRequestStatus.PENDING, null, null, + Instant.now().plusSeconds(86_400).toEpochMilli() + ); } } diff --git a/src/test/java/com/dropit/order/controller/OrderDocumentationTest.java b/src/test/java/com/dropit/order/controller/OrderDocumentationTest.java index be9e666..83451ff 100644 --- a/src/test/java/com/dropit/order/controller/OrderDocumentationTest.java +++ b/src/test/java/com/dropit/order/controller/OrderDocumentationTest.java @@ -7,6 +7,13 @@ import com.dropit.order.dto.response.OrderSummaryResponse; import com.dropit.order.entity.OrderStatus; import com.dropit.order.service.OrderService; +import com.dropit.order.service.OrderAdmissionService; +import com.dropit.order.service.OrderRequestQueryService; +import com.dropit.order.service.OrderCancellationService; +import com.dropit.order.redis.ReservedOrderSnapshot; +import com.dropit.order.entity.OrderRequestStatus; +import java.time.Instant; +import java.util.UUID; import org.junit.jupiter.api.BeforeEach; import org.junit.jupiter.api.Test; import org.junit.jupiter.api.extension.ExtendWith; @@ -37,28 +44,45 @@ class OrderDocumentationTest extends DocumentationTestSupport { private OrderService orderService; + private OrderAdmissionService admissionService; + private OrderRequestQueryService queryService; + private OrderCancellationService cancellationService; @BeforeEach void setUp(RestDocumentationContextProvider restDocumentation) { orderService = mock(OrderService.class); - configure(restDocumentation, new OrderController(orderService)); + admissionService = mock(OrderAdmissionService.class); + queryService = mock(OrderRequestQueryService.class); + cancellationService = mock(OrderCancellationService.class); + configure(restDocumentation, + new OrderController(orderService, admissionService, queryService, cancellationService)); } @Test void create() throws Exception { - OrderResponse response = orderResponse(); - when(orderService.create(eq(1L), any())).thenReturn(response); + UUID requestId = UUID.randomUUID(); + when(admissionService.admit(eq(1L), eq("order-key"), any())).thenReturn(new ReservedOrderSnapshot( + requestId, 1L, 100L, "hash", "100:2", 2, Instant.now(), + "Limited Hoodie", new BigDecimal("59000"), 20, + "CONFIRMED", OrderRequestStatus.PENDING, null, null, + Instant.now().plusSeconds(86400).toEpochMilli())); mockMvc.perform(authenticated(post("/orders").contentType(MediaType.APPLICATION_JSON) + .header("Idempotency-Key", "order-key") .content("{\"items\":[{\"dropId\":100,\"quantity\":2}]}"))) - .andExpect(status().isCreated()) + .andExpect(status().isAccepted()) .andDo(document("orders-create", resource(builder() - .tag("Orders").summary("주문 생성").description("한 개의 드랍을 대상으로 주문을 생성합니다.").requestHeaders(authorizationHeader()) + .tag("Orders").summary("주문 접수").description("Redis 예약 후 SQS가 수락한 주문 요청을 비동기로 접수합니다.") + .requestHeaders(authorizationHeader(), + org.springframework.restdocs.headers.HeaderDocumentation.headerWithName("Idempotency-Key") + .description("주문 재전송을 식별하는 멱등키")) .requestSchema(new Schema("OrderCreateRequest")) .requestFields( fieldWithPath("items").type(ARRAY).description("주문 항목 목록 (현재 한 항목만 허용)"), fieldWithPath("items[].dropId").type(NUMBER).description("주문할 드랍 ID"), fieldWithPath("items[].quantity").type(NUMBER).description("주문 수량") - ).responseSchema(new Schema("OrderResponse")).responseFields(orderFields()).build()))); + ).responseSchema(new Schema("OrderAdmissionResponse")).responseFields( + fieldWithPath("requestId").type(STRING).description("주문 요청 ID") + ).build()))); } @Test diff --git a/src/test/java/com/dropit/order/messaging/OrderSqsConsumerConfigTest.java b/src/test/java/com/dropit/order/messaging/OrderSqsConsumerConfigTest.java deleted file mode 100644 index 31e7a33..0000000 --- a/src/test/java/com/dropit/order/messaging/OrderSqsConsumerConfigTest.java +++ /dev/null @@ -1,66 +0,0 @@ -package com.dropit.order.messaging; - -import org.junit.jupiter.api.DisplayName; -import org.junit.jupiter.api.Test; -import org.junit.jupiter.params.ParameterizedTest; -import org.junit.jupiter.params.provider.MethodSource; - -import java.util.concurrent.ThreadPoolExecutor; -import java.util.stream.Stream; - -import static org.junit.jupiter.api.Assertions.assertDoesNotThrow; -import static org.junit.jupiter.api.Assertions.assertThrows; - -class OrderSqsConsumerConfigTest { - - private final OrderSqsConsumerConfig config = new OrderSqsConsumerConfig(); - - @ParameterizedTest - @MethodSource("invalidActiveProperties") - @DisplayName("활성화된 Consumer의 SQS 수신 설정이 유효하지 않으면 시작에 실패한다") - void rejectInvalidActiveConsumerProperties(SqsProperties properties) { - assertThrows(IllegalArgumentException.class, () -> config.sqsOrderConsumerExecutor(properties)); - } - - @Test - @DisplayName("비활성화된 Consumer는 SQS 수신 설정을 사용하지 않는다") - void ignoreReceivePropertiesWhenConsumerIsDisabled() { - SqsProperties properties = properties(false, "", 0, -1, 43_201); - - ThreadPoolExecutor executor = assertDoesNotThrow( - () -> config.sqsOrderConsumerExecutor(properties) - ); - executor.shutdown(); - } - - private static Stream invalidActiveProperties() { - return Stream.of( - properties(true, "", 1, 0, 0), - properties(true, "queue-url", 0, 0, 0), - properties(true, "queue-url", 11, 0, 0), - properties(true, "queue-url", 1, -1, 0), - properties(true, "queue-url", 1, 21, 0), - properties(true, "queue-url", 1, 0, -1), - properties(true, "queue-url", 1, 0, 43_201) - ); - } - - private static SqsProperties properties( - boolean enabled, - String queueUrl, - int maxNumberOfMessages, - int waitTimeSeconds, - int visibilityTimeoutSeconds - ) { - return new SqsProperties( - queueUrl, - enabled, - 1, - maxNumberOfMessages, - waitTimeSeconds, - visibilityTimeoutSeconds, - 1_000, - 1_000 - ); - } -} diff --git a/src/test/java/com/dropit/order/messaging/OrderSqsListenerConfigTest.java b/src/test/java/com/dropit/order/messaging/OrderSqsListenerConfigTest.java new file mode 100644 index 0000000..d3462b0 --- /dev/null +++ b/src/test/java/com/dropit/order/messaging/OrderSqsListenerConfigTest.java @@ -0,0 +1,58 @@ +package com.dropit.order.messaging; + +import org.junit.jupiter.api.DisplayName; +import org.junit.jupiter.api.Test; +import org.junit.jupiter.params.ParameterizedTest; +import org.junit.jupiter.params.provider.MethodSource; +import software.amazon.awssdk.services.sqs.SqsAsyncClient; + +import java.util.stream.Stream; + +import static org.junit.jupiter.api.Assertions.assertDoesNotThrow; +import static org.junit.jupiter.api.Assertions.assertThrows; +import static org.mockito.Mockito.mock; + +class OrderSqsListenerConfigTest { + + private final OrderSqsListenerConfig config = new OrderSqsListenerConfig(); + private final SqsAsyncClient client = mock(SqsAsyncClient.class); + + @Test + @DisplayName("Consumer가 꺼져 있어도 Producer가 사용할 queue URL은 필수다") + void requireQueueUrlWhenConsumerIsDisabled() { + assertThrows(IllegalArgumentException.class, + () -> config.orderSqsListenerContainerFactory(client, properties(false, "", 0, -1, 43_201))); + } + + @Test + @DisplayName("Consumer가 꺼져 있으면 수신 전용 설정 범위는 검사하지 않는다") + void ignoreReceivePropertiesWhenConsumerIsDisabled() { + assertDoesNotThrow(() -> config.orderSqsListenerContainerFactory( + client, properties(false, "queue-url", 0, -1, 43_201))); + } + + @ParameterizedTest + @MethodSource("invalidActiveProperties") + @DisplayName("활성 Consumer의 SQS 수신 설정이 유효하지 않으면 시작에 실패한다") + void rejectInvalidActiveConsumerProperties(SqsProperties properties) { + assertThrows(IllegalArgumentException.class, + () -> config.orderSqsListenerContainerFactory(client, properties)); + } + + private static Stream invalidActiveProperties() { + return Stream.of( + properties(true, "queue-url", 0, 0, 0), + properties(true, "queue-url", 11, 0, 0), + properties(true, "queue-url", 1, -1, 0), + properties(true, "queue-url", 1, 21, 0), + properties(true, "queue-url", 1, 0, -1), + properties(true, "queue-url", 1, 0, 43_201) + ); + } + + private static SqsProperties properties( + boolean enabled, String queueUrl, int maxMessages, int waitSeconds, int visibilitySeconds + ) { + return new SqsProperties(queueUrl, enabled, 1, maxMessages, waitSeconds, visibilitySeconds, 3_000); + } +} diff --git a/src/test/java/com/dropit/order/messaging/SqsOrderMessageListenerTest.java b/src/test/java/com/dropit/order/messaging/SqsOrderMessageListenerTest.java new file mode 100644 index 0000000..e4784c4 --- /dev/null +++ b/src/test/java/com/dropit/order/messaging/SqsOrderMessageListenerTest.java @@ -0,0 +1,38 @@ +package com.dropit.order.messaging; + +import io.awspring.cloud.sqs.listener.acknowledgement.Acknowledgement; +import org.junit.jupiter.api.DisplayName; +import org.junit.jupiter.api.Test; + +import static org.junit.jupiter.api.Assertions.assertThrows; +import static org.mockito.Mockito.*; + +class SqsOrderMessageListenerTest { + + private final OrderMessageProcessor processor = mock(OrderMessageProcessor.class); + private final Acknowledgement acknowledgement = mock(Acknowledgement.class); + private final SqsOrderMessageListener listener = new SqsOrderMessageListener(processor); + + @Test + @DisplayName("DB와 Redis 처리가 완료된 뒤에만 ACK한다") + void acknowledgeAfterProcessing() { + OrderMessage message = mock(OrderMessage.class); + + listener.listen(message, acknowledgement); + + var order = inOrder(processor, acknowledgement); + order.verify(processor).process(message); + order.verify(acknowledgement).acknowledge(); + } + + @Test + @DisplayName("처리 실패는 ACK하지 않고 listener 밖으로 전달한다") + void doNotAcknowledgeProcessingFailure() { + OrderMessage message = mock(OrderMessage.class); + doThrow(new IllegalStateException("redis unavailable")).when(processor).process(message); + + assertThrows(IllegalStateException.class, () -> listener.listen(message, acknowledgement)); + + verifyNoInteractions(acknowledgement); + } +} diff --git a/src/test/java/com/dropit/order/redis/RedisOrderAdmissionAdapterTest.java b/src/test/java/com/dropit/order/redis/RedisOrderAdmissionAdapterTest.java new file mode 100644 index 0000000..3ab0378 --- /dev/null +++ b/src/test/java/com/dropit/order/redis/RedisOrderAdmissionAdapterTest.java @@ -0,0 +1,59 @@ +package com.dropit.order.redis; + +import org.junit.jupiter.api.DisplayName; +import org.junit.jupiter.api.Test; +import org.mockito.ArgumentCaptor; +import org.springframework.data.redis.core.StringRedisTemplate; +import org.springframework.data.redis.core.script.RedisScript; + +import java.math.BigDecimal; +import java.time.Instant; +import java.util.List; +import java.util.UUID; + +import static org.junit.jupiter.api.Assertions.*; +import static org.mockito.ArgumentMatchers.*; +import static org.mockito.Mockito.*; + +class RedisOrderAdmissionAdapterTest { + + @Test + @DisplayName("request index와 절대 만료를 하나의 Lua 실행으로 저장한다") + @SuppressWarnings({"rawtypes", "unchecked"}) + void indexRequestAtomicallyWithExpiration() { + StringRedisTemplate redisTemplate = mock(StringRedisTemplate.class); + when(redisTemplate.execute(any(RedisScript.class), anyList(), any(Object[].class))).thenReturn(1L); + RedisOrderAdmissionAdapter adapter = new RedisOrderAdmissionAdapter(redisTemplate); + + adapter.indexRequest(snapshot()); + + ArgumentCaptor scriptCaptor = ArgumentCaptor.forClass(RedisScript.class); + verify(redisTemplate).execute(scriptCaptor.capture(), anyList(), any(Object[].class)); + String script = scriptCaptor.getValue().getScriptAsString(); + assertAll( + () -> assertTrue(script.contains("HSET")), + () -> assertTrue(script.contains("PEXPIREAT")), + () -> assertTrue(script.contains("DEL")) + ); + } + + @Test + @DisplayName("index TTL 설정이 확인되지 않으면 저장 실패로 처리한다") + @SuppressWarnings({"rawtypes", "unchecked"}) + void rejectUnconfirmedIndexExpiration() { + StringRedisTemplate redisTemplate = mock(StringRedisTemplate.class); + when(redisTemplate.execute(any(RedisScript.class), anyList(), any(Object[].class))).thenReturn(0L); + RedisOrderAdmissionAdapter adapter = new RedisOrderAdmissionAdapter(redisTemplate); + + assertThrows(IllegalStateException.class, () -> adapter.indexRequest(snapshot())); + } + + private ReservedOrderSnapshot snapshot() { + return new ReservedOrderSnapshot( + UUID.randomUUID(), 1L, 10L, "hash", "10:1", 1, Instant.now(), + "product", new BigDecimal("1000"), 0, "UNCONFIRMED", + com.dropit.order.entity.OrderRequestStatus.PENDING, null, null, + Instant.now().plusSeconds(3600).toEpochMilli() + ); + } +} diff --git a/src/test/java/com/dropit/order/redis/RedisOrderFlowIntegrationTest.java b/src/test/java/com/dropit/order/redis/RedisOrderFlowIntegrationTest.java new file mode 100644 index 0000000..6dc52c8 --- /dev/null +++ b/src/test/java/com/dropit/order/redis/RedisOrderFlowIntegrationTest.java @@ -0,0 +1,92 @@ +package com.dropit.order.redis; + +import org.junit.jupiter.api.AfterAll; +import org.junit.jupiter.api.BeforeAll; +import org.junit.jupiter.api.DisplayName; +import org.junit.jupiter.api.Test; +import org.springframework.data.redis.connection.lettuce.LettuceConnectionFactory; +import org.springframework.data.redis.core.StringRedisTemplate; +import org.testcontainers.containers.GenericContainer; +import org.testcontainers.utility.DockerImageName; + +import java.math.BigDecimal; +import java.time.Instant; +import java.util.Map; +import java.util.UUID; + +import static org.junit.jupiter.api.Assertions.*; + +class RedisOrderFlowIntegrationTest { + + private static final GenericContainer REDIS = new GenericContainer<>( + DockerImageName.parse("redis:7.4-alpine")) + .withExposedPorts(6379); + + private static LettuceConnectionFactory connectionFactory; + private static StringRedisTemplate redisTemplate; + + @BeforeAll + static void setUpRedis() { + REDIS.start(); + connectionFactory = new LettuceConnectionFactory(REDIS.getHost(), REDIS.getMappedPort(6379)); + connectionFactory.afterPropertiesSet(); + redisTemplate = new StringRedisTemplate(connectionFactory); + redisTemplate.afterPropertiesSet(); + } + + @AfterAll + static void tearDownRedis() { + connectionFactory.destroy(); + REDIS.stop(); + } + + @Test + @DisplayName("예약·중복·실패 복원이 Redis에서 원자적이고 멱등하게 처리된다") + void reserveReplayAndRestoreOnce() { + long dropId = 101L; + long userId = 201L; + long closeAt = Instant.now().plusSeconds(3600).toEpochMilli(); + redisTemplate.opsForHash().putAll(RedisOrderKeyFactory.saleKey(dropId), Map.of( + "purchaseLimit", "3", "openAt", "0", "closeAt", Long.toString(closeAt), + "productName", "product", "unitPrice", "1000", "discountRate", "0")); + redisTemplate.opsForValue().set(RedisOrderKeyFactory.stockKey(dropId), "2"); + + UUID requestId = UUID.randomUUID(); + long acceptedMicros = Instant.now().toEpochMilli() * 1_000L; + OrderAdmissionRequest request = new OrderAdmissionRequest( + requestId, userId, dropId, "hash", "101:1", 1, acceptedMicros); + RedisOrderAdmissionAdapter admission = new RedisOrderAdmissionAdapter(redisTemplate); + + assertEquals(OrderAdmissionResultType.NEW, admission.reserve(request).type()); + assertEquals(OrderAdmissionResultType.REPLAY, admission.reserve(request).type()); + assertEquals("1", redisTemplate.opsForValue().get(RedisOrderKeyFactory.stockKey(dropId))); + assertEquals("1", redisTemplate.opsForHash().get(RedisOrderKeyFactory.purchaseKey(dropId), "201")); + + RedisOrderFinalizationSyncAdapter finalization = new RedisOrderFinalizationSyncAdapter(redisTemplate); + OrderRequestSyncCommand command = new OrderRequestSyncCommand( + requestId, RedisOrderRequestState.FAILED, null, userId, dropId, + "hash", 1, "INSUFFICIENT_STOCK", 1L, Instant.ofEpochMilli(closeAt + 86_400_000L)); + assertEquals(OrderRequestSyncResult.APPLIED, finalization.sync(command)); + assertEquals(OrderRequestSyncResult.ALREADY_APPLIED, finalization.sync(command)); + assertEquals("2", redisTemplate.opsForValue().get(RedisOrderKeyFactory.stockKey(dropId))); + assertEquals("0", redisTemplate.opsForHash().get(RedisOrderKeyFactory.purchaseKey(dropId), "201")); + } + + @Test + @DisplayName("requestId index는 생성과 동시에 절대 만료 시각을 가진다") + void indexHasExpiration() { + RedisOrderAdmissionAdapter admission = new RedisOrderAdmissionAdapter(redisTemplate); + UUID requestId = UUID.randomUUID(); + long expiresAt = Instant.now().plusSeconds(3600).toEpochMilli(); + ReservedOrderSnapshot snapshot = new ReservedOrderSnapshot( + requestId, 1L, 1L, "hash", "1:1", 1, Instant.now(), "product", + new BigDecimal("1000"), 0, "UNCONFIRMED", + com.dropit.order.entity.OrderRequestStatus.PENDING, null, null, expiresAt); + + admission.indexRequest(snapshot); + + Long ttl = redisTemplate.getExpire(RedisOrderKeyFactory.requestIndexKey(requestId)); + assertNotNull(ttl); + assertTrue(ttl > 0 && ttl <= 3600); + } +} diff --git a/src/test/java/com/dropit/order/service/OrderAdmissionServiceTest.java b/src/test/java/com/dropit/order/service/OrderAdmissionServiceTest.java new file mode 100644 index 0000000..b229f32 --- /dev/null +++ b/src/test/java/com/dropit/order/service/OrderAdmissionServiceTest.java @@ -0,0 +1,92 @@ +package com.dropit.order.service; + +import com.dropit.order.dto.request.OrderCreateRequest; +import com.dropit.order.dto.request.OrderItemCreateRequest; +import com.dropit.order.messaging.OrderMessagePublisher; +import com.dropit.order.redis.*; +import org.junit.jupiter.api.DisplayName; +import org.junit.jupiter.api.Test; +import org.mockito.ArgumentCaptor; + +import java.math.BigDecimal; +import java.time.Instant; +import java.util.List; +import java.util.UUID; + +import static org.junit.jupiter.api.Assertions.*; +import static org.mockito.ArgumentMatchers.any; +import static org.mockito.Mockito.*; + +class OrderAdmissionServiceTest { + + private final RedisOrderAdmissionAdapter redisAdapter = mock(RedisOrderAdmissionAdapter.class); + private final OrderMessagePublisher publisher = mock(OrderMessagePublisher.class); + private final OrderAdmissionService service = new OrderAdmissionService(redisAdapter, publisher); + + @Test + @DisplayName("신규 예약은 원본 멱등키를 SHA-256으로 바꾼 뒤 snapshot 메시지를 발행한다") + void publishNewReservationWithoutRawKey() { + UUID requestId = UUID.randomUUID(); + when(redisAdapter.reserve(any())).thenReturn(OrderAdmissionResult.newReservation(requestId)); + when(redisAdapter.getSnapshot(eq(10L), eq(1L), any())).thenAnswer(invocation -> + snapshot(requestId, invocation.getArgument(2), "UNCONFIRMED")); + + ReservedOrderSnapshot result = service.admit(1L, " raw-key ", request()); + + ArgumentCaptor command = ArgumentCaptor.forClass(OrderAdmissionRequest.class); + verify(redisAdapter).reserve(command.capture()); + assertAll( + () -> assertEquals(requestId, result.requestId()), + () -> assertEquals(64, command.getValue().idempotencyKeyHash().length()), + () -> assertNotEquals(" raw-key ", command.getValue().idempotencyKeyHash()), + () -> assertEquals("10:2", command.getValue().fingerprint()) + ); + verify(redisAdapter).indexRequest(result); + verify(publisher).publish(result.toMessage()); + verify(redisAdapter).confirmPublication(result); + } + + @Test + @DisplayName("발행 확인된 replay는 같은 requestId를 반환하고 다시 발행하지 않는다") + void doNotRepublishConfirmedReplay() { + UUID requestId = UUID.randomUUID(); + when(redisAdapter.reserve(any())).thenReturn(OrderAdmissionResult.replay(requestId)); + when(redisAdapter.getSnapshot(eq(10L), eq(1L), any())).thenAnswer(invocation -> + snapshot(requestId, invocation.getArgument(2), "CONFIRMED")); + + ReservedOrderSnapshot result = service.admit(1L, "key", request()); + + assertEquals(requestId, result.requestId()); + verifyNoInteractions(publisher); + } + + @Test + @DisplayName("SQS 발행 결과 불명은 예약을 복원하지 않고 같은 requestId를 전달한다") + void keepReservationWhenPublicationIsUnconfirmed() { + UUID requestId = UUID.randomUUID(); + when(redisAdapter.reserve(any())).thenReturn(OrderAdmissionResult.newReservation(requestId)); + when(redisAdapter.getSnapshot(eq(10L), eq(1L), any())).thenAnswer(invocation -> + snapshot(requestId, invocation.getArgument(2), "UNCONFIRMED")); + doThrow(new IllegalStateException("timeout")).when(publisher).publish(any()); + + OrderPublicationUnconfirmedException exception = assertThrows( + OrderPublicationUnconfirmedException.class, + () -> service.admit(1L, "key", request())); + + assertEquals(requestId, exception.getRequestId()); + verify(redisAdapter, never()).confirmPublication(any()); + } + + private OrderCreateRequest request() { + return new OrderCreateRequest(List.of(new OrderItemCreateRequest(10L, 2))); + } + + private ReservedOrderSnapshot snapshot(UUID requestId, String keyHash, String publicationState) { + return new ReservedOrderSnapshot( + requestId, 1L, 10L, keyHash, "10:2", 2, Instant.now(), + "product", new BigDecimal("1000"), 10, publicationState, + com.dropit.order.entity.OrderRequestStatus.PENDING, null, null, + Instant.now().plusSeconds(3600).toEpochMilli() + ); + } +} diff --git a/src/test/java/com/dropit/order/service/OrderCancellationServiceTest.java b/src/test/java/com/dropit/order/service/OrderCancellationServiceTest.java new file mode 100644 index 0000000..cc24030 --- /dev/null +++ b/src/test/java/com/dropit/order/service/OrderCancellationServiceTest.java @@ -0,0 +1,88 @@ +package com.dropit.order.service; + +import com.dropit.drop.entity.Drop; +import com.dropit.drop.repository.DropRepository; +import com.dropit.order.entity.DropUserPurchase; +import com.dropit.order.entity.Order; +import com.dropit.order.entity.OrderItem; +import com.dropit.order.repository.DropUserPurchaseRepository; +import com.dropit.order.repository.OrderItemRepository; +import com.dropit.order.repository.OrderRepository; +import com.dropit.order.repository.OrderRequestRepository; +import com.dropit.user.entity.User; +import com.dropit.user.entity.UserRole; +import org.junit.jupiter.api.DisplayName; +import org.junit.jupiter.api.Test; +import org.springframework.test.util.ReflectionTestUtils; +import org.springframework.transaction.TransactionStatus; +import org.springframework.transaction.support.TransactionCallback; +import org.springframework.transaction.support.TransactionTemplate; + +import java.math.BigDecimal; +import java.util.List; +import java.util.Optional; + +import static org.mockito.ArgumentMatchers.any; +import static org.mockito.Mockito.*; + +class OrderCancellationServiceTest { + + @Test + @DisplayName("취소 대상 항목은 dropId 순서로 조회해 구매량과 Drop 락 순서를 고정한다") + @SuppressWarnings("unchecked") + void acquireLocksInDropIdOrder() { + OrderRepository orderRepository = mock(OrderRepository.class); + OrderRequestRepository requestRepository = mock(OrderRequestRepository.class); + OrderItemRepository itemRepository = mock(OrderItemRepository.class); + DropUserPurchaseRepository purchaseRepository = mock(DropUserPurchaseRepository.class); + DropRepository dropRepository = mock(DropRepository.class); + OrderRequestRedisSyncService redisSyncService = mock(OrderRequestRedisSyncService.class); + TransactionTemplate transactionTemplate = mock(TransactionTemplate.class); + TransactionStatus transactionStatus = mock(TransactionStatus.class); + when(transactionTemplate.execute(any())).thenAnswer(invocation -> + ((TransactionCallback) invocation.getArgument(0)).doInTransaction(transactionStatus)); + + Order order = order(); + OrderItem first = item(10L, order); + OrderItem second = item(20L, order); + Drop firstDrop = first.getDrop(); + Drop secondDrop = second.getDrop(); + when(requestRepository.findByOrderIdForUpdate(100L)).thenReturn(Optional.empty()); + when(orderRepository.findByIdAndUser_IdForUpdate(100L, 1L)).thenReturn(Optional.of(order)); + when(itemRepository.findAllForCancellationOrderByDropIdAsc(100L)).thenReturn(List.of(first, second)); + when(purchaseRepository.findByDropIdAndUserIdForUpdate(anyLong(), eq(1L))) + .thenReturn(Optional.of(mock(DropUserPurchase.class))); + when(dropRepository.findByIdForUpdate(10L)).thenReturn(Optional.of(firstDrop)); + when(dropRepository.findByIdForUpdate(20L)).thenReturn(Optional.of(secondDrop)); + when(purchaseRepository.decreaseConfirmedQuantity(anyLong(), eq(1L), eq(1))).thenReturn(1); + + new OrderCancellationService( + orderRepository, requestRepository, itemRepository, purchaseRepository, + dropRepository, redisSyncService, transactionTemplate + ).cancel(1L, 100L); + + verify(itemRepository).findAllForCancellationOrderByDropIdAsc(100L); + var locks = inOrder(purchaseRepository, dropRepository); + locks.verify(purchaseRepository).findByDropIdAndUserIdForUpdate(10L, 1L); + locks.verify(dropRepository).findByIdForUpdate(10L); + locks.verify(purchaseRepository).findByDropIdAndUserIdForUpdate(20L, 1L); + locks.verify(dropRepository).findByIdForUpdate(20L); + } + + private Order order() { + User buyer = new User("buyer@example.com", "password", "buyer", UserRole.USER); + ReflectionTestUtils.setField(buyer, "id", 1L); + Order order = new Order(buyer, new BigDecimal("2000")); + ReflectionTestUtils.setField(order, "id", 100L); + return order; + } + + private OrderItem item(Long dropId, Order order) { + Drop drop = mock(Drop.class); + when(drop.getId()).thenReturn(dropId); + OrderItem item = mock(OrderItem.class); + when(item.getDrop()).thenReturn(drop); + when(item.getQuantity()).thenReturn(1); + return item; + } +} diff --git a/src/test/java/com/dropit/order/service/OrderRedisSyncRetrySchedulerTest.java b/src/test/java/com/dropit/order/service/OrderRedisSyncRetrySchedulerTest.java new file mode 100644 index 0000000..84a59d3 --- /dev/null +++ b/src/test/java/com/dropit/order/service/OrderRedisSyncRetrySchedulerTest.java @@ -0,0 +1,42 @@ +package com.dropit.order.service; + +import com.dropit.order.entity.OrderRequest; +import com.dropit.order.repository.OrderRequestRepository; +import org.junit.jupiter.api.DisplayName; +import org.junit.jupiter.api.Test; + +import java.time.Duration; +import java.time.Instant; +import java.util.List; +import java.util.UUID; + +import static org.mockito.ArgumentMatchers.any; +import static org.mockito.Mockito.*; + +class OrderRedisSyncRetrySchedulerTest { + + @Test + @DisplayName("한 요청의 실패를 다음 시각으로 미루고 같은 배치의 다음 요청을 계속 처리한다") + void deferFailureAndContinueBatch() { + OrderRequestRepository repository = mock(OrderRequestRepository.class); + OrderRequestRedisSyncService syncService = mock(OrderRequestRedisSyncService.class); + OrderRequest first = mock(OrderRequest.class); + OrderRequest second = mock(OrderRequest.class); + UUID firstId = UUID.randomUUID(); + UUID secondId = UUID.randomUUID(); + when(first.getId()).thenReturn(firstId); + when(second.getId()).thenReturn(secondId); + when(repository + .findTop100ByRedisSyncPendingTrueAndRedisSyncNextAttemptAtLessThanEqualOrderByRedisSyncNextAttemptAtAsc( + any(Instant.class))) + .thenReturn(List.of(first, second)); + doThrow(new IllegalStateException("redis unavailable")).when(syncService).sync(firstId); + doThrow(new IllegalStateException("database unavailable")) + .when(syncService).defer(firstId, Duration.ofSeconds(5)); + + new OrderRedisSyncRetryScheduler(repository, syncService).retryPending(); + + verify(syncService).defer(firstId, Duration.ofSeconds(5)); + verify(syncService).sync(secondId); + } +} diff --git a/src/test/java/com/dropit/order/service/OrderRequestQueryServiceTest.java b/src/test/java/com/dropit/order/service/OrderRequestQueryServiceTest.java new file mode 100644 index 0000000..ebb8c38 --- /dev/null +++ b/src/test/java/com/dropit/order/service/OrderRequestQueryServiceTest.java @@ -0,0 +1,56 @@ +package com.dropit.order.service; + +import com.dropit.order.entity.Order; +import com.dropit.order.entity.OrderRequest; +import com.dropit.order.entity.OrderRequestStatus; +import com.dropit.order.redis.RedisOrderAdmissionAdapter; +import com.dropit.order.redis.ReservedOrderSnapshot; +import com.dropit.order.repository.OrderRequestRepository; +import org.junit.jupiter.api.DisplayName; +import org.junit.jupiter.api.Test; + +import java.util.Optional; +import java.util.UUID; + +import static org.junit.jupiter.api.Assertions.assertEquals; +import static org.mockito.Mockito.*; + +class OrderRequestQueryServiceTest { + + private final OrderRequestRepository repository = mock(OrderRequestRepository.class); + private final RedisOrderAdmissionAdapter redisAdapter = mock(RedisOrderAdmissionAdapter.class); + private final OrderRequestQueryService service = new OrderRequestQueryService(repository, redisAdapter); + + @Test + @DisplayName("DB terminal 결과가 있으면 Redis를 조회하지 않는다") + void preferDatabaseTerminalResult() { + UUID requestId = UUID.randomUUID(); + OrderRequest request = mock(OrderRequest.class); + Order order = mock(Order.class); + when(request.isTerminal()).thenReturn(true); + when(request.getId()).thenReturn(requestId); + when(request.getStatus()).thenReturn(OrderRequestStatus.SUCCEEDED); + when(request.getOrder()).thenReturn(order); + when(repository.findByIdAndUserId(requestId, 1L)).thenReturn(Optional.of(request)); + + var response = service.get(1L, requestId); + + assertEquals(OrderRequestStatus.SUCCEEDED, response.status()); + verifyNoInteractions(redisAdapter); + } + + @Test + @DisplayName("DB 반영 전에는 본인 소유 Redis 예약을 PENDING으로 반환한다") + void returnRedisPendingBeforeDatabaseRegistration() { + UUID requestId = UUID.randomUUID(); + ReservedOrderSnapshot snapshot = mock(ReservedOrderSnapshot.class); + when(snapshot.requestId()).thenReturn(requestId); + when(snapshot.status()).thenReturn(OrderRequestStatus.PENDING); + when(repository.findByIdAndUserId(requestId, 1L)).thenReturn(Optional.empty()); + when(redisAdapter.findByRequestId(requestId, 1L)).thenReturn(Optional.of(snapshot)); + + var response = service.get(1L, requestId); + + assertEquals(OrderRequestStatus.PENDING, response.status()); + } +} diff --git a/src/test/java/com/dropit/order/service/OrderServiceConcurrencyTest.java b/src/test/java/com/dropit/order/service/OrderServiceConcurrencyTest.java deleted file mode 100644 index 2d686e8..0000000 --- a/src/test/java/com/dropit/order/service/OrderServiceConcurrencyTest.java +++ /dev/null @@ -1,323 +0,0 @@ -package com.dropit.order.service; - -import com.dropit.drop.entity.Drop; -import com.dropit.drop.repository.DropRepository; -import com.dropit.global.config.QuerydslConfig; -import com.dropit.order.dto.request.OrderCreateRequest; -import com.dropit.order.dto.request.OrderItemCreateRequest; -import com.dropit.order.entity.DropUserPurchase; -import com.dropit.order.entity.OrderItem; -import com.dropit.order.exception.OrderErrorCode; -import com.dropit.order.repository.DropUserPurchaseRepository; -import com.dropit.order.repository.OrderItemRepository; -import com.dropit.order.repository.OrderRepository; -import com.dropit.product.entity.Product; -import com.dropit.product.repository.ProductRepository; -import com.dropit.user.entity.User; -import com.dropit.user.entity.UserRole; -import com.dropit.user.repository.UserRepository; -import org.junit.jupiter.api.AfterEach; -import org.junit.jupiter.api.BeforeEach; -import org.junit.jupiter.api.DisplayName; -import org.junit.jupiter.api.Test; -import org.springframework.beans.factory.annotation.Autowired; -import org.springframework.boot.jdbc.test.autoconfigure.AutoConfigureTestDatabase; -import org.springframework.boot.data.jpa.test.autoconfigure.DataJpaTest; -import org.springframework.context.annotation.Import; -import org.springframework.jdbc.core.JdbcTemplate; -import org.springframework.test.context.DynamicPropertyRegistry; -import org.springframework.test.context.DynamicPropertySource; -import org.springframework.transaction.annotation.Propagation; -import org.springframework.transaction.annotation.Transactional; -import org.testcontainers.mysql.MySQLContainer; - -import java.math.BigDecimal; -import java.time.LocalDateTime; -import java.util.ArrayList; -import java.util.List; -import java.util.concurrent.CountDownLatch; -import java.util.concurrent.ExecutionException; -import java.util.concurrent.ExecutorService; -import java.util.concurrent.Executors; -import java.util.concurrent.Future; -import java.util.concurrent.TimeUnit; - -import static org.junit.jupiter.api.Assertions.assertEquals; -import static org.junit.jupiter.api.Assertions.assertThrows; -import static org.junit.jupiter.api.Assertions.assertTrue; - -@DataJpaTest(properties = { - "spring.jpa.hibernate.ddl-auto=create-drop", - "spring.jpa.open-in-view=false", - "spring.datasource.hikari.maximum-pool-size=32" -}) -@AutoConfigureTestDatabase(replace = AutoConfigureTestDatabase.Replace.NONE) -@Import({OrderService.class, QuerydslConfig.class}) -@Transactional(propagation = Propagation.NOT_SUPPORTED) -class OrderServiceConcurrencyTest { - - private static final String TRIGGER_NAME = "fail_order_item_insert_for_test"; - private static final MySQLContainer MYSQL = new MySQLContainer("mysql:8.4") - .withDatabaseName("dropit_test") - .withUsername("test") - .withPassword("test") - .withCommand("mysqld", "--log-bin-trust-function-creators=1"); - - static { - MYSQL.start(); - } - - @Autowired private OrderService orderService; - @Autowired private UserRepository userRepository; - @Autowired private ProductRepository productRepository; - @Autowired private DropRepository dropRepository; - @Autowired private OrderRepository orderRepository; - @Autowired private OrderItemRepository orderItemRepository; - @Autowired private DropUserPurchaseRepository dropUserPurchaseRepository; - @Autowired private JdbcTemplate jdbcTemplate; - - @DynamicPropertySource - static void registerDatasourceProperties(DynamicPropertyRegistry registry) { - registry.add("spring.datasource.url", MYSQL::getJdbcUrl); - registry.add("spring.datasource.username", MYSQL::getUsername); - registry.add("spring.datasource.password", MYSQL::getPassword); - } - - @BeforeEach - void cleanDatabase() { - orderItemRepository.deleteAllInBatch(); - orderRepository.deleteAllInBatch(); - dropUserPurchaseRepository.deleteAllInBatch(); - dropRepository.deleteAllInBatch(); - productRepository.deleteAllInBatch(); - userRepository.deleteAllInBatch(); - } - - @AfterEach - void removeFailureTrigger() { - jdbcTemplate.execute("DROP TRIGGER IF EXISTS " + TRIGGER_NAME); - } - - @Test - @DisplayName("재고 100개에 200명이 동시에 주문해도 100건만 확정된다") - void preventOversellingWithConcurrentOrders() throws Exception { - Fixture fixture = createFixture(100, 200); - - CallResult result = placeConcurrentOrders(fixture, 1, 32); - - assertEquals(100, result.successes()); - assertEquals(100, result.rejections()); - assertEquals(100, orderRepository.count()); - assertEquals(100, totalOrderedQuantity()); - assertEquals(0, remainingQuantity(fixture.drop())); - } - - @Test - @DisplayName("재고 10개에 수량 3 주문을 경합하면 3건만 확정되고 1개가 남는다") - void preserveRemainingStockWhenConcurrentQuantityExceedsStock() throws Exception { - Fixture fixture = createFixture(10, 4); - - CallResult result = placeConcurrentOrders(fixture, 3, 4); - - assertEquals(3, result.successes()); - assertEquals(1, result.rejections()); - assertEquals(3, orderRepository.count()); - assertEquals(9, totalOrderedQuantity()); - assertEquals(1, remainingQuantity(fixture.drop())); - } - - @Test - @DisplayName("동일 사용자의 동시 주문은 구매 한도를 초과하지 않는다") - void enforcePurchaseLimitForSameUser() throws Exception { - Fixture fixture = createFixture(100, 1, 3); - - CallResult result = placeConcurrentOrdersForSameBuyer(fixture, 1, 20); - - assertEquals(3, result.successes()); - assertEquals(17, result.rejections()); - assertEquals(3, totalOrderedQuantity()); - assertEquals(97, remainingQuantity(fixture.drop())); - DropUserPurchase purchase = dropUserPurchaseRepository.findByDropIdAndUserId( - fixture.drop().getId(), - fixture.buyers().getFirst().getId() - ).orElseThrow(); - assertEquals(3, purchase.getConfirmedQuantity()); - } - - @Test - @DisplayName("주문 항목 저장에 실패하면 재고와 주문 데이터가 함께 rollback된다") - void rollbackStockWhenOrderItemSaveFails() { - Fixture fixture = createFixture(10, 1); - jdbcTemplate.execute(""" - CREATE TRIGGER fail_order_item_insert_for_test - BEFORE INSERT ON order_items - FOR EACH ROW - SIGNAL SQLSTATE '45000' SET MESSAGE_TEXT = 'forced test failure' - """); - - assertThrows( - RuntimeException.class, - () -> orderService.create( - fixture.buyers().getFirst().getId(), - orderRequest(fixture.drop().getId(), 1) - ) - ); - - assertEquals(10, remainingQuantity(fixture.drop())); - assertEquals(0, dropUserPurchaseRepository.count()); - assertEquals(0, orderRepository.count()); - assertEquals(0, orderItemRepository.count()); - } - - private CallResult placeConcurrentOrders(Fixture fixture, int quantity, int workerCount) throws Exception { - ExecutorService executor = Executors.newFixedThreadPool(workerCount); - CountDownLatch workersReady = new CountDownLatch(workerCount); - CountDownLatch startSignal = new CountDownLatch(1); - List> futures = new ArrayList<>(); - - try { - for (int worker = 0; worker < workerCount; worker++) { - int workerIndex = worker; - futures.add(executor.submit(() -> { - workersReady.countDown(); - assertTrue(startSignal.await(10, TimeUnit.SECONDS)); - - int successes = 0; - int rejections = 0; - for (int index = workerIndex; index < fixture.buyers().size(); index += workerCount) { - try { - orderService.create( - fixture.buyers().get(index).getId(), - orderRequest(fixture.drop().getId(), quantity) - ); - successes++; - } catch (com.dropit.global.exception.ServiceException exception) { - rejections++; - } - } - return new CallResult(successes, rejections); - })); - } - - assertTrue(workersReady.await(10, TimeUnit.SECONDS)); - startSignal.countDown(); - - int successes = 0; - int rejections = 0; - for (Future future : futures) { - CallResult result = get(future); - successes += result.successes(); - rejections += result.rejections(); - } - return new CallResult(successes, rejections); - } finally { - executor.shutdownNow(); - assertTrue(executor.awaitTermination(10, TimeUnit.SECONDS)); - } - } - - private CallResult placeConcurrentOrdersForSameBuyer( - Fixture fixture, - int quantity, - int requestCount - ) throws Exception { - try (ExecutorService executor = Executors.newFixedThreadPool(requestCount)) { - CountDownLatch ready = new CountDownLatch(requestCount); - CountDownLatch start = new CountDownLatch(1); - List> futures = new ArrayList<>(); - Long buyerId = fixture.buyers().getFirst().getId(); - - for (int index = 0; index < requestCount; index++) { - futures.add(executor.submit(() -> { - ready.countDown(); - assertTrue(start.await(10, TimeUnit.SECONDS)); - try { - orderService.create(buyerId, orderRequest(fixture.drop().getId(), quantity)); - return true; - } catch (com.dropit.global.exception.ServiceException exception) { - if (exception.getErrorCode() != OrderErrorCode.PURCHASE_LIMIT_EXCEEDED) { - throw exception; - } - return false; - } - })); - } - - assertTrue(ready.await(10, TimeUnit.SECONDS)); - start.countDown(); - - int successes = 0; - for (Future future : futures) { - if (future.get(60, TimeUnit.SECONDS)) { - successes++; - } - } - return new CallResult(successes, requestCount - successes); - } - } - - private CallResult get(Future future) throws Exception { - try { - return future.get(60, TimeUnit.SECONDS); - } catch (ExecutionException exception) { - throw new AssertionError("동시 주문 작업이 예외로 종료되었습니다.", exception.getCause()); - } - } - - private Fixture createFixture(int stock, int buyerCount) { - return createFixture(stock, buyerCount, 0); - } - - private Fixture createFixture(int stock, int buyerCount, int purchaseLimit) { - User seller = userRepository.saveAndFlush( - new User("seller@example.com", "password", "seller", UserRole.SELLER) - ); - Product product = productRepository.saveAndFlush( - new Product(seller, "Limited Hoodie", "description", null) - ); - LocalDateTime openAt = LocalDateTime.now().minusMinutes(1); - Drop drop = new Drop( - product, - new BigDecimal("59000"), - stock, - 20, - purchaseLimit, - openAt, - openAt.plusHours(1) - ); - drop.changeVisibility(true); - drop = dropRepository.saveAndFlush(drop); - - List buyers = new ArrayList<>(); - for (int index = 0; index < buyerCount; index++) { - buyers.add(new User( - "buyer" + index + "@example.com", - "password", - "buyer" + index, - UserRole.USER - )); - } - buyers = userRepository.saveAllAndFlush(buyers); - return new Fixture(drop, buyers); - } - - private OrderCreateRequest orderRequest(Long dropId, int quantity) { - return new OrderCreateRequest(List.of(new OrderItemCreateRequest(dropId, quantity))); - } - - private int remainingQuantity(Drop drop) { - return dropRepository.findById(drop.getId()).orElseThrow().getRemainingQuantity(); - } - - private long totalOrderedQuantity() { - return orderItemRepository.findAll().stream() - .mapToLong(OrderItem::getQuantity) - .sum(); - } - - private record Fixture(Drop drop, List buyers) { - } - - private record CallResult(int successes, int rejections) { - } -} diff --git a/src/test/java/com/dropit/order/service/OrderServiceTest.java b/src/test/java/com/dropit/order/service/OrderServiceTest.java index 574b7b4..2d4898b 100644 --- a/src/test/java/com/dropit/order/service/OrderServiceTest.java +++ b/src/test/java/com/dropit/order/service/OrderServiceTest.java @@ -1,24 +1,15 @@ package com.dropit.order.service; -import com.dropit.drop.entity.Drop; -import com.dropit.drop.repository.DropRepository; -import com.dropit.global.exception.CommonErrorCode; import com.dropit.global.exception.ServiceException; -import com.dropit.order.dto.request.OrderCreateRequest; -import com.dropit.order.dto.request.OrderItemCreateRequest; import com.dropit.order.dto.response.OrderResponse; import com.dropit.order.dto.response.OrderSummaryResponse; import com.dropit.order.entity.Order; -import com.dropit.order.entity.OrderItem; import com.dropit.order.entity.OrderStatus; import com.dropit.order.exception.OrderErrorCode; -import com.dropit.order.repository.DropUserPurchaseRepository; import com.dropit.order.repository.OrderItemRepository; import com.dropit.order.repository.OrderRepository; -import com.dropit.product.entity.Product; import com.dropit.user.entity.User; import com.dropit.user.entity.UserRole; -import com.dropit.user.repository.UserRepository; import org.junit.jupiter.api.DisplayName; import org.junit.jupiter.api.Test; import org.junit.jupiter.api.extension.ExtendWith; @@ -28,192 +19,62 @@ import org.springframework.test.util.ReflectionTestUtils; import java.math.BigDecimal; -import java.time.LocalDateTime; import java.util.List; import java.util.Optional; import static org.junit.jupiter.api.Assertions.assertEquals; import static org.junit.jupiter.api.Assertions.assertThrows; -import static org.mockito.ArgumentMatchers.any; import static org.mockito.Mockito.*; @ExtendWith(MockitoExtension.class) class OrderServiceTest { - @Mock private UserRepository userRepository; - @Mock private DropRepository dropRepository; @Mock private OrderRepository orderRepository; @Mock private OrderItemRepository orderItemRepository; - @Mock private DropUserPurchaseRepository dropUserPurchaseRepository; @InjectMocks private OrderService orderService; @Test - @DisplayName("주문을 생성하면 재고를 차감하고 주문 시점 정보를 저장한다") - void createOrder() { - User buyer = createUser(1L, UserRole.USER); - Drop drop = createOpenDrop(10L, 100L, 10, 20, 2); - OrderCreateRequest request = new OrderCreateRequest(List.of(new OrderItemCreateRequest(100L, 2))); - - when(userRepository.findById(1L)).thenReturn(Optional.of(buyer)); - when(dropRepository.findByIdForUpdate(100L)).thenReturn(Optional.of(drop)); - when(dropUserPurchaseRepository.increaseWithinLimit(100L, 1L, 2, 2)).thenReturn(1); - when(orderRepository.save(any(Order.class))).thenAnswer(invocation -> { - Order order = invocation.getArgument(0); - ReflectionTestUtils.setField(order, "id", 1000L); - return order; - }); - when(orderItemRepository.saveAll(any())).thenAnswer(invocation -> invocation.getArgument(0)); - - OrderResponse response = orderService.create(1L, request); - - assertEquals(1000L, response.id()); - assertEquals(OrderStatus.ORDERED, response.status()); - assertEquals(new BigDecimal("94400"), response.totalPrice()); - assertEquals(8, drop.getRemainingQuantity()); - assertEquals(1, response.items().size()); - assertEquals("Limited Hoodie", response.items().getFirst().productName()); - assertEquals(new BigDecimal("59000"), response.items().getFirst().unitPrice()); - assertEquals(20, response.items().getFirst().discountRate()); - assertEquals(new BigDecimal("94400"), response.items().getFirst().itemTotalPrice()); - verify(dropUserPurchaseRepository, times(1)).createCounterIfAbsent(100L, 1L); - verify(dropUserPurchaseRepository, times(1)).increaseWithinLimit(100L, 1L, 2, 2); - } - - @Test - @DisplayName("기존 구매 수량과 새 수량의 합이 구매 제한을 넘으면 주문할 수 없다") - void rejectPurchaseLimitExceeded() { - User buyer = createUser(1L, UserRole.USER); - Drop drop = createOpenDrop(10L, 100L, 10, 20, 2); - OrderCreateRequest request = new OrderCreateRequest(List.of(new OrderItemCreateRequest(100L, 2))); - - when(userRepository.findById(1L)).thenReturn(Optional.of(buyer)); - when(dropRepository.findByIdForUpdate(100L)).thenReturn(Optional.of(drop)); - when(dropUserPurchaseRepository.increaseWithinLimit(100L, 1L, 2, 2)).thenReturn(0); - - ServiceException exception = assertThrows( - ServiceException.class, - () -> orderService.create(1L, request) - ); - - assertEquals(OrderErrorCode.PURCHASE_LIMIT_EXCEEDED, exception.getErrorCode()); - assertEquals(10, drop.getRemainingQuantity()); - verify(orderRepository, never()).save(any()); - } - - @Test - @DisplayName("내 주문 목록을 최신순 조회 결과로 반환한다") + @DisplayName("내 주문 목록은 최신순 조회 결과를 반환한다") void getMyOrders() { - User buyer = createUser(1L, UserRole.USER); - Order order = new Order(buyer, new BigDecimal("94400")); - ReflectionTestUtils.setField(order, "id", 1000L); + Order order = order(1000L); when(orderRepository.findAllByUser_IdOrderByCreatedAtDesc(1L)).thenReturn(List.of(order)); List responses = orderService.getMyOrders(1L); assertEquals(1, responses.size()); assertEquals(1000L, responses.getFirst().id()); - assertEquals(new BigDecimal("94400"), responses.getFirst().totalPrice()); - } - - @Test - @DisplayName("내 주문 상세는 주문 항목을 함께 반환한다") - void getMyOrder() { - User buyer = createUser(1L, UserRole.USER); - Drop drop = createOpenDrop(10L, 100L, 10, 20, 2); - Order order = new Order(buyer, new BigDecimal("94400")); - ReflectionTestUtils.setField(order, "id", 1000L); - OrderItem orderItem = new OrderItem(order, drop, "Limited Hoodie", new BigDecimal("59000"), 20, 2); - - when(orderRepository.findByIdAndUser_Id(1000L, 1L)).thenReturn(Optional.of(order)); - when(orderItemRepository.findAllByOrder_IdOrderByIdAsc(1000L)).thenReturn(List.of(orderItem)); - - OrderResponse response = orderService.getMyOrder(1L, 1000L); - - assertEquals(1000L, response.id()); - assertEquals(1, response.items().size()); - assertEquals(100L, response.items().getFirst().dropId()); } @Test - @DisplayName("본인 주문이 아니면 주문 상세를 조회할 수 없다") + @DisplayName("본인 소유가 아닌 주문 상세는 노출하지 않는다") void rejectAnotherUsersOrder() { when(orderRepository.findByIdAndUser_Id(1000L, 2L)).thenReturn(Optional.empty()); ServiceException exception = assertThrows( - ServiceException.class, - () -> orderService.getMyOrder(2L, 1000L) - ); + ServiceException.class, () -> orderService.getMyOrder(2L, 1000L)); assertEquals(OrderErrorCode.ORDER_NOT_FOUND, exception.getErrorCode()); - verify(orderItemRepository, never()).findAllByOrder_IdOrderByIdAsc(any()); - } - - @Test - @DisplayName("주문을 취소하면 주문 상태를 변경하고 재고를 복구한다") - void cancelOrder() { - User buyer = createUser(1L, UserRole.USER); - Drop drop = createOpenDrop(10L, 100L, 10, 20, 2); - drop.decreaseStock(2, LocalDateTime.now()); - Order order = new Order(buyer, new BigDecimal("94400")); - ReflectionTestUtils.setField(order, "id", 1000L); - OrderItem orderItem = new OrderItem(order, drop, "Limited Hoodie", new BigDecimal("59000"), 20, 2); - - when(orderRepository.findByIdAndUser_IdForUpdate(1000L, 1L)).thenReturn(Optional.of(order)); - when(orderItemRepository.findAllByOrder_IdOrderByIdAsc(1000L)).thenReturn(List.of(orderItem)); - when(dropRepository.findByIdForUpdate(100L)).thenReturn(Optional.of(drop)); - when(dropUserPurchaseRepository.decreaseConfirmedQuantity(100L, 1L, 2)).thenReturn(1); - - orderService.cancel(1L, 1000L); - - assertEquals(OrderStatus.CANCELED, order.getStatus()); - assertEquals(10, drop.getRemainingQuantity()); - verify(dropUserPurchaseRepository, times(1)).decreaseConfirmedQuantity(100L, 1L, 2); + verifyNoInteractions(orderItemRepository); } @Test - @DisplayName("구매 수량 카운터를 복구하지 못하면 취소를 실패한다") - void failToCancelWhenPurchaseCounterIsNotDecreased() { - User buyer = createUser(1L, UserRole.USER); - Drop drop = createOpenDrop(10L, 100L, 10, 20, 2); - drop.decreaseStock(2, LocalDateTime.now()); - Order order = new Order(buyer, new BigDecimal("94400")); - ReflectionTestUtils.setField(order, "id", 1000L); - OrderItem orderItem = new OrderItem(order, drop, "Limited Hoodie", new BigDecimal("59000"), 20, 2); - - when(orderRepository.findByIdAndUser_IdForUpdate(1000L, 1L)).thenReturn(Optional.of(order)); - when(orderItemRepository.findAllByOrder_IdOrderByIdAsc(1000L)).thenReturn(List.of(orderItem)); - when(dropRepository.findByIdForUpdate(100L)).thenReturn(Optional.of(drop)); - when(dropUserPurchaseRepository.decreaseConfirmedQuantity(100L, 1L, 2)).thenReturn(0); - - ServiceException exception = assertThrows( - ServiceException.class, - () -> orderService.cancel(1L, 1000L) - ); + @DisplayName("내 주문 상세는 저장된 주문 항목과 함께 반환한다") + void getMyOrder() { + Order order = order(1000L); + when(orderRepository.findByIdAndUser_Id(1000L, 1L)).thenReturn(Optional.of(order)); + when(orderItemRepository.findAllByOrder_IdOrderByIdAsc(1000L)).thenReturn(List.of()); - assertEquals(CommonErrorCode.INTERNAL_SERVER_ERROR, exception.getErrorCode()); - } + OrderResponse response = orderService.getMyOrder(1L, 1000L); - private User createUser(Long id, UserRole role) { - User user = new User("user@example.com", "password", "user", role); - ReflectionTestUtils.setField(user, "id", id); - return user; + assertEquals(1000L, response.id()); + assertEquals(OrderStatus.ORDERED, response.status()); } - private Drop createOpenDrop(Long sellerId, Long dropId, int stock, int discountRate, int purchaseLimit) { - User seller = createUser(sellerId, UserRole.SELLER); - Product product = new Product(seller, "Limited Hoodie", "description", null); - ReflectionTestUtils.setField(product, "id", 10L); - Drop drop = new Drop( - product, - new BigDecimal("59000"), - stock, - discountRate, - purchaseLimit, - LocalDateTime.now().minusHours(1), - LocalDateTime.now().plusHours(1) - ); - ReflectionTestUtils.setField(drop, "id", dropId); - drop.changeVisibility(true); - return drop; + private Order order(Long id) { + User buyer = new User("buyer@example.com", "password", "buyer", UserRole.USER); + ReflectionTestUtils.setField(buyer, "id", 1L); + Order order = new Order(buyer, new BigDecimal("59000")); + ReflectionTestUtils.setField(order, "id", id); + return order; } } diff --git a/src/test/java/com/dropit/order/validation/OrderMessageValidatorTest.java b/src/test/java/com/dropit/order/validation/OrderMessageValidatorTest.java index 44d1af5..3308371 100644 --- a/src/test/java/com/dropit/order/validation/OrderMessageValidatorTest.java +++ b/src/test/java/com/dropit/order/validation/OrderMessageValidatorTest.java @@ -42,7 +42,8 @@ void normalizeAcceptedAtToMicroseconds() { message.unitPrice(), message.quantity(), message.discountRate(), - acceptedAt + acceptedAt, + Instant.parse("2026-09-14T12:34:56Z") ); assertEquals(123_456_000, acceptedAt.getNano()); From 43856cdd7f6e8b0809b22ef58cf6557afa8ec9fa Mon Sep 17 00:00:00 2001 From: Sooyoung Yoon Date: Mon, 14 Sep 2026 00:24:33 +0900 Subject: [PATCH 80/98] =?UTF-8?q?test(drop):=20=EA=B2=80=EC=83=89=20?= =?UTF-8?q?=ED=86=B5=ED=95=A9=20=ED=85=8C=EC=8A=A4=ED=8A=B8=EB=A5=BC=20?= =?UTF-8?q?=EB=8F=85=EB=A6=BD=20=EC=8B=A4=ED=96=89=20=EA=B0=80=EB=8A=A5?= =?UTF-8?q?=ED=95=98=EA=B2=8C=20=EC=88=98=EC=A0=95?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../repository/DropSearchIntegrationTest.java | 29 +++++++++++++++---- 1 file changed, 23 insertions(+), 6 deletions(-) diff --git a/src/test/java/com/dropit/drop/repository/DropSearchIntegrationTest.java b/src/test/java/com/dropit/drop/repository/DropSearchIntegrationTest.java index 403b5e4..36f4fd8 100644 --- a/src/test/java/com/dropit/drop/repository/DropSearchIntegrationTest.java +++ b/src/test/java/com/dropit/drop/repository/DropSearchIntegrationTest.java @@ -4,17 +4,21 @@ import com.dropit.drop.dto.request.DropSortType; import com.dropit.drop.entity.Drop; import com.dropit.drop.entity.DropStatus; -import com.dropit.global.storage.S3ImageService; +import com.dropit.global.config.QuerydslConfig; import com.dropit.product.entity.Product; import com.dropit.user.entity.User; import com.dropit.user.entity.UserRole; import jakarta.persistence.EntityManager; import org.junit.jupiter.api.Test; import org.springframework.beans.factory.annotation.Autowired; -import org.springframework.boot.test.context.SpringBootTest; +import org.springframework.boot.data.jpa.test.autoconfigure.DataJpaTest; +import org.springframework.boot.jdbc.test.autoconfigure.AutoConfigureTestDatabase; +import org.springframework.context.annotation.Import; import org.springframework.data.domain.PageRequest; -import org.springframework.test.context.bean.override.mockito.MockitoBean; +import org.springframework.test.context.DynamicPropertyRegistry; +import org.springframework.test.context.DynamicPropertySource; import org.springframework.transaction.annotation.Transactional; +import org.testcontainers.mysql.MySQLContainer; import java.math.BigDecimal; import java.time.LocalDateTime; @@ -23,13 +27,26 @@ import static org.junit.jupiter.api.Assertions.*; -/** 로컬 MySQL에서 실행하며 픽스처는 트랜잭션 롤백으로 정리한다. */ -@SpringBootTest(properties = "spring.jpa.hibernate.ddl-auto=none") +@DataJpaTest(properties = "spring.jpa.hibernate.ddl-auto=create-drop") +@AutoConfigureTestDatabase(replace = AutoConfigureTestDatabase.Replace.NONE) +@Import(QuerydslConfig.class) @Transactional class DropSearchIntegrationTest { + private static final MySQLContainer MYSQL = new MySQLContainer("mysql:8.4"); + + static { + MYSQL.start(); + } + @Autowired EntityManager em; @Autowired DropRepository repository; - @MockitoBean S3ImageService s3ImageService; + + @DynamicPropertySource + static void registerDatasourceProperties(DynamicPropertyRegistry registry) { + registry.add("spring.datasource.url", MYSQL::getJdbcUrl); + registry.add("spring.datasource.username", MYSQL::getUsername); + registry.add("spring.datasource.password", MYSQL::getPassword); + } @Test void keywordPaginationKeepsOrderCountAndFetchJoins() { From 532a3ebbfe75b3b182aec266c0561ab205ddcb25 Mon Sep 17 00:00:00 2001 From: Sooyoung Yoon Date: Mon, 14 Sep 2026 00:58:43 +0900 Subject: [PATCH 81/98] =?UTF-8?q?fix(order):=20Consumer=20=EB=B9=84?= =?UTF-8?q?=ED=99=9C=EC=84=B1=20=EC=8B=9C=20Redis=20=EC=9E=AC=EC=8B=9C?= =?UTF-8?q?=EB=8F=84=20=EC=A4=91=EC=A7=80?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../dropit/order/service/OrderRedisSyncRetryScheduler.java | 6 ++++++ 1 file changed, 6 insertions(+) diff --git a/src/main/java/com/dropit/order/service/OrderRedisSyncRetryScheduler.java b/src/main/java/com/dropit/order/service/OrderRedisSyncRetryScheduler.java index ec3f70c..f6ba4a5 100644 --- a/src/main/java/com/dropit/order/service/OrderRedisSyncRetryScheduler.java +++ b/src/main/java/com/dropit/order/service/OrderRedisSyncRetryScheduler.java @@ -4,6 +4,7 @@ import com.dropit.order.repository.OrderRequestRepository; import lombok.RequiredArgsConstructor; import lombok.extern.slf4j.Slf4j; +import org.springframework.boot.autoconfigure.condition.ConditionalOnProperty; import org.springframework.scheduling.annotation.Scheduled; import org.springframework.stereotype.Component; import java.time.Duration; @@ -11,6 +12,11 @@ @Slf4j @Component +@ConditionalOnProperty( + prefix = "app.order.sqs", + name = "consumer-enabled", + havingValue = "true" +) @RequiredArgsConstructor public class OrderRedisSyncRetryScheduler { From 0b54d206c7b8bb7a796030b19f8de04fb28729e4 Mon Sep 17 00:00:00 2001 From: Sooyoung Yoon Date: Mon, 14 Sep 2026 00:58:48 +0900 Subject: [PATCH 82/98] =?UTF-8?q?chore(performance):=20Compose=20k6=20?= =?UTF-8?q?=EC=8B=A4=ED=96=89=20=ED=99=98=EA=B2=BD=20=EC=B6=94=EA=B0=80?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- performance/compose.performance.yml | 20 +++++++++++++++++++- 1 file changed, 19 insertions(+), 1 deletion(-) diff --git a/performance/compose.performance.yml b/performance/compose.performance.yml index 2c99920..feaef03 100644 --- a/performance/compose.performance.yml +++ b/performance/compose.performance.yml @@ -16,7 +16,7 @@ services: retries: 10 grafana: - image: grafana/grafana:latest + image: grafana/grafana:12.4.10 environment: GF_AUTH_ANONYMOUS_ENABLED: "true" GF_AUTH_ANONYMOUS_ORG_ROLE: Viewer @@ -31,6 +31,24 @@ services: influxdb: condition: service_healthy + k6: + image: grafana/k6:1.7.1 + profiles: ["load"] + environment: + K6_OUT: influxdb=http://influxdb:8086/k6 + BASE_URL: ${BASE_URL:-http://host.docker.internal:8080} + TEST_RUN: ${TEST_RUN:-order-flow-smoke} + AUTH_TOKEN: ${AUTH_TOKEN:-} + volumes: + - ./k6:/scripts:ro + - ./results/raw:/results + depends_on: + influxdb: + condition: service_healthy + entrypoint: ["k6"] + command: ["run", "/scripts/${K6_SCRIPT:-drop-list-index.js}"] + restart: "no" + volumes: influxdb-data: grafana-data: From 9c0a7dd811be2c002ea5daf570b17c3008c76578 Mon Sep 17 00:00:00 2001 From: Sooyoung Yoon Date: Mon, 14 Sep 2026 01:09:48 +0900 Subject: [PATCH 83/98] =?UTF-8?q?chore(performance):=20k6=20smoke=20?= =?UTF-8?q?=EC=8B=A4=ED=96=89=20=EB=AA=85=EB=A0=B9=20=EC=B6=94=EA=B0=80?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- build.gradle | 39 +++++++++++++++++++++++ performance/compose.performance.yml | 9 ++++-- performance/k6/performance-stack-smoke.js | 37 +++++++++++++++++++++ 3 files changed, 83 insertions(+), 2 deletions(-) create mode 100644 performance/k6/performance-stack-smoke.js diff --git a/build.gradle b/build.gradle index e7dfa32..aa123ee 100644 --- a/build.gradle +++ b/build.gradle @@ -174,3 +174,42 @@ tasks.register('dbDown', Exec) { description = '로컬 DB 컨테이너를 종료합니다.' commandLine 'docker', 'compose', '--env-file', '.env.local', 'down' } + +def performanceComposeFile = file('performance/compose.performance.yml') +def performanceRawResultDirectory = file('performance/results/raw') + +tasks.register('performanceUp', Exec) { + group = 'verification' + description = '성능 관측용 InfluxDB와 Grafana를 실행합니다.' + commandLine 'docker', 'compose', '--file', performanceComposeFile, + 'up', '--detach', '--wait', 'influxdb', 'grafana' +} + +tasks.register('performanceSmoke', Exec) { + group = 'verification' + description = 'k6가 성능 관측 스택에 지표와 JSON 결과를 기록하는지 확인합니다.' + dependsOn(tasks.named('performanceUp')) + + doFirst { + performanceRawResultDirectory.mkdirs() + } + + environment 'BASE_URL', 'http://influxdb:8086' + environment 'TEST_RUN', 'performance-stack-smoke' + environment 'K6_SCRIPT', 'performance-stack-smoke.js' + commandLine 'docker', 'compose', '--file', performanceComposeFile, + '--profile', 'load', 'run', '--rm', 'k6' + + doLast { + File summary = new File(performanceRawResultDirectory, 'performance-stack-smoke.json') + if (!summary.isFile() || summary.length() == 0) { + throw new GradleException("k6 smoke 결과가 생성되지 않았습니다: ${summary}") + } + } +} + +tasks.register('performanceDown', Exec) { + group = 'verification' + description = '성능 관측용 컨테이너와 네트워크를 종료합니다.' + commandLine 'docker', 'compose', '--file', performanceComposeFile, 'down' +} diff --git a/performance/compose.performance.yml b/performance/compose.performance.yml index feaef03..7d9d3e5 100644 --- a/performance/compose.performance.yml +++ b/performance/compose.performance.yml @@ -2,7 +2,7 @@ name: dropit-performance services: influxdb: - image: influxdb:1.8-alpine + image: influxdb:1.8.10 environment: INFLUXDB_DB: k6 ports: @@ -10,7 +10,7 @@ services: volumes: - influxdb-data:/var/lib/influxdb healthcheck: - test: ["CMD", "wget", "--spider", "-q", "http://localhost:8086/ping"] + test: ["CMD", "curl", "--fail", "http://localhost:8086/ping"] interval: 5s timeout: 3s retries: 10 @@ -30,6 +30,11 @@ services: depends_on: influxdb: condition: service_healthy + healthcheck: + test: ["CMD", "wget", "--spider", "-q", "http://localhost:3000/api/health"] + interval: 5s + timeout: 3s + retries: 20 k6: image: grafana/k6:1.7.1 diff --git a/performance/k6/performance-stack-smoke.js b/performance/k6/performance-stack-smoke.js new file mode 100644 index 0000000..fcef2b3 --- /dev/null +++ b/performance/k6/performance-stack-smoke.js @@ -0,0 +1,37 @@ +import http from 'k6/http'; +import { check } from 'k6'; + +const baseUrl = __ENV.BASE_URL; +const testRun = __ENV.TEST_RUN || 'performance-stack-smoke'; + +if (!baseUrl) { + throw new Error('BASE_URL is required.'); +} + +export const options = { + vus: 1, + iterations: 1, + thresholds: { + checks: ['rate==1'], + http_req_failed: ['rate==0'], + }, +}; + +export default function () { + const response = http.get(`${baseUrl}/ping`, { + tags: { + endpoint: 'performance-stack-ping', + test_run: testRun, + }, + }); + + check(response, { + 'InfluxDB ping 응답이 204이다': (result) => result.status === 204, + }); +} + +export function handleSummary(data) { + return { + [`/results/${testRun}.json`]: JSON.stringify(data, null, 2), + }; +} From 8bfa23e4567ccd95e56a531e648e93c5da59b722 Mon Sep 17 00:00:00 2001 From: Hyiyek Date: Mon, 14 Sep 2026 08:51:51 +0900 Subject: [PATCH 84/98] =?UTF-8?q?perf(drop):=20=EC=BA=90=EC=8B=9C=20?= =?UTF-8?q?=EC=A0=81=EC=A4=91=20=EC=A1=B0=ED=9A=8C=EC=9D=98=20DB=20?= =?UTF-8?q?=ED=8A=B8=EB=9E=9C=EC=9E=AD=EC=85=98=20=EC=A0=9C=EA=B1=B0?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- src/main/java/com/dropit/drop/repository/DropRepository.java | 2 ++ src/main/java/com/dropit/drop/service/DropService.java | 1 - 2 files changed, 2 insertions(+), 1 deletion(-) diff --git a/src/main/java/com/dropit/drop/repository/DropRepository.java b/src/main/java/com/dropit/drop/repository/DropRepository.java index 4bd3983..40fb9a2 100644 --- a/src/main/java/com/dropit/drop/repository/DropRepository.java +++ b/src/main/java/com/dropit/drop/repository/DropRepository.java @@ -7,6 +7,7 @@ import org.springframework.data.jpa.repository.Query; import org.springframework.data.repository.query.Param; import org.springframework.data.jpa.repository.JpaRepository; +import org.springframework.transaction.annotation.Transactional; import jakarta.persistence.LockModeType; @@ -14,6 +15,7 @@ public interface DropRepository extends JpaRepository, DropRepositoryCustom { + @Transactional(readOnly = true) @Query(""" select d from Drop d diff --git a/src/main/java/com/dropit/drop/service/DropService.java b/src/main/java/com/dropit/drop/service/DropService.java index 0e1cfc7..01531d7 100644 --- a/src/main/java/com/dropit/drop/service/DropService.java +++ b/src/main/java/com/dropit/drop/service/DropService.java @@ -65,7 +65,6 @@ public Page getAll( return drops.map(DropResponse::from); } - @Transactional(readOnly = true) @Cacheable(cacheNames = RedisCacheConfig.DROP_DETAIL_CACHE, key = "#dropId", sync = true) public DropResponse getOne(Long dropId) { Drop drop = dropRepository.findDetailById(dropId) From 94dc32026cdd5932186945ba65cc762f21431090 Mon Sep 17 00:00:00 2001 From: Hyiyek Date: Mon, 14 Sep 2026 08:59:24 +0900 Subject: [PATCH 85/98] =?UTF-8?q?test(performance):=20=EB=8F=99=EC=8B=9C?= =?UTF-8?q?=20=EC=A1=B0=ED=9A=8C=20=EC=B5=9C=EC=A0=81=ED=99=94=20=EB=8B=A8?= =?UTF-8?q?=EA=B3=84=20=EB=B6=84=EB=A6=AC?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- performance/start-drop-detail-concurrent-test.ps1 | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/performance/start-drop-detail-concurrent-test.ps1 b/performance/start-drop-detail-concurrent-test.ps1 index 6bcb61b..d481671 100644 --- a/performance/start-drop-detail-concurrent-test.ps1 +++ b/performance/start-drop-detail-concurrent-test.ps1 @@ -1,6 +1,6 @@ param( [Parameter(Mandatory = $true)] - [ValidateSet('Before', 'After')] + [ValidateSet('Before', 'After', 'Optimized')] [string]$Phase, [Parameter(Mandatory = $true)] From a662968d9f912105faef1f1514d18a66787a5d9e Mon Sep 17 00:00:00 2001 From: Hyiyek Date: Mon, 14 Sep 2026 09:10:32 +0900 Subject: [PATCH 86/98] =?UTF-8?q?feat(monitoring):=20Drop=201=EB=A7=8C?= =?UTF-8?q?=EB=AA=85=20=EB=8F=99=EC=8B=9C=20=EC=A1=B0=ED=9A=8C=20=EB=B9=84?= =?UTF-8?q?=EA=B5=90=20=EB=8C=80=EC=8B=9C=EB=B3=B4=EB=93=9C=20=EC=B6=94?= =?UTF-8?q?=EA=B0=80?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../drop-detail-concurrent-comparison.json | 546 ++++++++++++++++++ ...publish-drop-detail-concurrent-summary.ps1 | 55 ++ 2 files changed, 601 insertions(+) create mode 100644 performance/grafana/dashboards/drop-detail-concurrent-comparison.json create mode 100644 performance/publish-drop-detail-concurrent-summary.ps1 diff --git a/performance/grafana/dashboards/drop-detail-concurrent-comparison.json b/performance/grafana/dashboards/drop-detail-concurrent-comparison.json new file mode 100644 index 0000000..a0c8edb --- /dev/null +++ b/performance/grafana/dashboards/drop-detail-concurrent-comparison.json @@ -0,0 +1,546 @@ +{ + "annotations": { + "list": [] + }, + "description": "One Drop detail requested once by each of 10,000 concurrent virtual users", + "editable": true, + "graphTooltip": 0, + "panels": [ + { + "datasource": { + "type": "influxdb", + "uid": "k6-influxdb" + }, + "fieldConfig": { + "defaults": { + "decimals": 2, + "unit": "ms" + }, + "overrides": [] + }, + "gridPos": { + "h": 5, + "w": 8, + "x": 0, + "y": 0 + }, + "id": 1, + "options": { + "colorMode": "value", + "graphMode": "none", + "justifyMode": "center", + "reduceOptions": { + "calcs": [ + "lastNotNull" + ], + "fields": "", + "values": false + }, + "textMode": "auto" + }, + "targets": [ + { + "query": "SELECT last(\"avg_ms\") FROM \"drop_detail_concurrent_summary\" WHERE (\"stage\" = 'before') AND $timeFilter", + "rawQuery": true, + "refId": "A", + "resultFormat": "time_series" + } + ], + "title": "Before - 1 app · Average latency", + "type": "stat" + }, + { + "datasource": { + "type": "influxdb", + "uid": "k6-influxdb" + }, + "fieldConfig": { + "defaults": { + "decimals": 2, + "unit": "ms" + }, + "overrides": [] + }, + "gridPos": { + "h": 5, + "w": 8, + "x": 8, + "y": 0 + }, + "id": 2, + "options": { + "colorMode": "value", + "graphMode": "none", + "justifyMode": "center", + "reduceOptions": { + "calcs": [ + "lastNotNull" + ], + "fields": "", + "values": false + }, + "textMode": "auto" + }, + "targets": [ + { + "query": "SELECT last(\"avg_ms\") FROM \"drop_detail_concurrent_summary\" WHERE (\"stage\" = 'after') AND $timeFilter", + "rawQuery": true, + "refId": "A", + "resultFormat": "time_series" + } + ], + "title": "After - 4 apps · Average latency", + "type": "stat" + }, + { + "datasource": { + "type": "influxdb", + "uid": "k6-influxdb" + }, + "fieldConfig": { + "defaults": { + "decimals": 2, + "unit": "ms" + }, + "overrides": [] + }, + "gridPos": { + "h": 5, + "w": 8, + "x": 16, + "y": 0 + }, + "id": 3, + "options": { + "colorMode": "value", + "graphMode": "none", + "justifyMode": "center", + "reduceOptions": { + "calcs": [ + "lastNotNull" + ], + "fields": "", + "values": false + }, + "textMode": "auto" + }, + "targets": [ + { + "query": "SELECT last(\"avg_ms\") FROM \"drop_detail_concurrent_summary\" WHERE (\"stage\" = 'optimized') AND $timeFilter", + "rawQuery": true, + "refId": "A", + "resultFormat": "time_series" + } + ], + "title": "Optimized - no DB transaction on cache hit · Average latency", + "type": "stat" + }, + { + "datasource": { + "type": "influxdb", + "uid": "k6-influxdb" + }, + "fieldConfig": { + "defaults": { + "decimals": 2, + "unit": "ms" + }, + "overrides": [] + }, + "gridPos": { + "h": 5, + "w": 8, + "x": 0, + "y": 5 + }, + "id": 4, + "options": { + "colorMode": "value", + "graphMode": "none", + "justifyMode": "center", + "reduceOptions": { + "calcs": [ + "lastNotNull" + ], + "fields": "", + "values": false + }, + "textMode": "auto" + }, + "targets": [ + { + "query": "SELECT last(\"p95_ms\") FROM \"drop_detail_concurrent_summary\" WHERE (\"stage\" = 'before') AND $timeFilter", + "rawQuery": true, + "refId": "A", + "resultFormat": "time_series" + } + ], + "title": "Before - 1 app · p95 latency", + "type": "stat" + }, + { + "datasource": { + "type": "influxdb", + "uid": "k6-influxdb" + }, + "fieldConfig": { + "defaults": { + "decimals": 2, + "unit": "ms" + }, + "overrides": [] + }, + "gridPos": { + "h": 5, + "w": 8, + "x": 8, + "y": 5 + }, + "id": 5, + "options": { + "colorMode": "value", + "graphMode": "none", + "justifyMode": "center", + "reduceOptions": { + "calcs": [ + "lastNotNull" + ], + "fields": "", + "values": false + }, + "textMode": "auto" + }, + "targets": [ + { + "query": "SELECT last(\"p95_ms\") FROM \"drop_detail_concurrent_summary\" WHERE (\"stage\" = 'after') AND $timeFilter", + "rawQuery": true, + "refId": "A", + "resultFormat": "time_series" + } + ], + "title": "After - 4 apps · p95 latency", + "type": "stat" + }, + { + "datasource": { + "type": "influxdb", + "uid": "k6-influxdb" + }, + "fieldConfig": { + "defaults": { + "decimals": 2, + "unit": "ms" + }, + "overrides": [] + }, + "gridPos": { + "h": 5, + "w": 8, + "x": 16, + "y": 5 + }, + "id": 6, + "options": { + "colorMode": "value", + "graphMode": "none", + "justifyMode": "center", + "reduceOptions": { + "calcs": [ + "lastNotNull" + ], + "fields": "", + "values": false + }, + "textMode": "auto" + }, + "targets": [ + { + "query": "SELECT last(\"p95_ms\") FROM \"drop_detail_concurrent_summary\" WHERE (\"stage\" = 'optimized') AND $timeFilter", + "rawQuery": true, + "refId": "A", + "resultFormat": "time_series" + } + ], + "title": "Optimized - no DB transaction on cache hit · p95 latency", + "type": "stat" + }, + { + "datasource": { + "type": "influxdb", + "uid": "k6-influxdb" + }, + "fieldConfig": { + "defaults": { + "decimals": 2, + "unit": "percentunit" + }, + "overrides": [] + }, + "gridPos": { + "h": 5, + "w": 8, + "x": 0, + "y": 10 + }, + "id": 7, + "options": { + "colorMode": "value", + "graphMode": "none", + "justifyMode": "center", + "reduceOptions": { + "calcs": [ + "lastNotNull" + ], + "fields": "", + "values": false + }, + "textMode": "auto" + }, + "targets": [ + { + "query": "SELECT last(\"success_rate\") FROM \"drop_detail_concurrent_summary\" WHERE (\"stage\" = 'before') AND $timeFilter", + "rawQuery": true, + "refId": "A", + "resultFormat": "time_series" + } + ], + "title": "Before - 1 app · Success rate", + "type": "stat" + }, + { + "datasource": { + "type": "influxdb", + "uid": "k6-influxdb" + }, + "fieldConfig": { + "defaults": { + "decimals": 2, + "unit": "percentunit" + }, + "overrides": [] + }, + "gridPos": { + "h": 5, + "w": 8, + "x": 8, + "y": 10 + }, + "id": 8, + "options": { + "colorMode": "value", + "graphMode": "none", + "justifyMode": "center", + "reduceOptions": { + "calcs": [ + "lastNotNull" + ], + "fields": "", + "values": false + }, + "textMode": "auto" + }, + "targets": [ + { + "query": "SELECT last(\"success_rate\") FROM \"drop_detail_concurrent_summary\" WHERE (\"stage\" = 'after') AND $timeFilter", + "rawQuery": true, + "refId": "A", + "resultFormat": "time_series" + } + ], + "title": "After - 4 apps · Success rate", + "type": "stat" + }, + { + "datasource": { + "type": "influxdb", + "uid": "k6-influxdb" + }, + "fieldConfig": { + "defaults": { + "decimals": 2, + "unit": "percentunit" + }, + "overrides": [] + }, + "gridPos": { + "h": 5, + "w": 8, + "x": 16, + "y": 10 + }, + "id": 9, + "options": { + "colorMode": "value", + "graphMode": "none", + "justifyMode": "center", + "reduceOptions": { + "calcs": [ + "lastNotNull" + ], + "fields": "", + "values": false + }, + "textMode": "auto" + }, + "targets": [ + { + "query": "SELECT last(\"success_rate\") FROM \"drop_detail_concurrent_summary\" WHERE (\"stage\" = 'optimized') AND $timeFilter", + "rawQuery": true, + "refId": "A", + "resultFormat": "time_series" + } + ], + "title": "Optimized - no DB transaction on cache hit · Success rate", + "type": "stat" + }, + { + "datasource": { + "type": "influxdb", + "uid": "k6-influxdb" + }, + "fieldConfig": { + "defaults": { + "decimals": 2, + "unit": "s" + }, + "overrides": [] + }, + "gridPos": { + "h": 5, + "w": 8, + "x": 0, + "y": 15 + }, + "id": 10, + "options": { + "colorMode": "value", + "graphMode": "none", + "justifyMode": "center", + "reduceOptions": { + "calcs": [ + "lastNotNull" + ], + "fields": "", + "values": false + }, + "textMode": "auto" + }, + "targets": [ + { + "query": "SELECT last(\"duration_seconds\") FROM \"drop_detail_concurrent_summary\" WHERE (\"stage\" = 'before') AND $timeFilter", + "rawQuery": true, + "refId": "A", + "resultFormat": "time_series" + } + ], + "title": "Before - 1 app · Total test duration", + "type": "stat" + }, + { + "datasource": { + "type": "influxdb", + "uid": "k6-influxdb" + }, + "fieldConfig": { + "defaults": { + "decimals": 2, + "unit": "s" + }, + "overrides": [] + }, + "gridPos": { + "h": 5, + "w": 8, + "x": 8, + "y": 15 + }, + "id": 11, + "options": { + "colorMode": "value", + "graphMode": "none", + "justifyMode": "center", + "reduceOptions": { + "calcs": [ + "lastNotNull" + ], + "fields": "", + "values": false + }, + "textMode": "auto" + }, + "targets": [ + { + "query": "SELECT last(\"duration_seconds\") FROM \"drop_detail_concurrent_summary\" WHERE (\"stage\" = 'after') AND $timeFilter", + "rawQuery": true, + "refId": "A", + "resultFormat": "time_series" + } + ], + "title": "After - 4 apps · Total test duration", + "type": "stat" + }, + { + "datasource": { + "type": "influxdb", + "uid": "k6-influxdb" + }, + "fieldConfig": { + "defaults": { + "decimals": 2, + "unit": "s" + }, + "overrides": [] + }, + "gridPos": { + "h": 5, + "w": 8, + "x": 16, + "y": 15 + }, + "id": 12, + "options": { + "colorMode": "value", + "graphMode": "none", + "justifyMode": "center", + "reduceOptions": { + "calcs": [ + "lastNotNull" + ], + "fields": "", + "values": false + }, + "textMode": "auto" + }, + "targets": [ + { + "query": "SELECT last(\"duration_seconds\") FROM \"drop_detail_concurrent_summary\" WHERE (\"stage\" = 'optimized') AND $timeFilter", + "rawQuery": true, + "refId": "A", + "resultFormat": "time_series" + } + ], + "title": "Optimized - no DB transaction on cache hit · Total test duration", + "type": "stat" + } + ], + "refresh": "10s", + "schemaVersion": 41, + "tags": [ + "k6", + "drop", + "concurrent", + "10000-vu", + "before-after" + ], + "templating": { + "list": [] + }, + "time": { + "from": "now-7d", + "to": "now" + }, + "timezone": "browser", + "title": "Drop Detail 10K Concurrent Comparison", + "uid": "drop-detail-10k-concurrent", + "version": 1 +} diff --git a/performance/publish-drop-detail-concurrent-summary.ps1 b/performance/publish-drop-detail-concurrent-summary.ps1 new file mode 100644 index 0000000..b72daf8 --- /dev/null +++ b/performance/publish-drop-detail-concurrent-summary.ps1 @@ -0,0 +1,55 @@ +param( + [string]$InfluxUrl = 'http://localhost:8086', + [string]$Database = 'k6' +) + +$ErrorActionPreference = 'Stop' + +$performanceDirectory = Split-Path -Parent $MyInvocation.MyCommand.Path +$rawDirectory = Join-Path $performanceDirectory 'results\raw' +$stages = @('before', 'after', 'optimized') +$points = @() +$timestamp = [DateTimeOffset]::UtcNow.ToUnixTimeMilliseconds() * 1000000 + +foreach ($stage in $stages) { + $resultPath = Join-Path $rawDirectory "drop-detail-concurrent-$stage-10000-vu.json" + + if (-not (Test-Path -LiteralPath $resultPath)) { + throw "k6 summary is missing: $resultPath" + } + + $summary = Get-Content -LiteralPath $resultPath -Raw | ConvertFrom-Json + $metrics = $summary.metrics + $duration = $metrics.'http_req_duration{endpoint:drop-detail}'.values + $failure = $metrics.'http_req_failed{endpoint:drop-detail}'.values.rate + $success = $metrics.checks.values.rate + $requests = $metrics.iterations.values.count + $durationSeconds = $summary.state.testRunDurationMs / 1000 + + $fields = @( + "concurrent_users=10000i", + "requests=${requests}i", + "avg_ms=$($duration.avg)", + "p95_ms=$($duration.'p(95)')", + "max_ms=$($duration.max)", + "failure_rate=$failure", + "success_rate=$success", + "duration_seconds=$durationSeconds" + ) -join ',' + + $points += "drop_detail_concurrent_summary,stage=$stage $fields $timestamp" + $timestamp++ +} + +$dropQuery = [Uri]::EscapeDataString('DROP MEASUREMENT drop_detail_concurrent_summary') +Invoke-RestMethod ` + -Uri "$InfluxUrl/query?db=$Database&q=$dropQuery" ` + -Method Post | Out-Null + +Invoke-RestMethod ` + -Uri "$InfluxUrl/write?db=$Database&precision=ns" ` + -Method Post ` + -ContentType 'text/plain' ` + -Body ($points -join "`n") | Out-Null + +Write-Host 'Published exact k6 JSON summaries for Before, After, and Optimized.' From a7af92393cf837f3bffdbf3962c6e99a32c83430 Mon Sep 17 00:00:00 2001 From: Hyiyek Date: Mon, 14 Sep 2026 09:10:45 +0900 Subject: [PATCH 87/98] =?UTF-8?q?docs(performance):=20Drop=201=EB=A7=8C?= =?UTF-8?q?=EB=AA=85=20=EB=8F=99=EC=8B=9C=20=EC=A1=B0=ED=9A=8C=20=EA=B0=9C?= =?UTF-8?q?=EC=84=A0=20=EA=B2=B0=EA=B3=BC=20=EC=A0=95=EB=A6=AC?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../results/drop-detail-concurrent/README.md | 123 ++++++++++++++++++ .../drop-detail-concurrent/comparison.png | Bin 0 -> 56794 bytes .../grafana-10k-concurrent-comparison.png | Bin 0 -> 140598 bytes 3 files changed, 123 insertions(+) create mode 100644 performance/results/drop-detail-concurrent/README.md create mode 100644 performance/results/drop-detail-concurrent/comparison.png create mode 100644 performance/results/drop-detail-concurrent/grafana-10k-concurrent-comparison.png diff --git a/performance/results/drop-detail-concurrent/README.md b/performance/results/drop-detail-concurrent/README.md new file mode 100644 index 0000000..24e192b --- /dev/null +++ b/performance/results/drop-detail-concurrent/README.md @@ -0,0 +1,123 @@ +# Drop 상세 1만 명 동시 조회 개선 결과 + +## 테스트 목적 + +한정판 판매 시작 시각에 사용자가 같은 상품 화면으로 동시에 들어오는 상황을 재현했다. 가상 사용자 10,000명이 `GET /drops/{dropId}`를 한 번씩 호출하고, 한 서버가 요청을 감당하지 못하는 상태부터 서버 분산과 DB 연결 개선까지 같은 조건으로 비교했다. + +프론트 화면에서는 사용자가 한정판 상품의 가격, 남은 수량, 할인율, 판매 시간을 확인하려고 **같은 Drop 상세 페이지를 동시에 새로 여는 상황**이다. + +## 고정한 조건 + +| 항목 | 조건 | +|---|---| +| 대상 API | `GET /drops/1261706` | +| 가상 사용자 | 10,000 VU | +| 사용자 행동 | 각 VU가 상세 조회 1회 실행 | +| 캐시 | Redis Warm Cache, TTL 3초 | +| 애플리케이션 | Java 21, Spring Boot, 가상 스레드 | +| 서버 자원 | 컨테이너당 메모리 768MB, JVM Heap 512MB | +| 실행 환경 | 로컬 Windows Docker, CPU 12개, Docker 메모리 약 7.7GB | +| 계정 | JWT 한 개를 10,000 VU가 공유 | + +## 단계별 구조 + +```text +Before +k6 10,000명 → Spring 1대 → Redis → MySQL + +After +k6 10,000명 → Nginx → Spring 4대 → Redis → MySQL + +Optimized +k6 10,000명 → Nginx → Spring 4대 + ├─ 캐시 적중: Redis 응답 후 종료 + └─ 캐시 미스: 짧은 Repository 읽기 트랜잭션 → MySQL +``` + +## 측정 결과 + +| 지표 | Before: 1대 | After: 4대 분산 | Optimized: DB 연결 개선 | +|---|---:|---:|---:| +| 실행 요청 | 10,000건 | 10,000건 | 10,000건 | +| 성공률 | 21.73% | **100%** | **100%** | +| 실패율 | 78.27% | **0%** | **0%** | +| 평균 응답 시간 | 53.36초 | **16.60초** | 21.38초 | +| p95 응답 시간 | 59.95초 | 36.32초 | **32.28초** | +| 최대 응답 시간 | 59.96초 | 37.04초 | **35.06초** | +| 테스트 전체 완료 시간 | 62.94초 | 42.83초 | **39.23초** | +| Hikari 연결 타임아웃 | 발생 | 발생 | **0건** | + +![1만 명 동시 조회 비교](./comparison.png) + +![Grafana 3단계 비교](./grafana-10k-concurrent-comparison.png) + +## 어떤 코드가 병목을 줄였는가 + +기존 `DropService.getOne()`에는 캐시와 읽기 전용 트랜잭션이 함께 선언되어 있었다. + +```java +@Transactional(readOnly = true) +@Cacheable(cacheNames = RedisCacheConfig.DROP_DETAIL_CACHE, key = "#dropId", sync = true) +public DropResponse getOne(Long dropId) { + // DB 조회 후 응답 생성 +} +``` + +부하 로그에서 Hikari 연결 10개가 모두 사용되어 최대 36초 동안 연결을 기다리는 현상을 확인했다. Redis에 응답이 있어도 서비스 트랜잭션이 먼저 열리면서 DB 연결을 점유했기 때문이다. + +서비스의 트랜잭션을 제거하고, 실제 DB 조회가 필요한 Repository 메서드로 읽기 전용 트랜잭션 범위를 줄였다. + +```java +@Cacheable(cacheNames = RedisCacheConfig.DROP_DETAIL_CACHE, key = "#dropId", sync = true) +public DropResponse getOne(Long dropId) { + // 캐시 적중 시 DB 트랜잭션 없이 바로 반환 +} + +@Transactional(readOnly = true) +Optional findDetailById(Long dropId); +``` + +그 결과 캐시 적중 요청은 Hikari 연결을 사용하지 않고, 캐시 미스만 Repository 조회 중에 DB 연결을 사용한다. 최적화 후 네 서버의 Hikari 연결 타임아웃은 모두 0건이었다. + +## 결과 해석 + +- 서버 1대에서는 10,000건 중 7,827건이 60초 타임아웃으로 실패했다. +- 4대 분산 후 모든 요청이 성공했고, Before 대비 p95가 약 39.4% 감소했다. +- DB 연결 범위를 줄인 뒤 p95는 36.32초에서 32.28초로 약 11.1%, 전체 완료 시간은 약 8.4% 추가 감소했다. +- 마지막 단계의 평균은 16.60초에서 21.38초로 증가했다. 단일 로컬 장비에서 k6, 4개 JVM, Nginx, Redis, MySQL, InfluxDB를 함께 실행한 측정 편차가 크므로 평균 개선으로 주장하지 않는다. +- 최종 p95 32.28초는 목표 2초에 미달한다. DB 연결 풀 고갈은 제거됐고 다음 병목은 한 장비의 CPU·메모리와 동시에 생성되는 10,000개 연결이다. + +## 재현 방법 + +```powershell +# 4대 Spring 서버와 Nginx 시작 +powershell.exe -NoProfile -ExecutionPolicy Bypass ` + -File .\performance\start-drop-detail-cluster.ps1 + +# 1만 명 동시 조회 실행 +powershell.exe -NoProfile -ExecutionPolicy Bypass ` + -File .\performance\start-drop-detail-concurrent-test.ps1 ` + -Phase Optimized -DropId 1261706 -ConcurrentUsers 10000 ` + -CacheMode Warm ` + -TargetBaseUrl http://dropit-performance-gateway:8080 + +# JSON 최종 통계를 Grafana 비교용 InfluxDB 측정값으로 발행 +powershell.exe -NoProfile -ExecutionPolicy Bypass ` + -File .\performance\publish-drop-detail-concurrent-summary.ps1 +``` + +Grafana 주소는 `http://localhost:3000/d/drop-detail-10k-concurrent/drop-detail-10k-concurrent-comparison`이다. + +## 측정 한계와 다음 실험 + +- 한 번의 로컬 측정이므로 운영 환경 처리량으로 해석하지 않는다. +- 10,000 VU가 같은 JWT를 사용했다. 10,000개 실제 계정의 서로 다른 JWT 검증 비용은 별도 실험이 필요하다. +- 1만 동시 사용자는 누적 조회 1억 건과 다른 지표다. 1억 건은 장시간 지속 부하와 비용을 확인하는 Soak Test로 분리해야 한다. +- 다음 단계는 별도 부하 발생기와 여러 서버 장비를 사용하는 분산 k6, 애플리케이션 CPU·GC·Hikari 활성 연결 모니터링, 목표 RPS 기준 용량 산정이다. + +## 검증 + +- Drop 관련 테스트 61개 통과 +- 실패 0개, 오류 0개 +- 세 단계 모두 k6 iteration 10,000건 완료 +- Optimized 단계 HTTP 실패율 0%, 응답 검증 성공률 100% diff --git a/performance/results/drop-detail-concurrent/comparison.png b/performance/results/drop-detail-concurrent/comparison.png new file mode 100644 index 0000000000000000000000000000000000000000..5a91aa9787de78ff2afbcbb6a176147a11ed5ba9 GIT binary patch literal 56794 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°V{qLne0TT_-JdEbF>@4tD=^e7rbfOj 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 literal 0 HcmV?d00001 diff --git a/performance/results/drop-detail-concurrent/grafana-10k-concurrent-comparison.png b/performance/results/drop-detail-concurrent/grafana-10k-concurrent-comparison.png new file mode 100644 index 0000000000000000000000000000000000000000..e95f33b098ee7b2ea13293c4e65c37586eff2544 GIT binary patch literal 140598 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�=ld(>QmjWvs}QkN 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
  • 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 Date: Mon, 14 Sep 2026 11:19:36 +0900 Subject: [PATCH 88/98] =?UTF-8?q?fix(drop):=20visibility=20=EB=B3=80?= =?UTF-8?q?=EA=B2=BD=20=EC=8B=9C=20=EC=83=81=EC=84=B8=20=EC=BA=90=EC=8B=9C?= =?UTF-8?q?=20=EB=AC=B4=ED=9A=A8=ED=99=94?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../drop/service/DropVisibilityService.java | 3 + .../service/DropCacheIntegrationTest.java | 88 +++++++++++++++++-- 2 files changed, 85 insertions(+), 6 deletions(-) diff --git a/src/main/java/com/dropit/drop/service/DropVisibilityService.java b/src/main/java/com/dropit/drop/service/DropVisibilityService.java index 8ac95f9..665d92f 100644 --- a/src/main/java/com/dropit/drop/service/DropVisibilityService.java +++ b/src/main/java/com/dropit/drop/service/DropVisibilityService.java @@ -7,10 +7,12 @@ import com.dropit.drop.entity.Drop; import com.dropit.drop.exception.DropErrorCode; import com.dropit.drop.repository.DropRepository; +import com.dropit.global.config.RedisCacheConfig; import com.dropit.global.exception.ServiceException; import com.dropit.order.repository.DropUserPurchaseRepository; import com.dropit.order.repository.OrderItemRepository; import lombok.RequiredArgsConstructor; +import org.springframework.cache.annotation.CacheEvict; import org.springframework.stereotype.Service; import org.springframework.transaction.support.TransactionTemplate; @@ -27,6 +29,7 @@ public class DropVisibilityService { private final DropSaleCacheWriter cacheWriter; private final TransactionTemplate transactionTemplate; + @CacheEvict(cacheNames = RedisCacheConfig.DROP_DETAIL_CACHE, key = "#dropId", beforeInvocation = true) public DropResponse changeVisibility(Long sellerId, Long dropId, DropVisibilityUpdateRequest request) { ChangeResult result = transactionTemplate.execute(status -> changeInTransaction(sellerId, dropId, request)); if (result == null) { diff --git a/src/test/java/com/dropit/drop/service/DropCacheIntegrationTest.java b/src/test/java/com/dropit/drop/service/DropCacheIntegrationTest.java index 4f30829..aeae660 100644 --- a/src/test/java/com/dropit/drop/service/DropCacheIntegrationTest.java +++ b/src/test/java/com/dropit/drop/service/DropCacheIntegrationTest.java @@ -1,22 +1,37 @@ package com.dropit.drop.service; +import com.dropit.drop.cache.DropSaleCacheWriter; import com.dropit.drop.dto.request.DropVisibilityUpdateRequest; import com.dropit.drop.dto.response.DropResponse; import com.dropit.drop.entity.Drop; import com.dropit.drop.repository.DropRepository; import com.dropit.global.config.RedisCacheConfig; -import com.dropit.global.storage.S3ImageService; +import com.dropit.global.exception.ServiceException; +import com.dropit.order.repository.DropUserPurchaseRepository; +import com.dropit.order.repository.OrderItemRepository; import com.dropit.product.entity.Product; +import com.dropit.product.repository.ProductRepository; import com.dropit.user.entity.User; import com.dropit.user.entity.UserRole; +import org.junit.jupiter.api.AfterAll; import org.junit.jupiter.api.BeforeEach; import org.junit.jupiter.api.Test; import org.springframework.beans.factory.annotation.Autowired; -import org.springframework.boot.test.context.SpringBootTest; +import org.springframework.boot.test.context.TestConfiguration; import org.springframework.cache.Cache; import org.springframework.cache.CacheManager; +import org.springframework.context.annotation.Bean; +import org.springframework.context.annotation.Import; +import org.springframework.data.redis.connection.RedisConnectionFactory; +import org.springframework.data.redis.connection.lettuce.LettuceConnectionFactory; +import org.springframework.test.context.junit.jupiter.SpringJUnitConfig; import org.springframework.test.context.bean.override.mockito.MockitoBean; import org.springframework.test.util.ReflectionTestUtils; +import org.springframework.transaction.TransactionStatus; +import org.springframework.transaction.support.TransactionCallback; +import org.springframework.transaction.support.TransactionTemplate; +import org.testcontainers.containers.GenericContainer; +import org.testcontainers.utility.DockerImageName; import java.math.BigDecimal; import java.time.LocalDateTime; @@ -25,16 +40,37 @@ import static org.junit.jupiter.api.Assertions.assertEquals; import static org.junit.jupiter.api.Assertions.assertNotNull; import static org.junit.jupiter.api.Assertions.assertNull; +import static org.junit.jupiter.api.Assertions.assertThrows; +import static org.mockito.ArgumentMatchers.any; +import static org.mockito.Mockito.doThrow; +import static org.mockito.Mockito.mock; import static org.mockito.Mockito.times; import static org.mockito.Mockito.verify; import static org.mockito.Mockito.when; -@SpringBootTest(properties = "spring.jpa.hibernate.ddl-auto=none") +@SpringJUnitConfig +@Import({DropService.class, DropVisibilityService.class, RedisCacheConfig.class, DropCacheIntegrationTest.RedisTestConfig.class}) class DropCacheIntegrationTest { + private static final GenericContainer REDIS = new GenericContainer<>( + DockerImageName.parse("redis:7.4-alpine") + ).withExposedPorts(6379); + + static { + REDIS.start(); + } + + @AfterAll + static void stopRedis() { + REDIS.stop(); + } + @Autowired private DropService dropService; + @Autowired + private DropVisibilityService dropVisibilityService; + @Autowired private CacheManager cacheManager; @@ -42,12 +78,28 @@ class DropCacheIntegrationTest { private DropRepository dropRepository; @MockitoBean - private S3ImageService s3ImageService; + private ProductRepository productRepository; + + @MockitoBean + private OrderItemRepository orderItemRepository; + + @MockitoBean + private DropUserPurchaseRepository dropUserPurchaseRepository; + + @MockitoBean + private DropSaleCacheWriter dropSaleCacheWriter; + + @MockitoBean + private TransactionTemplate transactionTemplate; private Cache dropDetailCache; @BeforeEach void clearCache() { + when(transactionTemplate.execute(any())).thenAnswer(invocation -> { + TransactionCallback callback = invocation.getArgument(0); + return callback.doInTransaction(mock(TransactionStatus.class)); + }); dropDetailCache = cacheManager.getCache(RedisCacheConfig.DROP_DETAIL_CACHE); assertNotNull(dropDetailCache); dropDetailCache.clear(); @@ -70,10 +122,25 @@ void repeatedDetailRequestUsesRedisCache() { void changingVisibilityEvictsCachedDetail() { Drop drop = visibleDrop(); when(dropRepository.findDetailById(100L)).thenReturn(Optional.of(drop)); - when(dropRepository.findById(100L)).thenReturn(Optional.of(drop)); + when(dropRepository.findByIdForUpdate(100L)).thenReturn(Optional.of(drop)); dropService.getOne(100L); - dropService.changeVisibility(1L, 100L, new DropVisibilityUpdateRequest(false)); + dropVisibilityService.changeVisibility(1L, 100L, new DropVisibilityUpdateRequest(false)); + + assertNull(dropDetailCache.get(100L)); + } + + @Test + void cacheSyncFailureAfterVisibilityChangeStillEvictsCachedDetail() { + Drop drop = visibleDrop(); + when(dropRepository.findDetailById(100L)).thenReturn(Optional.of(drop)); + when(dropRepository.findByIdForUpdate(100L)).thenReturn(Optional.of(drop)); + doThrow(new IllegalStateException("Redis unavailable")) + .when(dropSaleCacheWriter).apply(any()); + dropService.getOne(100L); + + assertThrows(ServiceException.class, () -> + dropVisibilityService.changeVisibility(1L, 100L, new DropVisibilityUpdateRequest(false))); assertNull(dropDetailCache.get(100L)); } @@ -97,4 +164,13 @@ private Drop visibleDrop() { ReflectionTestUtils.setField(drop, "id", 100L); return drop; } + + @TestConfiguration(proxyBeanMethods = false) + static class RedisTestConfig { + + @Bean + RedisConnectionFactory redisConnectionFactory() { + return new LettuceConnectionFactory(REDIS.getHost(), REDIS.getMappedPort(6379)); + } + } } From d0cf7077c8546bb7afd6d71547b876bd7ecf3268 Mon Sep 17 00:00:00 2001 From: Hyiyek Date: Mon, 14 Sep 2026 11:45:52 +0900 Subject: [PATCH 89/98] =?UTF-8?q?refactor(drop):=20=EC=83=81=EC=84=B8=20?= =?UTF-8?q?=EC=BA=90=EC=8B=9C=EC=99=80=20=EC=8B=A4=EC=8B=9C=EA=B0=84=20?= =?UTF-8?q?=EC=9E=AC=EA=B3=A0=20=EC=A1=B0=ED=9A=8C=20=EB=B6=84=EB=A6=AC?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../drop/cache/DropDetailCacheReader.java | 29 ++++++++ .../drop/cache/DropDetailCacheValue.java | 44 ++++++++++++ .../dropit/drop/cache/DropStockReader.java | 36 ++++++++++ .../drop/dto/response/DropResponse.java | 31 +++++++++ .../java/com/dropit/drop/entity/Drop.java | 7 +- .../com/dropit/drop/entity/DropStatus.java | 16 ++++- .../dropit/drop/exception/DropErrorCode.java | 1 + .../com/dropit/drop/service/DropService.java | 17 +++-- .../drop/service/DropVisibilityService.java | 3 + .../drop/cache/DropDetailCacheReaderTest.java | 56 ++++++++++++++++ .../drop/cache/DropStockReaderTest.java | 67 +++++++++++++++++++ .../service/DropCacheIntegrationTest.java | 43 +++++++++++- .../dropit/drop/service/DropServiceTest.java | 28 ++++---- 13 files changed, 347 insertions(+), 31 deletions(-) create mode 100644 src/main/java/com/dropit/drop/cache/DropDetailCacheReader.java create mode 100644 src/main/java/com/dropit/drop/cache/DropDetailCacheValue.java create mode 100644 src/main/java/com/dropit/drop/cache/DropStockReader.java create mode 100644 src/test/java/com/dropit/drop/cache/DropDetailCacheReaderTest.java create mode 100644 src/test/java/com/dropit/drop/cache/DropStockReaderTest.java diff --git a/src/main/java/com/dropit/drop/cache/DropDetailCacheReader.java b/src/main/java/com/dropit/drop/cache/DropDetailCacheReader.java new file mode 100644 index 0000000..9bfdd18 --- /dev/null +++ b/src/main/java/com/dropit/drop/cache/DropDetailCacheReader.java @@ -0,0 +1,29 @@ +package com.dropit.drop.cache; + +import com.dropit.drop.entity.Drop; +import com.dropit.drop.exception.DropErrorCode; +import com.dropit.drop.repository.DropRepository; +import com.dropit.global.config.RedisCacheConfig; +import com.dropit.global.exception.ServiceException; +import lombok.RequiredArgsConstructor; +import org.springframework.cache.annotation.Cacheable; +import org.springframework.stereotype.Component; + +@Component +@RequiredArgsConstructor +public class DropDetailCacheReader { + + private final DropRepository dropRepository; + + @Cacheable(cacheNames = RedisCacheConfig.DROP_DETAIL_CACHE, key = "#dropId", sync = true) + public DropDetailCacheValue get(Long dropId) { + Drop drop = dropRepository.findDetailById(dropId) + .orElseThrow(() -> new ServiceException(DropErrorCode.DROP_NOT_FOUND)); + + if (!drop.isVisible()) { + throw new ServiceException(DropErrorCode.DROP_NOT_FOUND); + } + + return DropDetailCacheValue.from(drop); + } +} diff --git a/src/main/java/com/dropit/drop/cache/DropDetailCacheValue.java b/src/main/java/com/dropit/drop/cache/DropDetailCacheValue.java new file mode 100644 index 0000000..b88b7d8 --- /dev/null +++ b/src/main/java/com/dropit/drop/cache/DropDetailCacheValue.java @@ -0,0 +1,44 @@ +package com.dropit.drop.cache; + +import com.dropit.drop.entity.Drop; + +import java.math.BigDecimal; +import java.time.LocalDateTime; + +/** + * Drop 상세 조회에서 반복 사용되는 메타데이터 캐시 값입니다. + * 주문마다 변경되는 재고와 재고 기반 상태는 포함하지 않습니다. + */ +public record DropDetailCacheValue( + Long id, + Long sellerId, + String sellerName, + Long productId, + String productName, + String imageUrl, + BigDecimal price, + int discountRate, + int initialQuantity, + int purchaseLimit, + boolean visible, + LocalDateTime openAt, + LocalDateTime closeAt +) { + public static DropDetailCacheValue from(Drop drop) { + return new DropDetailCacheValue( + drop.getId(), + drop.getProduct().getSeller().getId(), + drop.getProduct().getSeller().getUsername(), + drop.getProduct().getId(), + drop.getProduct().getName(), + drop.getProduct().getImageUrl(), + drop.getPrice(), + drop.getDiscountRate(), + drop.getInitialQuantity(), + drop.getPurchaseLimit(), + drop.isVisible(), + drop.getOpenAt(), + drop.getCloseAt() + ); + } +} diff --git a/src/main/java/com/dropit/drop/cache/DropStockReader.java b/src/main/java/com/dropit/drop/cache/DropStockReader.java new file mode 100644 index 0000000..ed4f252 --- /dev/null +++ b/src/main/java/com/dropit/drop/cache/DropStockReader.java @@ -0,0 +1,36 @@ +package com.dropit.drop.cache; + +import com.dropit.drop.exception.DropErrorCode; +import com.dropit.global.exception.ServiceException; +import com.dropit.order.redis.RedisOrderKeyFactory; +import lombok.RequiredArgsConstructor; +import org.springframework.dao.DataAccessException; +import org.springframework.data.redis.core.StringRedisTemplate; +import org.springframework.stereotype.Component; + +@Component +@RequiredArgsConstructor +public class DropStockReader { + + private final StringRedisTemplate redisTemplate; + + public int getRemainingQuantity(Long dropId) { + try { + String value = redisTemplate.opsForValue().get( + RedisOrderKeyFactory.stockKey(dropId) + ); + + if (value == null) { + throw new ServiceException(DropErrorCode.DROP_STOCK_NOT_READY); + } + + int remainingQuantity = Integer.parseInt(value); + if (remainingQuantity < 0) { + throw new ServiceException(DropErrorCode.DROP_STOCK_NOT_READY); + } + return remainingQuantity; + } catch (NumberFormatException | DataAccessException exception) { + throw new ServiceException(DropErrorCode.DROP_STOCK_NOT_READY, exception); + } + } +} diff --git a/src/main/java/com/dropit/drop/dto/response/DropResponse.java b/src/main/java/com/dropit/drop/dto/response/DropResponse.java index 04a9833..dd03a82 100644 --- a/src/main/java/com/dropit/drop/dto/response/DropResponse.java +++ b/src/main/java/com/dropit/drop/dto/response/DropResponse.java @@ -1,5 +1,6 @@ package com.dropit.drop.dto.response; +import com.dropit.drop.cache.DropDetailCacheValue; import com.dropit.drop.entity.Drop; import com.dropit.drop.entity.DropStatus; @@ -58,4 +59,34 @@ public static DropResponse from(Drop drop) { drop.currentStatus(LocalDateTime.now()) ); } + + public static DropResponse from( + DropDetailCacheValue detail, + int remainingQuantity, + LocalDateTime now + ) { + return new DropResponse( + detail.id(), + detail.sellerId(), + detail.sellerName(), + detail.productId(), + detail.productName(), + detail.imageUrl(), + detail.price(), + detail.discountRate(), + detail.initialQuantity(), + remainingQuantity, + detail.initialQuantity() - remainingQuantity, + detail.purchaseLimit(), + detail.visible(), + detail.openAt(), + detail.closeAt(), + DropStatus.resolve( + detail.openAt(), + detail.closeAt(), + remainingQuantity, + now + ) + ); + } } diff --git a/src/main/java/com/dropit/drop/entity/Drop.java b/src/main/java/com/dropit/drop/entity/Drop.java index 5f8b0a4..d062c1e 100644 --- a/src/main/java/com/dropit/drop/entity/Drop.java +++ b/src/main/java/com/dropit/drop/entity/Drop.java @@ -88,12 +88,7 @@ public Drop( } public DropStatus currentStatus(LocalDateTime now) { - if (!now.isBefore(closeAt)) return DropStatus.CLOSED; - if (now.isBefore(openAt)) return DropStatus.READY; - if (remainingQuantity == 0) return DropStatus.SOLDOUT; - - // openAt <= now < closeAt - return DropStatus.OPEN; + return DropStatus.resolve(openAt, closeAt, remainingQuantity, now); } public void update( diff --git a/src/main/java/com/dropit/drop/entity/DropStatus.java b/src/main/java/com/dropit/drop/entity/DropStatus.java index cb5b022..72528cc 100644 --- a/src/main/java/com/dropit/drop/entity/DropStatus.java +++ b/src/main/java/com/dropit/drop/entity/DropStatus.java @@ -1,8 +1,22 @@ package com.dropit.drop.entity; +import java.time.LocalDateTime; + public enum DropStatus { READY, OPEN, SOLDOUT, - CLOSED + CLOSED; + + public static DropStatus resolve( + LocalDateTime openAt, + LocalDateTime closeAt, + int remainingQuantity, + LocalDateTime now + ) { + if (!now.isBefore(closeAt)) return CLOSED; + if (now.isBefore(openAt)) return READY; + if (remainingQuantity == 0) return SOLDOUT; + return OPEN; + } } diff --git a/src/main/java/com/dropit/drop/exception/DropErrorCode.java b/src/main/java/com/dropit/drop/exception/DropErrorCode.java index f794d0e..993c2f4 100644 --- a/src/main/java/com/dropit/drop/exception/DropErrorCode.java +++ b/src/main/java/com/dropit/drop/exception/DropErrorCode.java @@ -15,6 +15,7 @@ public enum DropErrorCode implements ErrorCode { INVALID_DROP_PERIOD(HttpStatus.BAD_REQUEST, "판매 종료 시각은 시작 시각보다 늦어야 합니다."), DROP_SALE_PREPARED(HttpStatus.CONFLICT, "판매 준비가 완료되어 판매 설정을 변경할 수 없습니다."), DROP_ADMISSION_NOT_READY(HttpStatus.SERVICE_UNAVAILABLE, "주문 접수용 판매 상태를 준비할 수 없습니다."), + DROP_STOCK_NOT_READY(HttpStatus.SERVICE_UNAVAILABLE, "실시간 재고 정보를 확인할 수 없습니다."), DROP_ALREADY_STARTED(HttpStatus.CONFLICT, "이미 판매가 시작된 드랍입니다."); private final HttpStatus status; diff --git a/src/main/java/com/dropit/drop/service/DropService.java b/src/main/java/com/dropit/drop/service/DropService.java index c0c6609..655d4eb 100644 --- a/src/main/java/com/dropit/drop/service/DropService.java +++ b/src/main/java/com/dropit/drop/service/DropService.java @@ -1,5 +1,8 @@ package com.dropit.drop.service; +import com.dropit.drop.cache.DropDetailCacheReader; +import com.dropit.drop.cache.DropDetailCacheValue; +import com.dropit.drop.cache.DropStockReader; import com.dropit.drop.dto.request.DropCreateRequest; import com.dropit.drop.dto.request.DropSearchCondition; import com.dropit.drop.dto.request.DropUpdateRequest; @@ -14,7 +17,6 @@ import com.dropit.product.repository.ProductRepository; import lombok.RequiredArgsConstructor; import org.springframework.cache.annotation.CacheEvict; -import org.springframework.cache.annotation.Cacheable; import org.springframework.data.domain.Page; import org.springframework.data.domain.Pageable; import org.springframework.stereotype.Service; @@ -29,6 +31,8 @@ public class DropService { private final DropRepository dropRepository; private final ProductRepository productRepository; + private final DropDetailCacheReader dropDetailCacheReader; + private final DropStockReader dropStockReader; @Transactional public Long save(Long userId, DropCreateRequest request) { @@ -64,16 +68,11 @@ public Page getAll( return drops.map(DropResponse::from); } - @Cacheable(cacheNames = RedisCacheConfig.DROP_DETAIL_CACHE, key = "#dropId", sync = true) public DropResponse getOne(Long dropId) { - Drop drop = dropRepository.findDetailById(dropId) - .orElseThrow(() -> new ServiceException(DropErrorCode.DROP_NOT_FOUND)); - - if (!drop.isVisible()) { - throw new ServiceException(DropErrorCode.DROP_NOT_FOUND); - } + DropDetailCacheValue detail = dropDetailCacheReader.get(dropId); + int remainingQuantity = dropStockReader.getRemainingQuantity(dropId); - return DropResponse.from(drop); + return DropResponse.from(detail, remainingQuantity, LocalDateTime.now()); } @Transactional(readOnly = true) diff --git a/src/main/java/com/dropit/drop/service/DropVisibilityService.java b/src/main/java/com/dropit/drop/service/DropVisibilityService.java index 8ac95f9..68039b0 100644 --- a/src/main/java/com/dropit/drop/service/DropVisibilityService.java +++ b/src/main/java/com/dropit/drop/service/DropVisibilityService.java @@ -7,10 +7,12 @@ import com.dropit.drop.entity.Drop; import com.dropit.drop.exception.DropErrorCode; import com.dropit.drop.repository.DropRepository; +import com.dropit.global.config.RedisCacheConfig; import com.dropit.global.exception.ServiceException; import com.dropit.order.repository.DropUserPurchaseRepository; import com.dropit.order.repository.OrderItemRepository; import lombok.RequiredArgsConstructor; +import org.springframework.cache.annotation.CacheEvict; import org.springframework.stereotype.Service; import org.springframework.transaction.support.TransactionTemplate; @@ -27,6 +29,7 @@ public class DropVisibilityService { private final DropSaleCacheWriter cacheWriter; private final TransactionTemplate transactionTemplate; + @CacheEvict(cacheNames = RedisCacheConfig.DROP_DETAIL_CACHE, key = "#dropId") public DropResponse changeVisibility(Long sellerId, Long dropId, DropVisibilityUpdateRequest request) { ChangeResult result = transactionTemplate.execute(status -> changeInTransaction(sellerId, dropId, request)); if (result == null) { diff --git a/src/test/java/com/dropit/drop/cache/DropDetailCacheReaderTest.java b/src/test/java/com/dropit/drop/cache/DropDetailCacheReaderTest.java new file mode 100644 index 0000000..e030e38 --- /dev/null +++ b/src/test/java/com/dropit/drop/cache/DropDetailCacheReaderTest.java @@ -0,0 +1,56 @@ +package com.dropit.drop.cache; + +import com.dropit.drop.entity.Drop; +import com.dropit.drop.exception.DropErrorCode; +import com.dropit.drop.repository.DropRepository; +import com.dropit.global.exception.ServiceException; +import com.dropit.product.entity.Product; +import com.dropit.user.entity.User; +import com.dropit.user.entity.UserRole; +import org.junit.jupiter.api.Test; +import org.junit.jupiter.api.extension.ExtendWith; +import org.mockito.InjectMocks; +import org.mockito.Mock; +import org.mockito.junit.jupiter.MockitoExtension; + +import java.math.BigDecimal; +import java.time.LocalDateTime; +import java.util.Optional; + +import static org.junit.jupiter.api.Assertions.assertEquals; +import static org.junit.jupiter.api.Assertions.assertThrows; +import static org.mockito.Mockito.when; + +@ExtendWith(MockitoExtension.class) +class DropDetailCacheReaderTest { + + @Mock + private DropRepository dropRepository; + + @InjectMocks + private DropDetailCacheReader cacheReader; + + @Test + void hiddenDropIsNotCachedAsPublicDetail() { + User seller = new User("seller@example.com", "password", "seller", UserRole.SELLER); + Product product = new Product(seller, "Limited Hoodie", "description", null); + LocalDateTime openAt = LocalDateTime.now().plusDays(1); + Drop hiddenDrop = new Drop( + product, + new BigDecimal("59000"), + 10, + 20, + 2, + openAt, + openAt.plusDays(1) + ); + when(dropRepository.findDetailById(100L)).thenReturn(Optional.of(hiddenDrop)); + + ServiceException exception = assertThrows( + ServiceException.class, + () -> cacheReader.get(100L) + ); + + assertEquals(DropErrorCode.DROP_NOT_FOUND, exception.getErrorCode()); + } +} diff --git a/src/test/java/com/dropit/drop/cache/DropStockReaderTest.java b/src/test/java/com/dropit/drop/cache/DropStockReaderTest.java new file mode 100644 index 0000000..b9a3000 --- /dev/null +++ b/src/test/java/com/dropit/drop/cache/DropStockReaderTest.java @@ -0,0 +1,67 @@ +package com.dropit.drop.cache; + +import com.dropit.drop.exception.DropErrorCode; +import com.dropit.global.exception.ServiceException; +import org.junit.jupiter.api.BeforeEach; +import org.junit.jupiter.api.Test; +import org.junit.jupiter.api.extension.ExtendWith; +import org.mockito.Mock; +import org.mockito.junit.jupiter.MockitoExtension; +import org.springframework.data.redis.core.StringRedisTemplate; +import org.springframework.data.redis.core.ValueOperations; + +import static org.junit.jupiter.api.Assertions.assertEquals; +import static org.junit.jupiter.api.Assertions.assertThrows; +import static org.mockito.ArgumentMatchers.anyString; +import static org.mockito.Mockito.when; + +@ExtendWith(MockitoExtension.class) +class DropStockReaderTest { + + @Mock + private StringRedisTemplate redisTemplate; + + @Mock + private ValueOperations valueOperations; + + private DropStockReader stockReader; + + @BeforeEach + void setUp() { + when(redisTemplate.opsForValue()).thenReturn(valueOperations); + stockReader = new DropStockReader(redisTemplate); + } + + @Test + void readsCurrentStockFromOrderRedisKey() { + when(valueOperations.get(anyString())).thenReturn("97"); + + int remainingQuantity = stockReader.getRemainingQuantity(100L); + + assertEquals(97, remainingQuantity); + } + + @Test + void rejectsMissingStockInsteadOfReturningStaleDatabaseValue() { + when(valueOperations.get(anyString())).thenReturn(null); + + ServiceException exception = assertThrows( + ServiceException.class, + () -> stockReader.getRemainingQuantity(100L) + ); + + assertEquals(DropErrorCode.DROP_STOCK_NOT_READY, exception.getErrorCode()); + } + + @Test + void rejectsInvalidStockValue() { + when(valueOperations.get(anyString())).thenReturn("invalid"); + + ServiceException exception = assertThrows( + ServiceException.class, + () -> stockReader.getRemainingQuantity(100L) + ); + + assertEquals(DropErrorCode.DROP_STOCK_NOT_READY, exception.getErrorCode()); + } +} diff --git a/src/test/java/com/dropit/drop/service/DropCacheIntegrationTest.java b/src/test/java/com/dropit/drop/service/DropCacheIntegrationTest.java index 4f30829..8f10814 100644 --- a/src/test/java/com/dropit/drop/service/DropCacheIntegrationTest.java +++ b/src/test/java/com/dropit/drop/service/DropCacheIntegrationTest.java @@ -1,11 +1,15 @@ package com.dropit.drop.service; +import com.dropit.drop.cache.DropDetailCacheValue; import com.dropit.drop.dto.request.DropVisibilityUpdateRequest; import com.dropit.drop.dto.response.DropResponse; import com.dropit.drop.entity.Drop; import com.dropit.drop.repository.DropRepository; import com.dropit.global.config.RedisCacheConfig; import com.dropit.global.storage.S3ImageService; +import com.dropit.order.redis.RedisOrderKeyFactory; +import com.dropit.order.repository.DropUserPurchaseRepository; +import com.dropit.order.repository.OrderItemRepository; import com.dropit.product.entity.Product; import com.dropit.user.entity.User; import com.dropit.user.entity.UserRole; @@ -15,6 +19,7 @@ import org.springframework.boot.test.context.SpringBootTest; import org.springframework.cache.Cache; import org.springframework.cache.CacheManager; +import org.springframework.data.redis.core.StringRedisTemplate; import org.springframework.test.context.bean.override.mockito.MockitoBean; import org.springframework.test.util.ReflectionTestUtils; @@ -35,15 +40,27 @@ class DropCacheIntegrationTest { @Autowired private DropService dropService; + @Autowired + private DropVisibilityService dropVisibilityService; + @Autowired private CacheManager cacheManager; + @Autowired + private StringRedisTemplate redisTemplate; + @MockitoBean private DropRepository dropRepository; @MockitoBean private S3ImageService s3ImageService; + @MockitoBean + private OrderItemRepository orderItemRepository; + + @MockitoBean + private DropUserPurchaseRepository purchaseRepository; + private Cache dropDetailCache; @BeforeEach @@ -51,29 +68,49 @@ void clearCache() { dropDetailCache = cacheManager.getCache(RedisCacheConfig.DROP_DETAIL_CACHE); assertNotNull(dropDetailCache); dropDetailCache.clear(); + redisTemplate.delete(RedisOrderKeyFactory.stockKey(100L)); } @Test void repeatedDetailRequestUsesRedisCache() { Drop drop = visibleDrop(); when(dropRepository.findDetailById(100L)).thenReturn(Optional.of(drop)); + redisTemplate.opsForValue().set(RedisOrderKeyFactory.stockKey(100L), "100"); DropResponse first = dropService.getOne(100L); DropResponse second = dropService.getOne(100L); assertEquals(first, second); verify(dropRepository, times(1)).findDetailById(100L); - assertNotNull(dropDetailCache.get(100L, DropResponse.class)); + assertNotNull(dropDetailCache.get(100L, DropDetailCacheValue.class)); + } + + @Test + void changedRedisStockIsReflectedWithoutReloadingMetadata() { + Drop drop = visibleDrop(); + when(dropRepository.findDetailById(100L)).thenReturn(Optional.of(drop)); + String stockKey = RedisOrderKeyFactory.stockKey(100L); + redisTemplate.opsForValue().set(stockKey, "100"); + + DropResponse first = dropService.getOne(100L); + redisTemplate.opsForValue().set(stockKey, "97"); + DropResponse second = dropService.getOne(100L); + + assertEquals(100, first.remainingQuantity()); + assertEquals(97, second.remainingQuantity()); + assertEquals(3, second.soldQuantity()); + verify(dropRepository, times(1)).findDetailById(100L); } @Test void changingVisibilityEvictsCachedDetail() { Drop drop = visibleDrop(); when(dropRepository.findDetailById(100L)).thenReturn(Optional.of(drop)); - when(dropRepository.findById(100L)).thenReturn(Optional.of(drop)); + when(dropRepository.findByIdForUpdate(100L)).thenReturn(Optional.of(drop)); + redisTemplate.opsForValue().set(RedisOrderKeyFactory.stockKey(100L), "100"); dropService.getOne(100L); - dropService.changeVisibility(1L, 100L, new DropVisibilityUpdateRequest(false)); + dropVisibilityService.changeVisibility(1L, 100L, new DropVisibilityUpdateRequest(false)); assertNull(dropDetailCache.get(100L)); } diff --git a/src/test/java/com/dropit/drop/service/DropServiceTest.java b/src/test/java/com/dropit/drop/service/DropServiceTest.java index b0e06cf..303e85c 100644 --- a/src/test/java/com/dropit/drop/service/DropServiceTest.java +++ b/src/test/java/com/dropit/drop/service/DropServiceTest.java @@ -1,5 +1,8 @@ package com.dropit.drop.service; +import com.dropit.drop.cache.DropDetailCacheReader; +import com.dropit.drop.cache.DropDetailCacheValue; +import com.dropit.drop.cache.DropStockReader; import com.dropit.drop.dto.request.DropCreateRequest; import com.dropit.drop.dto.request.DropSearchCondition; import com.dropit.drop.dto.request.DropUpdateRequest; @@ -46,6 +49,12 @@ class DropServiceTest { @Mock private ProductRepository productRepository; + @Mock + private DropDetailCacheReader dropDetailCacheReader; + + @Mock + private DropStockReader dropStockReader; + @InjectMocks private DropService dropService; @@ -107,12 +116,15 @@ void rejectCreatingDropForAnotherSellersProduct() { @DisplayName("공개된 드랍 상세 정보를 조회할 수 있다") void getOneDrop() { Drop drop = saveDrop(1L, 10L, 100L, LocalDateTime.now().plusDays(1)); - when(dropRepository.findDetailById(100L)).thenReturn(Optional.of(drop)); + when(dropDetailCacheReader.get(100L)).thenReturn(DropDetailCacheValue.from(drop)); + when(dropStockReader.getRemainingQuantity(100L)).thenReturn(7); DropResponse response = dropService.getOne(100L); assertEquals(100L, response.id()); assertEquals(10L, response.productId()); + assertEquals(7, response.remainingQuantity()); + assertEquals(3, response.soldQuantity()); } @Test @@ -206,17 +218,8 @@ void getDropsForSellerManagement() { @Test @DisplayName("비공개 드랍 상세 조회는 존재하지 않는 드랍으로 처리한다") void rejectHiddenDropFromPublicDetail() { - Product product = saveProduct(1L, 10L); - Drop hiddenDrop = new Drop( - product, - new BigDecimal("59000"), - 10, - 20, - 2, - LocalDateTime.now().plusDays(1), - LocalDateTime.now().plusDays(2) - ); - when(dropRepository.findDetailById(100L)).thenReturn(Optional.of(hiddenDrop)); + when(dropDetailCacheReader.get(100L)) + .thenThrow(new ServiceException(DropErrorCode.DROP_NOT_FOUND)); ServiceException exception = assertThrows( ServiceException.class, @@ -224,6 +227,7 @@ void rejectHiddenDropFromPublicDetail() { ); assertEquals(DropErrorCode.DROP_NOT_FOUND, exception.getErrorCode()); + verifyNoInteractions(dropStockReader); } @Test From d1109de2dca5f52fd5d13a869216176fcee5cf09 Mon Sep 17 00:00:00 2001 From: Hyiyek Date: Mon, 14 Sep 2026 12:28:06 +0900 Subject: [PATCH 90/98] =?UTF-8?q?test(performance):=20=EC=8B=A4=EC=8B=9C?= =?UTF-8?q?=EA=B0=84=20=EC=9E=AC=EA=B3=A0=20=EC=83=81=EC=84=B8=20=EC=A1=B0?= =?UTF-8?q?=ED=9A=8C=20=EB=B6=80=ED=95=98=20=EA=B2=80=EC=A6=9D=20=EC=B6=94?= =?UTF-8?q?=EA=B0=80?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../drop-detail-live-stock-comparison.json | 97 ++++++++++++ ...publish-drop-detail-concurrent-summary.ps1 | 4 +- .../publish-drop-detail-spike-summary.ps1 | 53 +++++++ .../results/drop-detail-live-stock/README.md | 145 ++++++++++++++++++ .../drop-detail-live-stock-before-after.jpg | Bin 0 -> 415568 bytes .../start-drop-detail-concurrent-test.ps1 | 23 ++- performance/start-drop-detail-spike-test.ps1 | 17 +- .../service/DropCacheIntegrationTest.java | 11 +- 8 files changed, 337 insertions(+), 13 deletions(-) create mode 100644 performance/grafana/dashboards/drop-detail-live-stock-comparison.json create mode 100644 performance/publish-drop-detail-spike-summary.ps1 create mode 100644 performance/results/drop-detail-live-stock/README.md create mode 100644 performance/results/drop-detail-live-stock/drop-detail-live-stock-before-after.jpg diff --git a/performance/grafana/dashboards/drop-detail-live-stock-comparison.json b/performance/grafana/dashboards/drop-detail-live-stock-comparison.json new file mode 100644 index 0000000..c606ae8 --- /dev/null +++ b/performance/grafana/dashboards/drop-detail-live-stock-comparison.json @@ -0,0 +1,97 @@ +{ + "annotations": { "list": [] }, + "description": "DropResponse 전체 캐시와 정적 메타데이터 캐시 + 실시간 Redis 재고 결합 구조의 측정 결과 비교", + "editable": true, + "graphTooltip": 0, + "panels": [ + { + "datasource": { "type": "influxdb", "uid": "k6-influxdb" }, + "fieldConfig": { "defaults": { "decimals": 2, "unit": "ms" }, "overrides": [] }, + "gridPos": { "h": 5, "w": 6, "x": 0, "y": 0 }, + "id": 1, + "options": { "colorMode": "value", "graphMode": "none", "justifyMode": "center", "reduceOptions": { "calcs": ["lastNotNull"], "fields": "", "values": false }, "textMode": "auto" }, + "targets": [{ "query": "SELECT last(\"avg_ms\") FROM \"drop_detail_spike_summary\" WHERE (\"stage\" = 'after') AND $timeFilter", "rawQuery": true, "refId": "A", "resultFormat": "time_series" }], + "title": "기존 전체 응답 캐시 · 평균", + "type": "stat" + }, + { + "datasource": { "type": "influxdb", "uid": "k6-influxdb" }, + "fieldConfig": { "defaults": { "decimals": 2, "unit": "ms" }, "overrides": [] }, + "gridPos": { "h": 5, "w": 6, "x": 6, "y": 0 }, + "id": 2, + "options": { "colorMode": "value", "graphMode": "none", "justifyMode": "center", "reduceOptions": { "calcs": ["lastNotNull"], "fields": "", "values": false }, "textMode": "auto" }, + "targets": [{ "query": "SELECT last(\"p95_ms\") FROM \"drop_detail_spike_summary\" WHERE (\"stage\" = 'after') AND $timeFilter", "rawQuery": true, "refId": "A", "resultFormat": "time_series" }], + "title": "기존 전체 응답 캐시 · p95", + "type": "stat" + }, + { + "datasource": { "type": "influxdb", "uid": "k6-influxdb" }, + "fieldConfig": { "defaults": { "decimals": 2, "unit": "ms" }, "overrides": [] }, + "gridPos": { "h": 5, "w": 6, "x": 12, "y": 0 }, + "id": 3, + "options": { "colorMode": "value", "graphMode": "none", "justifyMode": "center", "reduceOptions": { "calcs": ["lastNotNull"], "fields": "", "values": false }, "textMode": "auto" }, + "targets": [{ "query": "SELECT last(\"avg_ms\") FROM \"drop_detail_spike_summary\" WHERE (\"stage\" = 'livestock') AND $timeFilter", "rawQuery": true, "refId": "A", "resultFormat": "time_series" }], + "title": "실시간 재고 결합 · 평균", + "type": "stat" + }, + { + "datasource": { "type": "influxdb", "uid": "k6-influxdb" }, + "fieldConfig": { "defaults": { "decimals": 2, "unit": "ms" }, "overrides": [] }, + "gridPos": { "h": 5, "w": 6, "x": 18, "y": 0 }, + "id": 4, + "options": { "colorMode": "value", "graphMode": "none", "justifyMode": "center", "reduceOptions": { "calcs": ["lastNotNull"], "fields": "", "values": false }, "textMode": "auto" }, + "targets": [{ "query": "SELECT last(\"p95_ms\") FROM \"drop_detail_spike_summary\" WHERE (\"stage\" = 'livestock') AND $timeFilter", "rawQuery": true, "refId": "A", "resultFormat": "time_series" }], + "title": "실시간 재고 결합 · p95", + "type": "stat" + }, + { + "datasource": { "type": "influxdb", "uid": "k6-influxdb" }, + "fieldConfig": { "defaults": { "decimals": 2, "unit": "ms" }, "overrides": [] }, + "gridPos": { "h": 5, "w": 6, "x": 0, "y": 5 }, + "id": 5, + "options": { "colorMode": "value", "graphMode": "none", "justifyMode": "center", "reduceOptions": { "calcs": ["lastNotNull"], "fields": "", "values": false }, "textMode": "auto" }, + "targets": [{ "query": "SELECT last(\"avg_ms\") FROM \"drop_detail_concurrent_summary\" WHERE (\"stage\" = 'optimized') AND $timeFilter", "rawQuery": true, "refId": "A", "resultFormat": "time_series" }], + "title": "기존 10K 동시 요청 · 평균", + "type": "stat" + }, + { + "datasource": { "type": "influxdb", "uid": "k6-influxdb" }, + "fieldConfig": { "defaults": { "decimals": 2, "unit": "ms" }, "overrides": [] }, + "gridPos": { "h": 5, "w": 6, "x": 6, "y": 5 }, + "id": 6, + "options": { "colorMode": "value", "graphMode": "none", "justifyMode": "center", "reduceOptions": { "calcs": ["lastNotNull"], "fields": "", "values": false }, "textMode": "auto" }, + "targets": [{ "query": "SELECT last(\"p95_ms\") FROM \"drop_detail_concurrent_summary\" WHERE (\"stage\" = 'optimized') AND $timeFilter", "rawQuery": true, "refId": "A", "resultFormat": "time_series" }], + "title": "기존 10K 동시 요청 · p95", + "type": "stat" + }, + { + "datasource": { "type": "influxdb", "uid": "k6-influxdb" }, + "fieldConfig": { "defaults": { "decimals": 2, "unit": "ms" }, "overrides": [] }, + "gridPos": { "h": 5, "w": 6, "x": 12, "y": 5 }, + "id": 7, + "options": { "colorMode": "value", "graphMode": "none", "justifyMode": "center", "reduceOptions": { "calcs": ["lastNotNull"], "fields": "", "values": false }, "textMode": "auto" }, + "targets": [{ "query": "SELECT last(\"avg_ms\") FROM \"drop_detail_concurrent_summary\" WHERE (\"stage\" = 'livestock') AND $timeFilter", "rawQuery": true, "refId": "A", "resultFormat": "time_series" }], + "title": "실시간 재고 10K · 평균", + "type": "stat" + }, + { + "datasource": { "type": "influxdb", "uid": "k6-influxdb" }, + "fieldConfig": { "defaults": { "decimals": 2, "unit": "ms" }, "overrides": [] }, + "gridPos": { "h": 5, "w": 6, "x": 18, "y": 5 }, + "id": 8, + "options": { "colorMode": "value", "graphMode": "none", "justifyMode": "center", "reduceOptions": { "calcs": ["lastNotNull"], "fields": "", "values": false }, "textMode": "auto" }, + "targets": [{ "query": "SELECT last(\"p95_ms\") FROM \"drop_detail_concurrent_summary\" WHERE (\"stage\" = 'livestock') AND $timeFilter", "rawQuery": true, "refId": "A", "resultFormat": "time_series" }], + "title": "실시간 재고 10K · p95", + "type": "stat" + } + ], + "refresh": "5s", + "schemaVersion": 39, + "tags": ["k6", "drop", "redis", "live-stock"], + "templating": { "list": [] }, + "time": { "from": "now-30d", "to": "now" }, + "timezone": "browser", + "title": "Drop Detail Cache Correctness and Load Comparison", + "uid": "drop-detail-live-stock", + "version": 1 +} diff --git a/performance/publish-drop-detail-concurrent-summary.ps1 b/performance/publish-drop-detail-concurrent-summary.ps1 index b72daf8..aaf8f3d 100644 --- a/performance/publish-drop-detail-concurrent-summary.ps1 +++ b/performance/publish-drop-detail-concurrent-summary.ps1 @@ -7,7 +7,7 @@ $ErrorActionPreference = 'Stop' $performanceDirectory = Split-Path -Parent $MyInvocation.MyCommand.Path $rawDirectory = Join-Path $performanceDirectory 'results\raw' -$stages = @('before', 'after', 'optimized') +$stages = @('before', 'after', 'optimized', 'livestock') $points = @() $timestamp = [DateTimeOffset]::UtcNow.ToUnixTimeMilliseconds() * 1000000 @@ -52,4 +52,4 @@ Invoke-RestMethod ` -ContentType 'text/plain' ` -Body ($points -join "`n") | Out-Null -Write-Host 'Published exact k6 JSON summaries for Before, After, and Optimized.' +Write-Host 'Published exact k6 JSON summaries for Before, After, Optimized, and LiveStock.' diff --git a/performance/publish-drop-detail-spike-summary.ps1 b/performance/publish-drop-detail-spike-summary.ps1 new file mode 100644 index 0000000..1328b81 --- /dev/null +++ b/performance/publish-drop-detail-spike-summary.ps1 @@ -0,0 +1,53 @@ +param( + [string]$InfluxUrl = 'http://localhost:8086', + [string]$Database = 'k6' +) + +$ErrorActionPreference = 'Stop' + +$performanceDirectory = Split-Path -Parent $MyInvocation.MyCommand.Path +$rawDirectory = Join-Path $performanceDirectory 'results\raw' +$stages = @('before', 'query', 'after', 'livestock') +$points = @() +$timestamp = [DateTimeOffset]::UtcNow.ToUnixTimeMilliseconds() * 1000000 + +foreach ($stage in $stages) { + $resultPath = Join-Path $rawDirectory "drop-detail-spike-$stage.json" + + if (-not (Test-Path -LiteralPath $resultPath)) { + throw "k6 summary is missing: $resultPath" + } + + $summary = Get-Content -LiteralPath $resultPath -Raw | ConvertFrom-Json + $metrics = $summary.metrics + $duration = $metrics.http_req_duration.values + $requests = $metrics.http_reqs.values + $failure = $metrics.http_req_failed.values.rate + $dropped = $metrics.dropped_iterations.values.count + + $fields = @( + "requests=$($requests.count)i", + "rps=$($requests.rate)", + "avg_ms=$($duration.avg)", + "p95_ms=$($duration.'p(95)')", + "max_ms=$($duration.max)", + "failure_rate=$failure", + "dropped_iterations=$($dropped)i" + ) -join ',' + + $points += "drop_detail_spike_summary,stage=$stage $fields $timestamp" + $timestamp++ +} + +$dropQuery = [Uri]::EscapeDataString('DROP MEASUREMENT drop_detail_spike_summary') +Invoke-RestMethod ` + -Uri "$InfluxUrl/query?db=$Database&q=$dropQuery" ` + -Method Post | Out-Null + +Invoke-RestMethod ` + -Uri "$InfluxUrl/write?db=$Database&precision=ns" ` + -Method Post ` + -ContentType 'text/plain' ` + -Body ($points -join "`n") | Out-Null + +Write-Host 'Published exact k6 JSON summaries for Before, Query, After, and LiveStock.' diff --git a/performance/results/drop-detail-live-stock/README.md b/performance/results/drop-detail-live-stock/README.md new file mode 100644 index 0000000..b553855 --- /dev/null +++ b/performance/results/drop-detail-live-stock/README.md @@ -0,0 +1,145 @@ +# Drop 상세 캐시 정확성 개선 및 부하 검증 + +## 문제 + +판매 시작 시 사용자가 호출하는 API는 다음과 같다. + +```http +GET /drops/{dropId} +``` + +기존에는 `DropResponse` 전체를 Redis에 3초 동안 저장했다. 상품명·가격·판매 기간뿐 아니라 계속 바뀌는 `remainingQuantity`, `soldQuantity`, `status`도 함께 캐싱되어 구매 직후 최대 3초 동안 이전 재고가 보일 수 있었다. + +## Before / After 구조 + +| 구분 | Before: 전체 응답 캐시 | After: 정적 캐시 + 실시간 재고 | +|---|---|---| +| 캐시 데이터 | 상품·가격·기간·재고·상태 | 상품·가격·기간 등 정적 정보 | +| 남은 재고 | 최대 3초 전 캐시 값 | 주문과 같은 Redis 재고 키를 매 요청 조회 | +| 판매 수량 | 캐시된 값 | `initialQuantity - currentStock` | +| 판매 상태 | 캐시된 값 | 현재 시각과 현재 재고로 계산 | +| DB 접근 | 캐시 미스에만 발생 | 캐시 미스에만 발생 | +| 추가 비용 | 없음 | 상세 요청마다 Redis GET 1회 | +| 핵심 효과 | 매우 빠른 조회 | DB 절감 효과를 유지하면서 재고 정확성 확보 | + +![Drop 상세 캐시 Before After](./drop-detail-live-stock-before-after.jpg) + +## 요청 처리 흐름 + +```text +사용자 → GET /drops/{dropId} + → DropDetailCacheReader + ├─ 캐시 적중: 정적 정보 반환 + └─ 캐시 미스: DB 조회 → 정적 정보 캐시 + → DropStockReader + └─ {drop:}:stock 현재 값 조회 + → DropResponse + └─ 정적 정보 + 현재 재고 + 현재 상태 결합 +``` + +핵심 코드는 다음처럼 역할을 나눴다. + +```java +public DropResponse getOne(Long dropId) { + DropDetailCacheValue detail = dropDetailCacheReader.get(dropId); + int remainingQuantity = dropStockReader.getRemainingQuantity(dropId); + + return DropResponse.from(detail, remainingQuantity, LocalDateTime.now()); +} +``` + +- `DropDetailCacheReader`: 변하지 않는 상세 정보만 캐싱한다. +- `DropStockReader`: 주문 처리에서 사용하는 Redis 재고 키를 읽는다. +- `DropResponse.from(...)`: 현재 재고로 판매 수량과 상태를 계산한다. +- Redis 재고 키가 없거나 잘못된 경우 임의로 DB 값을 쓰지 않고 `503 DROP_STOCK_NOT_READY`를 반환한다. 준비되지 않은 재고로 주문 화면을 잘못 노출하지 않기 위한 fail-closed 정책이다. + +## 현재 구조 부하 검증 + +### 판매 시작 스파이크 + +평상시 100 RPS에서 1초 안에 1,000 RPS로 증가시켜 1분 동안 유지했다. + +| 지표 | LiveStock 결과 | 목표 | 판정 | +|---|---:|---:|---| +| 완료 HTTP 요청 | 69,379건 | - | - | +| 평균 처리량 | 654.53 RPS | - | - | +| 평균 응답 시간 | 105.48ms | - | - | +| p95 응답 시간 | 328.65ms | 2,000ms 미만 | 통과 | +| p99 응답 시간 | 600.59ms | - | - | +| HTTP 실패율 | 0% | 1% 미만 | 통과 | +| 시작하지 못한 요청 | 1,670건 | 0건 | 추가 개선 필요 | +| 최대 활성 VU | 428명 | 최대 2,000명 | - | + +응답 목표는 충족했지만 정해진 도착률에 맞춰 시작하지 못한 요청이 남았다. 따라서 로컬 환경에서 1,000 RPS를 완전히 수용했다고 표현하지 않는다. + +### 10,000명 동시 조회 + +가상 사용자 10,000명이 같은 Drop 상세 API를 한 번씩 동시에 호출했다. + +| 지표 | LiveStock 결과 | +|---|---:| +| 완료 요청 | 10,000건 | +| 성공률 | 100% | +| 실패율 | 0% | +| 평균 응답 시간 | 523.96ms | +| p95 응답 시간 | 1,184.50ms | +| 최대 응답 시간 | 2,512.91ms | +| 전체 완료 시간 | 9.66초 | +| 애플리케이션 오류·Hikari timeout | 0건 | + +테스트 종료 후 Redis 재고가 100으로 유지됨을 확인했다. 상세 조회는 재고를 읽기만 하므로 조회 부하가 재고를 차감하지 않는 것도 함께 검증했다. + +## 기존 수치와 비교할 때의 주의점 + +| 시나리오 | 기존 전체 응답 캐시 | 현재 실시간 재고 결합 | +|---|---:|---:| +| 1,000 RPS 스파이크 p95 | 20.12ms | 328.65ms | +| 1,000 RPS 스파이크 실패율 | 0% | 0% | +| 10,000명 동시 조회 p95 | 32.28초 | 1.18초 | +| 10,000명 동시 조회 성공률 | 100% | 100% | + +기존 전체 응답 캐시는 Redis 응답 한 번만 사용하므로 스파이크 지연이 더 낮다. 현재 구조는 재고 정확성을 얻는 대신 Redis GET 한 번이 추가됐다. + +반대로 10,000명 결과가 크게 좋아졌지만, 기존 측정은 단일 Spring 단계부터 이어진 과거 환경이고 현재 측정은 Nginx와 Spring 4대 및 이후 병합된 설정을 포함한다. 따라서 32.28초에서 1.18초로 줄어든 전체 차이를 캐시 분리 코드 하나의 효과라고 주장하지 않는다. 이번 변경의 직접적인 효과는 **재고 정확성 확보**이며, 현재 구조가 목표 부하에서 동작하는지를 별도로 검증한 결과다. + +## 테스트 검증 + +- 같은 Drop을 두 번 조회할 때 정적 메타데이터 DB 조회 1회 +- 두 조회 사이 Redis 재고 변경 시 두 번째 응답에 즉시 반영 +- 현재 재고로 `soldQuantity`, `READY`, `OPEN`, `SOLDOUT`, `CLOSED` 계산 +- 수정·공개 여부 변경·삭제 시 정적 상세 캐시 제거 +- Redis 재고 누락·음수·잘못된 문자열·연결 장애 시 503 처리 +- Drop 테스트 총 66개 통과(실패 0개, 오류 0개) + +## 재현 + +```powershell +# 판매 시작 스파이크 +powershell.exe -NoProfile -ExecutionPolicy Bypass ` + -File .\performance\start-drop-detail-spike-test.ps1 ` + -Phase LiveStock -DropId 1262071 ` + -NormalRps 100 -SpikeRps 1000 ` + -PreAllocatedVUs 200 -MaxVUs 2000 -StockQuantity 100 + +# 10,000명 동시 조회 +powershell.exe -NoProfile -ExecutionPolicy Bypass ` + -File .\performance\start-drop-detail-concurrent-test.ps1 ` + -Phase LiveStock -DropId 1261706 -ConcurrentUsers 10000 ` + -CacheMode Warm -StockQuantity 100 ` + -TargetBaseUrl http://dropit-performance-gateway:8080 + +# 정확한 k6 JSON 통계를 Grafana용 InfluxDB에 발행 +powershell.exe -NoProfile -ExecutionPolicy Bypass ` + -File .\performance\publish-drop-detail-spike-summary.ps1 + +powershell.exe -NoProfile -ExecutionPolicy Bypass ` + -File .\performance\publish-drop-detail-concurrent-summary.ps1 +``` + +Grafana 대시보드 UID는 `drop-detail-live-stock`이다. 원본 k6 JSON은 `performance/results/raw`에 로컬로만 보관하며 Git에는 포함하지 않는다. + +## 다음 개선 + +1. 동일 테스트를 3회 이상 반복해 중앙값으로 비교한다. +2. Spring CPU·GC, Redis latency, 연결 수를 함께 수집해 시작하지 못한 1,670건의 병목을 찾는다. +3. 운영에서는 판매 시작 전에 정적 캐시와 재고 키를 미리 준비하고, Redis 장애 시 상세 조회의 실패 정책을 알림과 연결한다. diff --git a/performance/results/drop-detail-live-stock/drop-detail-live-stock-before-after.jpg b/performance/results/drop-detail-live-stock/drop-detail-live-stock-before-after.jpg new file mode 100644 index 0000000000000000000000000000000000000000..c10dfcfa383ebbf14d907c232006498d9a56c9ce GIT binary patch literal 415568 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 UhTVa(|N~;=x9vE(U=1db#=f6nodIEv?(g+ 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 z%0A}O5q>$@IGRNTN7cP@a4V0r4Ab<8x9MOJh_x^ zWRaX)k*#%d#jOv;dvF5;?jvaBGx$j4UqdN2hK>3FXdEzdQ5k_&lOYPoP9P5fnN>90 zFu;c76?mQC-KsaRQk9EU6e5@qeTvCO>05px4v?1VBB9+Clsny6$`}?M0P=%< z&@U1-o{j44fCQkIaiG9Iq@*G@-vHM#T@KVG&Y?xd!iRf3S^6nPH*su{0e%s@Vk{M8 zeebK`KI$bCh2ws2m#@tv6g-GARPmSFUD;Pmo7L#~p8%kQ1UaRlT0JmTp!J^{Y#{?~ z1L#Wr>&ztqZ_B&{_`#0T{qszS`e*0c?>&FHbVLdL1cLm}z-?7VH}V3E3&Pi1T?vsv z!=u_nD)d-r!J9Cly4w80$4n+q5;S~@zoe^0Tsx}1QJDG59NX7qTFBm}E6(dDh> zMzxnCsRXSdXfb;*mR^H2YwX3)q?>m6P#(A+_E|iq_M~S-55iIhal7<4m=1amqwkMy zjQ45yl#3?r?zoL_7~5pYR*k#9;Lg)&OFwY9p~ZL=_Icb+;ALxu)Q<|7Hf#*&Hb{75 z9IXUl<1M`oBNJnUXk5Yj=WYoeqyEAET`>Q5*p(G`6S_)R64Z^7*TDmQPUP`kQRXFv z2mx_3);%()q(AF$v-q;HW-rT^59iLSGO~Z*(c(XGkR2*6-uw0TQfBJLa38WpY}cQp z1+{1cFx?UVdw7F4VkbJ;QGW9?6pZi}r@5?iBy#-v=lvuM^6_69cOg&`0np(BJ3`q& zpBUp4gpn>}S?g8%)%EPpGbQ@WXPC>A0SO<}vVL;J?uUg(K)kL| zXIwFmpId$ks@>?V1XPhKv1ONA+JGc0Bw3&Hg)J~9Q;UVo|^1g`N-ft`TN`8oCDxv)hdv80kZxRc)VEM zMqG!GGm*&=HzcRcjLdyV_x65(4os>o=T?Y{xG(G~9#CyqSUK2KMvyX=@!vqre>0xZ z1DYUo>%^XqM7Vj|?5lDVt0hkXqIAB!udgTX5vMv(lz*U`?FKI2Dh9=2APT@EN5C#7 zb-DoEfCb9H8t8(IQ4xHit5q9Q~>(Cr2*8J95pvk4{@@HSD6@b;N5WO(6 zAMyJ=h_jH#J(#TM!afi5w$I}k({Ux17CFbna?d4OlN5E1qJ|Y3%ios@%ZPkHj;w}9 zVrO>&Zz>r=P4m=IrRXxrXE*t{JCWi#Bz1%1Ldt^o9TQsVpZDUzm?gnWa&npWQjfHZ zzu`>@)s%3k8`>{%0DE<((L@>qT?FJp~m@4rlb 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%0AZ3;t8}R=^Dr4O++N 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 z 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 z z%63ERcCneiF6czfilPrev9{9#IwUG$u>7~?RJzLqPpz-3zWx~<-sWobg~g1Wi=k|e zJh;xWuuCMl7FR`ACfd|dYpu}3-tz^upt~3VM6s%fGnClsCg@n?%d$_@uJSEW3V7V@xNQ147gJZ#+*T1x`qOy{-ptZr9 zSH^YgO`Q^DZ+!R5NdG8aB<5AqVy_wqRp{31olI!oIn#!GwcF5ZZ@Eu4O3k0SLq#3{ zNR-aB2`vDNGmis@APVr%&mtPUGncRkT-FL|8%mPMU#Mx>O$VZK7hR@Z(+t*YcZSP6 zBB#LKbHNT3$NKuJ@|RIS>B|Jw{f|kC#$9|_yf-pZLY|vv)T9MD)da57`$ymR;9$xg zm3aOGbY%zfiSXhFej_E0!80K$aJ0Cyr3=|A9a>+FJ{F%mPu&cCZ3}Yy`gKREm%E19 zY!D59j}h=3QEP4<%@Azq@o8zzxbsU%-Mj}AI^02M83Q^BePoFUPwuFL@6={9%M?mq zd#fSC^p*GUqIhSC(l~_)-8l&jRE2Ow#iQ@%6~YYA`xwvh$EhQF zNr{^t6y)?y8QRQ~uj|x|`Gd+jmwc8SJJKo3wX_4jA3G;H0e`~sLW;14YNst*I>~)t z2!~1#XHvceB+`!GPXR1~C8pX8b;?gSw6Lrq+o5;L{(_3DB6_v&wuLlY)RF!Ja_G*| zv5uf26po0&7~vt0@XSb~cBLj&%0pAS@|(qEmTK0;qoF_=)y|XRnHM>j;0JMo^32Z# z-2eJoHpVoK;)z&!Vf$^TYObL6gmx3ipIaNO2-zH5P|RuuE}^g8k?5p-l9vL71+e^B z64bM_^``>f)my#Vw0JR<^dM2?uBDz;r4ptzwfq4mcJztVV$ZtN8}I5)ETc9OEiiK! zvFUufmjA^wPJNoC_0^eY$P3t*B~R7_}%gpVY&EN}7dR&#(*XPORs z!Lt&>yPAO+?(E!exc5g%jBpQo+;|TDs=EK^fk_4Y$a3Z&?qgbL^YmEzU5)#GtpUjO zIA1aJoe~-&y~nxC$QpvTt?Zu;bnb+yKE+GmDkJPoC&RbnI zY;k*IvvDoH>Xydy8Qw(%3*d>;!=;c|&Je`vI_<))8}M4Y8;L(kn3k-!CXwk2bwBOj zw})iOKsB@WI=`u3-{{Zc@Sea#iaeT+{e4bV2TfUywu;=dr;I-=&ag7-E3S>}%#3fQk) zed^cR+AEM4;5dPb6nXqz(*tqE)2^v!LEcdnm8p>RIW(SRQNL8Ea%g6;{w^_E>%b`Z zoppgVuTwLNQmB2VLQ5p0b44OpN1h9PP!U-+?-k5HXV%a%Bk}4DU;Gwxs$$V~9n@8s z>MIoWp!gPT=B<^*71|V$ER@Pp)N-?vG>a{6Gm1RtQFxECQX6Ea#OBlkv23N2;fc1>&k{%#OOMo_g;F~!TY>tOx;$80uCg0V2=H~oE0CY)LIq6jF zcT!}RYmu?eW4YC|=B(J1=*ZUEdKRL#e_?`IyQJdzSBkQF1k}tkmcVIV{ySDv5QX4o zjvT2Y>_P3~7L&4?coLUetn{!psVORcv&t%0Z&7Y0Qn|-gW`iZKrl*4#-5H{V1ME>` z*Xv6OPHXq^I&VU%miJipEB69+&lI*WR@o0j8L0Z_gO#A=!9TcC(+?~xP5X@#-Kg*C zSha_%LYuOiR>yo8qSH;>Q>3RNL;zGyQf8hy-eD1%0eo;IbKFXHX^wRgJU6mu-Qp?S<91bRi?JxU9M^9Ibz_6bgB%J)?c zTNLUmh9TZhT5L-!j8bpA-?rq}%6w*X=#uy&1ZiqxRbx(XIa7YPU>g4_)O7PNh?6K= zL+Cm6ngawFC(L1=-jm}r^-<>E3~kGsclrc)Oq9M1f2p%6jGwZ3GfK;)YM3eW zE-QRkTQjS@=9nScJYa9iIp{CwTlC(F% z@8N86sI*9>@E)5A2XCN0S2Cl+mlgDYlPq_5-p&)OsK|m&3Md6S|9v*aMYUj zK(OxEhRerYgbd{I{92fBOo=m?<6-7v+#7jbrbpAP_Fcwe78y*>6|TT&^pUqrMD4{x z2SJO4rQI^!{G_R|?#_CXBYn+&zcRK6%^aXg*lP6O{h0sFm-&D4+?vk=@L7vofSECd zh|8NDUYH0#3&@|8av1~2@P4b9xV+>f?P@+imlwu+Ovm_#)e%$vz%IjviTl<66Iv8P z`!#c51ZaV3{a4`N{~OvXcE1sDsimbn1w>^H<~#l4eeri{T^`p7=w^UP|U9f_n;Ex{HUpR6gO)cxB#D8P?_aDzl7Sw-kiYaYtYkjB7Bwa2(e&EY| zk30Y&ZUE!gNX^h*o2dbDz503IfRqeVA&*2^s;0iM)%Z6o{s^{d6^cj5I%` zxh@Hqh!7W66BpqJ2ycK7VGvn%aB&*CY84V1-t9;jgpWfEp8w}t5;2%Vss}ro${Bf~ zY$9bY59EdFJM@!sM?@QYC8r|Vm{b^&Vz0bQ{aQ46MA`g(FdEq z4u4-74rE%Lv0$GEcf#(tDe?VyfzHhlLN1r2LU`zS)Co21bh#PQuk` zddefcyC3_smKMrBl3Ra7+ z%uIydC0ePLXg?cdd1C2G2IhMXiTckQcc)Hp20(F9O?GM{iUB_(2a%%03#}*x4R;I0 zT(EgGXDf)}zb4&r4SHfx0g9%Sn}R(BYNR!jPND0tgdQql0LFTL@j;*ypd`35L;-zn~akq=ebXMhd94_wamHR?4;9^Y*BZwZzW0g0`G zaz~-AuJ)U?zm#uOs_S2UJ0>b7Jni)Th-h8qsh~0&v(;82C{+pm?pUK1*)h%ee?dc4wYV%G6OYZ)?CxyBiS%pI z5YSsw@@a?M6i&_EaOPy@j}H$l7%0hSm4*X_45ZvcmbQ$!s3E5%L;M7~o@s`lBYrVT7n~EJ4yElj{dLbZ={U1m2_i`Toi7X0iEgYeU&wma3okBs>!p+5>KyDdfGm~nUoJ^q67Uyp` z8%6k%?`>LZU+*Xc5TuWBm(7hXeswllOlOPU)}C_;lcOD@q5Ks7Vh54M&u>mA{+MpO z-|k++WU2?m^^dP;Gv`$9s{l5@q0pMW<}me-SL(*woJL}=F^RHosXH19>#W>C zuBrEc^{WkHvi`8|%n@}H4jZWZ1W&+BybR4 zmXz49?aukG&5ytM(c1hD7=IKd(~w4a#&qyK-DrWOybyqRW#$&agMmRjvqxBDjqu>Y zAq)l+v3b%QD=+>_@8Eu+X!O7v5Jpd(4 z>p{Sf6>%E_6&bLzRbtK7C}Lh#7SN1Rcsjk>e&fONe;0IB+fOhM0*q%5k(Upgr@dj= zK=e#4v{tGp*~WV&1CnK?W%GiZoonc|J<>Z%!MZu1`nv;) zKUQBLNXU_0@5z_9TI7$#3b8<`6*zr>Em}r{WYl5! zUeI%;=&kr`gS6V@S7fNW6mLDr?Ba)KgRpe>vkZ-3cAqEL%zF%JH`q^p8UoPHDn-C+97m~aud2qin+2$=s z_&?4aZL2OCbs`TyetBWuoo8*gNx zK^_Y4IjhXaAl_RmV)D;f09{I5IS>qp?*2Re9ZL6xONO8i+@G1Zh4FVl|9VuCxc`FQ z<^jqU=Ldg5T2;)>sGeVpbBO&N#EzV1OhTnfJTT~K?9rt&N!!ST)FlW&Cun^&fMQje zQ2}D^Gs(RJ`(J)5%NzylJUtJHGDJ+!zXl52`)@D%zw}&bv&X_wn!$YfAskjdKbkLz zLAzxt_KNzB=qd4~l*?ON&jp&$?dC)0ni9AfMwKqKFBi3VFMn^|pbUtPQwKG3L^$6g10>X|GiM;FKIq(Q0 zOcyVz(YWMOiuufXGuVQQpwr1+3mfH&t~jDn4KT#W-yD@HSe7$8NS zzeVp9zAV2}*eDs)#WG=)*>_~!(A1qgd{o?$z02^h`9V{esPV%mZ>cZ8o7hpkD`E~l z08d(CC9(3f!e~<89_JG0dn-tILMVCa7!btlp<>M_`G9fM&t8;fw*xEkMGTXr7}U_X zYeotyenJiD=wK%g`HWKOSW-yOLRRuZO%V^rGP~r4F$HMX?6C({lD4Q3{kd6J* zK(t2KIfh|?yj1OQ-iCQ4(Uso1oP2s7SVGr5kWRg+9?W+ad`3M(Nd zA)zWLng>dws<%MHWa+Cf6bfs9>vaK}=s$%Ox%Yd62)|3aTO7>{gIf({WzNSKK3lyN z4q>Jlp>_d%<{ohPr2nr|^MRk=wUSq7*5*S{2#vdbX+~eMSCP>BJP?RM{}ZRaW4h`8 z$|ZSjBp=9R^)Qd``_l{O+?sjqQ~Oq|WXP(H+K0`hpMB?=VlD4;EPjR5Qt(&r+2!RF zd4_Q0)tB3Y?V#<4d56D(V%cK-GK2Z9q)~`;k%#NqcGM_JnK}UxICa3f$tBYf6+p1j z1!ge~iB(SqT~halX`ZIUHC54un;g?1yr%0IFcK(s$FF){ziz1S$ixcJSvh>ph7Fej zXBiXsZEcH=8F6uqvD5vfa4F=nL|0F~Oj)j2%GS0t(4z|K+Yckw7v~j{|ZeJLY^=;=6FVKPPGVI>N!gst(|Y z2~~{i*(`(~llp-D^d9rR{J#%RurgcW8K)owMY59KB@Y7gylt#gi8inshGm{s8h2Xo zCqubvDV}On!d=wSm5QOib{}=H(kQ%H7URN_zf5tcyF)0U7~pn!G!2Z&n#HQAwYPlW zso$XfFkAfn2d6(8JueK2yB5vDFDDS-^F^op@L@OOx-uid2yr<__;7rpFg_@ocj8qHMhX~AMzy^c5`PVI48+$8-GFS&!~-hSI#^fZdCdVA89J zv*=05=6$IqT};r`=DCU6EHar4oUg{B8rOUfl0uftzA}F4@jFl@#mhit@eNZclgm~F zwjKjzMDaEbp+;+b&c#2$;yGwKa*)Ai_xC(B;!__8q<_D*)%~0Rz}19P@Ft`ITEo8} zeZe}Z27+x}gdyP=gWw=SCJ!j$px$*6>Oa;fs`o>f6wD9fj~=)Ag20CxH{xHuE;!eh z62R1;Q#bOdNc{*_A{A!(vZZ)OgRbW#D(ViTSMX0s)`Bp7$rNLk&r?gA)dv|_Ki}T^ zwv$?tb^tkYY(^pqc7VVcnd2C8%1a0;b{Y-6Rtm?EPmvc>HcOYq zZW<@YM?-X1J-eBZgwSSZQAXTJt#W5yJ@F9yfxCG{ z>3SUs7W3yYAAkJ}lQp1j2MktXZlac|FPo>&GQwScc(OG(V8115Lne3>_pUOH`Ti&U zU(JUKZG{;rDtK6m8r=_Gg6M2*!A2eXjuZ9gHiF6K((?XdCyTU^$Y}vIeySnX`>L<< z7x|NFf5Fd!^(w=h<*q@>G<5gr{G3((g2o*Xhj0Ia4(+;=DsqvMtQ{vB?w7@y>*i(A zH5+(mR0?f`IiaY0aqQ_2&6{3f>NSTz2BU&|dtN@qBsw4JzAm6G+5fCl_6IL2Tna=8 zzejK>@yw^y;2=$|GDO?JnriI76q&Z+dGh=jA2(!+CFmFHT3KeawCU0$7m3;*^3w0H zhWI(`kyuE5lf+;NEA*)2>~Dc`%BRPctHOF)(Yp7^o<1BQyVb9tkT2Vg^B7Xax){yC zA`rOl+;8=p5rmxg)X%~IZ)If^{t+o<)9O`*5i&-1e(4>>JbJ9-Mcas(&UoVchS?!heMne`ZI}{dMQLxw3 zMAw%Bg5LxS#%kk+l50HBP1MhPDV7A&{GJ7L40*Uw7Hh`F~y zW%VQKYNY%pelJ^p$vG!75hTAU$;91vxI?&$Es2M}K`_EZFz2zfy*UECAzan7QuUNd zltDSqp9d`nYhI}?n(8>j+t9i#cNqd;-0J82_ekGI0HGzj(YCo z+ZZ=>#es-x)p!rvv7zORr9Dv6H=ouy29-3iA%`V$qPCZT1=K|t53Xk3yjHVMy) zQqm#J2B1}mf4g3`v2yB0?4y&>Qz&7cfP)!rx}-ug;~PS>DUwOZkP!~DZX_ixU=Y+H zhx03i7Wei@L*ac5X>drre*O?wLpsa%9=jpFAKRij&t7RX`_DJvJuxguEa%y~jtS+* z0q)LdB@ew`(3An;ux7-^A&_~)#RSuEO`Hr*_xe` zY@vf|0BCA=18a;6)Uhdf=P3s9!K~!7NFX`KSMjAM*107_v`<9S6ZTYuU>+FrRN%=b zID0r|UdID&*omd7uW;uGo(VBX-2mm<#4L`BC$}X+IBwpIda5i3e^#&5LsR#l4NS;M8mwSaU=U7 z&1Rbt;C1fljNrw9f|iwZaH08x5i8R9?knB6MJ7d-q+5A!{oIS3oZ9P?S-hhQQ;l)) zfnEK<5?7io9psZRcC!9ui27W;D*g5Yi@$QUF1B(rcvaPfdT!IXm8Y(6iqwDb==>4w zI*=9_zDE5Gp~uOtNs-`<+p$%#9+ft@s$G2>Nss3?SkICQLl2hcqFt3iUXn8m3|*26 zuTK@2rV`f_)P~=Ifda`6vz1O5NbZ%#GcNTUgLmLd{zvXBcU%rB6Qbk-2X^_Mg57S#;_lFL61@_`NU zYnjCR8~y)PCXeC z{@krHEu&4urJX&Ch_+Sfz^d+fVOBPKmIgzVF>}r9NGiMjbvp))yv3qC!csl8vkXfm zHPCLuRAKuhOl#gY{8N~S$CzJF|^ zA=5>uwc%&lG2nc7`mv2^z)%YI^g6Rn0*q=5tAj_4`k@*yE46te_QfM;AQ6*aNs02W zb5clOa(!F!mvxv@pJk!w&oz8+h|99|pN*{8#*=X<77~7v$o|*-jAL}O(FsCAc-Iku z4!Y(r?bbsT)#M60b*lQq8F_uHsp65NzU8%&m+!DwOU7lFsI|E<=HoCo`2N zlaLl!)!kRk2{PhjKWhd?e|*~i@>s&h5*c!)uo{Lq0`@0j_(GKn@8#RfjuYhA>cV_a z2OE%F%f#4oMqt5grlU%wfbhXe8Uo?5m{H8EXO&~;Ctc+**&7=#%hTUfFFt@GCq*+m z>Hgx$ey%e6(%!}p@9U?GFw0nbk6Rt#R+gC*T1Lcb&f?!%~@bkE^)z3!KX z^!0{1m`-ZKuoZ20P$kG@CWH#7arOa2X!c)BtA+4>sQXoKz;b4ET3+1yHeYTUXOq_9 z-KJzX{-~MqG~&D$!fvx0kPh^3>Sz<|n(pRoBn;0RV%9Z1EBc}*h6-C#jo(t%$`Oq) zrr0WAN_26EbtKMGbrE>JY64L7qj<0@d0!WT6Lm0)7inh%+kq7SMNsxi=KBk4SFA2Rbn|jKpCDa)>NQ@d`Fc3RI(N(Gre01x z_N;v^*a2;~#|+#qs-(rZ*nGTk{hX|XK<^oFLT;&FI3IB+YcJ4m*}1UioMH{Gy5Cxz z#>Y_L>~|d!p|>;YnSMH%+gRkfN~dfC@aF`8{${W?>UHOu(QQ{A;+eXP1HXN3-K34? z+?_>>S%$GQRP++##wVh|_F&6@Tco#H0ZrnB8y5>eX2O961^zqIF`neDpqs_FQe(?l zp2xZy2p`L#lIjZn^?z5cFy(o4dIXR`i&yTLYtyWNhCgkbsM{^i^T~(yKA$v~rH=|o z-viN8s7H76yx#AWlWwlX6c^-MtirpAWC3p|BY=Ka5yGl8V@kQLcCD}t<=@oA_XHl^ zZ)|Q(CjYJT!SktU=Yud}x{z+%GK!WH_H61zDpK*Omn(u+cH0_yWqoA<4lTJW?|Oz! z%=+0P@u#lSkDmb;_U1!ohRDHGu(Un!Uk}d^82=P!clqw}>zl`5%y=sQ;N5U9<T;|8LHwu3+d;6$0J3Pllm2xlZp8+`fbl06=s* zyJaZYIC61ub-G#bV@eJK;8_ZGiGZ!7Zaj*& z_60!-6BVn%=i0$nhvkW&Vl=|)_py5IAuMYfGdS1}ZRM$%YVJ`L+9$#|u2edem1WoA z@Bc+thP}d*VrW{i{}6SlFm+DV8Qr#Z^PgW4taeR0!Mb`0RV2ywuq|g2b9(-vPz~V{`7Y5OSCu#%+b&BUfi%HtU8LV5s|WnE2E9pqcCaPo+##12L8LaD$b{ zNk@s{ov2b(l!Xfd^Ia7c2=8${Gb8-^S5G1^cb>r!cw6n9tI^!7W~3QT69u7DyV7xA zk;A_Jh<&=zXAQ(@XkL^sLj2^&W4YSUOTps;ky`Diq@bfF>;0( zy~>3LOMM`)yQn(ODBG0mw2VjZ`^L)?=t^ZWq_&#AsQldIQ*SbZ%*_?;v z_G!HLC$<9TgOUFnm5_OrE0v3P#T+l$F6fS6mT{vhMVyL&cVs z*0#}o7HMA2B+|;2h)jdfthf{AiVlGCS&`x%lq-du*Ty)%S9PUbSnBN^3{jaJjBkTT zBow)*h(q5~j`+Cqe=vr0`jgJgL66RI)lVKhmfCklc|7dl#pu&=ZgUvSAp_j6oAX9C z-9z}=XRGAp8ts#|R`kVNp=>rw+K-6uHh2(j?5MK5#?HqPl+=9>8F7hvHUesszO7gh zj7OXg1=>Z}B&ywYJqEQ!d?WuOt0+RA_DV;-4^U;+l6mB&RfN0kr9Rdz2Wiw1=BI^z za?I#gx?V{=)&9cX-P_|+KiiOITKL=M4|8xvc50ry$8_WGV3eH#VdkAyeFfoX!`ol3 z^Hu<36@XMP;|6uB8w0mye07ixK{yt{i=tb6`dVMpHJykK`h(eRHL+Ly9EV}>SE@0< z=e7U*%sILaa(iWEyD>yhf5U)F{Ku7`xmGt3DwM3L3Tl^Ov6IuxJx+-$Sf`BwoTHEr zm%QCM?z&ibp9kl_rPJ)^4vq}rl-@LxF_o2hBbJaMN~;P?o$3BDd!Idf6T@Hg4kjRwY$+7}Jhdpii0PY};KS-gf$wAzsUco=XKK_H~ zLPRQ_j`vBi;he#99V7P6CAf#rraUFvjVkkbZ7>((=2o)Tz7QGka~CSeBKeaoy%z3Zwo*hK50%jMVRbH)+VpNM5yiK-Ll6Qq<6I=jvGA0VxtF z99)|+(h4BoSuDZ7!3{SSv2A&u*TTcdtZ*Z1>HSh+^PSbm0XtH6JI*$0l-MC1Zm>TI zY*30z8@0UC+M2ED&F}hYh#f@J^peZhK6|F$aDHaWyJXZuGB_4PW;)}C_@%#Aj4WUM zz0*>E{{AE=YiVg{(e>bU@&HSqpubSg!pB#A$-08`mGj9kb}VhLerGrbZMX^-Oarr; zxZfs_|7$z_0WQeAv4yVU?S;w1!Uw9UZR&s2RC~G@!)+Ta_0g}t<4myd?$yX#8r<%c zq$Lc5ODqCLAJ?Tg+ULrhDy$W*0-`)NQ~QfLa_%ct;J=vDf6+@zviw#3$~|Eg4@T2+ z!n;KXth=^i?KVbz-|;#VCzX2F4isk#70S<Ya7m@LW!5` z#Mz-BQNn}oY;yL0VYC`=RXe*nI62EyO0;o=>GO}}s(tEjS-E#U$k4!?FgbvKiUW#- z+eiXMGiJK0#?7O0)s>)vnaNBjoZP!|+92F%Y-;%eY*m?-7E&*}d}98#cwhYWmYI>; zMj}sr_J_CH>Bv^spD&^$Nj#t>#Ll; z@Q77RfwIQ>_(#B3A!8KX0uT4q-!~Tv2B|mB2*nFTji$alP6}hC`zjoIROS%zV-uW{ zJjvsQ8O3{HkZbah9bBVV3OlTg9Iw-LJ2YEG#K=JQNar_AF;hb%*H&?RMLP6g9#P_oA zcTnK8QJPzQ2#$ruE_hT2H7*`FdD|MOteXSDl^!hY9AJxsSGkM!xAi&MN{q3&CXJF? zywWS?wT-8^?8z3l-RaBf%@&}JdpL+!zFLRir8;pSyCX52`xPaD5m280A-aqPJSoms zcGuObwbyZHRapZ8ytOgFQC;;PB3F02_tP*raE1z}+m!o#9O=paLAgC}_xG0w-aI0e zn)Y!hLq5ZeV`&F?$Z)3^Rzplj29V1+(#LUD;9mZhL(d|%Qct9=JY)Su@{vwKqGM8F z;YD?_fWYS1z($80%pBXtTV2xM43zDNHrJwy5XxEJ{g%ECwzlfV{_K*UP2pFDc8Wqf z*b7rnW39olsoCWYo2OHW^5Z4J@aMk>G|RZL-8Jnfqc~q`R`n#AR?Y7ma_w@3!cjk- zDM#w-!vW{dFXQ#=Z%4coQ1?MQausQq>Ffp$B;Rj>?qvS$&JrSo*(`XOS+k@^mhR-A z8PVTF;mJCbIGiyvz`CK)s)8!|t4J0PoR!9DT~?$38VlNn(Ri{V_gH_%_s8qnFCP*# ze^PbWGS6CS{k~`N{=OKBTBFyF!V@2eF1MqC3ZwkavWng3GaZD|_W@Mco+t*~;wDnL%1UW~8t-hirtuS@U`QL+CJy;r4a(_d>{ zmLvp&%>j>t!wgL5Izw5-XrbV^o+ViUcK862s->Mum_SY{1wkd=*w@!bD!IEj(Dzd5 zFbf#pXMVCqbc=}jp}9+o;dTa(0Om9*1}5Z{?-sz3QeX_b|u|g?z?>hdQRt$ zTG9^?J3AR)lCA6i=@?O!)emRsV20B68E^9_;4)A~x7?<|lwaP|uhLun8W$AGcp8)Z zqr$jGF_M_woIBn}6*C2N$FEtDQFb^ma7p~Tl==81*Z;J`4-cD3#!7|)^oULiYC7djM49Ot^w4J-aZ~m zT+o$1u2&yR7Ap>W>>eLgOvhw#kKq(~_n=0SEi3lk=|@#pyN^=HCCi1KtuwD#l}Q?e z_if=Js|%qi`M4hf7=I8YCz!*5C{2cfTdyR9S+dzTr8r0UzvIoWbS z(*pdm$**r)e`_V(K!7cjm2aH=a3Kop%eTqeV=%5Liv}%m34>D_+MyjIx zhG=sbeLa$)IW{42U+4WWi9M_IzN<^lHgg-8`93K!yiiIvy;XNH?r?D3#(B1Xw=G2r zu^3Qv<9%OiqsWEDOJ|AW&DM3*sMT8?WO#W@2_U~Lx$nP|X#98*OkD@id{!y!uEX^* z_xW28Z@)jF6}=m9?D*Pj0L(`Z2t88hs2&gbLAor&lF~C=+`0aly9cKkRz9LfxoVjH zlcklKm@eY8s;Oz8p)s?s)t67+~ zQ-Bj{$?`;sb0>r+$D^KFedQi=QB5l4S0AnjHtqpgcH07Sn6`mYQ12qw z3hnI4^@C~Sxs}yEc}7c4&NB};%op^FCinNl7U7${9Dg`T;)^;WFi|}~MZ`O}m>yH7 z<5!NPU){!TpIfE1qT7uub1DmxHWHZKmpFS-I4MAY;#Z&aBb|Hm&`L9Aet^PhDL0-~Na+wFZV1dwuvk9Rklg8b$Op zbv(o!0?O8c;xRPn88EM?pQQwrV!<5)#X}MIY_17}VB`7Q;t-US|F%XtM)OU4zk3!o zFnXB}YDt|1J%~x9J+cxl z*O4DC=LaE+(*(M4CR{9Pc`%N^V^oAoUN?n@OHR7oA8VBEcM?x_H`NsboQb=8tN2-Wi+(nAh%kC)QXD znJ?}PzlDlw8@s#3h{c_#|KGS?|Lb>3ci=}7ZmOsI!h|rl)Bl*EoO=BUH(w_FpTQ{u z`2WaNF{2ITv6Z^sDZwE&nMZLY1Wmvuv%8~ueY-_(6A$=q_-Ej!r@Vv+um)P2s)IpK zB)?wpzwAt+ol)=&;i`X#<|hCTj9WhlbBOUl8J=Kh=tN-_(70qCIGI^s;g6?HbJ)+ARsu~^8Z@t-VVsA~d7{HjU&AiRL9zymJsB_#PaV#Lljw0Xf zVq1wl9E13S%C3a@+c)>32d)g|>F@lui0@PW{j9LuB*x#+3SS@$X%}8H(7!wf+AtA3 z?6}Ad=6RTheaUWCm@YAyV??`9(u+a*Gk@lBfT8!U`-<@wa7t)d?q9AicMD(zAc4u& zKkmd_uH7{HxyQ^zbPGyEGrRS#Clb@y1I)8kRp;ZjUQC`KS^7(D6WLtTyF=!K{hd<+ zj}mOx--@!jc-~ifRoliTV22YhulwG0R!vO_rl87LX1lVPW7^72NEIG7{pmhiRj$xa z*eU#McF1k-^w?%`$z|8iVVjo*ri)RHt>5=C0L(ovXC+U3wP*TVcG6Ji4wA!6h}4=J zLOOhF^HN3lVBF&hyjo%pfO*}M^!q48ubw5O6&I##Z_WvV4nP|w`D#yyOUUWcxx=B$Y_j)x zz56n#`o#Go%mIMqfVZci2vC$(*yY;N(&$?@Eo-eQ?w>cvZwlo6e6o%NZck2ZII6La zmTtvWg$`@efGh*wbCvjD`t*-lw>psJZFBNuly|L=peSvz{ z*=jhsB3b)W-ZI*_@U&}C#(Jv3$(F5IO^-s$*t!aTn7QO$gj`seoA#NNJ!HZend4ls zx8$+12Z>Jk+K+RaOSj9#7K3ZPhz>a&a&;6sJ$%gD^6Tz6n!(?@B+M^E1_$Z4nQvV6N8l^A`god|!k%eZ#P(ov0a#*p?Q zArPhLf@ao<(trqTgK=VFj)n(B!^Sy6+240H!d7Os&8H%;A(v$yA};Cox~_MGM7-4z ziURVR-usJ?#6_@o9U~~A;oU2DftEz(j$(Rval?$gUDQ!8yzEz%$3Y4BFYO55g_CH- z`<9d$$q;Lr-LA$ob6Y7~Cwf%FBK9ff5}KwT=y7n@qVf*(PNafl&To9xR(Rx#9^^<< zvPL4AZC%m$KBK1(2=r%43~c8(HFZ9_aNxJ{0GGEW6}9*{{ya`u7gC@BmA5Jw6ioj4 zXvkvS-1`9J{zxfod*Npiqtq>)9-U0Qu}RcrQoJ7OXK|1N~4rMZ(CUp`Nrt* z3k1e65nNIbYE)|7GXt$p`w@s~0VPVv2ypomge+FZ&W0^567&noRykpl9dGZy2op=d z2E@H-)3_3Y@nJ_t<2$2d`f;JfHgkXD6~VsH9$Uu63g7t%-wq9Z8VbU`xYN-f+on=KbztHTdz#)DkBup?GJCz z4#hj6ZNLUi7_-%gl19v2qhOiD2UhgDZ{IVDr>~<$qXdKJ*teL2^yZYM(W^`2Msv!f zaEA&FdldK!OuuZ~v!+`(OGaz%Zt8=oiv)9G1tQ)evS&UVhjjT{x0*i(n!?7mgGN^T zt&Xk6mqD9Ka7Gve_Z+}2aw4MuV1~Ygs--ydevhtHvLQJ`o!ba232!!%Yxc2{MH^(v zuHTQ2+SpMd{rAFgiE);AbTz9xheM?o+Cij-#;Giuedm{ z%A0gq=PR;weflI%qbYwSk8ZrC$pzX5J(55dIqgN_!_0bd8;j}l=FAjxD;tr6O(dqV zdJuL4(MOA+)r>rUHeGol15T`7?k*dW=o{QOb=0K@HJ6@G503%g3h?;dZ(O${u%el)v=qDKAep;3jMTtgRC(u99VPKR>g;;N;$J zCmB)ygwW)OWAk4Jn#H}Dk}1_48vmjr9ClxN>~E%U|P`MO+@e^42`cVe~DU#Vs{(8+

    =Cl>&#l*lMiJ8G{{M7KzgTS4i!S`|p7*gMvW`8RR zRBBae(07-NZG{&#J6Kj0ejFk76V+4DB8q$46-L{nzDDAXF3+&pu0Ugl+FHpnlBYz=?eeO&b&M~o!&pSp;wP*;FwVFnPeNEyV&y1y%e*bYx}^ z6LgQR3K8B;cC(5EaI?5McQ9j_+w+wnD*mzA53h7{R$ZKZ!j>)O5!;;%A>7(mUeI!L zI4{&ormXFb0|}_I3LNd2~$hQqq`{k<4KrYcTV5ja#mP6w7%Q<6*tn)Lp9T; zTD1tX=$Mj1-Cth1=%7pdsWIcJ&K9h8s{*eMkP1g14mK$IAtLbH9u+G~`a!aFofHSM zS6LAZqHPOxP9nsLVb)w}T*tPq$ZdZ`c(|d$&$!^fh#%CF(9I(`}T02=$-lK!^1nH!_AFX{}5?j z@IG?o;D<)3<7zA2-fevZRs$m}PYG%I0t{Tb*iYicU*}e>sW?C+h;3+dlVY-5QjL_g zW5&gB2DR(2QTM4In|IzmPk*4#PT8R~^5d67T-qbq6Xuf05J8u;5Y?%ZQO;hgTm*7g zzOmsPWGm3zkS5e*oM$Ce^U298mpAiB1GT$K0Y%UEa>RW%f)~MV0OS723mN&&3DD1} z;x_~Y;@$_B@#ehRei8R_od+~qcM2O`Mi!kmpV;-NUdT#Cs-E53UcJ=ke#abm_@Cbi zNN1(9vM}=VQ}&^LtQ<*;OELVN*N$wIQ$P%u8)`NG~)cO_e^iPlhG4d3j|`L!i;MN0?corHUEGd{1yo+Snq527e1{J5VF zs4j|8kJx}o%`(w}w-pk9_C%6Y9V~pkpmE&M$l>NM?MBTNV%qJ;_oYRTV5O7q6d>Kf#GNI!Tguzpac@#)-*ll4 zu({=%c-aTACv5WVrZQ-)1C3_R&s(KPiOEwtR+t&?ZOdpF)Il3lk587UPpB^#Dc4ul zz4K(6fBd#qU)f#NY$Q?k2GOb4iGUrwp;v9PLBDrNNPNRdjp?+_;=4V2+&eg(HN0EH z4}`s&QQ|7!i<-Il$amRL|JS1GKE>Pq6>^<72b}&%?`aI*szf92VK%D)&6S$s8<0Q0 zcsF51Jp4)I4t0=jtZP$^YmRa{=x370=Z7RKf7Jx()R=c>coJ-wIi8;*19f*Q4uf+? zj3ktJ=qqq3Xx;>1mk#ggq&lTm>RFVGxL-GmHwkh-8!}jUvQOGZ^5L$maKkXBDS)QHi*JVGzUyL1yhucW8AAmtn+ z>)GIee0P}!Q*y;32MK)G&4MD>8({5wu0IX4FLO127l6NW1`4q@erBc$U9!Lz(x@qW z8@j{M16kMrH5{Y@*9*KlHh9fGFyL}Az1@k4vC=;q%8SboJmyN_{i5anUj1wo3bfH# zuM~Gz9^&$Xv0BIK|C(7ah@HQzCRqJnBO9?Pwdb#V*@is5#*xe? zbj#bdP*b$N?*1PJZE>xeCaIzSj=u6`hi58sL0wuFf?dZT8F#16zRCLqujfbQd#JQh zV8+#PiB2T%2IEyk;5}Xr!6jN}XR4S4@UP&ECHI44eua<+O?)&ywv86K>_AZf0hY+C zTR^3nKi9Bbu>ZZTKSe)uevs~MI zF@8qTid)u!B!mCx&3aOy{g?M3laHMKe}*6V%=OKe+(Ky?oV5XW>QE=D=${bq-)z`yP2$nuxL}4mZrj#`4SyuX}JAiUX)ySA(^3-SS#0@ z;_aWPVq8$)XqCZZAb6)9L9=sT3;DRC#Hs!kT8qI~g6f0Arvx1mhFk7GWL3$2EfHoq z7%&@(hp~)W?U=K?03V=PPBBmsFv2uf&gm(y1T10q$;p(%LlZ5gl<5mxGB@5uq#kt2 z_S`d0Cy31;?G@M*Vgi>bPK2O4_jv9yutm=yB!_KJ{{*!P`yG_KOx4s(dzK`xxHj-S z#5J$`*5bt0r0B*AcDxpBb~^Z4Ee?2;pvW^XOpH1v=F!^iLp&rO>Hxx>JD_5Dqf}^Sl}*ZA zYuo}ZSEK8o&I?p;K2_0)B%_9$*jDmhcn1<4^GIXj8-Y(s=!#h9JWOIO9^Cz0gB35x z!o!Kd=km7Xl79BC5$elzxTo+!=z+I9)dciQ<^!)jxs<6w>pDH<;maaYVJG*xKl5e# zx$HXi$jEc^>D>^)Is2TAj|Zn&6f!|;as^SJI22l@?V~n-UE8d0o_YVTXEfD=`1+`S$FTNVHrpLg`wzrgak8Azg`c&` zi(Sq^N5o;?rYrI$5fO5L8wnh!=x4lz6 zDY1p~c#C*5i<}}!GjFc-Xx(^8Nmt>Ooz3`bellhlTV6n>#cuxmlXfNS+BMK2_{tS} z(?gDPB#0R!na3o(x_xZ3cyK>(5W6<%`?ki7R}NT*#0s(pHU$>TBmE&@bPd+ZrIqbjUdv zcV?3oF{dt(MERAKl0DlcDSmW&0#Bxl}(T~qR zR_#d?Hn*f5_N_Xkd4H{Cmk<7u=Xr7T;|vMtKxbxv41J9PieT|VzS4&Eib~dI^4DeSMqh# zqj<w$IhbR9K{q_g~^l3v+V(>q!|)Nfpld${H-D zLu7Z)OCSu)X%ZzYlQa@>7Q>eF?lEMJEvVa7GnH8EA+ z(-q;-;#G%!fygREU-I^$mzQ{+{-Y~Owp8!?x0p6~q+>9&IBh&|?omg4_=gC~DT^Q| z*p^}7y^BiQR*~&~n8PQSu}1fAzpZ}R{enu@=~hWRF|LU&{#nZP@Fr!@b1JGWacfB6 zgGqm`h%`5Nr?Z+Gew&OXyZz)7aijo$ z_;P=b6uqIDz$i&kFjxJ#N50XxDWYHGB#{CtfcoAv<5)Mj2lH|eY|I=e7u=Lx7JI1c z^>(k1D%Y}!jTiur4;BIg=AC((-(0LJbL)%sEHne`eN%e==#r4Bt96s`yohmZu@Svyv0II8!Cl_uLlQx*4F^{?qOEKiU?S0BAf1QK;9=JY#N*oz zV{oR8)uvjb?#Isu&GflWegn+6ZoD?tF?P9M^n78y@{yFE$fBs^m8(bP-}#&=<)yWO z+7dTA<_?8!C+}Ka*0_aVv?x7PWaVH_Q(DzEcH?%R59>b}{=DkcUO)xXO6Y7XyC#Q~2z5o>_cx-`t+eXhJNDpkcrB!44? z$>G5Bx8d4-o(2_~N?vC+A3ZCvazGCXybL~c43x$5JgmmWVy5-5sYS^)7C2gPqy8`1 zAwP;k8;QL+UEv4d{`w(fZ_15YZ|U)BJkU>1d5Uufa@hU=qrO(hMr=?AK$X}hMbYkE z;xBu*aOp*HL4&IW#o(hSo1O{!#OKxwR+FkITtX`g`T+CZq=a&CNBtXde zmu&-Aoa0QAi2ZD$X%Y5cs^fou{NGSG<`K?-#4E(pOK5j2nf#dZFQjfD&(;8Scp;Jt zXpi548)|~|-ROTCCjH!~T^mZ^w$uEFs7Rn10LZ5OJ4x+hD~*ZzpWXs6#yQsaa34bL zc2?BExgQ_iQ}l!YMwaV~5*v#EL$NvZJHs?C^yfM(@y zbJd%+T)4+;yj0Mh)jm1ErCg2+`=z)5Fw(Kqgyw+P-0DqX;O%0lhDbMk>W{H^nJ0@P zc@5_rx^I~KTnINNPwWy1vbYF$pTN8I=vZpSVFJ6O286@nx?otk)VMowv2eNh3zy{0 zwXMed*oYJbRW2xRuPQyzT*9diurTack#2m~SEjQwa=nWa){nM%9Xj>YDNW=T^GolJ z4CWqqPXtEwnkoD3=3`c{~{!8N;d~GsD=Y81S*m7xzXIQb)_N zv#5}}!jgne(5z|sXf0-Nhcr}GVY9RsBi4Q2rvHIEoGxSi?XV!O84WU38y8&+B?+Qa zJG33t1j)3f4AFF3whSbd>=Ni_eYtH{_urWpIZG7n@i+))F-4oqdw=Q`?Q^8lekGBiB;6Hkgt@>S@1H4 z>A6RHUox1~%a#&zH)+idr>|Ng36TWag;?&n_Mo#N`nJ~C_}00{-vrcXy(edKi5md1i_ z#oTLHSp(h%05Rhn_7_mkodF3QU}OzyVDJQmi8`>z2lIC!2rRfS?dg?yvw0P-{2+r0PUH+t`@glj(k zoVyo6F7XM(x{ioiVa6q*vZw|6)6xUv8WcZU#eYr%+_gDg9zHCGk``O_$qHuaJ`Plh z^8oaG@mFz*xidXVDr$unV>bGG@$ptPM5x)gMy?%wZDc8WV~laXkzo%o=B>+?p~fko zK|S!LPE6u9V1ogiOp1M%9Yt3cg2xA&OPeFd)k`_$M^#J?@5Ku8V;d-dw-^C4#d+l6 zt#Nn0LCN~k1J0}-U-uUt8x#*Gja7R1G0)grPR^5}o_Lr15oUWNFyWFXmop)gS$n$+ z3yJ^?M=-g008A6ayRS;KEBCqVSbz!oFO)xvjpoVXi{fWo6*0F4Y{!Wcg`f%lBWlLR8Ypg@8j_$?aar>$@rD z_Ro@K(#T?7SPJ-w0&KF-9rA;FC#LM^-78ht{YHD96elFk&d8)*21$)uwV0Bbu}-Of zvoBc?3QGATKy)JeHj0Iu*8{68uY>!&_2fxkv#X%U@{@Lw8&B zM6-`@^whHw1H>=_b%K#?HC--HM zJU#u_!sP9frac4m&nEWjme|^2#dH{eOf8mQ(RnW%lMRWuQZli#*SQ2vjY@aWVi2xZ zBgK5y(@!7g3;Ae8KtP0Me^!bgMN1r-%1G}0R4?Vih%LDkW`U^(q%k&M?@$ z5-9E3{0A6yp@EN2Aud3(e(Fteo1g1OV6=envl`urgDM;SLo{;xB#|2GZiqodI84^H=9uqH3OZZL=J+3*H3=mc zI=7}->YR{blx~1eo_j<5h1e>SHgfrJyqK##1amzvm#rq6`(eLgM7CV|{3Tg@eK6PW zUYf&uf?%c6)UZRCqw}ULGqUTDbYUlL{?jg;j>kgClHM7>E$S8s89s3gI;v{(t^kO6 zEFKff1l4YkvWZ$KiXLJAuml zM?LR#u=YPhc_3Zu)fo7ORU)CI0Jwa)3rq)<-lMC@WL^kVZvU(B{NH_D7XJ;8l!q6$ zF_{6NB4cjOJAm*e>IOgE7ACxR55=hBlRYR2?NP_Fs{lmq|M(M`mRug;>q}l#`WE9i zpy0dSa^zCV zy7b;jmv=BLk}`hX;-c(V3v*f$e9|}SBE|b76~uLS!A!yU1hv#v?V%3nq z=3rqTuRh2jVrE86M5K7b`ZPVf?M^YS*dxFYQ4Th$pxHJ%PKBEEYG;-O;u`d=n|^H8x$hig z7yst6V#Xs2nv7@wI5OtaTIFKi;CsSvy_L#pEu-ejMUnfF9G}JXDv|e;E?v?Pf)0&Q zb!64E`(Taf#U(TUU{gkCcKuDK+XMD-I(qL58@!2_+(LLJWIJgj6D$6{3qcl2E;qvp3CVoq5IWk+|Ncm?lOG;BW8$gpyg18E^w6dy`v|Jt zleA<+6~Z><5E=Z$?V(nSubN{k$^9n##tiQp$F!rL6sjU)L`3g@P+@i;>&xYsYy+bL zChM16CEsvBOO~jAHyqSFMe8g(eoUPy7yYEh6|)Ic#}+sUA^Kb4s$0w1yTUsKw12N8h}9e1AB#>}zKkddj5&BUC?)VvTIl1DaHY??L||ZH z$5wu(O`G3sPH`@eOE=gHu*ed6_bC}t;}n<1V*JCr27Pwi+w((5XrrYoUkSGc$RX|X>3JOS*E;Z6cr1u&E0!mFl!h#gf>z>(r|Ms5Q=X~FsnKR#a zwtr|su4}EV_2ykqz3=;(nB81s1l{-aW2Hmo0-FN9?lzX?p=+kY3M$*XaOdCa~sktik(nLoPm5lNWyX$}v_Em+8LgjP$Px9@)DZ9i3@+^zW9l72Wp7pG2T0rqK>c^+Tig5Pqi)q)^ zJM98qOo{faXe$#bXNi-K;!Pd0zW0obw|h2Zxy*n>vH4e`c#6UKeL?cEmpQE`!z0b( zfE-hB;|G(X(5ZtT23C=WO6z;?$UC|gUJNUkat#g;UehWlD-Ls*d@MEWug|P{tS`Ud zvW)$^1+AAr+I~uaKkQsTS6^V8Wo@;8K%sn+!Jty-VOOa`p6ZHiZr^fV2fx~TCFTT| zNlDL_!7@`}M4xq&UEhiFJU$I~cgodt<(~|@JoR;7L&&Cj;bM2hfp0>74{o=~9Y}K! zt>#`l%OL9(zGwOS#>RT#9rEznDH~h}Xl<(Qw_c=!eTWZLKo&Z=7Rt-32)jxp8%QUO zhC9B9Gd>z;>bpPFWewoPS^DzF&r*(+(>v92JZhiToU^xATOMzna1gm!mhj_)E?u$xb9mY=Gh`JG~$|mCS%KR!j1H-pHI^oAO8UMB5aKLY&iH{$_^CN@bShaD{ z+Aqz^VYl1T*D{~li*un9iOjsMdqq+owra{8d)amJk+7Fd4bBcHr+xYW}#UQWJs zit-Dket}w9{-HC2FFYK0dK2Q53|ZXSxAJX}q3H)7UJhQJ8NM_$7i^xmtI)l&I$2Lb zB=5Ctr$ippr|Y{|>inNwayX$T=CkmOJ7~EO6e(EDIwnvi7ptJAx6tT9l~6(AbG0;{ z^Gjb}%*9IGY`U}ZvGv2@`wiMci$K-xR6n>Vi<+9v@gGX6bu0!Xu?SjP;rI7$emBh% zB-51VK4r^Fh`n13V9(+l8J5EDqw;Hv=U6Y^n=A^HLo{1%ksmpqQrqYvaen+L`@sH* zKC}7Bk$WZcxx4Yn7xc}q?t903<|D)PT_!+0?dbkIv=(uyz%{q|=7-`SL))?;g*O$c ztLgKjuU*>lA7o;8yPbXTl;fC{p+%L`jBQP0cPlEm7cDuBkG|;4UE;TX z`0)Nou^B^0k)WP4T^E&1J#yDaFlzy=M@ZoS{QVoWYWK&ul5&)< z7WVM7JBcS&EIy~^PIxnOeE2ma_V8K7_&Dpj#wt8ya2rOrjcs&Tu*CwN&@HS}fX(yv z^;*2TpW1@os&b9M%2c(?G1jxnl}dHx+aQ?Hb=Jy9+2{}ZM%Wq9M^ntoOR7uDtBkFz z1y;@ZuJdadOQ_5}Xq{4wPtsN(EGe*}HF~Iu*(Ta#A@gT`iR-o{W%;o=m#*b7q#p2O zAQvniQ@rXblisWEql5F`R;Uv5;BUk-k4@OO-}I%)-C3QhNtc7Q3cblURVlPL7nM-Q_r|GSFd(c%WcaJ!rFYUwIaqWs=ib=s0{ zNK*%eJG$?X<{CJmX{rvL3(1pj6wd;(6A zO}1x2Ygl1J^Yi~?L8FmJ#D1^m@Adq>KmWyS{Ba$AKkvWo=WqM@+aLXFnDEcz-({k+ z0U2}%)CleSu-}fn_xVFaBE$9qBWdfpF<$ZDO-`cPS^e!0ZN(YWsIx-HQ<5$ zjbOV5K~!nU0P@KE?*GbSacn~Bm9S?QT+dF_Ra7E|ja&M}g*nkH$c=q}!$Gx^_Q4zn zEp0d0&d#qGuizC)G8(}u&0}UA_p4j{>)#*M+Es7nLH_i!_tt1Z95m)IVzI9w2&XMI zax*}8`%`W%h-|Ymc6JrAfRJn5xJ+S(EdFKq)#Aaru7`n0KK8ir>LVAK&p(xIFALI| z5sM*2$SKKjnWO>JxpA1zB)IH$Rhk9)j*B;}4F#HN$wR>x3)M*SVI4XyV?P=VWH0ToH)-}gu zSuaTCw!jNk^B zT>ioJh~X)5;5fv#s0VNR9SGzAXZC{_m8nzsujkZn8vn`Qjeyty4xr$5l^mWE_ifj& z@H8OvulM*N5W5PlU>EkQZ<(d^UvK7*=j7)=(%P}p3e@O|@UNABxSOcIp7J%}_X_=9 zq2GJx_fz)U4*iYi_-(2G@AqYYH?FSqFK$%z`Md98r-$VV0Y?B$B>{Z}~7p zrH96Ac&SQTJbESMU4!@xTs_(P*z25~p1&Js=bO;Jh+Bt!$89bh-6#Mg%aJO59`nb4 zmhbrcS6Ll}?PFx|%_V6U3p8TgY#FvRbUsKRX#{k4zqtK5!1`x;{hunLSaLk!R(KQ_ zeyqS4l(7G0(oqoszs4&Z5mV<_qUJ^^QM_|9Rw+`*Djy^*S;C!9}}T`b1Xo=e}V(0=%QC3 zx#$7>_#Duj3SUtD%SQh5hW=-G{ZB+bPkyi1dal?ZYZNDuU=e+`7Q-|62n+@Vw7+6G z+(O+jeYdLkNFsh?Y6)}!gfe6O#g&)+c`P|-Pdt7yoLUDu>4B5jX+5(~HDSNM`}dmv-fO>~vER1k&&K(;P5r;rm;7zS zl#lzXn>40{Ia!$)dmXZ1XX-Ng^!9apUGuoxkebWuaEHHyLw^(3TPe8=mDqLYY|jP= z`)vF0?xyqnaDC+-m{$G|JT>sdI?f}j#|p*&>VE&=@xR(NC6TqlWyAj9`muj;_!|74 z^Fh%w|0srt)}PSGaQN{01NN`CWcUY%AM1bM_gDXlcYZJU?``(4arN(q>$geyH_6y< zL;9D*@&8Be;}5y}AndOm@bdU~i=p8T?-<$7@2(0;%iYJ6n}tUJ$L^E{>O_ryu8RDA z1vBG+&5i&4@An$~-UI(Ndw{4g#!rqU8ZHkKD-B5g(Pec$7X7}bue$aaz8u$6$vggJ zu7lO-@t)?}N~{`^(VOey)YE}vKY&J7o>8aoQ~Ak2zgWO?RQm2??{L4{G>zBwwqSf0 zoPZSqASCTtcZwbaYpfnf=6mRf)wZ^;nX`i58;V`ME_Niz{MwuzwfP{%UiJ+wSqJa| zo6gZckNG#_A$>sI;Gme(T8hX>^7C=O0EJTjlsUuH&DN>Y-%qv6#w01@bMmnV!C*gP z_Jd6X7ZiV`vbRiBX>b*}R+u%)!+EGfS^Nf+KDgZ$1em~LV$vkFSB^wsvJYvvwMO>% z7a#m+lU(gBhqZT2NY81py<9SC2aH(4B?V2cdz<+D=nJRfiA7W%_a-$w*WGSbsvo2` z(|up_&BjW2kQ;yEki4gmp46q!dHp9Ou4k>E>9G7Z!QJHJyuY)o-3uwh5`Jw&sX7)6 zV&5y78ZIqp=y@4_6EwkIzI=^S!~t2y(n=a@1}Bba24G9;zT(8qwb60J?&;i13tjv|j8{{GdWYXMrR}FdX z!b+FA{Jrqbw`md8`vHF2)3#le6gY}S7wBQ%hy2N&wSC&U zN266!%s-UZhYm4iOT2J=!QylBsp$LnGs^8^Uv;ef*fPH@%FZH3JIJ6`9D1Mj8Y2U- z(0ReM6bS?|^g=JKhT^l5;nC96l%en`rUS@<*Q}}A`gI1y>qSJA?(VnL)#v>x&ZVPG zJqGE|A^?YfMm!ws2r-~Qt`T;&lK!Q-ieeLH^l6g)V(x~CKu3bO`pZ+s>hEvgqw!dF z!S-TZ*BGd-5QQX5=ng51Ie5(-v$r}9Z=PXZ9;_9RbQHxJl9@Cb`fY^zxt0?j&gEe% zAN#}i*P;BlUx)HR6yh+UJN$0ULBtY9y*e6yKI43OunEd)!Dv@fR+6B>cOL4y38r6% zjxxF42@=)k-QZuIrC3t6Xy6wmC;>vxFZN6<5QG{Y)xm?6-}9zc$9W9BrqHqO{QML} zYr$_SFLEQeGcROtIY>*NcN!=&fiJ(0*y|f`7ylT>qY}hz@i-^N^ig|Y0N-lLbfuM) z?SgjBZ2B{)sgGke=_Gyh__X*Kh3pQc&A5~yS3?`kr`Bx-?3baJ11>uMKgqya)(1$vQ|G`v#FU3egpb`ccfE%qHfN z4EK4Zd&Xxd(paE_(P! zVo|sX5D!r8sYMVX*8U_Op!jP*oyjlpfKbCxiM&Ex7WQ4DEdg7Nuox_By_T!y{8(w-e`E+-gOCb{>qeYyNdIK^?&LYD!7pPM90_g#V!nc;M zjNd_xyGO-KoN8FLWGVOG+^<>%SS^?TT^`Kqf54CV{rSJo8~Xpqx-beyqy%cQ78Wi< z4-N4ssPvyY7j>rH>F9liRd-T1xf0sUp$}p?RWe5P$Zl-2Z0<|YsDkBnLSuowsIqWnt#RIk=Svbq#g`LvtdX4?MY`{EpLkYU+qQf`s7YcoOIw==SN%+2UPb8 zO~38;Ro0d4)DVq~E3Fc(bSOtFQkYRVa@~7Knz*4$Tf**oOLFRTX!fu4DxlTX zOdhMds~0597sZx9Yr6HI>4#1XiHTeeeJ6=ehec>J6=HzXsLf-1dx{7mt&)9=uMJcr4*$EUFS*;)sp)Wevy5utE zu{icj%Hzf7hgjU`L- zSbjm2`G?@#5P;{_C=7(Y2T4bpGB_}uWE^A!*7{JnF=n);oudA{x@$pLtvmHLWoZi+ zmL^*xRCy~%%ifOExVj%kJ^|sdcU$BNYPsKaDl-`GtGHZzN)*Mry*+~f=;#J`tt@e& z84UJ>x!}V#uDJ@`-r77+=Hn3c5x(2KJ4hCAAE)#961RRb9Khe0^6XEby@@VfDt2(R;Y)}r@JBjJLN$JWH}HqmaoZEzeb-5XSX#yWXp%F ziCjqDig_ZwUhdq8pfCdDeHMQLhYiVMFGqC1 zrKO?|g{dEG6_);!ldcgTiy?$QAf?a`ND&cDFdn-_KA{6u1PW?(p>Hl)>lx?R#1}P{ z$BPHP4T$7UXB4;!18Vq}=k7HDqG43-c=}~YiaB-|;K#o=-lN49wP2wm@=@-D?r|G( z3~@6uuEX(7YlX#{7L%luWvN8sAqJa$%J-QA_tA0+-SC11u=}z^utI{Q*W+#CmBqX(ED*B^(te~QbWBa zQ6XkiaG_ToeLS!I-X-Btr{ju>GO{^OWo2p(etg(haI8V+OVq92KFoj)7j%UbMrR!) za6EyPT>-Y*FCz0hxq5RxKC_c+k=>uKQqhRgwKn*tuloNWW(rvE!-~amsC~55zkS3kCLhA4U^p z*n*Mn(RRHd6$=ZK^B8YGdH&I$rUNM@2RLSQsz}jojTk8+{Q*&VHmr4x zgQ{S~xG02qlUtBVRup6gvS2N)0bf7+JwJs!#`jU1%ivj6l~JyH28P~<-vK)rn-X8iVTp7pm17iQ| zTy*U8B-70E$Mj}3F)${j-v zfKHPZ==?{iaxr_cjh3`9T09LfKDcda;F8@GWXewlvGukZ|9J7KE;UkQYL$n)`}i4~ zynu`{V3nVs^{4S8$}?+VOy`NjDan3q*#IvGAFexr&evkrp51Fznoeh)NSEEHp|j2s znWo{*u+htu8Rw|G`xR!e&03w_^QZ05XCpAx0hXT+hhE5a<#}RKo#+8|G0Sca%}lY? z2(H|D6+J)Z^2J9_hS``mbl-dJgSv+vBGSaB!?DkDZL0qc^h`_ zL!7($b|t4!*89(y@gW=Miv$?hEmfqdY>^JGM*~-{&_L$ugdA-%p#^LE&bq^Qqx=cD zCn`3&Ix#se7K*M@zO8dtD_v&x#cfxO24_XC3N#d5r#+zFnCS-Yr$M21S3atBXV!e+ zRorUp6n!Pa#0R;jsfE)ChRQ)GczxYQ$9cmezGo0GocKfHZ1v{Dhj^B%sHd}$;WPoDPZ#zBz7HjSo;V!(qa#RIw_on^SYzwZ=~!JZ zc9|Tq_>;ABSydWH&v5i`d5jb-v(}5)Pv~9-I{kbgDZ^5aVs@9M4=R))m-9UIx?SZt zC3H+XPI#1$+DMTiqt6s|azMB7&{2PyPz>EcfdeEY`avrcH>xVBs09Z;k3_Q(w?J*? z(Zd$YVLt_T2l6M6+LrLu<05NGz0ADV)|*bv9>M91&nm2}QI23*?Zrw+>J4xvR~SdF zGLrc@b9Rp1o4KYt9>r@m9`F;*>3IU;=c`>$ZSRaERlJ$|hT>S!r<}vIBfu~pr>n&7 z2E>C5Vv+VO)yMJ|LEN#|DdFw>ByV%~1i=GByr2s($)picQ~-cBXL~Ii)1!-U?$Zj;aewOT(q*4w*BL%*5D!^xWH%t7ewWeSY0@rK78V7=ru0wO1(5q?`51}bUG za@p8#xl4<<(V|)W$2vAT>o(Cre^^Ha#ceQj0xf!D&q~Nv#Pap@G4ls{hEm95x325% zKDbwPJ)6pp^GJXq~{!uKmp0= zS1Ic;2*0Qjz%|m9?IkJa(Yqo3SJ(!aj`EVVcmtNvWvnIUVbMYfu9z4S$vuAly`q(5 ztOR@H-rWavnd`68!m)E285M@Kkn$qh>Evw+*{)=06E?C%-zWM8LY~JBZPqNY37eSg zS87=;ydz}gd+f86QT`VrhaOKQRIA&7b>IrJIsMkqWOok&IuZkZjV3%+If2w)1m zStHL&f0&#P3cW_&))3fG&Ny8$yFX)5sP+zWw4aRrP?I<_I}LAYUx@8!mrCE)KbrQW zUFwCm@#!TupGy~M7Z&(s#UsRtu_$4BTpbCx1y*rj*VfH3W%N%#I5-;^D~Blc3&ieL z55w7kDe?NMl0o#1JlDz!e@h=@S=)D-Q+!XC!%>+mf$WDG#P9keh@HO*#|PnIFzB2s zD5pBrtg%A;4Pv``FAuTVlvw z_Gu*Md=_4fsMn-&Jck4?uH=8X{-?SJiUcroceiWahLPEXU+B#Ud&1TARPSPTPT$ znWwxSh3}dqgI@yIq6jL%cW7z2Z^6HW{~9IXKN)6Ko@KUwZXKv9i~;dhSSY3q|HBfu zJ_tn|Ns`4E$06<@}wu9Fy*@ zX^=LanFNqZL?<6du&?9YAXU zU1k_D;@j|WD|r!5F_>Tb^5S(X!nZlPX-;2Y_W@03)pv21ybizpnzWeE0^taiO}NL1 zQ9LmN#nzO5io%ja=75Y;Oaj5A-t820w?db}Xw6OMJIdugJ(jNej>XOqpm(B<>B9fe z)e!-{juX_NNy*d|2-KftEzr`y!k@tI=msE)u3E&VSXLc4o)Lv7UW9KO#jKeBWI!N) zGGwzZkqtiJ51=)m!09zkx9YY>Xja17zQwUuU2g(2zg3Xqr$k#yWn07h(9M-!;8MxU zIjL1|Jj3TK_E9BiujKA3Fk&106{tRxD<~67l4V2G*;B)3s?^rJ9Ol?=U3+%uy5QmG zUzE=3cr@3yO{vpYEik!RuA1{t)RGFmCnmS1oNTUmKGd#qnS&hrfQ7_!);3aF>=wq( z4KIqDPV7TTxZns}M8{PR64^#Pq+iz$FR%8b{?m&)<$#PxtSHQb<8k_4lHrQ914RPmaJDXSs105fw!ER!o~-oN+u_J12Ioml_Sj;t zI9xUF44xC`41a*LF4cx(@$DXHYn{iyb=_&)su3DyF!LqgR{=&luC1DQX49 zWiWZ|Cqr`*fpi-qkk0#_6jlCwG!ZhoC3Ynz`lQj-1KBt0hqhZi;YF^v_eYnb-nbP{ zSyM&J6K{R1OrFp56~7b^Z4-K>{{!9k2Y3+C;siJ&q=av(XCqD}5loqx<@hqPM%p|W ziz%JO48l*oR$dN}8vN|#Rk_V6(5^hUHpW5rfbvKYvua5*NG8mH*a_%(*4Ve=5z|-S zjPG9mkmQuC=RIY<%vP6pRqxqRPK7ThrbZkg1nZKqW5m*oq-^G3*N1QyUGfKwrEl3h zvZ>mR0;?cPIro#H?~INl7GIzTMn0B*$Adh}ks}hnALc5405#r{QNa?Wa~y>=r5KLY zD&|Q~m)CE|Wre73CqK$t*N!;!#p80K3*N?*3iy_K2C~n!&lZvP>i6M3y>_) zqyZxjIdg!>vAEpBdgs_`p}LJhKhk30mE`T#tKv2GJie5+IfZCV7?tNCuu>n{y2Hd2 zX&GqIx8MBLJtx|Aq6(~9JcW)-yi}>qiU__(#U)_An4Qh-C^_qeyRxoDCKvdJ5<6B(e{~MLMTym?8kU8Dc-#*Q*YaZL7Cdnc2D%VWIOulPpbH^A z{DCS7u>y;BF}`4gDnrbsN>o(W_IBhPC8tf|Q%RwFeY{SDcna39DyO@T9DC;-Z*e;T zNY`$&Q5dnGuV8N@DEsZO-}`3jD`+pNziz}I>r=Ncm-&N0pR)Df+#f2dL#*7inQPR~FwYorBwyzht($(5Y zOFAJ|X|-+dJB_vr`!;u~Of~GAbIOIqLvd_$0c^urIv0Hq$3;Jh@|ji$MWRh-BO-D) z-91d~ivv$t&n&H6JbZN^c7WxSa9X{6m3A+YjSxoVQ6S$Xu{7^DX@KoQE5C!!vPA@J zst&6z30fR^kbR3Y!1|e^uDU{6OSQb>!;Fb{GIe=DoI0KI*^L>@)F4XW5~3_7Or<*t zvAdR^ARg)ylu2>6=tI7aTf}>mMIC6dJAc#vf`lHWf)E3*)meHS-cnPS@0Ji8ek@nu z9|bJGKmX4U0{?5*)M*mY&YZbFU(MUzRDzF9P?TjT*^+nJ)yxWedjR)skMDMY_@CeK zu_ZsVK#Z#@?Ci3`xEucYjehX_8{X&SP80flOGI+-U*24=%GGzIm0kuMIo{#f%)@V^klg#*VgkSN+bH}t3V)6nejA0~M&VDv=5M3$ zf7~dX(|pvKXXxyc-Qg_x%2A2)6OUC$Z!UoC{lo0M zU-s-D260~b)(oU)jukpw`WJ+4k-v80nEBuri#U7-&xP+EyL6?R8PCd-%_r{d|H2HH zI^e?e)ijX2LyMy-&ZfCH-CJmhdB0?BN*&S+siaB@<)>dDX+)o!NPJ_%p5_e0gtYw@!+9F@~FD@o+XK)S4p_Er+G$5<1-)Wml9y zA4@@pl}AaZo!8EL?W)ssqN&OxNwPUHBb+KYon}Z_c(hRIqLRjTrT_5zK$pWl zT#thJZW-0{`#RC#KI|X~JO|NldZ=)FdWRvcw z!k3p`_{qIL;xK0{^w}@uGm0j3$$8#gli{{$%LoKzv39;|R~NgtRp*0qmPb z&;ST2owKFI(>c4BiB^A1=;!gQ9kt}%i7)fttka6^UhHK%d}vkjzEQW}RtCE}8LW&4VU5SN*YrR} zzUxyrzTSx(tIHahRy?OJpSdn@i_su3nX2=XAx#gqss%)PcPQiJGZ1_RAB-=Zg%)Pi zS6K7Wdc^uFf}Ik%tF77Fbbm(Zjce?Y#kIqiUz(P@j^k5&945+e^rB+Ka6zz=2Q?wwcY_{=#_Hlp?Rdysh z*9G?;*0$f-U_kzEntjtpq0Y{z&1Wm@h=xg2*@cYr`P#bkTwGj;-+T`Rx*iJ%>}Q=Eln}HR?L;^FH8?x-xHhr`0<{ zwmjyWS~ztBvLXe}#59XT>K(ukQ5|#aMo>HAyPzj4s^jO>EV+dP10Ns*1S93!g!vD= z*pByXL5ENj(M+^VoXgrM>>~6EOk!#vNjBiza8>2>FBHGbz|!`hlv@0Xz()Fq@wVKz zxh@lF1uv_}B@?vv*SNy~)BJL5xCO>!hxsJVK|M@**kaE=pz2)HTb|})I3%AxH;{GZ z?HPIJYxB$&%*G-t-nxFdszYQ^&36?S)>dER9G*`Cck zG)^geWgh>f>Z~67tFOMIZUJ0j%7HOSRn~12KPc1S z57E566h{&bRv$0=Do@G^|JHt3Ng&HHN-E0YBwJjIZX>DkG0qJ>!Zwrfpw@UcCQ>M7 zWk2z#?SMs-WxTbedPQGqjZ8pahlKH5evF`1l5mHwukCTw<@Dj<_jRwQ#>7jnT7De{ z{lhklPALh$T$Dvsf?mzQ!pNADxBctWs7u9-h4Y8_9PaaY8#6GvzbWd>7{?n!KBNqSTGVtMY<8hZffb@Oibt8UG}p)9Y`13Lpg+P)c=K8WlQc~(IT(W zn+DL4v#_Q5?zvgKpX?%RFVxY9(IHA_gllupoYrc=h*fuwZi>pU$RGC3X0LhnRPdti zl~0F)cNKj!C*dN`IW)CR`!8P@s?p9^$;?OjpK9CbY%ALM6izZ)o4D@Bg` zIrm|CaPHls`02_Pb)sc+_hSSx3YFv`S?#W{EO&N^(>N`vey^y;7-}-Z%&-wZwn6rX z`bnnRyu|JqeyUXc5qD$x#10DErSdOkvw_I;-51pls5|#qE)=!lc&MBJ1}dU;q?mGM z>^nb}!?5YYP1GiiqXK|gLMP|M58rsUN_anhYE!T%7sG)D*qUH0g5G1z7e=(kH;frJ zn_4Azmy54%lwl!NhtWdhq7hlGwJH||_J+#urHRy|C>EmzJU$87Y$cizYJ zRAU>kVfEr9|N9E{3Yw_d%Y%iNwW5?bDko&McNG#&pfhE?L{f8Ri)o+o7j@5C^RoKL zoee*hZ_4=JE*BuX;Y?nIB1qgAy^Di`lf(Gl!l}+uaE| zYM)~H!L`WIz%Py^X(Uk!vo2EHuC}1Dh%tm-Igs*Zk5Wb0NP5#Tk8m#C!e|NNW_^Nd zkV~~e(LHhn1u(irxyH0|%>8Tgn}ao^o*JvZ&e~43DSzydsKQ)T^ zQh$sn*S3;93$VAGZpo8rw2bhq=&coN^hv2a=@Mr%g_0{0$~W}|BOPsmbpQe*#F1i% zZ5oFW5^;nw9VzT5Ns1nw3%g=xNDtEKFI~m~<8ptYbF0nGD_hXMZ+t*x>>Gw|hIlGo zVUR|8NCqUVU|opYppy1d+hGPLgl+7IlCO0X%k{sJV>{mA9CWC{pI^zy;qsI9q`lHt zr>|S)qXlSj7%i8n(~uWQ5$y6sUaScC-YH1lpnw>Lp}m)_t`uERu?w7_S^n zT-0DP>N9#2s#xYBsUV{}?O1KUverlFE}Sx43NcjawHY(<@{-Zr?P6~%b^Tp9v#}JB zL3Hu__AL3?ppLK`wp2Wl&IjRV)f^Jg7B7*$%jGK_-U(eO4>W9oMd4WM zm0T3m>*Ny2g5tYww_@8Lzu0(bY%bYax5LwJh8K9kq>PUD3{3Djl zRdcun%ZqK4ee34$;qIVLb{xc~9J@T{H{Nns{Mb>cU2FD70eHFL4DOblPm88g#2cy& z#R4G9+uU6_s1iFR0db!iIQ>;~m`fA4P2PZFiKc?LLlY!3zJB<@RKsBLgqa4nY7NQGv_*>KxvfY*T zdSq9|uY^oib|Zr&rSB^p?{?_J*P8+Xu7bQAb#{b>EJhat|~q zx!)mj%lME?!PC9|(?PRCrKvoZ-E++n#tj|7yyPSQ;W2&xD6#*4^SNz0upyH46fmEq z1gp99$6A$jlecuSclfcqgZ~JL@xQKn%7#EG1XJfW7(=ZkfrA58zx7dbDlfaP{Q2Xu z>G@exzwau6Qc;y0&R5p#26_5RKZrlW9HKqOx~#B$yf;+|kaCPrtS>F&hU##9l)iSi zyb{G9>z3*)&~@OnY%|VD;Xby^e?^pX^gEshM);s3g;HO!+)~4hX51M-{);*VEmO>A zSQxdbN^zXoFH7+U=Y6t3drmpq=#J2G`pKa1CGzb`m0+t+WaQ596Z#hfBaD!Wy+zX^ zV5!mwVp32deSV1orzkJmP#5r(pEqu`YC8Mt1Xr88dh5_b#X5Zg!~y}Dk8DX2drpx+ zUx4&U*jappj`9f9wuQ_`sKna4_6RhVd6s|KI&&*(v{ec7eF?#Uf|G@4v9-Pcgl`KO z5;_BCxlm0X56UiHv7h=b(KVOm9n6^6DY+3DdX8K)ah}=_J)|%}05zCV4*r8j*zcmf z)7B+MFSS&!8^Fb<(OfL(y5d^kKB75bXjj73T!sh52H? zi^LIz-jlbqQy`n+?tnZ|;X(2p(FvTGgErDCPA|rMv3IsyCZRsYrTu0k4}zP+mBv z$*U^FV|-<0ivn~Gi_D9XqzmcI@;6dZm@fD-e79@5U#dEiHjP|~K%^CKaLB&jjzNwm zQ>oAvg$t^gSy*{>v^8coy=Mp4Q0Gy0?e2ROQ;92{IVqLctd>AFkK2)jif#A8l_DJj zc+J#BIa)HfK$+!eIWgo5or6|{(OIhADcR<`_vP~Up)R)lE!i=)9~=*RpW#$9Vv78V zJrDMyhg_{Ag%{%MZs|GtWW~2=&&bo>sF$if+^#9ns7rJ6c(#J=Yr%4(IcWoiSm~B-Jhcg9UN4ESXzVd1K zX`F^z50w$5s<1^3oM86p1caYOw2i|@Yk+;)4`?{>QOfiHMg@A1@3Nv6LP+tasD`Ay z*a&;EAeiu?!Sf5-@kXth$SAxBDj83%BCbVfn~)yPh%eg^v;waZO}oQ3+1B<#Q3Y!! z${qqn<;f$NzWV~a;vbULB$?i~V4l!>u_cBNa4vS(Cc5m0;qoE|v~kakli$T;iJNWD zeMGFBIE`RYylEpIx2{{g|ESEgp#khU3VnXKIT_X*Gme;nN7Zs`KC9_vn`m1&x@7_n z)JC-$DsrxjrAnJB=+r#QRO@~VyXlS$O$3A*Q*2lPF>cAWig=-M)!mmQReYMttvc{_ z=D78--UIFEmOWP)U%@pxgKTUKn_|K+To9ZH2dNQ9EyvsaN1KFHaq+IqGhe)0rVJfA zv}%+~{hf}~-1{0|o1%8U9Sk3pIsX?`&i`g{a&7ppA*0W{=sn_O)6H(0Ivf#<#ea_+#2m+O=q+ zMGR0AnoqRN@-*WP1Xxrb4lCX*wmEq5^&@NlZD3h1E_?yx$fA~*$1pzF^b~GPW^INY z6e}!+_(Q0AS+3TxMvs#s@S>)LRi%X%P=MCC12*@VExQy%x?F7F?*-OoVOy{ z6V*;x>{-_xJFrFNk(@;a*K4Dc0cCKGsD7;!Dwr)mwwy$0q5NFdJg%P$cZt>hA%1guhWhDIt^(rlcz8~#TQ2`H!ag=rQnR*CDPpvzm?hy3a&wY3jXKtH1t)|>< z-36IbRMGn&=^(kaCXUcCM5wQZq|5l_BQ`aYk-E3|xobWje5&-S_~YyY%ay~O-5yxR z0O>pSVe{%#p68AHnwU(=K@{7?A*cR3D_OODa^)`S0g0>G#v#tOC$*m4Z<=S3%vrMa zt0Zn%&=O$NIrx3GaEdt;f0g!1M|f%mpu#tr`G>u+*QfFr#f%)2&BbhPP%E5-jS>!g zOOoCE$uNWb7!v{$sJ${>;64Kj!4f0}sM7w@!(ngf{nZr|k-}arwGnCEBi2*gVeC5g zsi`YeIAjhy@~nDeURBvH&v((&qU=}M6Y zk?FD%SjVFK8O7ZVYh#J0{inNE_OQg%`sTW-3whK>s7IGY>A!uvl5PNa3ULOG*VJ!u zF@{Qc#s0{Mgx!LVu7T=28%7*bXcc36Zb!ridq|fN>++{02NLoRKkwiWh`qBrPX6%Y zU6N`&_vKl5(*RFeo|cT^M&IhCA40<*588v771>V89zZyf(oATJpKl}@Q>qF@g%v+7 zZ5(g)K6&PFpb1vd|!>9uBDt@*&Y1NC{y~r1`A6v zO`4XC*^O;7#I*0kG=j4Hc^qLs&{iuSCTEbHe`%}XkO}i`sXw|_Pwz(~krYNu&rsq) z>#<)s7F}Z8x=A2f;AZ6jucW!azL#zv7#J8B-=^lSTf;X*o^2O#JJVT5NgPcX+}ehe z^Qi159j1P5UI*-~z#8xJT%CK$W?JDb<2#8ns{}4vv2((b9cs*Kvp+u9pQXj)98=at zQ!YY}RpC$Ksqg`+O>Ps`KgZ5>zw^n2-6^A^g-4W1%R(Z!4)~dmuZLfA_N{#oexKm$!%3mC-LO-Z;--@y9TQ2Y3=XUQ%R$P0w8(*CD zO9XMfY|`2c(LJ$VSwfXPm*M&(~CYr5HM{(xs^Th%qaGxX5ynY6JPqdKg;v z{V?pky>?+oy4lPY8DaQ-Ox=VhqH0H_$cyr(U&s6;*3(iN|V&#ZK1rh{x1s;3U6#&_QU+?ACgFgh}ZKI6VwQ5#R^v24Ua z?nuZUM~uL>3{b>JVSxKzR)`x6u)m0x>|DnVQmfWC@EY^Qk(+ny%rc{&$cHuJh!(hQ zL-AnTa+Vb!2G(3EG$8|eBM|Ed`^g|$&qviKK3@@ME+!p0%vs!X2Xn}!G=J;)C4v1P zf=^jEdGzyM-CyI^+pV{wM?y~Hn&8nH2Ts&Vldd!&h|i#V{g+J*ruzQ}d+#09RR8XY zqM(3CReDot(xrDIB3(d`B3-Elgir(m1Q3uSy$C1>2uN=Vgx*`EOA8QsXwnmEAdq+V zd+yxxn|tp3X3d(JGiUBv_m8kxJ8Na_y|eTEKF{-M_$M0^4qY1D+W5V-xOh77O>)HW zSNrRVI^CcjPP@5)aY__{6AOt{rVn<4Mn0YVHu@v?HI8()X1=6!7YO)D8d z`J1o}wQyN;+C;EZ`bX|6H`#P1;2t7+Im2>Tk1Yvf@-ej;rtv3~Ph5(y^x2BtY!ES7 zkvqdw4dOQ*E-T7HCMZB5oVVTq_1vlnZV$X-!-uXcdLs<+9^F$YJhG)h5ZT-tTuWH! zW?56G9{jqN>8A*;d@ePco_-Y^jcsLMjxfBcITKS8J6DEiy4Q(+ksw`V+b?ed*Rv*hs8ID#H z=nzjF@cZQejQ&YzEyrNhjb)}Lpd44eWxn_z0o)6HY<*`Hj&CV^?~=4c-Eo2knAhqW zY&Jxt{Ok<0olJZ@@)RmZ;;tT;c^Zt9!^=Vur{!%pVl1GwgoJ|_xW?m)UJ1h>Wup$o zPx6HrucV^0nm^O~(T8f18-A1dtx6ytTTQst_bw-FsSeZwiLj>DV&6N~Ttpj1dNFiJ zpQZIreNI`AP04N?Z4Vj+{Ve*Rd;?~R4B`RcXDn&2eso4wZfzr0G^$cZ{)x{%S@`Gu z2a<;S`<+GtsW-xWwafjiatb#k!OeT;9IIH)j$rB&(0fy90uP2dQW0DPb{l%#5^J{v160Q z0j!^)kV`v^{)g4yip+Qq0GN@#>nWMEg%U~eb9x(#5bBbJt3B6R`|9;_{FBgR&W4MW zAihWr<8+z^oRCUzrzecK^b&-7&5+~-SuTrHri56;qvwp_hp!tTyboOuvIqN7%h!LW zuQxJT2K7vDCUlCVX;SFzx0dQ|{>A(&C1s?FG>T<(IWbxD~={xVEKFyxk;-|3t zZ#hCaW157A}=e%RO{UI(^S-GU2E&pSH1q8q{lOX=#WbA16bZZGP$E z*31_gLcAv;Nrql8o!MbgFX1ZuQfjs>lGrOz0Uyvbku$2*^GOMJCx7ufBq;+|-*v$V zfN+ebpBsKFGOpltb#$@`u5^c#42%5tYY8KGR#qpYf!@*2S`(Hpat0cw$(FjhFW zE<`2@fV{lSkcuxVSxH*cyM4TVo!wjvNZ}sYX$Y;`mw_QXtRHF72QmIJCyi8=zO)^O zN#xDEk$=Wg5E`Q-J}kT(uUgczd;Q)ma;kDD;a&g|Ryr-Pzgho(6r1P&?px@GaBT{F zm>by1O7BcpIU*Urccfs@`d4G$BwpalIky)Bo1Gl7)CO>SPWYuLmNKlh6hUPXqieA83tFQS%CzWr)r9&ZmD3y$8v;+J6mVAP4=PN4ks zaJ;DehC`gpuN^jUV-)L`Sz`^uA)>YDMjPhKXBa}vYOCBgj0n73_~+Deb1U{{<7%t* zlB(bMihbz7yb>avJ4Nq7oH>agS-&Co%dytxm5S-`*He(%W(l+_XRoVUwKEHK^rcF0 zu!mc*ySZrXsE}LcS7M>t2G!ySA_{kH86NF@M3oVvj5N~RyLWxP$0sdOeSB1Lg!X|N zv!kOT5fOJv2fc=$4f5NbMy8WiN2U|mCyZD>zm7)7%u$d>>tGl+} zrFR3v9m>HhsV7sFS*2!6^K;w~5Bk;tO-y-An|P;|0DF)FU-6n_t;>e!`wVzx4b}+_$J6pFwY)s4UoV_?ILHu}$|U zzqVPKcrtnfLOGZIu28(A!L1X$x1AH=G^FG@qQ=3*p7w8rQW_#R(Gq^-8g$ez^Zp zXH{T{bGP1#@q_lCIVR0NLQl!7DvVh+W_eALY0e*7sSHG*JhB^Px2%OR8)tnScX0uv z5mKP=HZH#kkt)u;A2wiNh-abBKxDPh|^ll zVZ$X8DcXBixGAuMXRfLqTPQT{xgwFOM~`WR$7Xnc4~@KJ@5@{fWpZiCL4ZhHj&S;h zQzw+cD-o$)C6r2gc2;s5SqqCQiev2G8qtsTI?w&DpUWIFiXETaHSO{Lf$_kJp+S2p zv{!{^fR(e89YLLXk5gX%=T#v{ytvdzHRj-$=Z_$PST)8W^+?@&$x3w6)t>ho%#+_u|I%fZ9~ELGil{2j-MO~9e- zFCq=RM&|U;)y9%2ggHOmz>8C3%$fqTil-(p#@GBk1qWfuK|fZOPJz|J?y7m%wH=t* zrv-1s#5B4T!Z?(j0=e!a{edVWOe%!Bhp zVD0__RHM(Y{fE4y79NDJB_U*ERa1w;oX|RPrZ16-x|FR0 zsE-``+lPmHsuitGV%Lmruc-GJsoTA0E=_hNZ{|2qgDOX&$>B?L=JVE2FB44bB?oEF z@Xx9I4-F=5F)l)hT0$aJ6KD3^!8FYD(@+RHA_eWr`W*Rf46ZBDmG;O=%L`4Zx;ti; zZ=pS=%Xx>H+$z5JL(t1xD()Q>G7RDG{Eg|?eRAlJ&nqPZ;#9k`9{{82NVrSXs|l$+ zJtWzl8~5jsTc6A_ps+p%Ge9OZ^ z;QYnGOqbS1v>2fx0{IF-`sS@PmD!E4ElE@ABIub866l=wTr?)Ut@I|0CP%(*-3U2) zw`KfYD`@gV7+oJ$(oN5OhHX;{@y1#fXeR+kGRENdah5ic5!;tvSeM1-7*L^OBI8MZ z87?mUG?|>uzO?ju&x4Y#_1EtLbm@;;7!iFr@UKnQMR~ZePG8q$!Klqpw0C{eNApwR zYBdiRK}61{oMc0FL?+%v8tRIP97nw zzjo)0sI-5q((4J|Gc;B5k3I}kKqq0T--}$Tt}Kz@;{PJjO4pTX5GiENt%PFOM?fmNce>y#ozVBdo6yfq{L!m*VRXcr>|XIOH>0 zh1uA|@m8s(W%3U%uBC@nauY#3;1uVx3*V2Df%+ZtS(RUS3z4Yvy6ZZcQFJ5KbHhSv z&#Mnu&qUU_iB!tJv;dS{a{X>szr9N?G`oaa^Y2Q&33!}3l4}Hhf3hv}PwEpSXiIt1l zZyx(T@cHJ1wKJ}o;tDfk+Lgn;zxxmG&0cdtWKD*u(3I z)JxiCre6=*f-s!j`jH%bjaWhj+9r~~ilr(gNKeroNGVY*Za5l$4ZpEKK|`vNG11(X z)4f#pi9ud8?BJwKVmZdbgCQR2jwtG>PY!o9+lW~se$RFLF{f{VvT?wz-Ls5*zmlz{ zcSzc8mT>ro^!f+LemB0C!$ZAhJqDrbX9Dqa>Uwvx`&w96H(Ff_Mll1@ar@?o-Za#H z;e*$i!qO8UaErVCMZ?ffH!l3tPi%PVr3Hp(EKCrlS${7qQRCG6>Xw3ET+Q6h7o?)g z@)EVnskuozdVy7SN))s@KKgv>eyB^l$064b$IbX_l^HD@b6Qx@aF`SJ76Z-`<_kf` znH_LVxmLN-TJuK8A{S5GxHTv^x?#y&Ajhfe66R#}Y+*xGAQg>Lf;D@JjR4^x3+4;dFo=PqHYjdTQ zr~MSE0+}P4HkK0=Fi~J^7PVBX(R+V2P=K0t?hj*{xnrCYtj*p;6ZvRCsYes4m7$Yv zBj=9$Nc6fcN8sSf($uNJ%9(*dhT+lTlEv(BfX8WoWVVBPL%N;T`ZvA}*QmW(`xU0+ zo0X;r7MW=H9++?gY+e~s-dgts%R=a*rdymx_22xKmevF>59E`%`6MZH2>X!7a$nAH zF$=G0Jpgi~)Oa$nTR3&8TCp&P+LCvuQ`~9fN_FGDMb7ENy8~4wokz+Tt#~AHBsn&@90P4vT=87Xv9YbzWE9P#c`{R2+Rw6v$ZN{7_)6Il9}hs zNe!pedE8WwOtDJei%%#)$KCL{buWB%qJJgY#aFEhZlJLLR#XHUOr zLkHt3fg&DbDk{Gy)zX2pMaJQN!xPmJ5y(B>Bva?FjmGy?I{28mD*T22W>;l2DWc~( zFS29sPv>#@-4m$Jm0{1{33OY@68B|1VpaXfjPLy##FzNe&zI1Syr5j?Ai>=MFP}^5 zGHe3ocX2NI&a1hymq2?wWE<4unG({5X>YS`c2l-Yhbz-V z^PgZrU77g37rITsw`W{_JB#<(4;|Xfs|o3|xDvhRa$QdCyhpj<@<-s|=Ien3DvW9O z0nHx}vyC-jWUPfTkJTmWK(d```%H$RskU0PJe|^oTddc4=Oek;fulH$WyomN4$B*) zqG0is`o)2+#h`C^Ww`_GD9!88u|`st+ZYdo`FLJIf4xV69YWC+v!oiiyzm>-mnr=v zAP;Bq7m@CG`Ee=&CAB)!B*muy;MG_V|IGWgS4)7)5evHv-bo+XrvjY;^d$QMBXbM z0xpG;pWiv~(N06G&L?ZpBKErUQBp4s(v>Yxhjog(bSSghlJ|}A##2}* zxL8OgA0qU1j6Zi-W%ehpou`XS(A*#R@ceG*=H#1Fy@9T}q7Q&+<0g=t0JWaeoKk)O zHC#kd>P<2yZoI$Ek38M;Cdg)6sA#O2NIejF-(Jc{2X6 zMdO}(v2Jk~pZZ(`eUD2U-2_Yt{}7tfrA#|c+4|L*y*0G2Z`Rt3+c!dWNt8Q&SIbsM zLX10Et4cdB*_8?buyk)rvO7+rBYW!FswX91Lf*wuv0C)ii2*p|r^LRI0<(O(u+DCG z4d-Ku;E15RaGZ1-S$%y&!ZXvO-kByyU1kLVGI#qgBG^1L2x`yA)7nt=I4?8B4Q-&s zAyo*tsJ8Ddly4`a7Do#>BmKQIwo@#U?oJe(tja@-$?Q=Bz3Pvc*of48SwzDm0~z~R z+M~iOx3lk0TAriQ@@29l-S_9~u1rK_9vg<+`WgBvR+-~;@^)lUYfe_vlB3i+DUtw$ z9=ThYXCbWn<%w4NJ6ECCQ;)qPG`kO9(hWUBq8uhU;p+>>{;(fg#GO8;W0pcUUQyM1 z<~)>^-oK?XH+fxfqPS$khdt5sgNylSk6fElH`W(v>>}ijGBORk7{I$~aMg>mWEvurMtg(;c*kMr6%`a~SN9 zuH2I?E-Qkqa*nFrH|j$xbJH}tDF>3J3s;z8-}f>Rk0Aee5*{S5TENtCE)`G<&8ZfZ z{H>-efL8i!+?yi6w;_DDAX<3PLs4vi!71*CMO^dyU-Ub74TdYaP#n6-@M2tw4dzmQ zx-*yog>WkE^>z*LD&D#-$glof56!NYm1;bbdTT8{8gaeVFcp=@k}$QkT)o zMQX@DznN=s4%H9#aPfRB&UH6iKj%isL)~THkd{6^m3cn{k_0-(Da%9U9}5=x-S`CE#jzY=$+E9j9jd+qOX(OtLw6D!_BKM`-y zpQG$O&cfOB7Osa+!V|JYZZ6A*O01;x0hl;Er=W}&t3PLOY0}G=on=-_oem^2)7mj!o{6RXkDh&?>Tn3%mmPif)w^hfLGh>y zFhAE1BXIm_a!4hlmu&mWU-cEB12R9`N6RpJ>3Vsc8X0OQ36;{walMk`o~ESk3Z^%M zs;vK*Jnq5rME105^fo=w9+xV|&i8xXXxXI^zjI?Ebb!?*oD0eXQXSLDiWE?Eq!6Xs zvSF-j#CutgPz zZ?NPQXQ%&dr0F9Ya1a|(#7!6u=JB>~Z~@a`5eN%7=~=si?#$Fj$1e<%xDkj)||$; zBt@L`YUi}iN8Z*VUB!^ysvd3bhMHiZ^N$jh=KRvGAn~N+)KQodhPU8vG64(85mXxA z%fVJZ?x3EcH4c;W^`h@j)eiLzS9o5y&vg(xJwEy31#G@+-Q?$CLN{kPl7ktyQ{aNR zRK)s(dC_*$FuM?qbQlYEmJ8~Kl<4HCE;k70 zwY4`jw20no{W2icGqk%;OdR3)n5#|@`6vI&2?bZm_$6cB7J!?JMrjY1?8vVewKTRT zYMYRd@RZvTaSNv1CtAvQFC80nYfG8Ee)2?@O9%IneoURxQ*zMe$6~Qn zhr=uNcWNSf3j>XPe~06#-O_yoz5xrv@~v2H0tEIqAUbFHrS~VTE?S>Zl%mfur#UO` z>xSG%ii0uBqVyl$zc+|r+@GGFG+>rh_~yJBn-k$Lk^*q6BzoKEG3rU*@=)7cR;?4| zu6qT(Uu?zB!->FJulYdIR9bz0TiyqebxrND`+zD0nqq+os_=DTFDy|0C@FY~vlFt@ zA{o=XW+T>-{3w~IhqO=ZkEFp+*Dq`W;QFuhU~}0dZY7I%`A-vLOuBzpvhJyc_juJR zo%SZ*jfHDTqe83PX`AgfWLunooElrZ^rm@QxkJcRw`Uz)9aXnQ!asKV1MewYT@T61 zB?U=V$2Akc`1o53ESeijI={UqpD-9+d9I7Q>&3f@Vq+q(wx8l;N)rf&<&+ z&wYPTq*Z+@&Wq%o3Pl0*F2hIvEBmB>_F4bl{nNjoqb6<@=M&Qg1(ZzL46rcCA>b+1Fx}U7e>3i8E9-1~>p`-+>7tfFG zMzb0f7P$4n?;2Q(A^%^9wUNvnVfcqLDss(ykxu`_o6xF{!1TRMnL7A){VL}rBP#gN zIN;^&eDUGC*;FYx!c}hRt?j%X)4i`T$kS?rHpJYdX%7gq#7Wxz#{!!`px6VQ3$&Gw zEBdbNnJ$}TVHqqU#$XcO1-ylhlhJ)hOf~7yXWMH;hu0L3hh5_OCEhlPr3u7-`@UN> zb^3Iy@3jYIsh8edRw_NV^=xkxqdn1+^SVB=$G@QRG2u6SeC*W)TFX%X(z7iIL)`;} zf9hf6agm+olm2~Qxy5uoyjc%bnc|LnZ?AOD7E1Q(-sGyd<=izjliuf_9$eIppPvRj zd-wCR`O#XD2-l3J4t2yFMmQ_qN?5FKZ%A(5a3ZeP?uR z8`DJ`7P_vom+?{Wk!eb`!lQ;~Ci2z!5rvyFl_Z$R!^Sy4czCQh3;&>c!$TwG+5 zWfL;LKO`PIApo{}Gmv%KGPw57QY{H$a858P%_1O*o0_e-TVT68!jSA4@k#TypP%Jtlnu8n-;Ehp(hHIsy zfpl`&9stBr&`S{n37BjvRwH~DE=Z|7Z5Tk#HFZB;?pX|*Cmo5W?A%AwubcOGj(TW=pHGA;;|$xYgJ7|M-V$ zNG(kDX=`sSa0L3(|ClOJueEeyXK@||Ndlc%sT}a<-+>P&xB+4!Ovq~hh_w~p3O9ki zwKbqD(*k_*w1MnF@}^UI^@H{ngAI|5+hV_nlA@^DIU+OmH zU~3v%d@#r})1YOS4pqNR@4nRhw(^l|r{c2WcEc_Yo0X!_rgN(3033;G7j3y<0WSae z$-mqK!31noLJKG6pi9F7o7N1;ona89{gjsM*yqz1O`%{{9j211UHfOkTR=-)&}Sj} z1mNAl0QiTp69d5q>;}Kaiq4+d?Jdpz^pizc`Yk#t1PrtS%JU}*aL=i|KQEj zt0P`acuO_9$~>=|ywTD}5#}o2zpi;#OdX|%?B?&>yiM(Yj_3o`jwG#6&oOG@v_Rny zi1qdc5*275a-HmZ6qJMpv4z$StN=gYJ7FuFFc3>+LJe%CvtG{cZ-jluM#o0L;!X)fhBFKZ{S*dXfD=z`#{%wqmsQPnGg- z0x!w>XmdACQ4P&l zyHtyj4C~BT!}=gA3u; z2>(0ETbMVt`_y5YARRQ; zi-NeXV{OQfMM<_IMa6()28maqymwVP$c{QRn{2v`c)Lvwn;s##bZ2pC+t7SQqhyX} z=(!4Au@G(N^WF7M*shPhtFbT3E!P3Oo?^n?WubQvI zBsK3lh?{NuChE~wt1`!iDM!AI!P&O72%9%3-zYJqns<;N5O>iS$bVPaWOEcal93em zc3Z5tGM}Pg6OdG>>clLQUNTT<)?yZSM5*R?81e)?_;1zu<{G|?hYEx*z2W|gsO*WJ zx`rLz6PjXz<=kUk4h~1bzMHGM(06?Nj!L$g9~dinO&AbZ&d#>GIEuupha=ko5f%M- zxy5j^#V`v}&01SQGyWR!)t9?hlsb5WdEO*|wq$~_F7YSvagXC&|1xt!te|sVYggIi zvh28p)(=#?6b{(l(d|!?ksq?<>Y%VA#+b|;q1=ac2Vglt)D;kM zB(YebmvtK%S#8pk?6aG6;Rn#0*CHpw@0y0ffTY_!;=CP{Q1DF{WgfI%KW$;oFx{j< z6U9tS8Qol&`-_V&_ab_~>$O8{WpSTJ+{J*l*hI5G(^PSZ%5dQo{nC8E!iz~M3QE2w zEmKlDzuxUhk27R!Z=)Y4b+g3Q)Nl|H(P>r11h2?nH3k2Pg)00-M4a~*(R!SU*Q)4T z#DQJ|ycx%{To$91|7IiFqQQ(?oyp;qH`~9&Sn6`Hl?*lhloST8BA4Lw^@wav+Y1Ps zVLsK5RMh!~YwxTJx{nzty9v)*xQSO)<#*(hG{>9&B z4plKq9+ffN&*F2(LT;CflPSgdwO{flge@IwE3yO3rQV{yh*+z%tM~!A`2=R-)EpZb zlk1)l2TzL8`!#y;?7JE*!ksyc_D^A}5cRZxEmve$e~A%TP`YxidTw&FVmDuRBu`gO zItYpb=JNzPTtDzE^N+RBUxF}oaVzcQf4n5+dy$a^-Oi4*iPLU-bg_G=`_GQwCY_ZX zuUcbFLI69vX=~ypxO5wHcE6B0a;&8yQG_T?6QA!KzWQw|8dq~li4lY2!07gm{;|(4 z(rWzQzTNz^Z%6VH%*N5KSP_M^R95=9dU)(OKSQ)D~l zwPcy(dSL~CJKg2PN$x5nDkG1(WM#q*0ulW5K+a9I<{l}NP_fND4w5h>H7hJ=m$ckc zxvb<*Fx{RgoOwO@O@-(?le*Y6p3pBQV6vUq-AlpBs|14Nc2i_D94HKVf7kAb;I%`+ zZwtqFAHWUAG#TEkYrcZWd|Q%iY) z)M7Sx?UV|gS@TnP){-L<@rUxRflUPGn}6Mx|I0o4-}!%ftXmb{{!cdRRnevDGAAum zrFM@~v#~iM&{YZ|Hs5)t=|)&Tr(|pllZ`~^Y6f1ro#!1pg*KM&lJO?M^g))dPD*ZI z^>P*FhH{fotbT>M9hk?^$>oz?znP{~@S%X)a5HCtd%Q*J1_i5P7nMhW`U?|R$!TLJ zmpPXOUyV6{mkWB6#fTn#4+EohhB*l|trFcS)V0HY#X>(n-;(%fR#(||UD`BJwwq(| zwFll#zidZl7&Eur{*iDG=Rfd*9a-U4tzMRZCTA00rahuurxHt4@aC*DN|*QDRjO=D zztwp2~Mrp#>3_ zQ*2TRUWqWebXS=vXuORF+a9N=^3D0Ti}^e3B5%5vm~TTGbmQo@BiZlUWyf0$?;p7U z?B|&y%?T+R+(XXjjmfvKTT}GLA#S^|V-bhEjP8BhmdCHEWk>Pqg~mTY%`szj6TcTD zbh@U8$~ps_C12~guV?DY1idK%2O3vBY!-G6Bt+r7@oqTPJ`lZdiyWHs_TX}vOaC(y z^RK9kdDVuiPMKfXCi`D*yyv!G<+gSCi>SWp!@Gkh@vRHaP*M2Rb$)H>QdH=i;(Ip6 z_&cl)`UZ`Y*~_L0ggI;W@#)iEjQx+t!uCkX&xTjI#xJ-i()A^ZL~BD*vgrc_w;?DX zE1C_UZiag8)SdcE6?|v8_ETQb<8i6bk@szGK28xs^%wDt8$~GFJp(UMuZntkz#;*v zW-_>=$ld5s7aduf`tAIaWffLyp+Y1z#ph3eZhNmjg*9RD@Y3RkOD3T8MtmPE{uCi~ zG|TT& z-F&qfT+AMmlo4ri-6p%Y9JZ6FsIg4lS49QW#$i{pST%7Lg*Z-wy6{TKiH^eOwe;r> zpEdBqKh(9(YtkGE@YP_9e#yFvXbi(J7ZdF<;_2wEA(1f79s$CWA0S)Exxzs-=P4y1 z^VUWdGDW8<#SmPU*1)kV^X;O3!%T%&q2HI!v%eBfvN8-}~j&3F##p|mg!0q*;ANJesBOHoxcb<=5 zN*sY?i3$2eh4ip7Q#i469TTQ*O@^K+pN?|&&dzJTIz^>gw;AGB@)GIsrR{iY;#`!i^y4&@)C@dT8gw$&Fl)|i(aUF zP?NT6+3UsfRVMwR(V&QmfRVcvb0^{pp)*4y8RSGwzq2%pVRr-=`c6D6vCOy0UEOv# zf}2=OWr0s?@$Eo4!~;{|8*`buf{H#w;v8g)N0=2G?{&<9zY7BpEk%9J(D;JH?P_c#F=Z)lZM;gY#N zn)A+r+NNrOxn{{aBAF!lmnW?j$?cnbq_JMsjCOc`sPpDZTYa%5jw67RZuZ<2{JpK5 zg>@24&+6I{DKNm)Ho-wgdb1@-=(wF8D3LuycQ4%&M{S$tODHQ)kvr-@k-psVCSsUofawV9!v*+3-B=D z$NU*v(ucP|Yx~+{uB}Dhzn1vGeYlo0{e8f6Uwd_XmkwuKFbxbSV$goUce)`#^sgGd z>Q1qU&j$~g21-A51x_?GbuC{6cOFnKLhA`+_2>#>y^obr6j3KP;o-{1)f#*mQA#u4 zIOCjxI+Z2H@-d^aio_nCX%}nh-7jk6HHhZ>>|V~_+kY`=sFA<D24-fWPq>@GGQ zdfUo^I5wZ7-0OlK4WWCpNR6SYKtpI23v=?p$YG_)gIS|@#ARZ#*EF~jNqO6)0V{49 zLoDCkYb-IEEp5qh0@-Ju?xy{5zmnnk`|O67OG<=;3W&K_gg|CQ+#(?|B*oU_ev5v@lApwa04RrztlXuKXX#@E0{Y^qXh4+lTB~0M?Qr1hqZVsgQ_y)YI zN@yb+r3BiubTqe&A%<cbvEIxc;YKeJg83{+H3i$IO+3gj>XZ&Wci)QT?Ozy$Y{@ zM;|ydU%gECIA)e*-Wic+8Qq}|Dv?_<+M8$sx}mB0qAT~#SM;3oQw7Xg*5>u((gy(* zhO-5^CkHXg!eC{Jt2AK(|Bk=adY%Zk;dX}lKmIP0+S1Cpy=!btcJ5Q80V`aYiM4a#^aTA63Z)P!cv5lt#IlAb>YO+GtVH$4LCb(-g?jE8 zJRY%^vH#J_^FHg-WT^o`X;RO-PSeT$87B#I2L#Q85YVn1A0bLA+zgq`^4&o+{B(g+ zC3U&_8TFm@nXke(^FJ01Gd0%luDec54eFFBNwwQU2m`^joR>n>yMPoQ6ZIF7eQ=k| zGAmtK*XMv}EVx#7>I7Td@JBKDn{PM{}Z9=#|B=m%pRZCR# zL{Oo4(Ml`X>T_Z_nbxM9<6G0_OXhooU!Yr2_Y!cb$DN2Pe+`?PK|M={zJP(?E~_XZ zwc=fgap9KQz*)Q6%(>R{0k2zfZ35Zs6Q|k?mWTdFaNZNs4fyVaPVUikg0eymD`B>c z0l0A@@5b^iXP!x>l$^IgW*zDFj$j3I%|-LFBYsu&)O!gf^}GGlJvimN*N zq#vnV7hKU9auk8-slj5?-#XRS4mu7&2_%4fsmn@=*fsT%TsnQoF}&)xXtecBI4%Vb z!WDJ;TF}A;c`eK=>F#F*LG4$+3IX1)%e0F>a&K!$S(|O=IFu>JC?nj@rVgvhflbW! zp&H=z7qqT0i_noXKWhg6F$dg2TsVOnOMEG{>Z*L-^=6rUjZ#DU5MJ?HYMSs2Yn^=4 zCb5E7$ast0O8Xu_w7V1R+v@rxTXKc`of~v_AjKr}q&DOtHkgK5Ivz zf@=w(Hq2GZEQDT87TEo=U#H4Em{riJQp*RwBwf!XCwpST7u`t6*>E5u{_drs^4+V? zJXot^4(l>>W=<`?L$~mEKTVa36z=zDbfN|CCVKR0OZr3$*3W~S1~)7fLi!)ghQpr8 zC1-?F+Mp~iQA&QVkY}dz_y>*cjJW3RHe#G#F|?}JKl0Qh#BTknbmvzxM06<0PCr@7 zQO?((L&urFq zU_|^?V*8)4;PsU6Kt%ZVan1)D;J!O?G6wx#1rM8!mx>ph&pluC4OC$^)(aQsxDkKq{LpYu11BHv5ZkMbGu^OptT7Q|wT~ z&3Yt{w_brPFd$Y_GXtNu>T>|UTjyHX z8YhQ{9VYUUL9~OwHMw9rQIMn6oUBFF8&AuZc#xxZIKLVH`K$_%Ltorlb_(49q3rgwjHH$9US~oq)Z2!!Ur$iAI@m1(1W+3# zc#fC2gx*EEi587AXtdTE*jvyzb#K{><*w#O=7b00_;kwjoettIZp`qd4Mz3uq?MU1 zgr4#lG3RBqMBpcmRtm2ikCQ53<+aapn|KMFJWHZxM4;@v*+O0euZ-Ekd*u)LTy|Hb z4@LYj#!_eW(P)`%+ zZzkl{ah~J&sfDf%6f;Pr5L~Y4*lr+r2s8+aF{{)#Ay5KLx8PBxc3s1iTN-raIGKwt zF_y{W2x7txJ=w7-rk@TW+|hAq_UB|pES`F3dl9&cCxD44eb&LI3jl6ee>s2kKg&Tk z9kk&H219U$%Am1#Al#Go6+Xi6iQ%Q3tEy8Q(X-f0pL5Zi=C5nsTQ-K%>s5Q}KuR{g zGx$_A=Zceu7iLOthxK#QRa9rNtkIL7Ra$J496QkuY5%(=d2&_Gi-W8zQ28B?@_Iq4 z;4>8N*z1V53c*u}RMSf-hyjUS8;+nU7UdAEAuuYxj&ZEOzUY;bc0L@ zLnza}Kwm5D7o6H^9Cg=4Rl3_nG1At|vFXXUtGzHpti#sV4kGkrlu1gFZBT5adh2(m zc9D|yh<*l5-0EGxX2yQpf5}W?F5hV}m;wZLr9hMRY{AIU)VH@m)QX;^&-_hFQZ^Es zXX&H!Nhyw8?JeWg{Y^xBL{VvjE1P>@Ck$X@{vA@J)SF@Da^zyIZH`dxI;^$ULO<%s z`RW8Qur_7f-NHZF;e<1W1@S;P`v~+%I6J37ZL*o`dKx)*eFWrDAA^GCWO4yQcEnvz za8Oxc3u)ed$w1wmp;z!WJ;QsyD$ioU;+J@J-`=ez+IbqyOR%#au4Ogq(X4Ii(-n{_ zQ=eh%i%%@Ube8=J6_!C7)mDT>YuXqzb2S{JT;RKsB+^})IjJ?Uc>_6LNrt$`eC_0V z)9A;XI!FkNvD_TI$T0pLdor0eW~n2|n1@73CJ`4O-I5c9e@dMLxcw^E)AyQl!Mb?v zHy5F^YLtsvm7VP0lhjM?;__3?#SmofMZ|2S7p5+F37lv*FkPC}{cd4tfeRh? zlL`?M=)<&Bi;g0O!*As)T~DZB$x5o|sUCK5aJj>JSWh`Mn~HQH^csjr?*ak>LIeb)MtbkPiFE0N2uKMe zln@}qJHNH}TI*Zq-gWoc=Z?Mhx#RGMBfyCBoq6Y*UwwYhBiNJd%l=NZm>4RE&WlRC zK>RG`U@K0qyOmL14)9s+it=*k&0R!TX3^G&M0GPfDz7faY__x`Ozy&)ua{iuDQ}z_ z4zgWc>YiFc8=cbQU)6ZE@YQ9Zw?ynqZV=CDB|f@xjpb2N@KI1%?usEk{|Fdrz6IE- z16>{W6qy|>Q@#RS@KW4uU8ipDsgv&foWrR(iR=UKUf8TDfjU0^z?_0`6OK~@IKssD zy@8Qy$FtPIGbHyyi^lrSx(th-VHR!#yNXT;!q6gB(9 zT1=0lr!OaelU`nHa>oL8FY#=-^^|Ue5TDr6i91HHk(of-K~2^Y#DTx|7Es@;%0LH|gWg(ZU&17T8OX`cQev+mECJ4d9oTIu??)QN`Yl8lH0T6nI_q zQ4G{Z4jyU28o685cQ6;7T2XgLhE`Q4x}9h7x?9}{$K_k^lp*6-dt4zf%NMywi+R<; zigPc(%f9Wva@=pp6nC!GRWErGTR|VTn+ga(9m46(l4s)aR2(aP0;;B{r@TC$2*YoF z6X~g)UV`>TVmJt`DA2(*zDytaC5Gr;>oQF)11dKI)4b7Y&!QQSX(o9nP`XCHdSB5l!1%Qxo$xA4I^`--METM^FGxz;)fptGTpP4zJrr+vacuJNLk6oX@1$p!}_@%RV2TsBUXDxVrp@J7=`x__vsD;#z zK}~6)^CFQ%pe|Y!qSL8b)Lg!i5gv@TD7AHDsmb-tQxz(RaI$~mMiyE=@uthROyn1z z1Efi;j3Z9%tYoXZhpICE&QbE%WU;BgU8+Cq6O2lM8)u17>Ey%ftYn0nx~%Y<8c~ZM zxxG`3yQj*~#+mqlh*A@hhk(z)JJR8Csan%bOrD5lZUcVuyt5o3Nf<)3hr>L2oJ#}w zeL9Pv5i2du*YQ+#k2m5B5Q)5I2U-Zz*ybs^J9d+Js1X{?I3ECw5|St~}k^ERn-*Lk-3u$Jx5Y zdVZYSDC+G*Am8%Dk9?=YT|gV-nLQ+N_Mf7~D3aGo-K;%%QwaXa_=}(2$h) z`asDuUtP_zV$G?gRJ|>Dv}F|-e|L9QqhpBziXbB_5N4`tU?_m*Zpn5}ek+Z=H}z-D zwy%F>ovk#I0saD)fdu0WK^Gw^NbvRu3btMBnYwLhwTZsaRnFQQ;kjCr9@;6w^TW+?Yh*TVZ)zM%fjKq%R(`ECJ4^u9f^wzT zXDv9n=y&PKPF_0FtWt^ZH_=6Wy0G^GxTc}3Rx0oY#8f*Pda(f0lzt7pspK!wXhOPF z&8%G1UAwK-*kDy_g0=^}X0d%Xwl)bU!!UI#@S=a3HVtd0t;AkDFMsk-O= zd)1xKY#%yxW3k0FxKPVM;;sSKtw}$tX3}H7ItyFAJqt#yBTQitA~OyO#1rBpWKG#u zzDN+K_)NT$YOZ@iB*Q5X<05?-V{VB8W1@twLFj7HvH39#!>zF%(eI=6;-BtK&5)#q zUBA`T)}g&Cj7(nvf$#GGMShD*QwDz&`E~v%@)NCbu%beah`w;#m+95Bs9Z6y1=0hV z2SeQ-@RAjrNr~DscRp=pamd23VWyTh^LQVsX+9KWY>XG0Efp>{U4U^04zg8|;Mv&# z3L$_M6hTRt0?a~uHwM}@eyZ1hDm4p<1|M4Jf#)i{m(13gJ>kXjrkLE$25mgGSZ6DF z8PJrOEo<60HJ!y3nMQOE7tQlpeWfQQlDZYdK2ie2ua00#F@p=ssad zqZ7NGFU0sT&Vq_G1IK#cL?I0HhUZ+Wrr(@?VGo`dw`GOtY(F_X@MA|W=H*!ki2Vp? zMLq7?Xpr&twU6z7WoCtw-46-{L>VK&mkAR9PE9`>cMn%?>GZdL@~2VxSjyVabsUtEuRJQ(SB1S=P)v3KxOc7zQ6n3wqC#yjI|$M z2jmppAxb!8;iKUK6EoFx!;c^MIdcaiE`79-vz}Es6W3E3{(8J9r}Y)|V^&!-_N!X-T*m;ot& z$%)E6%nh4pp~p*1dCq0(8R2{pnTC3GPDga!>10*o>OXpnXRcYjk>PFy1xmw(1%ttC`j-qY$Y{oH0T|8HCFg zLMpk}pWu<8Y(=`5&Q*`)q>}mkF~gs6aPzbEyx&Aar*ej9l2A|WAQc1(l^xu1&6cd# zRFNvNUf>{M_{r+{lOpaC_F2VQ3jU!rViIlEa+}sv+zL@sn{qUA`L!UY z%**=I?h*d1&(jNrV>6{iCX41OuZ4}~x>z5Sa#SQ$yH9?lNB)>@Uz9kDYNA0bg{AjK z;BOe-It*Wl}i`#PNX5n4iaNt_Vop^|ATtLPMng+k6%=TC8Cp@v84$f z-)aTSYi04`lF^-A>DtlGY|kc|K=P!t1$W*Y-Fm_~Tc)z;DI#gga645-hG(1c)~3tP zuVa1aUGlkb!LkEy&4T=9@ZU5Ep;HiG0}g)>D=VKF*5|M%Wq84-zX;EHs5LeXcW^!BuK?|SO?KALKUJMUCu5dy}IyvEAb!nlS*Lq{zY z9K+47Wl|?lDt``941Op5G}k*jaH_R(trTPRU`*a{x$jOrCN6>0wBKf@Jmd6b_gnrN zqE|1wAF|)v{pJd*_*EA5Q7>&!D$JTm`PsC<%hZOPs?}=jxAfv>mQ6KE^$(0oZ5ku*Nve5rL|m07N_gAGoJeZB1D=^% zp2gGQNLa(Y2fM&sUgYyTA{;n?dfQ||7G2AT&C0nlDoR@)!N9Rug`Jmakvs)++lrB?w8geeWj zH@HFwgc{-I^u~-By0KMO_bVGr0&PT69l6z1iOyyk~ z8>CXMMx*i2>bv`QA`&7)uo6w4!=x*XwL!_pJRYyb(pFKcs~vYm3{-)^g08Rd@K$Fs zsh$=toZ&M3I!>{}Z#^<6LoemztSUgrF)zG7{*~kHSS=}rk8k|86_St0Xi(NN!2^|y zKHbDpBpzAQm6l=a+;_vL?9`LITJ;86NPH|TuMqkG3JW>cS0|pRmgpO)DHYt)VJkZ8 zPfFzOC8~_H*uxlKD{w49t~WtL>2gMTrc!mxjl&YCwZ1ILTT1iJy-x@~)^?MfF3~YM z^UED#mDJHqN=ni+mt2^2EDBJ^ieOm*O{voS^|jceo{>3&l_~IzUUa$!i{|^zvr;F7 zY2v_-(=C40spF$|v*~QYfMsQBv;v#YxE?M6L#thhOT><%P~zh*Jc+kCiu=XCU1PO! zA|mPybDIB1(eMji*oBc_4=N1lc(L(4Ry(#^Zg2qgtErW0xF99ZM8aX>{k&I8AFzEm zj=6sug~@sIFMY+qJE4{Fu?J8bpVLT>X{n)NQYWQD?X-p?&CuHZE9_oZuzd)(qUvY- z*@gD|{3vyP#`oDe1wwJ_wW(`AhAL>X!yP6+A^3|=;r?EMwjxN-)n8fnah9b%id_b4 z>#7r|A+e%&4CD_Dbsu)}6I)9!e}Ruo0rDi`K5~{#mZ31ZoUy93pPWgBi}p$P2sc+2 z%*}#&++;l%+RpfLDvQJOj0*%ue_6|`q`#_K*C6BE7%^l}QWrd`+}cs=)mj}yyn``vsmvBmmoZy%jXsc`ih6zZTS1_akY=Ir!CJQ+p>*l>YjXNM6_(!F_d17u7Q07Y%ysc%sZ;go03V2& z_JW4$uae}%ifxGd>Epl=3vpa6W~m)e0$eP}nXy07%u#e_&2txbD>ohrf3EuRR`7hB z<18?xMQVi0Jmtp~w4IO*XXcj{24wW5K1~=S-Yd&VtED!0vDee~LYvcL%c54v@N2>D zZz6wp3eXrE3sQ3?OA54og6sK8<0>_!lZl~M2wlLU8ZG}We~E7tqokwPbBuq zl_7fb?P6lKYt(5+)Zk`S)sm9aiEq|NpIT}49A{CzjKbYVqN^E;It>u`-i8e%`BV^p z1p{qo!)di5_$R6Y6i*$uEv*Utb?KVGkbWyPjnYcN0m<;o&-LT(%o5fQQ_!IuM-auR zL`vMJJ<^^mWo5EEm`nSdtf9rp)Ym?cTSzuYr~^zA3wS+} z8oA9h(ltank#iPfAbpHjjf3 zNlX1qaX-h_5>-Q-F5i0dBq4j@Lq?3%W%rHs6YcGNqy`0!Z=#jaW>Q=kU1>2tB&fS) z1x z|9}8m9LS9(rj@w>aUD=9qi(9=!?@xq;n*(iq{m*N5>jtyJGy zsRb^N&Muf)%xlwg9>4T|lP|Jc-SE+GI@Ka1Plk7V5C;LsU6Cv{jrB^(v!7)P6F*~8 zt%~c^D6iG<*RTttZ3_JgRa^q=GO)!a0kzU>6(1;&kVrB?gCj%47tpm zrV1!vS;8^eZPB||e2$PTv1@5gugdKi^&=GYJ3p}+&X#F54D@}z_|W)Tn+!?%>9?r* z7lrDE-qV^#hw^w~>a`#0w{l5nb9toqABnm;E$r1~7zR{tkM8xh3kMMda89SpK3j;j z`Y-lUepA(+{(>b_R0G&wJe5(G7e^Ss-p=JjXw&y-)2Lugab&>Q)LRfb6WU=|Xm=8h zo&M1>c$VZUo*@qd0lHhFoIQ}q9KJ$I)I^fvc>vH9`jm(Y8(!i9H)-NAD#0=WDuyJ>5kYMCY_P-`y>F67o)ZFwSoU zXvx08iO}_o1RI=OHu*B@>CZIkTd*K+id?8p$aRsKZEuKsc-@yMc;~$ymKwzcj&_&o zk}0U_n21SCVK5=%%GuxDSGa%nk#H6A9H);wEo^c{HafX?*yl87W#$??(s|#UQy+hf znBuc~{N%3m!2bT31L!|t(sclnzBjkM?fKFNCf*%j1xpTip`xs33lp z3$kIcTIub|6zgTZfuYHdT+#41Lgk0y`Lwn|#Pk^Bg@FhIJ zh1kAz#<5}2_fOb-dn0{4@y|55@vAgy9V=E4uUo;=^KcqRR^VF%=wv;4Ky(O|gTDd>rV$Ps3 zxtB}#IgjOKN};)<*} zyJ+*9=ylzuh-I0qR;pDt&QNpIqmOo4^J{h7)EEu@tzO1Zz%~%UQ-R9DObRH3z|o9J zjh6U;*FnzJ%_xl0?vs5Ae06suEMb0K^q$^ZlxU*!=yaZKR^2c1%@@itly4C9=j&J7D4mMd zTZheF!Um2Kq6!^xa$Ur)KO;DKUd>NyoFZg z_xamPxLI>nV~@eq^Wau~M~#o6y+QJVo@g}!%V6FobdtT5<|$>OWE<7<3k_jJ7n#bG zfvPw;5-WnMMKpWsl>=(XFInU|W`k+!)jUZX8SZM9S1monYE{4$C+{gNJW z+@O=Y6YHj)^D|40Gf|uV(h_e@O$dk9A4w9r{KvL|byOBVjeg@pG1elHETDgB6=>)&ZeQ?o6m!(R^ae)LB#6n?#1wRm zMCsycG_KmHitj@`AsL?)SrMG8UdvRY_nS9U;{i~OC6iAv;W`D-TZ?84EX?ji%(3V_ zX-J=4S+j0@Rc$vEr2m31=__h529wCYy~$e+oaW+s@B}i{LF=xAUw_Tdsz&hM4>W9+ z2NBka0b>I!ui>2cwJRo+3(2O_3N<)gUn{vN>oBjcv9vO7DNx{~^l$;E5;*Pl*&%E# zz)bZTXi~r0Mwg4q;q#K!=wD1K`RP-Sn8*Y&%7m2ngY1w4hhx(%z1>TdBiqv}urN9c zx!|7JxcDy{S?psqXg{9nFclx1UU6^Ktc5a z-g5Qlf8ywZ@`QEe`RD*f5$Wt5yjFQ9J}ba16{lP@bq^dpOG zT~wspia-JU)l_EH>tpX_c)KtSMEWcq2w_gmCd4yJZH?=jQ>GjlR{cGwOq4F}+Qu5) z98Gj7i1C!yITgWEVhr1%WIi<`-LhdxP@zKi%QfrjS;iM5CfgU*ls|y(^@v&O=&1ID zsReaTWJ~k-UF(rO@L#IO#BT#EIcK1yjew~4#@Om*KGfq={>me z;|H_I&p5eBfJX%zfPwYI)B6}cMYj~>{7}p{9=x$tG_T1dCKpBwse^G`YT@6Oe7W_hC~m)_g=7M@(%QWikC2RYo))v4wSoJf=X=s#FexJ_*|nA$=szM{ zR2@#%k+2R)TqnAySGjt66}<@0-{kvZKOK>gY^`s7;mz$goy?-|9=5O3gE-6r`&wD# z4aH5M@qr@UUw*l&-gsoLb*jq;oIJj_ywV5G>*-I9pBxD%Kk3oW4oWr_Pke7X$Y5VJ zITejDxfR&f02y8ZMVb`Gb~l(B&y{>QCKXffvaP?MqLsG(1)kp`6Znml4)^Vy1MD@J z4A(L%d{PUg>hC0c*xRqR1-hq%R&yhO=IK7V2SxI zqA?j}4Pn*&io_tlu@nUbmR_X&Cyd~q5S zcpQK;UA56aZP!WVdQ`hDNNu$5;1bB1awmo7lEJf0J#Q_;FQv1?#lk8}{qPh81<19p zXP+Q!2>30WDImJw*PK@`Nf&!MCwFT9;5jL`YI`StnKDBV2|GM?me2>I^aKSr)MNnR z8tKY?lf?-oM68gx$&R^b$CIG7a?idl|73luwh=wcY!4l)*>0C9{g|#nDigAA4r7(} z_XYherp*=3Mp6h2c%lh$&<}7I^lFn+p^2JMsk>bDVmyCe0?DlpKNxOZyW4k-zP(3m z*cT2!2yCIVRPBlHhkXytxd*pQ-?)Nt|?NQK@X z66H{3q&C}**kM0Iw)Lvu+_9dR8o*K$bJgLx-HYtNh%^a}t!$t!)bqEx(8C0^&Fji>(i>$ zR%02SSi9s)&nG3#Uq6Tz4tMlEW!`|1LX=!W!$Ureg3AOxR21h`bd4z+E4vKVd-MJh zl`||DeYjBqzgq6;s%fGBGFQ;U-oE^J1HF&c#|@)*kp|JepYiGy;q3+|3)O3Rj<$u1 zrV80NbooX5oeNjXt%+T}DN~pnw9*BREQ$h%_~o2gw(hz6+Dg%#Ufy21gH94%9orE) z`d@SIq;a~YvV{f&DbdRNnTaKjb{5^#{i&y?k=7`^IMu4@B`=5EZLcGU<5_CIznr`h zTWqu#J*=>?vc!riiDe4=I!N~P?7UrwcR za%bmuZE}8OXNhi4#D{0D$?NMU)6>;Gc*RkP-CKYOlnh4%=$%q^Nu>zW!UC|7w@>9; zJLZtY(^;F>s98RgH5OR6+qkA#E38kQ7Y3ak!=ZqG3hzALeJEM8Ta zm)3u9lT=l1Um8jpYx#VZslW#9s5?u7h~>_=u}=x#A&gEce`gx`aAkJ!R|dy#qBn*k zFbV(!PCbZ8AMAlLK^)m)dA=sFE{@5~MR&SA-HFi@-z+WH(oVTRQs49NbS${N-)&pT zY_H=)Yrd`Fzbk5xM*q z4~hS?y{7pSNqSkupEdMKr0$r~0cW?I_@Ct|w%q{Qm$eg6+$+645=~IQAAaW7uboRJ z2lO@SWB-l#=f8pg>A&cjVbwG|Tw317Nm==n0XaomcGVs-k*8P4B*;h6{KbO>xD zhDxg*=k1ArvZ$tb(;22G!{3yE*S>Sd>Sre?r(PDlX!QP6j!NX)>WlKqVc9Y&_1=l+ zq76nv%tiIpTpp#gQ<3*gcCs?eQ9}m`#TA(FFfd-C)bZZdO{LEpbg7c*$*ZH17*mbc zYcicxK@YADwAC&k*%OA{F?b7{zVruUyefJsSKLKSrnY=)xjrpXTvWygY2(#VEJ;oE z#xd$FtIVbW_i&|nus)=g5{EQNvDXZ#G5xUEXWSI2mdNS`spU%ADd%KFG=Wx%ogCXi zRfegg?e?Xe0cCc2eOJwu`-}yHvN-S>EhFBim5&!#)Z!h5j9S(m2JUUqM0}n|&*Ox9 z)F#Fi_696zQjIzX@Z|UuKg7^9i8bF*}JY#3_OzClLdgz#GM`(mT@q8!)=Y^zxiDfn-I56UD?qymED9d=DN5WT( z;1;y@G)}KB>hFDat!{Xu3f3oyI$_eCC=rKJSUSw+&3iFAB{$BSn+?tB(vND0m2VSW zo|;%&*ZzQU#mV}}cO#I#T!WQ{-ceqf+zlJK#~(THFK`CpjdO$G2)`?ZET12lz8{xR zgC-y%7{tXVa)DW-=}j=_x*57WjQOV9VHoLNIkOP2V_a?UFQk0S8A` zHKubb2^eN>mr-EfIBGEemRd6FF#JU!%_W29rUT=<*4o#SBtxl8GHn!0h3$Ir0XRi( zSEv()a&JqcVbqxmlR17rcB^ar5hOyvKtwM4KEd$Ch)GYTvAUW9pmzy7X8rae>3avF zNI!J<+JNkU(1x3YAmwPGRNmC=(T^k~MTe?0D_5}d1r}Ug0s}4&JUA&SbkYYVBSuEODXds*87DAOk5+HM633C8=<2hvm|t*?Sl2x-WP z&Zj4^+88dD^rj?DDXy`*v)yM)Vr5A^7B|CtMQ|@IY3wjQ$(TyD0IgeIGe2Ll%#ExX zl*%jSF8Lsh(F>*P8Kw45O-G>MRp~ul*~AaM3_CbkpGn9tr2|N^=^tzt?zaJT{2JvFj3^Z8%c{bkYo&v zwllfDS?etu-7YR|x=>2(NE)doSHXbnArZ_H)z7f^{!PSFP`G8#|7$$gz%{Aq;4%(lbM@$b*Yz5T)NlNr9N@v*_v86RpDngyk_8 z0f4T4HE$(EnatF?&#)598u=ht93pELlG6>wj{M|yf0~R{mx`H09UlzBs!B7rYYce? zt!KnFtH*%@DF5meYuB_`A^tI%kW@CmF>L~kT&)YjHqQ9)7&L@@v|UZ%w^3o;>@oyI zvUI1n!GU*%U2|tzLr_h6#ah!f)3tPr!J-33IWsD+y${%5Cx1X+OmwwSD%_my`h#6i zGw_5hMq-O;Sgl|jc4`R-m&`2l2E90ys7W6cx?VnzlsOqvEI~cBeZnlMdA+XT{m(q! zZhp7AB~!b(BfUMZK$S^WModcZ%Jc+sH0#)QJWmzwbjWgNOFNy`gS%ZEAF75$w~(R_ z#>y&M?tE3<=`PIDCf@9!ONI^Vs}Yy0%y$vrReh-}mS7R-@5vGu@9i%-gr4gdYnYpp z-@ExKkyg6h+gVzlICA--CSXO=Hrf(Tt`}GT$n1=<6=(KzzotmW zP}p%~-`F#y)-0?ewB%^(&pHiM99eMQT`e39W8&jQrkh^aL3hEL!cP_(BdcOG!o9m$M?fkVA^}|eTuDvQwxh;fmNijE zW}XJhF3;j0@qc3F7-i}*5lUvwWu9(mem~t{7s5cfay7>Er{Pn*OC!+?@;iOs$mNUm zrU>jlyB&eD-|_bm+7#Sr>r1~J{lDPyR~Vvs?VjXQm%CiidUPDV$ybwZ-V=^lUyh6R z!t{F<;OO+L(-54w^0pevcU3RP1jhs&e45*u{0L{U^7(vh&9as=1vh8esk*OWj%{w9w-}~Y6KONQ z4qSi3q5Qg>2ziM!$U@_bqb#^{H+E5cTHZc?am0FsKbpy$6d*duYq`<#s6%}FaoMjP zSN@`}S9_3eOB9~OHtH4zd)djUj3S`u z)syjMPSvWex?viXlS0R$pYV}}<9ifpMKr@`=vVpBGlpBt6~$KXu3h4|k5+iwB-Oph zHwJG~Uu42XuCS3qwB8N{OPAWrZ69~*yv;?$NIsHOM}k0ZF$+eB+phk7)Ds`hDXR7f5N?R zx>D|gnK!4UO-ZS#0I)nL2C&do{m+n#V%1urVpC079e@TSrWNHN(MkeQsjMF_X_C8W zt_09PYc-wfnAUnly|PYu922I~EMK|*T)|Im1?Bz(9QoBTU2r6_%96(ZshNE#z(qTG z$j=mE^4M1SR$GqJ5@kg{b#cN%&}Y}dd#PXFuOKnTl9TBzTZ@Jj`zm?A6eQ8>5r@Ve zXR@1XWLnZq>wr?iV64K{;5YepvM#$-(FgN%3>;aG#qcZ-IOR-j7e5;{uHm$6cCGk@ ztwb4&JPlo7`n5X9#%?G^2az^2@;;bb^V6l!%WExR`CiYPN?Ic|U82o}%d_uRy` zCN2xL2tWkNCw2tjfm}F)Z+nXdQ9e8vvLZFA!cKm^B=)yg+4ruN@>8(*80t;m8Gr5h z!qt~M&$Zx=VAC6k?xw(3U+Bve^w+(-vbv^IHVJpDqp=6*1AD5${2#w6?fl|C<=&gK zSdurCM2q~Q&r4mG=O`}op&(wIZ$;^*``gpGny3I$2$VvfM<`}it!#rCgKnp~Y^ucw zQQXj`F7v4v=2vbAMRJYw=L8_V8+WE1;Ry$2%}Cf~oZ-{ALeJ=qCq>0^izV!5*VyZY;95D?kIc5x65U%;cXqLN(@p=mjItGL;l{llaL{GtTx=St1=Qq7%ZR*|qsZnmLYfxF$ zY)_$~W2L8`T%?yly%uC&rvvE$O+5Qs8YRYdM=2+i9UW|3`PDx1dF(|Y&)aCgNuiw9 z&*BJCW(lk1IXx@19CJ!lyZ+{L=B%h@gLu>GY~&Ito*yvt#uL_4uN8WkTUbV&I20h@ zG$&Lhw`Fqtg3YD-6fYgeC1R=6F<0Um0xNCOLnE^IhA64Z7o{k}8)S zrA89d?oL%G`pFTs+um*4O`PBHYZu&b7HR7qLsa^=_l}W~udru)Lr`@k%84wFK!UCxI2pcSM_9YF125 zwYn_V+NFt>rwerSwvi)4VCLRi%y&BNRx%t;b_eqtOczW{i+6m5D`y}yy?TLxEC*cbil!}!7JS+A zb@kZvcG-_E%&~!58XYsq;>XOsd8?Y7^aARgR>{ZvH8 zWC8jc@K0Pgc%>FsiM#}FFHkE`^27$Pt=1+!P8hev29BpjlB#NYGe5|hnIFw|N($a@TclD+7(+LfXgJRuU zF@+k*g(|6ts0v-(v3^fer{b}bck^?mi}w4o=Itz#pD|VLilQWHx55~VwJ+aPWj}<2 z;+Kzrl$O#6pacO@+F*`?Fcgr|zNJWQhb!k)xyID0kO^pUzjb&&4{pw|OlZfEC`}xg zQqXW0IALv?FiK~rulqE$odS6Y1YOsJZ{$~Zh@tW^fmyLcTIxRD$1vyi->RHq)(YQv1ypFqJ zz@0DDSgPmkd`79^wK!P(8c0DZWB!$S$Uj?)e>m_i4r++u>2#9Q9(7Wf^QMb9D6Wkk ze%$rcQc<8Zg&p!G#&rToMAZ#+*O?E0_1;o`2EbKKd_#R&BOqKWTk)(uhb2Jt2k@Kt zSar)jqoqqZNsZX?*m%UL+j}Q)bIgLlTKf5>%9h2b(&d-;FkMP~a>h#qHVyeT;Ou@M zHz-3D3cLa$|K%qb^EAl$#4^IR)$7F@niLIH7m+1bg@vuc6!G*~)mPtobxW(G07&jz z88#hVorl%Z(u&Eo!lr?d!fk6-Xxq@2I7>j)OZOL`@}l?JX-?DUsOy)nTxDVx>_a(M zw40W1nYJdnCa-`nWfIm(lf)C&inv-nhAJ~zmJw6*c0(}`M<-IMep{oL+0=5J`0{Bz zi#FsVqruPWQs>Ce%@RNM3tMP?)HSW1wnSOp+}K+(zdt!(zbG;(fbcb2omV0o$Vv2- z)_JB9?Ch}=N4U^3hHP&5F5XOKSliGrAz=^ZR&(aA@R?}tisxVNPi20W?b!5wwb(x0vAiOqP4>;5>!||jbrowk>nI2bx{KHjJgMZ&P9G z-Z!61@%A~ve5*L$!3@(y;T15#LBngZtkKViza8(0KI%HDMO|`T8Rq^*rlOtEIo06( zUf#D57ijl0Y-P>B3d{RZ{j=65Fo@5fZ5`&56P!yGS`hU%=0xrQ8m#HL883il3x{ZA zmSds0>@5zQ~Y!Rsk9r(O3#Bsi{mW8$gJSC?lrT-+r)={g49E&Zlw=>^8ql^Z7q zuDIY%R@SkDj?y(V`$e9*rZg?-i&EtgH?{Setd{b;p6NWC(V`4-;*;@h42)!M1Skn8 zeK?*0Qe(FykssA{?9d));E zah{o~1J1eN1IK6`X3^&&ATihYCfRrVzhwEC^Dnm+bNlm6q&Kl?2YHd~A4IEo*Sh+s`DrfKL)`1K9E_SsR-~PB!-Qj4 zg^iF;zbN$Pd?dODT4S?FRuav+9-IMd_C7m?egHsWtZ)9m@_ziU{C`6ppa$9Zn<)P` z(R2yyTf@N5L(5~fgQb(hq~oct^O3L3fO)&Fe-^vZ!07Pr{V7fk6RZ9%#i|hVWE(I@ zYZCv`NeSM6@npvNdjIhx%%9HEw6R%M@oypyLdI_*iwdah6jOp=^m`p8qqlzzT>r<{ zN&vf?82{prw;P21y=zr48kq?I^2~a&|EBx$SN)gs*9-qA?a4nLs4f1aN$5}LICN`D zd)=hdjq494_u`xX%qAMh*BW30@0Vw7TED&hdb!f$o8!w|pPYBWoDM%d=0A-aY;v0d zh~((Uz;N(;P+Bg5Qjm)9_9?-pFd%)75CFjITZq|g0MZAT&u^mLAicp`i%Ls4)hg|i zYl_F|AjF+f&@V2EHHXxh($@7w(CM-c))9Ps6i>iWyLAcQ*~N33@SI)F#t*Zh6YO9I zl;Qgl8rxG#`@3vsXx>waTKs7*pi6sQ<|SQ%_utlz|Jwq2f4kb>Z-=>@v=109xJC;w zhCSqkimCi<4c)(AP+=J8oG1XO>!pivMxj4}zSjTrXH*e*v?m0N%_!wSzpJwijs9t= zXDxrfY<#6DbfgJ-)Rvoa+m{ad*PXEY(@I5_f8RNkzirUq&8FzqzwU-O^snno3jghb zf7_td2#fRG{>wu=-|h3WeQrtqVuQ~u$^Wx&I=9<6>T@r79+RBMB!3Ah&m+L|c>6C2 z$$7l}=M3)LOP+hl^UVD`bN~0k%ej|4_mbyc^8Z%nJol34UJ~$Ymz)9qRrstJ za;Yo+?Fl>tg(p6h$E70Qn^YN6_)ET-CbG}xpjS%juY#p6cD;hnOOJr#P_4^(P|Dpv zesdh<2v!QvU5pca+B_ZpV%phKC+JZzt-ovjag=1m$K+paM>ItRGW9Kz^3su;iozy2M2aNWQR%|xV zxLwfG_~B0TG8P6WIQ*-ag)CDILia`946r!b0E_TO$Vs4 zx0Whv&#u94wW4(j0Ip&zH~pS3nA&l7iz)7uc>=79>*4>&Lag=8Y**PIsese^ z{dP@*ZTslq1&cQy5+r+)5-PuiIA6*>%fZ#33gBsR2#j7wpeQa90Y;fSK9sZaDY#d9 zz`^CT^Jrf{ecMb(nOxbcvKWHGWMI22uR$Qtnc8K#_I-?PZ%WFNRnvIRL-N#uPZ3lk zDY@&<9%c7f#a@`Jd-n`rQ{v|eToW@{sLY%^um?H8m=rNoSm;?LL>t|xUInntdJ13J z5Lr;U|Gs_IN*vuAKtAO(Cw18x%)jb&DV`G`q8@v3>Q9BhdM1cPfaF;~$m=L~qwJ)@0hU6#3G9 zH&ejIZTzsl{rp}*qF7L(oG^~BrobvEaB``ltg>(f>m=Fvw4tFf!wQs2?QNii3cdW1 zmxqXI!_w?GQD-N}YWIYH>DXcOHxWKkk3Nrvv#e)f&afPj#rB&h*+>Yq{jm8r(OA7B z07Y0%2kk|TP(Xip>i{Zq6T2}0lL}A!Zz4bvR0B49pFr)?=2K#qMc-2h2>lH$37MB2G&_T&~?>p>a)$6pcza4stzxMVM;2J-#Duc`dLrknekwI)D=8_y)vm~WtlvmocA+u?1MLKb0aL%WUsHQqDVijZzOR#~`VY^pFXHD& z+Fcpan4UWof3%WQ_A>;&;5Qad<)EXNaex*^h%yXd&~lvRE!i10PyxWAY=LAxiVpxw z<^^#XCESAWjUJf$o1(|tUIR=`AD-7w7;Ep0TUWiv<8XJPm!5Z>n3e#(U05_M3PK0` zF#Wwsm>%b-kIt%Rt%h=@dsP-_*t!&rTO0M>EhbW7N2Z^8MYVVj4hZS{15iKX_x}uj zdj9wSelC*#o@ZbwOBe+)9%{dBxq)6Q%=?wnFrS{hHP>LS-gon^bKjgr7zuI2kgH1v zVsc$D88vp=s(5{}5V0Yf%#x@OmD4H$LNv<*;I~KQ2>=0UB4GH*Hdb~|ZhFMyZ=|%W zpDC_b9v`%#d4Ch70Wegj)ukcAT43g=03u8A$KlvTbNtAT?ZyJlF#s0)(?^fTfwk$N--ACx zmtR#uzd(TZE2I*L+4d<=O^wH}`H}Gk{(Y){xS9WPL!RPN2?4_R>j21o&ewY%R1Yig zFkIvLhnxAw%_n4Igz+bqIBMt+sAg|>4eAck`UM}-{)c<{hu!$o^Z5Whe>&$+=lr|# z-}2oN14ErhXlEViymH&p6(ely0Cpjr%+E1|WYa&}2(Gq|s*{s|{Q>M%?^$)~Z=(O$ z$btT37hj$m({p2b?&{86-FYB#9wwfLiRVH5d5ZP_=M-x)4Iu9uq3v|EW=C_sTZC{w zQkWJV41d*2kc0IkEo*UF?)_U5Edr$8)_|-fkb9@;{J-bk+J8<7ThFt|^Bn)Y0&`x0 zIj@fqohJ?FNyB;4aGo@rCk_7 z+`sF4UB`9&uKT&S=YEdw9}e?*AAFYiyx-^hJYVPQe4Wy@H-AryebBGVooRHQ4sU9q z1u{D~25`a4b(LSA#VbQ?JkVJmg(i;2yenC;vcCV9w4@|v@%qmDe>C?nVOW^yo*0q=&`EE>?_X-&`MZ&oaP0SD z+*9m*S=z-__`zu6^5Ecsc9liEj1F=WCF1G_6BW z6mAm-B}G=LW^3?+&hDvSFYa}(*jd@)`W$C zMrO40O+x$WIIC5N*E4K2W@;k}uky)xMM7e{PxN>7>7VH3Y_=TJ*LQZ>nYiA}9a*Rs@yg#7XZN&yi?rQ%2S+xg9D+)J1X!mh zhajj@AGn?cK^mlapK3(i4ObTxNn-AQOu>*nC}Z=<(fgTk2(x+YMn7YldF4-R-A3^? zPF-iaTS;LrOCPjTc#|S`P)1b)x)5{F#9H;qhoGeM#KCWnn%!XZ7fXoCFRiv_LG9(C zi7m?^C7K3=1>$Hrg>O@IKWYVTglKNN7#OMI{C8Yme9^tXgXqr|5}S{ z*T>7P{=D3V-T~y45-EdGHnYxPPz#Rf8kaS&x)S6NeJx zQSI#=;J^F|cq|~Sh`_7C`ts1IX>cdhH20DB{adZ(@9|s>lfJW4gY}|Xsu~;Z52N)%rsJDN_mSMa_7hr^gK=G-nhJH7YpRyopE`=XLi>o%3my5lGKAq?X9t$t2`g!%`zaXawa=0Y}ZcHc+P9x z3ZeS(cT}eR8wu9P#LG4+Iay_y<5s)N*GDxDB6!6-sbaC(`LY@TMm>|e8!lO+xja^6X@jT6$?qf-8=?d9% z3=NcOJDS9y@~h6bd}3WGLaNWIf!D=H()UNUU*i@)amohTG9#YAVNN+=lhB3bk3jQn z_dRgNJ&Qw7oF4~8mlj;=0-3h9jA`u_G2J}N^=nf#kpK2%+%0z8E9avr?nkih5sPp<7rw4`H!eCpSJXN#mNKvpfF><|P6EZGmI znlcR(&OZDZU~u;}$);a_n{v`;?0JR}*9*U`Pu;8Ejk1x^8|1od$My}y?1yqq%U5R1CV3cM?r9brRAj>`^A!a7mq!s)`q zgWSIRl=4aOm?l4`o7p_4u6^kbS~EQ`q@8^kc(2_z>&B_RTBGnng{-PI?+RJ>Z5? zldYBXcQaLlA${ygYoa2_MOM83$6nk@)T|&gclGyHw$};*4pniI^ z4NWx1M9v8S-9}urG|TN=cQvA7FYS>@H8U+Re*Mqi)Z`lftNjg_&lJ_T17*r&rArtEa8NyXy2-xZ74}rI$?Xv2*!)xz zBAUz_b>I3`obBKcW)PJEwC4ToocG^DKl``S?zjts4?!aRV0z0mps?Qu_{e`e?t|~s z6N+n;-U3cC(0A@Yl)^gC5xLK_L7Ha;$F>TLs6aVscSnB~j7VVL8#q_j-Q;&r&@5HR zfJv9hJ&U-!r>Ff)y}$G^#nJk(g@!9_~pn=*%aI3m-YA_`?t06or?^}KA52CMYruP@#HAi^|Y`F67}cEIgAzbSiU{`zHH z-kO<#-YRs?japHsToMsqcqv_?$Jz7lQ(E$1w$$(Gd2|OV0(v^LW8VW?6CI&kinvS& zQqgaGW@HrABENYjBKUbg#%%7S$5R19s{kBNDCydojwj@$xe}Fd+9!s~H+Qb19NFvY zzGysu<~fvg%0{oGPl2mB+-HSvYe`$Qb0pp0l1cKNf=|v$c=eKxjT+M3#%OB)+Zuha zSp1}Q>91xPupinaQ~O9k>o3asLJprcA7ujfmHs&e&N${p?{QzeF_bYY%JM|DH%U5$ zLtYld<%cZ67Q<^g!6#bJAmk|GCA0KFdqL9JZY)j3U3r&twZ7C3+8dz&nr=-0_Stmq zjw#Ytf4?WjuT-62ldCUQP-48wSE}YOYhI!^GU9m~<&4WV7&Fk7YPIqYsH^b(bs}y* zliWlJoIeCbgX_dwv*w#0kNB-02uQ8|{!t{IQC*vQjy2V=jCrhnCE?YB2bO*2JBE{O^Zm91cNZ;}S!t)th7=^d8^codbS=JbA{F^m_l>e_BY5c}#?C9wh}5u%Vea zBrDL}S~aewWnr2sJB-RDefXJi!Rv|ofK=Cy%3CJ9tO+F>B;`f*EmyIzgR}jvW2J_+ zqu&>3xyiw%@rNKzZ7JkeG%JLlP2wQ$lA$pb^fr1Z47L>1aB2^|=3qRzJ+kG@x5%$D zjU2`Tz9?=~>mlG9V#pZU`8mgAax_^Yo!pO}eDBcv3wi73^lr0L>#c&8nD4(YK3cSn zENxd_InGxs=-aEHGR6ZrwoE^+_lIhg_9jdv{@+5p908` zGhqF%E#}~u%?qh#l?Qeu`HuOBop9Jox_Wz7+by~q%Lj2bjnP&kdDWDzLHL#5Y8j6A zm#qrioAR^ZWt>xAjCq+g?JaDmdO!7~cTzfWmV3E7N?yKVGu`mj)O!DHsdnx#^6l)h z%B#yl4lt8me46YUbP`WY!5@Mi2NzN$HaW<0^`5_Ix!ulL4NLe2{%-yOsWI)Nz(&AP z3z>?>WoLG*t8ZyZoHkgF-Ao{MU%Vz7BnsNP{Y~t_{`^AA)42Tv69M&C(!}jFLxZl> z$+ZeUYM#GFQm(m~*v8g(WCoazW+o8*3gvnT3da&d4+;axH*IY91b@|Rpq+jx(Fe2g zsLc~yXkmX;^wi4c^@S@&gv3_?$kXYC+Yvln%#UA)aA|p`s9y9)k-zdp$^MEif^3sA z)K{fFr#Rkkt&niK*<{16#z%H73i+IcL;Z#)Me zr%v6aVA5@O2ve(&%jq9^ zM_REXTgu=Q;vYNiGTTZqIr#v7oaM1oC*9}Qq->pZ!#lc6(2c4i%gs+`fi`kfL{DL2 znQ^hqqx6ar_W%HxXwCoiAK{7~0o>Pr)*Z#XJp?(x_HObA70tz=7WAINM-T#_{GO})J<_fgwjO^Vw8@tN?i{)yT< z-vbOVvA^68)?K}#SJB}#DH0TiC0anD)d1;h<6?M8hjmos(+ADNDd(jXroX(t&wP%* z$1CpX4u*xYLp7%S>bA&Jq(Fh?alAE@u|e#jx3jy(EGO(qfMd3kZEiS3u2KPd&di=H z81Pv(rt6gQjvF2Ny}Z zp?-tYyw`}y9YB*?`Jq~@;FK%N!%7#8@-6;w_u4FmqaPT)r?J;Y-MM^>(-xYz*`h?% zptsv!qTEE7JzT)V&dIc1f7kiOp!JHX*kdu(An+w_!LTY?(w4hL3=p_NzdycjX-+ zWyX4V)#myvFO~Sg6i`FCIm?3g*h51!En)XO5KOwh1a*^)<7(H6i`55|5LkgUPuKp! z#PQO#^z5k#OXYM=3BjU~q-N`h)pw}SeG+Np6S@{3<3Ne>L&YG4>L^y;j#BIb%g1>k zPWN?E6&Lz*yf0C-VcwrN_c(O9Hy>MRZF?xazSw1ClQvoGZqwTIZAYFm5mhYNez6{C2FBAn*EDk=OFk(v-&e&? z*{my=O%rNuVXe(`Q$jCD$ic~HSX>}J`0gIK7+F3l!f*0~QQw-DUC`>IbxyBB;GVZn1c6DSPrxl3F=RGA{PYc`zj;VFyx*C> z*Dvi(s&%8U^}vC}tTcdb-9|u~hmjYo5yr!HREz+ewaZZUUsjwamb9^fm!Hb_U}KnS zep=|T)Fg@d&_^750#|>yW}4e(rD>yEH#XH|VO$1%CX>wb@#gruHC^iix!|XOhiRWR z@INIM`|JDU-oKl3-Ifvf9NjrK7dKiTL4Y;p=H!{eC>M@GiLG2r9*-q1S$FA@$Cx0=N zEWlO|_WVa}(0|#a|IyDsyLkgPPv`i5M-=cMc}*8Q>a&tQkfZ{VWJBBI{(p1qGpCI$ zyy)>|O|qc&|BB|K|5j7~kN#e23;IotZn%<+-QeV)Ct||N{$?O*5xjSyN*jnq4E1YX z0PR59(U>1Vr57*{6FJ7)|Iz$u)juew3&IN*0>coZMU*>pf;rQgt6mqZ-fVxmmZKx& z+aK(0MMCxHzX!f^E2+`Gs-5Z<4+THZe%89+diR~n-e=Cm7Oa{&AvIAraT);s<{M|y z8Iy^Hbbh%-xq~AfSfVm25;-#jeSHY(&>zHRfPrdMB>>d2B--JDXaPji11jE(D1C>Z zt2uHsb}&JorU>nV?jM^(%>%W0Ck`45k|{BJyW6;*sAcdPowXV8JmOQO-ostUFOD75@!5kz5Rsz;MtO`)!2V{b2Fe15=x6?T z3e0piaK|ypXq2?}3jHA+GvAEG(itd;K+$d{DU%+m3Z)1@+LQlq4sNQiE||pmYilWb z24GY|#%R2OyTI8YoLE9CT@iqiF96@-QGE*V7Og?|68a3B`Zv!&ow~u<0J-tbd**{ z^}Saox5owe#RLJ?3j2%qUzhkIVv%b2S?s=m zDNHjh{eB3oOaJl%ye&xLJwORS7S68>Ph<$7{PzQS$&4(nffzIp>DT=8k^Uj*&rteL z?BlNhls~bLzsB4&HXTO&M&qV?&|kzejJrjJyrHlCd)BbqkX7u?y2LMxCb(;_)jd4# zWXpp>m5Q|1L~Xj>Zyyg?o^rRg=7J?4b^Z!{^{*50fBl&o;8wkO#<9PXS}Ub3wzmZgt`?95(NV9$=^VViMHUAcw(9)TZB`Vk(`U|5KcU{9!O4Odj7*2q( z*i*tg_GhD`l?9bKf=b;opHJJ^l%CTG5<7SAacHW(*gcK~G@Cwg6g~hHiF#ACRu|0# z*4;Q+IjYb6I^K^z7;EE|*^ z*Fju~ZMnS2!8l1tZnqa1LEI&*e+0OhW6JSAer`H{+Z5c$P`xy5XJx{1{H9j8jUVVA zQEmU(adR0Xx-LMB-v@-$kBv^CCPUhc_nXtvbL#@_M7_F!reW`^~Q5!!I0h`y*C|2 z!kE=X#pBCEh{*~b$ zk%#^>$8Gbne8j7K;v~yX{iCI8fq-tCZ2%lz z!>{EO?DxWNsEP6y`wB`xy_wX@(Tboz_NeFn!B50g$;8^~J^2<)osNW?h;;YS$lC@# z7*r^7B-nx+?yNJe{wZu@i0Vdz1I<%7IN=$CCPRKQ*E^pU*M;TeghXqW6WSBo%q?z( z_2EG7yOqmU=SE7hr2<m|TM0Q0B@TnZ z2nDs!4J{dRq9!3a!Vl~2t~5B=IxJhwf)xT&IBvvob{X=sm~ZQwoK#nBERt@ zw0L~(yxE(2Ql}GHfw(h5*K$X{hlOb=5m|l*Yj$YNWjdCuWzUs7{n}SJ+2c_r{sqL5 zt-HhIvvR5Yn^c7^yc1<3s;;Sa;O`tt?`T!}TDL`!glzVdtTsF!7^bXgPFq?rP;VK@ z%$)q8`L0^7e}qe}!ip$ItKcA^={?85`}{@U~!Bw5JcA=v&gc{4q`v#?jX7p!LM?aU!^X zc=!0DclVFJ;>v&i&F}Sgg9PsgEvhorw6PsIwGE%7!730^qlX|@Q?7OEz@&%2egkU> z$wEf z1w1)A982JzXgT++qO)lBeC)7!-rTa;6332f%1lT($aB#-mQq51bcPb4?+P6lz0LD@zTi*UQy!^zmqdEGw0CvtboGqV<+kzrYZuT;&ePy( z6s=HcUhW{K2}Vy7M>rC3R}aeQAo>`%wzY;ZIEkY31V*hbHQm8SNi%RA@1foXI&P-p&JFJ<`O+bKu|C+XEHVN3{S0 z&#G@c+S*>A>IkdRX^^;1 z*zJZUS$Bs-w`XbD5t^GJCn)EQ;^X5hSPi$oMA-Id)<(Hzt6M#Pf3M4jH!u@iL!Z%x zkTTnwO+&TiD6Yl#q40%6(8Ad_QKd48&l|C|xo79vHOpS2H~N&i1+vbR+Mk4DUJ(u| zwdFgB-Q=YYl(%0gr=i4-rxuy>Xl6s@1GCyPD&^-QPmlDIO{{c}P=tEQG5vW-x7E0u z634wgvLd2oKM&YFjt!9@9h&%W9BuY|W37CsM>LI*jU5(0Q$bX_J`6(c=zllEe~!w9 z$zkjYvh+)2kPAgaoBA!AO`3_X-t;L#m0JswW=Ky)}a$J(RB?Q0J*J!Akm4Y+=CJ` zCMjWy=73=!@YakY2H$tOiWx20o`j6|Dpq2jNdz!zf5yZiA@G{^xf4JcD;n9OEdo>s z_+eOF1w$}_&FEr;DcQ?H<6%8eX>)HqcTu%{5# zByu!qWqxP5%JU68+BO>J{lmI7Y~rr;DLcN`zHIMV#BMy%MrA$G$liBefON}6LYOg| zo~>f=-syH9+tmh*1je6pPWoZ93kEkIUu$kK<$CA*ER(@J5%H0Fm1a!|rs^OxAT@z) zTbz?Xe59YSB_p%*Z1AKpd7YiJQ7!ylk<;riYHa^TXPL&Q3R+9{9yTWqJhe5zf(^tyNc=MSsb^$!aJ3kn4 z2y$j;TENF5o;ei2kJ{A5t>}+>5we8$#FD@0aJLR#{#Mfe{=z)NXKr_bTz7H=^sLqu zR4MHusWUk~zsld{+oPoWvYrh*Cmx4AHZZes_jI}~=-Q^P@~fm1dkQZ42}QI_j?z}5 z^!Pq3qVPbYcb^7^*L`%8msakFZH5`8j;Qs(#4=i~%M&cmoz+=6(|VQ!!2$LOO1yu- z+X-geNtEd1X_CX`tiy!Y>B8BX@dk;VqfDmtsSApC40NIhpN^%x3)(b#?lXfJSgC~n zBG(+`Y4f`a1F?obNwE*NpBMkOIO?^7c;aZLl;(AzPx@!PmA({QE^vb5&TlcqXjxWL zz}ns35}k+P1}T^H zH{InrAg3v?HhYEU31$5IHRQR*xWU01J6SwJe(>UnCz~0GHr_K4VW93e^v}D(!V_9X zfKCUVu#;^Ce1E(h7HFK@F-Af6mAI}c*69ztE{vDG95PR;i`xvx>PX_hp2>0UM|129 zPODh~FW3JYa>SK-+hxD@HXONS|AFZBk+^Q!P@OFWRYNG+f4ZZS9+T30I+a1>@x-d| z^Tk;K)MT?hC2K)22gT}QsVy9C)tXKB7P3$X=pim>j9&%NKl<%b}5 zK=EV>0WhJ%TxjZ~6&#-XO&W1wrL*Y*=H2=bJlOw!xnF)ibSO;u3Dl_&8=3PHjcWSr}U(#G<=gmD_L1yYH2U0 zS|Nc16{9JBeMo|Bb`pI%tXDRtfoj-ffvxE5ZO_xVDW)*L9HZ_yBYuZ$r7H=WVhRzS zUsBm43KG1gu4{u4W<=h0JU2p__?PncIG|>bu8xo(nI;y58xo7mfGv&1BwS@@#8CFv zX|SrgSitis`1$m^bZf_}u6~Qb5X`4a=ZSrqX*nW@YDFIev(+V^a&6V1WH}NJOm#=^ z;BHr?cC8tu=e|yQAR4EhwQMFdq@?xmd0>;xb7t;rMtsta!TC zz0Af2=O|pK@($FTfx1AtE;si8_qK2n(?v!0+7gtTb=Og+w*uCr$Cp z#q}8@=VBB)HN;|yq)vUwKU;EaegZNNp30nO>I5fRqB#JMN6na|7GF^q#GYGzHzMn{ zV}g?Mql=$}&=;pcr@vap!V5TqKgddfkw2LxtI9qbQ#^rL>Z*U^S-E?x0fbZG?>OCQGQznrM2fZ~`y=htj<+vwS zD>oFbKGEr@EIB5;&>EF=b176jcKl}UbjnSw|(Mk27U5YhMJvSjpq1;|c|zK#@MqWduHuaag(%fkjIz1K9QP6TuKSUrOchK2S^6~%U+KWUUd{D81d<1 zCq$q{oPg*4p&=sYeDdS#w$jUax6b1{&%Et?lU{$mfPJ7-UxkF)=p+8*I0Dx*WyRA6 zp(kqxr|uezf;&{r))TqI6J-zP9zXLm6l9I%udueLfe*N{Qmh;6ZG<+m9jLYSy){9)BUJ-$;IM{ZDtsG0~S3T6>? z(zS-t@k1amR@$pV6rPk5=;TsEDQhN@}hUj9%alrkxA~tMZ zB#m@wME1X!a!ypK(AYJKo6~oFZRB}rs=wn?{)w)eLW$)#*JCL@O#O3LDB_D8Q)-Kl z#1`0spcER^Gym2ki|AN)T-Zb7m70Q`L8S&;dXm9re(0GMKh9>)gN5v(i7Q)72 zHbUTzO=$Zza_SJoK$9ZCTOP^$1~XCiFFKQwaw^J)v!ow*bO*gF$%4NQr}c=1@;>M- zO#r_GK)*xKo}Tk3D3#L>e{jKYFMPo=PD>ZK6FD+;LJK-SjR#SRX&j^@XKk*xUh0}# zkYc_6U7;yeEHcYTUxK99d-K?QFoY^`26X@CJi?L7?R#=CO48A5?TS< z4WYR&3`Xzo(nN)2>sy8^HdIWjuKSZ=wQd>p!)ob@)!GhOU3`I`+uDT9OW}g#MT$Ql zJ$A+g1#W?m_LqAhS7@Rb1f>3J|F(#DLD<6ZH47)93x}YzfSDAfJPdgwTM$JN-%75O z6~8GGfA6ckf!Kq0aVmXW1`;8l6_w^i*fbNM6oNQ=Wgwa)c!QF@V5JkUPaF)}k*rJ9 zzt<=dv$+uWt&wdrG~*Nh_lX;@&*c~l?7D=Pr_}@n1sJTLGGrH>oq~V2#z7clqJ*)^ z$yAD@2G)OQO7|RQ;*=7K#rH`we$^2R?RSA|E^f8q!3bp%DuE`kxT$uRm>jt!UOVCc zM(%iS(ev}4R|e9}&mPf0E3lp$WOD~ZIExHRNx3~zd{eFZA% zaH1^S`8vO@r3wZ7Tpox&32{%J99+P6su4{?v@g0&;p223@}R{l z`U_{d+3sI;PUP`9qV(uIUQ%Wx`zP`o!i!=~EVO?Ao)W)kB*#2szdFH7?nkCd-_h|J zDk}MM;!d&&Iu1;<;$VZv&(lka;cqD@!dx+I5ySQ4 zw0LJxsjsj50orAkb4e^kS&i%X%#+v2#OLN(93)dhCJsZn2sAT}<>=suY2_zsO=P2^ zifZDa6Q1SvguB-w6cQc%Wf?@yHm+T9E$*GoG_^1AA~((;lqrd%oOWkm0bnZ}V5orT}k7at$1=&w=OUeQe#>qSH|e}6TRPrGwa(s~rZO{&i#U}LeI z8(In&XhF~M*oM4ib3IK9gJYc77ZKsnX>PBC;VO$y^%H94rZnj%)QF3nVD>rVKtgwW zys^czLl95*(Tb?o@1QpE%GGr*LL{~qlng{=?|CKX=^^ihw%EN!PC;rbk}9ZE(dI7zZ6g+1D7tT*HXCg>m^f`v!AJdVqy4*9KMY0FO#;DgF=r(mzjTxCQd3|mCk=FcEraG z#g3=AnSv2;VPVo%jFx`oB)+3*F1^&Ycf3{j1NE4vkg86h`3-ol;WU5Ot^=^mwc}Z6 z2IZ7!I;-)#=B&|TbTm@^rWQ-tw00>F0kG>hys>5wZ$UriebOf}H5({et%R0TcIHo+ z7zQ(AzptP?F;oE{!1>+jc_Y8@S-^pgK@Bef+ckUl6Pl<8js$b5d>^HY!U4-tF6~z) zn5&bw3mx-XIyK!s(reJyd}LtqoOu!pNRShuaqyweDY{b)UyBN-iNC96F%44&6nU!b zU72SQ86Q)jb({l$W%IVbShOmzh-y0ph*ZhN2rxzlE#xFe?N`PxP(Sh-U){AF&scEr zy2A|#8kdR{J1VMee9 zdvwa}=cWBBnLuYd(%r@Gc1)-?$55SVg0@N(F`1n7z0UOfvsl^OBSEdV6hwR1-rVRp zaV^^RdG-&aFv6S?M6w~AvDcymFEm5A;Kq|m{t|AnwiB&j@*D=VWD#gAt?ibEmJ+|<8zU1AB z$R(U!z;gnY@Cp{D@>NS;q9gIzR>$~6pun4)*X;cMWfvOiQul41-H&B(sj3cWSK8>7o{APbe} zuS2h$xkhzhxXBc^i;BVuU>%cBQ345rk*xxhk+wjv>pkcR3d|$}TtCGf`jWu~^31DG zpmkxb$cLq8CG6n2mLS0f9SRZn-bg%19L+mVDP4fqb!E>!RwKplJ>=|p_48^t15n=N zogr4HE8*9^S?3fiw*Zbqoou;C6a{eJ7%j)*RUq)}FS7J@fAix?Ey<7}w!m>P3+uDV zk~+!9q_Qwf^C7NmGEmRc44V%!v@crY;fEmO;XGqSI55wC=hzgp5z8|gQof75QB6>~ zp~Kc01WF!gfhU<#E^KYE00EsWBofIv^3z|^pM!Tzn=jg~W*Ek2AdD6xnjq?IrHSPg z9ZtGl3eR_vH+Bir!KUQ>W)iuO`Unmsr;vgh!b(P*Yl!%W-_yKF{Xg^lgMNBk@PCpj z$((vb|7GVBHK$ji+^F^K1A}GHZ~M~((@sEz#(5(WScdUWW^j&$Yf~rO)DnIkv8sMe zy{6=MFdBRQG`$VOLGh$sv-$z8GRJohCeNuxx94$^EMtEDq=~~&52~(Yyx3SYt-BG* zmdVv~Ovan$bt5|8mLsdh-@hC#*Nx@DKI-QzsfES0%Gb3JJ%&zt{J!GQpJ_X#IxpT> z*9rpaf5EI1d|+MrF!&UfV5asdIf~BRNVLRND491lhIMz+RjYp0CbQ{3bSdM~W9=%{ zikHjecQ&hXJk!X%iQfh*;i~``l7p^^kfz{?;T^5#C~JL7+mSp(O4y+)DrO(J0Afsp_rY zY7Ub~4{5)!&EOkSnAWLw3M3bD!dL?B~3YP!R9GA?9o`qe~;SDOo^-o=;J82V9^|0aQYTGVI9u!tULn z%G9+E1EtC5CrtSjTH@aFryE=nyS3<#up$l*LX*kCq=v8-cd8#8GCxqX-&N|qh-RRa z5h~+$6>WQbFJ|TbT(W{$JeYgb6Seo)oNqd$&^Q>gPJFPu5B~7HN9es+l}69$w~zfU zvvG)o&se4)JZmW`Ol{3r9)ue)Ga6w@*gP)a?y|Fal3h2V`XP^$%aYy&SDVLfF>0FJ zW_eOJ^R40T1lS}8Av#(bp@)E$tmg5&ud5xOnyeUjeZr=oTP@>Dr<&y5+A2}?ejCzY zG=f{|8{#?%8r{|SY(D2%g{k4AWF_kl@p59fR~(G%nDs7M`CLn%@r@hS%PE{kPdXD4 zqvGcQ0D}=vlcS)BCFGYwu<4EfwW-~(M`Mo3x3JGkVk^GK*|nHj|tc^1W2c~3OV&#LKB z(4_S?Fk7o^15FCb+;if>M*<(lk98BdYibiy9Wgh(#$(9Z(JP*4wkVb^-X8XhBfRNr z(?KcnvWxaPVm-QuW;}wbDkkyN6|5HIiU^2H~l3I)mNJn zNN>t2b_c5=M*zFVK)Svl2){l**fw|+zP>P?R)Jf93avpVd7kqX)L)o)od^s&Z`}Xu zUB`JJgM`o9ppet3ZVPLtLcsH%rR-p6phgOeNF{U*hN?J`m?Acjd>`M`czO%xUYeP< z(^4ar^Im5Q|5E1w=I3Jg75p3nx9JLi3D6|RXoB-mgXdD5M4%CIXlPF~F^!v2 zi>^Z-TYc-#xV-0dc%Bqy(uR;b%5!`5y)nU9?zz zyO^zxq|WkOe7Zj^jI~Uhq%wQ&IBa~AP{h4H)ctU&!8b-F0CuR z;3&-8SxYJu=St?`8Mr|$7#GlaPn*=0>F#CuR7@#bfJ|QRgmNmoqhg`FEm8%P?zV}{ z^Pk#CH-Bhkq-j;{DV4gre|FS++^bmi<7T%6M4rOY0j^Ptp^G8{ztT`tz5YOgq?SpB zwqOI0-w(FXbk9}!-K>{>JNGv0%Y<#)QYX2A?*qIp=PNUEP%qUgSEindZ!Q-Db00sf za#ruB`@yw!Lit_WnVH_l8LnUxwtKL+Gc$l)H2mAUobn zKf^>ulUHcxGoW5nXEJXN84c;fFYlotSLZ0*YT3C`JqTsBj#fjb=r_2*Mro zs-tgZOy3xvAA3|EpBnuIxaWSUs*meKT~tb{>-9GB;=Wusmyq?tN)c3Qy#yrRU5ea ze0FSj#Gufan8kWgUDGO4G)!M*L0E%gSq6^=(m%N^u-83rT8M^mUM~DMYI+c86JC3z zvbfw}(Jm0@nm;>f%PbNQ!MTbbA{;ncNrpVDf!OtF|S&Tsf@^8VR=gO0tXKznP5py zj`9C!7_5J<8CVNB=JA6c^7Jw+zh&xJ`ql_Zf}BANox#DnDir zqJ1lVUoIKJN*ttebY|a5+7I5PiCL$2rw$70b@yc~J+Dr}E#IBE^2B{DPV#l{o!J>z z@v0>-uQoHlg4vw+)Wo5<5eh(h$RhqBQm#S2R5Y6_QrN4vNn z`$cN?qow%3s&>j>FcY8&JG{Ab9}u5xIrjz*vmzN2TS>=fBi|<(UwguQ^82%zdPc@o zF%Pc*iKc?MjOm&Dg1C$SE|TTHmte`=LFp!x;F4p|fKcaqZ7>Da4V|Pre}fRtecjxm z_bq$=(!yRAblQw<_EM_y{c7o{D>fy$+#)v*K#HO|8kS+Si-qv(Mlv5Je`G&ay`8pR zEpCQx$IQ5Ba8D%o0qH|KmwH}pk@sQurTs5^3{_S<%7oTeYREkJ@%^|BiJKz|Ax?lEr#w_PWr8~! z5cA@a?4*@FHKa8C9Y$jo%x{}kO63>Czt=V+qCWMpL&@O>1(;STn#Na}DZ!MJ(%yZS zxZpl+k^Mrc$l8`?>rw}mR(~=Ht61j!ysc+HV_;y!6u^1?sP{cQJQq3JV6an3>M3l; z&G|qKpN^Cd8Ta&gi#>myPeJJr8zRbEAcRCN94?zZ`%KMV^|5P9%GmaH7GDs%UDT|^v$!m6FyM}ivvg30 zvI5i9dEWEUFEgSk4$B6I+-^Q*XZs_Yz3xTL_wQRS&y9QsFXR>>6e#Wl0AN*XmHCPk zra0dq*)1yBty>6i*YY+TuldmOIrQ7BSKnVPH^)gfb3fls4yQBTcLPiVc#}Jr1SO0| zFQ87qle>5{(9x&ut7}JJ=bj&)ZwRuGz%RY`^WRIiNk}?rI$9qPkc~`-Ih0J{92{VL zNvzM{5#Ajk4=%m^1Ud=gc8c>du?aH}l1(Qz6Y?TST^n>A!du(qU;W6FC?oEt0`{*2G5Hz3hJR^m4aQk(X|8Y@-fC zeWh=x_2`}Eqx`hXgjFqfNGw!m1l@7h6=$4d?k?FslMy#O}<51oa1unguW&#n3KN>=v;6 z)0DJM2z!gv0+drHS@hl*;)=V!KhKPVNA)@H1hxm{${lkvZu4tz`9N%-i!KElPF{6| zt8?dw$clV-odY?BGRg0>U zqZtH~x8w!@D+vS-ZyFk$He3G}d+#09RNL)~f+8qIq<2thB29V+5osbIy@OJu8IT@o zl->~#P^$DIMM|ilHv#DodJDZL)Bqvg^`1Sx{k`Xm{f+(IyZ1il>~Y^eG9ZhUMY1xV z=b6u(zhW_0{`ROEc5rld&~Y#{*$YynOnYaGi#QCGB|)`D)o9+^y?mDl4pJJ2GLW#o ziri6I9O8Y(9=hv*e>7jE^ns47c7K&lq8WMKE@{wd@iCJO4aqh&Ti9A;8hbtduAnuZ z8KIK>G;&Pvaj_*%A0fUk;htU20h}u7003b>_>ZA}|09Uuf8(|PK1lgXCM$9{O#038 z-0)p+UFW59q@Rpe^}dgJg%#66=@pZ;I!Yzq#IfYZ&*dW4Pu!`#e(Jy7PF2XGH4I`CQmR&XnB?wp%aAPawv2q?sERGw3M3Rlf*~!n z*pVef`>#~ocA%NL0u4oEn;5CNB_?hNtK?s7CU{q{qJxkFdMF5nl4wOU;!s+|vBFP! z9K%v!pL)^!L=FF{w&o}Y%qEp*K&G0``e^Rhid9Z^R5x$DzO>9L4OtiD_h8wXn1rHT zmTDBkl6!|<{!Nbkrx}wlr?T~~k_MR}?#}?Gfh7>ji)x;VfaxKl+RZso?0pJu-yK@0 zsvDcWGtmXAMWdB@Mf!tFD9jTlhDwx{T&Q-;$=-hI#;!<-0Z zMcr37;$8z+we6G(#mc~{>QPg`nn(g3LkweO*r(jNeK&&AF`>GaumtdF`C=qrk8OEk zK0kmm`7!mf#*AjKXYNYcgmVUy(Dc&WTy$@)XWoj@fWHs}OnG@2o>ru23i7;D(mBvM zO5`wX-<`p(W;X#nZ(XNL*5X<2S}4w(G!HB$u~Ld??`2Ywft=PbKa!Q}TPI+Sx-k=t z(X#!)U>zzU<-1+X+6{U<-#>IKxqURD4q!rJvq~Jj;Plj4R=%bERl9)AiB>Piw_Vy8 zbI+TCKNNLuRe64pB-S6KG>iT<>aNbvnMqYS0+Y!zvXf;0{EVAdP6Mju>+8-$EB}Yj0MdDk0x*UfS64KH%B77q=~`>^klnfF7hw_*>E2c^&h*XHlhi*Z={|Ht zoB1u&LRm1gI1-?LJmRrE-pieG59imPeQD)qsrNc2b``(oWcV%`@_bUnWS`;L_({}) zhHi>>eN|N~9X}H*S#EznZhR8eE9ySNZ@>gytw>`fp270R;!X<2UUjDu{P9(61#mSF z&xvHnDb&?9*AH6=T0h;-yx?dgVUZt!Nfpk|f+31OM)sZf)?t}UvV**1M(eIezxqGi zIOwVtSdU;!a5RqOn~t@dYnLUiM!(LyU4x8`a$N2T?r6l5H03HRwW*_|Uh!*giV&ZR zPM?I_#>gN^Kk)E@{0NpIq-YNKN|33-x2+MwygYZFhl<4BGL99%l3n%Wz)xtUX_#rd zg{ujPP4htb%iiJL6Y(y!@*ObD1DfiLZd8krOI;;TWp-F7!3rG#V#wSrSz%;LBI254 z&B#InellGF`Z}?0*!#FDfm9(na;qq3&sL}a&EGyN`fbWbF8BoWc)w=)q*Ej_g_!T% zDvwp|dQ9ltkEM_Mn7p}SL5?cdL&DjpY-KRA%*SU0e*}LPZpe3&if-tZ z?i7|1!-ukn-p8mSvO*WBQ2gQFdgDtRT9~1YjZsblwMO^qd+?w58u%;Hys>^*lJmGE zY@VmlIl0USEpt6N3dk&U!j3`nb6!nWF1r|#g@cL2! z5L--Z5V^xrecoxNfG~*gGmSuGP?)1`{qmBWm?h}qbyJN!GDH|^Ei$P6T%BiqZW_W! zcviwy0PnDu8GbZ^B}OZBF7i~uOGV=g)2)JaZ`^lu)|`APiu==^(NPUS@17yQ@g6#m!1bTp6T`S9~^ z(K-6Jz%TQ8RCV*O>tA91xo=lQ`Xnck*msxeSX1bu=;CQoumI+cK;=5{_mcah)|V% z7R?l?F^u~3#_hO4cCx`}=~x=r0!%ecsPpL)xn%>~hGEGY|Edo0zc{h{;D@ZaR{|S! zFRVwaAx-O%q~Ra0{f#3D&*}+J?!J7K)ATDavKS&V*%Ia}6O(loviDwUZuTNaPNpNF z7=~<$#n-$kQ85hoq#d6H*Ieh7%95D|^k!OgNiE#l)t}YG@cK(1R+CG=wGftHC(RUN zPzzlZZ^zFFUWglM{}Ut3=%V?b0rfnvdE6^Lun$G0%2CjYAls) z1nj0vFnvfChOKgE(Q$!iKL+(YTr`~E@z7oD^xBVuxMIMQL=s{bH(LmZNW?{@E`)Vf zgty*+nh8$iLo32WxK7Q~x~dlA;`dV*+p0=KO>@43dXx|n!cHX9*VH+!bkcNJh5^%9 z=7}kQ97rSL916KBGB80On&O7?dNy&A>xCCtw%*B}z*|q|^lE@_Mz@kA;kLyD!%`%f zU2BzMMc2=o-MA>?WYJ-nx=tdO?-@$A@ee*vm!md%5`-$*t5}sdlOBeqlG|rO6$4D{ zmufd-EwF^j74~8*cVzh&Fw&ZMrSL`Eu$2=6Gbrrp`TeE7dv6}qJu(xcdvOpSVERe9 z7Tmg;6>EFl0I@csc&2XEE_)AkU0x;^?k9pEp}sA0b8U_wRAO>+?c-?Gi`?kV^zmw< z-2K@{Ie9>r_&;7_Dml+Oy3+{g`14|74FCKD$6ySyW?BRM#UtD3QWF!EoOL=>^XQqp zBGo2V3LR#(EM7B_*4gq9r4E>wd;yh8i{;7ety|4BhvPl|xWTV2lqnRX#nnT$kys`9 z1MM?i(jP;6th(3AGN3c^sGPrTQF;V`9BYFN6s~mfXV=S|OP%+lY4qJ5;dS%a9{j*# zUd@EYBPz(iSMsAC*V_Dd(Qn+Ph`eoS&NI0)@8GHA*TF2?CpGXr4_OzpC&M^p4q#Bp z+!RD6`$|5uQQ_OX36BdXB!1i7APDdVPwD2T@*_o-Lq&sD%FGUUshs%>P{QzISdr%o zbG-3>rIpE#(W1C`w#~kSk{+!3kF|E!cs%iIEy9!N%glMp*fNV}_6}O?Abl;pE0nno}g{#nNsBqDEs}%r{tn(t! z*W_ACM>3k9=jU)8g^6OQ;%$}3Z5Kgf1^IS5=vIF2ONQ4+zw{+lwbv)}OLGf_KU280 zid3*y`48vVRq%~UE0--UfHz6`N}+MFb&VdPJHX*VkT zUZ9-vmzM~(8biO{syQ|XM|Nr?ImLf{?nOgH5f4q-z>Ot+c}kGa4401ervj?~x3R-r z(q__v)t@Jf_Yb>O14u1|Mz+emy3ePKEjl2S4xWM+H1Jf#UuQ=klFBg-8}a)=fw=9o zl&D{#Y{2dju$$lo8f;&kpxDj1e2R z;x^`vR_d39NyE+gn^6T{?LEF<)E@g8!G*af_I^Z9&$Yitc7FPLVJs}wg6d^kgY%Q& zjoB|@88E~8nW~ZB@8|~SAd(Kf-lmA`7iuU$>y&Ejv(&W|z0c#Mjmpq+FT-?e$Auj; zX!|HBOm}<+2dneO`X9#JP_UJix0SDt5A?<%o_fActDI`W%)vrxKxL$rSHbnJJZT98 zs<4?jq38YyU7`mN-JL!j`HN6MB5bDJ!=EIYSlY~&<6^^w(LQ*rkKxP5#I^%PA9_s$ z>vFEtwvQ`1uAj}Yy!b)QQYOtl^Hcx&-odra>C@sE71f$XZ=sxW0x~7C^nH6Nj(qBh zskdi4XJ+ap+?$TW;ml$|t7b{*shgdSl(A!K-WY!VxbXVSm9H<<>ZiRU_4KA*(@ItO z7})wE_^IdoUZbt@99(9$S!R2+u@jX)8n3MR9s~;;rm9#4-0AD6;AH%m+GoktG{U0I;9a!KHHm;fTql3dqqO(2-o1=SMh;==0Iz@`4v9^tOZ%PP)FESjX{$0Tts6)N z;aLjaqNI5B;t=pEr%`s0H;Y9#K28CCk_245qMQx>monA)2*ID0B?WX0I}$1q>a&yogMn z1@#Dy*B}a7JQG^8{5v91hm4N0Qb^|@kyZ*b@IWW^rC!lnC^WHyMsS#mlk91!2o0p_4@U8uSkjM<9w$5x`#{eZLHj!S^^93h+rq4@mV#1YKlH{bKJyY`W3;8oQV zl{fIpByb0&?>qMi;9512{aL^3O3q4rAk*|a!g%%&{C!Ss_N?(B&M&8EyD>AZbj$NH zGp@+Qp%K(^5O^@;kxHlJlH|cg_DPulYF_?%+(0?#Q9rp$LN%atrt^P|Lm4-N8c^Yi zEdzKR9Dw}C-=CytF$ilZ3WQKmbqv9U%1YxqU9BF{u}A+5pI)vC)ox?7#-}@Fa@-td z0Cxf%FTRK4?ttN8rYK6nLe`%~9hvkqljzkQ?$|K?7S@AOzsKyrj9|l*pB9{2pj_ox8y0^eCrsxJH(AFZK!h+ z{h7uL#s(|YH5GG!N*?y!Fd1MTXN0oA;%@!M!F)7ay6rLOWr7@z&OzZ<@HM#Pp?kH) z%E~tbY4hyve`50ueiUxPm_TWrDglK?7`86;eBSQoGk{)z3a(VoW!^?|Z|)AyvM4}N z%*{45olDFP`jWE6vRRPt(_nww%2*XPE>`a-{sr3Mm#d7P*?r2cDDhu>B%J1^b<>yl zk$oc`gWO$2axCHl)jVF~&ZRomR@NMsPL~;+n z#85YlP|j^kQawJT!LoBjW)^+U*NN99@q4jSy|oDz5+gT5loFlhvl=Bf676XxDqeh^ zU^}&MVwFttK~d=ibw$n4YJp)-qIL5Zut}HaJ4r*G` z3MdT{r!o4~i7On@2Ca`!6|0V{;<=;>^ZuP|)5m)@Eh+akusvTy2Cb5HKZuJKg-S;gMfopM;lmGm$#(f&eE z^eSC@NelTDWQ7ZDu#!dLpRy-6d#MfxFwVf1g!+zij6|K<7GkD{@Lfi<8=Is3%j6vQ zDh`d$j;6OB<-o3b0>tW(Ng4BFXe+Jy@zpT7+1(=hWO(=*;|-^B#A{{0av327Pb!Cz zZ1o|ps=YK!oO}+ny~;0E6a2iT8WuYD>Rwwsg|zSvuNz8L^VIJL2Kv z?=_cZcjmZvA!9q6*;?ju#o#3bbp}dV9{C;2*;%#dNPX@_?M6ytdV7)=R))33s2$~9 z^nJK__pZvSv~!%a@2Wrf9HK7C_imDJF8E=uR(0Tv_6E0F1ABuJopl1cAhFU1=U3uG zqlv16teNGGA^CKw#j+-a2hftJtl6rWfJc`vBEMU)4(80NJy>9Ei|(cEdwi$#+KH6R z)P9sd^i*9+wTb+#kq9rJ+Jtrc@?*_A1mY6&O1QL}4~NbAirm;CymI;}2#}V!#7Zj# z8rW+^P57~U7jKzA7_Dg*8k#(;Ss-^5a&+I5P6G{lJ+b9#n0^g1Yh5e?G7folX9Q`N z1&Lz|M`fDX50w7`fMtP=^t$upMsk={@-a;aq-@^LysOEmDJVVtR+#-!cR_j{q5=fJ zEEwOGt_I#%RN*2|@s;4eAREkD@R=_9dl^7N`8f&Wa?C?VLLzcItvcytGQZt# zkT0B{t3g;v_7X!L3h}YM3+W}mxdtH)1M4ivT8RAQMh;upfpl>NbP!h9lR~mAM;;@p z7ItK%q&m+ULG^;EewkcD!@kNg)i!kzqmMd~LzsKU1Swt~!xq zNPvuY%Q_cQ&5v? zE0g>>=?~%n`fD~i1xqirniA1k?M%LT#chuIjWb)yFPeVg*1bl8%G`}l6=trJ{a(=r ziJWEGCqssvB{nyYwmbk|bOC6<$Y)(~cMbhyQKVs|(k#?*qH(Jr9epT?} zF=@A%zE)e5$8j7fo0`z$DDBQJN&c{~fztLB6Mu3dHB+|tMxD0ypD$EqBZGMB zA2AYQHUVC+pPvRG0;zl@1zFKqb;iD^nC2X3h5HdU8bqF4%jwbRM==+_9r1>{31~Gx zQ@Oh~^q$te$G(Yz@-izSlMWTuT_$x_n0R&#$1r(0BQ3h3ID))$X^l?RIXkWTu4IcW zO%I|6NYj^{q+ACY#SCb2k#b=$5rB@TejN={UD1qT7DrF6EKw+znHlZ`2%?nF8apE1 zDql(*jStKlhG`2m;D|p~45)`a>3a)5dLHNWQ!B^j){FSS+uPADkrxDrtPVNq9e{DD zH9TX|BTI(tVr^r-9i<;;m^$n03$B^ofEt#KKHw|uSDD4LYk#_VBe*lUcUo6VQU2RM z)7}5~&e8K7zQ9|6Oi^Q%O8@lx2kw9Ei^0tuu3;fDo=0=G zb@nz!r!bqsZH>Y-kE~`jzqY(maHRw>VrKTupx!C5Fs9WQh)LB1ARO@QuuZ6!G|`3N z>^Xf5018y_c8!N#^ehAWIj>TOV^>*|rT!_5`_-@xzoA!DT%C&+(B+ro&pitOlE0f5 zjCJiMKPx;e!o7S-DYngJo8VTBDCQU!oapVjY~8x&o%Qj=E^99sHl<=|7?kyjz_!My zyM^pavHT#DPJJQ&oT<)BLpP>QrMU#PVhj5eTH=RbS?;#3+^a%SElfo~ zN$;WS%&kENT{Hq+)eOBZm9a5%ZYr#hm!^adjyIZM+o$?L+ycMFBdB#Z*Rt%`JJ}b3so=DRk8&y5>Ez3)-F{zo*hMzxi zH{ou!cvgjuM|SKBhr?7s%(>p#yRWjU7KOe&R9LSRJ&yk{lr~v;%*y!WjP_UP0&&TA zzR_l_s&D7*Z9g%$yx&G3d$p09!NP+CO6WqwfDET*t(v2X>~Nl33O(`T1IHV^I38@N zCo!U9h+c)dn#PF(kF@Y9QeSX9&$wIqj|ei{{iAP;`V+bdlSZerQ%4iWLR@3TQsc#R z-J-d94GjUqLM{eXRSPX??9OuNG{}mXl>GRC^wZglgFI`y8W4lZWI3o@L}D7}p<#AB zUSak?V3FXAR-(BU;t*ebc?r!K*EKl-t3^?l*}4@wk}{S(4Gkw>cPZp~7#3?^m*~Cch2`ZJv05m+DW$U~3R6Q6CB#?Z?$k_t25nvs))Ws#O zN#XOlx`gc+OMUTn%aShAZz4$!(*3TxZ&T*I*1x7^>yXIz6+Qm+dCte^#hF@;Nz0*m z_;D6aXSw{9qu;BzF3FhK;v!(}uxA@Cv>&#mUYHVRHW}m^Zo&HBdW%u0X+V#!-hq*> zs2i2KR}iZ>LwQ|snAs=wXpN1Fw>Cs&-AiP*$co#YWQd+4H>z!~jKRlUQ`7)Ud$>3W<2npn5Bxqo)MYwy7t+YTVpJ`hh)T43CTrl5zv@N19DnSK@fQWlNk$ zP%Vm~k<=g`HCt*j@Ra1>*=wE$AWd#{oyOPqy^J@Ed;PP#Kw7K-wi)BZn5%iV?`N znBhdi18-`|$hUe-(q~ac}8hop}i64lR;S;_$e>7qhh=kx$5xeU3#JP_eAMV z;tX*wQ>#~q7|QrpJMj$!q4%ix5>W~2gWQh*Z{^>KLoZyN*<) zr=}zgLZwBr9cb!&Si))s=?_qK=IT~&7)jszo5jmp_3fr2uccN}B88n9whYvnpx1R6 zUJ`>Y19B5n7iW79=l7L|cPUdy9&+iD1p0isQ|?gnc86>BVAoj>nA>UoMwNNsM$Cx6QVx;YnXXhQ6Oyf2BKoLiHu*iXa?QE=5Sd8n* zjYs>|#I22*X}<_Iq+Jqsle#R>n&vRLlT#U%1D&E4Xhg)GUsnEk^cg9#IH7O;BX(Ti zy!^6qGbkprx$H8FAw}=9g->K6Cm%m`V*@%4DA4%Gc#NR-Eq4+8UHkSmjsQKx?PW@P zfM8`KOb}eVp1fno8oRA^`^V52yXKeZz`}KD`b+#l569m)1Q$N*%`NdIniP4c?UX~; zPivp@*}=J%p36r;1gz=S7aM8F+AEdG)23@FL`oFz!KrVhSCQPzN%C<%S)Tk4I2(T- zJux2vU5~2B!j`dYZl1hrYFH#xld>k7P_~#Pht?%MS_rHS!$8befu zZCBu;CkZoN9ldw-Vf;tpnGCOFPF4{~dq6h8&uA4A#7t3x;tvgYWS`0MqbU$8m7(2# zX;eF#qs;x(EGprrhMtMDPAqhb-ZKnE+9^kl@h#e#;b-WaFoTEFbR$NNb<4I_9f=L`lW5K5{^MlFwX5hsW{{H zGtkzQZkcVB|Jku@$m$#FoeotoI@LbiSSY({!G$c_!MwIQ+bJ{(ka(;a0tZXYZxoQn&vP% z`0eSU7+)=tN8l!7|7DTEukYOVuG;l+(*1I`7&$fLX ztu~tM{A6;_iM@-0D0p=_<|&HwgRYuz%6kQ>{PJDB2K=5$S|yf&PyAngr*U1m0btPmh# zJfzo*l|AptI?f&X*PdTv+Hl!!I!)ld3T1wCJXUP4kf?Tj*-}xKP+NLsob*KcL_m|w z{?Uao?|4i?w9{ujRnc`6(xS7^GVKm;Sr ztJZXpj-s^bU!wN3wPBc(@xD)ZPJi4QF-!d&!4j5CEh$qm$Cr!3|LVTIQDXVX*)mya z;GXz%tJp$XoXp2;nOi7Sjl-iC%^VkqjM5yead)#XhnxB>Xm6JZgn}hdmc4Q+IMRB8 z_wb~i{@r_G1n*PtcKKy-KTo94tGg8m8C zHWKEBu^Iwq>+f61VPeJLrsd3rmHh|%xfA7Z{s$Foc8LC$32(mYh2wG25!yNQP3t`w z%MK~o7F`?nRW<V?NrMZpV!r|^6+!}Hjg(KC zU+UXr?y6MSAOkWGBqZZ%nz&%K4rXSaBb62wxV0-AYf;$VlWa~Lih4$$lad5TM`xND zbdm$@yWHR*Ww$8hTZgh~Po?y8)^jVcQ2?2K@NOG^v0tN#k(W(kMaR7yKl#4Gb?0tc zai1@P^2bm<Ss{w&vhLuWQTh8}-cl{tKBE=!uiOHE?gPRVKc?ky7z660=pL4=B6nq!)}wm;F9*3@M+`M!Jdn}%tf4bqsXwMDJfT- zqH?*Ff+oZjOI#-7_{pwZ)YKx=#7op}7=k1I3-9n}bBXK>$mE+5z7Ek(*RHpGiCOUX z3EI97hfQTZY|c`yn+TX%Nh=Cs-v}qe{3NsC>(S(@hQ`X8^1pUC5B4KL-Bdw+mW+!E z;9COs_bkwXPS!_3d#n=L-}*<_^Y1f8uck9krtmbxFT?K2AhrgQwSslYwd{+ITD_(E zL{oP@rx^>!i6Fy5F;*z64lb0ab0n4(IoOjceT0U*9L-nR<0*qHsRSbhS(kE8}#F};iKUOdMV)Zx0zi~QVR;s&MNj*1|ZQQ+2TrXuvjps#x-z)%#`iH5* zq1>cIeuk46fn}0sJ0?*Tq$Y;Xj-K1RwI`q5Zt?YCuewpLEWNf-vll?D_~we+Zi)Cl z3je`4^m%ja)gI@DUaMH398X^_!N5ZO$wKTzgUwuaupq_@cAftD`ZHo}BTINLB-M1N zZ)Rr#RISS9(n|41^MR=96!vD-nGQ_Q=3+co8&-ridSMjtW6`BKiEJhSR8M{@&ThzO zYRu==o0S-0(QhJesVg_ow{EQMvov3TFIvtS-MYOEqGcJ;n_cF7lN_Thd^@uANOYxv$uF z@IE&c&Q&b5h17K%?}2~*HeoVao95G8#(9trU8PP=J#a9Ha}<_SN1Aw!AD54GviXvDdqwS4@M7isL{Kjb7Z$gZRUw7u3{r11 z$_8gU*MIgmfYQFr{=y}KQFjC?s#(=Br{z*NYLHxV^&Ty)m#0WiDIhl^TX-Gl4`cYS zoZyrW&nLSEp5`oL7#a8EGo+%k&@<*0Bht*F(c}k>wm7RFJB^oiX9+MA28fV7$%zqk z=XaY&6Oxf zb<^ImEfeNmDq%BcBDA__5t|~Vn^(BE!^tT;k$zaR zM^0PGOzdWB(-6Lsu>11~5yGURRw4brCfa!aCTZn_y>sy;fEA|dqo5xPo z2#8#)+?YLo1_zSj6%!O$jV#9kTE7MeIkbjwj2D8l>-$o;X6}&f=-%9mz>e8P?GU{3 zc-z5v1yR~ep|P^=C56$l4;949ypL3OnN{7kN&FA2*FEQ&eAH6UJXKZ?YUC)jU zV;H7dSBw3HB3!_md|1~U`V#*$>FH?AyXV2=u7%UCf@qztmWS8S0Dd#HT5n1w9{k;& zu(e5eX-;!ps>FlOReg9_++^!9WdO@74(15Q2q8CiJ6cIGn$B;4>V7MOW79@6O7Xf; zovYypQ@?gEo#SU4gXQ+e=&?x9;=+(06aA#X-JC*hu1Q!!&1dg|&y?OZUbWloj!XJh z;DSx<(cd_BaUU+J$}5XRf{%7yS@5L1Q%6Q=Scdw&R#Cv2VLfyeFm(!B8K&|xo)B50 zH^XS4_=ES}z{~ewa`|YVZQlLm$i=t8G96VcG8wr%3hqO=y*B}Q8oc?P)_YibbnLn5 zv9mPyS#s7jG3h=*=EPj}`!>Zs{tvXCt7Y$}{@=u@XvWz%_J*Y6ii_ZPt{3Tr>iw7! zRk@XRP87TKM0rIkEO7+kM^>Qbdvyb&HwGQFq&;9h?jl=qh#^x^h+tn5P{a%V$)jt% z`q6xD#n-o$e9Igk<$nQ(33-7E8vC+E5M{7Mhmz1tk)N(N@Z;D7!=ye)Xl>FLb~eCB zuBg!CZN?N9;LLLau~GZ@PP=`MtExG2rTMnUn-I;MV z_H4$n$+fEYTRip1T2lk;&Zw+D$b#lia=6M^tX|?Xmr)UV+&`q17f$s#mMz;IaNIf= zpV^8_=N&3ts-a8-Um^ITVWbFL1Q*4#9}HH=vuwvrGQ1ah#I8cUAM}-t#F)S0jLrIq zU1?${xx0=b9lom!5N@>^xTr$ezQHlyhI8eQnZc6%j_zq8;$ySH!w!C$U0IGRx$pqK z9iQHhG}^JJ!uVsnW7?KUZ)3%pSfuWIFurEQ9a3`q2JDeCoUT?6GFF#}&>Ij!)9VBV zUdw?iLGF4egI$4O@W3ZatL7xRr2F;xAw`ysft zW_{FRxCU|;oVH5bxEXm$8ez_X4E=hy+RG-#-kh$P+MZJXSop!g9c>#=YaU&s(8sNZ zK?t$vlf#+ZZqaH7>dTZ^VF(Sdys&P)kDPj-h0Ob=$LX; zp=zs({iM-_MPQZfBLy?9k3+n2X`mbipU&r)Y!Y+aUuCv$-qHtQfT=GmU)TqHhDC)KOU;_z$9?XvO}-?( zx!ohnW;w=EFYz666NI0!e8_0T#Mi5E4?J`&+g>2MYx3?kR%JMaS=aM|W{bNVJB9`_ zp=Y)sa>!}`Ew>JGpJl^7s2_jpOulXGndHva1+D;iJR?@8N z73YSy+?`K}oiA%(SN>(0g15i<6+OU_U9_`AS8>8*p@Hp9Tv^QE?ei6F5OWcpvXTBu zZmqk@>0*S7_g?Bc#?i{gDzE#EjqRl{gkgMIAz z8T(F#`Rnk#bAK_w!jJUwO!FGgAkEL1<_Va7Njs&xaViue$Mj2d_A@=+lc<5#8cj;F z;8cw_xOoGDe$!j>w6b5V7&>!i74OeId>Yv)(N2h4&VVQkKEya9<#dsYUzwt(yl6yS zON~EACm)rHxoB*yYyBjythyfWqoXae3DEZ!6{X0$k@vcS&%manNlme!v3bfYLYf^w zvsQ#jt3!}Woj$saZua{394IPr6W+W(DzbWDd8A@Y%`+tEDj`$Za&Oj9EJ#`v5hHl! z`<;afoP1~)E0v}fss@_7FThm3^5Zq9r;?XDZ8;zqV82Sj*^T9%ke10qtF4quE`(%+ z4&JcM+KZwX8k>LUpL|P*?D6BZ*JSkvgk;S$?aa3!VMl<>4P_;ytGehuk=yDm=2+SNvf+V{Z8av~KJmUN5^DyZwG>qe+=qT@JvytvvmQ z-PZpqwW~j_`>%jzc#JLN7Ye9>n;!z=?Sb=K00`tb_QOAdoc_7z>kPkjh>1;>J3aV~ zGXyO}<*-)VG>^`#t64>i8FK% z@&6+Z4gbvh{{MQ;f2I3FX_+tfxxXzI_Vzc<2uZ*lY){sYxK7Pk)-&!jgi`Y=DK*%( zhs^O@RNvK}M!y5j!ft7|CIG{KHshB5q8VSng%EwF>F5o#r882iz`Gvh&@!8;>+{q6g}vCG_?0iFWHbuD?(s>%H`F!fH$fu6*FE& z*Le^Jb%oX5t_n&pOE+9rVv?alKa;u29)8g>`Q8L_$rE|og_a>d+|~O)Sl5}OqVjHj zg6+wwUWN0!lLh8OEx?Ta$N2sm`*J5I8?tU?;(9o|1!nr11yzS=8HEO>|dG@y$raZH}16-B41TY@_u4oEZiI;)&6_(!O%;h&u?gzB< zZ=8@JVEXC(4(XJm$C7}jx<}BE_Eu^P9b&=9+BQmk6sBeC?e?%}zS}BN$r1-If#60f zKgQ)s&KNsQF}uBVs|643b@m>uo_~>2yy|b#Ry*rdh)~OB;Dx<1>4|zgbMX4t!TaT) zI(J{v5y0F5riR>Y&tkv`Ez5;3RUITE6;}5??(IPVv3`7-F=*Aj2#%`On&2<1?)qM; zgy9n_UzXuR>DuFNB3u?ayA^a8Tfj#8*wCN9SB?V4wZdy{>|ZQAXw~JJ?4|wO>y}NV z5mmTlDQ?dlJln`)(qIedd7E6cIUe$?EEjyGjO?i>Gf$IZAws8^{(!<$oy9vM&h+X% zd0BB@-B80fz3XBj9Wd_`8bR8t`7r=@9B?C^!&0<{Uw&?UjXIBmaoLuTJcQ48U)6V^ zet6RzgmzmRa5@QbtRH8EX5J23uES7OtQ@u-GH$UD%JR1~=MI)_2e6OHQrSyVSFbdE z*Yifik4=j91h+kt^`dz!Z!c;r_;91w2L}fW=~>7C^s_v&cdSTh?U(Lz<-azz#$pHm_FS9jdSfQhYhqZ>*^0+0z_#!0nTeV z>jiw!3hae_o*{;xT zneKOM)v65Ki@oDoS}|pkKq>8YGPkKJRXJKM$uO?WPF%^s+FEV zAd-#n4;b#qB7rF&VwAWF#!vhO{hw_}*^qGe5`$Rrh@bL2OTY1S*u{boJI~D7QjNAj z9(FR*jgWsr#o~9_ATrv%}{B&6{4(r=*})5ix6QVPrWQ1xX10% z{T#k_UEwOhBKGi`oC#0MHJ5uaU(Y+@t|)4Tuh}AD183!c{j)uC^ZIifA!Pe(D8V2j z4C1-z_~uFhJA7H*0GLZc7_lr4#u;nd&i3|>t5SE~)+bFrRtm35`1R{4AuijeTh7WT zA^F6!>PEC^ZOUrb8I~-nYuMc~ZtpEzt$|nXrt{LqVMGLj=>GkK;hWuZ?^rJGL+<{@ z*((KG{KnDvG(p{Zl(FE9{mC1L&Engc(242x@?|m6w+V&jI;3Wn*%Uayjbk=aTzR45 zyiN&5JOu)!fn0j30u8EUXSH{ybVh$-Zq5mJdv>qSgVYm#KGc zH%DM!vCihJx_?lALVLaROK3R&7p;d%S@w!PU1I7j=kM{x*t*ZAbn)WjGDZJbS_`fp zlZM~6Qi0Wzz>c_VLKs!@yg`JL4x*>BgXOk80Rljq|1c!=FviaUU{+a!ZIx;q%U+!C z9jUK%H3MFNLraR<{w2Mk7zIZJgh;t$*3co8*FwiMp|%CaAY z@C`=Y9I!v5%M&mUaw_2zyYW=k(wK}{QbJn4GT2zi)jq2rQxM&`Y;nU+eq5Tfe6VZ* zo$_ite*)ybK+s{F36(NYe5lCwt5)=wQqh}L+k~<4a&&nqTJ{!dsf$Uo!-sNqp)kVz zT9Q|3SA7b`Uc6OZR#PRd_3OL8^Bs5FSjAgz{bKn5T{+If0O^dOJa2CipM*&v0MZFz zT*z#}=gY7#3`?=2D%E^rM(}7CqW{iUB4y%IA{<$BSajx%NsAr}q|Oo@cvTg77|A33 zIDp39N85q9@5$?Ci@i|5mF4R<%xg4N zzMnjDF#kF>rpR($ntM`4GqZe;pND|Y;4WxvrK>sI=yH8JEpcBtXps2ur4s*uF z36TZn&Gs<|$>nk30e?a}=lwkT^^LRCy#;AEt_MH$>Y_jN6N!$Q>^FYR%Nt`fLwo@i zms>!0`|1CckAL6ZeF6E#nW->InTtXr$SqZo+fn>z@^sXO%dj@SgVo zK-6ZH>1LZ82~?9BoVlYWL)}hQ00!mNCw=|$@S!q&byHJSNlBpE6CCTQE=f>fx7-cC zcPRdS<<&t7t)TWr@j7})B<8^z2GtU5T*FrFP>I=@*_M+pcf+maqY-cz7*el*Ea%`Tx97hOt#1h`T z;@_2}f=jEG8tuRvF_nYm;3a+dDmXShHjaGB^cU;Tck4G21k#rcD*WCyqc$TzYiN1o zl|pM}Gm0Y>wX-NzUq@7c4(NY2+P~EmB(q|Mc=YOCsovV-Z}<{=BW649vN-6uW&Vi6 zLa`u%h>AVuy_OlP;zcxt(fG;L7Zp57v-w%&oA`KCo$FyQ;dPx^5vinIyDW63cA_a~ z5i1om4$O2d^ub!$2|GO&j}79iYArdFI339*4f6c}k6GuC*_2R_u-u0hVJIpye>vlp zt?Ug{N~pA6(e@)a&W&WrH2dSW0coP}(RpFlobNZPXpH5ocx6dASL%9!l~?U6=v|9A zI%kolxjA{qQ@4qbIPt|GTg3;#gI{~Dh6$<#s|=#SX^jo1r`=uD$rKA_noQ7Afto~h z?hutpB{czQ92~YpbM=CNku03k3Ud2P(HK-`8+~mB#El6W6O$5M%8|KYPy0}jo+m$J zCj8Yma#b9I;vG^5bC5qr5(oe%vNu69nimF4I(f1+y1c0vd-8t};kn|naa$3rwvt<5 zl+a06Z~VB?dI*1(4!CCvQ)^T&GdKO+GPj~AJm}ByZ(hlZILwZ<$M>lE)FfDL;^-=J zHmFaZs_UFZA~oXk!3jqI6Ks)}0-;#=;UHLlB;hjTCsd&S>*u$)XFscYNsn6YE!!?} zA8GcsaE;%e#6AYg?|XPomO~tQ2@fPzk=MK1J0IO$pohs6?-KmN&eb0!-qM&C+&q=* z!m^M0F(5b1P`2TRiRvTnzIU9VM8%{7lmZXDoC9!I8xZ9#Rr-`>{mewD-VnfYm?lUz|6%XFqnc{hebFcg zNRc8PAt(qaO{J+oVx@|Rg$_{>F@_>45Fii%=^X?FgeX;Nq)Uy`i-2?qB_t8)kbr~$ zA>R3|ao1Yk-gmFF_a0~6bJjV-KQabMm?4un-{*bGuTU`^nQZ0N4Uy)QlyA7oyi9dI zW7@}S1KU?lI|Sd9cv=c*w_#Io_cGjWxs79B6t{?@9C9Ndi{Rkj)-u1qj zQ1xwU&7q2#(%}|rFR+)q=6~86!H=B#MB6eSZQf}1^4wa|?)MdnTc0$NaVhWCVr=iT zDG-IU!4l8o7)5jBU!dI+8|XzhN&jqmN~?L3Fy$4#Z7QUoP%l9i;gSu%MVRdD`z*-u z&fNJyRPDaoj;{*?uNs|jnPLWBpY7R0=nZb_%JtkDDXv`Vz4?6t9%pAKd(-}l44m6c zk?+Bi`1%#wjQ1UHM=)s!4wK87;ny zH{8DI&YjP`g?gCV-g7a(V4;e%MW_^M?$tJtR8_|7P==rvvwh0<7szZ+^UblG&4Ze;g(9?<6m=Xw z;Kk=kxJHHI8}1>BY~fEArNn9no8{8E)viB?*uM9g&1$H}F*+&C?e+aCby$r3{t@VX zfS}|xCIVO(`nqRD+gnvhoY@kto@hqYNz^A z$2Q1h@OWhmF$hirebll|QU#w8yqdK_?fCZrm>9|Cp#rt9rUN~-6b8G*M z$6F#IhkRt+-zqKpf#fQ`M<=cUrl>JaUVEO9g2ufZe~|^xuak(=$cYPO$*WvuzC{cr zs$_Jbu}%T^$qkdcWqI4OR}Q@9{vh_F-Vh@9=rnWG6UT-hWY9Co&1dMTDlg6UqO3c- zB#Vx^>@ud-3s@dbz0DY(VT|owLR}q#9QXfXA;m*+d)ah!(f()yRV6@)&y-Tss_DKQ zWL^F-6%Sv&DSId4#F6B?rLsE2)#6FI%ntj z)CbFm-ErIV>0&Hdx?ZVP0g{~ioC;Yl{=-LqB-2PY6!>LpA&dy)l`rqkW&%b}&J$>0 zJ`+z(8-8j$vtq3fpOdtld;5x*k`W(Bve*9zvj-;n3j|c~;{=*@BJq0st_X6YO+2@~ zOn0-o;yrwerb%t+5f4t#tY{xuUpGvBmiY}km8NLfdsTg;^OcR)HM%NIlYW4z_Syd& zJ%dUhS5|jX(WK+ujeRMPyBBgM6qET~%^iEdO03+U1r*vz#ts`Dm#V2X&4BdGEm|Z* ze(!|_7SBm&&D6rx4OIEreBL^g{A4eW%)?TRIsG8c09&VZEtpm6CHlhcJB1~h_{o$5 zjt(~H;Id|-OBwmp!Y)4s#{I4uldX8J6@7) zFLqi;`Qgl?02UZI;xEcL1vHy#NU&;s{;xQqOw9oGAWxGU#N)(zT(;{OFZaPlxrpwY zPgB&C^#;nJCvfn6yAPOO(Jbn*2LQ21DRi?84J=@_1a$^J2Ae(Yjd4;!m0;@Ifj)$< zd;59u9l3rodL>8`i{K$FYtt01^ z8E?BabSE83OO7M~6jXo~j?%2(3s>^jLg@xxNz|tb^|!7-uX)A46-!gdxI$ZvTGx-8 z$;b(+D*6E(M-V$!gm%xM&RaS|?{R^JP#52rNad2{=tVg;c6OK6*DUXd_I%HJA8nL< zz(MrB8m#Qqtvlke%9Y!I0_<74X`o@U-LVTocLEU|s4K@G45NQKjLpwJ%LG%rUZUjP zi;ame&UvO-ig_bq>dw!SGm7R-A6>2CQIB=H4qdk^H!XSY@n*JHF-fSq7`WyBIWW`z z`A*L(hAG_^CvJM!*{seX|#?o ztXvHl>3y(3Q!c=D>xK^$!s@oL3&zhRmmwoH%VX{_bc+^YtbfS6g zqlujb<|TwprppZUWpa}sy^$OnmPW%pBfCk_lVL|U5%U5^^B3YfR}gsJem}G;Boiz3D!W4&ul4bP46Cf zZ+(v4R$B`O)8yfp9YY}#>Sbb6D%FB$!8n$dS5}DhmmN{6QuMp5_vk=xV_U`-uN&pt zRAaII28le!O6 zE4i_68ZPhZ+9SKvB>)ro=ky>_qrB0WbJhFj6Gd*kpSf#<6N@Qp2)~mjG}kW1mDY;= zs71iGudmhs=Pumw3uKz&v03$imv>%~+(9*(PiARdyIbeGNa}-DYZP`quz9Ab^*X5H z?6no{Rtj!O`ZF|^{Uo{!KH@Q{N)zS&fB(S#Z*;0$W|UC~GgxvgsK!t=`t2u!+lUpw1b#r^;*IXF(5kL5iDs zu9oXu4u~RxK`WJ`} zM~`uFKVt|8dEbo`pO{M{dMsD`xJ#d|jB)_#=TZOTfOjnk$6-6~liOZ^ zaMV`RNz<(L%AJfZ7IpbpnS3tp0eA2dj?Qze5z|@eUOxNHbxfIJ0KFgcQ;HrBh^7I~ zx{NX`WG|tL$9joKXgATiJ+>Lk_xT;;9#uFtx2F`Lbv~)BF{7$8hC^pJ)LYC`zMvsJeR>q!w)>`wX<(#U#}Zxr{cdT zmkh|&APNXb=xo8TjA`$Ffog$Khsheu$lRqgGW#1n^7g1wWxBSm&8>By-H5$gbtQA7+pcW8 zlx;!t#L4>bPiIBn-yCeI&Pzg3-=X#oH^{pbjw7MunpQB^qcME%YVq?P8yIgt_hEb6 zu4kw8J`U!jxTPw_iG2$Q$W)y7IU)BIUkhXffM&Dm0FxI8dty3{GbOy{BN{#GR7fiN zIIWyg^<~HonLJ1`cau}dWn3m8V4z`Y9Oj133V)hWOhpi-o-Pmd)_nzjjx`>lNfOCfy* zNscjgrZxoE_hD_a@|Hd`!$sLqA?$%1tBTO81L|&vkmi3W%pBj&C!28;SMHr3QC?a3 z`rLqgK}gUCbl_GJ*=?!dq^1|-GF@@^23?r^d0MNI{+U|yxeglflK@7fJr}kf#pT0m zPK{smlQr+YuPpW{`Zl{_a=W2?+D|YK0tQ0)?z-Yp`V?3@Ak5!F5`=JLS_bCpz!A%; z4hXsWh(*IFe&H0KhDTbic)>TN1{yy-1kb62!6EOi3Yt6qOEy^lX#D=US}Oi`o|*`r z&g8akK%Dg-B02sJO;Nm50Yry{*n0qhuKd<~YhN<}Z*jQs?_n+f?B|8nDU3+qmfl?c z1==}SRP}F-HPuH+j!*>Ehw)z_-X;0~|lRJT}C?W9w zPnFsK6`%blc#56IpE~E2vCW;n*?E9Z%NgK`yxsqQ%cEA;f~mi!#cX`Q^cekj-kMb* z-;M9j3YwY!Ljq>871qTW{IXW zfFRs|{TQ=N+EJX4es%^m zmPr@%v)66O)Wb1kcSQDB4>Rd*lx(Je9~U$5Anr?hJ1>Fxc zIo1O7N63@sexK9t>-78H`@Nq2J29fjkEAPXC$O%tHj;ysyzT62c$58c?q35;;ntH& z>O~1hFI+JREg~TLEmj^T15=U13PLC|3g8 zZFkdeSK)qbeXAb-t&+V7D@FcYeE)7J{JmN9I}H8~ga1ll@ORVkcO&(`-9P!=9R5q= z|933^9n1gEj^)ML(MBCNs8d1XlLtp!rYv9R@!FGe|2o*Zb0GR~JMA9-4ZjTLe4A9; zMa`Grr$Y?^ErN6ZP>aC)PpYUjOZ&H&`o`d$E%coA5Pd-48xAuObOaT-OByE^YCMsE)kFp{h{zDM-KLSVptH0j&SI^c; zgf`PD61ubH6VBikp1Ta(TW_BKL(IipdjJx!0E|TK*BDFwA5_ubpO^h%0?YI$fkyKy zNB%Us>XmxH-`am<`XoJrScDaQbe?_XY1(KRDKxpG1;_Cm9D3gMU4c=GbbEEl*=I`b zE6S-;7e8rV))ZvES&}h_@QvubQ0l95o@Mrl$NU0Sc<=J2{8-*@Xq@nJnG@^K*v7m= z$?oMhfsnV_rq5BFT43X$EeY1+c8k`*eW{LEU2^NY{A7j9%So4ms-=5Gn_md-i@4Ic z0Ur18Kf5q03}&gq;^UiGkv+{Ra{DL*JGw`1-&N_5O>&!0K-1XIO1gJ0yab+W^TFFH<4TmyaLlY=bdG4>A$R*& z3Jdd=#_nVEB<>d|$Hh){xtDUQ!xMbC!D{z13Ynzhua2xceV{2_A~dMQ+V%4BSC%tc zoT7n9v#y8n=`H?X#u2(ZRiDWfyn6#-f1WZ&`;kvn)^7o5oj-Q{+Hl`iAz!dK=bH+N zKO)pZxgqv%-jpHU?S#T!OY!X$H5{fSGCB2k&F5i9ASV{}p#4%3LF;bqSG=e+ugw|NP^wx?mN!Ovx2OFgv8@rY@u)2vD zFO^bM#y^j11HUoW7ZnhYnNcBsk{w%sEzchT@Mqc(*09u@fHTU~Z(r(PK*uS7mstEt zJS@`-%)^vn0D!(gVgHd)0A$OM2c*R9aU@>Rsin~!H(G8Zt;aWXs2QWl?syjY-TsNc z?aY3~W%PdferPzDV)zRb00F0TWGd623Hq~sbtPC*9##Ra#rxp{v)mIBTTY%+{hjDedX$$qamX>`VOlj^lIli_q0hZt%(L0M+-w~@T840gpVwEe*OzSk0(J@? z2|5|~M3h@jr*a2I6S8x&+ROJpflMTpq=Yv}?4J4t0Q~QLLz=eLP1sFZFP-+w_|AXf z%Zf9<*jC^QMnlgw>heZtFp7)B8)kooD&OihUT?6M&6Hl)8k1|eMQz(^kJf7OI{&$b zGknA3(O|#$`y09Gvmh10!0ch1lWDM&VBOw3ovW0PjSg_7{-@XoVNM;BBIJG3FwJuK zP981%!AGl=k|Y)5hsV86avj>IEvopSr2m@{fK}D}r$kn)_b-riI(COd=p2do)03|U z{QhbWD}({;iaKin@`>%zrI)fo8?Y6%_qNt_3F1ghc9A_2O`I+uM{27cSxnY)bN&in zIg%@27#9+9(A69-W_xN|)=`#CuIUw4lKu-sM)Zfm%0;3W4i0(ak2k(u=Fqf`&Yqm; zOPJK>Dr$YHHY@9_p!4R5k8r>;GPV`XL-!)W+QC6RyHKRtg|Cof2*|P1wsa?>kIbI3 z(Vw^qqp@4|xeYgY;)Q~Phc2zgm|cY2Gf$tn+7Z5ro5{shJ(yMaNFM(0mqne}^VAYuclr5rZ3m0_%BOgMDhO&)yrdvo& zlUQA*FMLJj<%^3W!udPNPi9hknv^%>2j_8SFP3 zhkkr)n~h1Ajm$Hkb}1HCSobBkMjiY3O7nEo8S`1yXn*j?CK#{%$)_fwL8F+yG2>Sq z>n&XJcHZ6a+3aIy>T8wKWwOgw9LJS`un}4Os_45;#UD~9C^bQw20BpQEd;QWitBfbv5-B$Ab;oS{$33A3b%fp` zvsoWJu>IF)?RB z%erw2`(|)EjS!~lfr##niiNCOIZk|PUd5mLB&IQNI~gFLfc{T={AX5q%}tl-zEn?T z3nu49s)b(T2(}||6XC0@`f1FchchsKkSPPAxx!aO*zOUpR-rmI~Jz98cxyD5FuKn>>`#U8s>OD9)a~j|Mq~*uTN#+E}>ys=6 z*Nh4D7awCDTBvynue-vOp{hNi)v&dDhW3}+AdCxc>+4(-FkjD^67ygRKQun0V^^~1 zBf=1_Xt6jC3))1Bn`nLZeJ@)%kXIgK^Za~oty*pU#{kX~Aim=MWYL>v^s&rA{M0WH z07aX@;6yij70o|>t+Ih0wC{3!Z#7wYc%t|Fhv@8h14qBsyMc$?BScqVQ2#OoH1CJU`@nYhvXL^ssgb)@ky`F06yWJ$8suusD^rCgqSKQ4oXUEh69O~J+qHwcTCc{ z2#0EJH#{D!NN149_z2Fm!(BZBZ*s44RH9b8NGjIEyhCve0Xxf zhbI}AjSTGTv^I8kdZtbhb$!Qu<644E89{2;2Zb!h?_9nM0(HD)_E^jEEr3NB`e-k2 zEWLb=biFEvfWVi0&ZMo5U2jar4{EvYFLsYQd8}~%mrH@|?_WY`d2n^~IJvE^l_1<; zLUbIi^j3F~Y4*{`Ogghvv&BKZ>>}Rppxo1?cK)5^tgV8Q=DoC!(D4o{>Y?CWSrnvh z(8DwgEsTAxE6&S<4E+>$l~{j~7`bZzpt2tvF3I?`KCYR!8!i?<()r}`(v<)4{1#Yf z+9K-F7(-q@4CNX!cKIuQ3NqxUw57%&T~%RatIyRV`_5`OPoHpKB*ya5FA%>pyWGHQVTq^)Zs{*Tu0XclnQeEzMNU^EkObRsL>}w(b6lz!jFKok}x~{T8hv zSC!mug}O&#_l0+h9hJAJJuaGkCgHqfv7SC_3?gms%?k4*%6>0GXCGCj6;~-AUF^~O zv~8|F=-L3|oMic#UfH|HnqDol@p(A(AtwD8x@jfyszZv{3`xBUlVZ5tL$M4#HUAE_{{n_i# zl3=5)K4`$Hw)npFUdNpyKVB?9&6K2~!y5c3ku*+fN~8zxikrY=ro3;7-bQB(_`Lam zhEjFsh?#%HTZ^w~aKlAXhDZyPr&vdxf_kEI^r!MoMc>`~3)zpA%RZ?JzBqOBltCx! zbL>0+(?~X257DbRoi~`ko3Lv_!Nfjav1`yK4mjSGseIWzxP4Il!-Ye(lJ#T9!#Ce* zlugfLcpGeTk%c`sn&`7+v;h91+`{u-qm~QCzVU&YwKYS>ULE=cl8rzv*@}DyZ=YSm zCo;Q_0~Pv5Z>}(Qk&ph1@WwY?g$4z~?rV_#|t|ozg0f26>s_&Yi3;HwtL;qrwvE zzySc6SJ&bbt`ZmS&&#-1JNQ$=Eei1WGJWxUPk3;8>*no7Wp|p(9dfdPd;&BXI+b)t zB-4cB+MXm`pL&cyN?HC)gog9xYlT|e`JiTRIe8tte5Sqk2sQN-3u}UwM3@+h?4clZ zGeA$(VJC+)NpVuE14tW=@+nAlllxqRikdB0w@G|e+xa@T z=0-Qzz|Vr%Fjd!MLvM#Na;&6>j|W5*hRn)@%<*8-ZgdnB0L)x=I*y2*fD&QR9?>E+ zf4X~~rShcKX_TtTWz(iH7r83brvZb^JAS9NE5#dUS1|+4oYIN2lmkG_l;;asZ{g zGq${8!Ysc6{P>wx@#LHgE9G2Pb3ODr%9OmeA1P3FZjEHlXJbaq50h>fJ{Dq7QvAGEbF$yNVCoC$ ztg;LFNJE150hYzsvN(;co59>^dx?A8oLw()!ir))@^e>)TUN zRQr9@>pTu*k>!eA&YCckP075^FHpp0#<8_qRNhdPMAKo1kLi~(;SU1_G+V#SHZ9&| zlLjd+!Cu1HaKxMF=F7i8A{Kx{C1C|7!_;3pjDEZq+PwiK6Sm;9Ya9Ol_0{qw4H>Le zPCY;%ahvF{+{y+qwHKoqnI*v&gV+#D3-C ztwG-#M?dxkUkYm&kp@Q3d(?E_I2;OZP<2I3Bu?PaSH{l%^6G`~+IS$RAWcGhq>W*|#^&?r~gIp`+=m6^UGLwOKbm99neJ$D#-*_Jn3Iyi5*sGuQ4z#$$Rtuu7q{e1;M) zK&GO<0(NL`*f`9x?XO06*aJ9N z90b~4*2TSC8nns}<6IzzDp{ysb&v?Po(GgzE+AQGNDBDH^>=$8bhL;)%0~ziX!#Y` z!x{rrzv?sRsS3}j-YB5>_k49jh72Tip~NN(_OS@;5acMzgnrxs{d7w!&Gdy1Tn^)) zgpIXNnxflhD&w0IE95QN{q7tPbegY2=QJ`C}|9!73hRNJ^%v}K+c`9ADn-1(~D z+n}c4elxW)3+=<_@E^B!PD};=F@6a7XH>jGe|PgK`qR&EId@DMk;$0NzDh+X&^C*I zI>f9U4dyUV4525^NGg&-KkGjGR5!9oOU+vh7w_@N(?LArkGY*>#T~YgF@T-c6YUq8 z9JtV*fkiuoZQ>-`NUDMiK*Th>O0?1@T1r0I<>aRh_%n5Z$#$&6J(hwvn`0u}l6TS_ zWcXT!)MG=YMJQ{nT&jG?hvN*j?~exH0t;ymzd5V8ycMmsI?5IOwZJht5zg6W=*Y?L zd-b%H)M?UM&?#g(Eo_LXumI)LF`I#kSkv8q?$dl(=Uis|aEt3ncbBiz6D=|RL$jZo z119HQQ)8DmeW~o9L?D7xYzHjNUYat}+t#pUjY^&d2RuZ0lRt)ugc=!w1g?b6-h1Ql z?pRYyR%CEsghI~$kydnn_niCx+Rq7*vS&)FzA(U)iYpXMj9Y`9cDje#K?+#uP5jUshC*9@|ei*l=OI8Ym+= zt@cwbDh3P=AwDyCDQhp7k_*#9l+riqy#k%kB$2fBdbQdFL)rK)Z&|O0US7vjUjxs^ zjDgU$ftFxEfMlhI1Z^hpp#e7ELm&c6kWOfzEA~=)cU^ZSB25)NH`l4OjNK1}XQFd5 zgMW<5Hqfl7KaSHPLEBXSavU7p>_}4B{Nu3hUEv-HU*Is>h8oRf_X7}x$?}5$BeT}@ zAYG=J$zDB1q*SNwrAXD3P9f4>?_Mk4-l{Qe^2Q;1Yo0x;dXoJ?Xk_4ml#3H3h*%XG zsDmKB);WQY4`JB6H$`I?EY29}<_>R=d))=2x`avZ!lD$WHXOV(S{dql$xZuEV0y4> z1XGf6wt@mQNHZi4?AqH-847%C;b3gr>T%30cd$z;66W(1W#*!N0h7~=22<)9Q`ohU zf;AjQJ#anHT629vNkrf~=8TP_J8P+-Y(;zP8v(=p^$JY~8K;A0Btu&`8q{h&jat7R zE~)Hakw`56Zl6w+PygW^x+k5gnXJe-JFz}iIB>xV454q)%=a)&@+b!>D0Qqw7Yd`o zEk|wUYCneAh7BL{9_TpMahkL6ZD+CPdr6ScnrC(OsI^ODQc{C?vL{vP#zpRXGU0;v z?%aL?gnxDrXJ*8OiyjCU-@HjH`-wI$C-=iwbq?!Eoihs&vodAnGmxfS#3mDH(tAnZ z4*gaWij$#ufZvbfb#*p605kY~N@qv)7mJbSH-xXP^M>I-On#I(-Gm58UDM}2d+uOf zs-JL3)E_KS$sZzCoNm1r?Es{T!It0No7S+yao^}n^g-J zh0zZhFuV6@YhNOfe)UeN!>H~<7uaK})&y?|>nl6VV7V7?A{u~R^f)}zG-9(}5utp2 zcSWEE!&4U5oX#a^*W~=BFwpDib++?q3UBY(&b@3n4tymR6l92@OmuQq|^x~V~Vy|a2Vr4fwjOORx?r+E^hqi#}wuEv_6cd150&THotv%eMI5gZZb_M1% zancZ@=;ONkx}7)*2>AR<2zx31b&5Oix0Gs8o^r}2gGbQJ-u>%8+Np&Cd;taR+}J%| z+(yaHr$%6-9qeE>61GPxnd(=nRR^vLO+WZY2miBP|I@brUrGT0);Zfh>u>+>`keo? z`TlqmYwiD+FV6z~b z&A&;_6=+snY1BtIE359Yt^NWTL5adC%pfmxuE(&s|7iZx?PE`<^QMtzC~BjHO@A z1&G>HgatbfL0{{PmIQejAnmTi{gkNR`-8`A4Fg*B%%m|h{i=e=bH5M${crl0yCr}D z^<#s|$b#z?9?}L@)zzoIv6AY2atqL%^??6@eLrx2rwLgR+@D?{KgaMIdJucG1Bz@v z$;LvgpTly28NuI{$_QnR5q{on&mG)X4X;ZyS>)s|>-^LEe_Bd6X;s>>zZc8z!04Tz#(O3Jqn*Lca-_d`~sK9^Aqv{qFfDIw^_kq9v zIlu3m|F_=wy*mC{NC9!>cj)+E5gs3EzQ%jSIGbS|>!(<%9akoV<~6z&aqG|p+~$(} zMq$*P{KKwSH?2kfN3D{-tF~7vLR7aEXyDDIU9#r~fPv5GL^5o7fgf7kpg04rfv5OpTYOR5UTWZ(F#Ob_cxZUo zHuD8=a<|Q3ZwNd$QYaC7FrNcaE&@$@xwOy0;Um&eD z*N&bcAsR3i)2lOqYIhWj zv=eet=YLv!#smI#D{qmvnnjwVsiw>QyBFw)3l%rUe3FYOtJ*e*CzcATN+}m_3*Tik z_#QA_FA1eZk8SqTPxQB-U*h$W@;fM7ZLov)scE*;HU=67xykS(8Knx*z~w95%MSIP zN21J@e;gTreEO#e9Tq%>t*ZbhGX`AzdAZUNWn<>m2|#3$hTdZxvI&3106-3Z7m{rM zb1~XOx^DwW56m%byhI^fPhy zUWahL>+f!ER0L)e8X3=MU+MLfAFKFo-NVgzm0;ieenD52<3MAydb`-M1jS=EX6? zf}9!k@~npjiDF&NQKPHxs1mJI|9&*Tj?FX5m<>fLpSX8uai@KvO>JQ)m)zziTNH55 z7uqQXy89*SS;tcmMXu~`3Z?o)CeE9LdjY61>tzd`S`=>&aC&ds;hcNlP%c3BZb10a ziw-Xg&#pcmi>R8q)iNz29uhw@<wnlI-G#e}GZ8Z<RcAO9L*S}jqaabm@a%WZttIov=(%T;!@V}Gq> zY3$Ri2H$p=Ahr@4ZSB?qWZKeTNhn&@|Y_<-xk zYyHD5T>Ggrr=C2TP2|d+$18RKqnpbkO^W_q5I%Z9sr7`_W1l)(oex$MUEBsTwaLeu zjlL{;w&#SL>+^Xo>;aAdj{}z+8~ld^@x5)_gw)~2FAyAR!5&g`hJs0CVyksWx?0AE_?R71TlM$NaQDn)=N zi1oWiciJ+_&YPUBdc!Q!=n5zeX6vmV92;Y!ha1-b~f_JGNQmj~R zITDt0b{pX|gK6#cCFx>1b=j02!m)Oo(&H~rSF>OE%;mbh3d|&vf9I5prb0b0j+E;rSeq%1fk-`Ay`iub6>x^*B6;xF(#bUgtgMc{lvXEk5MN3&QCp^I@^VM zIvca#3e2g#zR#+46QP%Pe4ZAHG^?+w9d=c5J61lltQ2qU+mmYJ>@G(V6!2F1A_y{+ z=5+Eiipym`S1;?KZjo+G;te0I9-Qu{EE(5TTvesHK-(S~(^%ece6Na8o}Ttsi}4+^ zAfg4}_NsJrE;8jx((K?S2kQqh2Zg0?MJK+WiMt)sD$ad^1iynhR_EE6hA>sk^|iB~ zu=CP-kCg#D!3d8sr3Wf|0MK5hvT=s>cJa^N6!FVkspeX*UicH%qvPuxX+Jw|9=J^9 zBFTs8DDSE*NvT&+8t}qpa9=p9kAKtM6h)2ir_?azljq6KC9%^i@tqy4=W<`)dv`r& zYQ;oL)zfIyVllaTw4)4w-$=dv3p&ak4%m3CBL(mz8X%zGbaX`BGPfpd(dT)ZcW_ST z?GOzvWxO%w%$1u)AhkC$4*{Kd=-3Lwg0jtgJ#!=yC z_aNDF7+IBjv0t8;G)@-hvpOgSrTr}ADX_@5(>fH>w~&{SI6l5S#HkoT^{*iF@S1)c zR_En?RM(!4c(^6<^s&8kTKiQ6F22I#L^cWin?3!aYqna!Och%glD)J5MvXs5rD}-4#{tL$NmtF(bfus~MS#RrFshXxiFuUzct-Ybi z=NX^*?9I(HJ4~TIL4d`f_b~gHz$}%%sv*l-F+pSI%kvuGKA7y zm)Y*JFJap20c^_$|2}cImkbe#q`xlQUuGbGu)!oRKSsHd|3FSMNp3&KEv)TR2l_pi(2U&3dh6&)BqV zU~o}dc-8lyOw6Q_Q9Ik#!G^fT^#ky8nj@RrfUU7wlygRGcR$^+f2S>l>5Tmaa>Zr= z0HQTE`tHnJ8`+7d`VGt!WCoCo(-CNaB>*W^KQr3Y%j&%AxT_PjysOip?SQv|8o`1f z%6sMh{LCK60XhKJ=C%TEYj%cA+HFrL9!9CD^mVIT?(d&n@k{MD=~#kUqok;F?HDlv zVt`>qX9qx_)?5a}^AB*8^zkJOp1Y0F)>em2`f&0{%`~Co^7W@lX`YBNCWqc>8~_?+ zueF$+TWKkZmZ3G%fz+4_cblq`x_fkLAz|V%@Ev1pdj+2@IjwM)P5ZqGPg4`Pa>wFL zaj=iB|GTj{w>I#%4S@TFV@q@-!zM&_jr9i@SA`q1#?j6BL!@1yNyy#ct+pr8a&1ZN z;FIHB>`@MeZAL5K2E874(z9E4aLYqZRCXc_5G!C^9MLgFP#1rJVBsz<>ggF)>JzVp ztbT}e6&%sICs>B(;4HQYfHi7tca``9BweR4^dnU^#;sAP^IA1>qd9r&)FbhH#!20C zkS@tq7r~Zpn}EZs`u9@wWX_46)mXEDa-!jeXr~hGmgHZcD(@=l&+|i5cE}c{P;y%H z;+KvpXJ$LB#{|2v{dQHCqYZA>ZeGCv2)D1NV5UoJ5b$0$< z3Q~r2TS|1`P&#W_V{e1_)JOBz4Kd<3%f2UZG(O2H1&FqG^ynE3UD@liaepY98%lgk zuj3u3jZQIifvYOn6u<6Qx@;(qm*d79Wtm-k*5=a>P*NOX@oL1TMzV|PXLPj}O=Byv zYP<@^*Y$@D@pa5fN_iPvuC<0+rt7}v+dE=2oI%YPZvRtsFD924Wx|HK3V{7@*Obw9 z-5uUDF2pt~<}R#X$0vP{pE&hGR3`pDvVCge^}Vp|qN@tBgEjVh@xm#$e!@)CR>>F3 zKjJEweND+zQlz0ifo%by1KHDOUGim~%#bx)BNSgQ{8Pxz|90wI|8H%}OkCw|{i&!% zNVMSAWr5C6EBgF+zG`^5bKpnbFi+fJRfZxWpK*Fb9n8DvrMB%=*ItWI9{BJgC{?=V zQjvP?r#tZjY)`!$9K1H0kuA*-X{yG`t2)&-)x!*31O8-76cnD*ogy1|89GtyYRMnP z6Ra;UO?_D-@oig%2y6KcpygWo!vJ`5MSob80>h5D#s^rxiVu-kLl9sw!s}5g_RH4_ z-Nud`d!6sGu4h8_7e+OeP?murDlo@?Q12=yuzVtrm!Ft-vWu5Kd7`#`J5yrsjfX17 z5>t6ZM|bxk!(eEw!K6si!Zu|&QzCK2LQgjIOUnYQe3ziZ;{&jivt6>-7G5rTAp)>70H}x zgY@6Se`ZkO+jxma{1C4fB)gN~b3jZs z4kQ}@P^Ft~6nnL3=5(k0$C`4_^UT|*soE-48!(@L-?S`s zEC^te#quG3frNi9=%{6(e48NBl$RFq-ljRzSDO?n(~HZvp2=Y(a|$80mACS=Ur|+7BV@ z9Tjmh+8Pg>>DkRq>Xg`(Sgm$bcBD7MBX>zkDD)x~9O|MfT|F#R;(9!Dba7-=>MSfW zoSbm(cxJ`s^e`&L_)cGiBr%ERJ}m_9?;2f=NTTlK58As z*CwCJYEaf8+bv`jnXr4yjrNv;js!T>A}yNJoRsfO#gR&^gLb#N#c9xt1EbGJ91FH6m@i7b0U zo<%qO?54)XDwb^GX17-@vse85#MQY^Fjj5)$#rCw^4>cKnNAJehr(n{T217m;+CUX zRka>{BU3d0SR$4eiKRK$QbMqlLGmYv$nc7aGgjyLQy1lF1xF_V?uDT)frDCVKhAlf zw$C~TOe~}cM`qDgI$F~765)AB|Goj|74->(N6fUSkf)NdsKliMqIkB``e$yseYCj} zi-A6>&H7lmhgnsgHJnKyv%REtNw8Vml#>oTD;={rk3P)sA`uQ+E?Bz-K*Seu{3xqp z?Y6sd=WXE0SKaFnOEqUhPJcXdvLQB*UxGFE6up4*W8wk@{Qt1`oA!Jy+i0#K)Q4iM5HI6VL?LN>v_-2 z+3!1Zo^w9z*>m>Z^Zx=fl(pbj?sDDteO+z7%v4Qc%LEEC3YA{Bj_Ndt@`|aRySv|< zocwm+1v61K@r0$|y%SE+l$!`^CosNJAo;d0@|4piNFp_OjZI`ttBz3 ztA?j!+Sq=Wk85uh>MT!p*zeMTxG-Uff3tr@F5c;CebQRD`j%hlwTDX5^f@JNZ?^B7 zTXLm-HPR5OWsE}&I&qEdpfph9i`P;&Z5-{USAwfNxXvTujitZ%J&>b6>e9VK}ATqup}@dkYAX zu~?^xHkrQ6j_xpeyKRQ`-TuQhmf>jr^VZ!1pFm1+WXOf{wmo@6qRH93RYRoHx#S<4(_JB-v z#8F+IRLVQi>f1vF=Iga%aE|%C;{dD48Wxw!D=V{byr>d)=_QxBtf=K~JL z6d$Le4lJe`3pEW1Eneg-z^xEz1Aq>V`EiNwkK|h|$#)|xdF#fzh`qkDUAIEd>Qvm5 z3Ta)+@{jrhi$$~g1TD?5?c#ASI8Db~qcr$_SK~tL-7{u?^51w8H+1k&Oq9cLtx)N! z9YSmcmVk7_&(LHxb2%%CJF!KbMV+64n}Vg&b=Pu;hhq*xMPm5cvXJ|3QxToT;XPwr z7M~mP-OcPS@7=!p`fY&kqSffHNs3nThvGh}GrozJG>MJZ^eWl}g?geDDKQuW;#5}N zP{?UsQ5T0H?&c>(8sSXlZF=vJP34oD=|9l?idfza+DYPXD0{S3Lk5J?*0gx;S7ZHn zS;6>Ze|@5>f=>8gk7oCeBt3b4GJp7AI@i|?q4PmT*1@%n_6Kz%fdQ>tB*v&_VRVSc zr@@tAVp`ebKsB1M*VSw<&eU=vvhg6V!>zgSwX>Et%<72V5X0kGBuC?&SBTF>j`YTb zl_60YV<$u}lq|Y08wh-cX zqi|d}_vFZ0p4p{{=4YSnls`>3dQ6u18p=M_tdt$BGSJq8N#*1js-99R$kSb6XP^cF z*e`XRrM_M2PAw(&3+vNQ9e1+Nr^pau>tqi6)pPomI%m`F)sdp(|3jDgrQJI4tOW4Y zBW@4pU(F9GT3qisp%vdLGFjJ{{(V;zl9{mf*-uC)U09MyyG|}-`$IPao389RKbaZlg;sj+)_MqDT6npO96o~ zz}(4|HCeJ9rOJMBlz91#M!IDCu{M>n+U-e&7<~j=%~sF=u(3$kUrtW&mK9Ci*a&0W zQGF1}+?@1H)zVTZ)sXJQoug(K2^pD>%#VM2)YQ%@g2YViSm-5B7%{qK=Oal3oXnpu zmu7u9zWlT5G#+w7+&&iBCm+J1k``{zwiOnDA6ko)p+X+u+0S|$9VbSmyYs-dF>D(= z_EDkEvJ=;%gCE*FH|&?>D--KcSFQlrt51`wM!lUBYU@r%H(aGcPv0NYe8;VMvun{Cc|OF`n=))|IPj#d1N*rVp0}6T?daUKC<(0O zJ0Q-E{)uOg;*~Dm>}PRpU3fwU%=RejaYsF}WpV5pv0LeZAbcmQp+25vY>lGe$4ia(NXJDbRj~B^21fxKM6*>JAVcOvv7tswB$yl-x`17+=GDb=8 zS?E%S%D1^s*B1uLKYo>+;*u69%Gu&Or$e3L-kBT%>z}jemzqlc`Ri#8roPJgL8zf8 z8(+m6a@PFLei76$xWPAkJ=Iic?3>@R2f^dP1D0D2pHf?o8yA|6Flwl82S-yC%cU@U zUHF4!Gg52e#f?JG6=~Mem+=8Vq0nEUAH%taRTN*kMZ{=&5UL2@!4Xan4+rEI$1O7` zT_dukHGlT)^{~e|!Iio)u|f$6FV)Mx8@Ni{_>uhdUq-S3z}ZZ1{RRkAHQIc*=6(+e zn`zIhhN^cJBKi2mSH#nP(!_`-dr4q1uMi)`qbmD=^m4YRm2~^d`~C--4BjQ35;-4F zi}s6G2pfxafeY^QX)^$x({3ARmhJCl{3k7avSwTO3C@jE1NC)d`uZmo$u9MZ4AoCp zGc#)9OwmbOi6H*4+OGReu(gOod)yjeM=IZah{ zr&N3N?eHizciN?K^rQG8t&9JHa^T+2?xoIe3b<5CNiPj-Y_kDb>94}CZNAd(7j^`* zm}m?~v)B9equ}C|U6#3aw_>{uGbL>Jj%7maUaXnPwqexRzzIG^;WL~1+W6Ik{M50? zGb&JBx1C?x(^=TQx)t73(>b~2?h?;@^FjN@^!O)v55liq-*G*bo+%ziS3$3$zwP4L zsTZ&Qr91R+df`*YT+mkcq*v=(;;k{A^NGTweQxuw_c-63>=h{}Rrub~<6mfH9`CTN z6^hQdUYm*@M7_=RAf38FQb}A(Zok%(ZTbTHek3NywI1T$@G@1Phf65$mET_73BE}B zBCZ*rMEWBVeN;Yp7?)I~gxJ~(9) zbFNwK3!-TmWK>hi_Y^anP!i+~XU>q}Hl*=L@6$g>f7pyqQY*7Co~$|M?NH7>4L|Mc zjgRAwnfo<;WIN9J{Mu)um`~rYFP`&HQs@>N>>7Q2y>&{(yb?L}WZb@E)K0&+b$h|H ztcxSXS4oT(9=^5WQK&V|C$Pq~yDEjH1>f`&4sK*!W+i zo9IrbO8}a5a->H@Ce^Abt-E5*(c|Y2g`eB0Y7uj~Rrk}RYwmbe|G~a*&Jj@hGu$o}=?q&C~~BbH061U5nJFc9!;7r`yvLv+q#XMp43c z>ok#6Q$8Tduo<(h5lXtHjFSH6ACxf^E`Z6We?N2dOi8aD423j;^K`s4+bfr$s)0}G|Q-b2%? z1^R{iO4HHJO2lNx@jr=T1gi-AF8BO0B1_Yvu-lhCmbq`Qc`vc8S2a}JCGa#o)Ykk( zaLCaeBP?pdA6UEDR5jHsAsIny%g%}XZP7J;jQ#pu`MTtfHPzl$uT$-f*0D4JkE2?Q zO6NNDK~PYU!vYkS=QI1~<8L{Nn3QtvbTbBAo5slH(^@FE|3h zkW=3se(9KoUGe#t`jZA%HMn~9rFfTs5~1H@9A!=_+j9{9j>;=zmae62SfV_#Hi6lAib9B~!2be(3f9WGcP>Zy9v| zqco<=MfX4Y+44U(uT0MVSKQ6ZUmg>U{$V(d-i)CIRoN^Gg9x~!@n5eB^zuMRTQ?0!$`#;I0+Uet6v_{9lx5HCB%GJ1O!fZ4rIlN=y!FDOmi{AxGfS5doI-c=~+)#zC+;ed$N{ zI(bFI>T=OXU;*(z-2%U~$G30y{=c35265;=SL+|M@{dXV$DRD+O8-v}Be=i*g6s*B zc#qKnzW>S9R0b~G-W$9-Dd8=$+C9{sazoTxB=?UeN0mgsqwt@9A6QL1F(~`TdHmx% z{&61vIFEmv$N%Zh<9~AgZ7o>@cFloY?BEDh31%47toXkZ_^AK~hYgXd)s10Ld({sw zUS*w8lU%pvtKR8PGj@MGs>{{${}-XrKkxnDPXXeeJ^N?R{zuM$uBKC1!ne>=ou7IZ zUt?<nuAg0w7OztYdc z4*JH!_yR!^=Tj?zOUzJ~B`O3grwjsE3`MVtZpK6})WZ|5`L1RgT{9F!NR-V{jB`SH}PQ;yrHc+TUx)Igrl z@SQJA;uk`m1lQWf5y8>yPW9-X-Is8-Rw)m(fTq&t^~`H!g`egiGyB@(bL^u&c{Ohb z>LGGR4aly|-b<~;fG$NEX$KgS%zJIep-{k6_QXzJ*fYIvP)7Hs{8OR{sTWcS6VYb- z%6u+mD@oOB;^WrT{+D(h-zfqxZom#6vk$1tad?;mjm+0Wm7}s>>K$o3xxuL@SQpbT z>MNa)Ta#bt(1M8$Vy+LbF1Oc=;q$v)CF z?nRNKHerd?6CRQZzX-LB6IlVr%YbSc6@=PzAEXe-|gY9!>q zn+O&WY%9wrKG#2 z8l>7{^n>LQ2qK_+dPU7YFbq+l!L^p;Z$gsmf=4ehPX#V$^guO;2QUAy zYKMQf+f<)yc~^HU=e=H~dgfa4YY_ytPcCwiVhIyx&K3^S)H5SGpY z(;cImxvV7RG{VC9g%l-LL9@8Mg)9^PTPX@xM2UKc(znIMUc&MOGMON)p@GP@UCX_Z z(iJEF^(%so4rH>YN6Jz75C?cnJoN!7&4ifQ!48E*gqn zzbGpHDQ;ORqQYPywRb1J&^h8xL$3RxjdN_y*kwCwkXPW$`wYp-=Z3$ebB!{rluS0( zen5J#@k{)g?8H4|Up!{}FC88ppDT%*+TK$1Wk8@iz}}vpkLoi$%YYy0&u^eecQ~IL zEM${>XL&SYP-5tIy$?m-ZU4C@0 zu*Pz0Ix%3m_qmTtbbF%ihSt{RtcOvH;&oP`!rz}4(TS(6!*gL3BirJd z+LZf9_fcdR;rOYRSg(^P#sRp4v@Yo7O^>B;Fv&nybzW`kPD|V z0IL)Uq$UyDCHRc8z%Vs#g7Y$xHL<_f;7+(H_D1Z4xLY1$%H-{G7O0~7ZX(VL&g8i$ z09+@^ft@i|uyly$zZyXu4-VQ?hheE1o2++9y4{SjBK(SkE!#LIOYgjy$6JjBk&pP1 zLtCR>9Ql^>U%K(g952)?jRoi?3~AsW=Q4uVD-O#0-HW52#M#k$eu^QdXrs1Ee{~BP zA>(Q%|*M|nkcR342Ut0g|_)m&a+2g7=?Hp-M`qc8wps&8cfhAD&3 z>4N|154UcdPQ4}tS%tr@OF}K6nNX*|p?%*dq_aviO=uk|PAdJGA5!Xspi#Q_!y4U( z8Ww!AZzZHGf1T?rifB+~6XeR=<;|1ByD<{bQ6h{JRL(E9s3Ca8U%Fm!7jgWKX%xAx z#>j=A@xI=d{cIP1637MvD`?kYgiGH8iZGEj*qt5HhGp=eX-&MJLi&1tuO(&lrN3NBbT>zLZ%x2T;yU?_(hUO_A{!!QTzwk3zj|o zbI!E+IIYctG_nBzCoZ+&z&|4bX}t_#m_sP<_d@x{YFeJoj@)f&cu^)%ZF`-sG1uyr zh4gb3H@<%HM>&@68&W=7M{zhA)Wr>WO=bjo`8}GM#wNGz!)r?F&MiPS76K2zysqoB zhJnO8{Z*l?x-+#tiv{nNf5QqbH1xe>VwvaF^IYTP^WMEU&?7LIniz->aF>x5#1L{C z&_Y5x9G7J3*AscW&6pAho-6^60E^H=i-B#yu&KDq)!s94M(IX2E(&zeC8N{yoB3ru! zt%Fa9T5tGvI-crjy#!i6Ln_xOO$4COxHIEE1JCgLUIfUNY7o3iYG$qqJM;4bk1;TUmFCf>R42VmDW>&!K>D2}TUs{_0YfTyEy@&atgM;ZM3~$Dp8&=o4yq7Lm_FMKp zvQ!_Y7A;Lh`7g{L&Jm(MQf!cr;}6hN2sNDNXCS!`79^>@0TXMGR&feZ;Nq2d4+IU)uhxBjg~GNYufj+eQF6c)KGb-Yp7-=N$`T zKe-VS@(S%fzi^o5oulGYpQ;Cudhz_mO1^ZjPp$Lx4-eF=KwZKX^uh+}gzu~lJlcpv z%bq%dcbJ}`idB&qie=x|op(roGbEJn5}4J=tH($|hE=}KyyVt}ykg_oAFev29k#fE7VSwaiz&r<n7RGgt z#DK!3@r9t^#R36-(g_hfZqZy`H&*%~lHmPH$D4m|WuBl}rOd#-F#n@Q{5=l)P3ABH z)aj~=P(lNek{!EeJe;nM2Elkd>=dy@?zPz^@{2Q9nlf1x&vvgcKG|yv!*9a9rUx*U zkalKMaBnJ>!ex=#!~A0yec8Rzw{u7$7 zm_k(V8XWQ(0DtgUu*aKd$R3A2gHi{jB6w;j+Q8cz&5i1i*t|*KvJ(0~3Er+A|0r%8i`Zs1ltSo2E++fmhK0- zHuGikhe>oDd49v;w-0wa;MG*aic6HDAl?vAzA>C@NXVL9ACwAbi$7ySUj6~w}9oldbVzA5S zbCTe*u#Gbkrz?AGPO37dOf~cNC__YWZoA+2+u=2q2fcE9z<$^IrJS&pkuzQ)o0lTB zN;mZq>1!I_+dtCFP+V+wlR0@j{(JJE4R#&?=Ufx>sVArJ$KNDjsG`BjvZoJjkJ@i2 z7jun@r`~el;_P^lrNY`E7NWDy9*?ELP~TwSwxM0M^p`<7LMB3RnrQ`TDIusyB3UPD zs{dnvzqenB)#?xT6tW!M>b<(f)86RZ*5|u`NH@uDZ|N>*Wp-#iA>>r1QXixWc8DeJ z3BRC8y(=u{B2K$_e~nO+(~1EZXcmqWwq(W5&CVfw;Zb}O_oc4p_!YtE=ur_?7Bf!; z^n;P16gQ*|sh~6Y1r!uU=nT`7UD%ptT_?p?-8b;_sU_`;Kp_RhCS#06K2uF z4qQiqzgFI+E6#InPtMp9l^l{J-TGzIJv?^ z+$F~x=fOOeB4}3t{IaklI5YABC9r{>yS^R_6^p-DKV5U{^0%+0?B_a4;@X9FPCdz? zv>U}I%Pl=|+<8D7aZ)C_MdFsraJ8spf-kRotMFvaE~mTltS~4K*69r`P{|Bzb!;?f z{~R{f({z_J(~PR4ae(71MS@IM^s6LP^a`jF<&V(Ew*jVHwNKG8nzv8LFwb% z{D76%>j2SfUvAi7zv`*=6}V}H+}a#OD@?R1P@Mqd73_D@6>|JCCQgKdlvIvkshOGW z)FDaaZ*6jXzb&96WUk;%|C%%5q<-lWTxD1n8AH?=Ik{jrBvJDf%03|;<^Ha?XHd4C z<)}x6s6ieqPTN(M;`k>~Y0()50#_U{RPV3nhe#Y#1@QY-pCHS zq&G;uQstP;+rOgGmqz9$Nyaogf|)}pU{8?a@j6P5rD}(OIzOeRR;{T!8)4b`W0wwH zB;I;Ted%AmeCoM$Kg?t4@Q(GCHaNw7R7ZQk8UU#p&ZFF?G8`v2Um#*=dF+ghFa z3pPjeTy*d(f0?#@jxO47jjwO_UgoagAMWF>7Iw$ua;P}+0dZtoiEAgnNV*jegbV{3xxwh}m!WZ!vn z%3$s$7+wTD`1HuCrymIj;RYl2Rv0yZWBI_h2!bhz%745?4=^Qe(s=Z#q5?g6Up%wX zh?7At=Yo3z z<=t>%o1m#I0?xxgUOr;ewz_-@SM6inANg@F?(n2GGcs*JzRz^%-H($nBdQt!#|(7p zytN=^#wudD)+-!Zs_UNW<#Eqnk#|PAt~@+drf03j|MPP}&p>oXjHZ{rRzW+K=l?p3 z>ar8BhB(s^GY=l}8~iwTLo|-+M%3@!o&8`6T+D3>WADVCLu48Vpx)aPz>#^bi^h5r z%moZ)r+)r=lf2W$p324D){UC>JbElJ9jT-xvi>7!_Grw=Bm3g1qP|E&b8Y^1)jp*| zXAg=Dm9PBx!=>X?8I%I;o3hm&U`W-zn#LGkGTyoCe!!p-(IQ|aocYN!{K42vBIUKJ zbx_Xpk=y}|>|^KSkDAUTP<8Tb70InL2aPw4LP|VfNhBES5CV^08VT~~KEL6OkcbVE znt9lLGTcOZEjbxdF%|1Uge*Hn6UFdO@c{%=W?)4((`Nc&)p$veQK|A2lex!^k3Un+ zOxM+AmnLdEVr2~N1Bq-^0KK zmQU3piQCn-5YU3|{rN^@M7D|-v#XV?;*-Z$UIkM-r4uLLg8802Si?yp?;d~AdWE4@yR3u|p(Hl)LHX~dS-tx>(>q~@7r+rKBcT0KDO)~E7X@lv#rmw-Wh ztjK1&6Nj=oEJ?K9x|$^M=EMV}LTK)j56^!@46B^$O$nS`*%+xtKiWOi4{0-{NUBTH z-r}*AQ~4A3i9V&u$!F&`NHe#muEQ2m@4x(zt5099o?IGgy#>-MUfuzi{?fUufobnJ zQfZs}D^1L@0?@!q%gu~;V~D0;x|M0g#HsbXJgHovb8x<`;}ZQx@DN7~@OR?$=2=2z- zPV43B6TTJqsxpc$;dz%^Ly1N5)z4+rS;!qEs8bByfDjr71gL?WZ{Q076+TF@k)Bv=&=q?6R(&-;?J50RJO= zxjQK6%Mf#Zvmf{2!S02+%M#rDM^}_qF%^*R9#X+pRz4uu)A$oy8-eCa`!k3-Lz2Wq zVu>`{F(y6^@<9ojvaiONVcY4WAqLpqHq38VJgGK@qrA6*r1sIy&k zwGolld%%nNDIXb7qkUoS&FFZ~QV)!?*^pFq1DJ&^=kCEbGJ-?Ls1|Zbzw2w#Yg08{ zX1UqmUfh-sZFPjsr%K;Ti;VFu6mp|-st`a5v>E+d02oi4rS!zEE_$lqh?&Zf$?Ph- z+IzZ-G}kpjR&$gKxL68L|FH30=l+02`apaCcXlkHt{CuT)a5v+_`7HVGom( z@5HRIoLLRshF9SjVLwKp+<)o5V?LwT#e)tRNtAmNO1NZ5tw}|(yET+|QVwu@aQzdj(a2q}H^D;&b94rW5WG*0%&qqQhl-5(4y z+QY6IGP@|!O1YHhhB@>&{ar&S_^|-hsF`AN@o%$Jem1bo0 zX0qwi7j28}fs|M6uV0~|&DK|w-&1d*zgv)l0mw4$d?_|M)1D+mgJ$b|>d61Vtk@U# zsNqfKi{|e81Gl&N96pT)H(2PWQy)*!q}h{kV8(@XB@UX8HVeK-J{Xg2hOM-?^-g7P z@5YHGZCqZd2M06)L!D2Wk1SM7wKg8NBFzZCjOg}j$N&QS86e(*Sk~ejS|B5kk&Kqe z|Ei6BV8tx{xa5SncKZ(w=~XPB2UHyhBPo#Y5#igc%P=N)4Et|%jIvm}dS?5vxx06X z(&-@g3(d8-B*RCE?|6a}Q_3B7WS=j2p~k*ZPm`wGbBvakdXnRx!aBbwy{v6o3iaP%e8ABdNJ>iCcb$x=sp70&kQ2CQ6B9f?Z*CK@^eCqf0l;7w1DgU!|MM zTRobU_fvS01{Yk=S(a6xomIhOBeSiy7f4K~v;E6DUmOsra*1~z*G%w)I@>EXIM~16 zTZxH@^F6G3cTW1Z3fXBK<_3>kVj1c9mvAt@B05HQ*KLx%g5-lK^gLY;UT#m`ACASt z!wUWR;;)0}FV4A*V0iz4FcKILhp+xx;4?E8jz;M|G~O7nrwKlzaY3lyVDmPZ7%)XsFXD(P z$5k{QP56C^O3sh1rPagSM?3zj+r6Y8gWx z7iYeYdpi{UHcO%pI%+Loh{rn`*)&FN5N3O(jIth9RHbg)nC>FLLK`s7*ZDF()6wcW@k%PzPT%r! z-pwSJ)8)M|Atd-i)JwRtIA33GbcaS6!ib{ZgF2T<5$no;I8S&(y+$h$A<8`~s{PAx z6m;9-NnnU#LG_)6d90FT584bLf28#R`aFgBJ|(r15*3wMUzh54FFA%wehI2|*3+kp zIg=Q>y(PP5c{{LkbB3UnJQ}Y-(yB|Kie^XQjx%{MA&jMy7_AY_mNKpRIvQ~wih{h-7bIrc>G~`?O!o2xi>{`c| zPBlyAk8|&Dw)LTQj`L{{bca51QqvXO99&NrBkg>X2Rj+k-r~GYym9Yr2=dLGU zzc$^&*-^hwXiDO};XT=su}W}Obo-4O*m?IwH!`$1q@Y`N3iFe-GL)k-Gu{tho08IA z;xRj|n6vBrdlzI`14-Z()k#{rV3iPgnxxW^h&HX@T-e}M;W@}w+^v_(q#uL21owLv zm2h1d3|m;zv0jthdiw!kPk?mE+V?C90o@eCk$~kKA7ce;BDNdG-Sy2dU{$`^V)p&R zU>-FqSJyy(A?sfYu8L{j#$>BOkmd#=%{-nkj441oBhM1iTPsRsx!}R=oE=X82zPMM zxb9jHdz>Slz%5FDiqYrU^crIVR1|p^$e{>OB}t}TSb@6ahwxbwR#>N9`!I#DzG{dUt4J7 zTZA;2T;ulcjl9X9b5Cs5OIz(q_|QB;9tZUd*`t@rd$($c&kUib=+Q$R9G zQ=eiFDBP^}*67SO?Jm_Z8ZR~fspl^H!7WaaLxG>^-dzY!QQm>2B*LTQY}(U-6rMdQ}TQZG-? zgxx=ydR*1i4kKN9)>q=a&CRr!{8-zHbppqCfc^THE-{x5h$X%y%T6>akv@X#V2P5; zmkJ5-_9N#^i8^;1#{XzAE#5u7s>Juh@O4g%m@XgP<;%_3g{4~SP6!VY41K}_fT|7{ zJHOAL%``8xhs)lfn3;jAZGy&|=lstHqE?=K(LfQcjM4+^cNS(2dnsB-eV~AMJC@{m zfQR?MXEwV;U_e^2P7sKnHUg=$3k8t{(!#N+v*$0}*+YIXG(2JO2L?xd#ms_6^T2eD zoyNfqmVJDWlRM$F@R>Q<5IMOVqB5|wANuUTdtvx`uGd%8rFp~}`Q0}Z8}&NTZL50) z5^;oy(lmAc0teE%1q3`AL!y`KSj3Zh?rY~5_MD_2?m7&m4{Q~o{wpE;OGjhQq?m1B zh~-F+Wh|ht1YvhNPV30t{qFt8_qVI>r9a9l7~UOHm2_wQh?36`%yjR9qheScDWna@ zk8};oGb9$Q;HX!=cssxLG(&fAyMaue?h0Icb1E#YR&8b1aL>?M^vHZtd0bRa7mUS#Y?D{UA=X$(Kv9~byQO%(#RhM#W3ZXfmbK!jV*xMwVi6KPeX zw6-I?7B7~m13T~Cc$vJ0@VlS*7L{Mi*CJ;1y!Ljjh?hq zqjlWO(<)1HY>9rI>L|^VVpAO_aBa>&CslvK?euoYp@3mAXiZ@@P$opY4Jl;H6_n}D zz1U3qMq;R0Zjm;d*lGThJW`)Ke8n{^=49F0Bh|Zf!*r+Oes2)jBcMuv{d-i82-mm_ zR0^TvFxt$F_tr3)4oZY|ku#NpWmzk43V2L*h(3&_uU#8!>Af@Yd%>$SL!c+|i@oQp z?w>}78Mv)Um39E<7nf8ObIZxs;d~rtMB};w-B&) zs%sw4U^UXmrH=g+oh~n?PgS;}D->PcW8&WD?Lp5;;@7&2Ey#Yv-gZd*Z1bYHZ|qZf zMADLRwE4L4P#WZ_&CgJ=#7BuaujM(~{4?^)Ri==~ICKU3C}ZO7?tYl`%* z*@O0xIFQ<{hCKnz4ZlmIWuXZR?496s%anGX^~v+_kSVX`*=2ISSuXn6uT6p8bx6ro zX^+*x)?Apk8^;b?ZgM(FY)S4$$Dm}0Ae5?9>@}MaOMq|=h8E294XGO7pVJ%Qb;>W6 zKg3;T9jnDHXT$d5M%dBcL(KltjZU_shH#ZVn3bg{3~jnc(i;yh z!G^M!K8_d?E`bZzKJDAm+~Yn`xKBsV{DjRv?kKGTRs*L>;5Y+eETA7$K?V{>$T#&_5}^+#e1@FfXq~wq8V{fg0kXfmC$nP!esv+gwnpoq z3z51Q+-Pg3a7yO!SGveL-+LR^bN#^w5qsc&f|jb`G@&KhTK-l2))j{Z_G+)^Ko)*U z81WHr*^@?GBgj#umN=V9&30hea$2A+BW@;;qSwGJF-{^n5Bd^WYR%5OMi*`-?$8A(w=uyEuNujGt1r<#Dr9!!|2*g8Xrpx>I`lir-OZM6Eq*YiZSP%8l@& zNl4ui4^on((oH)vUIOKzg5ESztE3Zosc{ml4A)MzjxEra=Y%VJ zfsq~Tu`qjE<5Ue8PBxISTNI|UW(;7_cr!HDj(4uiFAw^$uc;*}XTHuLLgaIP@i~8fYOQ&%6#Z@1s^Nfr%bUdB0|EQ9-s0Fa z!&bJPDbKna3&_!PyR<=8+}l-8m216}db9KXLhd-JgcV8gG&qQ>vr+|DurX*NNQ00B z7pn1{HCi!wOGsuOB3w~ifZYKiH0}H;tWBn8n;(}@jQrYN;F&M#O2eipe95N~I%Fv# zy#1J$kQ@OO1&TW}GA%p{@i0#N4bO0|na}d9FIAHj=$J(}POM?S9$~lsP{hFZ(BF<; zW?kCaC&!l>btDr!nhn9l{8@ri%g}Xi{VLHbVK^@?>|YmGJ@z^##9to+Rv$_V!3d}P z_$3m((t_H*t4xEA25I@)OkB#?!H+3s8@dK-d`bx~)cOvZ-D6w8pCsK5=b>?U(A0rv zrRWZAy#2a_k^OGPkoQkTb48#3Kr2er%-;E@z@=&5&{edGFd~lZMs#b(GKIDZ5GA{E zOdM#-XCo}g~%oQ#@P9G z#ImO8coP;J?B9A{3WbHR4A-$#K*e1A}HF^iP)0rKY>E9F;J|O+2+X^DeZ!8fo@u2O5^CC6J zpgfyUsfexIb3~uS{BCES=uaFar7~tk$<@Xc%p59o>RV1v<;&PH-ww@(^MTrAq zByPp8hygTcaCsbcwmGO%W;HL@c{7^^`BH5K{TzFPncC=3RkSG(tP(+qT}r0FsN%$T zjc(DJ&W~2QG3UxYn^vq(U8ptnJa6)s?)pTT_Nk`|QVfTSvPIJU=NVo4(aRW`;&gKe zcqj&mxmAQ@jtwVS64%q*Jm0V{8wY!i^A+|5E>@{}k5m(1vE(u^-d={?#~eanUda?0 zfoNL7(|lsc@@}^;NE}5jsV15}uNDMTjisu(#GMNi%f4K$3C-(Y#HCUlhw48lnutl1 zGu+U1P?s_dA%oC%%03wc^DEoGpnvs#39inbd5!(x_A4C~0u*$?s!hA#fV5;6E&|6! z(?WOT6YHXpa?V9<7~;$Iqn?BGhinaRq!X$mD;Y>ejQCsiP^V5vI#;xr$swf`9CJ;lOu*z1aP)5LL7RWh|9| zWjX$UZI+`L(k7QGbfXhcf{3~f8vm50HbI)zs54h-{LyF))A@_#-rde=2tAG4jWAWQ z3hwp4bmhE}fr$Y$rpy%_gCldXH^**I_HZs?;K)97CFE^?zy3{rs z_)V)-gU7;aBr?D&K>wcjIs+v=CAf@^ltJS~NI&zO!_>Z&1bN}A4`Cknj{99)6OAek zZ}-Ww+_I|M&RVgDvCcEZ;I9?bFoM#3GrV=Fv0sp8i&w zabfSTCkPFr;}VdYaD)MAb&P2?1RvQdG69l2T9Kd1#mXopavc3!8&K#CkZ~X55!cf` zEj)(oig+bnmJ?Z8@)Ybpj-x4&mSSO#d|%QST1ootS*V`y`BkYzeh#oZn`Xi!OKbm51 zoHW)~?8Nt7!QNmv?p{PQ$Fgvq;RP?bP5UHk+@J4L$EknmRxd+OfaL_EZ?FSFr$cZv z8GsihRMq47W~I_!P?-rT1TB|T{YzxiU_zoM*CyClyuv3Y%2k?Q;;At1HW4->M>CID zhENn+PW`3xubBtg;^AG`ISBdlH17&SL?KcdYy|)A8@S87{&`*Cz#5m%;%t6_FYi`| z`rf_mdx8h5W6>a*1GZ@%=g_1;AFiLs@OEYQ993h&T7R7PcJn(& z!D3r{UDs&W=+(m$4pj+3szTErP`&WI_}y>_S-Sn$t1Xa%Nqovk}yWy-u)3V{_{c-JMOr9!EF%7X4dKG3e@(UcNJ4f8h4GrZFm{$kR$)YdS{G+uJ3ZRla}4 zc31db3fCj+TP$7od0hE5Q{ZVN>ZRiXSJEtM9!E@`PfozhUAzU{8Q&U-`l`3I&(TE%pV3AU_U#$f>EnbNGxNc;&qdkuKEti=yX9pr)>_oqK$>z9 zsbd-|(30FqMTQB$ZRK3Jp0-lAOj&kLgn0;8B!Q#(D*cC+HY&`UwdEI{smkNpSgTq&-c9d{XF;c+%!|| z&d{L=szt?w$E4rt!iDc@U;6gGin|=Muj!17P=&bSo`M#m2Jg+AYqEBW>&uWv!%Q=Q zC*9H3#PS_EO5zM(8|v}&p50j2X{yWEh4)m&`u`Q^eK8|b=c)o)i2!T^c#ifgW=LUPB-u1dsFk zRZPhM$mh~zQJK_Jd-H9$?hDjL%R}2|hrObWU5qCNgpzm@A2h&Eds{FFiSE0ga#jyt zKCO;Mk$3muGy=|*0p*LCzKiYuIJQ?2j+3cWi_EFN&z*5~89uug+gqZ6oLbcD;<@}!vsFICY$XLpBAyu9b zuq=jCgIrh%d|6YC^Fw-A1j-r&jZ>lyzQaIsc_u24mQgnORDv}vJ|&^OC^^ocg?6Um zhdCi1$r6wVUp5!70?iM&=2-G48=p^MedIIIM`yc{;g^xH8I1Z)o%^5G_^l_HUByAb z?qX3EEY_N127znw4p90Hrn?uH^L#dI^hmZ9uJeRim!bNxXQgRNYoMF@m}_8hI~-N3 zh^UvDIR3U<`~81|T(Nnv$*nVKCbXhf?m1rgW+lZ}7v4dsAK_`+OG2_e>v?9mmqCeS z!R8avEx9W8F0Mzq>CL^Tv&q@>b`g`CFL)*l;xP zyVaohh|;WPF(&rDvXzpE#*?Rn?Q8JyifJU%f@|%kvU@X^K=XzOJ$N+fvjKS1Am?WH zoW{wiizwUKR~h7+xo+E~h$r-i6*%2Mk+qx%XW1<{n<04e*jSnL#Gj_E4H@i^XD^Oy z^>VrMJaZJ0ZFO3@=(xx;1CN~zH7ojDJuYwH)3|mgNq*WRnhJ_`Z5wL@iQU>Xu)0y) zk0}vCkg}fXi!$()`orz*-^fQpVKU zsnUR+R1uS}^BkZo7NZ+^6curL6;kWW@Qr3>GzsbK@!hH;pNOcx@0hkF%FW_zpowVN zx|w19W*YfzmFpC!xH$4ZjJTif)yM+04|gMA57V2A)(VO-)t*NvhuPb)m)nXJ!jzr! zzJk8dj^vQCFMU_%>w3iB>u#&}egM=_>M~^*C6V%*YiDLg)iYRMQn}lG_`6xHX$heA zGw#XY$CZrz3A9dYpxbg6iw(R}qVDT2e=Y*HC9OjPzCCC!I137JQ36fE>NL+by=2sgLQW4YL`j4v2;g(tne6D>?)9jU_GFk&^AYD+vfzUDC zCLVBTj)u=7LX9$U#PY-4dP!T(aZd*|_XNkCcbL=WJym$v70HwfKDGX`y2ejMxq{zE z*>aO8jI(8Nil=J>N_i(lNQiKYLXBZw9!c!I(ckb!82(sNwaJsGW{=NikS|+>x&GO>dF4P zZo|$d(gtLC=MqjQUubEL(Vj4oz8r)-9Bw$TihJH97JB-+a|SSwjgtFVaOp#yeXz!{ zAwZaT+e*HX3FDNy#k~!yjsB~sdeN3ZJN*>Ke)2^&ViCilIzlQkdb*Zptr6%UO)w{skJDw(b-BYvLMTdMJ#9PZ z?v%A;S$xDPS6N&RQofk@XNs4P*I&n?k7+tB8wO{jmuQyeIko`vqHy_*vKX1(4@hG!36XOJ{Cky3k{dRU(|GL@arv(%qBqYHujKZaVQtv#aI} z>~(A1m?X_7nj3C(;$k@sdlzp86*5lZ?4N#fKg7xJ{@hfWjMXCu=q>owKa=mg_WDGXzKWPEH{Gr<#I2 zjovO?DwnsjtvckQah)j0mIPxe%wHQzcN6;4he??JuSw zpwlQ@2IYmd_Ai(}L^;p@@Udc59n+Z=aH%acz#&aeV7w(y^T}i>Py{4X>SlYoiHSQh z!YK6OyESCFn&xfGu#J2$(F#q+7wnKl~-Z)c=km-Cw5Ubm}u{#(hz(l;m@mQ(we1Diw; zhQ1#WKb&!n)A=?N0a~BGgk`_;ZjPhfdmn#z@x+_1Tg}ta1#3i)lB7`o3&2$W{tvM^mt;zU7;R8)7;GfZUCyU%8O zKT@uUo4Bx;{Pb%4FtuK#s*LJp+Q57;*BO$x?QgHM#9fJ>yDlkNpDmL*zGq~(SPZ}O zn}-P4EIzOuXUO_AwaJNlAvv$6@Egm%))7BG{;)gRywt$q?lQIFtiTF@^y2Cn_wpJZLXrtI{e zhXFY3mWtQd=%WKM``D^bx2}07GOup3F_&|!WG?XXp^eNyLF|_S<8Rsx&}CKvt*0$r z$RjM6mJ|1o^*A-W(sZ+rq~D9kHHo`$WvIpQVA3CRK7uf@wLGnY{K*R^wP(|l2rok8 z$OrI4894BWak*?|+DMAphha;ueKhbf%WWR>3OCGNQ8CZPTW(fdV|PW_TZq1F6#y5m z-v3moM3q{|86#h+XScZvvTUX?yaUwTIG@iHnkGmG>3o14m8YPbxBNaXk`r14%AT01 zuax|zTS%IIdb2jQvi#PAm^ODmb~0^_r(66_w^N+bh<=Wy?H!t_{+_m@@579iQ{)Op>Ji~ux|nx zFge8Hkd9m~`9`RxG6hS0I0tohT-bq@zOYrd#33%tXlPVR z6ZkQJ4q|-Lg9Ex!mpewmzD3zLZ=xx( zJL?9pnGqtscsofJ1gLQSv`50YdW2;BVzR+?om90qi#JwIF4>sW&Reeu!eA!jn&q$D z;QMf{o0%vCTi+Gxp)1?V13tvYbRxuEzd4P_bjVLVC@@^tYO^4$cj zmvE1!iKDADO1#-YAF>%6ox}@aXLXJ1kOSi?aeuPS=WEI-a05+gDXC+Bxi|wEt<+Y| z@(!Fjbe=(#Hm?qw12BV!sWSK1ebhRFGx3W;U5~#iUDd06@L2z%+%E6G*N=QNaJ-Q< zubzqW;48IoZh@M+C~FQ(=A@#3!BR%dY3X+;TS?ON=x1SI>NXaoR0};XMNqv zt)r7gUJg|OMoLO;T@j{om)3V@tn`3;*rc5*NAW#L)*-aNhf-M!-O}HDOQR}Y^Hq~i zPx-$<<=ccy?(IdZ;fEW-=&w8=PsGpW<#A9xulWRTT9)% z{Xy#%kw4@d1DbBBSIaZtN@U?M8%B1f(hVw?y~+lrgw7g_Ka4?#4|4q9MX0<<7%#ZxD+ilHydon(6sc8pR-TE}qB zmXGkJT52hx1yO^p#fo?s4hd2HN^BS=$`b*he?BPxz&leqPqO0HzoL)sm^ zV@7ZKBG1ch6fW(!P|GG4a;165{H{FrCv4fC-{am!=8q@KKNmj6nX|LzFI-sFyH1xs z*%8tv`Re3!ij3r#oP&8*WQ?^x;EIxD(A{nq<@)dd4EX(!93oE#4$>ubA86RY$xyvw zyZ9}ASR_7pU3Rze0>H8Am1Psx+PnbHE7O0?Gi9NASBvpf?Y=Cd^;$X+6Py3!aN%D?>6)MV#&4 za#+iza=}cop7bi?T)>$jYvn`WTG5DhMzi`r18h^uJ^>B=>H7=DyV_ckqz6KzEzE}I z)cy+wn_qWLh&EG(+}fPh4{jh8j!GsltG)A3@uPh*2fW{i2r>3J-38r~OwvBK6DOw; zst2zEUKNL8-`}a_D;hFgEM@VyxUQ;&5qfXMJ0$^awpB1qd;Y2BS>H*WTy{gnVhG39 z_46`+XE7(fdF84LDnI?M8zakC#1ApH;g}-*-NS3pLcHlW zBZQ$jr{P7EKHJ-D?Gq2i ztYx}J7nhQl?Yf@KSKu8dHQ7Y|f=NT$I&b(oh1Nb4*l|(VYVSEcdQ0PN(G4eg)Hbd< z?kJ1UHKouqzI>O5Wn;S|3|C99QKe80`>XaBUHq%wCiYm+ZPBxq0=sToeZ24Z^+8S0 zjjBoQdrRI%Lk@p|HqgP+|Yfws;ZRZD_p!)qSxl1QR$DBr|Nzt57DjC2+R? zP{!vMK)QzlY08$1fYfMBoE{E{Q?>Dnz$qB*#YKP2%=ke(Rg&D|tXtFm zI}Op7lc}`;`tJKi-BmtB@_h>Vb$ZBY40(UnTVh@zHvkXV5T8ydMCLD;(M7}WZdtzx zylEV9wBE+Vl#k8$!-5is3^=2oHl_9HA5y8FCB_2FPB0t-Pp-ma^AU(0%~eW0Ns0^x zk75a2q{;=oz4=VI&uaKDm}3(r+l&($bZ7bFS=)!#=K9^yoB1STwi_pBkmm<>_v}nh z;q5M+Aas_}HhG}X>UsRuxzfouNe}x^6$!O8W{#SiJpR>_BLN+XWb~bw>!e`W8ZnQC zz7F%Wr^j6O4C4%P1d%dsi80x^`Cnzty!waUFFs{3^R({IG+voKy<#6j-5!F7^$=EN z0S4b`8%Z~tL|ZU-sz8xv-UP_2lg;$gy+<=3WP3IQqbw6*!IuvNOoWo4GaM8 z#EF87N##{=_51}DMRv7oRO!Y3*{Rr|iQtc#IxdZsLIq9}Hy!%amv&Wd=+o90<7fl{ z{BQ)ktBL|7WU^#6sLr~!=v@~nfF9Oh#EAFu_7<9`ie9aS87UdJ5v#wIWCbi4WR7aj zVQ&|MNT69QP!$jqnhrS3V!kXv@nTp4hJzWyw|%XHtC{(2{5`eKzsOih0u0K@*I7q? zno#cn7(V1d6*Bm(7HhW$(5ZNoWQD1Ys^cP=MVPT(xHcwN1sTYlNIUdlgzRu4z~tez z`JQ~7J!H;eFwikNIAb88{t!mAtota#AOGSzo7`I{sP){Z&`t5ymf-q3G2#&hL1kyu x9aMW{G|yQmiiyAkMjgMEECM@?v#^pR&3`}tp25E{@NW$K8w3A)3<&-j`ww7K>RA8) literal 0 HcmV?d00001 diff --git a/performance/start-drop-detail-concurrent-test.ps1 b/performance/start-drop-detail-concurrent-test.ps1 index d481671..a1b8229 100644 --- a/performance/start-drop-detail-concurrent-test.ps1 +++ b/performance/start-drop-detail-concurrent-test.ps1 @@ -1,6 +1,6 @@ param( [Parameter(Mandatory = $true)] - [ValidateSet('Before', 'After', 'Optimized')] + [ValidateSet('Before', 'After', 'Optimized', 'LiveStock')] [string]$Phase, [Parameter(Mandatory = $true)] @@ -13,7 +13,10 @@ param( [ValidateSet('Warm', 'Cold')] [string]$CacheMode = 'Warm', - [string]$TargetBaseUrl + [string]$TargetBaseUrl, + + [ValidateRange(0, [int]::MaxValue)] + [int]$StockQuantity = 100 ) $ErrorActionPreference = 'Stop' @@ -128,6 +131,16 @@ if (-not $authToken) { throw 'Access token was not returned by the login API.' } +$redisContainer = docker ps --filter 'name=redis' --format '{{.Names}}' | Select-Object -First 1 +if (-not $redisContainer) { + throw 'Redis container is not running.' +} + +docker exec $redisContainer redis-cli SET "{drop:$DropId}:stock" $StockQuantity | Out-Null +if ($LASTEXITCODE -ne 0) { + throw 'The Drop stock key could not be prepared.' +} + try { $dropResponse = Invoke-RestMethod ` -Uri "$healthCheckUrl/drops/$DropId" ` @@ -142,12 +155,6 @@ try { } if ($CacheMode -eq 'Cold') { - $redisContainer = docker ps --filter 'name=redis' --format '{{.Names}}' | Select-Object -First 1 - - if (-not $redisContainer) { - throw 'Redis container is not running.' - } - docker exec $redisContainer redis-cli DEL "dropit::dropDetail::$DropId" | Out-Null if ($LASTEXITCODE -ne 0) { diff --git a/performance/start-drop-detail-spike-test.ps1 b/performance/start-drop-detail-spike-test.ps1 index 6a8a9f8..c057b52 100644 --- a/performance/start-drop-detail-spike-test.ps1 +++ b/performance/start-drop-detail-spike-test.ps1 @@ -1,6 +1,6 @@ param( [Parameter(Mandatory = $true)] - [ValidateSet('Before', 'Query', 'After')] + [ValidateSet('Before', 'Query', 'After', 'LiveStock')] [string]$Phase, [Parameter(Mandatory = $true)] @@ -17,7 +17,10 @@ param( [int]$PreAllocatedVUs = 200, [ValidateRange(1, 1000000)] - [int]$MaxVUs = 2000 + [int]$MaxVUs = 2000, + + [ValidateRange(0, [int]::MaxValue)] + [int]$StockQuantity = 100 ) $ErrorActionPreference = 'Stop' @@ -105,6 +108,16 @@ if (-not $authToken) { throw 'Access token was not returned by the login API.' } +$redisContainer = docker ps --filter 'name=redis' --format '{{.Names}}' | Select-Object -First 1 +if (-not $redisContainer) { + throw 'Redis container is not running.' +} + +docker exec $redisContainer redis-cli SET "{drop:$DropId}:stock" $StockQuantity | Out-Null +if ($LASTEXITCODE -ne 0) { + throw 'The Drop stock key could not be prepared.' +} + try { $dropResponse = Invoke-RestMethod ` -Uri "$healthCheckUrl/drops/$DropId" ` diff --git a/src/test/java/com/dropit/drop/service/DropCacheIntegrationTest.java b/src/test/java/com/dropit/drop/service/DropCacheIntegrationTest.java index 8f10814..fb6bae7 100644 --- a/src/test/java/com/dropit/drop/service/DropCacheIntegrationTest.java +++ b/src/test/java/com/dropit/drop/service/DropCacheIntegrationTest.java @@ -34,7 +34,16 @@ import static org.mockito.Mockito.verify; import static org.mockito.Mockito.when; -@SpringBootTest(properties = "spring.jpa.hibernate.ddl-auto=none") +@SpringBootTest(properties = { + "spring.jpa.hibernate.ddl-auto=none", + "app.order.sqs.order-queue-url=http://localhost:4566/000000000000/test-order-queue", + "app.order.sqs.consumer-enabled=false", + "app.order.sqs.consumer-concurrency=1", + "app.order.sqs.consumer-max-number-of-messages=1", + "app.order.sqs.consumer-wait-time-seconds=1", + "app.order.sqs.consumer-visibility-timeout-seconds=60", + "app.order.sqs.publisher-timeout-millis=3000" +}) class DropCacheIntegrationTest { @Autowired From 7f968eb4c3cdb96c8c89318386eb43ba892882fd Mon Sep 17 00:00:00 2001 From: Sooyoung Yoon Date: Mon, 14 Sep 2026 16:48:47 +0900 Subject: [PATCH 91/98] =?UTF-8?q?fix(drop):=20=EC=83=81=EC=84=B8=20?= =?UTF-8?q?=EC=A1=B0=ED=9A=8C=20=EC=9E=AC=EA=B3=A0=EB=A5=BC=20DB=20?= =?UTF-8?q?=ED=99=95=EC=A0=95=EA=B0=92=EC=9C=BC=EB=A1=9C=20=EB=B3=B5?= =?UTF-8?q?=EC=9B=90?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../drop/cache/DropDetailCacheValue.java | 2 - .../dropit/drop/cache/DropStockReader.java | 36 ------ .../drop/dto/response/DropResponse.java | 3 +- .../dropit/drop/exception/DropErrorCode.java | 1 - .../dropit/drop/repository/DropLiveState.java | 8 ++ .../drop/repository/DropRepository.java | 9 ++ .../com/dropit/drop/service/DropService.java | 17 ++- .../config/FailOpenCacheErrorHandler.java | 29 +++++ .../global/config/RedisCacheConfig.java | 9 +- .../cache/DropDetailCacheFallbackTest.java | 112 ++++++++++++++++++ .../drop/cache/DropStockReaderTest.java | 67 ----------- .../repository/DropSearchIntegrationTest.java | 22 ++++ .../service/DropCacheIntegrationTest.java | 44 ++++--- .../dropit/drop/service/DropServiceTest.java | 38 +++++- .../ProductDropConcurrencyTest.java | 4 + 15 files changed, 267 insertions(+), 134 deletions(-) delete mode 100644 src/main/java/com/dropit/drop/cache/DropStockReader.java create mode 100644 src/main/java/com/dropit/drop/repository/DropLiveState.java create mode 100644 src/main/java/com/dropit/global/config/FailOpenCacheErrorHandler.java create mode 100644 src/test/java/com/dropit/drop/cache/DropDetailCacheFallbackTest.java delete mode 100644 src/test/java/com/dropit/drop/cache/DropStockReaderTest.java diff --git a/src/main/java/com/dropit/drop/cache/DropDetailCacheValue.java b/src/main/java/com/dropit/drop/cache/DropDetailCacheValue.java index b88b7d8..903ea12 100644 --- a/src/main/java/com/dropit/drop/cache/DropDetailCacheValue.java +++ b/src/main/java/com/dropit/drop/cache/DropDetailCacheValue.java @@ -20,7 +20,6 @@ public record DropDetailCacheValue( int discountRate, int initialQuantity, int purchaseLimit, - boolean visible, LocalDateTime openAt, LocalDateTime closeAt ) { @@ -36,7 +35,6 @@ public static DropDetailCacheValue from(Drop drop) { drop.getDiscountRate(), drop.getInitialQuantity(), drop.getPurchaseLimit(), - drop.isVisible(), drop.getOpenAt(), drop.getCloseAt() ); diff --git a/src/main/java/com/dropit/drop/cache/DropStockReader.java b/src/main/java/com/dropit/drop/cache/DropStockReader.java deleted file mode 100644 index ed4f252..0000000 --- a/src/main/java/com/dropit/drop/cache/DropStockReader.java +++ /dev/null @@ -1,36 +0,0 @@ -package com.dropit.drop.cache; - -import com.dropit.drop.exception.DropErrorCode; -import com.dropit.global.exception.ServiceException; -import com.dropit.order.redis.RedisOrderKeyFactory; -import lombok.RequiredArgsConstructor; -import org.springframework.dao.DataAccessException; -import org.springframework.data.redis.core.StringRedisTemplate; -import org.springframework.stereotype.Component; - -@Component -@RequiredArgsConstructor -public class DropStockReader { - - private final StringRedisTemplate redisTemplate; - - public int getRemainingQuantity(Long dropId) { - try { - String value = redisTemplate.opsForValue().get( - RedisOrderKeyFactory.stockKey(dropId) - ); - - if (value == null) { - throw new ServiceException(DropErrorCode.DROP_STOCK_NOT_READY); - } - - int remainingQuantity = Integer.parseInt(value); - if (remainingQuantity < 0) { - throw new ServiceException(DropErrorCode.DROP_STOCK_NOT_READY); - } - return remainingQuantity; - } catch (NumberFormatException | DataAccessException exception) { - throw new ServiceException(DropErrorCode.DROP_STOCK_NOT_READY, exception); - } - } -} diff --git a/src/main/java/com/dropit/drop/dto/response/DropResponse.java b/src/main/java/com/dropit/drop/dto/response/DropResponse.java index dd03a82..4a0b06f 100644 --- a/src/main/java/com/dropit/drop/dto/response/DropResponse.java +++ b/src/main/java/com/dropit/drop/dto/response/DropResponse.java @@ -63,6 +63,7 @@ public static DropResponse from(Drop drop) { public static DropResponse from( DropDetailCacheValue detail, int remainingQuantity, + boolean visible, LocalDateTime now ) { return new DropResponse( @@ -78,7 +79,7 @@ public static DropResponse from( remainingQuantity, detail.initialQuantity() - remainingQuantity, detail.purchaseLimit(), - detail.visible(), + visible, detail.openAt(), detail.closeAt(), DropStatus.resolve( diff --git a/src/main/java/com/dropit/drop/exception/DropErrorCode.java b/src/main/java/com/dropit/drop/exception/DropErrorCode.java index 993c2f4..f794d0e 100644 --- a/src/main/java/com/dropit/drop/exception/DropErrorCode.java +++ b/src/main/java/com/dropit/drop/exception/DropErrorCode.java @@ -15,7 +15,6 @@ public enum DropErrorCode implements ErrorCode { INVALID_DROP_PERIOD(HttpStatus.BAD_REQUEST, "판매 종료 시각은 시작 시각보다 늦어야 합니다."), DROP_SALE_PREPARED(HttpStatus.CONFLICT, "판매 준비가 완료되어 판매 설정을 변경할 수 없습니다."), DROP_ADMISSION_NOT_READY(HttpStatus.SERVICE_UNAVAILABLE, "주문 접수용 판매 상태를 준비할 수 없습니다."), - DROP_STOCK_NOT_READY(HttpStatus.SERVICE_UNAVAILABLE, "실시간 재고 정보를 확인할 수 없습니다."), DROP_ALREADY_STARTED(HttpStatus.CONFLICT, "이미 판매가 시작된 드랍입니다."); private final HttpStatus status; diff --git a/src/main/java/com/dropit/drop/repository/DropLiveState.java b/src/main/java/com/dropit/drop/repository/DropLiveState.java new file mode 100644 index 0000000..0518c50 --- /dev/null +++ b/src/main/java/com/dropit/drop/repository/DropLiveState.java @@ -0,0 +1,8 @@ +package com.dropit.drop.repository; + +public interface DropLiveState { + + int getRemainingQuantity(); + + boolean isVisible(); +} diff --git a/src/main/java/com/dropit/drop/repository/DropRepository.java b/src/main/java/com/dropit/drop/repository/DropRepository.java index b8f258e..998b7e2 100644 --- a/src/main/java/com/dropit/drop/repository/DropRepository.java +++ b/src/main/java/com/dropit/drop/repository/DropRepository.java @@ -26,6 +26,15 @@ public interface DropRepository extends JpaRepository, DropRepositor """) Optional findDetailById(@Param("dropId") Long dropId); + @Transactional(readOnly = true) + @Query(""" + select d.remainingQuantity as remainingQuantity, + d.visible as visible + from Drop d + where d.id = :dropId + """) + Optional findLiveStateById(@Param("dropId") Long dropId); + boolean existsByProductId(Long productId); Page findAllByVisibleTrue(Pageable pageable); diff --git a/src/main/java/com/dropit/drop/service/DropService.java b/src/main/java/com/dropit/drop/service/DropService.java index 655d4eb..71ba156 100644 --- a/src/main/java/com/dropit/drop/service/DropService.java +++ b/src/main/java/com/dropit/drop/service/DropService.java @@ -2,7 +2,6 @@ import com.dropit.drop.cache.DropDetailCacheReader; import com.dropit.drop.cache.DropDetailCacheValue; -import com.dropit.drop.cache.DropStockReader; import com.dropit.drop.dto.request.DropCreateRequest; import com.dropit.drop.dto.request.DropSearchCondition; import com.dropit.drop.dto.request.DropUpdateRequest; @@ -10,6 +9,7 @@ import com.dropit.drop.entity.Drop; import com.dropit.drop.exception.DropErrorCode; import com.dropit.drop.repository.DropRepository; +import com.dropit.drop.repository.DropLiveState; import com.dropit.global.config.RedisCacheConfig; import com.dropit.global.exception.ServiceException; import com.dropit.product.entity.Product; @@ -32,7 +32,6 @@ public class DropService { private final DropRepository dropRepository; private final ProductRepository productRepository; private final DropDetailCacheReader dropDetailCacheReader; - private final DropStockReader dropStockReader; @Transactional public Long save(Long userId, DropCreateRequest request) { @@ -70,9 +69,19 @@ public Page getAll( public DropResponse getOne(Long dropId) { DropDetailCacheValue detail = dropDetailCacheReader.get(dropId); - int remainingQuantity = dropStockReader.getRemainingQuantity(dropId); + DropLiveState liveState = dropRepository.findLiveStateById(dropId) + .orElseThrow(() -> new ServiceException(DropErrorCode.DROP_NOT_FOUND)); + + if (!liveState.isVisible()) { + throw new ServiceException(DropErrorCode.DROP_NOT_FOUND); + } - return DropResponse.from(detail, remainingQuantity, LocalDateTime.now()); + return DropResponse.from( + detail, + liveState.getRemainingQuantity(), + liveState.isVisible(), + LocalDateTime.now() + ); } @Transactional(readOnly = true) diff --git a/src/main/java/com/dropit/global/config/FailOpenCacheErrorHandler.java b/src/main/java/com/dropit/global/config/FailOpenCacheErrorHandler.java new file mode 100644 index 0000000..3fba924 --- /dev/null +++ b/src/main/java/com/dropit/global/config/FailOpenCacheErrorHandler.java @@ -0,0 +1,29 @@ +package com.dropit.global.config; + +import lombok.extern.slf4j.Slf4j; +import org.springframework.cache.Cache; +import org.springframework.cache.interceptor.CacheErrorHandler; + +@Slf4j +public class FailOpenCacheErrorHandler implements CacheErrorHandler { + + @Override + public void handleCacheGetError(RuntimeException exception, Cache cache, Object key) { + log.warn("캐시 조회 실패로 원본 저장소를 사용합니다. cache={}, key={}", cache.getName(), key, exception); + } + + @Override + public void handleCachePutError(RuntimeException exception, Cache cache, Object key, Object value) { + log.warn("캐시 저장에 실패했습니다. cache={}, key={}", cache.getName(), key, exception); + } + + @Override + public void handleCacheEvictError(RuntimeException exception, Cache cache, Object key) { + log.warn("캐시 삭제에 실패했습니다. cache={}, key={}", cache.getName(), key, exception); + } + + @Override + public void handleCacheClearError(RuntimeException exception, Cache cache) { + log.warn("캐시 초기화에 실패했습니다. cache={}", cache.getName(), exception); + } +} diff --git a/src/main/java/com/dropit/global/config/RedisCacheConfig.java b/src/main/java/com/dropit/global/config/RedisCacheConfig.java index b1246ad..e3a9ab8 100644 --- a/src/main/java/com/dropit/global/config/RedisCacheConfig.java +++ b/src/main/java/com/dropit/global/config/RedisCacheConfig.java @@ -1,6 +1,8 @@ package com.dropit.global.config; import org.springframework.cache.annotation.EnableCaching; +import org.springframework.cache.annotation.CachingConfigurer; +import org.springframework.cache.interceptor.CacheErrorHandler; import org.springframework.context.annotation.Bean; import org.springframework.context.annotation.Configuration; import org.springframework.data.redis.cache.RedisCacheConfiguration; @@ -13,7 +15,7 @@ @Configuration @EnableCaching -public class RedisCacheConfig { +public class RedisCacheConfig implements CachingConfigurer { public static final String DROP_DETAIL_CACHE = "dropDetail"; public static final Duration DROP_DETAIL_TTL = Duration.ofSeconds(3); @@ -41,4 +43,9 @@ public RedisCacheManager redisCacheManager(RedisConnectionFactory connectionFact .enableStatistics() .build(); } + + @Override + public CacheErrorHandler errorHandler() { + return new FailOpenCacheErrorHandler(); + } } diff --git a/src/test/java/com/dropit/drop/cache/DropDetailCacheFallbackTest.java b/src/test/java/com/dropit/drop/cache/DropDetailCacheFallbackTest.java new file mode 100644 index 0000000..6cd0666 --- /dev/null +++ b/src/test/java/com/dropit/drop/cache/DropDetailCacheFallbackTest.java @@ -0,0 +1,112 @@ +package com.dropit.drop.cache; + +import com.dropit.drop.entity.Drop; +import com.dropit.drop.repository.DropRepository; +import com.dropit.global.config.FailOpenCacheErrorHandler; +import com.dropit.global.config.RedisCacheConfig; +import com.dropit.product.entity.Product; +import com.dropit.user.entity.User; +import com.dropit.user.entity.UserRole; +import org.junit.jupiter.api.Test; +import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.boot.test.context.TestConfiguration; +import org.springframework.cache.Cache; +import org.springframework.cache.CacheManager; +import org.springframework.cache.annotation.CachingConfigurer; +import org.springframework.cache.annotation.EnableCaching; +import org.springframework.cache.concurrent.ConcurrentMapCache; +import org.springframework.cache.interceptor.CacheErrorHandler; +import org.springframework.context.annotation.Bean; +import org.springframework.context.annotation.Import; +import org.springframework.test.context.bean.override.mockito.MockitoBean; +import org.springframework.test.context.junit.jupiter.SpringJUnitConfig; +import org.springframework.test.util.ReflectionTestUtils; + +import java.math.BigDecimal; +import java.time.LocalDateTime; +import java.util.Collection; +import java.util.List; +import java.util.Optional; +import java.util.concurrent.Callable; + +import static org.junit.jupiter.api.Assertions.assertEquals; +import static org.mockito.Mockito.verify; +import static org.mockito.Mockito.when; + +@SpringJUnitConfig +@Import({DropDetailCacheReader.class, DropDetailCacheFallbackTest.FailingCacheConfig.class}) +class DropDetailCacheFallbackTest { + + @MockitoBean + private DropRepository dropRepository; + + @Autowired + private DropDetailCacheReader cacheReader; + + @Test + void cacheFailureFallsBackToDatabase() { + Drop drop = visibleDrop(); + when(dropRepository.findDetailById(100L)).thenReturn(Optional.of(drop)); + + DropDetailCacheValue result = cacheReader.get(100L); + + assertEquals(100L, result.id()); + verify(dropRepository).findDetailById(100L); + } + + private Drop visibleDrop() { + User seller = new User("seller@cache.test", "password", "cache-seller", UserRole.SELLER); + ReflectionTestUtils.setField(seller, "id", 1L); + Product product = new Product(seller, "Limited Hoodie", "description", null); + ReflectionTestUtils.setField(product, "id", 10L); + LocalDateTime openAt = LocalDateTime.now().plusDays(1); + Drop drop = new Drop(product, new BigDecimal("59000"), 100, 10, 2, openAt, openAt.plusDays(1)); + drop.changeVisibility(true); + ReflectionTestUtils.setField(drop, "id", 100L); + return drop; + } + + @TestConfiguration(proxyBeanMethods = false) + @EnableCaching + static class FailingCacheConfig implements CachingConfigurer { + + @Bean + @Override + public CacheManager cacheManager() { + Cache cache = new FailingCache(RedisCacheConfig.DROP_DETAIL_CACHE); + return new CacheManager() { + @Override + public Cache getCache(String name) { + return RedisCacheConfig.DROP_DETAIL_CACHE.equals(name) ? cache : null; + } + + @Override + public Collection getCacheNames() { + return List.of(RedisCacheConfig.DROP_DETAIL_CACHE); + } + }; + } + + @Override + public CacheErrorHandler errorHandler() { + return new FailOpenCacheErrorHandler(); + } + } + + static class FailingCache extends ConcurrentMapCache { + + FailingCache(String name) { + super(name); + } + + @Override + public T get(Object key, Callable valueLoader) { + throw new IllegalStateException("Redis unavailable"); + } + + @Override + public void put(Object key, Object value) { + throw new IllegalStateException("Redis unavailable"); + } + } +} diff --git a/src/test/java/com/dropit/drop/cache/DropStockReaderTest.java b/src/test/java/com/dropit/drop/cache/DropStockReaderTest.java deleted file mode 100644 index b9a3000..0000000 --- a/src/test/java/com/dropit/drop/cache/DropStockReaderTest.java +++ /dev/null @@ -1,67 +0,0 @@ -package com.dropit.drop.cache; - -import com.dropit.drop.exception.DropErrorCode; -import com.dropit.global.exception.ServiceException; -import org.junit.jupiter.api.BeforeEach; -import org.junit.jupiter.api.Test; -import org.junit.jupiter.api.extension.ExtendWith; -import org.mockito.Mock; -import org.mockito.junit.jupiter.MockitoExtension; -import org.springframework.data.redis.core.StringRedisTemplate; -import org.springframework.data.redis.core.ValueOperations; - -import static org.junit.jupiter.api.Assertions.assertEquals; -import static org.junit.jupiter.api.Assertions.assertThrows; -import static org.mockito.ArgumentMatchers.anyString; -import static org.mockito.Mockito.when; - -@ExtendWith(MockitoExtension.class) -class DropStockReaderTest { - - @Mock - private StringRedisTemplate redisTemplate; - - @Mock - private ValueOperations valueOperations; - - private DropStockReader stockReader; - - @BeforeEach - void setUp() { - when(redisTemplate.opsForValue()).thenReturn(valueOperations); - stockReader = new DropStockReader(redisTemplate); - } - - @Test - void readsCurrentStockFromOrderRedisKey() { - when(valueOperations.get(anyString())).thenReturn("97"); - - int remainingQuantity = stockReader.getRemainingQuantity(100L); - - assertEquals(97, remainingQuantity); - } - - @Test - void rejectsMissingStockInsteadOfReturningStaleDatabaseValue() { - when(valueOperations.get(anyString())).thenReturn(null); - - ServiceException exception = assertThrows( - ServiceException.class, - () -> stockReader.getRemainingQuantity(100L) - ); - - assertEquals(DropErrorCode.DROP_STOCK_NOT_READY, exception.getErrorCode()); - } - - @Test - void rejectsInvalidStockValue() { - when(valueOperations.get(anyString())).thenReturn("invalid"); - - ServiceException exception = assertThrows( - ServiceException.class, - () -> stockReader.getRemainingQuantity(100L) - ); - - assertEquals(DropErrorCode.DROP_STOCK_NOT_READY, exception.getErrorCode()); - } -} diff --git a/src/test/java/com/dropit/drop/repository/DropSearchIntegrationTest.java b/src/test/java/com/dropit/drop/repository/DropSearchIntegrationTest.java index 36f4fd8..3460d25 100644 --- a/src/test/java/com/dropit/drop/repository/DropSearchIntegrationTest.java +++ b/src/test/java/com/dropit/drop/repository/DropSearchIntegrationTest.java @@ -90,4 +90,26 @@ void noKeywordMatchesOriginalJoinQuery() { assertEquals(expected, actual.getContent().stream().map(Drop::getId).toList()); assertEquals(count.longValue(), actual.getTotalElements()); } + + @Test + void liveStateReadsCommittedStockAndVisibility() { + String marker = "live-state-" + UUID.randomUUID(); + User seller = new User(marker + "@test.invalid", "unused", marker, UserRole.SELLER); + em.persist(seller); + Product product = new Product(seller, marker, "fixture", null); + em.persist(product); + LocalDateTime now = LocalDateTime.now(); + Drop drop = new Drop(product, BigDecimal.valueOf(100), 10, 0, 1, + now.minusDays(1), now.plusDays(1)); + drop.changeVisibility(true); + drop.decreaseStock(3, now); + em.persist(drop); + em.flush(); + em.clear(); + + DropLiveState result = repository.findLiveStateById(drop.getId()).orElseThrow(); + + assertEquals(7, result.getRemainingQuantity()); + assertTrue(result.isVisible()); + } } diff --git a/src/test/java/com/dropit/drop/service/DropCacheIntegrationTest.java b/src/test/java/com/dropit/drop/service/DropCacheIntegrationTest.java index 5dc35dd..c40bbaf 100644 --- a/src/test/java/com/dropit/drop/service/DropCacheIntegrationTest.java +++ b/src/test/java/com/dropit/drop/service/DropCacheIntegrationTest.java @@ -1,13 +1,14 @@ package com.dropit.drop.service; +import com.dropit.drop.cache.DropDetailCacheReader; import com.dropit.drop.cache.DropDetailCacheValue; import com.dropit.drop.cache.DropSaleCacheWriter; import com.dropit.drop.dto.request.DropVisibilityUpdateRequest; import com.dropit.drop.dto.response.DropResponse; import com.dropit.drop.entity.Drop; +import com.dropit.drop.repository.DropLiveState; import com.dropit.drop.repository.DropRepository; import com.dropit.global.config.RedisCacheConfig; -import com.dropit.order.redis.RedisOrderKeyFactory; import com.dropit.global.exception.ServiceException; import com.dropit.order.repository.DropUserPurchaseRepository; import com.dropit.order.repository.OrderItemRepository; @@ -22,7 +23,6 @@ import org.springframework.boot.test.context.TestConfiguration; import org.springframework.cache.Cache; import org.springframework.cache.CacheManager; -import org.springframework.data.redis.core.StringRedisTemplate; import org.springframework.context.annotation.Bean; import org.springframework.context.annotation.Import; import org.springframework.data.redis.connection.RedisConnectionFactory; @@ -52,7 +52,8 @@ import static org.mockito.Mockito.when; @SpringJUnitConfig -@Import({DropService.class, DropVisibilityService.class, RedisCacheConfig.class, DropCacheIntegrationTest.RedisTestConfig.class}) +@Import({DropService.class, DropVisibilityService.class, DropDetailCacheReader.class, RedisCacheConfig.class, + DropCacheIntegrationTest.RedisTestConfig.class}) class DropCacheIntegrationTest { private static final GenericContainer REDIS = new GenericContainer<>( @@ -77,9 +78,6 @@ static void stopRedis() { @Autowired private CacheManager cacheManager; - @Autowired - private StringRedisTemplate redisTemplate; - @MockitoBean private DropRepository dropRepository; @@ -109,38 +107,40 @@ void clearCache() { dropDetailCache = cacheManager.getCache(RedisCacheConfig.DROP_DETAIL_CACHE); assertNotNull(dropDetailCache); dropDetailCache.clear(); - redisTemplate.delete(RedisOrderKeyFactory.stockKey(100L)); } @Test void repeatedDetailRequestUsesRedisCache() { Drop drop = visibleDrop(); when(dropRepository.findDetailById(100L)).thenReturn(Optional.of(drop)); - redisTemplate.opsForValue().set(RedisOrderKeyFactory.stockKey(100L), "100"); + when(dropRepository.findLiveStateById(100L)).thenReturn(Optional.of(liveState(100, true))); DropResponse first = dropService.getOne(100L); DropResponse second = dropService.getOne(100L); assertEquals(first, second); verify(dropRepository, times(1)).findDetailById(100L); + verify(dropRepository, times(2)).findLiveStateById(100L); assertNotNull(dropDetailCache.get(100L, DropDetailCacheValue.class)); } @Test - void changedRedisStockIsReflectedWithoutReloadingMetadata() { + void changedDatabaseStockIsReflectedWithoutReloadingMetadata() { Drop drop = visibleDrop(); when(dropRepository.findDetailById(100L)).thenReturn(Optional.of(drop)); - String stockKey = RedisOrderKeyFactory.stockKey(100L); - redisTemplate.opsForValue().set(stockKey, "100"); + when(dropRepository.findLiveStateById(100L)).thenReturn( + Optional.of(liveState(100, true)), + Optional.of(liveState(97, true)) + ); DropResponse first = dropService.getOne(100L); - redisTemplate.opsForValue().set(stockKey, "97"); DropResponse second = dropService.getOne(100L); assertEquals(100, first.remainingQuantity()); assertEquals(97, second.remainingQuantity()); assertEquals(3, second.soldQuantity()); verify(dropRepository, times(1)).findDetailById(100L); + verify(dropRepository, times(2)).findLiveStateById(100L); } @Test @@ -148,8 +148,7 @@ void changingVisibilityEvictsCachedDetail() { Drop drop = visibleDrop(); when(dropRepository.findDetailById(100L)).thenReturn(Optional.of(drop)); when(dropRepository.findByIdForUpdate(100L)).thenReturn(Optional.of(drop)); - - redisTemplate.opsForValue().set(RedisOrderKeyFactory.stockKey(100L), "100"); + when(dropRepository.findLiveStateById(100L)).thenReturn(Optional.of(liveState(100, true))); dropService.getOne(100L); dropVisibilityService.changeVisibility(1L, 100L, new DropVisibilityUpdateRequest(false)); @@ -164,8 +163,7 @@ void cacheSyncFailureAfterVisibilityChangeStillEvictsCachedDetail() { when(dropRepository.findByIdForUpdate(100L)).thenReturn(Optional.of(drop)); doThrow(new IllegalStateException("Redis unavailable")) .when(dropSaleCacheWriter).apply(any()); - - redisTemplate.opsForValue().set(RedisOrderKeyFactory.stockKey(100L), "100"); + when(dropRepository.findLiveStateById(100L)).thenReturn(Optional.of(liveState(100, true))); dropService.getOne(100L); assertThrows(ServiceException.class, () -> @@ -194,6 +192,20 @@ private Drop visibleDrop() { return drop; } + private DropLiveState liveState(int remainingQuantity, boolean visible) { + return new DropLiveState() { + @Override + public int getRemainingQuantity() { + return remainingQuantity; + } + + @Override + public boolean isVisible() { + return visible; + } + }; + } + @TestConfiguration(proxyBeanMethods = false) static class RedisTestConfig { diff --git a/src/test/java/com/dropit/drop/service/DropServiceTest.java b/src/test/java/com/dropit/drop/service/DropServiceTest.java index 303e85c..9c9c21d 100644 --- a/src/test/java/com/dropit/drop/service/DropServiceTest.java +++ b/src/test/java/com/dropit/drop/service/DropServiceTest.java @@ -2,7 +2,6 @@ import com.dropit.drop.cache.DropDetailCacheReader; import com.dropit.drop.cache.DropDetailCacheValue; -import com.dropit.drop.cache.DropStockReader; import com.dropit.drop.dto.request.DropCreateRequest; import com.dropit.drop.dto.request.DropSearchCondition; import com.dropit.drop.dto.request.DropUpdateRequest; @@ -11,6 +10,7 @@ import com.dropit.drop.entity.Drop; import com.dropit.drop.exception.DropErrorCode; import com.dropit.drop.repository.DropRepository; +import com.dropit.drop.repository.DropLiveState; import com.dropit.global.exception.ServiceException; import com.dropit.product.entity.Product; import com.dropit.product.exception.ProductErrorCode; @@ -52,9 +52,6 @@ class DropServiceTest { @Mock private DropDetailCacheReader dropDetailCacheReader; - @Mock - private DropStockReader dropStockReader; - @InjectMocks private DropService dropService; @@ -117,7 +114,7 @@ void rejectCreatingDropForAnotherSellersProduct() { void getOneDrop() { Drop drop = saveDrop(1L, 10L, 100L, LocalDateTime.now().plusDays(1)); when(dropDetailCacheReader.get(100L)).thenReturn(DropDetailCacheValue.from(drop)); - when(dropStockReader.getRemainingQuantity(100L)).thenReturn(7); + when(dropRepository.findLiveStateById(100L)).thenReturn(Optional.of(liveState(7, true))); DropResponse response = dropService.getOne(100L); @@ -227,7 +224,22 @@ void rejectHiddenDropFromPublicDetail() { ); assertEquals(DropErrorCode.DROP_NOT_FOUND, exception.getErrorCode()); - verifyNoInteractions(dropStockReader); + verify(dropRepository, never()).findLiveStateById(anyLong()); + } + + @Test + @DisplayName("캐시된 상세 정보가 있어도 현재 비공개 드랍은 조회할 수 없다") + void rejectDropHiddenAfterMetadataWasCached() { + Drop drop = saveDrop(1L, 10L, 100L, LocalDateTime.now().plusDays(1)); + when(dropDetailCacheReader.get(100L)).thenReturn(DropDetailCacheValue.from(drop)); + when(dropRepository.findLiveStateById(100L)).thenReturn(Optional.of(liveState(10, false))); + + ServiceException exception = assertThrows( + ServiceException.class, + () -> dropService.getOne(100L) + ); + + assertEquals(DropErrorCode.DROP_NOT_FOUND, exception.getErrorCode()); } @Test @@ -322,6 +334,20 @@ private Drop saveDrop(Long sellerId, Long productId, Long dropId, LocalDateTime return drop; } + private DropLiveState liveState(int remainingQuantity, boolean visible) { + return new DropLiveState() { + @Override + public int getRemainingQuantity() { + return remainingQuantity; + } + + @Override + public boolean isVisible() { + return visible; + } + }; + } + private Product saveProduct(Long sellerId, Long productId) { User seller = new User("seller@example.com", "password", "seller", UserRole.SELLER); ReflectionTestUtils.setField(seller, "id", sellerId); diff --git a/src/test/java/com/dropit/product/concurrency/ProductDropConcurrencyTest.java b/src/test/java/com/dropit/product/concurrency/ProductDropConcurrencyTest.java index 2ac1322..b4f0098 100644 --- a/src/test/java/com/dropit/product/concurrency/ProductDropConcurrencyTest.java +++ b/src/test/java/com/dropit/product/concurrency/ProductDropConcurrencyTest.java @@ -1,5 +1,6 @@ package com.dropit.product.concurrency; +import com.dropit.drop.cache.DropDetailCacheReader; import com.dropit.drop.dto.request.DropCreateRequest; import com.dropit.drop.repository.DropRepository; import com.dropit.drop.service.DropService; @@ -75,6 +76,9 @@ class ProductDropConcurrencyTest { @MockitoBean private S3ImageService s3ImageService; + @MockitoBean + private DropDetailCacheReader dropDetailCacheReader; + @DynamicPropertySource static void registerDatasourceProperties(DynamicPropertyRegistry registry) { registry.add("spring.datasource.url", MYSQL::getJdbcUrl); From 84861c746d90c02cedb6fa82a205d2b352c8b99c Mon Sep 17 00:00:00 2001 From: Sooyoung Yoon Date: Mon, 14 Sep 2026 22:00:48 +0900 Subject: [PATCH 92/98] =?UTF-8?q?fix(cache):=20=EC=BB=A4=EB=B0=8B=20?= =?UTF-8?q?=ED=9B=84=20=EC=BA=90=EC=8B=9C=20=EC=82=AD=EC=A0=9C=20=EC=8B=A4?= =?UTF-8?q?=ED=8C=A8=EB=A5=BC=20=EA=B2=A9=EB=A6=AC?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../global/config/RedisCacheConfig.java | 78 ++++++++-- ...opCacheEvictionFailureIntegrationTest.java | 139 ++++++++++++++++++ 2 files changed, 207 insertions(+), 10 deletions(-) create mode 100644 src/test/java/com/dropit/drop/service/DropCacheEvictionFailureIntegrationTest.java diff --git a/src/main/java/com/dropit/global/config/RedisCacheConfig.java b/src/main/java/com/dropit/global/config/RedisCacheConfig.java index e3a9ab8..81cdedc 100644 --- a/src/main/java/com/dropit/global/config/RedisCacheConfig.java +++ b/src/main/java/com/dropit/global/config/RedisCacheConfig.java @@ -1,17 +1,24 @@ package com.dropit.global.config; +import org.springframework.cache.Cache; import org.springframework.cache.annotation.EnableCaching; import org.springframework.cache.annotation.CachingConfigurer; import org.springframework.cache.interceptor.CacheErrorHandler; +import org.springframework.cache.transaction.TransactionAwareCacheDecorator; import org.springframework.context.annotation.Bean; import org.springframework.context.annotation.Configuration; +import org.springframework.data.redis.cache.CacheStatisticsCollector; import org.springframework.data.redis.cache.RedisCacheConfiguration; import org.springframework.data.redis.cache.RedisCacheManager; +import org.springframework.data.redis.cache.RedisCacheWriter; import org.springframework.data.redis.connection.RedisConnectionFactory; import org.springframework.data.redis.serializer.RedisSerializationContext; import org.springframework.data.redis.serializer.RedisSerializer; +import org.springframework.transaction.support.TransactionSynchronization; +import org.springframework.transaction.support.TransactionSynchronizationManager; import java.time.Duration; +import java.util.Map; @Configuration @EnableCaching @@ -31,21 +38,72 @@ public RedisCacheManager redisCacheManager(RedisConnectionFactory connectionFact .serializeValuesWith(RedisSerializationContext.SerializationPair.fromSerializer( RedisSerializer.json() )); + RedisCacheConfiguration dropDetailConfiguration = defaultConfiguration.entryTtl(DROP_DETAIL_TTL); + RedisCacheWriter cacheWriter = RedisCacheWriter.nonLockingRedisCacheWriter(connectionFactory) + .withStatisticsCollector(CacheStatisticsCollector.create()); - return RedisCacheManager.builder(connectionFactory) - .cacheDefaults(defaultConfiguration) - .withCacheConfiguration( - DROP_DETAIL_CACHE, - defaultConfiguration.entryTtl(DROP_DETAIL_TTL) - ) - .disableCreateOnMissingCache() - .transactionAware() - .enableStatistics() - .build(); + return new FailOpenRedisCacheManager( + cacheWriter, + defaultConfiguration, + Map.of(DROP_DETAIL_CACHE, dropDetailConfiguration), + errorHandler() + ); } @Override public CacheErrorHandler errorHandler() { return new FailOpenCacheErrorHandler(); } + + private static final class FailOpenRedisCacheManager extends RedisCacheManager { + + private final CacheErrorHandler errorHandler; + + private FailOpenRedisCacheManager( + RedisCacheWriter cacheWriter, + RedisCacheConfiguration defaultConfiguration, + Map cacheConfigurations, + CacheErrorHandler errorHandler + ) { + super(cacheWriter, defaultConfiguration, false, cacheConfigurations); + this.errorHandler = errorHandler; + } + + @Override + protected Cache decorateCache(Cache cache) { + return new FailOpenTransactionAwareCacheDecorator(cache, errorHandler); + } + } + + private static final class FailOpenTransactionAwareCacheDecorator extends TransactionAwareCacheDecorator { + + private final CacheErrorHandler errorHandler; + + private FailOpenTransactionAwareCacheDecorator(Cache targetCache, CacheErrorHandler errorHandler) { + super(targetCache); + this.errorHandler = errorHandler; + } + + @Override + public void evict(Object key) { + if (TransactionSynchronizationManager.isSynchronizationActive()) { + TransactionSynchronizationManager.registerSynchronization(new TransactionSynchronization() { + @Override + public void afterCommit() { + evictNow(key); + } + }); + return; + } + evictNow(key); + } + + private void evictNow(Object key) { + try { + getTargetCache().evict(key); + } catch (RuntimeException exception) { + errorHandler.handleCacheEvictError(exception, getTargetCache(), key); + } + } + } } diff --git a/src/test/java/com/dropit/drop/service/DropCacheEvictionFailureIntegrationTest.java b/src/test/java/com/dropit/drop/service/DropCacheEvictionFailureIntegrationTest.java new file mode 100644 index 0000000..b1bca0b --- /dev/null +++ b/src/test/java/com/dropit/drop/service/DropCacheEvictionFailureIntegrationTest.java @@ -0,0 +1,139 @@ +package com.dropit.drop.service; + +import com.dropit.drop.cache.DropDetailCacheReader; +import com.dropit.drop.dto.request.DropUpdateRequest; +import com.dropit.drop.entity.Drop; +import com.dropit.drop.repository.DropRepository; +import com.dropit.global.config.QuerydslConfig; +import com.dropit.global.config.RedisCacheConfig; +import com.dropit.product.entity.Product; +import com.dropit.product.repository.ProductRepository; +import com.dropit.user.entity.User; +import com.dropit.user.entity.UserRole; +import com.dropit.user.repository.UserRepository; +import org.junit.jupiter.api.Test; +import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.boot.data.jpa.test.autoconfigure.DataJpaTest; +import org.springframework.boot.jdbc.test.autoconfigure.AutoConfigureTestDatabase; +import org.springframework.boot.test.context.TestConfiguration; +import org.springframework.cache.Cache; +import org.springframework.cache.CacheManager; +import org.springframework.context.annotation.Bean; +import org.springframework.context.annotation.Import; +import org.springframework.data.redis.connection.RedisConnectionFactory; +import org.springframework.data.redis.connection.RedisStandaloneConfiguration; +import org.springframework.data.redis.connection.lettuce.LettuceClientConfiguration; +import org.springframework.data.redis.connection.lettuce.LettuceConnectionFactory; +import org.springframework.test.context.DynamicPropertyRegistry; +import org.springframework.test.context.DynamicPropertySource; +import org.springframework.transaction.annotation.Propagation; +import org.springframework.transaction.annotation.Transactional; +import org.testcontainers.containers.GenericContainer; +import org.testcontainers.mysql.MySQLContainer; +import org.testcontainers.utility.DockerImageName; + +import java.math.BigDecimal; +import java.time.Duration; +import java.time.LocalDateTime; + +import static org.junit.jupiter.api.Assertions.assertDoesNotThrow; +import static org.junit.jupiter.api.Assertions.assertEquals; +import static org.junit.jupiter.api.Assertions.assertFalse; +import static org.junit.jupiter.api.Assertions.assertNotNull; +import static org.junit.jupiter.api.Assertions.assertThrows; + +@DataJpaTest(properties = "spring.jpa.hibernate.ddl-auto=create-drop") +@AutoConfigureTestDatabase(replace = AutoConfigureTestDatabase.Replace.NONE) +@Import({DropService.class, DropDetailCacheReader.class, QuerydslConfig.class, RedisCacheConfig.class, + DropCacheEvictionFailureIntegrationTest.RedisTestConfig.class}) +@Transactional(propagation = Propagation.NOT_SUPPORTED) +class DropCacheEvictionFailureIntegrationTest { + + private static final MySQLContainer MYSQL = new MySQLContainer("mysql:8.4"); + private static final GenericContainer REDIS = new GenericContainer<>( + DockerImageName.parse("redis:7.4-alpine") + ).withExposedPorts(6379); + + static { + MYSQL.start(); + REDIS.start(); + } + + @Autowired + private DropService dropService; + + @Autowired + private DropRepository dropRepository; + + @Autowired + private ProductRepository productRepository; + + @Autowired + private UserRepository userRepository; + + @Autowired + private CacheManager cacheManager; + + @Autowired + private LettuceConnectionFactory redisConnectionFactory; + + @DynamicPropertySource + static void registerDatasourceProperties(DynamicPropertyRegistry registry) { + registry.add("spring.datasource.url", MYSQL::getJdbcUrl); + registry.add("spring.datasource.username", MYSQL::getUsername); + registry.add("spring.datasource.password", MYSQL::getPassword); + } + + @Test + void redisEvictionFailureAfterCommitDoesNotFailUpdateOrDelete() { + User seller = userRepository.save(new User( + "cache-eviction@test.invalid", + "unused", + "cache-eviction-seller", + UserRole.SELLER + )); + Product product = productRepository.save(new Product(seller, "product", "description", null)); + LocalDateTime openAt = LocalDateTime.now().plusDays(1); + Drop updatedDrop = dropRepository.save(new Drop( + product, BigDecimal.valueOf(1000), 10, 0, 1, openAt, openAt.plusDays(1) + )); + Drop deletedDrop = dropRepository.save(new Drop( + product, BigDecimal.valueOf(2000), 10, 0, 1, openAt, openAt.plusDays(1) + )); + + Cache cache = cacheManager.getCache(RedisCacheConfig.DROP_DETAIL_CACHE); + assertNotNull(cache); + cache.put(updatedDrop.getId(), "cached"); + cache.put(deletedDrop.getId(), "cached"); + REDIS.stop(); + redisConnectionFactory.destroy(); + assertThrows(IllegalStateException.class, redisConnectionFactory::getConnection); + + assertDoesNotThrow(() -> dropService.update( + seller.getId(), + updatedDrop.getId(), + new DropUpdateRequest(BigDecimal.valueOf(1500), null, null, null, null, null) + )); + assertDoesNotThrow(() -> dropService.delete(seller.getId(), deletedDrop.getId())); + + assertEquals(BigDecimal.valueOf(1500), dropRepository.findById(updatedDrop.getId()).orElseThrow().getPrice()); + assertFalse(dropRepository.existsById(deletedDrop.getId())); + } + + @TestConfiguration(proxyBeanMethods = false) + static class RedisTestConfig { + + @Bean + RedisConnectionFactory redisConnectionFactory() { + RedisStandaloneConfiguration redis = new RedisStandaloneConfiguration( + REDIS.getHost(), + REDIS.getMappedPort(6379) + ); + LettuceClientConfiguration client = LettuceClientConfiguration.builder() + .commandTimeout(Duration.ofMillis(200)) + .shutdownTimeout(Duration.ZERO) + .build(); + return new LettuceConnectionFactory(redis, client); + } + } +} From f590744932f9dd3dd8b3eb363b63bda6fc8bec87 Mon Sep 17 00:00:00 2001 From: gustavors88 Date: Tue, 15 Sep 2026 00:43:06 +0900 Subject: [PATCH 93/98] =?UTF-8?q?chore(aws):=20CloudFront=20=EB=8F=84?= =?UTF-8?q?=EB=A9=94=EC=9D=B8=20=ED=99=98=EA=B2=BD=20=EC=84=A4=EC=A0=95=20?= =?UTF-8?q?=EC=B6=94=EA=B0=80?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .env.example | 1 + src/main/resources/application.properties | 3 +++ 2 files changed, 4 insertions(+) diff --git a/.env.example b/.env.example index 3c41bbb..7cb2dd0 100644 --- a/.env.example +++ b/.env.example @@ -12,6 +12,7 @@ JWT_SECRET= AWS_S3_BUCKET= AWS_ACCESS_KEY_ID= AWS_SECRET_ACCESS_KEY= +AWS_CLOUDFRONT_DOMAIN= AWS_SQS_ORDER_QUEUE_URL= AWS_SQS_CONSUMER_ENABLED= diff --git a/src/main/resources/application.properties b/src/main/resources/application.properties index fef4237..834f587 100644 --- a/src/main/resources/application.properties +++ b/src/main/resources/application.properties @@ -19,6 +19,9 @@ management.endpoints.web.exposure.include=health spring.cloud.aws.region.static=ap-northeast-2 spring.cloud.aws.s3.bucket=${AWS_S3_BUCKET} +# CloudFront CDN +app.cdn.domain=${AWS_CLOUDFRONT_DOMAIN} + # SQS - order app.order.sqs.order-queue-url=${AWS_SQS_ORDER_QUEUE_URL:} app.order.sqs.consumer-enabled=${AWS_SQS_CONSUMER_ENABLED:false} From 435760fc2fbc58dab54780c38f4a3d7eb739c5bd Mon Sep 17 00:00:00 2001 From: gustavors88 Date: Tue, 15 Sep 2026 00:43:40 +0900 Subject: [PATCH 94/98] =?UTF-8?q?feat(storage):=20CloudFront=20=EC=9D=B4?= =?UTF-8?q?=EB=AF=B8=EC=A7=80=20URL=20=EB=B0=8F=20=EC=BA=90=EC=8B=9C=20?= =?UTF-8?q?=EC=A0=95=EC=B1=85=20=EC=A0=81=EC=9A=A9?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../dropit/global/storage/S3ImageService.java | 16 +++++++--------- 1 file changed, 7 insertions(+), 9 deletions(-) diff --git a/src/main/java/com/dropit/global/storage/S3ImageService.java b/src/main/java/com/dropit/global/storage/S3ImageService.java index d3f885f..93ecf6f 100644 --- a/src/main/java/com/dropit/global/storage/S3ImageService.java +++ b/src/main/java/com/dropit/global/storage/S3ImageService.java @@ -23,6 +23,8 @@ public class S3ImageService { private static final Duration URL_EXPIRATION = Duration.ofMinutes(10); + private static final String IMAGE_CACHE_CONTROL = "public, max-age=31536000, immutable"; + private static final Map ALLOWED_IMAGE_TYPES = Map.of( "image/jpeg", ".jpg", "image/png", ".png", @@ -34,6 +36,9 @@ public class S3ImageService { @Value("${spring.cloud.aws.s3.bucket}") private String bucket; + @Value("${app.cdn.domain}") + private String cdnDomain; + public String upload(MultipartFile file, String directory) { validate(file); @@ -48,6 +53,7 @@ public String upload(MultipartFile file, String directory) { try { ObjectMetadata metadata = ObjectMetadata.builder() .contentType(contentType) + .cacheControl(IMAGE_CACHE_CONTROL) .build(); s3Template.upload( @@ -87,15 +93,7 @@ public String createPublicUrl(String key) { if (key == null) { return null; } - - try { - S3Resource resource = s3Template.createResource(bucket, key); - return resource.getURL().toString(); - } catch (IOException | SdkException exception) { - throw new ServiceException( - StorageErrorCode.FILE_URL_CREATION_FAILED - ); - } + return "https://" + cdnDomain + "/" + key; } public void deleteQuietly(String key) { From 453dbe8392094ea2eee379dfe84d62ac47e6cc26 Mon Sep 17 00:00:00 2001 From: gustavors88 Date: Tue, 15 Sep 2026 00:44:24 +0900 Subject: [PATCH 95/98] =?UTF-8?q?test(storage):=20CloudFront=20=EC=9D=B4?= =?UTF-8?q?=EB=AF=B8=EC=A7=80=20URL=20=EB=B0=8F=20=EC=BA=90=EC=8B=9C=20?= =?UTF-8?q?=EC=A0=95=EC=B1=85=20=EA=B2=80=EC=A6=9D?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../global/storage/S3ImageServiceTest.java | 30 ++++++++++++------- .../product/service/ProductServiceTest.java | 11 +++++-- .../service/SellerProfileServiceTest.java | 14 +++++++-- 3 files changed, 39 insertions(+), 16 deletions(-) diff --git a/src/test/java/com/dropit/global/storage/S3ImageServiceTest.java b/src/test/java/com/dropit/global/storage/S3ImageServiceTest.java index db2fe2d..c987738 100644 --- a/src/test/java/com/dropit/global/storage/S3ImageServiceTest.java +++ b/src/test/java/com/dropit/global/storage/S3ImageServiceTest.java @@ -64,6 +64,10 @@ void uploadImage() { ); assertEquals(keyCaptor.getValue(), key); assertEquals("image/png", metadataCaptor.getValue().getContentType()); + assertEquals( + "public, max-age=31536000, immutable", + metadataCaptor.getValue().getCacheControl() + ); assertTrue(key.matches("products/100/[\\w-]+\\.png")); } @@ -109,19 +113,25 @@ void createDownloadUrl() throws Exception { } @Test - @DisplayName("이미지 키를 공개 S3 URL로 변환한다") + @DisplayName("이미지 키를 CloudFront CDN URL로 변환한다") void createPublicUrl() throws Exception { - String key = "products/100/image.png"; - URL publicUrl = new URL( - "https://dropit-test.s3.ap-northeast-2.amazonaws.com/products/100/image.png" + ReflectionTestUtils.setField( + s3ImageService, + "cdnDomain", + "d3czchk38dd04k.cloudfront.net" + ); + + String key = + "products/100/image.png"; + + assertEquals( + "https://d3czchk38dd04k.cloudfront.net/products/100/image.png", + s3ImageService.createPublicUrl(key) ); - S3Resource resource = org.mockito.Mockito.mock(S3Resource.class); - when(s3Template.createResource(BUCKET, key)).thenReturn(resource); - when(resource.getURL()).thenReturn(publicUrl); - assertEquals(publicUrl.toString(), s3ImageService.createPublicUrl(key)); - assertNull(s3ImageService.createPublicUrl(null)); - verify(s3Template).createResource(BUCKET, key); + assertNull( + s3ImageService.createPublicUrl(null) + ); } private void assertErrorCode( diff --git a/src/test/java/com/dropit/product/service/ProductServiceTest.java b/src/test/java/com/dropit/product/service/ProductServiceTest.java index d1a0f22..94588ff 100644 --- a/src/test/java/com/dropit/product/service/ProductServiceTest.java +++ b/src/test/java/com/dropit/product/service/ProductServiceTest.java @@ -134,8 +134,13 @@ void getProduct() { ReflectionTestUtils.setField(product, "id", productId); when(productRepository.findById(productId)).thenReturn(Optional.of(product)); - when(s3ImageService.createPublicUrl("products/limited-hoodie.webp")) - .thenReturn("https://public.example.com/limited-hoodie.webp"); + when( + s3ImageService.createPublicUrl( + "products/limited-hoodie.webp" + ) + ).thenReturn( + "https://d3czchk38dd04k.cloudfront.net/products/limited-hoodie.webp" + ); ProductResponse response = productService.getProduct(productId); @@ -145,7 +150,7 @@ void getProduct() { assertEquals("Limited Hoodie", response.getName()); assertEquals("Limited edition hoodie", response.getDescription()); assertEquals( - "https://public.example.com/limited-hoodie.webp", + "https://d3czchk38dd04k.cloudfront.net/products/limited-hoodie.webp", response.getImageUrl() ); } diff --git a/src/test/java/com/dropit/sellerprofile/service/SellerProfileServiceTest.java b/src/test/java/com/dropit/sellerprofile/service/SellerProfileServiceTest.java index 5631848..926ff77 100644 --- a/src/test/java/com/dropit/sellerprofile/service/SellerProfileServiceTest.java +++ b/src/test/java/com/dropit/sellerprofile/service/SellerProfileServiceTest.java @@ -178,13 +178,21 @@ void uploadImage() { .thenReturn(Optional.of(profile)); when(s3ImageService.upload(file, "seller-profiles/1")) .thenReturn("seller-profiles/1/new.png"); - when(s3ImageService.createPublicUrl("seller-profiles/1/new.png")) - .thenReturn("https://public.example.com/new.png"); + when( + s3ImageService.createPublicUrl( + "seller-profiles/1/new.png" + ) + ).thenReturn( + "https://d3czchk38dd04k.cloudfront.net/seller-profiles/1/new.png" + ); SellerProfileResponse response = sellerProfileService.uploadImage(userId, file); assertEquals("seller-profiles/1/new.png", profile.getImageUrl()); - assertEquals("https://public.example.com/new.png", response.imageUrl()); + assertEquals( + "https://d3czchk38dd04k.cloudfront.net/seller-profiles/1/new.png", + response.imageUrl() + ); verify(s3ImageService).upload(file, "seller-profiles/1"); } From 311fd5326b5b23e4fab36b4a0b4be965bd69b3f8 Mon Sep 17 00:00:00 2001 From: Sooyoung Yoon Date: Tue, 15 Sep 2026 09:47:23 +0900 Subject: [PATCH 96/98] =?UTF-8?q?fix(order):=20Redis=20=EC=98=88=EC=95=BD?= =?UTF-8?q?=20=EC=83=81=ED=83=9C=20=EC=A1=B0=ED=9A=8C=20=EC=98=A4=EB=A5=98?= =?UTF-8?q?=20=EC=88=98=EC=A0=95?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../dropit/order/redis/RedisOrderAdmissionAdapter.java | 9 ++++++++- .../order/redis/RedisOrderFlowIntegrationTest.java | 2 ++ 2 files changed, 10 insertions(+), 1 deletion(-) diff --git a/src/main/java/com/dropit/order/redis/RedisOrderAdmissionAdapter.java b/src/main/java/com/dropit/order/redis/RedisOrderAdmissionAdapter.java index f9827fc..a59e3ba 100644 --- a/src/main/java/com/dropit/order/redis/RedisOrderAdmissionAdapter.java +++ b/src/main/java/com/dropit/order/redis/RedisOrderAdmissionAdapter.java @@ -101,7 +101,7 @@ private ReservedOrderSnapshot parseSnapshot(Map values) { new java.math.BigDecimal(required(values, "unitPrice")), Integer.parseInt(required(values, "discountRate")), required(values, "publicationState"), - com.dropit.order.entity.OrderRequestStatus.valueOf(required(values, "status")), + parseStatus(required(values, "status")), optionalLong(values, "orderId"), optional(values, "failureCode"), Long.parseLong(required(values, "expiresAtEpochMillis")) @@ -157,6 +157,13 @@ private static Long optionalLong(Map values, String field) { return value == null || value.isBlank() ? null : Long.valueOf(value); } + private static com.dropit.order.entity.OrderRequestStatus parseStatus(String status) { + if ("RESERVED".equals(status)) { + return com.dropit.order.entity.OrderRequestStatus.PENDING; + } + return com.dropit.order.entity.OrderRequestStatus.valueOf(status); + } + private static OrderAdmissionResult parseResult(String result) { if (result == null) { return OrderAdmissionResult.of(OrderAdmissionResultType.NOT_READY); diff --git a/src/test/java/com/dropit/order/redis/RedisOrderFlowIntegrationTest.java b/src/test/java/com/dropit/order/redis/RedisOrderFlowIntegrationTest.java index 6dc52c8..89f6a00 100644 --- a/src/test/java/com/dropit/order/redis/RedisOrderFlowIntegrationTest.java +++ b/src/test/java/com/dropit/order/redis/RedisOrderFlowIntegrationTest.java @@ -58,6 +58,8 @@ void reserveReplayAndRestoreOnce() { RedisOrderAdmissionAdapter admission = new RedisOrderAdmissionAdapter(redisTemplate); assertEquals(OrderAdmissionResultType.NEW, admission.reserve(request).type()); + assertEquals(com.dropit.order.entity.OrderRequestStatus.PENDING, + admission.getSnapshot(dropId, userId, "hash").status()); assertEquals(OrderAdmissionResultType.REPLAY, admission.reserve(request).type()); assertEquals("1", redisTemplate.opsForValue().get(RedisOrderKeyFactory.stockKey(dropId))); assertEquals("1", redisTemplate.opsForHash().get(RedisOrderKeyFactory.purchaseKey(dropId), "201")); From 9ec91e0f4dfae82d05f29b94d2369de5e8176fc1 Mon Sep 17 00:00:00 2001 From: Sooyoung Yoon Date: Tue, 15 Sep 2026 11:03:44 +0900 Subject: [PATCH 97/98] =?UTF-8?q?ci(deploy):=20API=EC=99=80=20Worker=20ASG?= =?UTF-8?q?=20=EB=B0=B0=ED=8F=AC=20=EB=B6=84=EB=A6=AC?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .github/workflows/ci-cd.yml | 34 ++++++++++++++++++++++++++-------- 1 file changed, 26 insertions(+), 8 deletions(-) diff --git a/.github/workflows/ci-cd.yml b/.github/workflows/ci-cd.yml index 6402fa6..77bd718 100644 --- a/.github/workflows/ci-cd.yml +++ b/.github/workflows/ci-cd.yml @@ -102,6 +102,20 @@ jobs: needs: publish if: github.event_name == 'push' && github.ref == 'refs/heads/main' runs-on: ubuntu-latest + strategy: + fail-fast: false + matrix: + target: + - name: API + launch_template_id: ${{ vars.API_LAUNCH_TEMPLATE_ID }} + asg_name: ${{ vars.API_ASG_NAME }} + consumer_enabled: 'false' + - name: Worker + launch_template_id: ${{ vars.WORKER_LAUNCH_TEMPLATE_ID }} + asg_name: ${{ vars.WORKER_ASG_NAME }} + consumer_enabled: 'true' + + name: Deploy ${{ matrix.target.name }} steps: # Step 1: AWS 자격증명 - OIDC @@ -112,17 +126,18 @@ jobs: aws-region: ${{ vars.AWS_REGION }} # Step 2: Launch Template 새 버전 생성 (User Data의 IMAGE_TAG를 새 커밋 SHA로 교체) - - name: Update Launch Template + - name: Update ${{ matrix.target.name }} Launch Template env: IMAGE_TAG: ${{ needs.publish.outputs.image_tag }} AWS_ACCOUNT_ID: ${{ vars.AWS_ACCOUNT_ID }} AWS_REGION: ${{ vars.AWS_REGION }} ECR_REPOSITORY: ${{ vars.ECR_REPOSITORY }} - LAUNCH_TEMPLATE_ID: ${{ vars.LAUNCH_TEMPLATE_ID }} + LAUNCH_TEMPLATE_ID: ${{ matrix.target.launch_template_id }} + CONSUMER_ENABLED: ${{ matrix.target.consumer_enabled }} run: | ECR_URI="${AWS_ACCOUNT_ID}.dkr.ecr.${AWS_REGION}.amazonaws.com/${ECR_REPOSITORY}" - USER_DATA=$(cat <<'USERDATA' | sed "s|__IMAGE_TAG__|${IMAGE_TAG}|g; s|__AWS_ACCOUNT_ID__|${AWS_ACCOUNT_ID}|g; s|__AWS_REGION__|${AWS_REGION}|g; s|__ECR_REPOSITORY__|${ECR_REPOSITORY}|g" | base64 -w 0 + USER_DATA=$(cat <<'USERDATA' | sed "s|__IMAGE_TAG__|${IMAGE_TAG}|g; s|__AWS_ACCOUNT_ID__|${AWS_ACCOUNT_ID}|g; s|__AWS_REGION__|${AWS_REGION}|g; s|__ECR_REPOSITORY__|${ECR_REPOSITORY}|g; s|__CONSUMER_ENABLED__|${CONSUMER_ENABLED}|g" | base64 -w 0 #!/bin/bash set -e AWS_REGION="__AWS_REGION__" @@ -136,7 +151,10 @@ jobs: systemctl start docker aws ecr get-login-password --region ${AWS_REGION} | docker login --username AWS --password-stdin ${AWS_ACCOUNT_ID}.dkr.ecr.${AWS_REGION}.amazonaws.com docker pull ${ECR_URI}:${IMAGE_TAG} - docker run -d -p 8080:8080 --restart unless-stopped --name ci-demo -e SPRING_PROFILES_ACTIVE=prod ${ECR_URI}:${IMAGE_TAG} + docker run -d -p 8080:8080 --restart unless-stopped --name ci-demo \ + -e SPRING_PROFILES_ACTIVE=prod \ + -e AWS_SQS_CONSUMER_ENABLED=__CONSUMER_ENABLED__ \ + ${ECR_URI}:${IMAGE_TAG} USERDATA ) @@ -156,10 +174,10 @@ jobs: echo "✅ 기본 버전 → v${NEW_VERSION} 변경 완료" # Step 3: Instance Refresh 시작 - - name: Start Instance Refresh + - name: Start ${{ matrix.target.name }} Instance Refresh id: refresh env: - ASG_NAME: ${{ vars.ASG_NAME }} + ASG_NAME: ${{ matrix.target.asg_name }} run: | REFRESH_ID=$(aws autoscaling start-instance-refresh \ --auto-scaling-group-name ${ASG_NAME} \ @@ -174,9 +192,9 @@ jobs: echo "✅ Instance Refresh 시작: ${REFRESH_ID}" # Step 4: Instance Refresh 완료 대기 - - name: Wait for Instance Refresh + - name: Wait for ${{ matrix.target.name }} Instance Refresh env: - ASG_NAME: ${{ vars.ASG_NAME }} + ASG_NAME: ${{ matrix.target.asg_name }} REFRESH_ID: ${{ steps.refresh.outputs.refresh_id }} run: | echo "⏳ Instance Refresh 완료 대기 중..." From 7f69e3ad4add06aeec0910155ff8aacbb33da398 Mon Sep 17 00:00:00 2001 From: Sooyoung Yoon Date: Tue, 15 Sep 2026 12:04:28 +0900 Subject: [PATCH 98/98] =?UTF-8?q?fix(order):=20=EC=B7=A8=EC=86=8C=EB=90=9C?= =?UTF-8?q?=20Redis=20=EC=98=88=EC=95=BD=20=EC=83=81=ED=83=9C=20=EC=9E=AC?= =?UTF-8?q?=EC=A1=B0=ED=9A=8C=20=EC=88=98=EC=A0=95?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../redis/RedisOrderAdmissionAdapter.java | 3 ++ .../redis/RedisOrderFlowIntegrationTest.java | 31 +++++++++++++++++++ 2 files changed, 34 insertions(+) diff --git a/src/main/java/com/dropit/order/redis/RedisOrderAdmissionAdapter.java b/src/main/java/com/dropit/order/redis/RedisOrderAdmissionAdapter.java index a59e3ba..3037228 100644 --- a/src/main/java/com/dropit/order/redis/RedisOrderAdmissionAdapter.java +++ b/src/main/java/com/dropit/order/redis/RedisOrderAdmissionAdapter.java @@ -161,6 +161,9 @@ private static com.dropit.order.entity.OrderRequestStatus parseStatus(String sta if ("RESERVED".equals(status)) { return com.dropit.order.entity.OrderRequestStatus.PENDING; } + if ("CANCELED".equals(status)) { + return com.dropit.order.entity.OrderRequestStatus.SUCCEEDED; + } return com.dropit.order.entity.OrderRequestStatus.valueOf(status); } diff --git a/src/test/java/com/dropit/order/redis/RedisOrderFlowIntegrationTest.java b/src/test/java/com/dropit/order/redis/RedisOrderFlowIntegrationTest.java index 89f6a00..12a70e2 100644 --- a/src/test/java/com/dropit/order/redis/RedisOrderFlowIntegrationTest.java +++ b/src/test/java/com/dropit/order/redis/RedisOrderFlowIntegrationTest.java @@ -74,6 +74,37 @@ void reserveReplayAndRestoreOnce() { assertEquals("0", redisTemplate.opsForHash().get(RedisOrderKeyFactory.purchaseKey(dropId), "201")); } + @Test + @DisplayName("취소된 주문의 Redis 상태는 유지하고 주문 요청은 성공 완료로 조회한다") + void readCanceledOrderAsCompletedRequest() { + long dropId = 102L; + long userId = 202L; + long closeAt = Instant.now().plusSeconds(3600).toEpochMilli(); + redisTemplate.opsForHash().putAll(RedisOrderKeyFactory.saleKey(dropId), Map.of( + "purchaseLimit", "3", "openAt", "0", "closeAt", Long.toString(closeAt), + "productName", "product", "unitPrice", "1000", "discountRate", "0")); + redisTemplate.opsForValue().set(RedisOrderKeyFactory.stockKey(dropId), "1"); + + UUID requestId = UUID.randomUUID(); + OrderAdmissionRequest request = new OrderAdmissionRequest( + requestId, userId, dropId, "canceled-hash", "102:1", 1, + Instant.now().toEpochMilli() * 1_000L); + RedisOrderAdmissionAdapter admission = new RedisOrderAdmissionAdapter(redisTemplate); + assertEquals(OrderAdmissionResultType.NEW, admission.reserve(request).type()); + + RedisOrderFinalizationSyncAdapter finalization = new RedisOrderFinalizationSyncAdapter(redisTemplate); + OrderRequestSyncCommand command = new OrderRequestSyncCommand( + requestId, RedisOrderRequestState.CANCELED, 301L, userId, dropId, + "canceled-hash", 1, null, 1L, Instant.ofEpochMilli(closeAt + 86_400_000L)); + assertEquals(OrderRequestSyncResult.APPLIED, finalization.sync(command)); + + String reservationKey = RedisOrderKeyFactory.idempotencyKey(dropId, userId, "canceled-hash"); + assertEquals("CANCELED", redisTemplate.opsForHash().get(reservationKey, "status")); + ReservedOrderSnapshot snapshot = admission.getSnapshot(dropId, userId, "canceled-hash"); + assertEquals(com.dropit.order.entity.OrderRequestStatus.SUCCEEDED, snapshot.status()); + assertTrue(snapshot.terminal()); + } + @Test @DisplayName("requestId index는 생성과 동시에 절대 만료 시각을 가진다") void indexHasExpiration() {

  • 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�h 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