2025/11/28

"N행시 공모전"의 종말

이러저런 행사나 이벤트에서 종종 보는 N행시 공모전. 제출자가 제시한 2~4글자 단어의 각 음절로 시작하는 문장이나 싯구를 만드는 일이다. 취지에도 맞고 창의적이고 재치도 있는 문장을 만들어야해서 나름 머리를 짜내야하는데.

생성형 AI의 영향으로 이제 N행시 이벤트는 의미가 없어져버리게 됐다. N행시는 지자체 소식지에 가로세로 낱말 퍼즐과 함께 자주 등장하는 메뉴다. 캡쳐 이미지라도 첨부하려고 검색엔진에 "지자체 N행시"를 검색했더니 AI와 결합한 어느 검색엔진은 '혹시 지자체 이름으로 N행시를 원하느냐'며 서울,울산,부산,경기 등으로 만든 N행시를 만들어 내어 보여준다.

로가 서로를 배려하며
창한 숲과 맑은 공기를 가진
히 살기 좋은 도시를 만들기 위해
난 아이디어로 노력하는
민들의 자랑, 서울특별시!

쟁보다는 상생을 추구하며
회 넘치는 땅, 대한민국의 중심!
약하는 경기도에서 만나요!

논문이니, 저술 같은 긴 문장들이야 어떻게든 AI가 생성했는지의 여부를 판단할 수 있다고하나, N행시처럼 짧은 문장은 출제 주체의 의도처럼 가족들이 모여앉아 연필 들고 연습장에 이 문장, 저 문장 머리를 쥐어짜내며 꺄르르 웃으면서 즐거운 시간을 보내며 만들어 낸 것인지 아니면 AI서비스로 N초만에 N*10 개씩 만들어내어 응모한 것인지 구별할 수 없을 것이다. 떡국떡 1만개를 살펴 보면 (=측정해보면) 기계로 썰었나 사람이 썰었나 추정이 가능할 수 있지만, 떡국떡 3 조각씩 주면서 사람이 썬 것인지 기계가 썬 것인지 구별해보라고 하면 어려운 것과 같은 이치이다.

비대면,원격이면 두말할 나위없을테고 컴이든 폰이든 사용이 가능한 환경이라고 하면 이제는 기본적으로 AI가 문장 작성 과정에 관여했다고 전제해야 할 것이다. 사용자는 만들기 쉽고 주최자,평가자는 생성 주체에 대한 검증이 불가능한 N행시 응모 코너는 이벤트, 소식지의 한 꼭지 채우기 말고는 존재가치가 소멸한 것 같다.

라벨:

2025/11/23

워드프레스 스팸코멘트와의 전쟁, 이제 끝?

그간 시도해본 워드프레스의 스팸방지 대책들...

  • 특정 문구와 아이피로 차단
    아이피 차단는 스팸코멘트가 밀려오는 순간에는 도움이 되겠지만 아이피야 얼마든지 변경할 수 있으니 궁극적인 해결은 되지 못한다. 아예 해외 아이피를 막아버릴까 싶기도 했으나 이른바 글로벌 시대에 행여나 해외 거주 한국인의 댓글까지 막아버릴 위험이 있어서 그러진 못했다. adult라든가 도박 관련 키워드들, AI 생성 자동댓글들이 자주 사용하는 문구들은 차단했다.
  • Akismet antispam
    걸출한 스팸방지 솔루션이다. 연간 수만개의 댓글을 막을 수 있는건 Akismet 덕분이다. 극히 일부 스팸이 뚫고 들어오긴 한다.
  • 글 작성 후 일정 기간이 지나면 댓글 작성 차단
    워드프레스의 기본 기능인데, 180일(6개월)로 기한을 지정하고 새 글이 작성된 후 이 기간이 경과되면 댓글 작성창을 자동으로 닫게 해 두었다. 대부분의 댓글 패턴이, 글 작성 후 시일이 경과되면 줄어드는 것에 착안한 것인데. 6개월이라는 기준이 모호하긴 하다. 내 블로그에 가장 많이 유입되는 검색어를 보면 5년전에 작성된 글과 2년전에 작성된 글이니까. (죄..죄송합니다.)

