사이드프로젝트 slecs

로컬 DB 싱글턴화로 초기화 속도 개선하고 커밋 컨벤션 정리

목차

커밋 컨벤션 정리하다가 메시지가 꼬임

오늘 작업은 분량으로 보면 가벼운데 시간을 의외로 잡아먹었음. 스킬/에이전트 가이드 문서 두 개, 진입점 화면 클래스 라이프사이클 한 군데, 로컬 DB 추상 레이어를 한 커밋에 묶다가 prefix 표기를 잘못 적어서 다시 정리함.

무엇이 문제였나

처음엔 그냥 feat: chage git 이라고 적었음. 보다시피 오타가 났고, 더 큰 문제는 변경 성격이 섞여 있었다는 거임.

  • 문서 두 개 (스킬/에이전트 작성 가이드)
  • 진입점 화면의 초기화 순서 일부 수정
  • 로컬 DB 추상 레이어 싱글턴화

원래라면 이걸 최소 두세 개로 쪼개야 했는데, 시간이 늦어서 한 번에 묶음. 묶을 거면 메시지라도 정확히 적었어야 했는데 오타까지 남. push 전에 발견해서 amend 로 정리함.

메시지 컨벤션 표로 굳히기

이번 기회에 prefix 규칙을 표로 굳혀둠. 다음에 안 헷갈리려고.

타입 용도 예시
feat 새 기능 feat: 파트너 webhook 수신
fix 버그 수정 fix: 동기화 시 NPE
refactor 동작 동일, 구조 변경 refactor: 레포지토리 추출
docs 문서만 docs: 에이전트 가이드 추가
chore 잡일 chore: 의존성 업

DB 레이어 손본 부분

진입점에서 DB 빌더를 매번 새로 부르고 있었음. 화면 재진입마다 인스턴스가 새로 만들어져서 콜드 스타트가 길어지는 원인이었음. 싱글턴으로 정리함.

val db = synchronized(this) {
    instance ?: build().also { instance = it }
}

디버그 빌드 기준 초기화 구간만 보면 약 80ms → 20ms. 체감으로도 첫 화면이 덜 걸림.

배운 것

  • 커밋은 쪼갤 수 있으면 무조건 쪼갠다. 문서 + 코드 + 데이터 레이어가 한 커밋에 묶이면 롤백이 지옥.
  • prefix 오타는 amend 가능할 때 즉시 고친다. push 이후엔 history rewrite 비용이 큼.
  • 싱글턴은 게으르게, 동기화는 진입점 한 곳에서만.

문서 커밋과 코드 커밋을 같이 묶으면 리뷰어가 "이게 왜 같이 있지?"라고 물어보는 시점이 반드시 옴. 그때 답하기 곤란하면 애초에 분리했어야 한다는 신호임.

다음 작업은 마이그레이션 시나리오 테스트 보강. 끝.

댓글 0

첫 댓글 달아줘.