2025 회고 및 서버 업데이트
글을 작성하는 2025/12/31을 기준으로 이제 2029일간 커밋을 하고 있는데, 사실 이게 성장에 대단히 도움이 된다거나 하는 건 아니지만, 뭔가 이젠 놓을 수 없는 느낌이라 계속 하고 있네요.
한동안 매일 커밋하는 게 위기였는데, 출퇴근길에 SSH로 제 서버에 붙어 claude code로 이것저것 한 뒤로는 쉽게쉽게 커밋을 진행하는 느낌입니다.
커리어
이직
회사를 옮기며, 다시 프론트엔드 개발자가 되었습니다.
시간과 체력만 된다면, 그리고 회사가 허락한다면 기존에 하던 것처럼 인프라도 만지고 이것저것 다 하면서 개발까지 하고 싶은데, 그게 아무래도 쉽지는 않은듯 합니다.
이제 이직한지 반 년이 되었는데, 그래도 업무에 집중하기 좋은 회사같아 꽤 만족하며 다니고 있습니다.
전 커리어 내내 기술적으로 인사이트를 줄 수 있는 사람이고 싶은데, 그걸 어떻게 할 수 있을지가 항상 고민입니다.
프론트엔드 개발자의 한계일까 싶기도 한데, 그래도 열심히 나아가다 보면 그 과정 속에 답을 찾아낼 수 있으리라 생각합니다.
물론 이제는 위 고민보다 커리어가 10년 이상 지속될 수 있을지를 좀 더 고민해야할 시대가 된 것 같기도 하지만요.
AI, AI, AI
얘기가 나온 김에 잠깐 짚고 넘어가 보자면, 2025년은 AI와 보안 사고들의 해가 아니었나 싶습니다.
저 역시도 AI를 잘 활용하기 위해서 Spec Driven Development를 꽤 초창기부터 차용해서 이를 업무에 녹이기 위해 꽤 많은 시도들을 해본 한 해였습니다.
제가 어떤 기준으로 사고하는지, 제 프로젝트들은 어떻게 구성되어 있는지, 제가 사용하는 라이브러리들은 어떻게 사용해야 하는지 등을 잘 정리해두고, AI에게 간단한 작업들을 맡기니 업무 속도가 예전과는 비교하기 힘들 정도로 빨라지고, 다양한 생각을 할 수 있는 여유도 많이 생겼다는 느낌이 듭니다.
다만 예전만큼 다양한 사고를 깊이있게 할 시간이 줄어들었단 느낌도 꽤 많이 듭니다.
또 코드 리뷰가 예전에는 코드의 상방을 올리기 위한 작업이었다면, 이제는 하방을 지키기 위한 작업이 된 게 아닐까 하는 생각이 들 때도 가끔 있다보니 회의가 가끔 생길 때도 있긴 합니다.
아무튼 내년에는 이 혼란 속에서 중심을 잘 잡고 간단한 작업들은 최대한 자동화 해보는 게 목표입니다.
블로그 구조 전면 개편
Rust everywhere
이제 Next.js에 대한 의존성을 완전 제거하고, Rust로 Static Site Generator를 만들었습니다.
관련해서 linkedin 게시글
을 하나 작성했는데, 굉장히 바이럴이 잘 된 기억이 있네요.
Next.js에선 빌드만 2분 30초 가량이 걸리고, 의존성 모두를 빌드하고, Docker 이미지를 publish하는 등 모든 배포 과정을 합치면 10분 가량이 걸렸습니다.
이젠 빌드는 빠르면 1초 내, 느려도 3초면 끝나고, 모든 배포 과정이 20초를 넘기지 않습니다.
게다가 여전히 Single Page Application의 느낌을 유지하고 있습니다.
이러면 Wordpress를 마개조 하던 시절이랑 뭐가 다르냐 할 수 있겠지만, 이제 백엔드와 프론트엔드가 json으로 데이터를 주고 받지 않고, 서버에서 데이터베이스로 관리하는 상태는 서버에서 렌더링을 진행합니다.
validation 체크를 두 번 할 필요도 없고, 클라이언트에서 캐시를 관리할 일도 없습니다.
최근 웹 애플리케이션의 구조에 대한 고민을 많이 하고 있는데, 이런 형태의 간단한 애플리케이션에서는 htmx가 문제를 푼 방식이 굉장히 훌륭하다고 생각해서 모방해 봤습니다.
이건 여기에 모두 정리하자면 많이 길어질 것 같아 나중에 따로 글을 정리할 예정입니다.
Obsidian
이젠 모든 글을 Obsidian으로 작성할 수 있도록 구조를 변경했습니다.
매 줄바꿈마다 \를 삽입해야 하는 - 이건 사실 마크다운 표준을 지키기 위해 제가 고수 중인 거지만 - 등 사소한 사용성만 제외하면 이제 모든 기기에서 편집할 수 있습니다.
git으로 기기 간 동기화를 할 수 있도록 하고, webhook으로 이벤트를 발생시키며, Custom Attachment Location같은 플러그인들로 제가 설정해둔 경로대로 파일이 첨부되도록 작업했습니다.
’왜 글을 자주 쓰지 못할까’에 대한 고민을 해봤을 때, 글을 쓰기 불편해서가 원인이란 가설을 세우고, 유지보수할 코드가 가장 적어지는 선에서 cross platform으로 글을 쓸 수 있게 해봤습니다.
Notion도 고려해봤는데, block api가 첫인상이 몹시 좋지 않았고, 블로그 특성상 raw html을 삽입할 일이 많은 탓에 obsidian을 골라봤습니다.
지금까진 매번 Notion과 code editor에서 번갈아가며 작성하고 꽤 불편하게 이미지를 옮겨오고 있었던 탓에 이게 가장 큰 걸림돌이리라 생각했는데, 그 이후로 글을 작성하지 않은 걸 보면 아무래도 그 문제는 아니었나봅니다.
블로그에 대한 짧은 생각
갑자기 번외의 이야기인데, 요즘 당장 저조차도 개인 블로그의 글들을 예전처럼 열심히 읽지 않는다는 생각이 듭니다.
먼저 AI가 시장에 범람하면서 개인의 특성이 사라진 글이 인터넷에 넘쳐납니다, 이에 따라 자연스럽게 공식 문서 외의 글들의 신뢰도가 많이 떨어지기도 하고, 글을 읽을 가치도 크게 못 느낄 때가 많습니다.
또 대부분의 정보는 AI에게 질의하고 답변을 공식 문서 등으로 검증하는 게 대부분이라, 옛날처럼 인터넷을 한도 끝도 없이 뒤져가며 인터넷 구석에 저는 알아볼 수도 없는 외국어로 적힌 블로그에 3년 전에 적힌 글을 읽고 원인을 찾을 일이 줄어든 탓도 있지 않을까 싶습니다.
당장 개인 블로그들을 좋아해서 많이 찾아다니는 저조차도 이래서, 이런 글을 적는 행위가 아무에게도 수요가 없으리라 생각해 이 블로그를 어찌할까 고민도 깊이 해봤습니다.
저는 제가 디버깅하며 적어둔 내용을 나중에 꺼내 보기도 하고, 또 나중에 언젠가 제가 쓴 글들을 모아 보면 재미도 있지 않을까 하여 AI의 아무런 도움 없이 제 문장만으로 가득한 블로그를 계속 운영해 볼까 합니다.
홈랩 구성 업데이트
Off week을 맞아 홈랩 구성을 꽤 많이 변경했습니다.
DIY 랙 구성 및 하드웨어 교체
이것저것 알아보다 보니, 이케아 LACK 보조테이블을 쓰는 경우가 많더라고요.
다리 내부 길이가 서버 랙 표준 길이와 똑같아서 서버 랙으로 개조해서 쓰는 케이스가 많아 저도 3개 바로 사봤습니다.
나무 형태로 되어있어서 이것저것 붙이기도 좋더라고요. 전 랙마운트를 안 쓰니 케이스 들어갈 길이가 안 나와서 테이블 두 개를 이어 붙이고(하단에 있는 테이블은 상판에 구멍을 뚫어 다리를 체결했습니다), 이케아 스코디스 페그보드를 옆면에 붙이고, 하단에는 고정 가능한 바퀴를 네 개 달아줬습니다.
이케아 LACK 보조테이블은 최고입니다…
기존에는 제 메인 서버 케이스를 잘못 산 탓에, 세워두고 쓰질 못했는데 이번 기회에 메인 서버 장비도 꽤 많이 교체했습니다.
메인 데스크탑을 Arch Linux로 바꾼 뒤로 코딩을 여기서 할 수 있게 되면서, 개발 서버를 운영 서버로 바꾸고 운영 서버는 아예 꺼뒀는데, 이번 기회에 다시 서버 컴퓨터 두 개를 가동하기 시작했습니다.
그러기 위해 먼저 노후화된 파워도 교체해주고, 케이스도 교체했습니다.
막상 케이스를 교체하고 보니 메인 서버랍시고 쓰는데 펜티엄을 쓰는 게 아쉬워 이것도 제온으로 교체했습니다.
아무런 전략 없이 닥치는대로 접근한 탓에 컴퓨터 재조립만 두 번 넘게 한 사람이 되어버렸네요…
아래에 본체 두 개는 각각 개발용 / 운영용 서버로 사용하고, 제일 상단에 키보드, 마우스를 두고, 그 뒤에 제가 실제 개발에 사용하는 데스크탑을 배치해뒀습니다.
컴퓨터 세 개가 뿜어두는 열기에 정신을 못 차리겠어서 아래층 뒤편에는 선풍기도 하나 달아줬습니다.
알리 익스프레스에서 USB로 4핀 팬에 전원을 공급해주는 것도 샀는데, 이거 어떻게 잘 활용해보면 꽤 공기 순환을 효율적으로 할 수 있지 않을까 싶습니다.
간만에 너무 신나게 작업한 탓에 새벽까지 계속 작업하는 한 주였습니다.
Side effect로 두통이 좀 생기긴 했지만, 그럴 가치가 있는 작업들이었다고 생각합니다.
OS 교체
기존에는 데스크탑에는 Arch Linux, 개발 서버와 운영 서버는 Ubuntu Server를 사용했습니다.
상술한 것처럼 데스크탑에서 Windows를 버리고 개발을 데스크탑에서 할 수 있게 되기도 했고, 마침 메인보드를 교체하면서 NVME SSD도 추가하는 김에 OS들을 싹 교체해봤습니다.
- 메인 데스크탑: Arch Linux
- 메인 서버용 데스크탑: Debian
- 개발 서버용 데스크탑: Proxmox
이렇게 세팅해두고, Proxmox에서는 Talos를 재미로 구축해본다던가 하는 작업을 해볼 예정입니다.
사실 랙 구성한 김에 미니PC를 여러대 사서 HA도 구성을 해볼까 하는 고민을 했는데, 지출이 과한 것 같아 VM으로 먼저 실습을 해볼까 합니다.
이제 정말 다양한 Tinkering을 할 수 있는 진짜 홈랩이 된 것 같다는 느낌이 드네요.
소소한 장애들 모음
본체 재조립 중에 생긴 일
전원을 넣자마자 부팅이 안됩니다.
등에 식은땀이 살짝 흐르기 시작했으나, CPU 파워를 연결하지 않았단 사실을 깨닫고 파워를 연결하고 다시 부팅을 시도했습니다.
여전히 전원 버튼을 눌러도 아무 반응이 없습니다.
긴장한 탓에 GPU 파워를 CPU 파워에다 꽂아버린 멍청한 행동을 했단 걸 깨달았습니다.
근데 여전히 전원 버튼을 눌러도 컴퓨터가 아무런 반응이 없습니다!!
정황상 프론트 패널 문제가 아닐까 해서, 선을 전부 뽑고 드라이버로 쇼트를 줬는데 이래도 부팅이 안됩니다.
예전엔 그냥 프론트 패널에 파워 / 리셋은 양음극 구분 없이 쇼트만 주면 됐던 거로 기억하는데, 극을 지켜야 한다고 claude가 말해줘서 극 똑바로 꽂고 부팅을 시도해봤습니다.
이러니 드디어 부팅이 진행됐습니다.
오랜만에 조립하다보니 간단한 일에도 진땀 뺄 일이 생기네요.
이 다음에 네트워크 정리하면서 생긴 일
전 리소스를 프로비저닝 할 때나, IP를 할당할 때 그냥 그것만 보고 바로 어디서 발생한 문제인지 알 수 있도록 하는 걸 꽤 좋아합니다.
근데 홈랩에서는 그냥 항상 최소한의 리소스로 최소한의 다운타임으로 작업하기 위해 주먹구구로 작업을 많이 했는데, 이번 기회에 IP들도 정리를 해볼까 했습니다.
근데 또 내부 IP로 접속하니 분명히 부팅은 됐을 시간인데 SSH 접근이 refused됩니다.
IP를 거꾸로 매핑한 줄 알고 여러번 바꿨는데, 무슨 짓을 해도 접근이 안됩니다.
이러기 싫었는데 결국 디스플레이를 연결해보니, 디스크 마운트가 계속 실패 중이었습니다.
이전에 한 컴퓨터에 합쳐두고 썼으니 당연한 일이었습니다. 마운트 해제해주고 재부팅을 해줬습니다.
아니 근데 이래도 여전히 SSH는 발칙하게 제 접근을 거절합니다.
침착하게 다시 보니 전 SSH 포트도 개발 / 운영 서버에 따로 둔 탓에, 잘못된 IP 혹은 잘못된 포트로 계속 접근을 시도하고 있단 걸 깨달았습니다.
침착하게 다시 IP 설정 제대로 해주고 접근하니 행복하게 마무리 되었습니다.
OS 교체 중에 생긴 일
메인 서버를 교체하면서 OS도 바꾸다 보니, 이참에 리소스들도 싹 정리할 기회가 아닐까 했습니다.
여담으로, 이제 개발 서버에 프로비저닝하는 것들을 전부 오픈 소스로 관리하려고 marshallku/manifest 를 만들고 하나씩 마이그레이션을 진행하는 중입니다.
이를 위해 Arch Linux 설치를 연습하던 랩탑에 nginx를 설치하고 블로그를 여기서 호스팅할 야심찬 계획을 세웠습니다.
설정 파일과 webroot에 있는 데이터 등을 rsync로 옮겨준 뒤에 알맞은 디렉터리에 파일들을 두고 권한을 설정해줬습니다.
sudo nginx -t 실행하자마자 각종 오류 문구가 떠서 확인해 보니, www-data user는 우분투에만 있는 것이었고, 기본 설정 파일들 모양새도 서로 많이 다르더라고요. sites-enabled 디렉터리도 읽지 않아 수동으로 작업을 꽤 많이 해줘야 했습니다.
이 과정에 web root의 권한을 잘못 주거나 하는 등의 이유로 500 에러가 10초가량씩 세 번 발생했었습니다.
권한 문제로 뻗으니 /var/log/nginx/error.log에도 아무런 로그가 안 남고, journalctl로 로그를 확인했어야 했는데, 이것도 Arch와 Ubuntu의 차이인지는 명확하게 모르겠네요..
불안한 마음에 access log 파일에 tail 걸어두고 작업을 시작했습니다.
아무튼 안정적으로 블로그에 접근되는 걸 확인하고 메인 서버에 장비 조립, 새 리소스들 프로비저닝을 하고 있는데 갑자기 L7 모니터링에서 문제가 잡히기 시작합니다.
당최 뭐가 문제인지 이젠 Arch Linux에선 access log도 남지 않습니다.
이젠 뭐 어찌할 방도도 없고, 그냥 이 서버 빨리 다시 켜는 게 우선이다 싶어서 작업을 이어가는데, 15분쯤 뒤에 L7 모니터링이 다시 성공하기 시작합니다.
노후화된 랩탑 탓인지, OS 탓인지 모르겠지만 험난한 작업이었습니다.
맺으며
여담으로, 저도 이제 서른이 되어버렸습니다.
이런 날이 올 거라곤 상상도 못했는데, 아직 서른살이 된 지 하루밖에 안 지난 오늘은 받아들이기 힘드네요.
잡다하게 프로젝트들도 많이 하고, 홈랩도 더욱 마음에 들게 세팅하고, 둥지도 새로 트는 다사다난한 한 해였습니다.
내년에는 올해 내리지 못했던 질문들에 답을 내릴 수 있는 사람이 되고, 올해보다 더욱 기술적으로도 발전한 사람이 되었으면 합니다.
한 달에 한 번씩은 포스팅하는 것을 목표로 삼고, 성장하는 과정을 종종 블로그에 기록해 보겠습니다.
2026년도 다들 화이팅입니다!
댓글을 불러오는 중...