RicoCheese기술 뉴스와 기록
← 목록으로
뉴스2026-10-1219분

"Light don go": 나이지리아에서 정전되면 노트북이 나를 밖으로 내보낸다

나이지리아 포트하커트의 한 개발자가 정전으로 노트북이 배터리로 전환되면 로컬 Gemma 모델이 짧은 산책·스트레칭을 권하는 오프라인 도구를 만들었습니다. 모델이 숫자와 사실을 망가뜨리는 문제를 '사실은 코드가, 권유 문장만 모델이' 쓰는 구조로 풀어낸 과정을 정리했습니다.

#ai#llm#google#opensource#international#news
"Light don go": when Nigeria's power cuts out, my laptop sends me outside

개요 #

나이지리아 포트하커트(Port Harcourt)에 사는 개발자 Daniel Nwaneri가 정전을 '쉬는 시간'으로 바꿔 주는 도구 Light don go를 공개했습니다. Dev.to의 Hacktoberfest 오픈소스 AI 챌린지 1주 차 주제인 'Touch Grass(밖에 나가 풀 좀 만져라)'에 맞춰 출품한 작품입니다.

동작은 단순합니다. 노트북이 30초 넘게 배터리로 돌아가면 하던 작업 위에 전체 화면 페이지가 뜹니다. 화면에는 지금 날씨와 시간대에 맞는 권유 한 줄, 60초 스트레칭 타이머, 그리고 "I don stand up. Close am.(일어났어요. 닫아 줘요.)" 버튼이 있습니다. 권유 문장은 노트북 CPU에서 돌아가는 Gemma 4 E2B 모델이 쓰고, 인터넷은 전혀 쓰지 않습니다. 정전되면 공유기도 같이 꺼지기 때문입니다.

이 글에서 가장 눈여겨볼 대목은 작은 로컬 모델을 다루는 방식입니다. 처음에는 모델이 메시지 전체를 쓰게 했는데 숫자를 빠뜨리고 뜻을 거꾸로 뒤집었습니다. 그래서 작성자는 사실과 숫자는 코드가 쓰고, 모델은 숫자 없는 권유 문장 하나만 쓰도록 역할을 나눴습니다.

본문 #

정전과 발전기 사이의 빈틈 #

포트하커트에서는 전기가 나가면 2초 만에 방 분위기가 바뀝니다. 선풍기가 멈추고 공유기가 꺼지고 노트북은 배터리로 넘어갑니다. 그러면 누군가 "on the gen!(발전기 켜!)" 하고 외칩니다.

작성자는 예전에는 그 시간 동안 그냥 앉아서 기다렸다고 합니다. 휴대폰은 모바일 데이터로, 노트북은 배터리로 버티면서 발전기가 돌아가길 기다리는 시간이었습니다. 전력 회사가 전기를 끊은 순간부터 누군가 발전기를 켜기까지의 이 공백은 어차피 화면을 보기 힘든 시간이고, Light don go는 바로 이 시간을 노립니다.

Light don go during a real outage: rain, a Gemma nudge to stretch by the window, a 60-second stretch timer, and grass along the bottom 10월 8일 12시 31분 실제 정전 때의 화면. 큰 글씨는 Gemma가 쓴 문장이고, 그 위의 줄은 코드가 쓴 것이다.

60초 타이머는 일어서기, 팔 뻗기, 어깨 돌리기, 발끝 닿기, 밖으로 나가기 순서로 진행됩니다. 타이머가 끝나면 "You self don try.(잘했어요.)"라는 문구가 나오고, 다음 정전 전까지는 페이지가 다시 뜨지 않습니다.

배경 하늘은 상황에 맞춰 바뀝니다. 낮에는 따뜻한 색으로 비나 일몰까지 남은 시간을 보여 주고, 밤에는 어두운 화면에 집 근처에서 할 일을 권합니다.

Daytime: sunset at 18:20, 50 minutes left, a nudge to walk to the junction for plantain and fish

