일기 · 199

  1. 2026
  2. 9월
  3. 09.20 듀오링고리타분위기린
  4. 09.19 반값 설빙
  5. 09.18 우주 전쟁
  6. 4월
  7. 04.19 REBEL HEART
  8. 1월
  9. 01.20 e ∈ F
  10. 01.20 기술개발 진행상황 공유 1
  11. 01.20 기술개발 진행상황 공유 2
  12. 01.20 기술개발 진행상황 공유 3
  13. 01.15 항저우
  14. 2025
  15. 10월
  16. 10.24 어제까지의 이야기
  17. 10.09 돈 벌기
  18. 9월
  19. 09.02 PERFECT BLUE
  20. 8월
  21. 08.31 코코아분말 0.9%
  22. 08.30 WHAT THE
  23. 08.29 문을 닫고 들어오세요
  24. 08.28 하우스도르프 공간
  25. 08.27 All Time Low
  26. 08.26 세상의 끝을 겨눈대도
  27. 08.25 앉은 자리가 꽃자리
  28. 08.24 6과 7 사이 자연수
  29. 08.23 아직 아무 문제도 발견되지 않았습니다
  30. 08.22 Adventure
  31. 08.21 Adobe Creek
  32. 08.20 나의 무가지보(無價之寶)
  33. 08.19 T. Rex
  34. 08.18 누구를 위하여 종은 울리나
  35. 08.17 Sunday Morning
  36. 08.16 일상의 안녕
  37. 08.15 친애하는 우리의 결함에게
  38. 08.14 이것이 있으므로 저것이 있다
  39. 08.13 나는 나의 길을 간다
  40. 08.12 Vanilla Latte
  41. 08.11 그것은 하나의 가까움
  42. 08.10 정복 불허의 공간에
  43. 08.09 쉼 없이 수선하기
  44. 08.08 나는 전설이다
  45. 08.07 철판치즈버거
  46. 08.06 난 포기에 소질 있음
  47. 08.05 스피또런
  48. 08.04 하룻밤 만에
  49. 08.03 세상에 딱 하나뿐인
  50. 08.02 게으름뱅이를 위한 변명
  51. 08.01 북극 백화점
  52. 7월
  53. 07.31 사람은 무엇으로 사는가?
  54. 07.30 KRAFTON Yeoksam Office
  55. 07.29 Slowly flowing day
  56. 07.28 What's this?
  57. 07.28 Architectural Improvements 4
  58. 07.27 Lime Light
  59. 07.26 우리가 기다린 미래
  60. 07.25 Final approach
  61. 07.25 Poster Design Note : Form and Flow
  62. 07.25 Poster Design Note : How We Made It
  63. 07.24 폭풍의 눈
  64. 07.23 IYKYK
  65. 07.22 순살치킨 -> 치킨너겟
  66. 07.21 TRAIN - TRAIN
  67. 07.21 Architectural Improvements 3
  68. 07.21 Logo Design Note : The Logic of Flow
  69. 07.20 어떤 통찰도 지름길로는 얻을 수 없다
  70. 07.20 DeepDive : Many Over Mighty
  71. 07.19 시간이 느리게 가는 건
  72. 07.19 Architectural Improvements 2
  73. 07.19 DeepDive : GC-Triggered Stop-the-World
  74. 07.18 EVEREST
  75. 07.18 Architectural Improvements 1
  76. 07.18 PhantomFlow : High-performance HTTP request simulator
  77. 07.18 Introduction to Project KlickLab
  78. 07.18 What is Clickstream data?
  79. 07.17 깊은 사고는 더 이상 니즈가 없다
  80. 07.16 이기적인 토대 위
  81. 07.15 무엇이든, 언제가는
  82. 07.14 경험을 압축하는 알고리즘은 존재하지 않는다
  83. 07.13 무한한 가능성을 가질 것
  84. 07.12 화려한 거짓을 향해
  85. 07.11 Kentucky Fried Chicken
  86. 07.10 Tropical Blue
  87. 07.09 처음처럼 내 딛는
  88. 07.08 어제와 다른 하늘의 색
  89. 07.07 누군가의 달이었기를
  90. 07.06 아직 뜯지 않은 마음
  91. 07.05 황금의 오솔길
  92. 07.04 우리는 오가는 바람
  93. 07.03 Nic dwa razy
  94. 07.02 Never basic
  95. 07.01 입꼬리올림근
  96. 6월
  97. 06.30 그럼에도 불구하고
  98. 06.29 과잉포장된 자존심
  99. 06.28 E3i3
  100. 06.27 118
  101. 06.26 무한 우주에 순간의 빛일지라도
  102. 06.25 RUSH
  103. 06.24 그래, 우리는
  104. 06.23 The wind blowing low
  105. 06.22 피어나는 마음의 꽃
  106. 06.21 하나는 죽고, 하나는 살았다
  107. 06.20 초속일초
  108. 06.19 씨앗이 가장 고귀한 이유는
  109. 06.18 Evening Primrose
  110. 06.17 마음이 휑뎅그렁할 때
  111. 06.16 하나
  112. 06.15 강철무지개
  113. 06.14 유람
  114. 06.13 13일의 금요일
  115. 06.12 백만 스물하나, 백만 스물둘
  116. 06.11 경안천
  117. 06.10 달이 아름답네요
  118. 06.09 Tampermonkey
  119. 06.08 미르
  120. 06.07 나 평생 꿈만을
  121. 06.06 아르기닌
  122. 06.05 변속주
  123. 06.04 Global Running Day
  124. 06.03 가장 밝은 별
  125. 06.02 천천히
  126. 06.01 circular metal ring
  127. 5월
  128. 05.31 담장과 쪽문
  129. 05.30 투표런
  130. 05.29 출발선
  131. 05.28 Post Traumatic Growth
  132. 05.27 SET
  133. 05.26 READY
  134. 05.25 청복
  135. 05.24 열복
  136. 05.23 강제 푸시 반성합니다
  137. 05.22 유로파
  138. 05.21 떠오름과 저묾
  139. 05.20 Family Friend Fools
  140. 05.19 Time machine
  141. 05.18 맑은 일요일
  142. 05.17 흐린 토요일
  143. 05.16 PTG
  144. 05.15 셋이 만드는 하나
  145. 05.14 Lotte+Cafeteria
  146. 05.13 오십삼
  147. 05.12 일장춘몽
  148. 05.11 𝑬𝒗𝒆𝒓𝒍𝒂𝒏𝒅, 𝑬𝒗𝒆𝒓 𝑴𝒊𝒏𝒅
  149. 05.10 五月雨よ
  150. 05.09 Your Journey Starts Here
  151. 05.08 「권의 속도」
  152. 05.07 Quiet Air
  153. 05.06 놀자판 하루
  154. 05.05 뭔데이
  155. 05.04 After School
  156. 05.03 나침반이 가리킨 곳
  157. 05.02 짧은 하루
  158. 05.01 예고된 악재는 악재가 아니다
  159. 4월
  160. 04.30 Can More
  161. 04.29 초급반
  162. 04.28 감사합니다. 죄송합니다.
  163. 04.27 맥도날드 원정
  164. 04.26 무용(無用)의 쓸모
  165. 04.25 Sunny Day
  166. 04.24 벚나무 아래에서
  167. 04.23 언제나 이타카를 마음에 두라
  168. 04.22 D-100
  169. 04.21 수상한 미용실
  170. 04.20 손으로 컴퓨터를 마주하다
  171. 04.19 비가 오면 빨래를 하자
  172. 04.18 반차
  173. 04.17 발표, 청소, 러닝
  174. 04.16 반티 발주
  175. 04.15 첫 달리기
  176. 04.14 선택과 해석
  177. 04.13 Home Sweet Home
  178. 04.12 人生
  179. 04.11 반티 디자인 공모 & 제출
  180. 04.10 알고리즘의 끝, C언어의 시작
  181. 04.09 하와이안 스테이크
  182. 04.08 Long Chat
  183. 04.07 Es irrt der Mensch, solang' er strebt.
  184. 04.06 마무리
  185. 04.05 움직이는 물체의 시간은 느리게 간다
  186. 04.04 하나의 칼날
  187. 04.03 3x7=21
  188. 04.02 퀴즈 다음날, 시험 전날
  189. 04.01 April Fools' Day
  190. 3월
  191. 03.31 1년의 90번째 날
  192. 03.30 日曜日은 칠요일 중 첫째 날 이다
  193. 03.29 토요일은 주말이 아니다
  194. 03.28 그래프와 치킨버거
  195. 03.27 3주차의 시작
  196. 03.26 기초 다지기
  197. 03.25 기초 다지기 & 정리해야 할 CS 개념들
  198. 03.24 0.44%
  199. 03.23 본가 다녀온 날
  200. 03.22 문제 풀이에 집중한 하루
  201. 03.21 동료학습
  202. 03.20 첫번째 시험
  203. 03.19 먹다가 끝난 하루
  204. 03.18 눈이 쌓이면 버그도 쌓인다
  205. 03.17 깃허브, 팀별 면담, 키워드 공부
  206. 03.16 외출과 배달
  207. 03.15 첫 주말
  208. 03.14 컴퓨팅 사고로의 전환
  209. 03.13 cookie4u.store + 1주차 발제 + 회식
  210. 03.12 디지털 포춘쿠키
  211. 03.11 정글 입성
  212. 03.10 입소 당일

