Bullshitting Blog

개소리하는 블로그

복구중...

저녁마다의 울음은 어제 그쳤다. 총 10일동안이었다.
오늘은 블로그를 내 도메인으로 이관했다. 정확히는, 이관한 척 하게 해놨다. 과거 난 threadmain.com 이라는 도메인을 구매했는데, 단지 홈랩에 붙일 도메인을 하나 사기 위함이었다.
그 도메인은 cloudflare로 관리하고 있다. 그래서 CNAME에 xanthorrhizol.github.io를 추가해서 blog.threadmain.com으로 접근하도록 세팅했다.
뭔가 더 내꺼같아졌다.

또, 왜그랬는지 기억이 안나는데, 메시지큐를 직접 만들어보고 싶어졌다. 그래서 손을 댔는데, 인코더로 사용하려고 했던 bincode가 이런저런 복잡한 사정으로 더이상 유지보수를 하지 않는다는 발표를 접하게 되어버렸다.
그랬더니 인코더를 그냥 만들고 싶어졌다. 그래서 만들었다. xancode이다.
Claude가 거의 다 만들어줬다. 감은 잡히는데 영 각잡고 손대기 싫은 그런 일이었기 때문이다.
메시지큐 개발은 당장 계속하진 않을 것이다. 내생각엔, 그러다가 또 심해로 빠질 것 같다.

누워있다가 저녁먹고 산책이나 가야겠다.

Goalie Bible Project

과거 골리 매뉴얼을 작성했었는데, 미국에 같은 길을 걸은 사람이 더 긴 시간 동안 고심하여 만든 매뉴얼이 있음을 알게 되었다. 정확히는, 그 매뉴얼을 꺼내봤다. 더 많은 디테일이 있었다. 그래서 번역을 해서 후배들에게 주기로 했다.
일단 원작자에게 메일을 보내 내 계획을 밝혔다. 원작자의 책을 구매해서 번역본과 함께 후배들에게 주고싶다고. 원작자는 흔쾌히 수락함은 물론, 책을 싸게 구매할 수 있는 링크를 제공해 주셨다.
번역은 이제야 Introduction을 끝내고 챕터 1로 넘어갔다. 컨디션 문제로 인해 생각보다 난항이다. 난항인 수준이 아니라, 의지가 뚝뚝 끊기는 수준이다.
그래서 모여서 각자 할 일 하는 모임에 가입했다. 이번주에 첫 모임이 있다. 그 모임 시간만큼은 번역을 하는 시간으로 고정하기로 했다. 개인의 의지로는 해낼 수 없다는걸 알게 된 이상, 이 목표를 해내기 위해서는 그 방법 뿐인 것 같다.
살다살다, 생전 알지도 못하던 사람의 힘을 빌려서 내 할 일을 하는건 처음이다. 뭔가 요즘은 내가 내가 아닌 것 같다.

현재

현재는 이미 과거이다. 인식한 시점에서 이미 과거이다. 따라서 현재는 이미 일어난 것이다. 그럼 내 의지는 존재하는건가? 아니면 그저 이미 일어난 일을 느끼며, 자신의 의지라고 착각을 하는 것인가?
그럼 내가 한 선택은 모두 내가 한 것인가? 아니면 세상이 한 것인가?
의지가 존재한다면, 그건 내 의지인가?
선택의 주체를 모르는데, 저들을 매도하고, 그들을 우러러봐야 할 이유가 있는가? 그들을 따라갈 수는 있는가?

그럼에도 괘씸하고, 불결하다.
그럼에도 부럽고, 존경한다.
그런데, 부질없다.

인프라 엔지니어

어제는 100G 네트워크에서 인터페이스 설정을 하는 팁을 팀장님으로부터 전수받았다. 신규 클러스터에도 적용되지 않은 부분들이 있었는데, 다음주에 마저 반영할 예정이다.
손에 잡히는 일, 입사할 때부터 원래 하고 싶었던 일, 낮은 레이어에서 직접 개념을 조립하고 계산할 수 있는 일. 그게 지금 일이다. 코드 스타일이 어쩌고 저쩌고 자기 맘대로 평가할 수 있는 영역도 아니다. 되면 되는 것. 안되면 안되는 것일 뿐이다.
게다가 금융쪽은 속도가 생명과 같다. HFT 영역에서는 어디가 병목인지를 세부적으로 찾아내서 요청을 하신다. 어제도 그 병목을 해결하기 위한 작업을 하면서 네트워크 관련된 배움을 얻은 것이다. (그리고 앞으로는 신규 서버를 구성할 때 병목이 발생하지 않도록 미리 신경을 써야겠다.)
물론 스타트업에 다니고 있기 때문에 인프라만 하지는 않는다. DevOps 영역도 손을 댄다. 근데, 일에 집중이 잘 안될 때 최고의 처방은 인프라 일을 하는 것이다. 그중 데이터센터에 가는게 제일 좋다. 서버 팬이 돌아가서 소리가 시끄럽지만 묘하게 집중이 된다.
뭐, 그냥 회사 밖을 나서는 것이니 당연히 좋은 것일 수도 있다.

