티스토리 뷰

728x90
반응형

목차

     

    이전 글에서 NGINX에 대해 개괄적으로 공부할 때 이벤트 루프(Event Loop)라는 것이 등장한 적이 있다.

     

    2023.03.07 - [Development/Network] - [Network]NGINX 튜토리얼

     

    [Network]NGINX 튜토리얼

    여기저기에서 이름은 많이 주워들은 엔진엑스. 좋다! 빠르다! 가볍다! 길래 쓰지 않을 이유가 없어 보여 한 번 써볼까 하고 기웃거리는 것이 이 글의 목적이다. 엔진엑스는 2004년 10월, 러시아에

    gnidinger.tistory.com

    이번 글에서는 웹플럭스에서도 사용되는 이벤트루프와 네티(Netty)에 대해 훑어보자.

     

    Event Loop

     

    이벤트 루프란 한 마디로 정의하면 비동기 처리를 위해 사용되는 단일 스레드이자 메인 루프라고 할 수 있다.

     

    단어 몇 개를 먼저 요약하고 지나가자.

     

    Main Loop

     

    메인 루프는 이벤트 루프를 실행시키고 작업을 제공하는 스레드를 가리킨다.

     

    크게 다음과 같은 작업을 수행하며,

     

    • 이벤트 루프 생성 및 실행
    • 새로운 이벤트(콜백 함수)의 등록을 주기적으로 확인 및 등록된 이벤트 실행

    스프링 웹플럭스의 경우 웹플럭스가 메인 루프의 역할을 맡고

     

    네티(Netty)라이브러리에서 제공하는 이벤트 루프를 사용한다.

     

    Callback Function

     

    콜백 함수란 다른 파라미터로 함수를 전달받아 구동되는 함수를 가리킨다.

     

    예를 들면 좋아요 기능을 구현할 때 이벤트를 입력받아 처리하는 함수를 구현했다면 바로 그것이 콜백 함수이다.

     

    함수 자체를 인자로 넘겨받아 전달하는 특성 때문에 콜백 함수는 비동기 처리에 강점을 보이기 때문에

     

    여기서는 함수 호출과 함께 이벤트 루프에 등록되어 이벤트 발생 시마다 호출되는 함수를 가리킨다.

     

    물론 결과에 따라 값이나 예외를 반환하며, 이 결과는 메인 스레드로 전달된다.

     

    추가로 이벤트 루프의 콜백 함수는 크게 아래와 같이 구성되어 있다.

     

    • 이벤트를 감지하는 파트
    • 이벤트 발생시 실행되는 파트

     


    정리하면 이벤트 루프란

     

    • 이벤트(Event) - 일련의 신호라고 볼 수 있음
    • 콜백 함수(Callback Function) - 해당 이벤트를 처리하기 위한 함수

    로 이루어져 있으며, 이를 비동기, 논블로킹으로 콜백함수에 분해하여 처리하기 때문에

     

    적은 스레드에서도 높은 처리량과 빠른 응답속도를 확보할 수 있어 대규모 트래픽 환경에서 유리하게 작용한다.

     

    또한 논 블로킹 방식이 아닌 블로킹 방식의 작업은 스레드풀에서 처리한다고 한다.

     

    추가로 실제 작업을 처리하는 워커 프로세스(스레드)는 기본적으로 CPU 코어와 개수가 같으며

     

    고성능을 위해 Context-Switching을 최소화 하며 비동기 처리를 하도록 짜여 있다.

     

    프로세스라 불리지만 기본적으로는 스레드라 자원도 일정부분 공유하고 있다.

     

    Netty

     

    네티(Netty)는 자바를 기반으로 한 비동기 이벤트 네트워크 애플리케이션 프레임워크이다.

     

    위에 적었듯이 웹플럭스에서 이벤트 루프를 담당하는 스레드를 제공하기도 하며,

     

    아래와 같은 특징을 가진다.

     

    • 비동기 이벤트 기반 - I/O 발생시 콜백함수를 등록 후 호출하는 이벤트 루프 방식. 높은 처리량을 가짐
    • 고성능 - 대용량 트래픽 처리에 최적화. 역시 이벤트 루프와 스레드를 직접 효율적으로 관리함
    • 모듈화 - 잘 구성된 모듈화 덕분에 필요한 모듈만 선택해서 사용 가능. 따라서 자원 소모는 낮아지고 성능은 올라감
    • 다양한 프로토콜 - HTTP, TCP, UDP, WebSocket, RSocket 등을 지원

    웹플럭스, RSocket과 함께 사용하면 대규모 트래픽 처리를 필요로 하는 앱 개발에 큰 도움이 된다.

    반응형
    댓글
    공지사항
    최근에 올라온 글
    최근에 달린 댓글
    Total
    Today
    Yesterday
    링크
    «   2024/06   »
    1
    2 3 4 5 6 7 8
    9 10 11 12 13 14 15
    16 17 18 19 20 21 22
    23 24 25 26 27 28 29
    30
    글 보관함