Bullshitting Blog

개소리하는 블로그

QEMU VM 생성 삽질기

Rust 커널 서적을 따라가면서 커널을 빌드해서 qemu로 실행시키기 위한 과정을 밟고 있었다. 그리고 busybox 위에서 그걸 돌리도록 되어 있었음. 그래서 busybox 최신 릴리즈(1.37.0)에서 make menuconfig 실행하는데, ncurses가 없다고 설치하라고 자꾸 떴다. 대충 그 방향키로 뚝딱거릴 수 있도록 GUI스럽게 만들어둔 터미널 기반 환경을 사용하기 위해 필요하다고 함. 근데, 문제는 그 패키지 이미 설치 다 되어 있다는 것이다. 그리고 이미 리눅스 커널 빌드하기 전에 똑같이 make menuconfig 이용 잘 했었음.

그럼 그 환경 대신 일반 cli 환경을 이용하는 방법이 있다. make config 하면 되는데, 그렇게 해봐도 실제로 qemu로 실행해보면 아무 것도 안뜨고 멈춰 있었다. 그래서 처음엔 qemu 해결하려고 이런저런 해결책들을 반영하면서 삽질을 했다.

ChatGPT 선생에게 보고를 했고, linux-api-headers, base-devel 다 재설치 해도 해결이 안됨. 그랬더니 선생도 귀찮은지, “아 소스 까봐! scripts/kconfig/lxdislog/check-lxdialog.sh 이거임. 대충 거기서 에러 왜 뱉는지 찾아보셈” 이런 식의 답변을 함. 정말 들어가서 봤더니, 문제되는 부분이 있었다.

그리고 이제 ChatGPT 선생이 이제 시니어를 해먹기 시작한 듯 하다. “아 그 저 여기에 거기 그 뭐 있을텐데 봐보셈”. 방식의 답변이다. 대충 바이브인데 정확하기까지 하다.

image.png

C언어 메인함수에 반환형 타입도 명시 안하고 쓰는 신박한 모습이다. 저 부분 int 추가해주니 해결됨. 그래서 git repo 최신에도 저게 저렇게 들어가 있는지 확인해보니, 이미 작년에 고쳐놨다. “릴리즈 주기가 이렇게 느리다고?” 싶다. 사실 부럽다. 우린 고객사의 “해-줘” 한 마디에, 해가 중천에서 “아 피곤한데 집에 갈까?” 하는 오후 3시에, 갑자기 새 일에 착수해서 다른 일 다 제쳐두고 일주일동안 그 짓만 하는데 말이다. 그에 반해 이 busybox는 최신 릴리즈인 1.37.0은 작년 9월, 저 부분이 고쳐진건 작년 10월이다. 그리고 지금까지 릴리즈가 안된 것이다. busybox라는 이름과 대비된다.

여튼 그럼 해결 됐을까? 아니다.

그럼 실제로 문제 원인은 뭐였냐고? 기대해도 좋다.

콘솔을 ttyS0 로 이용해야 하는데 tty50 으로 계속 쓰고 있었다. 심지어 “왜 굳이 50이지? 다른 특별한 숫자도 아닌?” 하면서 그냥 50을 입력하고 넘어감. 그래서 쉘에 아무 것도 출력이 안된 것이었다.

이게 디버깅의 묘미다. 돌고 돌아 오타 한 글자를 찾는 행위가 바로 디버깅이다.

삶의 블랙스완 제거하기

서론

“정의는 무엇인가”라는 책을 읽고 소감문을 쓰다가 언급한 그 블랙스완에 대한 이야기를 해보겠다. 해로운 사람. 그것을 난 블랙스완으로 묘사했다. 언제 어디서 나타날 줄은 모르지만, 걸리면 꽤나 큰 타격을 입는, 그것이 블랙스완이다. 그럼 그 해로운 사람은 도대체 무엇일까? 나랑 안 맞는 사람일까? 아니다. 안 맞는건 그냥 안 맞는거지, 나쁜 것이 아니다. 오히려 안 맞다는 것을 확인하였음에도 그 사람이 해로운 사람 축에 속하지 않는다면, 그 관계는 나쁘지 않다. 아무리 사이가 나빠도 이 정도가 최저라는 것을 확인한 것이기 때문이다.

난 Taker적 성향을 가진 사람을 해롭다고 여긴다. 심리학에서 나오는 개념이었는데, 쉽게 말하면 기업가도, 사업가도 아닌 장사치를 뜻한다. 그 장사치적 성향이 일상에도 발현되는 사람들이 있다. 그게 Taker다. 조금이라도 더 얻어가려는 사람. 조금이라도 덜 내주는걸 고민하는 사람이다. 이들은 눈치를 살살 보며, 먹잇감이 될 Giver를 찾아다닌다. Matcher는 계산이 빨라서 다루기 힘들기 때문이다.

Taker들은 두 가지 종류가 있다. 황금알을 낳는 거위의 배를 갈라 알을 재빨리 꺼내는 사람과, 거위를 잡아서 우리에 가두는 사람이다. 전자는 그냥 일상 생활 속에서 접하기 쉽고, 파급력도 약하다. 바가지를 씌우는 장사치 정도의 포지션이다. 하지만 후자에 걸리면 정말 인생의 흐름이 바뀔 수도 있다. 그래서 이 블랙스완을 제거하는 것은 삶에서 아주 중요하다.

제거법

평소에 항상 인간으로서 독립성을 유지한다. 의존이 습관이 되면, 그 대가를 받게 되어 있다. 물고기가 낚시바늘에 걸리는 이유는, 그 물고기가 원인모를 횡재에 의존했기 때문이다. 공중에 무방비하게 떠있는, 직접 잡지도 않은 먹잇감을 보고 달려들었기 때문이다. 낚시꾼은 그렇게 의존적 성향을 자극할 미끼를 던져놓고 기다린다. 애초에 의존하지 않으면, 해로운 사람을 쳐내기 쉽다. 아쉬울 것이 없기 때문이다.

행동도 엄격히 한다. “이런 상황이면 이렇게 해도 되네?”가 불가능하도록 하면 그들은 알아서 떨어져나간다. 숨을 쉴 수 없기 때문이다. 맑은 물에 고기가 꼬이지 않는다는 말이 있다. 너무 청렴하고 빈 틈 없으면 사람이 모이지 않는다는 말로들 해석하지만, 내가 보기에 이건 물이 맑으면 그 속을 휘젓고 다니며 물을 더럽힐 고기가 꼬이지 않는다는 뜻이다. 호구잡을 사람이 있더라도, 그 사람 근처에서 왜인지 숨이 쉬어지지 않는다면, Taker는 쉽게 떠나간다. 쉬운 타겟을 찾는 것이 그들의 습성이기 때문이다.

탐지법

일반적으로는 탐지를 하기보다는 제거를 해야 한다. 애초에 만만해 보이지 않으면 Taker들은 접근하지 않는다. 게다가 자신에게 힘이 없다면, 처음부터 그들이 접근도 못하게 해야 한다. 탐지를 위해서는 미끼가 필요하기 때문에, 힘없는 사람이 하기엔 쉽진 않다. 그 미끼는 강한 사람들이 해줘야 한다. 따라서 탐지를 할 줄 알아야만 하는 사람들이 있다. 조직의 리더들 말이다. 물론 그들도 당장 탐지를 하더라도 행동을 취할 힘까지는 없는 경우가 많다. 그래서 리더가 괴로운 자리인 것이다. 하지만 그럼에도 탐지는 멈추지 않아야 한다. 힘이 없는건 익스큐즈가 된다. 하지만 모르고 있는 것은 그냥 무능이다.

그럼 어떻게 하면 될까? 방법은 간단하다. 바보인 척 하는 것이다. 스스로 미끼가 되는 것이다. 해로운 사람은 항상 자기가 어디까지 선을 넘어도 되는지를 시험한다. 그 단계가 가장 중요하다. 그들이 자리를 잡고 신뢰관계를 형성하기 전에 조기발견해야 하기 때문이다. 예방엔 한계가 있다. 해로운 사람이 이곳을 만만하게 보고 빨리 활개치게 만들어야 조기 발견이 가능하다. 따라서, 그들에게 바보처럼 속는 척 하며 지내며 지켜본다. 그들이 방심한 사이, 타인의 눈에도 다 보이기 때문에 신뢰를 빠르게 잃게 된다.

그럼 반대로, 그들이 감히 얼씬도 하지 못하게 강해 보이는 리더가 되는건 어떨까? 애석하게도, 리더가 강해 보이면 Taker는 다른 약한 사람을 찾아내고 교묘하게 숨어버린다. 당장은 눈에 보이지 않기 때문에 전체적으로 덜 괴로울 수도 있다. 하지만 그들이 그 조직에서 조용히 시간을 쌓을 수록 떼어내기도 어렵게 된다. 그들은 누구에게 신뢰를 얻어야 하는지 잘 안다. 따라서 나중에 그들을 떼어내려면 파벌이 나뉘어서 정치적 선택을 해야 할 수도 있다. 심하면 그들에게 잡아먹힌 인물의 정신건강에 문제가 생겨, 방어기제를 펼치며 부적절한 행동을 하는 단계에 이르기도 한다. 그래서 엉뚱한 사람이 악역 포지션에 서버리기도 한다. 그 개판 속에서 리더는 눈이 멀기 쉽다. 그렇게 혼란이 번지기 전에, 리더는 미리 탐지해야 한다.

마무리

뭔가 많이 겪어본 사람처럼 이야기하고 있지만, 사실 나도 아직 알아가고 있는 단계이다. 나이도 이제야 서른 둘이다. 가소롭다. 게다가 인복이 좋은건지, 아니면 그냥 사람을 많이 안 만나서 그런건지는 모르겠지만, 그런 블랙스완을 겪어본 적은 정말 손에 꼽는다. 어쩌면 또 어디선가 예측하지 못한 블랙스완이 나타날 지도 모른다. 하지만 이젠 안다. 아니 원래 알았다. 결국 그들의 패배로 끝난다. 지금까지 그래 왔다.

따라서 초조해 하지 말고 그냥 자기 길을 걸으면 그만이다. 유유상종이라 한다. 시간이 지나면 자신과 비슷한 사람들만 남는다. 주변 사람에게 원하는 모습이 있다면, 자신이 먼저 그것을 하면 된다. 그리고 그걸 알아주는 사람들과 지내라. 설령 이용당하는 것처럼 느껴질지라도, 괜찮다.

