# 082 마이그레이션 — 첫 로그인 비밀번호 강제 변경 컬럼

작성일: 2026-04-24
작성자: gbpark
관련: 회사 프로비저닝 `FORCE_PW_CHANGE` 토글 실제 동작 구현

## 목적

Step 3 마법사의 "첫 로그인 시 비밀번호 변경 강제" 토글이 실제로 동작하도록,
`USER_INFO` 테이블에 플래그 컬럼을 추가한다.

- 프로비저닝 시 관리자 계정 생성 시점에 플래그 true 로 INSERT
- 로그인 시 플래그 true 면 프론트가 `/change-password` 로 강제 이동
- 비밀번호 변경 성공 시 플래그 false 로 클리어

## 추가 컬럼

| 컬럼 | 타입 | 기본값 | 용도 |
|---|---|---|---|
| `FORCE_PASSWORD_CHANGE` | BOOLEAN | `FALSE` | true 면 로그인 성공 직후 비밀번호 변경 강제. 변경 완료 시 false 로 갱신 |

> `PASSWORD_CHANGED_AT` 는 일단 추가하지 않음 — 필요해지면 후속 마이그레이션.

## SQL

```sql
-- 082: 첫 로그인 비밀번호 강제 변경 플래그
ALTER TABLE USER_INFO
  ADD COLUMN IF NOT EXISTS FORCE_PASSWORD_CHANGE BOOLEAN DEFAULT FALSE;
```

## 실행

### 1) 메타 DB (= 프로비저닝 스키마 원본)

신규 회사 DB 는 `SchemaCopier` 가 메타 DB 를 `pg_dump --schema-only` 로 복제하므로,
**메타 DB 에만 컬럼 추가하면 이후 신규 회사는 자동 반영**된다.

```bash
psql -h 183.99.177.40 -U postgres -d invyone <<'SQL'
ALTER TABLE USER_INFO
  ADD COLUMN IF NOT EXISTS FORCE_PASSWORD_CHANGE BOOLEAN DEFAULT FALSE;
SQL
```

### 2) 기존 회사 DB 들

이미 프로비저닝된 회사 DB 에도 동일 ALTER 필요. DB 이름 목록은 메타 DB 의
`COMPANY_MNG.DB_NAME` 에서 확인:

```bash
psql -h 183.99.177.40 -U postgres -d invyone -c \
  "SELECT DB_NAME FROM COMPANY_MNG WHERE DB_STATUS='active';"
```

각 DB 에 대해:

```bash
for DB in $(psql -h 183.99.177.40 -U postgres -d invyone -t -c \
  "SELECT DB_NAME FROM COMPANY_MNG WHERE DB_STATUS='active'"); do
  psql -h 183.99.177.40 -U postgres -d "$DB" -c \
    "ALTER TABLE USER_INFO ADD COLUMN IF NOT EXISTS FORCE_PASSWORD_CHANGE BOOLEAN DEFAULT FALSE;"
done
```

## 롤백

```sql
ALTER TABLE USER_INFO DROP COLUMN IF EXISTS FORCE_PASSWORD_CHANGE;
```
