From 12f3a76c57ef5373f1390d6fa1088e3057df5d26 Mon Sep 17 00:00:00 2001 From: Klaus Date: Thu, 5 Mar 2026 15:38:58 +0900 Subject: [PATCH] =?UTF-8?q?docs(admin-member):=20=EA=B4=80=EB=A6=AC?= =?UTF-8?q?=EC=9E=90=20=EC=82=AC=EC=9A=A9=EC=9E=90=20=EC=B0=A8=EB=8B=A8=20?= =?UTF-8?q?=EA=B3=84=ED=9A=8D=EA=B3=BC=20=EA=B2=80=EC=A6=9D=20=EA=B8=B0?= =?UTF-8?q?=EB=A1=9D=EC=9D=84=20=EC=B6=94=EA=B0=80=ED=95=9C=EB=8B=A4?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- docs/20260305_관리자사용자차단기능추가.md | 34 +++++++++++++++++++++++ 1 file changed, 34 insertions(+) create mode 100644 docs/20260305_관리자사용자차단기능추가.md diff --git a/docs/20260305_관리자사용자차단기능추가.md b/docs/20260305_관리자사용자차단기능추가.md new file mode 100644 index 00000000..2be3f7b1 --- /dev/null +++ b/docs/20260305_관리자사용자차단기능추가.md @@ -0,0 +1,34 @@ +- [x] 관리자 차단 신규 API/DTO/서비스 파일 생성 +- [x] 차단 처리 시 탈퇴 이유 저장 및 회원 비활성화 처리 +- [x] 차단 처리 시 Redis 로그인 토큰 전체 삭제 +- [x] 본인인증 회원 BlockAuth 기록 처리 +- [x] 동일 본인인증 정보 계정 일괄 탈퇴 처리 +- [x] 활성 계정 조회 조건을 `name + birth + di + uniqueCi`로 강화 +- [x] 관리자 차단 서비스 테스트 추가 +- [x] 정적 진단 및 테스트/빌드 검증 + +## 검증 기록 + +### 1차 구현 +- 무엇을: `kr.co.vividnext.sodalive.admin.member` 패키지에 신규 관리자 차단 API(`AdminMemberBlockController`), 요청 DTO(`AdminMemberBlockRequest`), 서비스(`AdminMemberBlockService`)를 추가했다. 서비스에서 탈퇴 이유 저장/회원 비활성화, Redis 로그인 토큰 전체 삭제, 본인인증 정보 `BlockAuth` 기록을 순서대로 처리하고, 서비스 단위 테스트(`AdminMemberBlockServiceTest`)를 추가했다. +- 왜: 관리자 페이지에서 사용자 차단 시 계정 비활성화 이력, 세션 무효화, 본인인증 기반 재가입 차단 정보를 한 번의 동작으로 일관되게 처리하기 위해서다. +- 어떻게: + - 정적 진단: `lsp_diagnostics`로 수정한 Kotlin 파일 진단을 시도했으나, 실행 환경에 Kotlin LSP가 설정되어 있지 않아 수행 불가(도구 에러 확인). + - 테스트: `./gradlew test --tests kr.co.vividnext.sodalive.admin.member.AdminMemberBlockServiceTest` 실행, `BUILD SUCCESSFUL` 확인. + - 빌드: `./gradlew build -x test` 실행, `BUILD SUCCESSFUL` 확인. + +### 2차 수정 +- 무엇을: 관리자 차단 시 차단 대상 회원의 본인인증 정보(`di`)와 동일한 활성 계정을 모두 조회해 일괄 탈퇴 처리하도록 `AdminMemberBlockService`를 수정했다. 각 대상 계정마다 탈퇴 사유(`SignOut`) 저장, 회원 비활성화, Redis 로그인 토큰 전체 삭제를 수행하고, 기존 `BlockAuth` 저장 로직은 유지했다. 테스트도 동일 본인인증 다계정 탈퇴 시나리오를 포함하도록 확장했다. +- 왜: 본인인증 정보를 공유하는 다중 계정을 관리자 차단 시 함께 정리해야 우회 가입 계정이 활성 상태로 남지 않기 때문이다. +- 어떻게: + - 정적 진단: `lsp_diagnostics`로 수정한 Kotlin 파일 진단을 시도했으나, 실행 환경에 Kotlin LSP가 설정되어 있지 않아 수행 불가(도구 에러 확인). + - 테스트: `./gradlew test --tests kr.co.vividnext.sodalive.admin.member.AdminMemberBlockServiceTest` 실행, `BUILD SUCCESSFUL` 확인. + - 빌드: `./gradlew build -x test` 실행, `BUILD SUCCESSFUL` 확인. + +### 3차 수정 +- 무엇을: 활성 계정 조회 조건을 `di` 단일 조건에서 `name + birth + di + uniqueCi` AND 조건으로 강화했다. 이를 위해 `AuthRepository`의 활성 계정 조회 메서드를 `getActiveMemberIdsByNameAndBirthAndDiAndUniqueCi(...)`로 변경하고, 호출부인 `AdminMemberBlockService`, `AuthService.authenticate`를 모두 신규 메서드로 교체했다. `AdminMemberBlockServiceTest`도 신규 시그니처 기준으로 스텁/검증을 수정했다. +- 왜: `di`만으로 동일인을 판단하면 과매칭 리스크가 있어, 본인인증 핵심 식별 속성을 함께 사용해 활성 계정 판별 정확도를 높이기 위해서다. +- 어떻게: + - 정적 진단: `lsp_diagnostics`로 수정한 Kotlin 파일 진단을 시도했으나, 실행 환경에 Kotlin LSP가 설정되어 있지 않아 수행 불가(도구 에러 확인). + - 테스트: `./gradlew test` 실행, `BUILD SUCCESSFUL` 확인. + - 빌드: `./gradlew build -x test` 실행, `BUILD SUCCESSFUL` 확인.