-
Notifications
You must be signed in to change notification settings - Fork 0
New issue
Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.
By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.
Already on GitHub? Sign in to your account
refactor: 분산락 적용 #99
refactor: 분산락 적용 #99
Conversation
...a/com/nexters/goalpanzi/application/firebase/event/handler/PushNotificationEventHandler.java
Outdated
Show resolved
Hide resolved
private final RedissonClient redissonClient; | ||
|
||
@Around("@annotation(com.nexters.goalpanzi.common.annotation.RedissonLock)") | ||
public void lockMissionVerification(final ProceedingJoinPoint joinPoint) throws Throwable { |
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
빠른 실행력.. 👍
나는 Key 만드는 방식 직관적이라 좋은 것 같은데 어느 부분이 고민이양?
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
메서드 반환 타입 Object
같은 최상위 클래스로 해줘도 좋을 것 같아
추후에 반환 타입있는 메서드에도 사용 가능하도록 ㅎㅎ
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
toString()
으로 Object
싹다 직렬화하니까 key가 너무 길어지는 것 같아서! 괜찮으면 그냥 이대로 둘게!!
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
고생했다 유정 🫡
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
CI 실패하는 건 해당 테스트에서 레디스 사용하는데 컨테이너 실행을 안해줘서 그런 것 같아
@ContextConfiguration(
initializers = {RedisInitializer.class}
) 이거 붙여줘볼랭?
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
@songyi00 옹 언니 덕분에 해결했다!!
근데 @SpringBootTest
붙은 모든 곳에 붙여줘야 정상적으로 동작해서 추후에 개선해봐야 할 것 같아 😢
auto configuration 때문에 spring.redisson.enabled=false
를 해도 RedissonClient
가 기본값으로 빈으로 등록되더라구
@EnableAutoConfiguration
에서 exclude
로 redisson 자동 구성 클래스를 제외해봤는데 redis가 또 redisson에 의존하고 있었어
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
@kimyu0218
이거 다른 통합 테스트는 AcceptanceTest 추상 클래스 상속하고 있어서 따로 추가안해줘도 되긴 하는데
통합 테스트가 아니고 레디스만 필요한 경우라면 어노테이션 따로 만들어도 좋을 것 같아용
d1a3d40
to
b99eef2
Compare
bb60f21
to
82aa997
Compare
Issue Number
close: #96
작업 개요
기존에 사용한 RDBMS 락이 성능 저하의 우려가 있어 리뷰 내용을 바탕으로 분산락을 적용했습니다.
작업 사항
@RedissonLock
어노테이션을 포인트컷으로 AOP를 적용했습니다.MissionMemberEventHandler
에 작성한 푸시 알림 로직을 분리했습니다.고민한 점들(필수 X)
분산락을 재사용할 수 있도록 로직을 작성하다보니 LockKey를 만드는 과정이 못생겼습니다 🥹
현재 락 키의 형식은 다음과 같습니다.
Target
은 인터셉트한 함수의 어노테이션 value값,VALUE
는 인터셉트한 함수의arg.toString()
입니다.조금 더 좋은 방법이 있을까요?
스크린샷(필수 X)
여기에 작성하세요