반응형
유튜브 "메타코딩" 강의를 학습하고 정리 목적으로 작성하였습니다.
https://www.youtube.com/watch?v=o6t2Q017J-s&list=PL93mKxaRDidFH5gRwkDX5pQxtp0iv3guf&index=4
Reactive Programming 배경 이해하기
상황 설명
- A가 현재 시간이 궁금하여 B에게 몇 시인지 물어본다.
- B에게 응답을 받을 때까지 멍 때리는 시간, 즉 죽는 시간(아무것도 못하는 시간)이 발생한다.
- B는 시간을 알려주기 위해서 시간을 알고 있는 C에게 다시 몇 시인지 물어본다.
- B 또한 C에게 응답을 받을 때까지 죽는 시간이 발생한다.
동기 통신의 문제점
- A, B 입장에서 요청을 받기 전까지 죽는 시간 동안 다른 작업을 할 수 없는 문제가 있습니다.
- 응답을 기다리는 동안 계속해서 통신이 연결되어 있어야 합니다.
Spring WebFlux
첫 그림을 서버 통신으로 비유하자면 A는 Client, B는 Server, C는 Database로 생각할 수 있습니다.
- A: Client (클라이언트 및 프론트)
- 클라이언트 측은 간단히 JS를 통해 비동기 통신 처리 (서버에서 신경 쓸 부분 X)
- B : Server (서버)
- A에게 요청을 받으면 C에게 데이터 요청함
- C에 요청을 기다리는 멍 때리는 시간이 있으면, 다른 클라이언트의 요청을 받지 못하는 문제가 있음!!
- 기존에는, 스레드를 늘려 타임 슬레이싱 했음
- 컨텍스트 스위칭 하는데 시간이 많이 걸리는 문제가 있음
- A에게 요청을 받으면 C에게 데이터 요청함
컨텍스트 스위칭이란,
운영 체제가 현재 실행 중인 프로세스를 중지하고 다른 프로세스를 실행하기 위해 스위칭하는 작업을 의미합니다.
주요 요소
프로세스 상태 저장 : 현재 실행 중인 프로세스의 상태(레지스타, 프로그램 카운터 등)를 저장합니다.
새 프로세스 상태 코드 : 다음에 실행할 프로세스의 상태를 로드합니다.
프로세스 전환 : CPU를 새 프로세스에 할당하여 실행을 준비합니다.
컨텍스트 스위칭을 통해 CPU 자원을 효율적으로 사용하고 여러 프로세스가 타임을 슬레이싱하여 동시에 실행되는 것처럼 보이게 해줍니다. 하지만 너무 자주 발생하게 되면, 오버헤드가 발생하며 시스템 성능에 저하를 일으킬 수 있습니다.
컨텍스트 스위칭으로 해결할 수 있지만,
스레드를 더 효율적으로 사용하기 위해서 비동기 통신으로 처리하면 해결됨
비동기 통신 처리 과정
- A가 B에게 요청을 보내면, B는 C에게 요청을 보냅니다. (여기까지는 위에서 말한 통신과 비슷합니다.)
- 바로 응답하지 못하는 경우 C는 B에게 대기 시간을 응답하고, B도 A에게 대기 시간을 응답합니다.
- 대기 시간을 "이벤트 루프"에 기록하여 요청 정보를 저장합니다.
- A나 B는 응답을 기다리면서, 다른 작업을 처리할 수 있습니다. 이벤트 루프에 있는 이벤트를 하나씩 처리하고 완료되면 응답을 전달받습니다.
비동기 통신 처리 방법 정리
- 이벤트 루프를 이용하여 바로 처리하지 못하는 이벤트 정보를 기록합니다.
- 비동기 통신으로 이벤트를 처리한 후 클라이언트가 응답을 받을 수 있게 응답을 유지해야 합니다.
- Stream 유지
- Stream이란 요청-응답과 같이 통신이 물 흐르듯 끊기지 않게 하는 것
- WebSocket 사용 (연결을 계속 유지하는 방법)
- SSE 프로토콜 (요청은 연결은 필요 없고, 응답 연결만 필요한 경우)
반응형
'Spring Framework > Spring' 카테고리의 다른 글
[Spring] MessageSource, messages_en.properties 파일에서 작은 따옴표 및 특수 문자 처리 오류 해결 방법 (2) | 2024.10.03 |
---|---|
[Spring] Spring으로 HTML 파일 PDF 변환, 다운로드하기 - 한글 깨짐 문제, Thymeleaf, PDF 변환 해결 (0) | 2024.07.30 |
[Spring Cloud] Spring Config Server를 이용해 설정 파일 관리하기 (0) | 2024.04.01 |
[Spring Cloud] Eureka Server, Discovery Service 이해하기 (0) | 2024.03.31 |
[Spring] Spring CORS 설정 & 이슈 해결 및 웹 애플리케이션 통신 이해하기 (0) | 2024.02.24 |