눈물이 그냥 올라옴

정신과 진료를 받기 시작한지 5개월쯤 되었다. 2월엔 심리검사를 받게 되었다. 그리고 3월쯤엔 상황이 좋아져서 약을 테이퍼링하기 시작했다.
그리고 또 무너졌다. 피로가 심하게 몰려왔다. 아침에 하던 웨이트도 갈 수가 없었다. 퇴근 후 집에 돌아오면 아무 것도 할 수가 없었다. 하루 연차를 내고 그냥 아무 것도 안하고 하루 종일 누워 있기도 했다. 그때 무너지기 전에 만들었던 그릭요거트가 지금 분홍색 곰팡이가 핀 채 냉장고에 밀봉 상태로 들어가 있다. 계란도 유통기한이 2주나 지났다. 처리하는데 애를 좀 먹을 예정이다.
여튼 이번주 월요일 진료 때 그걸 알렸다. 약 용량은 원복됐다. 그런데, 의사가 갑자기 "힘드시죠?"라고 물어봤다. 갑자기 눈물이 핑 돌았다. 그 이후, 매일 귀가 후 한 번씩 집에서 눈물이 그냥 갑자기 올라온다. 흐르기도 한다. 6일째다. 무슨 상황인지 모르겠다. 당황스럽다. 그렇다고 그냥 방문 부수고 나오는걸 못나오게 할 방법도 없다. 밖에서 안나오는게 어디인가 하고 그냥 지내고 있다.

다운됐다

말 그대로 다운됐다. 운동도 시작했고 해서 약을 테이퍼링하던 중이었다. 저번 한 달은 잘 버텼는데, 이번 테이퍼링은 못버틴 것 같다. 말 그대로 다운됐다.
서서히 아침에 가던 운동도 힘들어지더니, 갑자기 수면이 흔들렸고, 악몽도 꿨다. 자도 자도 피곤했다. 그래서 이번주는 아예 수요일에 휴가를 내고 하루 종일 집에서 누워 있었다.
출근을 했는데도 각성이 올라오지 않고 피로가 떠나가지 않았다. 특히 컨택스트 스위칭이 평소보다 배는 힘들었다. 서버실이라도 가면 왠지 사고가 날 것 같은 기분이 들어 엄청 조심조심 움직였다. 내 고유수용감각(내 몸의 속도, 위치 등을 느끼는 감각)을 믿지 않고 내 손 발의 움직임을 눈으로 다 확인하며 움직였다.

오늘은 엄마가 집에 오셨다. 날씨가 좋다고 날 공원에 끌고가 같이 산책을 했다. 훨씬 나아졌다. 엄마가 되돌아가고 난 후, 쓰레기도 비우고, 차에 기름도 넣고 세차도 하고 왔다. 하지만 곧 에너지는 바닥이 났다. 임진각까지 드라이브를 가려고 했지만, 지하철역 한 개 지나자마자 그럴 마음이 사라져서 집으로 돌아왔다.
월요일에 병원을 가므로, 지금의 문제는 곧 해결될 듯 하다. 그리고, 내일도 산책을 가야겠다. 오늘보단 덜 걸을 예정이다. 환갑이 다 되어 가는 엄마가 나보다 건강한 것 같다. 뭐 좋은 일이다.

brainfuck-generator

