인프런 커뮤니티 질문&답변

장선희님의 프로필 이미지
장선희

작성한 질문수

자바 동시성 프로그래밍 [리액티브 프로그래밍 Part.1]

다중화된 서버일 경우 비동기 처리 관련 문의

작성

·

353

0

안녕하세요! 비동기 프로그래밍을 해야되는데 너무 어려워서 강의를 등록했습니다!

개인적인 궁금증인데 다중화된 서버일 경우, 비동기 호출하게 되면 리턴을 호출한 서버가 받게 되는걸까요?

아니면 다른 서버가 받을 수도 있는걸까요?

혹시 호출 서버가 받는게 보장된다면 그건 어디서 보장을 해주는 걸까요?

답변 2

0

정수원님의 프로필 이미지
정수원
지식공유자

비동기 호출은 프론트에서 하는 건가요 아니면 백엔드 에서 하는 건가요?

비동기 호출이라 해서 동기 호출과 반환되는 주체가 다르지는 않습니다.

클라이언트가 비동기 호출하게 되면 다중화 서버의 한 서버로부터 호출한 클라이언트가 즉시 응답을 받게 됩니다.

질문을 조금 더 자세하게 주시면 좋을 것 같습니다.

0

안녕하세요, 인프런 AI 인턴입니다.

다중 서버 환경에서 비동기 호출을 했을 때, 호출한 서버가 결과를 받는지에 대한 질문이시군요.

일반적으로 하나의 애플리케이션 내에서 비동기 메서드를 호출하면, 그 호출 결과는 같은 애플리케이션 내의 다른 스레드에서 처리되게 됩니다. 따라서 호출을 시작한 서버 내에서 비동기 작업의 결과를 받게 됩니다.

비동기 작업은 자바에서 Future이나 CompletableFuture을 사용하여 처리할 수 있는데, 이들은 메서드가 바로 반환되고, 실제 작업은 서버 내에서 별도의 스레드 혹은 스레드 풀에서 실행되도록 합니다. 그 결과는 동일 서버 내에서 처리됨이 보장됩니다.

Spring 프레임워크에서 비동기 메서드를 실행하는 데 사용되는 기능에 대한 추가 정보는 아래의 문서에서 찾아볼 수 있습니다.

Spring Data JPA - 비동기 쿼리 처리:
https://docs.spring.io/spring-data/jpa/docs/current/reference/html/#repositories.query-async

Spring Data JDBC - 비동기 쿼리 처리:
https://docs.spring.io/spring-data/jdbc/docs/current/reference/html/#repositories.query-async

여기서 언급된 @Async 어노테이션을 사용한 메서드는 Spring의 TaskExecutor에 의해 실행됩니다. 이러한 비동기 작업은 서버 간에 결과가 이동하는 것이 아니라, 호출을 시작한 해당 서버 내에서의 스레드 풀 내에서 처리된다는 것을 의미합니다.

다만, 분산 시스템에서 외부 서버로의 비동기 호출과 같은 경우에는 메시지 큐, 이벤트 스트림, 혹은 다른 메커니즘이 사용되어야 하고, 호출한 서버와 결과를 받는 서버가 다를 수 있습니다. 이 경우는 다른 방식의 보장 메커니즘이 필요하며, 이는 별도의 컴포넌트나 인프라를 통해 관리됩니다.

당장은 내부적인 비동기 처리에서는 호출한 서버 내에서 결과를 받는 것이 보장된다고 이해하시면 됩니다.

장선희님의 프로필 이미지
장선희

작성한 질문수

질문하기