Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
Original file line number Diff line number Diff line change
@@ -1,4 +1,4 @@
package nbc.ticketing.ticket911.common.lock.lettuce;
package nbc.ticketing.ticket911.common.aop;

import java.lang.reflect.Method;
import java.util.UUID;
Expand All @@ -13,7 +13,9 @@
import org.springframework.stereotype.Component;

import lombok.RequiredArgsConstructor;
import nbc.ticketing.ticket911.common.lock.RedissonLock;

import nbc.ticketing.ticket911.common.lock.RedissonMultiLock;
import nbc.ticketing.ticket911.infrastructure.lettuce.LettuceLockManager;
import nbc.ticketing.ticket911.domain.booking.exception.BookingException;
import nbc.ticketing.ticket911.domain.booking.exception.code.BookingExceptionCode;

Expand All @@ -24,7 +26,7 @@ public class LettuceLockAspect {
private final LettuceLockManager lockManager;

@Around("@annotation(redissonLock)")
public Object lock(ProceedingJoinPoint joinPoint, RedissonLock redissonLock) throws Throwable {
public Object lock(ProceedingJoinPoint joinPoint, RedissonMultiLock redissonLock) throws Throwable {
String key = resolveKey(joinPoint, redissonLock);
String lockKey = "lock:" + (redissonLock.group().isEmpty() ? "" : redissonLock.group() + ":") + key;
String lockValue = UUID.randomUUID().toString();
Expand All @@ -41,7 +43,7 @@ public Object lock(ProceedingJoinPoint joinPoint, RedissonLock redissonLock) thr
}
}

private String resolveKey(ProceedingJoinPoint joinPoint, RedissonLock redissonLock) {
private String resolveKey(ProceedingJoinPoint joinPoint, RedissonMultiLock redissonLock) {
MethodSignature signature = (MethodSignature) joinPoint.getSignature();
Method method = signature.getMethod();
String[] parameterNames = signature.getParameterNames();
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -18,7 +18,7 @@

import lombok.RequiredArgsConstructor;
import lombok.extern.slf4j.Slf4j;
import nbc.ticketing.ticket911.common.annotation.RedissonMultiLock;
import nbc.ticketing.ticket911.common.lock.RedissonMultiLock;
import nbc.ticketing.ticket911.domain.lock.LockRedisService;
import nbc.ticketing.ticket911.infrastructure.redisson.exception.LockRedisException;
import nbc.ticketing.ticket911.infrastructure.redisson.exception.code.LockRedisExceptionCode;
Expand Down

This file was deleted.

Original file line number Diff line number Diff line change
Expand Up @@ -7,12 +7,15 @@
import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.Configuration;

import io.lettuce.core.RedisClient;

@Configuration
public class LettuceConfig {
public class RedisConfig {

@Value("${redis.host}")
@Value("${data.redis.host}")
private String redisHost;
@Value("${redis.port}")

@Value("${data.redis.port}")
private int redisPort;

@Bean
Expand All @@ -22,4 +25,9 @@ public RedissonClient redissonClient() {
.setAddress("redis://" + redisHost + ":" + redisPort);
return Redisson.create(config);
}

@Bean
public RedisClient redisClient() {
return RedisClient.create("redis://" + redisHost + ":" + redisPort);
}
}
Original file line number Diff line number Diff line change
Expand Up @@ -5,7 +5,7 @@
import org.springframework.stereotype.Service;

import lombok.RequiredArgsConstructor;
import nbc.ticketing.ticket911.common.lock.lettuce.DistributedLockService;
import nbc.ticketing.ticket911.infrastructure.lettuce.DistributedLockService;
import nbc.ticketing.ticket911.domain.auth.vo.AuthUser;
import nbc.ticketing.ticket911.domain.booking.dto.request.BookingRequestDto;
import nbc.ticketing.ticket911.domain.booking.dto.response.BookingResponseDto;
Expand All @@ -25,6 +25,6 @@ public BookingResponseDto createBookingWithLock(AuthUser authUser, BookingReques
.toList();

return lockService.runWithLock(lockKeys, 10_000L,
() -> bookingService.createBooking(authUser, dto));
() -> bookingService.createBookingLettuce(authUser, dto));
}
}
Original file line number Diff line number Diff line change
Expand Up @@ -7,10 +7,8 @@
import org.springframework.transaction.annotation.Transactional;

import lombok.RequiredArgsConstructor;
import nbc.ticketing.ticket911.common.lock.RedissonLock;
import nbc.ticketing.ticket911.common.lock.lettuce.DistributedLockService;
import nbc.ticketing.ticket911.common.lock.lettuce.LettuceLockManager;
import nbc.ticketing.ticket911.common.annotation.RedissonMultiLock;

import nbc.ticketing.ticket911.common.lock.RedissonMultiLock;
import nbc.ticketing.ticket911.domain.auth.vo.AuthUser;
import nbc.ticketing.ticket911.domain.booking.dto.request.BookingRequestDto;
import nbc.ticketing.ticket911.domain.booking.dto.response.BookingResponseDto;
Expand All @@ -35,7 +33,7 @@ public class BookingService {

@RedissonMultiLock(key = "#bookingRequestDto.seatIds", group = "concertSeat")
@Transactional
public BookingResponseDto createBooking(AuthUser authUser, BookingRequestDto bookingRequestDto) {
public BookingResponseDto createBookingLettuce(AuthUser authUser, BookingRequestDto bookingRequestDto) {

User user = userDomainService.findActiveUserById(authUser.getId());

Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -15,10 +15,10 @@

import jakarta.validation.Valid;
import lombok.RequiredArgsConstructor;
import nbc.ticketing.ticket911.domain.booking.application.BookingFacade;
import nbc.ticketing.ticket911.domain.booking.application.BookingService;
import nbc.ticketing.ticket911.common.response.CommonResponse;
import nbc.ticketing.ticket911.domain.auth.vo.AuthUser;
import nbc.ticketing.ticket911.domain.booking.application.BookingFacade;
import nbc.ticketing.ticket911.domain.booking.application.BookingService;
import nbc.ticketing.ticket911.domain.booking.dto.request.BookingRequestDto;
import nbc.ticketing.ticket911.domain.booking.dto.response.BookingResponseDto;

Expand All @@ -41,6 +41,17 @@ public ResponseEntity<CommonResponse<BookingResponseDto>> createBooking(
.body(CommonResponse.of(true, HttpStatus.CREATED.value(), "예약 성공", bookingResponseDto));
}

@PostMapping("/lettuce")
public ResponseEntity<CommonResponse<BookingResponseDto>> createBookingLettuce(
@AuthenticationPrincipal AuthUser authUser,
@Valid @RequestBody BookingRequestDto bookingRequestDto) {

BookingResponseDto bookingResponseDto = bookingFacade.createBookingWithLock(authUser, bookingRequestDto);

return ResponseEntity.status(HttpStatus.CREATED)
.body(CommonResponse.of(true, HttpStatus.CREATED.value(), "예약 성공", bookingResponseDto));
}

@GetMapping
public ResponseEntity<CommonResponse<List<BookingResponseDto>>> getBookings(
@AuthenticationPrincipal AuthUser authUser) {
Expand Down
Original file line number Diff line number Diff line change
@@ -1,4 +1,4 @@
package nbc.ticketing.ticket911.common.lock.lettuce;
package nbc.ticketing.ticket911.infrastructure.lettuce;

import java.util.List;
import java.util.function.Supplier;
Expand Down
Original file line number Diff line number Diff line change
@@ -1,4 +1,4 @@
package nbc.ticketing.ticket911.common.lock.lettuce;
package nbc.ticketing.ticket911.infrastructure.lettuce;

import java.util.List;
import java.util.function.Supplier;
Expand Down
Original file line number Diff line number Diff line change
@@ -1,4 +1,4 @@
package nbc.ticketing.ticket911.common.lock.lettuce;
package nbc.ticketing.ticket911.infrastructure.lettuce;

import org.springframework.stereotype.Component;

Expand Down
Original file line number Diff line number Diff line change
@@ -1,4 +1,4 @@
package nbc.ticketing.ticket911.common.lock.lettuce;
package nbc.ticketing.ticket911.infrastructure.lettuce;

import java.util.List;
import java.util.UUID;
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -133,7 +133,7 @@ void setupConcertSeat() {
for (int i = 0; i < threadCount; i++) {
executor.submit(() -> {
try {
bookingService.createBooking(authUser, dto);
bookingService.createBookingLettuce(authUser, dto);
results.add("성공");
} catch (BookingException e) {
results.add(e.getErrorCode().name());
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -117,7 +117,7 @@ void ConcurrencyProblem() throws InterruptedException {
for (int i = 0; i < threadCount; i++) {
results.add(executor.submit(() -> {
try {
bookingService.createBooking(authUser, bookingRequestDto);
bookingService.createBookingLettuce(authUser, bookingRequestDto);
return "성공";
} catch (Exception e) {
return "실패: " + e.getMessage();
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -14,7 +14,6 @@
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.ActiveProfiles;

import lombok.extern.slf4j.Slf4j;
import nbc.ticketing.ticket911.domain.auth.vo.AuthUser;
Expand Down Expand Up @@ -117,7 +116,7 @@ void setUp() {

for (int i = 0; i < THREAD_COUNT; i++) {
try {
bookingService.createBooking(authUser, bookingRequestDto);
bookingService.createBookingLettuce(authUser, bookingRequestDto);
log.info("[{}] 예매 성공", Thread.currentThread().getName());
successCount.incrementAndGet();
} catch (Exception e) {
Expand Down
Loading