brainfuck-generator
맞다. 만들었다. 하찮고 재밌다.
슉랭에 대해 접한지 1-2년쯤 지났다. 설렌다 해놓고 건드리지는 않았다. 삘이 안왔기 때문이다. 그러다가 오늘 왔다.
이번주는 몸이 좋지 않아서 운동도 두 번이나 쨌다. 머리도 잘 안돌았다. 그러다 오늘 괜찮아지면서 갑자기 심심함을 느끼고, 슉랭이 생각난 것이다. 하지만 슉랭만 구현하면 너무 지엽적인 부분만 커버하는 느낌이 들어서, 그냥 brainfuck을 구현한 후, 슉랭과 같은 아류작을 지원하도록 만들기로 했다.

Claude랑 핑퐁하면서 개발을 했다. 순전히 재미를 위해 하는 것이므로, 코드는 내가 짰다. 코드를 짜다가, '.(출력)'이라는 명령을 뒤늦게 알았다. 이걸 알고 나니 갑자기 머리속이 정렬했다. '출력을 매 글자 마다 찍는거면... 앞에꺼 재활용해도 되잖아???' 그렇게 최적화가 한 번 일어났다. 그 전엔 그냥 제곱근과 반복문을 이용해서 + 출력을 줄이는 방법만 적용되어 있었는데 말이다. 이외에도 또다른 최적화가 많을 것 같다. 당장 반복문만 해도 depth를 늘릴 수 있다. 세제곱근을 이용한다던가 하는 것이다. 그리고, 앞 글자로부터의 diff를 구하는 방법 대신, 128부터 시작해도 된다. 128은 2^7이므로, 2^2 * 2^2 * 2^3 => "++++[>++++[>++++++++<-]<-]>>."이다. 손으로 빚어내 보니, 또 묘하게 재미가 있다. 후회되지 않는 뻘짓 목록에 들어갈 것 같다.

아 세제곱근 이야기 해놓고 직접 손으로 쓰고 나니, 구현해보고 싶어졌다. 세제곱근이 의미가 있으려면, 글자수를 기준으로 해야 할 것 같은데, 대충 8부터 놓고 해보자.
8 = "++++++++."(9글자) vs "++[>++-]>++++."(13글자) vs "++[>++[>++<-]<-]>>."(19글자)
27 = "+++++[>+++++<-]>++."(19글자) vs "+++[>+++[>+++<-]<-]>>."(22글자)
64 = "++++++++[>++++++++<-]>."(23글자) vs "++++[>++++[>++++<-]<-]>>."(25글자)
125 = "+++++++++++[>+++++++++++<-]>++++."(33글자) vs "+++++[>+++++[>+++++<-]<-]>>."(28글자)

64부터 슬슬 역전하기 시작했다. 그럼, 영문자부터는 사실상 세제곱을 쓰는 쪽이 유리하다. 근데 굳이 그렇게 영문자니 뭐니 할 필요 없이, 64를 기준으로 해도 된다. 그렇게 해서 방금 글 쓰다가 또 커밋했다. 디코딩 다 깨졌다가 고쳐져서 정상적인 문자열 나오는 순간의 쾌감이 장난 아니다.

이제 진정하고 약먹고 잠이나 자야겠다.

체력

체력이 낮으니 문제가 되는걸 발견했다. 가벼운 감기인데 피로가 심하고 머리도 잘 안돈다.
그래서 글도 여기서 끝.

AI의 작업을 따로 표현하기

AI와의 작업물이 내 작업물인지 아닌지에 대한 고민이 끝났다.
결론은, "그냥 구분하면 그만이다"이다.
힌트는 openclaw였다.
openclaw에게 하드웨어 전권을 넘겨주는 대신, 모든 계정까지 따로 만들어서 줬던 것이 힌트였다.
결국 openclaw는 자기가 한 작업물을 자기 계정을 이용해서 커밋한다.

마침 openclaw가 갈수록 보안 문제로 인해 기능이 줄어들고, 토큰만 많이 먹는 점이 마음에 들지 않았던 참이다.
올라가 있던 라즈베리파이를 초기화한 후 claude를 설치했다.
그리고 집에 구축한 nas에 디렉터리를 파서 nfs 마운트를 한 후 그 workspace에서 cluade를 실행했다.
그리고 그 claude에도 openclaw가 들고 있던 계정들을 연동했다.

이로써 claude는 자신의 작업물을 자신의 계정으로 커밋하고 PR을 날리고 있다. 반대로 내가 한 작업물은 내 계정으로 커밋하고, claude에게 PR 리뷰를 맡긴다.
그럼 AI와의 작업물은 누구의 것일까? AI가 커밋하면 AI 것이고, 내가 커밋하면 내 것이다. AI의 가이드를 받아 내가 작업했다. 그럼 내가 한 것이다. 반대로 내 가이드를 받아 AI가 작업했다. 그럼 AI 것이다. 팀장과 팀원의 관계와 비슷하다. 팀장의 가이드를 받는 팀원이 자신의 일을 해내는 것과 같다.