Architectural Improvements 2

Phase 2 아키텍처는 초당 5만 건의 요청을 처리하기 위한 견고한 이론적 기반이었다.

NLB를 통한 수평 확장, MSK를 이용한 데이터 파이프라인 안정화, ClickHouse의 읽기/쓰기 분리까지
그러나 이론 설계와 실제 운영 사이에는 언제나 예상치 못한 변수가 존재했다.

목표치를 달성하는 과정에서 우리는 시스템 깊숙이 숨어 있던 병목들을
데이터 기반으로 파헤치고 해결해야 했다.


문제 1: AWS 서비스 할당량(Service Quota)

현상

프로듀서 Auto Scaling Group(ASG)의 인스턴스 타입을
c6i.xlarge(4 vCPU)로 바꾸고 Desired Capacity를 12대로 설정하자
인스턴스 시작이 반복적으로 실패했다.

분석

ASG 활동 기록에서 다음 오류를 확인했다.

You have requested more vCPU capacity than your current vCPU limit of 64 allows…
  • 12 대 × 4 vCPU = 48 vCPU
  • 기존 인프라(ClickHouse, Bastion 등) 사용량 ≈ 40 vCPU
  • 계정 전체 한도 64 vCPU → 초과

1차 해결

Service Quotas에서 Running On-Demand Standard instances 할당량을 256 vCPU로 상향 신청.

