민초로그

2025년의 기록

Review

2025-12-23

28 Min Read

작년과 비교하여 올해는 비교적 안식년에 가까운 해였다. 사실 개발적으로는 안식년에 가까운 해였지만, 나를 한 번더 성숙하게 돌아보는 시간이였다.


회사

작년에 이어 팀에서 맡고 있던 모니터링 솔루션 프로젝트가 1년 더 연장되었다. 여느 때와 같이 기능을 만들고 기획을 반영하는 과정을 반복했다.

이 시기에도 나는 업무외적으로 팀 생산성을 위한 일들을 부가적으로 진행했었다.

docker layer 캐싱 최적화

팀에서 진행하는 프로젝트는 on-premise환경에 네트워크 장치들을 모니터링할 수 있게 해주는 솔루션이다. 그러다보니 직접 고객사 내부망에 배포를 수동으로 해줘야 한다. 아이러니하게도 회사망의 개발계에서 docker 이미지를 만들고, 해당 고객사 보안 USB에 이미지를 담아 반입하여 내부에 수동으로 띄워주어야한다.

문제는 이 과정이 오래걸렸다. 개발계에 코드 푸쉬를 한 뒤 파이프라인에 따라 docker이미지가 빌드되고 빌드된 이미지를 컨테이너로 띄우는데, 약 8분 정도가 걸렸다.

시간이 오래 걸리는 부분은 docker이미지 빌드 시간이 주요 원인이었다. docker 이미지 빌드 로그를 확인하였을 때 의존성 설치 layer가 많은 시간을 잡아먹었다. 문제는 외부 의존성에 변화가 없는데도 불구하고 매번 다시 설치가 이뤄졌다.

FROM nexus.okestro-k8s.com:port/node:20-alpine AS build-stage 
 
RUN mkdir -p /app
WORKDIR /app
COPY . ./
 
RUN git submodule update --init --remote --recursive
 
RUN echo "[VISTA-FE] START YARN INSTALL & BUILD"
RUN yarn install --immutable --check-cache

docker파일을 확인했 을때 submodule을 받아온 뒤에 의존성을 설치하고 있었다. dockerfile을 통해 이미지를 빌드 할 때 각 step layer를 매번 진행하면 효율이 떨어져 자체적으로 파일 시스템에 변화가 있을 때만 해당 step layer가 진행하도록 되어있다.

현재의 submodule은 퍼블리싱을 위해 분리한 레포로 빈번하게 업데이트가 이뤄진다. 따라서 dockerfile은 해당 submodule layer의 파일시스템 변화를 인지하고 캐싱하지 않는다. 또한 이 단계에서 캐싱되지 않고 최신 파일 시스템으로 실행한 명령어가 이후의 인과 관계로 사이드이펙트가 발생할 수 있기 때문에 이 후의 모든 명령어 또한 파일시스템 변화가 없더라도 레이어를 캐싱하지 않는다.

그래서 yarn을 통한 의존성 설치가 매번 이미지를 빌드할 때 발생하여 시간 소비가 매우 컸다. 그래서 단순히 명령어 순서를 재구성하여 캐싱을 활용하도록 했다.

하지만 gitlab cicd의 러너의 가상 환경은 매번 다르기 때문에, 이전 환경에서 캐싱을 해놓더라도 활용이 어려웠다. 동일한 러너 환경을 사용하기 위해서 특정 key를 태깅해주었고, 캐싱이 잘 되는 걸 확인할 수 있었다.

gitlab-cicd-key-cache

gitlab 공식문서 https://docs.gitlab.com/ci/caching/#good-caching-practices

build:
  tags:
    - specific-runner-tag  # 특정 Runner에만 부여한 고유 태그
  script:
    - docker build -t myapp .

결과적으로 8분 정도 걸렸던 과정이 2~3분으로 줄어들었다. (Bitbucket으로 저장소를 이관하면서 당시 작업들이 사라져 캡쳐를 못했다..ㅠ)


PR 알림 웹훅 파이프라인 구성하기