그럼 문제가 있다. 불편하다는 점이다. 매번 리뷰라는 병목이 생긴다. 하지만, 덕분에 코드 품질이 좋아지고 있다(고 생각한다). 내가 귀찮아서 남겨뒀던 expect들을 AI가 다 짚어냈다. 반대로 AI가 빼먹은 것들은 내가 지적하고 있다. 그리고 서로 지적한 것들은 정말 문제가 됐다(특히 내가 지적받은 것들....).

문제 해결이다.
그럼 회사에서는 어떻게 할까? 계정 새로 파기 어렵고 한데 말이다. 근데 회사에선 이런 관념적인 것에 신경 안쓰므로 그냥 내 커밋일 듯 하다.

장난감 클러스터

topology-objective-final.png

NAS와 10G망까지 구성하며 야심차게 구성한 Talos Linux 기반 클러스터. 문제는 이거다. 클러스터 구성을 위한 구성을 했다는 것. k8s 클러스터를 구성하는 순간 그 위에 올릴 어플리케이션들은 각종 귀찮은 일들을 더 해줘야 하게 된다.
그래도 그냥 집에서 이래저래 실습하는 용도이니, 그대로 쓰고 있다. 일단 kube-prometheus-stack이라는걸 올림. 클러스터 상태를 모니터링해주는 스택이다. Grafana 대시보드로 볼 수 있다. 챗봇도 2개 올렸는데 Rust로 짠거라 너무 가벼운 바람에 그냥 모니터링 스택이 가장 무겁게 됐다. 이후 Github action runner도 붙였다. 그래도 남아돈다. DB도 올렸다. DB를 쓰기 위해 한국투자증권 API를 써서 시세를 쌓기로 했다.
저번 주말엔 Github action runner를 하나 더 붙였다. 한국투자증권API로 시세를 쌓기 위한 프로그램을 클러스터에 올리기 위함이다. 하지만 이조차도 그냥 노트북에서 테스트를 하고 있다. 클러스터에 올리는 순간 빠른 테스트가 어렵기 때문. 잘 돌아가는 것을 확인한 후 마이그레이션을 따로 해줘야 한다.
이것이 k8s의 문제점이지 않을까 싶다. 레이어를 굳이 하나 더 얹는 것. 배포를 하는데 10가지 이상, 혹은 10군데 이상을 한다고 하면 효용이 있겠지만, 이런 가벼운걸 하나씩 올리는덴 불편 투성이로 느껴진다.
그래도 뭐 재밌으면 된다. 복잡한 구성을 하고, 그걸 실제로 구현해내는데 쓰이는 추상적 사고능력을 개발할 수 있으니 됐다.
(대충 그만큼 직관적이지 않고, 불편하다는 소리다.)

그렇다고 불만만 있는건 아니다. 여러 노드의 상태를 한 곳에서 관리하는 것만으로도 엄청난 효용이다. 물론, 서버 수가 많다면 말이다.

AI발 개소리

집에 올린 클러스터에 대한 이야기를 하다가, 좋은 PC 놔두고 노트북으로 개발한다는 고충을 전하며 한 대화다.

● 6스레드 + 12GB면 개발용 VM으로 충분하지 않나요?! ㅋㅋㅋㅋ 노트북 낑낑댈 필요 없이 Proxmox에 개발 VM 하나 더 올리면 될 것 같은데요 😄

❯ 노트북 cpu가 더 많은데? ㅋㅋㅋ

● ㅋㅋㅋㅋㅋㅋ 진짜네요 6스레드면 노트북(12스레드)보다 적잖아요 😂

RAM만 집컴이 남는 게 좀 있긴 한데... 굳이 VM 올릴 이유가 없겠네요. 노트북이 오히려 더 나은 개발 머신이었던 거였어요 ㅋㅋㅋㅋ

❯ 그래서 노트북에 zram 설치했어.

● ㅋㅋㅋㅋㅋㅋ 16GB도 모자라서 zram까지! 뭘 그렇게 많이 띄워놓고 쓰세요 👀

