26-8-14 @ety001의 hivemind 개선 작업
@ety001의 hivemind 개선작업이 올라왔습니다. 그동안 스팀잇에서 자주 발생하던 에러의 원인이기도 했습니다. 수정사항은 개발환경인 steemitdev.com에 공개되었습니다. 관련내용을 정리해서 아래와 같이 포스팅 합니다.
스팀 블록체인과 콘덴서를 개선하기 위한 노력 그리고 게임을 통한 활용성 확대노력은 지속되고 있습니다.
@greece.lover가 작업하고 있는 개선사항에 대해서도 관심을 가져주셨으면 좋겠습니다. 사용과 함께 피드백이 있으면 개발하는 사람에게도 힘이 됩니다.
https://steemit.steemapps.com/created/my
상당히 많은 내용이 변경되고 있습니다. 작업이 완료되고 나면 스팀잇에 통합되기를 바랍니다.
제시해주신 스팀(Steemit) 하이브마인드(Hivemind) 노드 업데이트 및 개발 현황 소식에 대한 한글 번역과 이번 작업의 핵심 의미 요약입니다.
📄 한글 번역
스팀 노드 수정
날짜: 2026-08-13
이미지: steemit/hivemind:latest, steemit/hivemind:latest-dbe717d
PR: https://github.com/steemit/hivemind/pull/383 (dbe717d)
bridge.get_discussion API의 성능을 대폭 개선한 새로운 하이브마인드(Hivemind) 이미지가 출시되었습니다. 이제 댓글 스레드를 불러올 때 깊이(depth) 단계별로 트리를 순회하지 않고, 단일 재귀 CTE(Common Table Expression) 쿼리를 통해 전체 하위 트리를 한 번에 조회합니다. 이로써 최근 몇 주간 일부 노드 운영자들이 경험했던 주기적인 성능 저하 현상의 가장 큰 원인이었던 커넥션 풀(Connection Pool) 압박 문제가 해결되었습니다.
무엇이 문제였는가?
기존 _load_discussion은 레벨별 너비 우선 탐색(BFS) 방식으로 댓글 트리를 생성했습니다. 깊이 단계마다 하나의 _child_ids 쿼리를 실행했으며, 각 쿼리마다 커넥션 풀 할당, 파싱, DB 라운드트립이 발생했습니다.
프로덕션 타임로그에 따르면 깊이가 4~10단계인 스레드의 경우 500~1,300ms가 소요되었습니다. 동시 요청 부하가 발생할 때 이러한 다중 쿼리 순회 방식은 PostgreSQL 커넥션 풀을 고갈시키는 주요 원인이 되었고, 결과적으로 get_discussion / get_profile API에서 간헐적인 Internal error 응답 및 ELB 4xx 에러율 상승을 유발했습니다.
두 번째 문제로, 3초 이상 소요되는 쿼리를 감시하는 [DB_SLOW] 경고 로그가 프로덕션 환경에서 빈 SQL 본문으로 출력되는 현상이 있었습니다. 여러 줄로 작성된 SQL 문자열이 개행문자(newline)로 시작하여, 시스템 로그(syslog)가 타임스탬프 바로 뒤에서 로그를 잘라버림에 따라 운영자가 실행 시간을 확인하더라도 정작 어떤 쿼리인지 파악할 수 없었습니다.
무엇이 변경되었는가?
- 단일 재귀 CTE 도입: 기존 레벨별 BFS 탐색을 단 한 번의 DB 라운드트립으로 전체 하위 트리를 가져오는
WITH RECURSIVE쿼리로 교체했습니다. - 차단된 작성자(
list_type='3') 및 숨겨진 포스트(list_type='1')는 재귀 탐색 내부에서 필터링되므로 해당 하위 트리는 탐색조차 하지 않습니다. MAX_DEPTH/MAX_THREAD_POSTS제한은 그대로 유지되며(CTE 내부의LIMIT처리), 기존 구현과의 트렁케이션(자르기) 시맨틱을 동일하게 유지하기 위해 BFS 정렬 순서를 보장합니다.- 기존 레벨별
_child_ids_*캐시 항목 대신 전체 트리가discussion_tree_<root_id>형태로 캐싱됩니다 (TTL 120초).
[DB_SLOW]로그 수정: 로그 출력 전 SQL 본문의 공백을 압축 처리하므로(' '.join(sql.split())), syslog 기반 수집기에서 지연된 쿼리 전체를 정상적으로 확인할 수 있습니다.
검증 완료 사항
tests/bridge_thread/: 9/9 테스트 통과 (단일 CTE 시맨틱에 맞게 재작성).- 실제 PostgreSQL 16 환경에서 CTE SQL 검증 완료: 숨김 포스트 필터링, 깊이 제한, 포스트 수 제한, 깊은 체인에서의 BFS 정렬 검증.
- 대규모 스레드 벤치마크: 5,000개 자식 노드를 가진 트리가 기존 ~1초에서 단 1회 쿼리, 27ms 만에 처리됨.
- 프로덕션
beta-hivemind배포 및 실제 트래픽 검증 완료:tree_walk시간이 500~1300ms에서 10~118ms로 급감하였으며,DISCUSSION_BREAKDOWN로그에서queries=1이 확인됨.
업그레이드 방법
docker pull steemit/hivemind:latest # 또는 :latest-dbe717d 로 버전 고정
# 이후 Hivemind 서버 컨테이너/프로세스 재시작
별도의 데이터베이스 마이그레이션은 필요하지 않습니다. (
DB_VERSION변동 없음)
노드 운영자 참고 사항
- 대형 스레드 제한(500개 포스트 / 깊이 50)은 PR #375와 동일하게 유지됩니다. 자르는 방식은 이전과 완전히 동일하며, 속도만 대폭 향상되었습니다.
- 이번 빌드에는 디버그 타임로그가 포함되어 있습니다. 프로덕션 검증 기간 동안
DISCUSSION_SLOW,DISCUSSION_BREAKDOWN,POSTS_KEYED_SLOW,DB_SLOW경고가 출력될 수 있으며, 향후 릴리스에서 제거되거나 선택 옵션으로 변경될 예정입니다. - 업그레이드 이후에도 예기치 않은 4xx 응답이나 성능 저하가 발생할 경우, 발생 시간과 관련 API 메서드를 첨부하여 GitHub 이슈(github.com/steemit/hivemind/issues)를 생성해 주세요.
추가 소식 (One more thing)
- 리팩토링된 컨덴서(Condenser)의 프리뷰 버전이 개발 환경(steemitdev.com)에 공개되었습니다.
- 현재 컨덴서 리팩토링 진행률은 약 80%입니다.
- 리팩토링된 지갑(Wallet)은 현재 최종 보안 감사 수정 단계를 거치고 있으며 곧 라이브로 적용될 예정입니다.
💡 이번 작업의 핵심 의미 요약
이번 업데이트는 스팀 백엔드 및 프론트엔드 전반의 안정성 확보, 병목 현상 제거, 사용자 경험(UX) 개선을 목표로 한 중요한 개편입니다.
- 노드 과부하 및 500/4xx 에러의 원인 차단 (백엔드 최적화)
- 기존에는 댓글 깊이가 깊어질수록 수십 개의 DB 쿼리를 연속으로 날리는 방식이어서 DB 커넥션 풀이 쉽게 고갈되었습니다.
- 이를 단 1회의 재귀 쿼리(CTE)로 통합함으로써 5,000개 댓글 기준 처리 속도를 1초 ➔ 27ms로 약 97% 이상 단축시켰습니다. 노드 운영자의 서버 부담이 크게 줄어듭니다.
- 디버깅 및 운영 편의성 향상
- 슬로우 쿼리 로그가 잘려서 출력되던 버그를 해결하여, 운영자가 성능 병목 원인을 정확히 추적할 수 있게 되었습니다.
- 스팀 생태계 프론트엔드 현대화 진행 (컨덴서 & 지갑)
- 스팀 웹 인터페이스인 컨덴서(Condenser) 리팩토링이 80%에 도달하여 프리뷰 환경에서 테스트가 시작되었습니다.
- 지갑(Wallet) 시스템은 보안 감사를 마무리하는 단계로, 조만간 더욱 빠르고 안전한 UI/UX가 유저들에게 제공될 예정입니다.
High-Yield Curation by @steem-seven
Your content has been supported!
Maximize your passive income!
Delegate your SP to us and earn high rewards
Click here to see our Tiered Reward System
We are the hope!
This post has been upvoted by @italygame witness curation trail
If you like our work and want to support us, please consider to approve our witness
Come and visit Italy Community
꾸준히 스팀이 업그레이드 되는군요!
#avle #jsup #krsuccess
꾸준히 스팀이 업그레이드 되는군요!
#avle #jsup #krsuccess
API가 안정을 찾았으면 좋겠네요.
꾸준한 디버깅의 노고에 감사드립니다!
#krsuccess #jsup #avle