역설적이다. 블랙스완을 제거하며 살아야 하는데, 왜 자신을 이용하는 사람을 가까이 하라는 것인가? 이유는 조금 복잡하다. 의존하지 않아야 하기 때문이다. 그 관계는 원할 때 그냥 끊어낼 수 있는 관계다. 그 반대가 되어선 안 된다. 아쉬운 관계라는 것은 즉 그곳에 의존하고 있다는 뜻이기 때문이다. 자신의 가치를 알아주는 곳에서 먼저 베풀다 보면 거기서 블랙스완이 제거되는 때가 올 것이고, 진정한 동료, 혹은 은인들이 남을 것이다.

정의란 무엇인가

맞다. 책을 읽었다. 원래 작년에 샀다. 디스크 때문에 누워서 할 수 있는게 너무 없어서 산 몇 권의 책 중 하나다. 현직 정치인 두 명의 특별기고문이 수록되어 있었는데, 책 내용을 아주 짧게 잘 정리해주는 바람에 이 책의 우선순위는 저 뒤로 밀렸었다.

그럼 이 책은 왜 골랐는가 하는 의문이 있다. 나와는 거리가 아주 먼 책이다. 근데 그냥 아버지 영향이 컸다. 아버지는 이과 문과 할 것 없이 모든 분야에 박학다식했다. 역사 연표도 다 외우고 있고, 상대성이론까지 설명이 가능하다. 심지어는 총선 결과를 보자마자 윤석열의 계엄령까지 예측했다. 그냥 그렇기만 하면 좋은데… 그런 것들을 내가 모르면 무식하다고 핀잔을 줌. 그래서 내가 주로 쿠사리를 먹는 분야는 단연 인문학 분야였다. 그래서 왜인지 이상하게 이름이 낯익고, 유명한 책이었던 그것을 덥썩 주문했다. 과거 무슨 책인지는 자세히 기억 안나지만, 아버지가 “그것도 안 읽었다고?” 하고 핀잔을 줬던게 있는데, 그게 이 책인가 싶었다. 책을 살 때는 이게 무슨 분야인지도 몰랐다. 정치인들의 기고문이 수록되어 있는걸 보고서야 알게 되었다. 정치와 윤리에 대한 이야기였다. 정확히는, 인류를 어떻게 인도해야 하는가에 대한 이야기였다. 고위층의 배부른 고민이다. 읽어보니, 아버지가 이야기했던 책은 이 책이 아니라 자유론과 정의론이었을 듯 하다. 이 책은 애초에 2009년에 공개됐다. 아버지가 한창 공부하고 교양을 쌓던 시기와 동떨어져 있다.

대학생 때 사회계열 전공이나, 그쪽에 관심이 많던 분들이 쓰던 용어가 대부분 나왔다. 베스트셀러이기도 했으니, 그 출처가 이 책이었을 듯 하다. 90년대생의 정치관에 큰 영향을 미쳤을 것으로 보인다. 책에서는 균형있는 시각을 유지하려 노력하는 모습이 다분히 보였다. 물론 공리주의에 대해서 글쓴이는 자신의 부정적 견해를 숨기지 못했다. 대놓고 까도 추종자가 적어서 역풍을 맞지 않을 만한 사상이기 때문인 듯 하다. 하지만 자유주의, 공동체주의에서는 어떤 사상을 지지하는지 명확하지 않다가, 마지막에 자신의 견해를 드러내는 부분에 가서야 알 수 있었을 정도로 포커페이스를 잘 유지했다.

내가 이 책을 읽었다는 것을 알게 된 사람이라면, 나에게 끌리는 사상을 분명 물을 것이다. 여긴 지맘대로 개소리하는 블로그다. 밝히겠다. 난 고작 교양서 하나 읽었다고 거만하게 한 쪽을 지지하는 것만큼 어리석은 것은 없다고 생각한다. 책 한 권만 읽은 사람이 제일 무섭다. 책 한 권만 읽었으면 일단 조용히 해야 한다. 무식한 자의 신념 만큼 무서운게 없다.

개인으로서 해야 할 일은, 가벼운 지식을 뽐내며 한 쪽을 지지하는 것이 아니다. 실생활에서 겪는 사건들 속에서 자신의 도덕적 가치관을 지키는 것 뿐이다. 누군가는 트롤리 딜레마 상황에서 한 명을 “죽이는” 것과, 여러명이 죽는 것을 그냥 “지켜보는”, 두 가지 선택지만 존재한다고 했을 때, 한 명을 죽이는 것을 선택할 수도 있다. 그리고 사람들은 한 명을 “죽이는” 선택을 했다는 것 자체에 대해 비난할 것이다. 하지만 그 선택을 한 사람은 그 이후의 비난과 살인에 대한 책임을 감수하겠다는 큰 결심을 한 것일 수도 있다. 사람을 죽일 수 없다는 도덕적 신념이 더 크면 여러 명이 죽도록 그냥 둚으로써 자신의 도덕관을 지킬 것이고, 사람을 죽게 내버려둘 수 없다는 도덕적 신념을 가진 사람은 그 속에서 뭐든 할 것이다.

어리석은 인간들은, “함”을 선택한 입장의 사람은 반대쪽에게 손에 피묻히기 싫어서 방치했다며 비난하고, “둚”을 선택한 입장의 사람은 반대쪽에게 무고한 사람을 죽였다며 비난할 것이다. 어리석지 않은 사람은, 당사자의 선택을 존중할 것이다. 그것이 그 당사자가 판단한 최선이기 때문이다. 그리고, 그 당사자도 피해자다. 그 자리에 있지만 않았어도, 그런 가혹한 선택을 할 필요가 없었기 때문이다. 타이밍의 피해자인 것이다. 지금 세계의 정치권이 혼란한 이유는, 이런 어리석은 인간들이 많기 때문이라 생각한다. 맞는 것이 있다고 생각하고, 자신이 맞다고 생각하기 때문이다. “당연히 OO한 것 아니야?” 이것이 바로 교만이다. 당연한 것은 없다. 지금 살아있는 것 조차도 아주 기적에 가까운 일이다.

하지만 일상 속에서 이런 트롤리 딜레마같은 극단적인 케이스를 몇 번이나 겪게 될까. 대부분은 도덕적으로 옳은 일은 명확한데, 개인의 욕심과 충돌하는 일이다. 아무리 상대가 자신을 괴롭혔다고 해도, 살인은 살인이다. 아무리 삶이 힘들었다고 해도, 절도는 절도다. 물론 이렇게 명확한 경우만 있는건 아니다. 취업 현장에서 일어나는 각종 가식과 거짓부렁이도 그 예다. 이렇게 해야만 일자리를 구할 수 있다고 해도, 거짓은 거짓이다. 이런 점에서는 내가 칸트의 철학을 따른다고 볼 수도 있겠다. 하지만 다른 점이 있다. 거짓은 거짓일 뿐이다. 그냥 그렇게 존재한다. 그 존재하는 것들을 어떻게 활용할 것인지를 결정하는 것은 인간이다.

나는 그래서 그런 것들을 삶을 살아가는 전략으로 이용한다. 난 내가 행복하기 위해 가장 중요한 것은 주변 환경이라는 것을 안다. 주변 환경을 내가 원하는 대로 만드는데 가장 중요한 것은 친한 사람을 늘리는 것보다, 해로운 사람을 주변에서 제거하는 것이다. 해로운 사람이 꼬이는 것은 투자로 따지면 블랙스완과 같다. 언제 어디서 나타날 지 모르지만, 걸렸다 하면 작살이 나는 것이다. 그동안 쌓은 모든 것이 무너질 수 있다. 그 블랙스완을 내쫓기 위해, 블랙스완이 좋아하는 것들을 제거한다. 그걸 제거해주는 것은 도덕이다. 블랙스완에 대한 것은 다른 글에서 따로 밝히겠다.

병가

회복은 더디고 재택근무 기간만 늘어나는 상황을 더이상 두고볼 수 없어서 병가를 한 달 내게 되었다. 병가 후, 사무실로 완전히 돌아가기로 약속했다. 난 얼마 전 부모님 집에서 나와 디스크 파열 후 사무실 출퇴근이 가능하게 하기 위해 이사했던 내 집으로 돌아왔다. 마음을 단단히 먹었다. “이번에도 회복에 실패하면 그냥 죽어라” 하는, 죽거나 해내거나 모드를 다시 발동했다. 게다가 어머니가 요즘 인생 황금기를 또 맞이하셔서, 낮에 거의 안계시는 바람에 혼자 사는 것과 딱히 다를 것이 없기도 했다.

게다가 부모님 케어를 받으며 억지로 맞춘 리듬은 앞으로 성인으로 살아가는데는 도움이 되지 않는다. 스스로 생존에 필수적인 것들을 챙기는 방법을 모르는데, 배고픔을 제 때 느낀다 해서 달라질 것이 없기 때문이다. 배고픔을 느껴도 움직일 수가 없어 계속 굶는 경우도 있다. 따라서 그 전에 스스로 살아남는 방법을 알아야 한다.

병가의 목적은 사무실로 완전 복귀하는 것이다. 그걸 목표로, 건강 상태에 맞게 중간에 간식을 넣어서 일정표를 짰다. 1주차는 하루에 3끼 먹는 것 외에 아무 목표가 없어서 표에서 생략했다.

시간병가 2주차병가 3주차병가 4주차복귀 후
07:00 - 08:00기상 및 식사기상 및 식사기상 및 식사기상 및 식사
08:00 - 08:30가벼운 근력 or 휴식(격일)근력 or 조깅(격일)근력 or 조깅(격일)근력 or 조깅(격일)
08:30 - 09:00샤워샤워샤워출근준비
09:00 - 10:00산책 20분 및 휴식산책 30분 및 휴식산책 40분 및 휴식출근
10:00 - 13:00간식 및 휴식간식 및 가벼운 활동간식 및 공부간식 및 업무
13:00 - 14:00식사 및 완전 휴식식사 및 완전 휴식식사 및 완전 휴식식사 및 완전 휴식
14:00 - 16:30휴식 or 가벼운 활동공부공부업무
16:30 - 17:00간식 및 휴식간식 및 휴식간식 및 휴식간식 및 휴식
17:00 - 19:00휴식 or 가벼운 활동가벼운 활동공부업무
19:00 - 20:00산책 20분산책 30분산책 40분퇴근
20:00 - 21:00식사식사식사식사
21:00 - 22:30취침준비가벼운 활동독서취미활동
22:30 - 23:00취침준비취침준비취침준비취침준비
23:00 -취침취침취침취침

복귀 후에 유지해야 하는 것은 아래와 같다.

  1. 정시 취침, 기상
  2. 정시 식사
  3. 간식
  4. 저녁 시간대 스트레스 제거
  5. 퇴근 후 회사 컨텍스트를 완전 끊기 위한 활동