위에서도 잠깐 이야기가 나왔지만 Bitbucket으로 저장소를 이관하면서 세팅을 변경해야했다. 그 중 골치아픈 부분이 사용하던 메신저인 teams와 웹훅 연결을 통해 PR알림을 받는 세팅을 해주는 것인데, 생각보다 장애물이 많았다.

Bitbucket은 github와 달리 마켓플레이스 활성화가 안되어 있어 외부 플러그인이 많지 않았고, 있더라도 내 계정 권한으로 외부 플러그인 연결이 어려웠다. 회사 관리자에게 요청하여 플러그인 설치할 수도 있었지만 답도 느려서 그냥 내 딴에서 해결하고자 했다.

그래서 직접 파이프라인을 통해 구성하기로 한 이유를 정리하자면

  • 기본 웹훅을 사용해 메시지 템플릿을 만들면 가독성이 아쉽다.
  • 기본 웹훅 기능은 pr이 생성되면 알림 메시지 템플릿에 리뷰어 태그가 되지 않아. 직접 리뷰어 태그를 해주어야한다.
  • 리뷰받아야 할 PR의 수가 많은 경우 흐름을 따라가기 힘들다.

우선 결과물을 보여주자면

before-webhook-noti

원래 이랬던 알림 템플릿이...

after-webhook-noti

좀 더 보기 좋게 바뀌었다.

알림 메시지가 오는 흐름은 이렇다.

PR open/update -> bitbucket pipeline trigger -> teams webhook -> teams 알림 메시지 수신

bitbucket pipeline파일에서 트리거된 pr 정보를 bitbucket api를 통해 가져오고, 이를 teams template에 알맞게 정리해준다.

추가적으로 Weekly PR 리마인더도 설정해놨다. 깜박하고 리뷰어가 놓친경우가 있기 때문이다. 스케줄링을 통해 월요일 오전 9시에 트리거되게끔 해놨다.

weekly-pr

Cursor Rule확립 및 MCP 연동 가이드 문서 작성

AI가 점점 업무에도 관여하기 시작했다. 그 흐름에 따라 회사에서 cursor를 결제해주기 시작했다. 그런데 팀내부에서 Cursor를 잘 활용하지 못하는 부분도 보였고, 심지어 다른 IDE를 사용하시는 팀원분도 계셨다.

내가 요즘 느끼는 건 개발자라고 AI라는 기술에 모두가 관심있고 잘 활용하는 건 아니라는 점이다. 그렇지만 AI를 활용해 생산성을 높이고 업무의 효율을 높이는 관점을 팀원들에게도 확립시키고 싶었다.

그래서 비개발자도 활용할 수 있는 내용을 문서화하고, 개발 팀원내에서 Cusror Rule작성을 주도하여 합의했다.

mcp-guide
cursor-rule

문서화를 하고 회의 및 발표를 진행하여 조금이라도 팀원들이 AI활용할 수 있도록 도왔다.

Cursor Rule은 지켰던 컨벤션 내용을 바탕으로 정리해두었고, 또 팀 내부에서 사용되는 도메인 지식을 정리해두었다.


성과란 무엇인가

매년 개개인의 성과와 그에 대한 보상을 위해 성과지표를 작성한다. 이번에 회사에서 레몬베이스라는 HR서비스를 도입해서, 이 곳에 내 성과를 작성했다.

성과를 작성하는 형식은 수치화를 기반으로 한 포맷이 대부분이였다. 요즘 내가 의구심이 드는 건 수치화다. 이력서 첨삭에서도 많이 들었던 수치화. 성능을 몇 퍼센트에서 몇 퍼센트까지 개선했다. 티켓이슈를 몇 개까지 처리했다. 버그 티켓을 몇 개까지 개선했다. 이런 것들이 실질적으로 성과가 될 수 있을까??

이 수치화라는게 믿을 수 있고 증명이 가능한지에 대한 의심이 든다. 예를 들어 내가 웹페이지 첫 페인트될 때의 시간을 00퍼센트까지 개선했다는 성과를 작성할 때, 이 00퍼센트는 무슨 환경에서 어떤 상태로 측정이 됬는지나 애초에 기능을 구현할 때부터 성능이 고려되지는 않았는지 등의 의문이 따라온다.

