본문 바로가기
Architecture/MSA

멱등성 이란 ? idempotent

by Bill Lab 2025. 2. 18.
728x90

멱등성이란 무엇인가?

: 연산을 여러번 적용하더라도 결과는 달라지만 안된다!

 

이게 무슨 말인가?

아래와 같은 상황이 있다고 가정해보자

 

1. 사용자의 클릭 따닥!(한번 클릭을 했음에도 불구하고 실수 또는 화면변화가 없어 확인차 한번더 클릭을 하는 경우)

2. MQ 의 사용으로 crash(충동) 이 났을때

 

위의 두경우 백엔드 서비스 로직에서 한번만 실행되어야하는 로직이 2번 이상 요청이 되어질 수 있다.

이때, 동일한 요청에 대해 처리 되었을 때 이를 중복으로 간주하고 "한번만 실행되도록 하는 것이 바로 멱등성"이란 것이다!

 

그럼 어떻게 적용을 할 것인가? 

Transaction Id 와 같은 값을 할당해서 이게 중복요청임을 알려야한다.

 

기존 로직에서 이미 동일한 Transaction Id 가 있을 경우, 로직을 타지 않고 "중복"으로 early return 하는 방식이다.

Transactional outbox pattern 적용 때도 동일하다.

outbox table 내에 init status 가 정상 처리되지 않고 batch 나 스케줄러로 인해 한번더 호출되는 경우, 동시에 kafka 내에서 crash 가 해결되고 consumer 가 두번이상 호출 되어질 수 있다. 

이럴때 outbox table 내 id 값으로 이게 중복인지 아닌지 여부를 파악할 수 있다.

즉, outbox 내 id 값으로 조회된 status 가 여전히 init 상태를 유지하고 있는지 또는 proceed 로 status가 변경되었는지를 확인하면 된다.

(status 가 init 이 아니면 이미 처리된 건으로 간주하고 early return 시키면 된다.)

 

728x90

'Architecture > MSA' 카테고리의 다른 글

MSA로 왜 넘어가는가?? feat. MSA 장점  (1) 2024.08.21