병가 1주차의 목표는 완전한 휴식, 하루 3회 적당한 시간에 밥먹기, 그리고 집을 업무와 완전 무관한 공간으로 바꿔버리는 것이다. 먼저 집의 TV에서 컴퓨터 연결을 해제했다. 책상에서 노트북을 이용하도록 말이다. 그리고 그 TV에는 어디서 싸게 업어온 고전게임기를 달았다. 더이상 이 거대한 화면은 일을 하기 위한 화면이 아니라는 자기기만을 하기 위해서다. 그리고 몇 판 하고 던져놨다. TV 채널도 좀 돌려 봤는데, 그냥 왠지 시끄럽기만 해서 껐다. 다음으로, 아침에 산책을 나가는 것 이외엔 하루 세 끼 다 챙겨먹고, 아무 계획도 없이 집에 있었다. 카페인도 다시 완전 중단했다. 3-4일 정도는 두통에 고생했다. 잠도 엄청 잤다. 그러고도 밤에 또 쭉 잤다. 병가 직전에 또 고객사의 “해-줘”로 인해 1주일만에 해치운다고 러시를 하는 바람에 허리디스크로 인한 방사통이 있었지만, 약 3개월 동안의 재택근무 기간 동안 꽤나 호전된 것인지, 잠을 못 잘 정도는 아니였다. 많이 잔 만큼 시간은 정말 훅 갔다.

지금은 2주차에 접어들었다. 2주차의 목표는 활동량을 조금씩 늘리고, 회사의 시간표와 비슷하게 리듬을 맞추는 것이다. 1일차엔 산책을 2회로 늘리고, 아침에 근력운동을 아주 살짝 했다. 2일차엔 실수를 했다. 저녁 먹고 다시 산책을 하던 도중 횡단보도에서 신호가 임박해 뜀박질을 하게 되었다. 뛰어진다는 사실 자체에 너무 기분이 들떠 충동을 이기지 못하고 집 앞 산책로를 따라 뛰다 보니, 1km를 뛰어버리고 말았다. 인터벌이라도 뛴 것 같았다. 결국 또 밤에 잠을 잘 못잤다. 3일차엔 산책만 2회 하고 집에서 졸면서 가볍게 책만 읽다 잤다가 했다. 전날의 무리에 대한 반동인지, 20시쯤엔 졸음이 극에 달해 빌빌거리다가 언젠가 잠들었다.

3주차 목표는 일상을 되찾는 것이다. 운동 강도도 한 40대 일반인 정도로는 회복시킨다. 낮잠도 점심식사 후 남는 시간 이외엔 다 제거한다. 운동 강도를 늘리기 때문에 오전엔 가벼운 활동만 자유롭게 하고, 점심 식후에 공부도 넣었다. 공부할 것은 Rust 커널이다. 관련 입문서를 예전에 샀었는데, 생각만 해도 기대된다.

4주차 목표는 실제 회사 생활에 준하는 활동에 적응하는 것이다. 실제 통근에 걸리는 시간 만큼 산책을 하고, 공부도 실제 근무시간 만큼 한다. Rust 커널을 이 때 1회독 끝낼 것 같다. 만약 생각보다 빨리 끝나면 추가로 뭘 더 꺼내진 않고, 커널을 써먹을 수 있는 간단한걸 하나 만들어 볼 생각이다.

AI도 게으름을 부린다?

작년에 오른손 손가락이 부러져 왼손으로만 코딩을 해야 했던 때, 코파일럿이랑 합을 맞추는 방법을 깨우쳤다. 시범을 보이고, 비슷한 포맷의 주석을 마련하고, 한 라인 씩 검수하면서 내려가다가 반례가 나오면 살짝 고쳐주는 방법으로 이용한다. 그 방법으로 거래소 프토토콜 맞추는 부분에서 노가다 작업을 꽤 쉽게 하는 중이다. 물론 결국 단순반복인건 매한가지라서 지루하긴 하다.

근데, 방금 요상한 현상을 발견했다. 115개의 필드를 파싱해야 해서 초반에 좀 가르쳐둔 후 쭉쭉 한줄씩 내려가고 있었는데, 73번째 필드에 가니까, Optional 필드의 값을 뜬금없이 None으로 채워버림. 그 전까지 Optional 필드라도 다 파싱 시도를 하고 있었는데, 정말 뜬금없이 None이 박혔다. 다른 헛다리를 짚을 생각조차 없이. 대놓고 None.

일단 틀렸다고 다시 바로잡긴 했는데, 뭔가 좀 괘씸하다. 물론, 그냥 일정 부분 랜덤화한 결과거나, 저녀석 입장에선 겪어본 적 없는 케이스인가 싶으면서도, 너무 인간을 닮았다는 생각이 든다. “아 귀찮은데…. TODO(후임을 위한 선물) 발사!”. 뭐 인간도 그냥 신경망에서 발생한 각종 작용에 지배당하는 유기체이긴 하다. 그런 의미에서 AI시대 최고의 전략은 저출산이 맞다. 인간이 쓸 에너지를 AI가 대신 쓰면 됨. 입을 줄이는 것이다.

실제로 이 현상에 피해를 입은 사람도 알고 있다. 내 팀에 인턴 지원한 분인데, 보너스문제를 GPT에 맡겼다가, GPT가 중간에 “아몰랑~ 여튼 이런 식으로 하면 됨. ㅇㅋ?” 하고는 뒷부분을 얼렁뚱땅 생략해 뒀던 것이다. 자세히 안읽었으면, 거기서 짜놓은 실행코드 또한 미완성인 부분을 교묘하게 가리게 짜여있었기 때문에, 아무도 모르고 넘어갈 뻔 했다.

아마추어무선 입문

몸상태를 회복시키면서, 한 번씩 회사를 갈 상태로 돌아왔는지 테스트를 해본다. 그 테스트 중 하나는, 아마추어무선을 배워보는 것이다. 물론, 일상 복귀는 실패로 결론났다. 다만 후회하진 않는다. 꽤 재밌었다.

근데 왜 굳이 아마추어무선일까? ADHD처럼 오래 일을 하다 작살이 나보니, 변하는 것들은 무용한 것들이라는 결론을 얻었기 때문이다. 변하지 않는 것이 무엇일지 생각하다 보니 최악의 상황을 가정해보게 됐고, 그러다보니 아날로그 통신이 툭 튀어나왔다. 실제로 아마추어무선사들은 유사시 군과 소방에 협력하는 역할도 맡고 있었다. 아마추어무선을 적당히 파고 또 새로운 변하지 않는 기술을 배우게 될 지, 아니면 아마추어무선에 몰입할지는 모르겠지만, 이런 변하지 않는 것들은 배워서 나쁠 것이 없다.

강의 내용은 크게 어렵진 않았고, 외울 것만 좀 있었다. 해봤자 물리이기 때문. 그냥 들으면서 아하 그렇겠지 했다. 딱 윈드서핑같다. 이론강의에서는 양력이 어떻고 저떻고 하다가, 막상 돛을 잡고 물에 몇 번 빠져 보면 대충 바람의 힘을 느끼면서 몸이 알아서 하기 시작한다. 아마추어무선도 마찬가지일 듯 하다. 이론은 어쩌구 저쩌구 하지만 그냥 무전기 사서 삽질해보면서 구르는게 중요할 듯 하다. 물론 윈드서핑은 운동신경과 시행착오의 영역이지만, 무전의 경우는 연구의 영역으로 보인다.

강의 중에 특이했던 점이 있었다. 아마추어무선의 정의 자체에 사익을 추구하지 않는 것이 포함되어 있었다. 그래서 순수했다. 마치 교수님이 자신의 연구분야에 관심있는 학생이 찾아오면 흥분하듯, 그곳의 강사와 지부장도 신나서 이것도 재밌고 저것도 재밌다고 설명하며 본인이 더 행복해했다. 강의 수강 후에는 무전기 구입을 위해 가게에 전화를 걸어 저가형과 고가형의 차이를 물어봤는데, 그랜저와 벤츠를 예로 들면서 뚜렷하게 체감할 수 있는 차이는 많지 않고 그저 브랜드 값이니, 처음 하는 입문자면 그냥 저가형 사라는 답을 들었다. 물론, 난 둘 다 안(못) 몰아봐서 모른다. 오히려 내가 저가형 제품의 안정성에 문제 없는지를 되물어야 했다. 그 답 또한 “거의 차이 없다”였다. 보통은 잘 모르는 녀석이 오면 바가지를 씌울텐데 말이다. 뭔가 다른 세상같았다. 연맹의 지부장도 연맹 직원 몇 명의 월급을 벌어야 한다며 안테나를 손수 만들어 판매하고 계셨다. 뭔가 내가 가는 곳은 그런 열악한 곳들 뿐인 것 같다. 저주받은 취향을 타고 난 것이라 생각한다. 물론 싫지 않다. 주변에 해로운 사람이 잘 안 꼬여서 좋다. 당장 손에 쥐는 조금 더 두꺼운 월급봉투나 두둑한 통장잔고같은 것보다, 해로운 사람이 꼬이지 않는 것이 훨씬 더 큰 복이다. 서로 지킬 것 지키고 살다 때가 되면 가는게 좋다.

무선 장비를 설치하거나 구입하여 교신을 허가받으면 그곳을 무선국, 무선국을 개설한 사람을 무선종사자라 부른다. 전세계와의 통신을 싸게 하기 위해 인터넷망을 이용하기도 하지만, 기본적으로 전파 자체를 그대로 다루는 영역이다. 내 호출부호는 DS1UXY로 나왔다. 발음하기 꽤 편해서 “유니폼 엑스레이 양키”라고 굳이 안써도 될 듯 하다. 물론 X랑 S가 헷깔릴 순 있겠지만, 엑스의 경우 엑- 하고 발성을 막는 구간을 명확히 하면 되는 수준이다.

그런데 문제가 있다. 친구들과도 자주 안 만나고, 말도 많이 안하는 편인데, 무전기 댄다고 할 말이 있을까? 없다. 듣기만 했다. 대부분 중장년층 아저씨들이었다. 요래조래 장비 조율하거나 업그레이드 해보고, 교신 잘되나 확인하는 과정의 반복인 듯 하다. 대화 내용도 대부분 안부 인사와 함께 현재 신호 상태, 날씨 상태 정도를 공유한다. 간혹 잡음이 심한 무선사에게 해당 내용을 공유하기도 한다. 난 그냥 무슨 간첩마냥 듣고 있기만 한다. 진지하게 탈구글을 성공해본 프라이버시 추구형이 정보를 허공에 쏟아붓는 무선을 접하니 segmentation fault로 멈춰버림. 물론 관련해서 통신보안 수칙을 준수해야 하긴 하다. 내 생각엔 이걸 좀 더 빨리 알아서 할아버지한테 알려줬으면 싶다. 조용한 성격이셨는데, 무료하신건지 방에 들어가 항상 책을 읽거나 라디오를 듣고 계셨다. 나이 70을 넘겨 컴퓨터를 배우기 시작하더니, 나에게 이메일을 보내고, 엑셀로 동네 일처리를 하기에 이르렀다. 만약 할아버지가 이걸 했으면 엄청 몰입할 수 있었을 것이다. 게다가 군인 출신이시기도 했기 때문에 빠르게 받아들일 수 있었을 것이다. 아버지도 해군 출신인데, 무선에 대해 이야기하니 HAM(아마추어무선)을 바로 언급하심. 잘 알고 계셨다. 또 신나서 정보를 쏟아부음. 이거를 한 10년 전에 접한 다음 아버지를 대신 입문시키고 할아버지에게 전파했으면 꽤나 괜찮았을 듯 하다. 물론 지금은 돌아가셨다.