그럼에도 하루에 댓글 몇개씩은 spam 폴더에 들어가 있다. 반복해서 눈에 띄는 IP들은 차단 아이피로 추가하고 새로 등장하는 스팸 사이트들은 사이트 주소를 차단 문구에 넣기도 했다. 문득 이거, 워드프레스를 계속 사용하는 한 매일 스팸 댓글 목록을 확인하고 후속작업을 하는 이짓을 영원히 해야 하는 것인가 하는 의문이 들었고 그간 또 과학기술(...)이 발전했으니 새로운 방법들이 나온건 없을까 하고 찾아보았다. 그러다 찾은 것이 Advanced Google Recaptcha.

설치 후 보름정도 지났다. 댓글 작성시도가 있으면 Akismet에서 확인하기 위해 체크하는 API 콜 수도 하루 100~200건에서 15일에 10건 정도 있었으니 거의 사라진 셈이다. 시도 횟수가 0.1% 수준으로 줄어드니 반쯤 성공해서 spam 댓글 영역까지 단 한건도 들어오지 못했다. 이 정도면 완벽하게 스팸을 차단하고 있다고 볼 수 있겠다. 심지어 선의의 인간 방문자에게 당신이 봇이 아님을 입증하라는 문구도 나오지 않는다. 계속 잘 동작하기를 바라며 6개월 지난 글에 댓글 닫는 기능을 꺼 두었다.

라벨:

2025/11/16

teslamate 첫 화면에 보이는 충전종료시간이 맞지 않을 때

teslamate 웹 UI의 첫 화면을 열면, 현재 충전중일 경우 충전 예상 종료시간이 표시된다. 폰에 설치한 테슬라 앱에는 남은 시간으로 나오는지라 다시 현재시간 기준으로 계산을 해야 종료 시간을 알 수 있다. 그런 면에서 테슬라메이트처럼 종료시각을 알려주는게 편한 방식이긴한데 이게 문제가 좀 있다. 충전 종료 시간이 표시가 되긴하지만 시간대가 맞지 않는다. 라즈베리파이의 시스템 시간은 잘 들어가 있고 내 주행기록 등은 제대로 시간이 기록되어 있지만 이 충전 종료 시간은 이상하게 표시된다. 밤9시에 보니 충전완료까지 9시간 남았다고 나오는데, 그게 다음날 06시가 아니라 다음날 밤 9시무렵으로 표시되는 식이다.

이것을 고치기 위해서는 홈디렉토리에 있는 docker-compose.yml 파일을 열어 services: → teslamate: → environment: 아래에 "-TZ=Asia/Seoul" 부분을 추가해야 한다. 그 윗줄에 -MQTT_HOST=mosquitto 등이 써 있을텐데 아랫 줄에 추가하면 된다. 파일을 저장하고 docker-compose down, 그리고 다시 docker-compose up -d 해주면 이후부터는 충전 완료 시간이 제대로 표출된다.

출처: Wrong time zone for estimated charge end, TZ environment variable set correctly #3665

라벨: ,

2025/11/13

라즈베리파이4를 팬+순정케이스 →알루미늄케이스

전에 라즈베리파이4를 구매할 때 순정 정품 플라스틱 케이스와 팬을 함께 구입했다. 팬은 내버려두고 케이스만 쓰다가 며칠전 팬을 장착했다. 케이스의 홈에 팬을 끼우고 전원선과 신호선을 보드에 연결한 후에 설정에서 온도에 따른 팬 동작여부를 지정해서 사용하는 것인데. 문제는 이 팬이 돌때 상당히 거슬리는 소리가 난다. 고주파음처럼 씽~ 하는 소리다. 대략 1분 중 40초는 켜져있고 20초는 꺼져있길 반복하는 주기다.

어제 저녁 야근하고 있는 와중에 아내로부터 메세지가 왔다. 책상 아래 NAS가 있고 그 위에 라즈베리파이를 올려두었는데 거기 사진을 찍어보내며 '여기서 소리가 난다'고 한다. 평소에도 팬 소리가 나긴 하지만 청소기를 돌리거나 고양이가 지나가면서 건드려 아마 위치가 약간 틀어지면서 소리가 더 크게 났을지도 모르겠다. 책상 옆면에 닿아 책상 하부가 거대한 울림통의 역할을 하게 됐을 수도 있다.

그렇지 않아도 처음부터 신경이 쓰여 알리에서 알로이 케이스를 주문(약 6,500원, 4일 소요, 국내 쇼핑몰은 동일제품 구매대행으로 22,000원-_-;;) 해둔게 다행이도(?) 어제 도착했다. 바로 기존 플라스틱 케이스를 탈거하고 알로이 케이스로 바꾸었다.