그래서 수치화가 성과나 이력을 돋보이게 만드는 요소이기는 하지만, 수치화에 목을 맬 필요가 있을까라는 의문이 든다.

올해 회사 생활에 대한 총평

작년과 이어서 올해 주도적으로 자율성을 갖고 일을 할 수 있었다. 단순 업무 이외에 하고 싶은 업무를 했다고는 하지만, 모두 팀의 생산성을 생각하면서 했던 일이였던터라 팀원들의 피드백 또한 들을 수 있었다. 특히 비개발자분이 내 AI관련 문서를 보고 직접 활용하면서 도움이 되었다는 말도 들을 수 있었다. 이런 일을 하면 팀원들의 피드백이 나의 마음을 움직인다.

team-reaction-cicd

하지만 아쉬운 점도 많았다. 특히 회사에서 진행하는 프로젝트는 지속가능한 서비스가 아니다. SI성 개발이기 때문이다. 그래서 지속적으로 유지보수하고 개선하는 경험을 쌓아나갈 수 없다. 이 감정을 느낀 순간부터 현재 하고 있던 프로젝트의 코드에 대한 애정이 식었다. 내가 작성한 코드에 대해 팀원들과 고민하며 개선했는데, 더 이상 생각할 필요가 없어진거 같다. 게다가 내 뒤를 이어 내 코드를 유지보수 할 사람이 없다는 것도 크게 다가왔다. 물론 그렇다고 일을 허투로 하지는 않았다. 그래도 허무함과 공허함이 컸다.

올해를 마지막으로 내년부터는 새로운 조직 합류하여 또 다른 프로젝트를 맡을 예정이다. 이 조직 또한 SI성 개발을 맡고 있긴 하지만, 나름 내가 접해보고 싶었던 개발 문화나 기술을 사용하고 있어 공허함을 채워 줄 수 있을 것으로 기대하고 있다.


대외활동 및 자기계발

모각코 활동

연 초에 모각코 모임을 두 개나 들어갔다. 주말 하루 정도는 내가 하고 싶은 공부나 미흡했던 회사 업무 등을 마무리하는 시간을 가지면 좋을 거 같아서 지원했었다. 사실 두 개나 할 생각은 없었지만, 떨어질 수도 있다는 생각을 해 두 개나 지원했고 둘 다 붙게 된 것이다.

한군데에 옹기종기 모인 환경은 나의 집중력을 높여줬고, 쉬는 시간마다 각자의 환경과 개발 이야기 등을 나눌 때 좋은 인사이트도 많이 나눠갔다. 물론 개발 이야기만 오간 건아니고 서로의 관심사와 핫한 주제들도 많이 나눴다.

모각코 중에 코탐이란 곳은 이외에도 네트워킹 활동을 많이 진행하고 있다. 그 곳에서 정말 많은 사람들에게 힘과 위안을 얻기도 했다.


컨퍼런스

올해 컨퍼런스는 테오콘만 참여하게 되었다.

이번에는 발표자 분이 회사 동료분이라 추천으로 참여할 수 있었다.

teoconf

이번 테오콘도 주말 2일동안 진행되었고, 규모가 훨씬 커졌다. 스태프도 많아졌고 다른 컨퍼런스처럼 세션에 따라 방이 나눠지기도 했다. 규모가 커져서 좋긴 했지만, 미흡한 부분도 좀 있었다. 방이 많다보니 초반 진행이 아쉬웠고 음성이슈도 있어서 흡입력이 조금 떨어졌던 거 같다.

발표 중 기억에 남는 부부은 Jeremy의 코드 리뷰관련 세션이였는데, 코드 리뷰 문화를 어떤식으로 진행하고 발전시켰는지를 엿 볼 수 있었다. 발표가 끝난 뒤 QnA시간에 "리뷰어와 리뷰이의 의견 충돌이 있는 경우 중재를 어떻게 하시나요??" 라는 질문에 Jeremy는 실제로 그런 경우가 많고, 그럴 때 아예 회의실을 잡아 날 잡고 얘기하는 경우도 많다고 한다.