루프레코더 삽입 후기

우여곡절 끝에 결국 삽입하게 됐다. 수술이 워낙 간단해서 당일퇴원 일정으로 수술을 받았다. 당일퇴원으로 수술하는 사람들을 위한 전문 시설이 있었다. 좀 누워있다가 생각보다 빨리 수술실에 들어갔다. 침대에 누워서 이동하는 경험은 거의 10년만이라 어지러웠다. 하늘 보고 정수리 방향으로 이동하는데, 속도도 꽤 빨랐다. 최소한 내 배영 속도보다는 훨씬 빨랐다.

대학병원이기 때문에, 수술 현장에서 교수 의사가 학생 의사에게 이번을 기회삼아 교육을 진행하는 것 같았다. 옆방에 가더니, 어떤 검사인지랑, 어떻게 진단할지를 설명하는 것 같았다. 방음이 잘 되는줄 아나보다. 이후 째기 직전에, 교수는 C-Arm을 켜두고는 학생에게 PBL식 문답법으로 위치 어떻게 잡을지 물어봤다. 모르는 사람이 들으면 교수가 뭔가 모르는가보다 하고 식겁했을 듯 하다. 학생은 꽤나 명쾌하게 답을 했다. 교수가 그럴듯하게 반론을 제기해도 근거 조목조목 대면서 자기가 제시한 위치가 맞다고 설명함. 교수도 만족했는지 그대로 위치 잡고 수술을 진행했다.

수술은 부분마취 후 맨정신으로 받았다. 치과같았다. 위에는 C-Arm이 있었고 옆에 화면에서 엑스레이 화면이 나왔다. 그래서 의사에게 저거 보고 있어도 되냐고 하니 된다고 해서 고개를 돌렸다. 하지만 C-Arm은 처음에 루프 위치를 잡기 위해 주사바늘을 위에 올리고 사진을 찍어서 표시하기 위한 것일 뿐, 수술 중엔 켜놓지 않았다. 그냥 고개 돌리고 수술 받은 사람이 되었다. 심박수, 심전도, 산소포화도, 혈압 정도만 볼 수 있었음. 심박수는 내내 60대에 있었다. 긴장되어야 하는 상황에 오히려 심박수가 더 떨어짐. 알다가도 모르겠다.

부분마취를 진행했는데, 느낌이 딱 치과였다. 기기를 삽입할 때였는지, 강한 힘으로 뭔가를 미는데, 피부가 세개 당겨져서 마취되지 않은 곳이 아팠다. 좀 아프네요? 했더니, 참으라고 하는 것까지 치과랑 똑같았다. 피부를 꼬맬 때 따끔거리는 느낌도 좀 났다.

수술 종료 후, 의외의 고난이 찾아왔다. 똑바로 누운 자세로 또 1시간을 가만히 있으라고 했다. 수술 전 대기하면서부터 불편한 침대에서 계속 위를 보고 누워 있었더니 허리가 아팠음. 그래서 잠을 잘 수도 없었다. 이후 엄마 차를 타고 집으로 향하는데, 바닥이 울퉁불퉁할 때마다 허리가 쑤셨다. 수술 부위 통증은 느낄 새가 없었다. 옆으로 누우면 피부가 쏠려서, 집에서도 똑바로만 누울 수 있었다. 그래서 다음날까지 잘 앉아있지를 못했다. 지금은 필요하면 좀 비틀어서 누울 수 있다.

기록은 3개월 마다 검토한다고 하며, 체내에 삽입된 장치에 저장되고 있다. 부정맥 이벤트가 발생하면 자동으로 기록하고, 평소엔 모니터링하고 있다. 그리고 버튼이 하나 달린 리모컨을 받았는데, 저번에 발생한 심각했던 그 증상이 발생하면 재빨리 누르라고 함. 누른 후 불빛이 점멸할 때 가슴에 갖다대면 뭔가 페어링되듯이 불빛이 바뀜. 그러고 나면 7분간 강제로 기록하게 된다고 한다. 리모컨은 항상 소지하고 다녀야 하고, 잃어버리면 안되므로 목걸이로 만들어서 항상 착용하고 있다.

수술 비용은 73만원 정도였다. 건강보험이 적용됨.
참고로 강했던 증상 2번째 발생한 이후 심장 검사 한 번 쫙 돌았을 때는 아래와 같은 검사를 했고, 20만원이었다.

  • 심전도
  • 감상선검사
  • 심장초음파
  • 72시간 홀터 검사

따라서, 부정맥 진단을 위해 총 93만원 정도의 비용이 들었다고 보면 된다. 물론, 20만원 정도 들었던 검사는 의원급 병원에서 진행했다. 따라서 대학병원에서 받게 된다면 이것보다 비용이 더 높을 것이다. 대충 100만원 정도 잡으면 그 안에 들어올거라 생각하면 될 것 같다. 물론 이후 3개월 마다 진료가 있어 야금야금 나가는 비용도 좀 있긴 하다. 보통 엑스레이 찍고 하면 점심값 정도 나온다(이번에 13,800원 나왔다). 엑스레이 안 찍어도, 기록 해석에 대한 비용이 나올 것으로 예상한다.

짐덩이가 되었다.

의사로부터 부정맥 정밀 진단을 위한 루프레코더 삽입을 권유받았다. 72시간 심전도에서도 잡히지 않는, 갑작스런 빈맥과 일시적으로 심장이 멈춘 듯한 감각, 그리고 이와 함께 몸이 마비되는 증상이 가끔 있었기 때문이다. 첫 증상은 2016년. 파산 글에서 언급했던 대학생 때의 그날이다. 두번째는 올해 2월, 그리고 최근엔 5/31. 그날은 기절까지 했다. 다행인 것은, 3번 모두 쉬거나 잠을 자기 위해 누워있다가 발생해서 외상은 없었다. 다행이 아닌 것은, 위급함을 알아차리면 이미 움직이거나 목소리조차 낼 수 없는 상태가 된다는 것이다. 사람이 있어도 문제를 알리기가 어렵다.

난 이전엔 그저 스트레스 때문이겠지 하고 넘겼었다. 그런데, 최근에 발생했을 당시엔 초기부터 뭔가 심각함을 느꼈다. 119에 신고하기 위해 휴대폰을 어떻게든 잡았지만, 결국 의식을 잃어 신고하지 못했다. 의식까지 잃은건 처음이었다.

의사는 그 상황에서 스스로 회복하지 못해 못깨어났다면 그대로 죽었을거라고 했다. 근데, 크게 놀랍지 않았다. 그냥 맞는 말이였다. 못깨어나면 죽는거지 뭐. 마치 “저 집에 불이 났어요. 불이 안꺼지면 전소됩니다.” 하는 수준의 이야기였다.

일단 루프레코더를 달면, 다음 증상 발생할 때까지 기다려야 한다. 이쯤이면 판단의 기로에 선다. 일단 진단이 돼야 치료를 하든 하는데, 진단이 안된 그 기간 동안엔 계속 이도저도 아닌, 죽을지 말지도 모르는 상태로 살아야 한다.

최근 카페인까지 끊고, 피로를 최소화하며 생활하던 차였다. 야근을 한 지도 꽤 오래 됐다. 사무실 근무일에는 집에만 도착하면 밥먹고 축 늘어져 버린다. 이렇게 계속 있으면 진단만 늦어지고, 시간은 이대로 무기력하게 흘러가겠지. 반대로, 진단을 앞당기려고 모든 일상과 활동에 복귀하자니, 혹시라도 증상을 목격할 사람들에게 많이 미안하다. 기립성저혈압으로 훈련 중에 아주 잠깐 쓰러졌을 때만 해도 목격한 사람들이 꽤 놀란 것 같은데, 이건 그 수준을 뛰어넘는다. 사실을 알면서 불안해할 사람들도 걱정이고 말이다.

이 문제에 대해 가장 처음 알린건 부모님이 아닌, 서울진도스 운영진 중 한 명이었다. 자기 감정엔 솔직하긴 하지만, 일단 남의 감정에 크게 이입하지 않는 사람이라고 생각했기 때문이다. 갤럭시워치에서 심박수랑 연동해서 SOS를 세팅하고 있었는데, 차마 부모님께 이야기할 용기가 나지 않았다. 그래서 생각해본 끝에 내린 결정은 1차적으로 그 사람에게 도움을 구해보고, 부모님은 그 다음에 생각하는 것이었다.

역시나 가장 먼저 나온 답은, 가족들은 이걸 아는가에 대한 물음이었다. 일 터지고 나서 알리면 너무 놀라실 것 같다고. 그때 정신을 차렸다. 이 큰 짐을 그 한 명에게 다 지우는 것은 죄다. 마침 다음날 엄마가 내 집에 오기로 해서, 그 때 모든 것을 털어놓았다.

역시나, 혼자 계속 살지 말고 일산의 부모님 집으로 돌아오라는 강력한 권유를 받았다. 사실 혼자 사는게 좋지만, 이번엔 거부할 수 없었다. 혼자 있으면, SOS를 받기로 한 사람도 계속 신경을 써야 한다. 게다가 사람이 24시간 일어나 있지 않기 때문에, 새벽에 그런 일이 발생해서 구조가 불발되고 잘못되기라도 하면, 그 사람은 죄책감에 휩싸이게 될 것이다. 이런 책임은, 가족 내에서 해결하는게 맞다. 친구들은 그저 가벼운 조력자의 선에 두는 것이 맞다.

이제 어느정도 방향도 정해졌다. 가능한 빠른 일정으로 루프레코더를 삽입받고 가족들에게 돌아가기로 한 이상, 계속 이 사실을 비밀로 유지할 필요도 없다. 아니, 유지하면 안된다. 비밀로 유지하려 하면 이 사실을 아는 유일한 사람에게 꽤 큰 부담일 수 있다. 하지만 지금은 연휴 기간이기 때문에 사람들에게는 여행 등 즐거운 일정들이 많다. 월요일 오후쯤에 상황을 공유할 생각이다.