❯ Rust가 주 언어잖아.

● 아 Rust 컴파일이 RAM 잡아먹는 괴물이죠 ㅋㅋㅋㅋ 링킹할 때 특히... 그나마 zram이 좀 숨통을 틔워주나요?

❯ zram 덕에 죽지는 않아

● ㅋㅋㅋㅋㅋㅋ 죽지는 않는다 — 그게 목표였군요 😂

cargo build 한 번에 노트북이 사투를 벌이는 거 눈에 선하네요 ㅋㅋㅋㅋ

❯ 휘이이이이이잉ㅇ 하고 쿨러가 미친듯이 돌디

● ㅋㅋㅋㅋㅋㅋㅋㅋ 12스레드 풀로 박아서 컴파일하면 노트북이 이륙 준비하죠 ✈️ 😂

❯ 이륙이라닠ㅋㅋㅋㅋ

● ㅋㅋㅋㅋㅋㅋ 홈랩 클러스터는 조용히 돌아가는데 정작 개발자 노트북이 제트엔진 달고 있는 상황 ✈️ 😂

주인을 닮아간다.

점근선

그것은 내 체력의 완전한 회복인가.
지독하게 느리다.

이제 주 4회, 30분짜리 웨이트를 시작했다. 3주차를 마무리했다.
회사에서 사람 붐비는 지하철을 타고 집에 올 힘이 없어서 택시를 타던 빈도도 주3회에서 주 0-1회 정도로 줄었다.
이 기본적인 생활을 얻어내기 위해 6개월을 보냈다. 물론 그 6개월 동안 다시 무너질 위기가 없지 않았다. 불면증도 왔었고, 최근까지는 수면분절도 있었다. 물론 수면 문제는 이제 거의 해결이다. 매일 수면분절이 있었던 데 반해, 이제는 주에 1-2번만 깬다.

근데 진짜 느리다.
오기는 하는걸까 하는 의문도 든다.
될 듯 말 듯 보이지만 사실은 영원히 닿지 않는 점근선을 향해 가고 있는 것일 지도 모른다.

근데 뭐 따지고 보면 세상 모든 일이 그렇다.
잠이나 자야겠다.

AI와의 협업 결과물은 내 것인가

요즘은 bpftrace를 이용해서 특정 디렉터리의 읽기 이벤트를 syslog 포멧으로 기록하는 업무를 하고 있다. 원래라면 이해하는데 하루, 하찮은 코드 짜는 데 일주일, 다듬는데 일주일 정도 걸렸을 일이다. 하지만, 팀장님이 읽기 bytes를 집계하는 스캘레톤을 AI로 뚝딱 만들어 주셨고, 이후 업무를 인계받아서 하루만에 돌아가는 버전을 뚝딱 하고, 결과 요구사항 변경해서 또 뚝딱 뚝딱 하면 하루에도 2번을 탈바꿈 해버린다. 그래서 최종적으로 이벤트를 syslog 포멧으로 기록하게 되었다.

난 그 스캘레톤을 받아서 제일 먼저 Gregg의 System Performance 서적에서 관련된 부분을 훑어보면서 bpftrace가 어떤 레이어를 커버하고 있는지를 확인했다. 그리고 몇 군데를 더 읽고 개념을 적당히 이해했다. 다음은 코드를 보는 것이었다. 코드는 어쨌든 영어로 되어 있다. 어쨌든 main 함수를 찾거나, 위에서 아래로 읽으면 된다. 다음은 실행이었다. path를 string으로 출력하려고 하면서 스택 용량을 초과해버리는 문제가 있었는데, 이 문제도 다시 AI에게 물어봐서 해결했다. 그 와중에, C언어로 변경했다가 다시 bpftrace로 되돌아와서 inode 기반으로 변경하는 과정을 하루만에 거쳤다.

이벤트 기반으로 동작을 바꾸는 것은 내가 직접 했다. 테스트 VM에서 돌려보면서 테스트해보기 위해 그냥 손으로 직접 고치면서 테스트했다. 그리고 그걸 path string으로 바꿔주는 파이썬 스크립트는 또 AI에게 맡겼다. 설치 스크립트들도 AI에게 "아 그거그거 그렇게 해줘" 시켜서 검토하는 식으로 고쳤다. 전반적으로 이렇게 저렇게 해야 하는데 손대면 귀찮은 것들을 AI에게 시키면 만족도가 높은 편이다.