2차 문제 발견

  • 전체 vCPU 사용량이 96 개에 근접 → 인스턴스 교체·확장 여유 0
  • 고성능 아키텍처 운영 시 숨겨진 제약 확인이 필수임을 절감
  • vCPU256 Quota를 256으로 상향해달라고 신청했는데, 96까지만 상향해주었다.

문제 2: 인스턴스 타입의 함정

현상

c6i.xlarge 인스턴스가 안정 구간에서도 RPS가 기대치에 미달.

분석

  • CPU 사용률 < 10 %
  • 네트워크 PPS 그래프만 부하에 비례해 급등
  • 전송량(Bytes) < 대역폭의 5 %
    → 병목은 CPU·대역폭이 아닌 초당 패킷 처리량(PPS)

결론

워크로드는 네트워크 집약적.
컴퓨팅 최적화(c6i) 대신 네트워크 최적화(c6in.xlarge) 가 적합.


문제 3: Node.js의 주기적인 멈춤

현상

5 000 RPS 이상 유지 후 30 초~1 분 간격으로 RPS가 0 부근까지 급락·회복하는 출렁임 발생.

분석

  • 인프라 한계 도달 전 발생 → 애플리케이션 원인 의심
  • 패턴이 Node.js의 가비지 컬렉션(Garbage Collection, GC)에 의한 Stop-the-World 현상과 동일
  • GC 동안 모든 작업 일시 정지 → 서버 응답 불능
  1. 메모리 축적: 초당 5,000개가 넘는 요청이 들어오면서,
    Node.js 프로세스 내부에 처리 대기 중인 데이터(객체)가 메모리에 빠르게 쌓인다.

  2. Stop-the-World: V8 엔진(Node.js의 심장)은 메모리가 특정 한계에 도달하면,
    더 이상 사용하지 않는 메모리를 정리하기 위해 모든 작업을 잠시 멈추는데 이걸 ‘Stop-the-World’라고 부른다.

  3. 요청 실패: 작업이 멈춘 동안에는 들어오는 HTTP 요청에 전혀 응답할 수 없는데,
    이 때문에 NLB는 서버가 죽은 것으로 판단하고,
    클라이언트(phantomflow) 측에서는 타임아웃이 발생하여 실패로 기록된다.
    RPS가 0으로 떨어지는 이유가 바로 이것일 것이다.

  4. 작업 재개: 메모리 정리가 끝나면, V8 엔진은 다시 작업을 재개하고,
    밀려있던 요청들을 처리하기 시작하면서 RPS가 다시 급상승한다.

  5. 1번으로 돌아가 반복


결론 – Phase 3를 위한 과제

단계과제목적
1vCPU 할당량 추가 확보안정적 인스턴스 운영을 위해 150 vCPU+ 로 상향
2인스턴스 타입 변경PPS 병목 해소를 위해 프로듀서를 c6in.xlarge 로 교체
3Node.js 런타임 튜닝--max-old-space-size 로 힙 크기 확장 → GC ‘멈춤’ 완화
4분산 부하 테스트 환경 구축AMI 기반 다수 클라이언트 동원 → 실제 50K RPS 생성 & 한계 측정

이 네 가지 과제를 해결하는 과정이 곧 Architectural Improvements 3가 될 것이다.

댓글