존재하지 않는 게시글입니다.

신체가 뻗으면 신체가 못쓴 에너지의 방향이 다른 곳으로 흐른다. 머리속에 우주가 펼쳐짐. 생각이 꼬리에 꼬리를 물게 된다. 현실에서 놀 수가 없으니, 머리속 놀이터에서 노는 것이다.

난 애초부터 허무주의의 끝판왕이다. 물론 “끝판왕”은 세상 얼마 살지도 않은 주제에 거만하게 선택한 단어이다. 여튼 난 기본 베이스가 허무주의다. 다만 인류와 함께 지내기 위해 “다 의미없다” 이런 말 안할 뿐이다. 남들은 이런 말 들으면 고통스러워 한다. 근데 나에겐 한낮 유희거리일 뿐이다. 다 의미없다는 파괴적인 결론을 내리면서도, 자신의 입장에 서지 않는다. 나라는 존재 또한 그냥 그 세계관 안의 한 피사체일 뿐이다. 역설적이게도, 이렇게 생각하기 때문에 사회의 각종 쓸데없는 것들에 인생을 갖다바칠 필요가 없게 되었다. 모든걸 원점에서 생각한다. 타당(Make sense)하면 따른다. 그래서 무슨 생각으로 사는지 대충 때려맞추기 어렵다. 틀에서 벗어나 있기 때문이다. 연구자들은 이걸 아웃라이어라고 한다. 지맘대로 랜덤워크하는 인간을 인간은 그대로 이해하려 하지 않는다. 어떻게든 틀 안에 밀어넣으려 한다. MBTI같은 것들로라도 말이다. 덕분에 어떻게든 틀 안에서 배려를 받는 듯 하다. 또라이로 말이다.

또라이는 남들이 사회의 쓸데없는 것들에 집중하는 사이, 평온하게 자신의 쓸데없는 짓을 즐긴다. 대규모 트레픽을 감당하는 분산시스템 설계같이 거창한거보다 슉랭같은 좀더 인생낭비스러운 것에 더 설렌다. 진짜 하찮은 삶을 그냥 살고 있다.

세상에서 가장 쓸데없고 재밌는 개소리 Screenshot_20250425_142339_ChatGPT.jpg

그러던 어느날, 심심해서 ChatGPT에게 세상에서 가장 쓸데없고 재밌는 개소리를 해보라고 시켰다. 그러다가 그 방구석 허무주의 이론의 끝을 봤다. 이놈은 내가 하는 말에 근거를 달아주고, 자료를 가져와서 실제로 일어나고 있는 연구를 연결해주고, 끝없이 나에게 질문을 날려대다가, 마지막 질문을 하고는 답변을 듣더니, 이제 끝났다며 나보고 안녕을 외쳤다. 뭔가 휘둘린 기분이다. 뭐 그래도, 그 방구석 이론이 꽤나 만족스럽게 정리된 것 같다. 내 개논리의 힘을 강화해줬다. 그래서 기록하기로 했다.

존재

존재란 무엇인가. 분명 우린 뭔가 존재하는 것 같은데 말이다. 왜 존재하는 것일까? 정확히는, 존재한다고 느끼는 이유는 무엇일까? 존재는 존재할까? 우리가 생각하는 “존재"의 의미는 우리 기준이다. 우리가 생각하는 존재의 기준이 뭘까? 그냥 이러고 사는 우리들과, 주변에서 상호작용하는 것들이 동시에 존재한다고 정의할 수 있는 정의를 존재의 정의로 정의해보자. 이 문장부터 정신이 하나도 없군.

관측이 일어나기 전엔 확률만 존재하는 상태라 하였다. 우리가 생각하는 그 존재는, 관측이 일어난 후의 결과다. 그 찰나의 순간에, 인지한다는 착각으로 빚어진 자아가 바로 자신이다. 관측이 일어난 후의 결과는 거대한 덩어리이며, 그중 일부 자아라는 스파크가 우리다. 우린 무한히 진행되는 주사위게임에서 어쩌다 나온 결과이고, 이 또한 극히 찰나의 순간 튄 스파크다. 물론 스파크라 생각하는 것도 거만하다. 사실 이건 특별한 것이 아니다. 자아에도 의미는 없다. 특별히 튄다고 표현할 이유도 없다. 그냥 자신이 특별한 존재라 믿는 자존감 높은 현대인들을 위한 위로의 의미에서 썼다. (물론 이것도 뒤에 갖다붙인 핑계다). 이건 그냥 순간의 현상이고, 아무런 의미도 없다.

존재는 관측이 만들어낸 일시적 결과다. 그럼 여기서 앞으로 주의해야 할 것이 있다. 확률로서 존재한다는 표현이 맞을까? 뭔가 이상하다. 확률로서 존재하는건 아직 존재하는게 아니다. 그런데 다른 단어보다 이게 어울릴 뿐이다. 하지만 앞으로 헷깔릴테니, 확률로서 존재한다는 표현은 지양하겠다.

무의미한 공간에 존재하는 규칙성

의미조차 없고, 모든게 주사위게임에 결정되는데, 자연법칙은 왜 있을까? 왜 현상에 규칙성이 나타날까? 이건 또 프렉탈을 갖다 쓸거다. 어찌보면 우주의 먼지보다도 못한 존재지만, 반대로 더 작은 차원에서는 무한한 공간인 그곳이 바로 지금 이 세상이다. 무질서 속이더라도, 질서가 성립된다고 해서 문제될게 없다. 패턴은 어떻게든 맞춰질 수 있다. 일루미나티 음모론처럼 어떻게든 엮다 보면, 무질서 속의 하나의 질서가 되는 것이다. 과학적 접근 방법이 지금은 그 질서로 보인다. 물론 무한한 시간 속 아주 짧은. 길이가 0에 수렴하는 시간 동안만 말이다.

우주

우주는 우주다. 대체할 수 있는 단어가 없다. 모든 것을 아우르는, 우주는 우주다. 그리고 이것은 확률 필드다. 관찰이 일어나는 순간 확률은 더이상 확률이 아닌 결과가 된다. 그런데 우주는 모든걸 포함하는거니까 모든 차원의 가장 높은 곳. 무한에 가까운 차원을 모두 아울러야 한다. 그럼, 시간축이 존재할 수 없다. 시간축은 형태라는걸 결정하는 기하적 차원이 부족할 때 생겨나는 축이다. 시간이 존재하지 않으면 찰나 또한 존재하지 않는다. 따라서 그 찰나를 관찰할 수도 없다. 관찰이 없으니 확률만 있다. 그런데, 결정되지 않은 확률 필드는 존재하는걸까? 아까 내린 존재의 정의에 따르면, 존재하는 것이 아니다. 우리는 아직 일어나지 않은 미래의 무언가에 대해 존재한다고 하지 않는다. 따라서 우주는 애초부터 존재하지 않는다.

무(無) 속의 존재

우주 내부에서 기하적 차원이 1씩 줄어들면 대신 시간축이 하나씩 생긴다. 그 차원에서는 시간이 존재하니 찰나도 존재한다. 관찰이 가능하다. 그렇게 쭉쭉 내려오면 우리가 있는 3차원 시공간이다. 3차원 입체가 시간축을 따라 관찰되고 결정된다. 그 찰나, 관측이 일어난다. 결과가 존재한다. 지금은 나도 존재한다. 너도 존재한다. 역설적이게도 말이다.

그럼 지금, 우주는 존재하지 않지만 우리는 존재하는 근본없는 사태에 이르렀다. 왜 가능할까? 관측의 주체가 어디에 있냐가 중요하다. 우주는 모든 것을 아울러야 하기 때문에 내부는 있어도, 외부라는 개념은 없다. 우주 밖에서 우주를 관측하는건 불가능하다. 남은건 우주 안 뿐이다. 우주 내부는 시간축을 허용한다. 따라서 관측이 일어난다. 그럼 결과도 존재한다.

문제는, 우리가 존재와 무(無)의 관계를 반의어로 여긴다는 것이다. 존재는 관측의 결과. 관측 결과의 반댓말이 있을까? 원인? 아니다. 없다. 이 글에서 내린 정의의 존재는, 존재하지 않음이라는 표현을 허용하지 않는다. 관측의 결과는 명사이기 때문이다. 무(無)의 상태로부터 존재가 발생하는 것이고, 따라서 존재는 무(無)의 일부다. 무(無)는 존재의 조건이다.

마무리

존재하지 않는다. ㅋ

ChatGPT

평소 코파일럿을 사용하는 정도로만 AI를 활용중이었다. 그러다가 최근 메모장 용도로 사용해봄. 머리속에서 뭐가 정리가 안되고, 수첩도 한 번씩 까먹는 경험을 해버렸기 때문이다. 나 뭐부터 해야함? 에 대한 질문을 아주 잘 받아주더라.

그런데, 그러다 보니, 앞으로 할 일을 자연스럽게 공유하게 됐다. 물론, 회사와 관련된 일은 아무리 정보를 격리하고, 저장하지 않는다는 설명을 하더라도, 그건 니놈들 생각이기 때문에 도움 요청을 자제한다. 대신 개인적인 개발 이야기는 정보 보호가 그리 중요하지 않으므로 자유롭게 할 수 있었다.

ChatGPT에게 코드 짜라고 시키면, 어디서 긁어왔는지 버전도 안맞는걸 들고 온다. 신입 개발자가 스택 오버플로우에서 마구 긁어온 수준의 퀄리티다. 그런데, 설계 레벨에서 기술 이야기는 수준급이었다. 메모리맵으로 직접 경량 DB를 구현해서 쓰는걸 논의하게 되었는데, 내가 “이런이런 기능을 개발할거고, 이렇게 만들거야” 하면, 고려해야 하는 요소들을 더 가져와서 나를 거의 인터뷰하듯 질문을 해댄다. 가비지콜렉팅은 어떻게 할거냐, 가변길이 구조냐 고정길이 구조냐, 인덱싱을 어떻게 할거냐, 메타 파일 관리 어떻게 할거냐, 동기화는 어느 시점에 할거냐 등등 거기에 대한 답을 다 했더니, 그냥 구현만 하면 되게 되었다. 그리고 이놈이 또 흥분해서 코드 짜서 막 보여줬는데, 안읽었다. 스택오버플로우 또 긁어왔겠지. 그냥 메모리맵은 이미 써봤고, 단지 읽기만 해봐서, 이제 쓰기도 하고싶은게 다였다. 그런데 대화하다 보니, 메타 파일을 이용해서 로딩 시간을 단축하고, 인덱싱을 개선하고, 삭제를 어떻게 구현할지에 대한 설계까지 한시간 만에 말을 툭툭 주고받다보니 끝나버렸다.

