재미있는 이야기를 하나 알고 있습니다. 암흑물질이라는 것을 아십니까? 천문학자들이 정의한 우주에 존재하는 수수께끼의 물질입니다. 암흑물질의 대표적인 특징은 눈에 보이지 않는 것입니다. 현존하는 어떠한 장비로도 관찰할 수 없다고 합니다. 그런데 어떻게 천문학자들은 암흑물질을 존재를 알 수 있었던 걸까요. 그 이유는 바로 암흑물질은 중력 렌즈를 통해 관측할 수 있다고 합니다. 눈으로 볼 수 없고, 오로지 중력에 의한 상호작용을 통해서 관측할 수 있는 겁니다.
이 이야기를 들은 지 꽤 오랜 시간이 흘렀지만 여전히 좋아하는 이야기 중 하나입니다. 암흑물질의 존재를 알기 위해서는 눈으로 보는 것이 아닌, 중력에 의한 서로의 끌어당김을 통해서 느낄 수 있다는 점이 재미있지 않습니까?
베일에 싸인 천문학에서 일어나는 일이지만, 우리의 일상 속에서도 이런 현상을 볼 수 있지 않을까 하는 생각입니다. 눈으로는 볼 수 없고, 상호작용을 통해서만 관측할 수 있는 무언가가 있지 않을까요? 유명한 고전인 어린 왕자에 쓰인 ' 가장 중요한 것은 눈에 보이지 않는다 '라는 구절도 어렴풋이나마 이러한 의미를 전하고 있는 게 아닐까 하는 생각도 들곤 합니다.
이번에는 가장 중요한 것은 눈에 보이지 않는다는 것을 알고서, 제 주변에서 일어나는 소중한 것들을 관측하기 위해 많은 시간을 썼습니다. 당신이 주었던 사랑, 긴 시간을 함께 해준 친구들, 먼 길을 귀한 시간을 내어 와 준 오랜 친구들 모두 관측해 보면 제가 생각했던 것보다 제게 더 많은 사랑을 주었던 것 같습니다. 멀리서 지내고 계신 당신도 날이 춥다는 간단한 인부 인사 뒤로 얼마나 많은 사랑을 보내주려고 했던 것일까요.
시대생 리빌드
시대생 리빌드는 생각보다 험난한 여정이었습니다. 다양한 부분에서 자잘구레한 기획 및 디자인 수정 등이 이어졌고, 여름 방학 기간 동안에 어느 정도 할당량을 채우지 못해 학업과 함께 개발을 병행해야 하는 상황이었기 때문에 생각보다 많이 늘어지게 되었습니다.
시대생 어플리케이션의 리빌드 이유는 오래된 기술 스택이었던 Vue 2.0과 Flask 기반의 프론트엔드와 백엔드 기술 스택을 교체하고, 클라이언트 쪽은 Swift & Kotlin을 집어던지고, 리엑트 기반인 리엑트 네이티브를 통해서 클라이언트를 구현하기 위함이었습니다. 다양한 신 기술의 도입을 통해 프로젝트를 2023년 하반기동안 진행하여 마쳤고, 개발자로서 다양한 고민을 하게 되었습니다.
첫 번째 고민으로써는 기술의 일장일단에 대한 것이었습니다. 두괄식으로 말하면 스프링부트와 코틀린을 사용하는 것으로 결정이 되었습니다. 원래 스프링을 잘 다루는 편은 아니지만 개인적으로 공부하고 있었고, 관심 있던 기술이었기 때문에 반대 없이 해당 프레임워크를 통해서 진행하는 것으로 하였습니다. 백엔드 개발 관련하여 주로 맡은 포지션은 JWT 액세스 토큰과 Redis를 통해서 리프레시 토큰을 구현하고 그에 맞는 스프링 시큐리티 설정이었습니다.
이때 팀에서 정한 스택은 전부 최신 스택이었고, JDK 17의 코틀린과 Springboot 3.1 버전을 사용하게 되면서 굉장히 많은 시간 투자를 하게 되었습니다. 스프링부트 최신 버전의 AWS SDK는 문서화가 불편하게 되어있었고, 해당 SDK 개발자 스스로 오류가 있음을 밝히는 등 변화의 최전선에 있는 SDK이었습니다. 스택을 정할 때, 단순히 스프링 개발자의 수요가 많다는 의견을 통해서 스프링 최신 버전으로 기술 스택을 정하게 되었지만 돌이켜 생각해 보면 우리에게 맞는 적정 기술이었는지에 대해서는 여전히 의문이 듭니다. 결과론적인 이야기이긴 하지만 좀 더 가벼운 기술 스택을 쓰더라도 좋지 않았을까 하는 고민도 들었습니다. 스프링부트 최신 버전에 코틀린을 쓰게 되면서 백엔드 개발자 전체적인 생산력이 저하되게 되었습니다. 물론 개발 속도 저하에는 다양한 요인도 있었겠지만, 굳이 최신 기술 스택이 최선이었나라는 생각을 다시 하게 되었고, 기술을 도입할 때 장점과 단점이 항상 같이 온다는 것을 느끼게 되었습니다.
두 번째 고민은 인프라 구성에 대한 고민이었습니다. 관련하여 제가 맡은 포지션은 인프라 담당자(SRE)가 작업을 원활하게 할 수 있게 스프링부트 서버와 node 스크립트를 도커라이징하여 Github actions를 통해 CI(Continuous Intergration) 과정까지 파이프라인을 구축하는 것이었습니다. 이를 ArgoCD를 통해 CD를 구축하는 파트는 다른 분이 맡았습니다.
AWS EKS 환경에서 돌아가는 구조로 인프라를 구성했기 때문에, 스프링부트 서버, node 서버를 도커라이징하는 파트를 맡았습니다. 스프링부트는 빌드된 도커 이미지를 deployment로 배포하는 형식이었고, node 서버 ( 정확히는 스크립트에 가까운 크롤러 )는 크론잡을 통해서 매분마다 학교의 공지사항을 크롤링하는 역할을 합니다.
인프라의 CI를 구축하는 과정에서 했던 고민은 생각보다 많은 서버의 이슈들을 인프라 수준에서도 관리할 수 있지 않을까 하는 고민이었습니다. 가령 예시를 들자면, 실제로 있었던 서버가 터졌던 사건에 대해서입니다. 시대생 이벤트 결과가 발표되어 한 번에 모든 사용자에게 푸시 알림을 쏜 적이 있는데, 많은 사용자들이 접속하여 트래픽이 몰리는 사건이 일어났습니다. 순식간에 트래픽을 받은 서버는 CPU는 100%를 찍게 되면서 서버는 다운되게 되었습니다.
첫 번째 고민과 비슷한 주제긴 한데, 많은 트래픽을 받아내기 위한 대안으로 스프링부트를 꺼내 들게 되었지만, 인프라의 관점에서 생각해 본다면 K8s 레플리카셋을 수정해서 스케일 아웃하는 것만으로 처리할 수 있지 않았을까 하는 생각도 듭니다. 또한 컴퓨팅 리소스를 비교적 많이 잡아먹는 스프링부트도 인프라 관점에서는 부담스러울 것 같다는 고민입니다.
이렇게 다양한 고민을 하면서 프로젝트를 마쳤고, 결과적으로는 성황리에 많은 사용자를 모았습니다. 프로젝트 도중 결론적으로 느낀 것은 모든 기술에는 장단점이 있다는 것이었습니다. 많은 사람들이 각자의 의견을 피력하여 좀 더 많은 관심을 가져 프로젝트를 들여다보며 다양한 차원에서 생각해 보았다면 좀 더 좋은 의견을 낼 수 있지 않았을까 하는 고민이 있었고, 기술을 어떻게 구현하는지에 그치지 않고 좀 더 깊은 작동원리 등을 알고 있는 것의 중요함을 알게 된 소중한 경험이었습니다.
홈 서버 구축
개인적인 공부를 위해서 직접 라즈베리파이를 통해서 쿠버네티스 클러스터를 구축하는 공부를 하기 시작했습니다. 학교에서 네트워크 전공 수업을 듣고 있었던 것도 있고, AWS나 GCP 같은 클라우드 서비스를 통해서 관리할 때에는 네트워크의 개념이 추상적으로 느껴졌는데, 직접 서버 작업을 하면서 보다 깊은 이해를 할 수 있게 되었습니다.
라즈베리파이 4를 통해서 CI/CD를 구현하고 있는데, 생각보다 메모리가 적어서 ArgoCD나 Jenkin가 K8s의 Pod으로 돌아가지 않는 상태가 발생하여 직접 배포해두고 있는 상태지만, 쿠버네티스를 최대한으로 살려 Nginx와 함께 도커라이징된 애플리케이션을 함께 배포할 수 있도록 하게끔 설정하려고 하고 있습니다.
전공에서 배운 내용을 필기하는 것을 넘어서 직접 구축하는 것은 재미있는 경험이었습니다.
학교 서버 모니터링 서비스 uos status
기존에는 nest.js 및 springboot를 통한 API 서버 개발 위주로 진행하였지만, 이번에는 프론트엔드의 개발 환경을 경험해 보기 위해서 MVC 패턴 프레임워크를 통해서 직접 HTML 및 CSS를 공부하게 되었습니다. 이 때는 다양한 경험을 위해서 루비 온 레일즈를 사용하기로 하고 프로젝트를 진행하였습니다.
해당 프로젝트를 진행하면서 HTML 및 CSS 관련해서 프론트엔드 개발자분의 도움을 받게 되었습니다. 이때 크게 느낀 점은 '질문 잘하는 방법'이었던 것 같습니다. 백엔드와 같은 경우에는 직접 결과물을 볼 수 있는 프론트엔드와는 다르게 비교적 추상적이어서 프론트엔드 관련 질문을 할 때보다 원하는 답변을 받기 힘들었지만, 이번 프로젝트를 통해서는 원하는 답변을 얻기 비교적 수월했습니다. 그 이유가 뭔지 회고해 보면 원하는 바를 구체적으로 질문하였기 때문이라고 생각합니다.
이번 프로젝트 경험을 통해서 얻은 구체적으로 질문하는 방법에 대해서 터득하여, 다양한 개발 분야에서 '질문 잘하는 방법'에 대해서 알 수 있게 되었던 것 같습니다.
일본 도쿄 여행
원래부터 일본은 가고 싶어 했던 여행지 중 하나였습니다. 이번에 학기 중에 잠깐의 여유가 생겨 운 좋게 일본 여행을 가게 되었습니다. 한국에서의 바쁜 스케줄에서 벗어나 일본 여행을 하면서 다양한 일본의 문화를 느낄 수 있었습니다.
여행을 하면서 다양한 일본의 시스템을 느낄 수 있었습니다. 어렸을 때부터 들었는데, 일본에서는 자전거에 번호를 발급받는다던가. 자전거를 통해서 왔다 갔다 할 수 있게 분리된 상업지구와 주거지구 등 다양한 시스템을 느낄 수 있었습니다.
여행에서 가장 값지다고 생각하는 점은 다양한 경험을 할 수 있다는 점 같습니다. 한국과는 다른 지하철 구조, 주거 구조, 세금 계산 구조, 면세 구조, 자전거를 타고 다니는 문화, 집 구조 등.. 단순한 여행이라고 생각할 수 있겠지만 하나하나 자세히 들여다보면, 배울 점이 많다고 느꼈습니다. 어떠한 것이든 관심을 갖고 들여다봄으로써 다양한 인사이트를 얻을 수 있구나라는 생각을 했습니다.
GDG Devfest
개인적인 독학도 꾸준히 하지만, 가끔씩은 컨퍼런스에 참가함으로써 다양한 사람들과의 네트워킹 그리고 다양한 세션을 통해서 얕게나마 지식을 배우는 것을 굉장히 좋아합니다. 12월 초에 연세대학교에서 devfest가 열렸는데, 다양한 세션과 현직자들과의 커피챗을 할 수 있었습니다. 2년 가까이 백엔드 개발자로서 활동하면서 기업에서 일하게 될 날이 오기 전까지 남은 꽤 긴 시간 동안 좀 더 역량을 키우고 싶었습니다. 특히 석사 과정을 진학할 예정인 나는 앞으로 약 3년 정도 대학교에서 더 공부하게 될 예정이었는데, 나의 커리어를 어떻게 더 키울 수 있을 지에 관해 크게 고민할 수 있었던 컨퍼런스였던 것 같습니다.
백엔드 개발자에서 좀 더 나아가 SRE(Site Reliability Engineer) 혹은 ML 엔지니어라는 포지션에 꽤 관심이 있었는데, X나 커리어리 등 다양한 소식처에서 접했던 변정훈(아웃사이더, 당근마켓 SRE팀)님과의 커피챗 그리고 ML 관련한 컨퍼런스, 정확히는 GCP에서 제공하는 서비스들을 통해서 LLM이 기능이 탑재된 프로덕트를 만드는 것을 보면서 과연 어떤 쪽의 공부가 좀 더 적성에 맞을지 고민을 크게 했던 시기였던 것 같습니다.
한 해를 마치는 송년회
하반기가 끝나가며 다양한 송년회가 열렸습니다. 같은 과 학우들과 함께하는 축제인 전전컴인의 밤 그리고 시대생팀의 송년회 시대생의 밤. 이 외에도 다양한 사람들과 송년회를 가졌습니다.
송년회를 통해 다양한 사람들을 오랜만에 뵙게 되면서 많은 생각을 하였습니다. 한 해가 끝나는 것들을 돌이켜 봄으로써 그 어느 치열했던 순간도 빠짐없이 연말을 꾸미는 초석이 된다는 것을, 그로 인하여 다음 해를 보낼 수 있게 고무해 주는 것이 된다는 것을, 고마운 일이라고 생각합니다. 누군가와 추운 연말을 따뜻하게 보낼 수 있다는 것은.
언제든 항상 최선을 다할 것을 다짐합니다. 그러한 다짐에 대해 때때로 스스로에게 '누군가에게 이 최선이 닿지 않으면 어떡하지'라는 의문을 가지곤 합니다만 그러한 의문을 날려버리듯 다양한 송년회와 연말이 되면 저를 찾아주는 친구들에게 고마운 마음이 들뿐입니다. 2023년뿐만 아니라 2024년도에도 많은 사람들에게 떳떳한 모습을 보여주어야겠다는 다짐을 하게 되었습니다.
마치며
한 해를 마치고, 어느덧 이십 대 중반으로 접어들게 되었습니다. 여전히 세상은 모르는 것들로 가득 차 있었고, 배움에도 끝이 없었습니다. 이렇게 세상을 배워나갈 수 있는 것은 당신의 사랑이 있기에 가능했다는 것을 뼈저리게 느꼈습니다.
일체유심조
일체유심조는 모든 것은 마음먹기에 달려 있다는 뜻이라고 합니다. 올해를 통틀어 가장 좋아하는 고사성어가 아닐까 합니다. 길흉화복이나 흥망성쇠, 희로애락 따위는 밖에서 오는 것이 아니라 인간의 마음먹기에 달려있다는 뜻입니다.
최근에 부끄러운 일을 겪었습니다. 화장실에서 넘어져 이마에 혹이 생긴 적이 있었습니다. 속상할만한 일이지만 가장 먼저 든 생각은 '눈이나 코가 아니라 이마를 찧어서 다행이다'라는 생각이었습니다. 하루 종일 속상했을 수도 있겠지만 저는 감사한 마음이 들었습니다. 크게 다칠 수 있었지만 이마가 다쳐서 얼마나 감사한 일인지, 속상한 일은 어느새 감사한 일이 되었고, 모든 것이 마음먹기에 달렸다는 것을 깨달았습니다.
세상 모든 일이 마음대로 풀리지 않는다는 것을 알고 있습니다. 다른 사람들은 어떻게 생각할지 모르지만 저는 다양한 사건에 운도 크게 작용한다고 믿고 있습니다. 그렇기 때문에 좋은 일을 겪으면 겸손하게, 나쁜 일을 겪어도 의연하게 일어설 수 있게 된 것 같습니다.
꽃
내가 그의 이름을 불러주기 전에는
그는 다만
하나의 몸짓에 지나지 않았다.
내가 그의 이름을 불러주었을 때,
그는 나에게로 와서
꽃이 되었다.
내가 그의 이름을 불러준 것처럼
나의 이 빛깔과 향기에 알맞는
누가 나의 이름을 불러다오.
그에게로 가서 나도
그의 꽃이 되고 싶다.
우리들은 모두
무엇이 되고 싶다.
너는 나에게 나는 너에게
잊혀지지 않는 하나의 눈짓이 되고 싶다.
김춘수
올해는 거의 옷을 사지 않게 되었습니다. 이미 충분한 옷이 있어서인 지, 더 이상은 치장에 신경 쓰게 되지 않아서인 지 모르겠습니다. 하지만 가장 중요한 것은 눈에 보이지 않는다는 것을 알고 있기에, 많은 옷과 비싼 옷들은 저를 채워줄 수 없다는 것을 알고 있습니다.
바쁘다는 핑계로 오랜만에 당신을 뵈었습니다. 당신이 입고 있던 옷은 수년 전에 사서 아직까지도 입는 해어진 옷 혹은 제가 학창 시절 때 사서 잘 입지 않은 옷을 입고 계셨습니다. 그러면서 제 손에 용돈을 꼭 쥐어주시던 당신을 보고 제 스스로에게 얼마나 부끄러웠는지 모릅니다.
당신은 이미 알고 있었습니다. 가장 중요한 것은 보이지 않는다는 것을, 꾸밈새 좋은 옷차림보다 먼 길을 나서는 제 손에 쥐어주는 용돈을 쥐어주는 사랑의 가치가 더욱 크다는 것을 말입니다. 올해 거의 옷을 사지 않게 된 것도 당신을 닮아가고 있기 때문이 아닐까요. 낡은 옷들을 입고 있으면서도 의연한 당신을 보며 올해 다시 한번 가장 중요한 것은 눈에 보이지 않는다는 것을 깨달았습니다.
가장 중요한 것은 눈에 보이지 않는다는 것을 생각하면 얼마나 많은 사람들의 사랑을 받았는지 모릅니다. 그런 사람들에게 부끄럽지 않은 떳떳한 사람이 되기 위해 2024년도에도 열심히 해야겠다고 다짐합니다. 많은 지인에게도 그리고 당신에게도.
'회고' 카테고리의 다른 글
2024년 하반기 - 인간의 시간은 원형으로 돌지 않고 직선으로 나아간다 (1) | 2025.01.15 |
---|---|
2024년 상반기 - 의연함을 잃지 않을 수 있다면 (2) | 2024.07.23 |
2023년 상반기 - 자신의 운명을 사랑해야만 한다 (1) | 2023.10.03 |
2022년 회고 - 사랑하는 것을 사랑하는 사람 (0) | 2023.09.01 |