사실 이런 질문을 던진 이유에는 내가 실제로 겪었던 이슈였기 때문이다. 의견 충돌이 났을 때 딱 각을 잡고 이야기하기 보다는 결국 결정권자가 없기 때문에 흐지부지 되어 머지되는 경우가 종종 있었기 때문이다. 날 잡고 서로의 의견에 대해 결판을 내보는 것도 좋고 긍정적 인사이트를 얻어 갈 수 있는 방법인거 같다.(물론 너무 딜레이가 되면 결정권자에게 조언을 구해야겠지...)

멘토링

올해 몇몇 분께 멘토링을 받았다. 이력서 첨삭이나 내 실력을 테스트해보는 시간을 가졌다.

멘토링을 받을 때마다 느끼는 점은 아직도 나는 한참 부족하구나 하는 좌절감에 빠진다. 하지만 이런 좌절감을 부정적으로만 해석하지는 않는다. 이렇게 좌절감을 느껴야 내 동기부여가 되니까. 내 스스로에게 최면을 거는거 같다...

또 멘토분들과 이야기하며 느낀점은 이력서에는 크게 답이 없는 거 같았다. 물론 오답은 존재하지만 멘토님마다 생각하고 방향이 달랐다. 내 생각에도 지원하고자하는 회사나 연차 등에 따라 전략을 다르게 가져가야 하지 않을까 생각이든다. 그래서 더 어렵다. 특히나 현업을 다니면서 그에 맞춰 이력서를 준비하기가 쉽지 않긴 하다.

이런저런 이야기를 나누며 내가 주니어로서 어떤 팀에 들어가고 싶은지 조금 더 명확하게 그려진 게 있다. 팀원 중에 내가 제일 못하는 사람인 팀. 그 만큼 더욱 성장하고 뛰어난 사람이 되고 싶은 바램이다.

일상

독서

올 해 이뤘던 목표 중에 제일 오버해서 했던 활동 중 하나다. 출퇴근 시간이 조금 되기 때문에 이 시간에 휴대폰대신 책을 보는 시간을 늘렸다. 읽었던 책 중 감명 깊은 도서 몇 권을 가져와봤다.

원씽

one-thing

하나에 집중하라.. 이 책이 담고 있는 전부다. 현대 사회에서 신경 쓰고 복잡한 일들이 많을 때, 내가 지금 신경써야할 단 하나에 집중해서 처리해야한다.

업무 중에 복잡하게 쌓여 있는 브라우저 화면을 보면 내가 해야할 여러 태스크를 순서 없이 왔다갔다 처리 할 때가 많아 ADHD처럼 움직일 때가 많았는데, 이 책을 읽고 지금 하고 있는 단 하나의 일에 더 집중하면서 일할 수 있게 되었다.

구의 증명

hunger

사랑의 이야기가 주된 소설 내용이다. 사랑하는 사람을 식인하면서까지 추억하고 기억하며 사랑한 이야기가 담겨 있다.

사실 식인이 주된 주제는 아닌데 미디어에 식인 소재가 많이 나와 겉으로 보면 꺼려지는 면들이 있어 안타깝다. 어떻게보면 사랑을 극단적으로 묘사해서 그렇게 더 비춰진 것 같다.

대사 이 말이 인상 깊었다.

"행복하자고 같이 있자는 게 아니야 불행해도 괜찮으니까 같이 있자는 거지.""
그저 좋은 순간만이 아니라 모든 순간을 사랑하는 사람과 함께 있는 것이 사랑아닐까?

악마와함께 춤을

dancing-with-the-devil

사람들이 보편적으로 생각하는 부정적인 감정을 통제하지 말고 그대로 담아 살아가는 법에 대해 이야기한다.

여기서 얘기하는 포인트는 부정적인 감정 자체는 부정적인 행동이 아니기 때문에 부정적인 감정을 그대로 느끼고 놔두는 태도가 중요하다고 서술한다. 내가 직장상사로 부터 핀잔을 들을 때 느끼는 분노를 자연스럽게 느껴야지 그것을 통제하거나 완화하려는 태도는 문제라고 필자는 생각하는 것이다.