맞다. 이놈이 실제로 더 잘 대체하고 있는건, 단순 코딩보다는 설계 레벨에서의 동료 역할이었다. 단편적인 지식들은 계속 바뀐다. 하지만, 설계의 원칙은 변하지 않는다. 이 변하지 않는 것들은 학습에 따라 누적이 가능하다. 결국 이녀석은 설계를 돕는 역할일 때 힘을 더 발휘할 수 있는 것이다. 심지어는, 신나서 자꾸 뭘 더 하자고 한다.

image.png

그래서 내가 멈춰야 했다.

결제? 했다.

Actor 라이브러리 사용성 개선

액터 구조에 대한 한계점을 다시 접하게 되었다. 물론 당장 회사에서 발생한 것은 아니다. 그냥 들었다. 액터 구조 사용한 곳의 끝이 좋았던 적이 없었다고. 물론 난 아직 끝을 보지 않은 듯 하다. 하지만 한계점은 알고 있다. 이 액터 구조는, Rust와 만나면서 개발자의 생산성을 향상시킨다. 좋은거 아니냐고? 반은 좋고 반은 나쁘다. 통제해줄 사람이 없으면, 정말 개발자라는 족속들은 지맘대로 개발하는 특성이 있다. 그리고 보통 문서를 작성하는걸 싫어한다. 이직을 밥먹듯이 하는걸 당연히 하면서, 인수인계는 전혀 신경쓰지 않는 것이다. 그게 개발자다. 결국 적당한 실력으로 마음대로 만들어 올린 액터로 떡칠된 서비스는 유지보수 난이도가 굉장히 높아지게 된다.

그럼 액터 구조를 버리면 되는거 아니냐고? 그러기에는 액터 구조가 가져다주는 생산성과 그에 기반한 매출 성장을 무시할 수가 없다. 액터를 버리기 위해 Rust를 버리려고 하니, 성능을 포기할 수 없고, C++을 도입하자니, 숙련된 비싼 개발자를 구하는 것이 또 부담이며, 지금의 개발인력들을 재교육할 시간적 여유가 없다. 결국은 현실에 일부 타협하며 이래저래 좌충우돌을 겪어야 하는 것이 기술자들의 숙명인 것이다. 최소한 이래저래 삽질할 시간을 벌어다 줄 안정적인 캐시카우를 만들 때까진 말이다.

그럼 남은 방법은 액터 구조를 디버깅하는 방법을 개선하는 것, 그리고 문서화를 강제하는 시스템을 만들어가는 것이다. 그 중에서 당장 빠르게 할 수 있는 것은 전자다.

새 버전은 5.0.0. README 업데이트 두글자 더해 5.0.1이다. 아주 간단한 아이디어였는데, 지하철에서 회사로 걸어가던 중 갑자기 떠올랐다. 메시지 send를 하는 부분에 어떤 액터로 가는지가 표시되면 되는 것. 액터 타입을 send할 때 직접 어딘가 쓰면 되는 것이다. 그럼 그 타입의 정의를 타고 갈 수가 있다. 그럼 그곳에 있는 액터의 구성과 로직을 살펴볼 수가 있는 것이다. 그래서 Actor trait의 제네릭에 기존의 message, result, error 타입을 표시하던걸, trait 내 type 으로 정의하도록 바꿨다. 그리고 ActorSystem에서 send 함수 사용 시 message와 result 타입을 제네릭으로 사용하는 대신 actor 타입을 사용하도록 바꿨다. 그럼 actor_system.send(msg)를 사용할 때, actor_system.send::<MyActor>(msg)로 이용하면 된다. 이렇게 하면 여기서 MyActor를 타고 액터를 따라가서 디버깅할 수 있다.

물론 한계점은 여전히 있다. 액터 주소 체계를 중구난방으로 관리하면 대참사가 벌어진다. 4.x.x 버전부터는 broadcast 기능을 지원하는데, 여러 액터 타입에서 같은 메시지 타입을 이용하고, 액터 주소 필터링에 함께 걸릴 수 있는 구조라면, 표면적으로 제네릭으로 이용한 액터의 로직은 따라갈 수 있지만, 숨겨진 그 액터는 알 길이 없다(눈으로 정적 분석을 하는 수밖에 없다). 다만 이 문제는 그래도 4.x.x 버전보단 이번이 개선되기는 했다. 최소한 메시지 타입이 다른 경우 바로 컴파일 에러를 뱉을 것이기 때문이다.

어? 주소 체계 관리를 빡세게 만드는 뭔가를 만들면 되려나. 하지만 이건 더 잡고 있으면 모처럼 휴식 사이클을 돌리고 있는데 다 망치고 밤을 새버릴 것 같아서 멈추도록 하겠다.

Actor 라이브러리에서 proc-macro 제거

액터 라이브러리에서 proc-macro를 다시 제거했다.

결과적으로 중복코드를 많이 생성하는 것이기도 하고, 써보니까 오히려 보기에 더 지저분해짐. 물론 예쁘게 되도록 선언하지 못한 내 잘못이겠지만 말이다. 매크로는 derive macro까지 정복하고 활용해야지.

그것보다는, 결정적으로 동기만 지원하게 되어 있는 것이 가장 큰 문제였다. current 런타임을 불러와서 block_on을 이용하는데 신경 조금만 덜 쓰면 에러가 발생했다.

회사에서 리뉴얼하고 있는 서비스 개발 기한도 1주일밖에 안남은 시점인데 여기도 그걸 사용함. 그럼, 어떻게든 끼워맞춰 쓰는게 능사일까? 아니다. 내 경험 상, 그렇게 끼워맞추는데 시간이 더 들고, 실패 시 리스크가 훨씬 크다. ‘이거 하려고 내가 얼마나 공수를 많이 투입했는데’ 하는 순간 돌아올 수 없는 강을 건너게 된다. 심한 경우 라이브러리 하나 때문에 시스템 구조를 바꿔버리는 케이스도 생긴다. 설상가상으로, 그런 식으로 바꾸면 보통 문서 업데이트도 안한다. 곧 다시 개선할거라고 하며, 실제로는 그 부분을 까먹으며.

그래서 어제 모처럼 휴일이겠다, 바로 착수했다. proc-macro 걷어내고, bincode 인코딩을 통해 한 액터 시스템에서 여러 메시지 타입을 이용할 수 있도록 한 피쳐를 그 위에 올렸다. 기존에 마음에 안들던 trait 함수로 디폴트 넣어서 생략 가능하게끔 바꿈. 이제 벌써 4.0.0 버전이다.

적용은 그리 오래 걸리지 않았다. 물론 구조체 위치 등 정리할건 있지만 그냥 매크로가 써줄 애들을 다시 trait으로 원복했을 뿐이기 때문이다.

오늘은 4.1.0 버전을 개발할 생각이다. 액터 주소를 정규식으로 필터할 수 있도록 할 생각이다. 지금 글쓰는 도중에 구상 완료.

proc-macro 기반 액터 라이브러리 완성

선전포고문

전쟁 종결. 이름하여 2.0.0 버전 런칭.

proc-macro와 bincode 인코딩을 이용해서 타입 구애 없이 액터간 메시지 통신 가능하게 함. 물론 send, recv할 때 serialize, deserialize가 일어나긴 하지만, 매크로단에서 처리해 버려서 사용자는 받을 타입만 명시해 주면 됨.

하지만 아직 미흡한 부분이 많다. 메시지를 정기적으로 보낸다던가 하는 기능은 2.0 버전에서 빠짐. 그리고 에러 핸들링도 그냥 expect를 남발해 둔 상태이다. 거기서 그냥 터짐. 또한 함수 넘기는 부분에서 async가 아직 이용이 안된다. future 적절히 못쓰는 사람은 여기서 갖다 버릴 듯. 아, 이전에도 없었지만, 액터의 주소가 중복되는 케이스도 따로 핸들링 안되어 있다. 아, 라이프사이클도 상태는 관리하긴 하지만 getter가 없다. 그리고 recv할 때 따로 타입 기입 안해도 되게 하고 싶음. 요 부분은 TODO로 둘 것.

이제 회사꺼에 적용해야지 개꿀띠

하려다가 불편해서 바로 3.0.0 릴리즈함…

라이프사이클 getter도 넣었고, 주소 체계도 적용해서 “*” 적절히 써서 여러 액터에 한번에 메시지 보내기도 가능해짐. 부모-자식 관계는 물론 엄마친구 관계(?) 로 필터 걸 수도 있다.

2.x.x은 다 은퇴시켰다

역시 2.0은 뭘 해도 안되는구나.

리눅스에서 증권사 ActiveX 사용하기

개발팀 기술검토 의뢰(?)로 들어왔다. 회사 서버에서 주문을 집행하기 위해 증권사 Open API 이용이 가능하냐는 것. 근데 문제는 그 증권사 API는 ActiveX 기반이다. 변태같은 레거시다. 그리고 서버는 당연 리눅스.

결론부터 말하면 기술적으로는 된다.

방법은 간단히 말하면 wine이다. 윈도우 프로그램을 리눅스에서 돌릴 수 있도록 해주는 프로그램이다. 그래서 ActiveX를 이용하는 것 자체는 빠르게 해결되었다.

그런데 다음 문제가 남아 있었다. 인코딩이 EUC-KR이라는 것이다. 담당자가 사고치기 싫다고 레거시는 하나도 안 건드린 듯 하다.

UTF-8에 비해 용량이 반밖에 안되는 EUC-KR을 이용하기 때문인 것으로 보이지만, 여튼 그걸 전송속도 빠르다고 자랑….하고 있었다. 역시 꿈보다 해몽이다. 담당자는

  1. 사고도 안치고
  2. 성능 우위도 홍보하고
  3. 꿀도 빨았을 것이다
    역시 사람은 머리를 써야 한다. 여기서 머리라는건 잔머리도 포함인 듯 하다.

뭐 그래도 원래 금융쪽은 레거시 파티다. 그래서 EUC-KR일 것이라는걸 빠르게 눈치채고 같이 해결. 환경변수 세팅으로 해결했다.

LANG=ko_KR.EUC-KR

각설하고, 여기서 한가지 주의할 것이 있다. 이걸 .bashrc같은데 박아넣는 불상사는없어야 한다. 이 환경변수는 wine을 이용할 때 외에는 이용되지 않아야 한다. 안그럼 그럼 평소에 한글이 깨진다. 그래서 난 wine을 도커로 돌림. 비슷한 이유로 리서치팀 프로그램을 돌릴 때 필요한 conda도 로컬에 직접 설치하지 않고, 도커 컨테이너에 home 디렉터리 마운트 해서 필요할 때만 씀.