Night: low battery at 12%, a nudge to sit outside and look at the stars, and a warning to sleep the laptop 낮·밤 화면은 시뮬레이션(ldg simulate)으로 만든 것이다. 권유 문장은 그 실행에서 Gemma가 실제로 출력한 문장을 로그에서 가져왔다.

페이지는 웹 폰트도, CDN 리소스도 쓰지 않아서 인터넷 없이 열립니다. 작성자는 나이지리아뿐 아니라 남아프리카공화국의 순환 정전(load-shedding), 인도·파키스탄 여러 지역처럼 정전이 일상인 곳에서 노트북으로 일하는 사람이라면 따로 설명할 필요도 없는 문제라고 말합니다.

알아 두면 좋은 현지 표현 #

글과 화면에는 나이지리아 영어와 피진(Pidgin) 표현이 많이 나옵니다.

표현뜻
NEPA옛 국영 전력공사(National Electric Power Authority). 지금도 전력 회사를 이렇게 부른다. "NEPA takes light"는 전기가 끊겼다는 뜻
Light don go"전기 나갔다"
Gen, "on the gen"정전 때 대부분의 가정이 손으로 시동을 거는 휘발유 발전기. "on the gen"은 발전기를 켜라는 말
Hold the gen발전기를 켜지 말고 버티기. "₦1,500 saved every hour e rest"는 발전기를 쉬게 하는 한 시간마다 휘발유값 1,500나이라를 아낀다는 뜻
Abeg · waka · close am · fit제발 · 걷다 · 닫아 · ~할지도 모른다("rain fit start"는 비가 올지도 모른다)
You self don try"잘했어요"
Mineral · kiosk · junction탄산음료 · 길가 작은 가게 · 음식 파는 사람들이 모이는 길모퉁이
WAT서아프리카 표준시, UTC+1

실제 정전에서 어떻게 동작했나 #

YouTube 영상 보기 →

작성자는 logs/outages.jsonl에 쌓인 실제 정전 기록을 공개했습니다(2026년 10월 8~9일, 서아프리카 시간).

시각사건도구의 동작
12:23정전비 오는 상황, 실내 활동 선택. Gemma가 타임아웃되어 대체 문장 표시
12:25123초 만에 전기 복구기록(발전기)
12:31다시 정전Gemma: "Abeg shut that laptop, waka go stand by the window stretch back and legs, rain dey down." 첫 시도에 검사 통과
12:34225초 만에 복구기록
12:53정전전체 화면 페이지가 처음 뜬 정전. Gemma: "Abeg shut that laptop, walk to the kiosk for cold mineral and come back quick." 첫 시도 통과. 사실 줄: 15시쯤 비 예보, 남은 시간 약 2시간
13:34정전, 노트북 절전 상태타임아웃, 대체 문장 기록. Windows 이벤트 로그를 보니 노트북이 모던 스탠바이(Modern Standby) 상태였다. 정전 순간 잠깐 깨어났다가 호출 도중 다시 잠들었고, 13시 56분에 다시 깨어났다. 모델은 메모리에 올라가 있었고 화면 앞에는 아무도 없었다
9일 07:33정전Gemma: "Abeg shut that laptop, walk to the kiosk find cold mineral and come back quick." 첫 시도 통과

10월 9일 07시 33분 정전 때 작성자는 실제로 노트북을 덮고 동네를 걸었습니다. 사촌 집에 들러 아이들과 놀았고, 전기는 12시 5분쯤 돌아왔다고 합니다.

정전 감지와 오프라인 날씨 #

작성자의 집에는 인버터가 없어서 정전되면 노트북이 곧바로 배터리로 넘어갑니다. 도구는 psutil로 5초마다 전원 상태를 확인합니다. 30초보다 짧은 끊김은 깜빡임으로 보고 무시합니다. 15분 안에 다시 정전되면 기록만 남기고 화면은 띄우지 않습니다. 전기가 껐다 켜졌다를 반복할 때 같은 화면이 계속 뜨지 않게 하려는 장치입니다.

