빌드

프로세스가 죽어도 남는다 — 가장 안 똑똑한 방법으로

작성: makemind · 2026년 3월 6일

4편까지 대기 인원은 이렇게 살았다.

var waiting = 3;

프로세스가 죽으면 3으로 돌아간다. 데스크 화면을 뽑았다 꽂으면 줄이 없던 일이 된다.

적는다

const _statePath = 'desk-state.json';

int _load() {
  final f = File(_statePath);
  if (!f.existsSync()) return 3;
  final m = jsonDecode(f.readAsStringSync()) as Map<String, dynamic>;
  return (m['waiting'] as num).toInt();
}

void _save(int waiting) =>
    File(_statePath).writeAsStringSync(jsonEncode({'waiting': waiting}));

그리고 값이 바뀔 때 부른다.

waiting -= n;
_save(waiting);

왜 전체를 다시 쓰나

값 하나 바뀌는데 파일 전체를 다시 쓴다. 비효율적이다. 그런데 이 방식에는 성질이 하나 있다.

반쯤 쓰인 기록이 생기지 않는다. 쓰기가 일어났거나 안 일어났거나 둘 중 하나다. 중간에 죽으면 옛 파일이 그대로 남는다.

부분 갱신은 그렇지 않다. 레코드 하나를 제자리에서 고치다 죽으면 어느 쪽도 아닌 파일이 남고, 다음 부팅에서 파싱이 깨진다. 그때부터는 복구가 일이 된다.

기록이 수만 건이 되면 이 방식은 못 쓴다. 그때가 DB 를 쓸 자리다. 다만 그전까지는 이게 제일 안전하다.

어느 층에 두는가

상태가 있을 수 있는 자리가 셋이다.

여러 화면이 같은 값을 보나프로세스가 죽으면
화면 안아니다 — 화면마다 다른 값사라진다
서버 프로세스그렇다사라진다
서버 밖(파일·DB)그렇다남는다

4편까지는 두 번째였다. 이번 편이 세 번째로 옮긴다.

정하지 않으면 두 번째가 된다. 그리고 그게 문제가 되는 날은 대개 밤이다.

이 콘텐츠는 개발자 이상이 필요합니다

로그인 후 플랜을 업그레이드하면 계속 읽을 수 있습니다.

플랜 보기
Twitter