Graphql mutation 이 두 번 따닥 불리는 경우가 아주 가끔 있는데 관련 이슈를...
# 질문
o
Graphql mutation 이 두 번 따닥 불리는 경우가 아주 가끔 있는데 관련 이슈를 경험해보신 적 있으신가요? 클라는 react-native 에 apollo client 사용하고, 서버는 apollo-server-express 입니다. 디비에 50ms 차이로 두 번 써져서 따닥 문제인 것 같은데... 로그로 파악한 바로는 • 클라에서 버튼은 한 번 눌렸다. (amplitude, 및 자체 firehose 이벤트 로깅에 한 번만 있음) • 서버에 요청은 두 번 들어왔다. (middleware console 에 로그가 두 번 찍힘) 입니다. 서버 구성은 AWS ALB 에 ECS 컨테이너들이 연결되어있습니다. 버튼은 loading 시에 disable 해놨습니다. 물론 DB 에 락을 걸면 해결은 되겠지만, 너무 궁금해서 적어봅니다. AWS 로드밸런서가 두 번 부를 일은 없을거고, 혹시 apollo client 내부에 두 번 불리는 뭔가 있는지 혹은 graphql 과 관련되지 않더라도 살펴보면 좋을 것 같은게 있으면 키워드… 던져주시면 감사하겠습니다. 호출하는 쪽 클라 코드는 다음과 같습니다.
Copy code
const [writeSomething] = useMutation<...>(REQUEST_WRITE_SOMETHING);
const [block, setBlock] = useState(false);

const onPressWrite = () => {
    logEvent("WRITE_SOMETHING_BUTTON_CLICK");
    setBlock(true);
    writeSomething();
}

...
<Button disable={block} onPress={onPressWrite} />
h
apollo client 쓰시면 apollo-link-log 같은거 끼우셔서 request log 찍어보세요
실제로 client 요청 두번 날라갔다면 variable 차이가 있을거같습니다
o
variable 차이라는 말씀은 mutation 의 variable 말씀하시는건가요?
h
아니면 mutation 호출이 명시적으로 두번 일어났거나… 어디서 왜 호출했는지 알아야 하니 클라에서 발생한건지를 클라이언트나 네트워크 로깅해서 확실히 알아야 할 것 같습니다
그냥 브라우저 네트워크 탭에서 확인해보신다거나
아 네이티브앱이라구요
o
네 서버 미들웨어단에서 graphql 필드 이름과 args 를 로깅하는데 두 번 로깅된 내용은 모두 같습니다 ㅠ
h
그거 fetch 요청 크롬 디버거에 붙던가요 붙는거로 기억하는데
o
네 디버거 붙는데 이 따닥이 항상 발생하는게 아니라 2만번중에 3번 발생한거라 재현이 어렵네요 ㅠ
h
…………….?
2만번중에 3번이라는게.. 스트레스 테스트 하듯이 해서 그 빈도로 재현이 계속 되는 상황인가요?
o
아니요! 프로덕션상황에서입니다
서비스 오픈 후 3일동안 2만번의 요청에서 3건이 발생했는데 결제와 연결되어있는거라 조금 민감해서요. 물론 DB 락을 걸어서 해결해야겠지만 왜 이런 현상이 일어나는지 궁금하네요
h
클라이언트 로그까지 다 남기신게 아니면 원인 정확하게 잡는건 어렵지 않을까용… ㅋㅋ;
errorPolicy에서 재시도 설정한거 딱히 없나요
o
errorPolicy 를 all 로 설정해놓은거 말고 제가 따로 커스터마이징 한건 없어요
axios 이슈 관련에 post 요청이 랜덤하게 2번 날아간다는 이슈가 몇 개 있는데 apollo 는 내부적으로 axios 를 쓰는것 같지도 않고…
h
네… 사실 고런 요청은 얼마든지 있을 수 있다고 생각해서 한 세션에서 중복요청 처리할 수 있도록 로직을 짜는게 맞다고 생각해요
일단 apollo 가 문제일것 같진 않네요.
o
아하 넵 감사합니다 조금 더 파봐야겠네요