[ 윗쪽 = 새로 도착한 알로이 케이스, 아래 = 순정 케이스와 팬 ]

뜯고보니 순정 케이스란 것이 (거의) 밀폐된 좁은 공간인데, 팬이 돌면서 얼마나 열기를 시켜줄 수 있었을까.... 싶다. 외부 공기가 들어오는 것도 더운 열기가 빠져나가는 것도 만만치 않을 구조다. 팬의 모터에서 나오는 열기도 있을테고.

알로이 케이스로 교체해서 보니 CPU 온도는 꾸준히 60도~65도를 유지하고 있다. 아무것도 안하고 있는 것처럼 보여도 이 놈의 역할은 24시간 내내 차량으로부터 상시적으로 속도,위치,배터리상태,실내외온도,충전 정보등 다양한 데이터를 받아 처리해서 DB에 저장하는 일을 하고 있으니 나름 부하가 가는 일이다. 케이스 외부는 손대보니 약간 미지근한 정도다. 알로이케이스는 플라스틱 케이스에 비해 방열이 좋고, 팬이 없으니 팬이 돌아가는 소음이 없는 장점이 있다.

[업데이트]@2025.11.14
어제 저녁 퇴근 후에 측정해보니 외부 온도는 40~41도.

라벨:

2025/11/08

라즈베리파이의 저장장치를 microSD→SSD로 바꾸기

테슬라메이트를 돌리고 있는 라즈베리파이4에는 저장장치로 32기가 짜리 microSD카드가 꽂혀있다. 구입 당시에 집에 굴러다니는 메모리를 꽂은것이다. 1년여간 써오면서 겪은 문제가 두가지가 있었다. 하나는 사이트 자체가 매우 느려져서 접속과 초기화면, 메뉴 이동에 수십초~수분씩 걸리는 경우가 있었다. 기기를 리부팅하니 속도는 원상복구가 됐으나 1년도 안되서 이러면 앞으로는 어떻게 사용하지? 하는 걱정. 그러다가 10월중에 서버가 다운되서 거의 한달치 데이타가 날아가는 일이 있었다. 테슬라 차랑에서 수집한 데이터가 쌓이지 않은 것이다. 테슬라메이트를 돌리기에 컴퓨팅 파워가 부족한 것은 아니나 저장장치로 사용하고 있는 microSD가 불안불안했다. PC와 다르게 부품을 업그레이드할 수 있는게 없고 그나마 할 수 있는 것이 저장장치로 사용하는 microSD를 외장SSD로 교체하는 것이다. SSD가 읽기쓰기 속도가 10배 이상 빠르니 성능향상을 기대해봄직 했다.

언제부터 그랬다고, 이젠 당연하게 chatGPT를 믿고 작업을 시작했다.

  • MicroSD의 데이타를 SSD로 클론 복사. 맥에서 raspberry pi imager 를 사용해서 복사하라고 했는데 구버젼의 앱을 기준으로 설명했는지, 해당하는 메뉴가 없었다.
  • 라즈베리파이에 외장SSD를 연결하고 sudo rpi-clone -f sda
  • 클론복사가 됐으니 이제 이 SSD로 부팅을 해야한다. 일단 microSD는 제거하고 외장SSD만 USB 3.0포트에 연결해둔다. 리부팅.
  • 다시 켜진 전원 LED를 확인하고 공유기 설정메뉴에서 내부 네트워크 목록을 살펴본다. 라즈베리파이가 붙지 않았다. ssh 연결도 되지 않는다. 부팅 실패다.
  • 오류메세지를 chatGPT에 넣으니 boot 파티션 이름(레이블)이 달라서 부팅이 안된다하여 sudo fatlabel /dev/sda1 bootfs 실행
  • 여전히 부팅 실패. 다른 USB3포트에 꽂아봐도 마찬가지.
  • USB2 포트에 꽂아보라고 함. 여전히 부팅 실패.
  • mnt/cmdline.txt 에서 PARTUUID 를 SSD의 값으로 바꾸라고 함. 바꿔줌, 부팅 성공. 테슬라메이트도 제대로 접속. 속도 매우 빠름;;
  • USB2.0 포트보다 전송속도가 10배 이상 빠른 USB3.0 포트쪽으로 붙일 방법 요청
  • /boot/firmware/cmdline.txt 에 quirks 넣기부터 추천. 다행이 부팅 성공했고 테슬라메이트도 제대로 접속 가능.
  • 테슬라메이트 화면 하단에 보니 업그레이드가 있다고 함. 기존 버젼은 1.2? 버젼인데 새 버젼은 2.2.0이다.
  • docker-compose pull, docker-compose down, docker-compose up -d 을 했더니 테슬라메이트 접속 불가.
  • 로그와 접속 결과를 보여달래서 보여줌.
  • 테슬라메이트 2.2.0은 Postgres 16이상만 지원하는데 현재 내 Postgres는 버젼 14라고 함.
  • DB날리고 새로 시작할 것인지, 보존할 것인지 물어봄. 당연히 1년여간의 테슬라메이트 기록을 날릴 수 없으니 보존 선택.
  • 바꾸라는대로 docker-compose.yml 에서 몇몇 줄의 내용을 바꿔줌.
  • 기존 DB를 dump 백업 (자야해서 백그라운드 작업 돌려놓고 취침, 다음 줄부터는 다음날 아침 작업)
  • 복원하는데 스키마가 이미 존재한다는 오류 계속 발생.
  • 혹시나 하고 접속해보니 접속은 되나, 모든 데이타가 날아간 상태.
  • DB 초기화하라는대로 하고 복원 명령 넣는데 계속 같은 오류 발생. 명령어가 미묘하게 다름.
  • chatGPT 무료버젼 사용량 만료됐다고 10여시간 뒤에 다시 해보라고 나옴.
  • 다행이, 오류나기 전 최초에 알려준 복원 명령으로 넣으니 제대로 복원됨.

