디시인사이드 갤러리

갤러리 이슈박스, 최근방문 갤러리

갤러리 본문 영역

이벤트 루프, 어떤 구성이 최선일까? (4+1가지 아키텍처)

나르시갤로그로 이동합니다. 2025.08.04 15:40:55
조회 87 추천 0 댓글 3

이벤트 루프, 어떤 구성이 최선일까? (4+1가지 아키텍처)

이벤트 루프는 적은 리소스로 높은 동시성(Concurrency)을 처리하기 위한 핵심 디자인 패턴입니다. 하지만 이벤트 루프라고 해서 모두 똑같은 방식으로 동작하는 것은 아닙니다. 애플리케이션의 요구사항에 따라 여러 방식으로 구성할 수 있으며, 각 방식은 뚜렷한 장단점을 가집니다.


1. 단일 스레드 + 입출력 다중화

가장 기본적인 이벤트 루프 모델입니다.

  • 동작 방식: 하나의 스레드 epoll, kqueue, select 등 커널이 제공하는 입출력 다중화 기능을 사용해 여러 개의 소켓(I/O)을 동시에 감시합니다. 이후 준비된(Ready) 소켓의 이벤트만 순서대로 처리하여, I/O 작업으로 인한 대기(Blocking)를 피합니다.

  • 장점:

    • 컨텍스트 스위칭 비용이 없고 메모리 사용량이 매우 적습니다.
    • 스레드 동기화(Synchronization) 같은 복잡한 문제에서 자유롭습니다.
  • 단점:

    • CPU를 많이 사용하는 작업(Heavy computation) 하나가 들어오면 전체 루프가 멈춥니다 (Head-of-Line Blocking).
    • 멀티코어 CPU의 이점을 활용하지 못합니다.
  • 대표 사례: Redis, 초창기 Node.js


2. 단일 스레드 I/O + 워커 스레드

1번 모델의 단점을 보완하기 위한 임시방편적인(Ad-hoc) 방식입니다.

  • 동작 방식: 평소에는 1번처럼 동작하다가, CPU 집약적인 작업이 발생하면 그때그때 새로운 스레드를 생성(spawn)해서 작업을 위임하고, 작업이 끝나면 스레드를 소멸시킵니다.

  • 장점:

    • 가끔 발생하는 CPU 집약적 작업 때문에 이벤트 루프가 멈추는 것을 방지할 수 있습니다.
  • 단점:

    • 스레드를 생성하고 소멸시키는 비용이 매우 큽니다. CPU 집약적인 작업이 빈번하다면 오히려 성능이 저하됩니다.

3. 단일 스레드 I/O + 스레드 풀

가장 널리 사용되는 현대적인 이벤트 루프 모델입니다.

  • 동작 방식: 애플리케이션 시작 시 정해진 개수의 워커 스레드 풀(Thread Pool)을 미리 생성해 둡니다. 메인 스레드는 I/O 이벤트를 처리하다가 CPU 집약적인 작업이 생기면 작업 큐(Task Queue)를 통해 스레드 풀에 작업을 분배합니다.

  • 장점:

    • 스레드를 재사용하므로 생성/소멸 비용이 없습니다.
    • I/O 작업과 CPU 작업을 명확히 분리하여 멀티코어 활용을 극대화합니다. 안정적이고 효율적입니다.
  • 단점:

    • 작업 큐, 스레드 동기화 등 구현 복잡도가 증가합니다.
  • 대표 사례: Node.js, Netty (Java)


4. 멀티 스레드 (연결당 스레드)

전통적인 서버에서 많이 사용하던 방식입니다.

  • 동작 방식: 클라이언트의 연결(Connection)마다 스레드를 하나씩 할당합니다. 각 스레드는 할당된 연결의 작업을 동기적으로 처리합니다.

  • 장점:

    • 개별 스레드는 동기 방식으로 코드를 작성하면 되므로 구현이 직관적이고 간단합니다.
  • 단점:

    • 연결 수가 늘어날수록 스레드도 그만큼 늘어나 메모리 사용량이 막대해집니다.
    • 수많은 스레드로 인한 컨텍스트 스위칭 오버헤드가 심각해져 성능이 저하됩니다. (C10K 문제의 주된 원인)
  • 대표 사례: Apache HTTP Server (prefork/worker MPM)


최종 진화: 3번 모델 + 멀티 프로세스

