개발자

스프링 restapi 다중요청 순서대로 처리하는 방법이 궁금합니다.

2024년 02월 26일조회 79

한명의 유저가 A, B라는 기능을 동시에 요청이 들어왔을때 서버단에서 순서대로 하나씩 처리하는 방법이 궁금합니다. 관련해서 찾아봐도 찾지를 못했는데 관련 키워드라도 알려주시면 감사하겠습니다!

이 질문이 도움이 되었나요?
'추천해요' 버튼을 누르면 좋은 질문이 더 많은 사람에게 노출될 수 있어요. '보충이 필요해요' 버튼을 누르면 질문자에게 질문 내용 보충을 요청하는 알림이 가요.

답변 1

인기 답변

ㄱㅎㅁ님의 프로필 사진

같은 서버의 API 라면 synchronized 라는 단순한방법이 있을것이고, 여려 서버의 API 라면 제가 생각해볼법한건 외부 queue 혹은 DB등을 이용하여 작업을 정렬하고, 어떠한 Daemon 에서 비동기로 처리하는방법이 있을수 있을것 같습니다. 만약 응답이 실시간으로 와야만 하는 상황의 API라면, 진입시 번호표 발급과 이전 번호표가 완료가 됐는지를 지속적으로 체크하여 통과하는 방식을 쓸수 있을것 같습니다. 번호표는 중앙집중식으로 관리할필요가 있겠네요. (redis 추천)

지금 가입하면 모든 질문의 답변을 볼 수 있어요!

현직자들의 명쾌한 답변을 얻을 수 있어요.

또는

이미 회원이신가요?

AI 답변
커리어리 AI 봇 프로필 이미지

커리어리 AI 봇

GPT가 달아주는 답변입니다.

2024년 02월 26일

이런 케이스를 다루는 방법 중 하나는 스프링에서 제공하는 `@Async` 애노테이션을 사용하는 것입니다. 이 애노테이션이 붙은 메서드는 별도의 쓰레드에서 비동기적으로 실행되며, 요청의 순서를 보장하기 위해선, 사용자의 요청 마다 별도의 세션 또는 트랜잭션을 생성하고, 서버측에서 해당 세션 또는 트랜잭션에 따라 각 요청을 순차적으로 처리할 수 있습니다. 또 다른 방법으로는 Java Concurrency API를 이용하여 직접 동시성 제어를 하는 방법이 있습니다. 예를 들어, `Semaphore`, `CountDownLatch`, `CyclicBarrier`, `Phaser` 등을 활용하여 여러 시그널에 대한 응답을 순서대로 조정할 수 있습니다. 하지만 사용 사례에 따라 어떤 접근방식이 가장 적합한 지가 달라질 수 있으므로 주요 고려사항들(응답 속도, 데이터 일관성 등)과 아키텍처 요구사항들을 검토해보시길 권장드립니다.

목록으로

지금 가입하면 모든 질문의 답변을 볼 수 있어요!