교훈.

  • 99% chatGPT 도움으로 작업을 완료할 수 있었다. 1%는 검색.
  • chatGPT가 가끔 뜬금없는 답변을 할 때가 있다. 클론 백업을 하라는 맥용 앱 설명을 하는데, 해당하는 메뉴가 없길래 얘기했더니 예전 버젼엔 있었는데 지금은 없을 수 있다고. 맥 말고 라즈베리파이에서 바로 작업하란다. 그럴거면 진작에...
  • docker 명령어도 구버젼과 신버젼 명령어가 달라져서 정정 답변을 받았는데 진행하다보면 여전히 다른 버젼의 명령을 알려준다. 아까 답변의 예가 있으니 알아서 변환해서 사용했다. 기존 대화로부터 취득한 현재 사용자의 환경을 잘 기억하지 못하는 면이 있나보다.
  • 한창 오류가 해결되려고 하는 찰라, 무료버젼 사용량이 다 됐다고 10시간뒤에 다시 시도하거나 유료버젼 업그레이드를 하라고 한다. 옛날 유머중에 방위병은 전쟁나도 저녁6시에 칼퇴근 한다더니만 이게 그 짝이다. 방위가 퇴근하는 6시는 미리 시간을 가늠이라도 할 수 있지, 언제 오늘의 할당량이 소진되는지 사용량을 가늠할 수 없는 점 때문에 오도가도 못하는 난처한 상황에 처할 수 있겠다.
  • 테슬라메이트를 돌리면 차량의 모니터나 앱에서 알 수 없는 어마어마한 데이터를 취득할 수 있는데 곰곰히 생각해보면 이게 나한테 무슨 가치를 주고 있나 싶을 때가 있다. 사실 10월에 한달치 데이타 수집이 안되고 있던 것도 그 시기에 앱을 한번도 열어보지 않았기에 알아차리지 못했던 것. 말하자면 웹호스팅 이용고객이 자기 사이트가 문제없이 잘 열리고 잘 돌아가면 웹서버의 log 파일을 들여다볼 이유가 없는 것처럼.
  • microSD→SSD 교체, 테슬라메이트와 DB 업데이트와 마이그레이션에 얼추 3시간 정도 소요됐다. 써보니, 바꿔보니... 처음 셋팅할 때 SSD로 할걸..
  • 안정성은 써 봐야알겠지만 microSD보다 떨어지진 않을테고, 속도는 전 비교할 수 없이 쾌적해졌다.
  • 대충 유지보수하면서 쓰고는 있으나, 테슬라메이트를 라즈베리파이에 셋팅하고 돌리는건 내 기준에서는 문턱이 꽤 높은 작업.
  • 1년 여간, 3만여 km 주행하면서 쌓인 DB용량은 약 800MB이다.

라벨: