2024년 한해가 지나고 다시 새로운 한해. 계획은 있다가도 없고, 없다가도 생기는데 그렇기 때문이 계획을 지키기는 더욱 어렵다. 나는 인생을 살아가는 것은 즉흥 연주와도 같다고 생각하는데 유연하긴 하지만 거의 무계획의 삶이 되어버린다. 아내와 다투는 지점이 이 부분이다. 나는 계획이 없는 만큼 (그리고 계획을 잘 믿지 않기 때문에) 다양한 상황과 변수에 스트레스를 덜 받는 반면, 아내는 나의 계획 없음에 (아내는 생각 없음이라고 하지만) 불안해하고 답답해한다. 맞는 말이기도 한데 계획이 필요하긴 하다. 아니 다르게 말하면 청사진 같은 것. 한치 앞을 모르는 생이지만 그렇기 때문에 방향을 생각하는 일은 중요하겠지. 나는 관성의 인간이다. 휩쓸려 가는 걸 불안해하지만 휩쓸려가게 내버려 둔다. 가정의 일도 마찬가지다. 아내가 불안해하는 지점이 여기다. 우리 배가 어디로 갈지 모르니까 말이다. 올해엔 방향을 생각하는 시간을 자주 갖길 바란다.
매일의 하루에서 가장 자주 보고 마주치는 사람은 단연 동료들이다. 동료들을 보면 감탄할 때가 많다. 내가 다루지 않는 분야에서 척척 일을 해내는 모습을 보면 초인 같기도 하다. 사람들은 자신들이 잘 알고 있는 것들은 평가 절하 하기도 하니까 나도 나의 일은 쉬운 일이라 여기고 있는지도 모르겠다. 업무 말고도 대단하다고 생각하는 부분은 취향이다. 다들 무언가 진심으로 좋아하고 있고 그것에 대해 시간과 에너지를 할애하며 자신감을 갖고 말할 수 있는 것처럼 보이기 때문이다. 나로 말할 것 같으면 취향 없음이 고민이다. 아내도 종종 비슷한 얘기를 하는데 너는 일 말고는 관심이 없다, 스포츠도 게임도 즐기지 않고 무얼 좋아하는지 모르겠다. 그렇다 컴퓨터 말고는 별로 즐기는 게 없었지만 듣고보니 억울한 부분도 있다. 그래도 성인이 된 후 20년 가까이 되어 가는데 그 사이 좋아하고 싫어하는게 생기는 것이 당연하다. 하지만 취향 없음 보다는 취향의 깊이가 얕아서 문제다. 겉핥기 같은 느낌으로 알고 있어서 무얼 좋아해요? 라고 질문을 받으면 분야 정도 밖에 말하지 못하는 것이다. 어떻게 취향의 깊이를 만들까, 가장 먼저 타파해야 할 것은 생산성의 함정이다. 좋아하는 것에 탐닉하는 것은 생산적이지 못하고 그건 시간을 낭비하는 것이라는 마음이 있는데 시대착오적인 생각이다. 내가 보기에 지금은 개성이 돈이 되는 시대다. 정보가 자유롭게 흐르고 그런 만큼 모방이 쉬운 지금, 개성이라는 해자가 없이는 쉽게 경쟁력을 잃고 말 것이다. 생산적인 일만 하는 건 몰개성하며 결국 방향을 잘못 잡은 일만 해대는 셈이다. 오히려 깊은 취향을 갖고 그 집단에서 인정 받기 시작하면 기회가 생길 것이다. 이건 또 다른 이야기지만 얼마 전 사업에 대한 책들을 잔뜩 읽었을 때 더러 나오는 이야기 중 하나는 커뮤니티-우선 이다. 사업은 결국 고객을 만나 물건을 판매하는 일인데 수요를 알기 쉬운 방법이 커뮤니티에서 활동하는 것이다. 그곳에서, 아직 충족되지 않은 니즈들을 알 수 있고 그걸 효과적으로 채워줄 수 있는 방법들을 실험할 수 있기 때문이다. 적어놓고 보니 웃긴 것이, 생산적이지 않은 일을 하라, 좋아하는 것에 탐닉하라고 말하면서 사실 그 행위 또한 사업의 기회 내지는 경제적인 편익을 줄 수 있다고 말하는 것이 모순적이다. 뭐 아무튼 나도 이제 마음 놓고 좋아하는 걸 좋아해보고 싶다. SF 소설을 맘대로 읽고, 전자공학 만들기도 하고 같잖은 뉴미디어 예술 작품들도 만들어보고 싶단 말이다.
한참을 일에 몰두하다가 퇴근을 하는데 일할 때 무얼 가장 많이 했는가 떠올리니 검색입니다. 정해진 로직을 구현하는 일은 외부 지식이 많이 필요하지 않지만 해보지 않은 일을 해야할 땐 검색하는 시간이 전체 작업의 9할이 넘기도 합니다.
이를테면 지금 착수하고 있는 일을 간단히 설명하면, 윈도우 운영체제에서 동작하던 VLC 미디어 재생기가 갑자기 죽었고 그 이유를 찾아내는 겁니다. VLC 크래시 덤프는 Mini Dump 라는 형식인데 심볼 정보가 없어 그냥 들여다봐선 얻을 수 있는 정보가 거의 없습니다. 그리하여 VLC 사이트에서 제공하는 디버그 심볼 정보를 활용하고 싶은데 그러자면 gdb를 이용해야 합니다. Mini dump 형식의 파일을 GDB용 core 파일로 변환하는 도구를 컴파일해 사용해보는게 지금의 계획입니다.
소프트웨어 엔지니어라고 하여도 모든 컴퓨터 분야를 깊게 알고 있을 순 없으므로 이런 문제를 다룰 땐 큰 범위에서 문제 해결 전략을 구상하고 자세한 정보들은 검색으로 채워나가며 진행해야 합니다. 그 과정에서 문제 해결을 위한 가설의 실제 실행 난이도를 파악할 수 있고 때로 다른 접근의 가설을 새로 세우기도 합니다.
앞서 Gen AI 시대의 프로그래머에 대해 이야기했는데 이런 기술는 비단 프로그래머 뿐만 아니라 대중에게도 영향을 주고 있습니다. 검색을 한다고 이야기 했지만 그 모습은 예전과 다릅니다. StackOverflow 등의 개발 커뮤니티 위주로 검색을 했던 게 옛모습이라면 지금은 미리 학습된 LLM, 곧 ChatGPT, Claude에게 질문을 하고 최신 정보가 필요할 땐 Perplexity AI에게 질문을 합니다. LLM들은 자신에 찬 목소리로 대답을 하지만 그곳에 진실만 있는 건 아닙니다. 특히 컴퓨터 분야의 질문은 그럴싸한 모양으로 해결책을 알려주는데 생각없이 따라하다가 잘못된 길이라는 걸 뒤는게 깨닫곤 합니다.
전통적인 검색에서는 다양한 결과에서 자신의 목적에 가장 부합하는 정보를 찾아내고 통합하는 것이 사람의 몫이었다면 지금의 검색은 나에게 주어진 대답에 얼마만큼의 진실이 담겨있는지 저울질하는 것이 필요합니다. 어쩌면 때론 그것이 기존 검색보다 더 돌아가는 길을 만들지도 모릅니다. 새 시대의 정보검색 소양은 거짓말 탐지 기술일런지요.
진부한 제목이지만.. 요샌 일하면서 제목처럼 새삼 시대가 바뀌었다고 느낍니다. 약 석달 전부터 Github Copilot을 사용해보고 있는데 처음엔 미약했던 영향이 이젠 위협처럼 느껴집니다. 주로 사용하는 프로그래밍 언어 Python을 사용할 땐 그저 내가 마음 속에 그리고 있던 내용을 적어주는 정도였습니다. “어차피 내가 적어도 비슷하게 적었을 것인데 Copilot 덕분에 타이핑 하는 수고를 덜었다” 같은 느낌이랄까요. 하지만 새로운 회사에 와서 새로운 프로그래밍 언어를 다루며 상황이 달라졌습니다.
지금의 업무에선 Typescript, Kotlin, Swift를 사용하는데 하나의 기능을 추가할 때 세 가지 언어를 모두 다뤄야 하는 경우도 있습니다. Typescript는 그나마 자바스크립트 기반이라 익숙하긴 한데 Kotlin, Swift는 말그대로 처음 다뤄보는 언어입니다. 그럼에도 불구하고 큰 어려움 없이 기능 추가와 수정을 하고 있는데 Copilot의 위력 덕분입니다. 제가 구현하려는 내용을 일부 적거나 주석으로 적어주면 지금 다루고 있는 언어에 맞게 풀어 적어줍니다. 서로 다른 프로그래밍 언어들은 각자 나름의 특성을 갖고 있지만, 거시적으로 본다면 같은 패러다임에 속하는 언어의 경우 문법만 다르지 구현 로직은 비슷합니다. 그렇기 때문에 처음 하나의 프로그래밍 언어를 익힌다면 다른 언어도 어렵지 않게 익힐 수 있는 것이지요.
앞서 얘기한 것처럼 세가지 다른 언어를 오가며 작업을 함에도 불구하고 어떤 시점엔 지금 어떤 언어를 다루고 있는지 신경쓰지 않을 때도 있습니다. 어차피 문법적인 부분은 Copilot이 잘 채워넣어주기 때문에 코드 리뷰어의 입장으로 로직이 맞는지, 문법적으로 다소 어색한 부분이 있는지 정도만 확인하면 프로그램을 작성할 수 있습니다. 일은 분명 편해졌는데 마음은 불편해졌습니다. 이렇게 일하다가는 새로운 언어를 배울 수 없겠다, 원하는 만큼 숙련된 수준까지 갈 수는 없겠다는 불안이 떠오릅니다.
새로운 언어를 익히기 위해 Copilot을 꺼두어야겠다는 생각을 합니다. 아니 어쩌면 이것도 시대착오적인 생각일까요? 마치 계산기가 등장하고 나서는 손 계산을 하는 것이 비효율적인 것처럼 말입니다. 어쩌면 프로그래밍 언어를 충분히 익히지 않고서도 일하는데 문제가 없을지도 모릅니다. 코드 작성에서 Gen AI의 도움을 받고 문제를 찾고 해결할 때도 Gen AI의 도움을 받는 시대이니 말입니다. 하지만 아직 새 시대에 적응 중인 저로선는 Copilot 친구가 살갑기도 때론 두렵기도 한 요즘입니다.
지금 일하고 있는 회사의 제품은 VR 콘서트입니다. 인간의 시각을 모사한 스테레오 카메라로 아티스트의 퍼포먼스를 촬영하고 이를 VR 장비를 통해 보여주는 식이죠. 가상현실 Virtual Reality 장비는 아직 충분히 보급되지 않아 촬영한 컨텐츠를 디지털 형태로 전달하는 게 쉽지 않습니다. 그리하여 대중에게 익숙한 방식을 사용하는데 그것이 영화관에서의 상영입니다.
회사에서 마련한 VR 장비들을 상영관에 비치해두고 모든 준비를 마친 상태로 관객을 맞이합니다. 관객은 자리에 앉아 VR 기기를 착용하고 공연을 관람하는 것이죠. 이 과정에서 스크린 영상 송출 그리고 음향 송출을 위해 영사실에서의 작업이 필요합니다. 새로운 상영관에서 VR 콘서트 상영을 한다고 하면 미리 상영관 공간을 파악해두고 영사실에서 실제 영상과 음향 송출을 테스트합니다.
요 며칠 상영 준비를 위해 메가박스 코엑스를 찾았습니다. 보통은 하루의 모든 영화 상영이 끝난 시간을 이용하기 때문에 새벽 시간에 방문합니다. 오전 1-2시 쯤 작업을 시작하고 그날의 작업을 완수하면 오전 4시정도 입니다. 사실 심야 시간에 코엑스를 방문할 일은 없어서 처음엔 풍경이 생경했습니다. 사람들로 가득차 붐볐을 공간은 이제 텅 비고 혼자 그 넣은 공간을 누빕니다. 그 시간에 코엑스엘 들어갈 수 있나? 이미 문이 모두 잠겼거나 경비원에 의해 못 들어가는 건 아닌가? 걱정도 했는데 생각보다 출입이 자유로웠습니다. 일단 영화관에서도 심야 상영을 하기 때문에 새벽에 끝나는 영화들이 있고 해당 영화를 관람한 고객들 역시 순조롭게 밖으로 빠져나갈 수 있어야 합니다. 실제로 오전 1시쯤 영화관에 갔을 때 영화 관람을 마치고 이동하는 손님들을 발견할 수 있었습니다.
저는 기술적인 부분을 담당하고 있어 보통 영사실에서 작업을 합니다. 평소였으면 절대 들어갈 일이없었을 영사실, 곧 영화관의 뒷편이라 처음 영사실에 발을 들여놓았을 땐 신기하고 감격스러웠습니다. 영사기, 영사기와 연결된 미디어/음향 장비들이 신기했고 영사실 창을 통해 내려다보이는 상영관 모습도 인상 깊었습니다. 그곳에서 시간을 보내다 빠져나오면 이제 정말 사람들이 사라진 상영관을 만납니다. 고요하게 가라앉은 분위기 속에서 상영관을 누비면 마치 못된 짓을 하는 기분이 듭니다. 새벽에 작업하는 일은 피곤할만도 한데 실제 일하고 있는 시간엔 별로 피로를 느끼지 못합니다. 아마 약간은 흥분한 상태, 각성한 상태를 유지하고 있기 때문이겠지요. 그렇게 밤 늦도록 작업을 하고 동료들과 작별 인사를 나누고 돌아가는 길엔 같이 고생했다는, 함께 일을 만들어 나간다는 유대감이 생깁니다.
곧 심야의 상영관은 끝이 나고, VR 콘서트를 관람하러 찾아오는 손님들을 만나게 되겠지요. 그때의 상영관 역시 무척이나 궁금하고 기대가 됩니다.
#computer #work
요즘 남는 시간에 컴퓨터를 만진다면 개인용 클러스터를 관리하는 작업을 한다. 오라클 클라우드의 인스턴스에 k3d로 생성한 Kubernetes Cluster인데 사실 클러스터라는 말이 무색하게 그냥 컴퓨터 하나 사용하는 Kubernetes 환경이 있는 것이다.
스타트업을 창업했을 때 일손이 부족한 가운데 급히 인프라 작업을 하면서 Kubernetes에 제품을 배포하기 위한 스크립트를 만들어 사용했다. 최대한 멱등적으로 만들어보긴 했지만 스크립트의 특성 상 절차적인 부분을 완전히 지울 수는 없었다. 게다가 환경변수를 통해 값들을 주입하는 부분이 많아 복잡했다. 내가 만들었으니 나는 이해할 수 있지만 이걸 처음 접하는 동료들은 어려울 수 밖에 없었다. 창업의 길에서 나와 새로운 회사에서 일할 때도 내게 맡겨진 건 인프라 작업이었는데 정해진 일정에 맞추기 위해선 이전 경험과 코드를 재활용 해야했다. 결과적으로 작업은 완수하였지만 작업의 내용을 동료들에게 전달하고 교육시키는 일이 쉽지 않았다.
이번에 잠시 짬이 나는 동안, 더 나은 방법을 찾아 적용해보고 있다. Helmfile + Helm Chart를 조합하면 내가 원하는 외부 Helm Chart들을 쉽게 설치할 수 있고 내가 원하는 Kubernetes 자원들도 나만의 차트를 만들어 설치할 수 있다. 사용해야 하는 도구는 Helm + Helmfile이 전부이며 이를 사용하기 위해 배울 것도 거의 없다. 차트 생성을 위한 지식만 갖추면 쉽게 원하는 자원을 추가할 수 있다.
이렇게 보통 더 나은 것들이 있다. 코드의 질, 제품의 질을 향상시키기 위해 늘 더 나은 것이 있는지 찾아보고 적용하는 것도 소프트웨어 엔지니어에겐 일상이다. 아, 그리고 사실 이 글의 목적 중 하나는 앞서 이야기한 것대로 Writefreely도 설치 방법을 변경했는데 잘 동작하는지 테스트하는 것이다. 문제가 없다면 이 글이 잘 올라갈 것이다.
아이를 재우고 난 어느 밤, 아내가 무라카미 하루키의 산문책을 읽고 있었습니다. “밸런타인데이의 무말랭이”라는 제목이었는데 특별히 새로워보이진 않았습니다. 하루키의 산문은 달리기에 관한 책을 하나 읽은 것이 전부였고, 요즘엔 특이한 제목들의 하루키 책들이 많다 정도로만 알고 있었으니까요. “채소의 기분, 바다표범의 키스“, “샐러드를 좋아하는 사자“ 같은 것들이요. 아내가 책을 건네주어 짧은 글을 읽어봤는데 글의 내용도 내용이지만 말하는 투와 분위기가 인상 깊었습니다. 사실 내용은 잘 기억나지 않아요. 아, 어떤 내용이었냐면.. 평일 오후에 도심을 거니는 것이 보통의 직장인과 달라 머쓱한 기분이 든다, 안자이 씨를 만난 이야기 였습니다. 저는 글을 적는다고 생각하면 괜히 자세를 고쳐잡게 되면서 긴장 아닌 긴장을 하게 된달까요, 불필요하게 본격적으로 되버리고 맙니다. 하지만 하루키는 짧은 산문을 담백한 듯 싱거운 듯 편하게 적어내려갑니다. 그 느슨함과 여유가 매력입니다. 저는 떄로 글을 적을 때 너무 적은 분량이 아닌가, 쓸모있는 정보가 없는 것이 아닌가, 그냥 글 읽는 사람의 시간을 낭비하는 건 아닐까 고민할 때도 많으니까요. 싱거운 글을 쓰는 연습을 해봅시다. 아니 연습이라고 하니 또 애쓰는 것 같은데 너무 애쓰지 맙시다.
요즘 제가 맡은 회사일의 핵심은 인프라 스트럭처 입니다. 회사에서 만든 제품을 안정적으로 구동할 수 있는 환경을 만드는 일이죠. 혼자 만들고 사용하는 환경과는 다르게 확장성과 안정성이 필요합니다.
기존의 환경은 Docker Compose를 이용한 배포였습니다. AWS EC2 Instance를 필요한 만큼 만들고 각 인스턴스들에서 docker compose를 실행하여 여러 서비스들을 동작시킵니다. 만약 소프트웨어 오류로 컨테이너가 정지한다면 재시작 해줄 수 있고, 가상화된 네트워크와 볼륨을 이용하여 서로 다른 서비스끼리 연결하거나 같은 볼륨을 공유할 수 있습니다. Docker Compose에 내장된 로드 밸런싱 기능이 있을지 모르겠지만 간단하게는 Nginx 등 다른 소프트웨어를 통해 로드밸런싱을 수동으로 설정할 수도 있을겁니다. 하지만 인스턴스 자체의 오류로부터는 무방비 상태입니다.
Read more...
#buddhism
안녕하세요, 새해 첫 글을 적어봅니다. 새해맞이 결심 중 하나는 꾸준히 불교 공부하기 입니다. 저는 주로 출퇴근 시간을 활용하여 책을 읽는데 보통 두 권의 책을 번갈아가며 읽습니다. 그 두 권의 책 중 하나는 불교 책으로 선택하려 합니다. 무언가 익히고 습관으로 만들기 위해선 꾸준히 시간과 관심을 들여야 합니다. 한번 익히고 관심을 다른 곳으로 돌리면 금방 잊어버리고 안 배운 것과 마찬가지인 상태로 돌아가 버리더군요. 불교도 그렇습니다. 가슴을 울리는 이야기들이 가득한 불교 관련 책을 읽다보면 마음이 너그러워지고 나도 수행하여 무명에서 벗어나고 싶다는 마음이 드는데, 책을 읽고 나서 별 생각없이 뉴스와 신문으로 세상 이야기를 듣다보면 다시 마음은 경계로 가득차고 내것에 집착하게 됩니다. 이런 이유로 짧은 시간이나마 꾸준히 하루에 몇 줄씩은 불교 혹은 명상에 대한 책을 읽으려 하는 것이죠.
Read more...