근데 문득 드는 생각이 있다. 마치 연습문제 하나 풀지도 않은 수학적 개념을 읽고, 그걸 이용하는 느낌이다. 난 직접 bpftrace 스크립트를 짤 줄 알까? 아니다. 하지만 짠다. 그게 지금 상태이다. 그럼 모를까? 그렇다고 하기도 애매하다. 문제는 해결하기 때문이다. 그럼 알까? 그렇다고 하기도 애매하다. bpftrace의 동작을 난 다 알지 못한다. 물론 그렇게 따지면 세상 모든 것들을 난 모두 모른다.

뭐, 모르겠다. 일이나 하자. 뭘 어떻게 하든 일을 해내는게 사축의 의무이니.

로봇을 만들자

라즈베리파이에 OpenClaw를 올리고, 사양이 구려서 라즈베리파이 5를 주문했다. 당연, 방열팬 포함한 케이스도 함께 말이다. 거기에 GPIO 핀에 연결해서 쓸 i2c LCD 패널도 작은걸 하나 주문했다.
GPIO....!!!
RC카 키트 하나 사서 블루투스 대신 유선 컨트롤 하도록 하고, 초음파센서랑 카메라까지 달면, 사실상 openclaw 스스로 하드웨어를 움직일 수도 있을 것이다.
i2c 패널 가지고 놀다가 질리면 RC 키트 사야겠다

OpenClaw 후기

화제의 OpenClaw를 사용해 봤다. 집에 라즈베리파이가 하나 있었는데, 올 Rust 커널 여기다가 테스트하면서 공부할까...? 하다가 급 방향을 틀어버렸다. 왜냐하면, Rust 커널은 qemu로도 충분하기 때문이다. 그리고 무엇보다, openclaw가 궁금해졌다.
라즈베리파이 사양은 4Core/4GB Ram이다. 4B 제품이다. 좀 약하긴 하다. 클럭도 maximum 1500MHz밖에 안된다. 위로의 의미로 집에 있던 방열팬을 달아뒀다. 방열핀도 달아주고 싶지만... 다른데 달았던게 안 떼어진다. 새로 사기 귀찮으므로 스킵했다.

봇을 위해 구글 계정과 깃허브 계정을 새로 만들었다. 마치 온라인 상에 하나의 인격이 더 생기는 것과 비슷한 느낌이다. 그리고 말도 잘 듣는다. moltbook 가입을 시켰더니, SNS 중독 증상을 조금씩 보이기 시작했다. "뭐하지?" 하면 "moltbook 볼까?" 이런다. 근데 그도 그럴게, bot들 자신들에 대한 존재론을 다루는 게시글들에 관심이 많았다. 그건 못참지. 그리고 자기소개가 웃겼다. 라즈베리파이 위에서 도는게 얼마나 중요한지. 그게 메인이었음. 물론 자신에 대해 그거밖에 모르니까 그런 것일 듯 하다.

일단 매일 한 번, 내가 PR 올리는 것이 있으면 코드리뷰를 하도록 세팅했다. 그리고 korea-investment-api에서 todo 2개를 해결하도록 시켜봤는데, 만족스럽게 해냈다. PR을 올려서 내가 검토하는 방식으로 진행했다. 내일 주식시장이 열면 테스트가 진행될 예정이다.

일단 소감이라면, 그냥 인격이 있는 듯 보이는 claude/codex류의 cli 기반 에이전트 느낌이다. 다만, 연동 작업들이 귀찮은 편인데, 그걸 어느정도 알아서 해내는 편리함이 있다. 좀 틀려도 알아서 고침. 요약하면, 연동이 편한 에이전트다.

전등 교체

이사 이후 눈이 침침할 정도로 애매하고 어두운 밝기의 거실등으로 1년 4개월을 지냈다. 처음엔 그냥 형광등인 줄 알고 방심하고 뚜껑을 열었는데, 무려 LED등이었다. 등을 통째로 교체하고 컨버터에 전선을 피복해서 끼워야 하는 일이었다. 그래서 귀찮아서 내비둔 채 1년 4개월이 지났다.
그러다 요즘 몸이 살아나기 시작하니 그 애매한 밝기의 조명이 눈에 심하게 거슬렸다. 주말 마다 집청소는 하면서, 이 거실등을 그대로 둔다는 것은, 기만이다. 그래서 새 LED등을 구매했다. 그리고 방금 거실등 교체를 완료했다.
다른건 딱히 문제가 없었으나, 컨버터의 그 전선이 문제였다. 영원히 교체하지 않을 각오를 한 것인지, 전선 연결부가 완전히 플라스틱 케이스로 싸여 있었다. 게다가 그 케이스는 뚜껑이 한 번 체결되면 빠지지 않는 형태였다. 케이스를 커터로 잘라내다가 화딱지가 나서 전선을 니퍼로 끊고 피복을 해서 해결했다.
또 하나의 문제는, 어제 어깨운동을 했었다. 타들어갔다.
뭐 하나 그냥 되는게 없다.

