# 퇴근 전 기동 종료 및 정리 체크리스트

**작성일**: 2026-07-06
**최종 업데이트**: 2026-07-08

## 목적

전날 퇴근하면서 VS Code, 터미널, Android target, Docker 컨테이너 등 개발에 사용한 런타임을
안정적으로 종료하여 다음날 아침에 원활히 재기동할 수 있도록 준비한다.

**핵심 정책**: 소스코드 변경을 요하지 않는 종료/정리 작업(컨테이너 중지, 권한 수정, 로그 수집, 임시파일 정리 등)은 사용자 승인 없이 자동으로 실행한다.

---

## 적용 대상

- 작업 디렉터리: `/home/ubuntu/workspace/tdc114plus`
- Baron SSO API worktree: `/home/ubuntu/workspace/baron-sso-tdc114plus-api`
- Android target (실기기 우선, emulator fallback) + WSL/Docker 환경
- 로컬 Docker 엔진

---

## 간단 체크리스트 (퇴근 5분 요약)

1. 모든 작업 저장 및 커밋(필요시).
2. 통합 테스트/빌드가 실행 중이면 중지.
3. Android target 정리 및 필요 시 ADB 연결 해제.
4. Docker 앱/컨테이너 정상 종료(아래 상세 절차).
5. 로그/임시파일 수집 및 정리.
6. VS Code 종료.

---

## 상세 종료 절차 (권장 순서)

1) 열린 작업 저장

- 변경 중인 파일을 저장하고 로컬 커밋을 권장. 소스 변경은 수동 승인 항목이므로 자동 처리하지 않는다.

2) 실행 중인 테스트/빌드 종료

```bash
# 통합/로컬 테스트나 빌드 프로세스가 있으면 종료
# (예: integration_tests.sh 백그라운드 프로세스 종료)
pkill -f /home/ubuntu/workspace/tdc114plus/scripts/integration_tests.sh || true
pkill -f /home/ubuntu/workspace/tdc114plus/scripts/flutter-docker.sh || true
```

3) Android target 정리

- 실기기 우선 운영이면 USB 연결만 정리하고, emulator fallback을 썼다면 Windows에서 에뮬레이터를 끈다.
- 당일 `TDC114_ADB_CONNECT_ADDRESS`를 알고 있을 때만 WSL에서 연결을 끊는다.

```bash
# WSL에서 ADB 연결 해제: 당일 실제 주소로만 실행
TDC114_ADB_CONNECT_ADDRESS=172.21.128.1:<EMULATOR_PORT> \
  adb disconnect 172.21.128.1:<EMULATOR_PORT> 2>/dev/null || true
```

- 주소를 모르면 ADB disconnect는 생략한다. 과거 포트(`5555`, `5559` 등)를 임의로 disconnect하지 않는다.
- 필요시 포트포워드/portproxy 정리(Windows 측에서 수행 필요)

4) 로그 수집

- compose 로그는 `down` 전에 수집한다. 종료 후에는 컨테이너 로그가 사라질 수 있다.

```bash
# 로그 저장(날짜별)
mkdir -p /home/ubuntu/workspace/tdc114plus/logs/$(date +%F)
cd /home/ubuntu/workspace/baron-sso-tdc114plus-api
docker compose -f docker-compose.yaml -f compose.infra.yaml -f compose.ory.yaml logs --no-color > /home/ubuntu/workspace/tdc114plus/logs/$(date +%F)/baron-compose.log 2>&1 || true
```

5) Docker 컨테이너 및 스택 안전하게 중지

- Baron SSO 및 app 관련 스택을 정상적으로 내린다 (데이터베이스 유지 여부는 상황에 따름).

```bash
# 권장: 모든 관련 compose 파일을 포함해 정상 중지 (데이터 유지)
cd /home/ubuntu/workspace/baron-sso-tdc114plus-api
docker compose -f docker-compose.yaml -f compose.infra.yaml -f compose.ory.yaml down

# tdc114plus 앱 스택이 별도라면 종료
cd /home/ubuntu/workspace/tdc114plus
# (예: 앱 관련 compose가 있다면) docker compose down
```

- 모든 관련 컨테이너 완전 제거(옵션, 재기동 시 네임 충돌 방지)

```bash
# 선택적(정리 필요 시 실행)
docker ps -a --format '{{.Names}}' | grep -iE "baron|ory|tdc114" | xargs -r docker rm -f || true
```

6) 임시파일 정리

```bash
# 임시 파일 정리 (docker cache 등)
# (유지해야 하는 캐시는 삭제하지 않도록 주의)
```

7) 권한/생성된 파일 기본 정리 (자동)

```bash
# config 디렉터리 권한이 root로 생긴 경우 사용자가 쓸 수 있게 복구
cd /home/ubuntu/workspace/baron-sso-tdc114plus-api
chmod -R u+w config/.generated/ 2>/dev/null || true
chown -R $(id -u):$(id -g) config/.generated/ 2>/dev/null || true
```

8) VS Code 및 터미널 종료

- VS Code: 모든 변경 저장 후 종료.
- 터미널 세션: 열린 터미널을 종료.

---

## 자동화 규칙 요약

- 자동 실행(승인 불필요): 대상 helper 프로세스 종료, 로그 수집, 컨테이너 중지, 임시파일 정리, 권한 복구, ADB 연결 해제
- 수동 승인 필요: 소스코드 커밋/푸시, 설정 파일 수정, 환경 변수 변경, DB 마이그레이션

---

## 스크립트 사용법: `scripts/shutdown.sh`

이 문서의 절차는 자동화 스크립트 `scripts/shutdown.sh`로 실행할 수 있습니다. 스크립트는 기본적으로 **안전 모드(dry-run)**로 동작하며, 실제 종료 작업과 선택적 파괴적 정리(컨테이너 강제 제거 등)는 `--auto` 옵션을 사용해야 수행됩니다.

간단한 사용 예시:

```bash
# 문법 검사
bash -n scripts/shutdown.sh

# Dry-run (권장): 실제로 파괴적 명령을 실행하지 않고 어떤 작업을 수행할지 확인합니다.
./scripts/shutdown.sh --dry-run

# 실제 실행 (주의): --auto 플래그는 컨테이너 강제 제거 같은 파괴적 정리를 허용합니다.
./scripts/shutdown.sh --auto
```

스크립트는 실행 로그를 `/home/ubuntu/workspace/tdc114plus/logs/<YYYY-MM-DD>/shutdown.log`에 기록합니다. 자동화된 종료를 CI나 cron에 등록할 경우 `--auto`를 사용하되, 로그 보관 정책과 백업을 확인하십시오.


## 체크아웃/확인 항목 (퇴근 직전)

- [ ] 작업 내용 저장/커밋(또는 스태시)
- [ ] 대상 helper 프로세스 종료 확인
- [ ] Android target 정리 및 필요 시 ADB 연결 해제
- [ ] `docker compose down` 실행 완료
- [ ] 주요 로그가 `/home/ubuntu/workspace/tdc114plus/logs/$(date +%F)`에 보관되었는지 확인
- [ ] `config/.generated` 쓰기 권한이 정상인지 확인
- [ ] VS Code 종료

---

## 복구 지침 요약 (다음날 재기동 관련)

- 다음날 아침에는 `docs/checklist_morning_startup_runtime_2026-07-03.md`를 따라 재기동한다.
- 자동으로 중지된 항목(컨테이너 등)은 사용자의 승인 없이 재기동 스크립트가 처리한다.

---

## 변경 이력

- v1.0 (2026-07-06): 초기 작성
