소개
안녕하세요, 백엔드 개발자 이준석입니다.
보험사·카드사 상담 시스템에서 시작해, 매장 결제(POS)를 거쳐, 지금은 학교와 학부모가 함께 쓰는 서비스의 서버를 만듭니다. 셋 다 틀리면 바로 티가 나는 쪽이었어요. 통화가 안 붙거나, 결제가 막히거나, 알림이 안 가거나.
지금 있는 곳은 월 사용자가 90만 명쯤 되고, 서버는 NestJS와 TypeScript로 되어 있습니다.
요즘 맡은 일
- 안 보이던 걸 보이게. 학교 게시판 수백 곳을 긁어오는 크롤링 파이프라인이 있는데, 왜 깨지는지 알 방법이 로그 검색뿐이었습니다. 실패를 모아 학교별·원인별로 보여주는 진단 화면을 만들었어요. 그 덕에 “코드는 멀쩡한데 상대 쪽 방화벽이 우리 서버 IP를 막았다”는 걸 찾아냈습니다.
- 하나 터져도 전부 죽지 않게. 한 학교에서 난 오류가 그 회차 전체를 무효로 만들던 구조를, 실패한 것만 따로 세고 성공한 건 지키도록 고쳤습니다.
- 세대가 다른 서버 두 벌. 구버전과 신버전을 동시에 굴리면서 기능을 옮기고 있습니다. 어느 쪽을 고쳐야 할지 판단하는 게 절반입니다.
- 여러 저장소에 걸친 기능. 기능 하나가 서버 두 곳과 웹 한 곳에 나뉘어 있을 때, 한 릴리스로 묶지 않으면 중간이 뚫립니다. 그 경계를 정하는 일도 합니다.
- 잊으면 멈추는 것 막기. 인증서는 1년에 한 번 갱신인데 놓치면 서비스 전체가 접속 불가가 됩니다. 사람 기억에 맡기지 않으려고 만료일을 매일 확인해서 미리 알려주는 장치를 붙였습니다.
직접 만든 것
제 일을 대신할 것들을 만듭니다. Slack에서 부르면 PR을 리뷰하고, 하루를 회고해주고, 코드를 짜는 에이전트들이에요. 조직도까지 있습니다. 기획하는 쪽, 개발하는 쪽, 리뷰하는 쪽이 나뉘어 있고 전부 제가 만든 프로그램입니다.
처음엔 “귀찮은 걸 대신 시키자”로 시작했어요. 만들다 보니 서버 만들 때와 똑같은 문제가 나오더라고요. 승인 없이 외부에 뭘 보내면 안 되는데 어떻게 막지, 실패했는데 조용히 넘어가면 어떻게 알아채지, 같은 작업이 두 번 돌면 어떻게 되지. 결국 백엔드 문제였습니다.
어떻게 일하나
급한 마음에 증상만 막아두면 같은 함수를 부르는 다른 곳이 깨진 채로 남거든요. 그걸 몇 번 겪고 나서는 원인을 찾을 때까지 파는 편이 결국 빠르다는 걸 알게 됐습니다.
자주 마주치는 건 데이터 정합성입니다. 목록의 개수와 실제 데이터가 어긋나는 문제요. 조건 하나 추가했을 뿐인데 세 군데에서 다르게 세고 있더라는 이야기가 심심찮게 나옵니다.
여기엔 뭘 적나
만들다 부딪힌 문제와 그걸 어떻게 풀었는지를 적습니다. 틀렸다가 알아낸 것도 그대로 남깁니다.
회사나 서비스 이름은 쓰지 않습니다. 문제와 해결만 남깁니다.
지난 글
2018년부터 2022년까지 쓴 글 32편이 지난 글에 있습니다. 강의 필기, 알고리즘 풀이, 스프링 입문 노트 같은 것들입니다. 그때 뭘 몰랐는지가 남아 있는 편이 좋아서 지우지 않았습니다.
연락
- GitHub: JSL107
- 메일: juneseok81@gmail.com