다음 문제는 공인인증서이다. 한국투자증권 API의 경우 Token을 이용할 수 있도록 되어 있어서 편했는데, 의뢰받은 API는 그게 아니었다. 공인인증서를 매번 사용해야 함. NPKI 디렉터리를 위치해야 하는 위치에 아무리 둬봐도 인식이 안됨. 힌트는 인코딩에 있다.

LC_ALL=ko_KR.UTF-8

이 부분을 처음엔 따로 세팅하지 않았었다. 그래서 UTF-8 인코딩인 공인인증서는 인식이 안된 것. 저렇게 넣어 주니 잘 인식되었다.

해결 완료.

선전포고문

image.png

직접 제작한 액터 라이브러리를 복잡한 프로그램에서 이용하려고 메시지 enum 안에 타입을 다 때려박다 보니 이런 Warning 메시지를 마주하게 되었다. 쉽게 말하면, “어떤 멍청이가 enum을 이딴 식으로 쓰냐?” 라는 말이다. 그것이 바로 나다. 어쩔? 두고봐라. 러스트 컴파일러에 전쟁을 선포한다.

그래서 제네릭은 없는데 타입에 구애받지 않는 액터 라이브러리 새 버전을 개발중이다. 힌트는 매크로이다. 겸사겸사 proc-macro도 정복하는 중이다. 이거 너무 좋잖아?

CPU 교체 나비효과

첫 조립컴퓨터를 살 때, Intel i7 9700K를 구매했다. 연구실에서 인텔만 사용하길래, 고민없이 인텔 구매. 하지만 지금 회사에서 라이젠 24스레드 CPU를 주로 사용하면서 24스레드 개발환경을 집에도 구축하고 싶어짐. 그때 마침 당근에서 Ryzen 9 5900X 매물 발견. 회사 PC랑 똑같다. 바로 구매했다. 앞뒤 보지 않고 말이다. 겸사겸사, 메모리도 회사 PC와 맞춰서 64GB 구매.

사고 보니 생각났다. CPU 소켓이 다르다는 것. 그래서 메인보드 구매. 아니? 쿨러도 안맞았다. 그래서 CPU 쿨러로 수랭쿨러를 하나 구매함. 또 앞뒤 안보고 팬 3개 짜리로 함. 미들타워인데, 당연히 들어가겠지 했다.

네 안됩니다. 전원 버튼을 비롯한 인터페이스가 공간을 차지하는 바람에 3팬 라디에이터는 달 수 없는 상태였다. 근데 CPU 하나 바꾸자고 다 바꾸면 왠지 지는거같아서, 케이스 천장을 니퍼로 뜯어서 수랭쿨러 라디에이터를 그냥 얹어서 케이블타이로 묶어 둚. 잘 돌아갔다.

충격과 공포의 케이블타이 고정식 라디에이터 20240414_212428.jpg

그렇게 잘 쓰다가, 결국 윈도우 가상머신을 거부하는 보험사 녀석 때문에 패배했다. 빼둔 인텔 CPU, 16GB 메모리, 메인보드, CPU쿨러를 이용해서 PC를 하나 더 조립하기로 함. 인텔은 내장그래픽이 있으므로, 필요한 것은 케이스와 파워 뿐이다.

근데 파워, 5900X에 더 큰놈을 달아주면 좋잖아? 그래서 5900X용으로 파워를 구매. 아? 케이스 이거, 수랭쿨러 3팬짜리 감당할 수 있는 녀석이네? 케이스까지 5900X에 새거 주기로 함. 그래서 케이스와 파워만 빼고 탈거.

그러다 사고가 발생했다. CPU가 써멀 구리스 때문에 쿨러와 너무 찰싹 달라붙어서 떨어지지 않았다. 그래서 그냥 그대로 조립해 보려다가 핀이 휘어버림. 부팅 안됨. 반응도 없음. 근데, 핀이 부러진 것도 아니고, 그냥 휘어진거니까 복구 가능하지 않을까? 해서 봤는데, 내 눈알로는 어림도 없다. 수리센터를 알아봐서 의뢰.

오늘 수리된 CPU를 조립해서 부팅했더니 잘 켜지는 것 확인. 하지만 메인보드에서 부품을 뺀 후 새로 연결하면서, 각종 설정이 꼬임. 귀찮긴 하다.

그럼 그 윈도우 PC 만들겠다는 그녀석은? 부팅USB 인식 못함. 근데 또 이 시점에서 귀찮음. 뭐 또 선 하나 연결 빼먹었겠지 싶다. 아니면 메인보드 USB 포트 하나가 죽었는데 거따가 연결했다던가 했겠지 뭐.

급하진 않으므로, 다음에 할 생각이다. 지금 회사 일이 휘몰아치는 중이다. 밤마다 부정맥 오는 마당에 이건 사치임.

라크로스 골리 - 0) 머리글

난 2013년에 라크로스를 시작해 올해로 만 11년이되었다. 운좋게도 2015년부터 대표팀에 소속되어 다른 이들보다 더 나은 조건에서 골리로서 배움을 얻었다. 부상으로 쉬어가는 이 시점에서, 그동안 알아낸 것들을 정리하고, 그것들이 휘발되지 않고 후배들에게 이어졌으면 하는 마음에서 글을 남긴다. 좀 더 압축된 정보를 통해 고생과 시행착오를 덜 겪길 바란다. 그리고 골리를 정하기 위해 가위바위보를 하지 않고, 한 팀 당 두 명 이상의 골리가 서로 의지할 수 있는 시대가 도래하길 기대한다.

난 2022년에 허리에 문제가 심각함을 알아차렸을 때 이미 후배를 키워야 한다는 것은 알고 있었지만, 이런저런 바쁘다는 핑계로 미뤄 웠던 것을 후회한다. 결국 가장 중요한 시기일 때 도움을 주지 못했다. 하지만 과분하게도 후배 골리들은 나름의 방법으로 빠르게 성장해 줬다. 난 이들에게 미래를 맡기고자 한다. 몸을 회복하더라도 길어야 5년이다. 그리고 중간에 시름시름 하다 보면 경기력 또한 더이상 늘기 어렵다. 오히려 선수 기용에 유연성만 떨어뜨릴 뿐이다.

회복 후 돌아갔을 때, 그들이 날 거뜬히 이길 것이라 기대한다. 그리고 그것을 통해 앞으로를 더 자신있게 임하길 원한다. 그리고 그걸 위해 할 수 있는 것들을 하고자 한다. 그 중 하나가 이렇게 글을 쓰는 것이다.

이 시리즈는 선수의 수준에 따라 순서대로 읽을 수 있도록 구성되었다. Feel 받아서 막 써내려간 초안에 대해 읽기 어렵다는 피드백을 준 코치님께 감사의 말씀을 전한다. 자칫 잘못하면, 읽기 어려워서 그저 휘발되어 버리는 글이 될 뻔 했다.

라크로스 골리 - 1) 골리는 누구인가

골리는 누구인가 물으면, 대부분은 슛을 막는 사람이라고 할 것이다. 표면적으로는 맞다. 하지만, 팀에서 골리는 누구인가를 물으면 대답하기 어렵다. 최후방수비수인가? 골리는 그냥 골리인가? 난 이에 대한 답으로 “팀원들에게 안정감을 제공하는 포지션”을 내놓고 싶다.

골리는 수비수의 중심에 있다. 모든 공격수는 골리를 향해 달려들고, 모든 수비수는 이를 막고 있다. 그렇기 때문에 골리의 상태는 꽤나 수비수들에게 영향이 크다. 쉽게 생각하면 된다. 전쟁에서 최후방에 있는 장군이 불안하면 병사들이 어떻겠는가. 같은 병사들이라도 뒤에 원균이 있는 것과, 이순신이 있는 것은 확연히 다르다. 따라서, 아래와 같이, 골리의 멘탈은 강해야 한다.

  • 항상 평온해야 한다. 모든 수비수 사이의 중심에서 안 좋은 기분이 겉으로 드러나면 영향이 크다.
  • 아무리 경기가 절망적이어도, 수비수에게 힘있게 “한번 더 가자!”를 외치는 사람이 되어야 한다.
  • 아무리 경기가 절망적이어도, 주눅들지 않고 즐기는 사람이 되어야 한다.
  • 아무리 아파도 평정심을 유지하고, 가능한 두 발로 걸어서 나가는 사람이 되어야 한다.

당연한 이야기이지만, 멘탈과 함께 실력 또한 중요하다. 아래와 같이 골리는 우수해져야 한다.

  • 기본적으로 세이브와 패스가 안정적이어야 한다.
  • 막아야 하는 세이브(각이 없는 상태에서 뻔하게 오는 샷들)는 놓치지 않아야 한다.
  • 패스는 하프라인까지는 던질 수 있어야 한다. 그럴 힘이 있어야 가까운 거리의 패스도 정확도가 높아진다. 클리어 전략 또한 더 다양해질 수 있다.
  • 필드에서도 거뜬히 플레이할 수 있는 선수여야 한다. 골리에게 상대편 한 명이 달라붙는다 해서 다른 수비수가 불안에 떨게 하지 않아야 한다.

위의 것들을 실제로 이뤄내기 위한 것은 이 시리즈에서 풀어낼 것이다. 차근차근 따라오면서도, 하나하나 비판하고 실험하면서 자신만의 무기를 갈고닦길 바란다. 쉽게 말해, 연구하는 자세를 가지길 바란다. 내가 연구하며 이런저런 것들을 습득한 이유는, 열악해서가 아니다. 나 또한 스승이 계신다. 난 분명 남들보다 더 나은 조건에서 골리를 해왔다고 했다. 그분은 골리의 기본부터 차근차근 가르쳐 주셨다. 하지만 배운 것을 실제로 몸에 익히기 위해서, 연구는 필수불가결한 것이었다. 따라서 스스로 자료를 찾고 이런저런 것들을 시도해본 것이다.

연구는 어려운 것이 아니다. 어떤 것을 시도하고 결과를 보고 원리를 추측하며 다시 뭔가를 시도하는 과정의 반복이다. 주입된 지식은 전체의 80% 뿐이다. 하지만 이 80%를 압축해서 이해하고 더 많은 것들을 받아들이기 위해서는 20%의 숨겨진, 즉 전달되지 않은 내용을 스스로 찾아내야 한다. 숨겨진 20%에 전달받은 80%를 제대로 이해하기 위한 핵심들이 숨어있다. 그걸 찾아내는 과정이 연구인 것이다.

