멤버와 가입 코드
팀 코드는 로그인 비밀번호가 아니라 가입(join) 코드다. 팀원은 이 코드로 자기 개인 계정을 직접 만든다(D-013).
언제 쓰나
- 새 팀원에게 가입 코드를 전달할 때
- 팀원 목록과 마지막 로그인을 확인할 때
- 퇴사·권한 회수로 특정 팀원 접근을 즉시 끊을 때
- 코드가 유출된 것 같아 새 가입을 막고 싶을 때
화면
팀 멤버
팀 관리에서 팀을 고르면 아래에 팀 멤버 카드가 있다.
| 요소 | 설명 |
|---|---|
팀 멤버 N · 가입 코드로 셀프 가입 | 멤버 수와 가입 방식 안내 |
이름 | 팀원이 가입 시 정한 표시 이름(display_name) |
아이디 | 로그인 아이디(username). 팀 안에서 유일 |
마지막 로그인 | 최근 로그인 시각. 미로그인은 - |
상태 | 활성 또는 비활성 |
비활성화 / 활성화 | 접근을 끊거나 되살린다 |
팀 코드 초기화 | 팀 설정 카드에 있다. 새 가입 코드를 발급한다 |
절차
가입 코드 전달
- 팀을 생성하면 가입 코드가 한 번 표시된다(팀 생애주기 참고). 안전한 채널로 팀원에게 전달한다.
- 팀원은 로그인 화면의
팀 코드로 가입에서 조직·팀을 고르고 코드를 넣은 뒤 자기 아이디와 비밀번호를 만든다. - 가입 직후 팀원이 자동 로그인되고,
팀 멤버목록에 나타난다.
팀원 비활성화·활성화
- 끊을 팀원 행의
비활성화를 누른다. is_active가false가 되고 다음 요청부터 즉시 차단된다. 매 요청마다 활성 상태를 검증하기 때문이다.- 되살리려면
활성화를 누른다.
비활성화된 팀원이 로그인이나 API 호출을 시도하면 member_deactivated로 거부된다.
가입 코드 초기화
팀 설정카드의팀 코드 초기화를 누른다.- 새 코드가 발급되고 모달에 한 번만 전체 표시된다. 내부적으로
code_version이 1 올라간다. - 초기화는 신규 가입만 차단한다. 기존 팀원 계정과 세션은 그대로 유지된다.
이렇게 되면 정상
- 가입: 팀원이
팀 멤버목록에활성상태로 나타나고아이디가 채워진다. - 비활성화: 상태가
비활성으로 바뀌고 행이 흐려진다. 그 팀원의 진행 요청이 곧바로 막힌다. - 코드 초기화: 새 코드로 가입한 팀원만 들어올 수 있고, 기존 팀원은 아무 영향 없이 계속 로그인한다.
- 이 모든 행위는 사용 로그에
member.deactivate/member.activate/team.reset_code로 남는다.
막히는 경우
| 증상 | 원인 | 조치 |
|---|---|---|
팀원이 username_taken으로 가입 실패 | 같은 팀에 이미 그 아이디가 있음 | 다른 아이디로 가입하도록 안내 |
| 비활성화했는데 아직 접근됨 | 이미 발급된 화면이 캐시로 남은 순간 | 다음 API 요청에서 차단된다. 즉시 세션까지 끊으려면 코드 초기화가 아니라 자원 회수·강제 중지를 병행 |
| 유출 우려로 코드를 바꿨는데 기존 팀원까지 막고 싶다 | 코드 초기화는 신규 가입만 차단 | 개별 팀원을 비활성화한다 |
| 가입 코드를 다시 보고 싶다 | 코드는 발급 시 1회만 평문 표시(해시만 저장) | 팀 코드 초기화로 새 코드를 발급받는다 |
알아둘 것
- 팀 코드는 가입용이다. 로그인은 개인 아이디·비밀번호로 한다. 코드를 바꿔도 이미 만든 계정은 유지된다.
- 아이디(
username)는 팀 스코프에서 유일하다. 다른 팀에 같은 아이디가 있어도 무관하다. - 감사 로그가 개인 단위로 남는 이유가 이 구조다. 누가 무엇을 했는지 팀원별로 추적된다.
- 관리자는 팀원의 비밀번호를 볼 수 없다. 접근 회수는 비활성화로만 한다.