전체 · 248
  1. 2026
  2. 블로그를 시작하며2026.06.11
  3. 글 쓰는 법 (샘플 글)2026.06.10
  4. [0419] REBEL HEART2026.04.19
  5. [0115] 항저우2026.01.22
  6. e ∈ F2026.01.20
  7. 기술개발 진행상황 공유 12026.01.20
  8. 기술개발 진행상황 공유 22026.01.20
  9. 기술개발 진행상황 공유 32026.01.20
  10. 『실패를 통과하는 일』2026.01.16
  11. 2025
  12. Kittyy & The Class - I'm Not Remarkable2025.12.12
  13. 『싯다르타』2025.10.26
  14. [1024] 어제까지의 이야기2025.10.24
  15. The killers - Shot At the night2025.10.24
  16. 『학문의 즐거움』2025.10.20
  17. 심통봇 - GHOSTagram2025.10.12
  18. [1009] 돈 벌기2025.10.09
  19. My Chemical Romance - Welcome To The Black Parade2025.09.13
  20. [0902] PERFECT BLUE2025.09.11
  21. [0831] 코코아분말 0.9%2025.09.10
  22. TUBE - The Season In The Sun2025.09.10
  23. [0830] WHAT THE2025.09.08
  24. [0829] 문을 닫고 들어오세요2025.09.06
  25. [0828] 하우스도르프 공간2025.09.02
  26. [0827] All Time Low2025.08.30
  27. Ado - The World’s Continuation2025.08.30
  28. [0826] 세상의 끝을 겨눈대도2025.08.29
  29. [0825] 앉은 자리가 꽃자리2025.08.28
  30. 『생각 좀 하며 세상을 보자』2025.08.27
  31. [0823] 아직 아무 문제도 발견되지 않았습니다2025.08.26
  32. [0824] 6과 7 사이 자연수2025.08.26
  33. [0822] Adventure2025.08.25
  34. [0821] Adobe Creek 2025.08.24
  35. [0820] 나의 무가지보(無價之寶)2025.08.22
  36. [0819] T. Rex2025.08.21
  37. [0818] 누구를 위하여 종은 울리나2025.08.20
  38. HUNTR/X - What It Sounds Like2025.08.20
  39. [0817] Sunday Morning2025.08.19
  40. [0816] 일상의 안녕2025.08.18
  41. [0815] 친애하는 우리의 결함에게2025.08.16
  42. [0814] 이것이 있으므로 저것이 있다2025.08.15
  43. [0813] 나는 나의 길을 간다2025.08.14
  44. 『초신성의 후예』2025.08.14
  45. [0812] Vanilla Latte2025.08.13
  46. Aimer - 蝶々結び (나비매듭)2025.08.13
  47. [0811] 그것은 하나의 가까움2025.08.12
  48. [0810] 정복 불허의 공간에2025.08.11
  49. Vaundy - 踊り子 (무희)2025.08.11
  50. [0809] 쉼 없이 수선하기2025.08.10
  51. [0806] 난 포기에 소질 있음2025.08.09
  52. [0808] 나는 전설이다2025.08.09
  53. [0807] 철판치즈버거2025.08.09
  54. [0805] 스피또런2025.08.07
  55. 『나는 포기를 모른다』2025.08.07
  56. [0804] 하룻밤 만에2025.08.05
  57. [0803] 세상에 딱 하나뿐인2025.08.05
  58. Myuk - Black Sheep2025.08.04
  59. [0802] 게으름뱅이를 위한 변명2025.08.03
  60. 『심장보다 높이』2025.08.03
  61. [0801] 북극 백화점2025.08.02
  62. Myuk - Gift2025.08.02
  63. 『누가 내 치즈를 옮겼을까?』2025.08.02
  64. [0731] 사람은 무엇으로 사는가?2025.08.02
  65. [0730] KRAFTON Yeoksam Office2025.07.31
  66. [0729] Slowly flowing day2025.07.30
  67. [0728] What's this?2025.07.30
  68. Tani Yuuki - W/X/Y2025.07.30
  69. [0726] 우리가 기다린 미래2025.07.28
  70. [0727] Lime Light2025.07.28
  71. Architectural Improvements 42025.07.28
  72. [0722] 순살치킨 -> 치킨너겟2025.07.27
  73. [0723] IYKYK2025.07.27
  74. [0724] 폭풍의 눈2025.07.27
  75. [0725] Final approach2025.07.27
  76. [0721] TRAIN - TRAIN2025.07.25
  77. Poster Design Note : Form and Flow2025.07.25
  78. Poster Design Note : How We Made It2025.07.25
  79. [0719] 시간이 느리게 가는 건2025.07.24
  80. [0720] 어떤 통찰도 지름길로는 얻을 수 없다2025.07.24
  81. [0718] EVEREST2025.07.23
  82. [0715] 무엇이든, 언제가는2025.07.21
  83. [0716] 이기적인 토대 위2025.07.21
  84. [0717] 깊은 사고는 더 이상 니즈가 없다2025.07.21
  85. Architectural Improvements 32025.07.21
  86. Logo Design Note : The Logic of Flow2025.07.21
  87. DeepDive : Many Over Mighty2025.07.20
  88. JINI - Bad Reputation2025.07.20
  89. Architectural Improvements 22025.07.19
  90. DeepDive : GC-Triggered Stop-the-World2025.07.19
  91. [0714] 경험을 압축하는 알고리즘은 존재하지 않는다 ⏳2025.07.18
  92. Architectural Improvements 12025.07.18
  93. PhantomFlow : High-performance HTTP request simulator2025.07.18
  94. Introduction to Project KlickLab2025.07.18
  95. What is Clickstream data?2025.07.18
  96. Official HIGE DANdism - Universe2025.07.15
  97. [0712] 화려한 거짓을 향해2025.07.14
  98. [0711] Kentucky Fried Chicken 🍗2025.07.14
  99. [0713] 무한한 가능성을 가질 것2025.07.14
  100. [0710] Tropical Blue 🌊2025.07.14
  101. 『료의 생각 없는 생각』2025.07.14
  102. [0707] 누군가의 달이었기를 🌕2025.07.11
  103. [0708] 어제와 다른 하늘의 색2025.07.11
  104. [0709] 처음처럼 내 딛는2025.07.11
  105. [0706] 아직 뜯지 않은 마음 🎁2025.07.08
  106. Furui riho - Hello2025.07.08
  107. [0705] 황금의 오솔길2025.07.07
  108. [0704] 우리는 오가는 바람2025.07.05
  109. noa - A8番出口 (A8번출구)2025.07.05
  110. [0703] Nic dwa razy2025.07.04
  111. [0702] Never basic2025.07.03
  112. [0701] 입꼬리올림근2025.07.02
  113. [0630] 그럼에도 불구하고2025.07.02
  114. MEOVV - DROP TOP2025.07.02
  115. [0628] E3i3 🛫2025.06.29
  116. [0629] 과잉포장된 자존심2025.06.29
  117. Steve Winwood – Higher Love2025.06.29
  118. 『어린 왕자』2025.06.29
  119. [0627] 118 ✨2025.06.28
  120. [0626] 무한 우주에 순간의 빛일지라도 🌌2025.06.28
  121. [0625] RUSH2025.06.27
  122. [0624] 그래, 우리는2025.06.26
  123. Mercury Rev - Holes2025.06.26
  124. Cloudybay - 내게로2025.06.25
  125. [0623] The wind blowing low2025.06.24
  126. 『이건 다만 사랑의 습관』2025.06.24
  127. [0622] 피어나는 마음의 꽃2025.06.23
  128. [0621] 하나는 죽고, 하나는 살았다 💡2025.06.23
  129. 『생각 망치』2025.06.23
  130. [0620] 초속일초2025.06.21
  131. 『2025 제16회 젊은작가상 수상작품집』2025.06.21
  132. [0619] 씨앗이 가장 고귀한 이유는2025.06.20
  133. [0617] 마음이 휑뎅그렁할 때2025.06.18
  134. [0618] Evening Primrose 🏵️2025.06.18
  135. [0616] 하나2025.06.17
  136. [0615] 강철무지개2025.06.16
  137. Vaundy - しわあわせ (주름 맞추기)2025.06.16
  138. [0613] 13일의 금요일 ⏰2025.06.15
  139. [0614] 유람 🚉2025.06.15
  140. Will Ye Go, Lassie Go?2025.06.15
  141. [0612] 백만 스물하나, 백만 스물둘2025.06.13
  142. [0609] Tampermonkey 🖥️2025.06.12
  143. [0610] 달이 아름답네요 🌕2025.06.12
  144. [0611] 경안천 🥩2025.06.12
  145. Yuuri - ドライフラワー (드라이플라워)2025.06.10
  146. 『하늘과 바람과 별과 시』2025.06.10
  147. [0608] 미르 ✨2025.06.09
  148. Hump Back - 拝啓、少年よ (친애하는 소년이여) 2025.06.09
  149. Yuuri - ガリレオは恋をする(갈릴레오는 사랑을 한다)2025.06.09
  150. [0606] 아르기닌 🍫2025.06.08
  151. [0607] 나 평생 꿈만을2025.06.08
  152. 『인간의 대지』2025.06.08
  153. [0605] 변속주 🌃2025.06.06
  154. [0604] Global Running Day 🏃‍2025.06.06
  155. [0603] 가장 밝은 별2025.06.05
  156. THE BLUE HEARTS - 情熱の薔薇 (정열의 장미) 2025.06.05
  157. noa - ホットレモン (Hot Lemon) 2025.06.05
  158. [0602] 천천히 🌃2025.06.04
  159. [0601] circular metal ring 🏀2025.06.03
  160. [0531] 담장과 쪽문 🐋2025.06.01
  161. [0529] 출발선 🏃2025.05.31
  162. [0530] 투표런 🚀2025.05.31
  163. [0527] SET 🎂2025.05.29
  164. [0528] Post Traumatic Growth 🌠2025.05.29
  165. [0526] READY 📅2025.05.28
  166. [0525] 청복 💙2025.05.26
  167. [0522] 유로파 🍏2025.05.25
  168. [0523] 강제 푸시 반성합니다 🔁2025.05.25
  169. [0524] 열복 🫀2025.05.25
  170. [0521] 떠오름과 저묾 🌞2025.05.23
  171. [0520] Family Friend Fools2025.05.22
  172. [0519] Time machine ⏰2025.05.20
  173. Aimyon - 裸の心 (벌거벗은 마음)2025.05.20
  174. [0517] 흐린 토요일 🐢2025.05.18
  175. [0518] 맑은 일요일 🧼2025.05.18
  176. [0515] 셋이 만드는 하나 🧭2025.05.17
  177. [0516] PTG 🌧️2025.05.17
  178. [0513] 오십삼 🌤️2025.05.15
  179. [0514] Lotte+Cafeteria 🍔2025.05.15
  180. [0512] 일장춘몽 💊2025.05.14
  181. [0511] 𝑬𝒗𝒆𝒓𝒍𝒂𝒏𝒅, 𝑬𝒗𝒆𝒓 𝑴𝒊𝒏𝒅 🎡2025.05.12
  182. [0509] Your Journey Starts Here 🪧2025.05.11
  183. [0510] 五月雨よ 🌧2025.05.11
  184. [0508] 「권의 속도」 📄2025.05.10
  185. [0506] 놀자판 하루 🐷2025.05.08
  186. [0507] Quiet Air ⏳2025.05.08
  187. [0505] 뭔데이 🎏2025.05.06
  188. [0504] After School 🎒2025.05.05
  189. [0503] 나침반이 가리킨 곳 🌌2025.05.05
  190. [0502] 짧은 하루 📖2025.05.03
  191. [0501] 예고된 악재는 악재가 아니다 🌧️2025.05.02
  192. [0430] Can More 🍧2025.05.01
  193. 『오즈의 마법사』2025.05.01
  194. [0429] 초급반 🏃‍2025.04.30
  195. [0427] 맥도날드 원정 🍔2025.04.29
  196. [0428] 감사합니다. 죄송합니다. 🙏2025.04.29
  197. [0425] Sunny Day 🌞2025.04.28
  198. [0426] 무용(無用)의 쓸모 🛤️2025.04.28
  199. [0424] 벚나무 아래에서 🌸2025.04.26
  200. [0422] D-100 🧑‍💻2025.04.24
  201. [0423] 언제나 이타카를 마음에 두라 🌿2025.04.24
  202. [0421] 수상한 미용실 💇‍♂️2025.04.22
  203. [0420] 손으로 컴퓨터를 마주하다🔧2025.04.21
  204. [0419] 비가 오면 빨래를 하자 🌧️2025.04.20
  205. [0418] 반차😴2025.04.19
  206. [0416] 반티 발주👕2025.04.18
  207. [0415] 첫 달리기🏃‍2025.04.18
  208. [0417] 발표, 청소, 러닝🗣️2025.04.18
  209. [0414] 선택과 해석🗳️2025.04.15
  210. [0413] Home Sweet Home🏠2025.04.14
  211. 신지훈 - 시가 될 이야기2025.04.14
  212. [0412] 人生2025.04.12
  213. [0410] 알고리즘의 끝, C언어의 시작🧭2025.04.11
  214. [0411] 반티 디자인 공모 & 제출👕2025.04.11
  215. KiiiKiii - I DO ME2025.04.11
  216. [0409] 하와이안 스테이크🥩2025.04.10
  217. [0407] Es irrt der Mensch, solang' er strebt.📚2025.04.08
  218. [0408] Long Chat (#🎮)2025.04.08
  219. [0405] 움직이는 물체의 시간은 느리게 간다💤2025.04.06
  220. [0406] 마무리🛌2025.04.06
  221. [0404] 하나의 칼날🗡️2025.04.05
  222. [0403] 3x7=21🧗2025.04.04
  223. [0402] 퀴즈 다음날, 시험 전날😴2025.04.03
  224. [0401] April Fools' Day🎭2025.04.02
  225. [0331] 1년의 90번째 날🌅2025.04.01
  226. [0330] 日曜日은 칠요일 중 첫째 날 이다⏰ 2025.03.31
  227. 『카할의 과학하는 삶』2025.03.31
  228. [0329] 토요일은 주말이 아니다☕2025.03.30
  229. [0328] 그래프와 치킨버거🐔2025.03.28
  230. [0327] 3주차의 시작🗓️2025.03.27
  231. [0326] 기초 다지기🔧2025.03.26
  232. [0325] 기초 다지기 & 정리해야 할 CS 개념들💡2025.03.26
  233. [0324] 0.44%2025.03.25
  234. [0323] 본가 다녀온 날🏡2025.03.23
  235. [0322] 문제 풀이에 집중한 하루 📅2025.03.23
  236. [0320] 첫번째 시험📝2025.03.22
  237. [0321] 동료학습🌿2025.03.22
  238. [0319] 먹다가 끝난 하루🍖2025.03.20
  239. [0318] 눈이 쌓이면 버그도 쌓인다❄️2025.03.19
  240. [0316] 외출과 배달🚶🛍️2025.03.17
  241. [0315] 첫 주말🛏️2025.03.17
  242. [0317] 깃허브, 팀별 면담, 키워드 공부👨‍💻2025.03.17
  243. RADWIMPS - 正解 (정답)2025.03.17
  244. ILLIT - Almond Chocolate2025.03.16
  245. Kep1er - HighLight2025.03.16
  246. [0310] 입소 당일📅2025.03.15
  247. [0312] 디지털 포춘쿠키🍪2025.03.15
  248. [0311] 정글 입성🏕2025.03.15
  249. [0313] cookie4u.store🍪 + 1주차 발제📚 + 회식🍺2025.03.15
  250. [0314] 컴퓨팅 사고로의 전환🧠2025.03.15

DeepDive : Many Over Mighty

2025.07.20 · 나만무

해결법 2: 인스턴스 스케일 아웃 전략 변경


힙 메모리 확장이 RPS 최고치를 높여주긴 했지만 주기적인 멈춤 현상을 해결하지 못했기 때문에… 다른 해결책을 생각해내야 했다.

만약 GC가 유일한 원인이었다면 메모리를 2배 이상 늘렸을 때 ‘멈춤’ 현상이 발생하는 간격도 2배 이상으로 길어져야 한다. 하지만 현실은 그렇지 않았다.

여전히 약 20~30초마다 RPS가 바닥을 찍는 현상이 반복되었다.

이 결과는 문제를 단순히 ‘힙 크기’의 문제가 아니라, ‘단일 Node.js 프로세스’의 한계와 Stop-the-World GC가 필연적으로 발생시키는 지연 시간 그 자체에 있다는 결론으로 이어졌다.

아무리 힙을 늘려도 결국 GC는 발생하고 그때마다 모든 요청 처리가 멈춘다는 본질적인 문제는 변하지 않는다.


전략 수정

각 인스턴스가 더 적은 부하를 처리하면서 GC의 영향을 최소화하는 방법, 즉 Stop-the-World GC가 전체 서비스에 미치는 영향을 희석하는 전략이 필요했다.


인스턴스 사양 변경: 더 작게, 더 많이

기존 인프라는 고성능 네트워크와 CPU를 자랑하는 c6in.xlarge (RAM 8 GB) 17개 인스턴스로 구성되어 있었다.

쉽게 말해 좋은(비싼) 인스턴스를 적게 배치하고 각 인스턴스가 많은 요청을 처리하도록 설계된 구조였다.

하지만 Node.js의 단일 스레드 기반 특성과 GC로 인한 Stop-the-World 현상은 이 전략에 치명적인 제약이 되었다.

그래서 다음과 같이 스케일 아웃 전략을 변경했다.


파이프라인에서의 병목 지점: EC2 Auto Scaling

우리가 운영하는 파이프라인은 다음과 같다:

KlickLab SDK → NLB → EC2 (Auto Scaling) → Amazon MSK → AWS Lambda → ClickHouse

이 중 병목 지점은 예상 밖에도 EC2 (Auto Scaling)이었다. GC가 쌓이는 순간마다 요청이 끊기고, 전체 성능이 급락했다.

Node.js 런타임의 단일 스레드 특성과 GC가 맞물리면서 전체 파이프라인의 발목을 잡았던 것이다.

그래서 EC2 인스턴스를 잘게 쪼갰다. 그 결과, 마침내 RPS 10,000을 넘기는 데 성공했다.


할당량과 예산의 제약

단순히 기술적인 이유만 있었던 것은 아니다. 우리는 다음과 같은 현실적인 인프라 제약에도 부딪히고 있었다:

Service Quotas에 따라 On-Demand 인스턴스의 vCPU 할당량이 96개로 제한되어 있었고, 백엔드 서버나 ClickHouse와 같은 필수 인스턴스에 이미 일부 vCPU가 할당된 상황이었다.

실제로는 사용 가능한 여유 vCPU가 74개뿐이었기 때문에 c6in.xlarge처럼 vCPU를 4개씩 사용하는 인스턴스를 계속 늘리는 것이 불가능했다.

그래서 병렬성을 극대화하기 위해 1개의 Vcpu를 가진 t2.small을 선택하여 인스턴스의 갯수를 최대한으로 늘리기로 했다.

게다가 우리에겐 AWS 크레딧 1,000달러라는 예산 한도도 존재했다. 고성능 인스턴스를 계속 쓴다면 빠르게 비용 한도를 초과할 수밖에 없는 구조였다.

결국 우리가 선택할 수 있는 전략은 명확했다. 싸고, vCPU가 적고, 비용을 예측할 수 있는 인스턴스를 많이 쓰는 것 기술적 이유와 비용 구조, 할당량 제약이 모두 맞물리며 ‘더 작고 많은 인스턴스’ 전략이 선택된 것이다.


왜 더 작고 많은 인스턴스가 효과적일까?

  1. Stop-the-World GC의 영향 분산

    • t2.small 인스턴스는 적은 요청을 처리하므로, GC가 발생하더라도 전체 서비스에 미치는 영향은 작다.
    • NLB가 요청을 분산시켜 GC 중인 인스턴스를 자동 회피할 수 있다.
  2. 힙 크기 대비 GC 주기 최적화

    • RAM이 작기 때문에 기본 힙 크기도 작지만, 처리량 역시 적기 때문에 GC 주기도 길어지거나 GC 자체가 가볍게 끝난다.
    • GC가 발생해도 해당 인스턴스에만 국한되어 전체 서비스가 멈추는 일은 없다.
  3. 비용 효율성

    • t2.small은 단가가 매우 낮다.
    • 인스턴스 수가 늘었지만, 비용 대비 성능 효율이 오히려 더 높아졌다.

해결 결과: RPS 10,000 달성


스케일 아웃 전략을 적용한 후 부하 테스트를 다시 실행했고, 다음과 같은 결과를 얻었다.

이 전략은 특히 Node.js처럼 단일 스레드 기반의 런타임에서 Stop-the-World GC를 분산시키는 데 매우 효과적이었다.


정리