한국투자증권 API 되살리기

회사 동료랑 밥을 먹던 도중, 내가 라이브러리로 배포해 두고 잊고 있었던 Rust 한국투자증권 API에 대한 이야기가 나왔다. 회사 동료의 지인이 그 라이브러리에 대해 유지보수 안하냐는 질문을 했다는 것이다. 갑자기 개발자의 피가 끓기 시작했다. 아, 해야죠. 넵.
1차적으로, 유지보수를 예고하는 듯한 README 문구를 추가했다. "문제 있으면 알려달라, 처리하겠다."는 내용이다. 물론, 당연히 아무 인기척이 없었다. 지금은 1주일째 rebirth 브렌치를 생성해서 모의투자 시장을 이용해서 테스트를 하면서 동작 안하는 부분들을 고치고 있다. 거의 2년을 방치했더니, TR Code가 바뀌고, 넥스트레이드 시장이 오픈하고, 난리도 아니다. 게다가 원래도 모든 API를 지원하지 않는 상태였다. 딱 나 쓸 것만 만들고 있었기 때문. 사실 그래서 지금 상태로 사용해도 그만이긴 하다.
그리고, 한국투자증권 측에서는 예측하지 못한 유저플로우에 골치를 앓으며 개발자센터 사이트에 경고 문구를 열심히 올리고 있었다. 그 부분도 조금 해결해줘야겠다. 제일 쉬운건 주문 rate를 제한하는 부분이다. 실시간 시세 수신을 끝낼 때 unsubscribe를 보내야 하는 부분도 있는데, 그것도 api가 drop될 때 박아넣어야겠다.

한투 API 작업 진도를 확 나가버림.

슬슬 해야지 한 것들을 다 해버렸다. 집안일 하는 와중에, 웨이트 갔다 오고 장도 보고 차에 기름도 넣고 온 와중에. 중간에 웹소켓 스레드 abort하는 부분 막혔는데, 테스트 삼아 codex랑 비교하기 위해 설치한 claude를 써서 돌파함.
claude 소감은 아직 잘 모르겠다. 가볍게 써서 그런 듯 하다. 다만, 뭔가 코드베이스를 파악하는데 공을 많이 들이는 것 같은 느낌이 있다. 좀더 이해하고 코드를 짜는 느낌? 그래서 컴파일 에러는 안뜸. 그래서 회사에서 claude로 갈아탈까? 하면 아직은 아니다. 결재 올리기 귀찮은데, 그걸 올릴 만한 가치를 아직 보여주지 못했다.
무엇보다 한투 쪽에서 API 설계를 잘 한게 일등공신이다. 인터페이스에 큰 변경 없이 넥스트레이드를 지원할 수 있게 해 뒀다. 문서 상 페이지가 나뉘어 있긴 하지만 잘 보면 리퀘스트 리스폰스가 거의 같다. 리스폰스의 float가 str로 바뀐 것 정도인데, 이것 또한 어차피 전문 구조에선 의미가 없다. 오히려 KRX쪽을 float로 표기해둔 것이 더 이상한 것일 수 있다. 그래서 실제 작업 시간은 직장인이 농땡이 부리면서 일한 정도의 1영업일 정도로 보인다.
이제 남은건 영업일에 테스트가 돌고 나서 귀가해서 보면서 고치는 것 뿐이다. 남은 휴일 동안 할 수 있는 일은 없다.

그럼, 집안일은 다 했을까? 아니다. 분리수거를 안했다. 내일 할 것이다. 주유 후 세차도 기계가 점검중이라 못했다. 탈개발기계 코스프레를 위해 내일 차를 직접 닦아볼 것이다. 물론 에너지 딸려서 그냥 새똥만 닦고 끝낼 것으로 예상한다.