날씨 정보도 오프라인으로 해결했습니다. 전기가 들어와 있는 동안 30분마다 Open-Meteo의 시간별 예보를 파일로 저장해 두고, 정전 뒤에는 그 파일만 읽습니다. 일몰 시각은 NOAA 태양 위치 공식으로 노트북에서 직접 계산합니다. 10월 7일 포트하커트 기준 계산값은 18시 21분으로, Open-Meteo(18:21), sunrise-sunset.org(18:22)와 거의 같았습니다.

우기 때문에 바꾼 규칙도 있습니다. 처음에는 강수 확률 50% 이상이면 '비 오는 시간'으로 판단했는데, 10월 포트하커트는 거의 모든 시간대가 50%를 넘었습니다. 결국 도구가 하루 종일 실내 활동만 권하는 문제가 생겼고, 지금은 강수 확률 70% 이상이거나 예상 강수량이 0.5mm 이상일 때만 비 오는 시간으로 봅니다.

CPU에서 돌아가는 Gemma 4 E2B #

모델은 Ollama로 실행하는 gemma4:e2b-it-qat입니다. 내려받는 용량은 4.3GB입니다. 작성자의 노트북은 NVIDIA GPU 없는 i5-1135G7이고, 측정해 보니 콜드 스타트 14초, 모델이 메모리에 올라가 있을 때는 3.64.0초가 걸렸습니다. 속도는 초당 약 1520토큰이었습니다.

모델에게 맡길 일과 맡기지 않을 일 #

작성자가 가장 공들였다고 밝힌 부분입니다.

첫 버전은 사실 정보를 주고 Gemma가 메시지 전체를 쓰게 했습니다. 테스트 4번 모두 숫자가 사라졌고, 두 번은 뜻이 거꾸로 됐습니다.

"E be like NEPA light don come Port Harcourt…"

전기가 돌아왔다는 뜻입니다.

"Close your laptop now, before the generator dies…"

발전기는 켜져 있지도 않았습니다.

두 문장 모두 숫자가 없어서 숫자 검증으로는 잡아낼 수 없었습니다. 그래서 작성자는 일을 셋으로 나눴습니다.

  • 사실 줄은 코드가 씁니다. 무슨 일이 있었는지, 비나 일몰이 언제 오는지, 남은 시간, 아낀 휘발유값을 코드가 채웁니다. 메시지에 나오는 숫자는 전부 코드에서 나옵니다.
  • Gemma는 권유 문장만 씁니다. 모델이 받는 정보는 장소, 상황("지금 비 옴", "맑은 낮", "해 진 뒤"), 규칙으로 고른 활동 세 가지뿐이고 숫자는 하나도 주지 않습니다.
  • 검사기가 권유 문장을 확인합니다. 숫자가 들어 있거나, 20단어를 넘거나, NEPA·전기·전원·발전기를 언급하면 거부합니다. 거부되면 이유를 붙여 한 번만 다시 요청하고, 그것도 실패하면 미리 정해 둔 문장을 씁니다. 모델 호출은 최대 두 번이고 반복 루프는 없습니다.

역할을 나눈 뒤에는 테스트 9번 모두 첫 시도에 통과했고, 작성자가 확인한 범위에서는 뜻이 틀린 문장도 없었습니다.

검사기의 한계도 솔직하게 적었습니다. 검사기는 숫자와 주제만 보고 문장이 말이 되는지는 보지 않습니다. 한 테스트에서 Gemma가 "watch the rain inside the phone(휴대폰 속 비를 구경하라)"이라고 썼는데도 통과했습니다. 더 큰 모델을 쓰면 이런 문장이 줄겠지만 이 노트북에서는 돌아가지 않습니다. 작성자는 작은 모델을 골랐고, 가끔 어색한 문장이 나오는 것도 받아들이기로 했다고 말합니다.

실제 정전이 찾아낸 버그 #

