기술·운영 저널
작은 팀이 제품과 인프라를 직접 만들고 운영하며 배운 기록입니다. 잘된 이야기보다 어떤 문제가 있었고 왜 생겼는지를 더 자세히 씁니다.
Kubernetes 좀비 프로세스 알람이 오탐이었던 이유
CI 파드 종료와 배포가 겹치면서 좀비 프로세스 알람이 울렸다. 단일 시점의 숫자만 보고 알람을 보내던 감시를 연속 2회 확인 방식으로 바꾼 과정이다.
Kubernetes에서 Let's Encrypt 와일드카드 인증서를 쓰고 자동 갱신한 방법
cert-manager와 DNS-01을 사용해 와일드카드 TLS 인증서를 발급하고, 여러 네임스페이스의 Ingress에서 사용한 구성과 자동 갱신을 확인하는 방법을 정리한다.
외부 이미지 저장소 문제를 Nexus 미러로 정리한 MinIO 교체기
MinIO 이미지 pull 실패를 외부 저장소 주소 변경으로만 넘기지 않고, Nexus에 이미지를 복제한 뒤 Deployment·CronJob·Dockerfile을 한 번에 바꾼 과정이다. 이미지 인증을 빼먹어 ImagePullBackOff가 난 과정도 함께 기록한다.
Spring 트랜잭션과 Kafka 이벤트를 안전하게 연결하는 방법
영차에서 DB 변경과 Kafka 이벤트 발행이 어긋날 수 있는 지점을 확인하고, Spring의 트랜잭션 경계와 Outbox Relay로 발행 유실을 줄인 과정을 정리했다. 중복 이벤트를 멱등하게 처리하는 기준도 함께 다룬다.
영차 BE에서 게이트웨이와 모듈 사이의 데이터를 동기화하는 방법
게이트웨이를 데이터 조립기로 만들지 않고, 데이터 소유 서비스와 이벤트 기반 읽기 복제본으로 모듈을 연결하는 구조를 정리했다. 중복 이벤트와 퇴사 데이터 보존, 발행 유실을 줄이는 방법도 함께 다룬다.
Keycloak은 인증만, 사업장 권한은 영차가 판단한다
영차에서 Keycloak을 사용자 인증과 토큰 발급에 집중시키고, 사업장별 권한은 애플리케이션이 다시 확인하도록 나눈 이유를 정리했다. 멀티테넌트 서비스에서 JWT의 역할과 한계, 모바일 로그인 흐름, 토큰 갱신 기준도 함께 다룬다.
Axios에서 access token과 refresh token을 함께 다루는 방법
Axios instance에 인증을 붙일 때 토큰을 어디에 보관하고, 여러 요청이 동시에 만료되면 어떻게 한 번만 갱신할지 정리했다. 웹과 React Native에서 달라지는 저장소 선택과 재시도 중단 조건도 함께 다룬다.
수기 Axios 호출을 없앤 방법: Spring Boot API에서 SDK 자동 생성하기
서버와 앱이 URL·메서드·타입을 따로 관리하면 API 변경은 런타임 오류가 된다. Springdoc OpenAPI와 OpenAPI Generator로 Java·TypeScript SDK를 만들고, 수기 Axios 호출을 걷어낸 과정을 적는다.
화면을 새로 만들다 잃어버린 것들
React Native 화면을 디자인 정본에 맞춰 다시 만들면서, UI보다 먼저 사라질 수 있는 것은 상태 처리와 업무 규칙이라는 걸 알게 됐다. 화면을 바꾸기 전에 무엇을 적어 두고, 어떤 테스트를 남겨야 하는지 실제 재생성 과정으로 정리했다.
같은 시간 버그가 세 번 났다, 그래서 규칙을 코드로 옮겼다
서버가 준 UTC 시각을 화면에 그대로 찍어 9시간이 어긋났다. 자정 근처에서는 날짜가 하루 틀렸다. 날짜용으로 만든 문자열 자르기 함수에 시각이 들어오면서 생긴 일이다. 리뷰와 문서로 두 번 막으려다 실패하고, 세 번째에 검사 스크립트를 붙였다.
서버 한 대에서 쿠버네티스를 어떻게 배치했나
서버 한 대를 넷으로 나누자 볼륨, 진입점, 부팅 순서, 배포 단위 문제가 생겼다. 저장 방식은 결국 세 번 옮겼다. 노드·네트워크·저장소·배포 단위를 어떻게 구성했고 어디서 막혔는지 적는다.
혼자 지킬 사람이 없어 쿠버네티스를 골랐다
1인 회사라 웹서버 뒤에 톰캣을 두는 흔한 구성으로는 죽었는지와 부하를 사람이 지켜봐야 한다. 하지만 지켜볼 사람이 없어 쿠버네티스를 골랐다. 서버를 통째로 갈아엎을 때 걷어낼 기회가 있었지만 유지했다. 자가 치유는 쓰고 있고 자동 확장은 아직 한 번도 쓰지 않았다.
서버가 한 대인데도 Proxmox를 올린 이유
지원이 끝난 OS에서 쿠버네티스를 돌리고 있었다. 서버 한 대에 Proxmox를 올리고 가상 머신 4대로 나눴다. 이중화는 할 수 없지만, 잘못돼도 되돌릴 수 있게 됐다. 그 과정에서 막힌 다섯 가지를 정리했다.