최고의 성능을 요구하는 서버는 위 모델들의 장점만을 결합한 하이브리드 아키텍처를 채택합니다.

  • 동작 방식:

    1. 서버의 CPU 코어 수만큼 여러 개의 프로세스를 실행합니다.
    2. 각 프로세스는 독자적인 이벤트 루프(3번 모델: 단일 스레드 I/O + 스레드 풀)를 가집니다.
    3. 커널이 들어오는 요청(Connection)을 각 프로세스에 효율적으로 분배합니다.
  • 장점 극대화:

    • 프로세스 단위의 병렬 처리: 멀티코어를 완벽하게 활용하며, 하나의 프로세스가 비정상 종료되어도 다른 프로세스에 영향을 주지 않아 안정성이 높습니다.
    • 프로세스 내부의 높은 효율: 각 프로세스는 검증된 3번 모델을 사용하여 수많은 I/O와 가끔 발생하는 CPU 집약적 작업을 효율적으로 동시에 처리합니다.

이 구조는 사실상 현대 고성능 서버 아키텍처의 표준으로, 처리 능력을 극한까지 끌어올리는 가장 효과적인 방법입니다.

추천 비추천

0

고정닉 0

0

댓글 영역

전체 댓글 0
본문 보기

하단 갤러리 리스트 영역

왼쪽 컨텐츠 영역

갤러리 리스트 영역