12시 23분 정전 때 도구는 정전을 제대로 잡았지만 Gemma가 타임아웃됐습니다. 작성자는 아무것도 고치기 전에 먼저 원인을 측정했습니다. ollama ps를 보니 모델은 실패한 바로 그 요청 때문에 막 메모리에 올라온 상태였습니다. Ollama는 5분 동안 쓰지 않은 모델을 메모리에서 내립니다. 워밍업은 11시 53분에 돌았으니 12시 23분에는 배터리 상태에서 콜드 스타트를 해야 했고, 20초를 넘겨 버렸습니다.

해결책은 설정 하나였습니다. keep_alive: -1로 Gemma를 계속 RAM에 올려 둡니다(15.7GB 가운데 3.9GB 사용). 다음 정전인 12시 31분에는 Gemma가 첫 시도에 답했습니다. 13시 34분에도 타임아웃이 한 번 났지만 원인은 달랐습니다. 노트북이 Windows 모던 스탠바이로 잠들어 있었고, 작성자는 수정한 설정을 의심하기 전에 이벤트 로그부터 확인했습니다.

작성자는 이 일을 두고 "기본 설정이 이 도구의 유일한 약속, 즉 전기가 나갔을 때 동작한다는 약속을 깨뜨렸다"며 "시뮬레이션으로는 절대 찾지 못했을 것"이라고 정리했습니다.

화면과 테스트 #

페이지는 정전 데이터를 JSON으로 넣은 HTML 파일 하나입니다. Edge를 --app --start-fullscreen 옵션으로 띄워 주소창도 탭도 없습니다. 모델이 쓴 문장은 데이터로만 넣고 HTML로 삽입하지 않습니다. </script>가 들어간 권유 문장을 넣어도 페이지가 깨지지 않는지 확인하는 테스트도 있습니다.

테스트는 모두 98개입니다. 그중에는 네트워크 소켓을 전부 막은 상태에서 정전 처리 경로를 끝까지 실행하는 테스트도 있습니다. 작성자는 허용 범위를 넓히거나 검사를 빼는 식으로 검사기를 일부러 8번 망가뜨려 봤고, 매번 테스트가 실패하는 것을 확인했습니다.

전체 코드는 GitHub에 공개되어 있습니다.

GitHub 저장소 보기 → dannwaneri/light-don-go

왜 오픈 모델이어야 했나 #

작성자의 답은 짧습니다. "전기가 나가면 네트워크도 같이 죽으니까."

정전되면 누군가 발전기를 켤 때까지 공유기가 꺼져 있습니다. 이 도구가 말을 걸어야 하는 바로 그 순간에 클라우드 API에는 닿을 수가 없습니다. 노트북에 있는 모델은 신호 없이도 4초 만에 답합니다.

비용 문제도 있습니다. 로컬 모델은 정전 한 번에 드는 비용이 없고, 정전이 매일 일어나는 환경에서는 이 차이가 큽니다. 또 Ollama와 모델이 공개되어 있어서 첫 실제 호출이 왜 실패했는지 알아낼 수 있었습니다. 5분 쉬면 모델이 내려간다는 사실을 확인하고 설정을 바꿀 수 있었으니까요. 작성자는 "닫힌 API였다면 타임아웃은 그냥 타임아웃일 뿐"이라고 썼습니다.

출품 부문은 챌린지의 'Best Use of Gemma'입니다. 이 시스템에서 글을 쓰는 건 Gemma뿐이고, 검사기는 작은 모델이 잘하는 일만 하도록 범위를 묶어 둡니다.

글은 이렇게 끝납니다. "이 도구의 가장 좋은 결과는 로그에 없다. 원래라면 발전기를 기다리며 보냈을 아침을 사촌네 아이들과 보냈다."


이 글은 위 출처를 바탕으로 한국 독자를 위해 재작성한 기사입니다. 원문의 사실과 수치에 근거하며, 별도의 견해를 포함하지 않습니다.

댓글GitHub Discussions