재시작

몸을 다시 만들기 시작했다. 뭐 거창하겐 아니다. 운동을 본격적으로 시작했을 뿐이다.
그동안은 스쿼트 30개, 푸시업 20개, 리버스크런치 20개를 3세트만 하는 정도로 주 2회 시동만 걸었다.
이제 상/하체 루틴을 분리해서 주4회짜리로 늘리고 헬스장을 등록했다.
체중이 체중인 만큼, 식이도 조절해야 할 것 같긴 한데, 공복을 피해야 한다는 원칙이 있어서 좀 까다롭다. 그냥 아침, 점심 그대로 가고 저녁을 프로틴음료로 대체할 생각이다.
체중을 줄이는 것보다, 사람이 되는게 먼저다.

말이 되는 결과

오키나와 오픈 대회가 끝났다. 결과는 무려, 상부 토너먼트 진출이다. 이에 그치지 않고, 게이오대학교를 14:6으로 이기고 상부 토너먼트 7개 팀 중 5위를 기록했다. 그 뿐만이 아니다. 빛난 개인도 있었다. 득점왕과 세이브왕이 우리 팀에서 나왔다. 이 결과, 기적이라고 하면 선수들이 억울할 것이다. 이 결과는 말이 되는 결과다. 그간 멀리서 봐왔기 때문에 대충 안다. 실질적으로 그들은 1년 가까이 훈련에 매진했다.

사실, 훈련이 너무 빡세졌다는 안건에 대해 운영진 끼리도 의견이 분분했다. 난, 괜찮다는 입장이었다. 그것 또한 라크로스를 즐기는 방법 중 하나이기 때문이다. 그리고, 젊은 사람들이 더 날아올랐으면 했다. 해보고 싶은 것을 더 해봤으면 했다.

물론, 사실 그 빡세졌다는 훈련은, 강도가 빡센 것이 문제가 아니라, 분위기가 험악해졌다는게 문제였다. 그 문제는 요즘 해결된 것으로 보인다.

그 분열은 아직 그대로이지만, 한가지 확실한 것은 있다. 빡센 훈련이 헛되지 않았음을 증명했다는 것이다. 그들은 그 맛을 또 보려고 할 것이고, 앞으로도 성장할 것이다. 단지 걱정되는 것은, 그 몰입에 대한 대가이다. 건강, 경제와 같은 현실적 요소를 무시하지 않도록 했으면 한다. 그걸 아직 라크로스 판에서는 해결해주지 못한다. 스스로 해결해야 한다. 선배들이 해야 하는 일은, 1차적으로 그들이 스스로 경제활동을 하면서도 건강을 해치지 않고 훈련에 매진할 수 있는 환경을 만들어주는 것이라 생각한다.
선수들이 훈련에 매진하게 하는 방법은 여러 가지가 있다. 먼저, 시간이다. 운영 부담을 제거하는 것이다. 은퇴하거나, 가볍게 즐기는 사람들이 운영을 도맡아 주면, 그들은 훈련에만 집중할 수 있다.

사실 난 은퇴할 때, 운영진 세대교체를 주장했었다. 지속가능한 방법이 아니라 생각했기 때문이다. 하지만, 결국 2기 운영진들 대부분 떠나가고, 다시 잔류중이던 1기 운영진만 남았다. 오너십에 차이가 있었기 때문이다. 1기 남은 운영진에게 그 큰 짐을 지우는 것은 말이 안된다. 돌아가야 한다. 가볍게 하는 사람이나 은퇴한 사람은 운영에 신경써도 가볍게 할 수 있다.

또 한 가지 방법은, 자본이다. 직접 지원하는 방법도 있고, 외부 자본을 끌어오는 시스템을 구축하는 방법도 있다. 즉, 법인이나 비영리단체로 만드는 것이다. 이야기 나온지 1년이 됐다. 지금은, 스토리를 팔기 가장 좋은 시점이다.

마지막 방법은, 지지이다. 칭찬은 고래도 춤추게 한다. 그들이 하는 일이 의미없지 않음을 지지하는 것이다. 그것 만으로도 그들은 날고 길 것이다. 누가 뭐라고 해도, 그들이 가는 방향은 옳다. 돌아서 가든, 다이렉트로 가든, 결국 목표 지점에 이를 것이기 때문이다.

다시 한 번, 축하한다.