사실 책에서 이야기하는 내용은 대체로 색다른 해석이기는 했으나, 완벽히 공감이 가지는 않았다. 분노, 시기, 질투 등과 같은 감정을 느낀다해도 자연스럽게 승화시킬 수 있을까?? 자연스럽게 승화시키는 게 사람마다 차이가 있고 누군가에게 충분히 해소될 수 있을까?? 라는 의문이 들었다.

부정적인 감정을 다르게 보는 시각을 철학적으로 풀어낸 부분이 궁금하면 한 번쯤을 살펴볼만도 한 책이다.(너무 필자의 시선에서만 생각한다면서 읽는다면 비추.)

운동

올해는 테니스 외에 딱히 별다른 운동은 하지 않았다.

대신 실제 테니스 코트에 나가서 치는 횟수가 많아졌다. 테니스라는게 혼자는 할 수 없는 운동이라 같이 칠 수 있는 사람이 필요했는데, 다행히도 테니스 치는 지인이 좀 있었다.

tennis-1
tennis-2

운동은 역시 실전(?)이라고 실제 그라운드에 나와서 치니까 더 재밌고 실력이 느는게 느껴졌다. 앞으로 횟수를 더 늘려가며 쳐야겠다.

애니메이션

attack-on-titan

올해 극장가 개봉한 애니메이션은 핫했다. 오죽하면 귀주톱이라는 단어도 탄생했다.

그 중 인생최고의 애니메이션.. 아니 더 나아가 인생작이 뭐냐고 묻는다면 나는 진격의 거인이라고 답할 것이다.

사실 올해 극장가에 개봉하기전에 이미 내용을 다 알고 있었지만 한 번 더 정주행했다. 떡밥회수도 잘하지만 애니메이션 하나에 논의할 주제들이 상당히 많다.

일본여행을 가게된다면 진격의 거인의 본고장인 히타에 가보고 싶다는 생각을 요즈음 많이 한다.

제테크

investment

어느날 팀을 떠나는 직장동료분이 얘기하시기를, "개발 공부도 중요한데, 그것보다 제테크 공부하는 게 더 중요해요."란 말을 하신 뒤 떠나셨다.

맞는 말이다. 제테크란 비교적 어린 나이부터 일찍 시작하면 시작할수록 좋다고 생각한다. 복리의 마법을 무시할 수는 없는 노릇이다. 그래서 예전부터 깊게는 아니더라도 유튜브 정도에서 짧게나마 배워가곤 했다. 이제부터는 시장의 흐름이나 자본, 제테크 등 조금 더 깊게 공부를 해보려고 한다.

완전히 전문가 수준의 목표가 아니라 내 스스로가 이해하고 실천할 수 있는 수준의 목표를 세우고 이뤄나가보려고 한다.(목표는 재산의 기준 금리+2%p)


2026년에는

보통 사람들은 신년마다 새로운 목표를 세우거나 마주한다. 하지만 그런 목표들보다는 매년마다 다짐했던 목표를 잘 지키고자 한다. 곁에 있는 사람 잘 챙기기, 운동 꾸준히 하기, 독서하기, 제테크 공부, 퇴근 후 시간 날 때 공부하기 등등..

기존에 하던 것들부터 잘 지키고나서야 비로소 새로운 목표를 만들어 이뤄가고 싶다. 30살을 맞이한 기념으로 새로운 목표에 대해 얘기하자면 해외여행이다. 내가 아직 남들과 달리 해외여행을 가본 경험이 한번도 없는데, 이번에는 정말 갈 수 없는 환경을 만들고 싶다.

이 회고에 작성은 하지 못했지만, 하던 일들이 마무리되면 또 다른 회고를 작성할 예정이다. 2025년에는 안식년같은 한해를 보냈다면, 2026년에는 내가 원하는 바를 이룰 수 있게 노력하는 한 해가 되었으면 한다.

링크드인으로 이야기를 주고 받고 싶으시다면 언제든지 편하게 연락주세요. 🙇‍♂️