본문 바로가기

AOP

(2)
[Spring + SDK] 스프링 환경에서 SDK Bean을 관리하기 위한 방법 팀에서 개발중인 서버들이 많아져 공통기능들을 하나로 묶고싶은 니즈가 생겼다.아직 개발중이라 이른감이 있긴 한데 그동안 고민했던 내용을 정리해보겠다. 여러 서버에서 사용하기 위한 기능을 통합하기 위한 방법은 크게 두가지가 있다.1. 모노레포 + 멀티모듈을 통한 코드 관리2. SDK를 통한 독립적 관리 사용 서비스들을 한 레포에 묶을 수만 있으면 1번이 편할 것 같긴한데, 이미 독립적인 레포로 구성되어있는 서비스 코드들을 새로 멀티모듈로 구성할 생각을하면 벌써 가슴이 답답하다. 따라서 2번을 선택하기로 했다. 공통 SDK를 개발하고 사용하기 위해선 이를 저장할 저장소가 필요하다.다행히도 사내에서는 Nexus라는 오픈소스를 래핑한 서비스가 있어서 이를 이용하면 됐기에 별다른 고민없이 이를 사용했다.Nexus ..
[Spring AOP] Custom AOP와 @Transactional Order에 관하여 최근 특정 요청이 중복되어 처리되는 이슈가 발생했다. 어떤 요청의 중복 처리 요청은 우선적으로 클라이언트에서 막아주면 좋지만, 서버는 모든 상황을 대비해야 하기에 이를 사전에 대비해야한다. 배경우리팀은 특정 요청의 중복처리를 방지하기 위해 Redisson 분산락을 활용한다. 서비스 특성상, 어떤 로직이 처리되는 도중 들어오는 중복된 요청은 무시해도 되는 상황이 많기 때문에 다음과 같은 속성을 이용한다. RLock lock = redissonClient.getLock(key);lock.tryLock(0, 60L, TimeUnit.SECONDS)* wait = 0 (이미 다른 곳에서 해당 lock을 점유했다면 대기하지 않고 false 반환)* lease = 60 (lock을 획득한 이후엔 60초 이후 자동 ..