갤러리 리스트
번호 제목 글쓴이 작성일 조회 추천
설문 시구, 시축 했다가 이미지가 더 나빠진 스타는? 운영자 25/08/11 - -
AD 가전디지털, 휴대폰 액세서리 SALE 운영자 25/08/08 - -
2879850 미국의 양당정치 스펙트럼 발명도둑잡기갤로그로 이동합니다. 08.10 42 0
2879849 이 씨발 씨플플이 쉽다는 개새끼들 진짜 이해가안가네 [5] 프갤러(210.99) 08.09 103 0
2879845 가진것도, 배운것도 없는 23살 인생에 연봉 2600받는것이 꿈입니다.. [1] ㅇㅇ(223.39) 08.09 113 0
2879839 멍퀴를 본 슬기 표정.. [4] ♥냥덩이♥갤로그로 이동합니다. 08.09 107 0
2879837 에구구.. [2] ♥냥덩이♥갤로그로 이동합니다. 08.09 69 0
2879834 1 시갼 남ㅇ음~!!!!!!! ㅇㅇ(106.101) 08.09 57 0
2879833 애들한테 저수준 강요하는 강사들보면 혐오감 들수밖에 없는게 뭐냐면 [3] ㅆㅇㅆ(124.216) 08.09 148 0
2879832 저수준은 잘하면 좋은데 먹고 사는길이 너무 좁음 [4] ㅆㅇㅆ(124.216) 08.09 107 0
2879831 ‘쎈캐’ 홍기준 맞아? 세상 물정 모르는 ‘어수룩’ 완벽 변신 발명도둑잡기갤로그로 이동합니다. 08.09 67 0
2879830 근래 저수준 해보면서 느끼는건데 [2] 루도그담당(58.239) 08.09 103 0
2879829 <파인> 홍기 발명도둑잡기갤로그로 이동합니다. 08.09 74 0
2879828 이상한 회사 존나많네.. [4] 프갤러(222.96) 08.09 94 0
2879827 물론 언어마다 동시성 모델 차이나 내부적인 구현 좀 다르긴한 ㅆㅇㅆ(124.216) 08.09 69 0
2879825 깊게 따지고보면 세부구현은 다른데 막상 표현식이 비슷함 [2] ㅆㅇㅆ(124.216) 08.09 86 0
2879824 내가 공부해둘려고 언어 공통 매핑표 만들어놨는데 ㅆㅇㅆ(124.216) 08.09 64 0
2879823 근데 나이가 드니까 언어 바꿔 끼는데 거리낌이 없어짐. 이유가 [2] ㅆㅇㅆ(124.216) 08.09 110 0
2879822 ai시대인데 혁신적인것들이 없음 뒷통수한방(1.213) 08.09 59 0
2879821 Swagger 작성 제대로 해야하는데 영 쉽지 않다 [2] ㅆㅇㅆ(124.216) 08.09 85 0
2879815 TEMPEST 전자파 도청 글도 여러번 썼는데 검열삭제 당했다 발명도둑잡기갤로그로 이동합니다. 08.09 55 0
2879812 예전에 올렸던.북극성 노래 발명도둑잡기갤로그로 이동합니다. 08.09 48 0
2879810 고1 심심해서 만들어본거 [9] 프갤러(116.121) 08.09 316 3
2879809 구글에 돈을 갖다 바치는 중 [2] 뉴진파갤로그로 이동합니다. 08.09 94 1
2879807 Dis어샘bly 곧 저승에서 보자. 넥도리아(220.74) 08.09 65 0
2879806 프로그래밍 언어 플레임 [1] 발명도둑잡기갤로그로 이동합니다. 08.09 79 0
2879805 외주의뢰로 nest.js 공부중인데 [3] ㅆㅇㅆ찡갤로그로 이동합니다. 08.09 110 0
2879803 야이 개 ㅆ ㅣ빨썌끼뜰아!!!!!!!!!!!!!!! [1] 프갤러(121.139) 08.09 72 1
2879802 토요일이 끝나간다 [1] 개멍청한유라갤로그로 이동합니다. 08.09 65 0
2879799 안녕히 계세요 여러분-! 핸폰 메인폰 2023년 폰 살리기 위해서 가위 넥도리아(220.74) 08.09 58 0
2879798 여..여자라면.. 조금은 부끄러운줄 알라구우웃!! [4] ♥냥덩이♥갤로그로 이동합니다. 08.09 86 0
2879797 드라마 <북극성> 한대서 생각나는 예전 글 발명도둑잡기갤로그로 이동합니다. 08.09 55 0
2879796 나님 누엇어양❤+ [1] ♥냥덩이♥갤로그로 이동합니다. 08.09 60 0
2879794 흠.. 애널은 디깅 수확물이 없군.. ♥냥덩이♥갤로그로 이동합니다. 08.09 56 0
2879791 오늘의 소설, 영화, 발명 실마리: 인스타그램 만명 동의시 강제 생방 [1] 발명도둑잡기갤로그로 이동합니다. 08.09 64 0
2879782 장애인 애자새끼들아 언어 투표해바라 프갤러(121.139) 08.09 64 0
2879781 이 사이트 때문에 프갤 망한 것인가요?.. [5] +abcd3421갤로그로 이동합니다. 08.09 100 0
2879780 라면먹을건데 뭐먹을까? 개새끼야? 프갤러(121.139) 08.09 50 0
2879779 나님 망가 좀 보다 주무실양갱 ♥냥덩이♥갤로그로 이동합니다. 08.09 53 0
2879778 gc언어 안쓰는 새끼가 더멍청한 씹장애인이지 [1] 프갤러(121.139) 08.09 76 1
2879776 ❤✨☀⭐⚡☘⛩나님 시작합니당⛩☘⚡⭐☀✨❤ ♥냥덩이♥갤로그로 이동합니다. 08.09 49 0
2879774 ada 모르면서 빨다니 한심하네 프갤러(211.234) 08.09 60 0
2879773 지하철 한칸 버스 한칸에 역겨운 인간 하나씩 있는건 당연 프갤러(61.106) 08.09 52 0
2879772 CRUD는 팩토리 패턴으로 간단히 만드는데 CQRS는 도메인특화다보니 [2] ㅆㅇㅆ(124.216) 08.09 84 0
2879768 코린이 그냥 ㅈ됨 1일차 프갤러(182.231) 08.09 87 0
2879764 다음생이 있으면 참새도 좋으니 새로 태어나고싶다 [1] 뒷통수한방(1.213) 08.09 61 0
2879763 토스 코테를 목표로 스터디 하는 것은 무리인 듯 프갤러(110.13) 08.09 164 0
2879762 책 쓰는게 프밍보다 어렵구나 나르시갤로그로 이동합니다. 08.09 53 0
2879759 냥덩이 조직적 스토킹, 도청 당한다고 주장 발명도둑잡기갤로그로 이동합니다. 08.09 52 0
2879757 잊지마 [1] ♥냥덩이♥갤로그로 이동합니다. 08.09 73 0
2879751 나는조현병이야 나는내향적이야 손발이시립디다갤로그로 이동합니다. 08.09 54 0
2879750 클로드(코드아님)은 어떰? 프갤러(221.167) 08.09 49 0
뉴스 '비 마이 보이즈' 동방신기 유노윤호, 마지막 4라운드 TOP 아이돌로 출연 확정! 디시트렌드 08.15
갤러리 내부 검색
제목+내용게시물 정렬 옵션

오른쪽 컨텐츠 영역

실시간 베스트

1/8

뉴스

디시미디어

디시이슈

1/2