서버가 조용하면
제 일은 잘된 겁니다

백엔드와 앱을 배우는 신입입니다. 화면보다 그 뒤에서 도는 것에 관심이 많아, 만든 것마다 장애를 일부러 내 보고 복구시켜 봤습니다.

만든 것 보기

다루는 것

학원에서 배운 순서가 아니라, 실제로 손에 익은 순서로 적었습니다.

Node.js · ExpressPostgreSQLDocker ComposeREST API 설계Kotlin (Android)Redis 캐시GitHub Actions

만든 것들

Server Room Fashion 동네 중고 거래 API Node.js · Express · PostgreSQL

막힌 곳 — 검색이 글 3만 건에서 4초가 걸렸습니다. LIKE 검색을 인덱스 있는 방식으로 바꿔 4s → 90ms.
일부러 낸 장애 — DB를 내려 보고, 커넥션 풀이 고갈될 때 어떻게 죽는지 확인했습니다.
다음엔 — 처음부터 페이지네이션을 넣겠습니다. 나중에 넣으니 API 모양이 다 바뀌었습니다.

↗ 링크 열기
Mobile Phone Screen 출석 체크 안드로이드 앱 Kotlin · Room · Retrofit

막힌 곳 — 화면을 돌리면 입력이 사라졌습니다. ViewModel을 그때 처음 제대로 이해했습니다.
일부러 낸 장애 — 비행기 모드에서 열어 보고, 로컬 DB만으로 동작하도록 고쳤습니다.
다음엔 — 네트워크 계층을 처음부터 분리하겠습니다.

↗ 링크 열기
Unloading a shipping container with household contents -c 배포 자동화 GitHub Actions · Docker

막힌 곳 — 로컬에선 되는데 CI에서만 실패했습니다. 원인은 Node 버전이었고, 그 뒤로 버전을 파일에 박아 둡니다.
일부러 낸 장애 — 배포 중간에 끊어 보고, 롤백이 되는지 확인했습니다.
다음엔 — 테스트를 통과해야만 배포되게 막겠습니다.

↗ 링크 열기
Rows of Mail Boxes 알림 발송 큐 Node.js · Redis

막힌 곳 — 같은 알림이 두 번 갔습니다. 처리 완료 표시를 큐에서 꺼낸 직후가 아니라 성공 후로 옮겨 해결했습니다.
일부러 낸 장애 — 워커를 강제 종료해 보고, 재시작 시 유실이 없는지 봤습니다.
다음엔 — 재시도 횟수 상한과 실패 보관함을 두겠습니다.

↗ 링크 열기
Box Documents Papers (ryoshi bako) API 문서 자동화 OpenAPI · Swagger UI

막힌 곳 — 문서와 실제 응답이 어긋났습니다. 스키마를 코드에서 뽑도록 바꿔 어긋날 수 없게 했습니다.
배운 것 — 문서는 쓰는 게 아니라 나오게 만드는 것이었습니다.
다음엔 — 응답 예시를 테스트에서 뽑아 넣겠습니다.

↗ 링크 열기

새벽 두 시에 배운 것

장애는 대부분 새벽에 납니다. 그래서 일부러 새벽 시간에 서버를 내려 보고 복구해 봤습니다.

알림이 울리고 로그를 열었을 때 무엇을 먼저 봐야 하는지, 어떤 로그를 미리 남겨 뒀어야 했는지를 그때 알았습니다.

지금은 무엇을 만들든 로그부터 설계합니다. 잘 만든 기능보다 잘 남긴 기록이 저를 더 많이 구했습니다.

Hong Kong, 2015 개발 일지 막힌 날일수록 길게 적습니다

최근에 적은 것들

매주 하나씩, 그 주에 막혔던 걸 정리합니다. 잘 풀린 날보다 안 풀린 날 글이 깁니다.

  1. 7월 4주커넥션 풀을 20으로 두고 동시 요청 200을 때려 봤습니다. 대기가 쌓이다 타임아웃 나는 걸 처음 눈으로 봤습니다.
  2. 7월 3주인덱스를 걸었는데 오히려 느려진 쿼리가 있었습니다. EXPLAIN을 읽는 법을 이때 배웠습니다.
  3. 7월 2주도커 이미지가 1.2GB였습니다. 멀티스테이지 빌드로 180MB까지 줄였습니다.
  4. 7월 1주로그에 사용자 이메일을 그대로 찍고 있었습니다. 전부 마스킹 처리했습니다.
  5. 6월 4주재시도를 무한으로 걸어 두면 장애가 커진다는 걸 알았습니다. 상한과 백오프를 넣었습니다.
  6. 6월 3주타임존 때문에 하루가 밀렸습니다. 이후로 서버는 전부 UTC로 두고 표시할 때만 바꿉니다.
틀린 부분이 보이면 알려 주세요 혼자 배우다 보니 잘못 알고 있는 것이 있을 겁니다. 지적해 주시면 그 주 일지에 반영합니다. 메일 보내기
NODE.JS · POSTGRESQL · DOCKER · REDIS · KOTLIN · GITHUB ACTIONS/NODE.JS · POSTGRESQL · DOCKER · REDIS · KOTLIN · GITHUB ACTIONS/NODE.JS · POSTGRESQL · DOCKER · REDIS · KOTLIN · GITHUB ACTIONS/NODE.JS · POSTGRESQL · DOCKER · REDIS · KOTLIN · GITHUB ACTIONS/

연락 주세요

백엔드 또는 안드로이드 신입 자리를 찾고 있습니다. 인턴·계약직도 좋습니다.
제 코드에서 이상한 부분이 보이면 그것만 알려 주셔도 정말 감사합니다.

jihoon.bae@example.com 부산 · 수도권 이주 가능