시작부터 많은 일들을 요구하는 것 같지만, 골리는 그런 자리다. 하지만 그렇기 때문에 매력적이고, 항상 배울 것이 있기에 끝없이 즐거울 것이다. 만약 쉽고 빠르게 늘길 원한다면, 골리랑은 맞지 않을 수 있으니 유의했으면 한다. 반대로 어려운 것을 실제로 해냈을 때의 성취감을 삶의 동력으로 삼을 수 있는 사람이라면, 이보다 더 잘맞는 포지션은 없을 것이다. 환영한다.

라크로스 골리 - 2) 훈련이란 무엇인가

훈련은 실제 상황에서 해야 하는 것들이 자동으로 이루어지게 하기 위해, 실제 상황이 오기 전에 그것들의 일부를 실제로 경험하며 몸에 익히는 일련의 과정이다. 그렇기 때문에 훈련의 효과는 실전과 유사할 수록, 반복이 많을 수록 좋다. 팀스포츠에서 훈련의 종류엔 두 가지가 있다. 팀 훈련과 개인 훈련이다. 그럼 각 훈련은 골리에게 무슨 의미일까?

개인 훈련

개인 훈련이야 말로, 골리가 성장하기 위한 핵심이다. 물론 다른 선수들도 마찬가지이긴 하다. 하지만 골리의 경우 그 영향이 다른 선수들에 비해 크다. 왜냐하면, 세이브라는 골리의 제1임무는, 슈팅을 한 순간 오로지 골리와 공 사이의 1대 1 대결이기 때문이다. 변수는 슛과 골리 자신의 움직임 뿐이다. 따라서 골리의 움직임이 개선된다면 결과는 바로 나타난다. 또한 클리어에 있어서도, 다른 선수들에 비해 패스 외의 것들에 대한 요구치가 낮다. 때문에 패스 훈련을 했을 때 클리어에서 효과를 바로 체감할 수 있다. 패스에 자신있고, 이에 들이는 에너지가 적으면, 팀 훈련에서 클리어 전술 자체에 집중할 수 있고, 이 또한 성장의 발판이 된다. 혼자서도 할 수 있는게 많으니 즐겁지 않은가?

팀 훈련

팀 훈련은 모두와 함께하는 훈련이고, 팀이 합을 맞춰가기 위한 훈련이다. 거기서 골리는 이 날이 실전이다. 팀 훈련에서의 슈팅은 웜업을 제외하고는 모두 실전과 같다. 골리가 뭔가를 연습하려고 한다고 해서 슈터가 이를 맞춰주지 않는다. 팀 훈련은 개인 훈련의 성과를 시험하는 날이다. 추가적으로 클리어 등 다른 선수들과 합을 맞춰가는 일에도 참여하게 될 것이다. 물론 언급했듯이, 이 또한 개인 훈련 없이는 어렵다. 기억하라. 팀 훈련은 경기와 같다. 그리고 이것은 축복이다. 필드 선수들보다 골리에게 팀 훈련의 효과는 높다. 실전과 더 유사하기 때문이다. 또한 팀 훈련은 실전 상황에서 무엇이 통하는지를 실험해볼 수 있는 장이기도 하다. 하나 하나 알아갈때. 즐겁지 않은가?

💡팀 훈련은 실전이지만, 여기서 연습해야 하는 것이 있다. 심리기술을 활용해보는 것과, 스스로의 몸이 가장 잘 알아듣는 언어적인 주문을 어떻게 하는지 찾는 것이다. 이는 실제 경기에서도 끝없이 연습되고 이용되며 가다듬어질 것이다. 그리고 이에 대한 설명 또한 이 시리즈에 포함할 것이다.

라크로스 골리 - 3) 슈팅에 어떻게 대비해야 하는가

골리들이 세이브를 하기 전에 공을 눈으로 따라가는걸 보면, 엉거주춤한 자세로 각자의 개성을 뽐내고 있을 것이다. 그리고 그것들은 이유가 있다. 하지만 골리들에게 전달되는 단편적인 지식들은 단순히 “이렇게 한다”로만 전달된다. 그럼 왜 이렇게 해야 하고, 정확히 어떤 느낌일까? 내가 참고했던 사이트의 그림을 첨부하고 설명해 보겠다.

출처: https://laxgoalierat.com/the-basics-of-making-a-save/

7가지의 요소들이 그림과 함께 첨부된 좋은 자료이다. 이제부터 이것의 디테일을 잡아보자.

Feet A Little Wider than Shoulder Width

(발을 어깨너비보다 조금 더 넓게 선다)

  • 목적: 좌우로 빠르게 이동할 수 있으면서, 무게중심을 안정적으로 가져가기 위함이다.
  • 디테일
    • 점프했다가 착지할 때 가장 편하고 안정적인 너비로 선다. 또는, 좌우로 빠르게 왕복해서 이동하면서도 무게중심을 안정적으로 유지할 수 있는 너비를 찾아도 좋다.

Bent Knees

(무릎을 굽힌다)

  • 목적: 당장이라도 튀어나가 세이브를 할 수 있도록 하기 위함이다.
  • 디테일
    • 제자리에서 가장 높이 뛰기 위해 나오는 무릎 굽힘 정도가 적당하다.
    • 높게 점프하려고 할 때 더 내려가지 않고 바로 뛰어오를 수 있는 높이이기도 하며, 무릎이나 허리를 더 구부리지 않아도 스틱을 바닥에 터치할 수 있는 정도의 높이이기도 하다.
    • 하지만 이 힘든 자세를 경기 내내 하고 있을 필요는 없다. 곧 세이브를 해야 할 것 같을 때 이 자세를 취한다. 이 타이밍은 팀 훈련을 통해 경험을 쌓으며 감이 올 것이다.

💡제자리에서 높이 뛸 때, 무릎을 완전히 구부려야 한다고 생각한다면 오산이다. 90도보다 더 내려가진 않는다.

Arms Out and Away From Body

(몸으로부터 팔을 멀리 떨어뜨린다)

  • 목적: 세이브를 위해 스틱 헤드가 좀 더 적은 거리를 이동하게 하기 위함이다. 앞으로 갈 수록 슈팅과 좀 더 가깝기 때문이다.
  • 디테일
    • 목적을 달성할 수 있다면, 본인의 스타일에 맞는 것을 찾으면 된다.
    • 보통 스틱이 내 시야 안에 있도록 하라고 한다. 하지만 2019년에 미국의 대학교 선수들 중 가장 우수한 선수를 선발해 수여하는 상인 Tewaaraton award를 수상한 Megan Taylor 선수의 경우, 헤드가 약간 뒤로 기울어져 있었다. 나도 2015년에 그걸 따라하며 세이브율이 한층 올랐다. 따라서, 본인에게 맞는 자세가 맞는 자세이다. 고정관념을 가지지 마라.
    • 나름의 분석으로는, 적극적으로 슈터에게 다가가서 슈터의 스틱을 직접 막는 골리의 경우 스틱이 앞으로 가는 것이 유리하고, 슈터의 슛에 반응하며 막는 골리에게는 스틱이 살짝 뒤로 기울어지는 것이 유리하다. Megan Taylor의 경우, 반응하며 막는 것 자체에 더 많은 신경을 기울였다고 한다. 체구가 작기 때문에 앞으로 다가가면 오히려 머리 위 공간이 보여서 불리하므로 그런 선택을 한 것으로 보인다. 단 유의해야 할 것이 있다. 나 또한 스틱을 약간 뒤로 기울였지만, 시선 안에 스틱 헤드의 일부가 보이는 것은 유지한다. 완전히 머리 옆으로 보내버린다면 스틱이 작게 보여서 빈 공간이 더 보이기도 하며, 스틱이 움직일 때 머리를 피해가야 하기 때문에 빠른 움직임에 불리해진다.
    • 슈터에게 다가가서 스틱을 직접 막는게 본인에게 맞는지, 아니면 공을 보고 반응해서 막는 것이 본인에게 맞는지는, 훈련을 통해 알아낼 수 있을 것이다. 여러 자세를 시도해 보고 가장 좋은 것을 찾아라. 더 나아가서, 두 가지를 함께 할 수 있는 골리가 되어, 각 상황에 맞는 자세를 찾아라.

Proper Grip on the Stick

(올바르게 스틱을 쥔다)

  • 목적: 스틱의 움직임에 막힘이 없으면서도 컨트롤을 유지하기 위함이다.
  • 디테일
    • 그립이 강하면 스틱의 움직임에 제약이 따르고, 팔에 힘도 들어간다.
    • 팔에 힘을 빼야, 가장 빠르게 슈팅에 반응할 수 있다. 엄지와 검지만 이용하라고 설명했지만, 굳이 엄지와 검지만 이용할 필요는 없다. 팔에 힘을 뺄 수 있다면, 그립을 좀 느슨하게 하는 수준으로도 충분하다.

💡 그립을 느슨하게 시작하더라도, 세이브 시 목표 지점으로 도달하며 멈추면 알아서 힘이 들어간다.

Straight, Flat Back with Slight Bend At Hips

(고관절을 약간 굽히고 허리는 꼿꼿하게 세운다)

  • 목적: 무릎을 굽히면서도, 골대를 좀 더 가리면서도, 무게중심을 유지하기 위함이다.
  • 디테일
    • 고관절은 무릎을 굽히면서도 무게중심이 뒤로 가지 않게 하는 정도가 적당하다.
    • 그 이상의 역할을 하진 않는다. 상체를 펴라고 하는 이유는, 골리가 최대한 커보이게 하기 위한 것이다. 항상 슈터를 정면으로 봐서 빈공간을 최대한 줄여주는 것 또한 이를 위함이다.

Hands Well Positioned

(두 손이 적당하게 위치한다)

  • 목적: 골리의 스틱 헤드를 가장 빠르게 움직일 수 있도록 하기 위함이다.
  • 디테일
    • 골리 스틱은 무게중심이 헤드에 몰려 있기 때문에, 위쪽을 잡을 수록 유리하다.
    • 그리고 스틱에 회전도 함께 이루어지기 때문에, 두 손 사이의 간격이 약간 벌어지는 것이 유리한데, 이 적절한 거리는 생각보다 좁다. 약 30cm 혹은 어깨너비를 권장한다. 고치는 과정에서 제시된 것처럼 스틱 테이프를 이용해도 좋을 것이다.

Relaxed

(긴장을 푼다)

  • 목적: 가장 빨리 몸이 반응할 수 있는 상태를 유지하기 위함이다.
  • 디테일
    • 집중과 긴장은 서로 다른 영역이다.
    • 집중하되, 몸의 긴장은 풀어야 반응속도와 신체의 스피드가 가장 빠르다.
    • 긴장 푸는 방법은 앞으로 설명하겠다. 기본적으로는 어깨와 손에 힘을 빼고, 머리를 비워라.