보도자료에는 구체적인 내용이 너무 부족함. 60초 주기이고 발전기 같은 장비가 원인이라는 것인데, 정확히 어떤 제조사의 어떤 모델인가?
정확한 제조사나 장비를 찾지 못해서 펌웨어도 바꾸지 못한 것인가?
논문에는 조금 더 자세한 내용이 있음. “제조사와 소통한 뒤 소프트웨어 업데이트가 배포됐으며, 조사 대상 UPS 시스템의 배터리 블록 하나에서 전류 피크의 엄격한 주기성이 제거됐음.” https://www.nature.com/articles/s41560-026-02144-0
여러 나라의 거의 모든 전력망에 영향을 줄 만큼 광범위한 현상이므로, 여러 제조사가 비슷한 방식을 사용할 가능성이 높음.
“수년간의 탐정 작업”이었다는데, 기사만 보면 그렇게 복잡해 보이지는 않음. 간격이 정확해서 시계 기반 동작이라는 점은 곧바로 알았다고 함. REA 등으로 입증하기 쉬워질 수는 있겠지만, 대규모 전력망에서만 드러나는 측정상의 문제인가?
왜 원인을 밝히기가 그렇게 어려웠는지 잘 아는 분이 설명해 줄 수 있는가?
효과가 워낙 작아서 잡음 속에서 찾아내려면 여러 분에 걸친 푸리에 분석이 필요했던 것으로 보임.
전력망에는 전기를 소비하는 장치가 수백만 대 연결돼 있고, 전기를 공급하는 장치도 갈수록 늘어나고 있음.
수년에 걸친 상당한 연구가 아니면 자금을 받지 못함. 그래서 학계 연구자들은 모든 주제를 철저하고 길게 파고들 유인이 있음.
단순히 자체 전력 상태를 확인하는 시스템이 왜 전력망 측정에 잡힐 만큼 전기를 소비하는지 이해하기 어려움. 배터리 충전을 시작한다는 뜻이라면 지속적인 부하이지, 매분 시작할 때만 생기는 순간적인 피크는 아니지 않은가?
셀 전압을 추정하려고 배터리 일부를 분리하는 것일 수 있음. 다른 전원이 배터리를 충전하는 동안에는 전압을 측정할 수 없기 때문임. 또는 커패시터가 충전되는 것일 수도 있음.
여러 프로세스를 예약 실행할 때처럼 무작위 시간 오프셋을 줘서 동시 집중 현상(thundering herd)을 피해야 하지 않나?
여러 장치를 함께 운영하는 쪽에는 당연하지만, 개별 장치를 만드는 쪽에는 덜 자명할 수 있음.
“터빈이 잠시 느려졌다가 원래 회전 속도로 돌아가면서 마모가 늘어난다”고 하는데, 왜 그런가? 토크 증가 때문인가?
힘이 변하면 응력이 반복적으로 가해져 일정한 힘보다 더 큰 손상을 줌. 이를 히스테리시스라고 하며, 재료 피로로 이어짐.
배터리 저장 시스템들이 충전 상태를 확인하느라 전력망 관성 지원을 동시에 잠시 멈추면, 전력망에 동기화된 회전체가 이를 보충해야 함. 운동에너지가 전기에너지로 전환되면서 회전 속도가 낮아지고, 배터리가 관성 지원을 재개하면 다시 빨라짐.
크게 보면 전체 시스템의 운동량 문제임. 한 부분의 관성 기여가 줄면 다른 부분이 보충해야 하며, 그렇지 않으면 저전압이 발생하고 결국 정전으로 이어짐. https://neutrino-energy.com/technology/grid-inertia/
데이터센터의 모든 Windows 서버를 정확히 새벽 2시에 재부팅하지 않고 부하 변화를 시간상 분산하는 이유도 수격 현상, 이 경우에는 전자판 수격 현상 때문임. 수백 MW로 추정되는 부하를 매분 정각에 넣었다 뺐다 하면 문제가 생긴다는 걸 전력 분야에서 예상하지 못했다니 놀라움.
cron의 1분 단위 실행처럼 설정된 듯함. 늘 이 시간 단위가 불만이었고, 동시 집중 문제를 피하려면 sleep(random()) 같은 코드를 넣는 것밖에 떠오르지 않았음.
배터리 시스템 공급업체 한 곳 또는 여러 곳이 분산 설치된 자사 시스템의 집단적 영향을 고려하지 않은 쪽에 더 가까워 보임. 규제가 없는 개방 시장이라면 언젠가는 벌어질 일이었음.
컴퓨터·시스템·분산 시스템 공학에서는 이를 요청 평탄화나 트래픽 조절이라고 하며, 실행 간격에 무작위 시간차인 지터를 더해 구현함.
흥미롭게도 현대 전기 규정도 이미 이런 현상을 고려함. 생산한 전기를 전력망에 판매하는 넷 미터링 관련 표준에는 두 가지 방식이 있음. Sandia Frequency Shift는 인버터 출력 주파수를 미세하게 바꾸는 방식으로, 전력망에 연결돼 있으면 변화가 사실상 억제되고 연결이 끊기면 주파수 변화를 감지해 인버터를 차단함. Slip-Mode Frequency Shift도 비슷하지만 위상을 바꾸는 방식이며, 이 부분은 잘 모르겠음.
둘 다 단독운전 방지용임. 인버터가 고립을 감지해 전류 출력을 멈추면 이후 5분마다 지터를 넣어 전력망 복구 여부를 확인해야 함. 무작위 시간차가 없으면 소규모 배터리·태양광 설비가 일제히 재접속해 전력망에 부담을 주고 다시 정전을 일으킬 수 있음.
나머지 전력망 부하는 사람의 행동 덕분에 자연스럽게 무작위로 분산되고, 거대한 공장도 한 부분씩 켜짐. 밀리초 단위로 동기화된 대규모 부하 전환은 전혀 다른 상황임. 배터리는 완충 상태라도 최초 돌입 전류가 거의 무한대에 가까울 수 있음.
전력망 규모의 터빈은 안정성과 수명을 위해 매우 정밀한 회전 속도로 운전하도록 설계됨. 더 큰 실패는 배터리 저장 장치가 안정화를 도와야 하는데 오히려 원인이 됐다는 데 있음. 전력망 운영 쪽의 요구는 확실히 받아들여지는 만큼, 꽤 빠르게 해결될 것으로 예상함.
전력판 동시 요청 폭주(thundering herd) 문제인가? 이번에도 지터가 해결책임.
같은 실수를 계속 반복하는 걸 보면 소프트웨어는 참 진지하지 못한 분야라는 생각이 듦.
나는 꼭 필요한지 명확하지 않을 때도 이런 문제를 막으려고 타이머 유닛에 systemd의 무작위 지터 설정을 습관적으로 적용함. 그런데 전력망 규모의 배터리 시스템을 만드는 사람들이 배포 전에 이걸 생각하지 못했다는 건가?
바로 그런 상황임. 한 번 데어본 사람은 이런 문제를 알지만, 모두가 그런 것은 아님. 배터리 제조 담당자들은 이 문제를 겪어보지 못했을 것으로 추측함. 전력망에 엄청난 수의 장치가 연결돼야 눈에 띄는 영향이 생기니, 시험에서도 드러나지 않았을 것임.
시각을 맞추는 일도 똑같이 대충 했다면 오히려 피했을 문제임! 어설프게 일부만 철저한 게 최악임.
“이 모든 장치가 어떻게 전력 소비 시점을 동기화하는가?”라는 질문에 글은 적어도 명시적으로는 충분히 답하지 않음. 타이머들이 NTP나 GPS 등으로 같은 시계에 동기화돼 있다는 뜻으로 보임. 즉, 60초 쉬고 전력을 확인하는 반복이 아니라, 다음 분이 시작될 때까지 기다리는 방식이며 모든 장치가 그 시점에 동의하는 셈임.
단순한 마이크로컨트롤러가 60초씩 대기한다면 시계 오차가 자연스러운 지터 역할을 할 것임. 교류 주기를 세는 방식도 시계 오차는 없겠지만, 장치마다 전원을 켠 시점에 따라 실행 시점이 분산될 것임.
무작위 지터가 모든 면에서 더 낫지 않을까? 암호화에 적합하지 않은 저렴한 난수조차 시계 오차나 주기 계수보다 나을 것 같음.
설계자들이 지터를 생각하지 못한 건지, 부하를 분산해야 한다는 사실 자체를 몰랐던 건지 궁금함. 후자는 상상하기 더 어려우니 전자였을까?
동시 실행 폭주를 피하려고 친구 한 명은 cron 작업의 실행 분을 테스트가 끝난 시점 그대로 두는 방법을 사용함. 시험할 때는 다음 분에 실행하도록 설정하고, 제대로 작동하면 그 분 설정을 그대로 유지하는 식임.
나는 숫자에 의미를 붙이는 편인데, 더 재미있지만 체계적이지는 않음. 예를 들어 매시간 DNS를 다시 생성하는 작업은 53분에 실행함. 이메일을 다룰 때는 아직 이 요령을 떠올리지 못해서 매시간 갱신을 25분이 아닌 15분에 설정했음. 어떤 이유로든 갱신을 빠르게 할 수 없고 다른 사람도 갱신 시점을 알아야 한다면, 기억하기 쉬운 숫자가 도움이 되기도 함.
지터를 넣는 가장 간단한 방법은 종종 “60초마다 실행”을 “실행한 뒤 60초 기다리고 반복”으로 바꾸는 것임.
우물을 오염시킨 그 연구시설이 아직도 운영 중임. 인근에는 인과관계를 특정하기 어렵지만 의심스러운 백혈병 집단 발생도 있었고, “40년 뒤에는 이번 세기 말까지 우리가 만든 오염을 치울 기술이 생기길 바란다”는 식의 전략으로 운영하는 곳임.