# 사업자등록번호 중복 체크 구현 작업 계획서 ## 1. 현황 분석 ### 문제점 - 법인 등록 시 사업자등록번호(compRegNo) 중복 검증이 없음 - `PortalOrgRepository.findByCompRegNo()` 메서드는 존재하나 사용되지 않음 - 동일한 사업자등록번호로 여러 법인이 등록될 수 있는 상태 ### 검증 시점 1. **실시간 검증**: 사용자가 사업자등록번호 입력 시 `/check-business-number` API 호출 2. **등록 시 검증**: 실제 법인 생성 시점 (`registerOrgFromDTOWithFile`) --- ## 2. 수정 대상 파일 | 파일 경로 | 수정 내용 | |-----------|-----------| | `src/main/java/.../apps/user/service/PortalOrgService.java` | 사업자등록번호 중복 체크 메서드 추가 | | `src/main/java/.../apps/user/facade/OrgRegisterFacadeImpl.java` | `checkBusinessNumber()` 중복 체크 로직 추가, 등록 전 중복 체크 추가 | --- ## 3. 구현 상세 ### 3.1 PortalOrgService.java ```java // 추가할 메서드 public boolean existsByCompRegNo(String compRegNo) { return portalOrgRepository.findByCompRegNo(compRegNo).isPresent(); } ``` ### 3.2 OrgRegisterFacadeImpl.java #### checkBusinessNumber 메서드 수정 - 형식 검증 + 중복 검증 동시 수행 - 중복 시 "이미 등록된 사업자등록번호입니다." 메시지 반환 ```java @Override public ResponseEntity checkBusinessNumber(String compRegNo) { // 1. 형식 검증 boolean isValidFormat = validationService.isValidBusinessNumber(compRegNo); if (!isValidFormat) { return ResponseEntity.ok(new ValidationResponse(false, "유효하지 않은 사업자 등록번호입니다.")); } // 2. 중복 검증 boolean isDuplicate = portalOrgService.existsByCompRegNo(compRegNo); if (isDuplicate) { return ResponseEntity.ok(new ValidationResponse(false, "이미 등록된 사업자등록번호입니다.")); } return ResponseEntity.ok(new ValidationResponse(true, "사용 가능한 사업자 등록번호입니다.")); } ``` #### 법인 생성 메서드들에 중복 체크 추가 - `registerNewCorporateUser()` - `convertExistingUserToCorporate()` - `registerNewCorporateUserWithExistingData()` 각 메서드에서 `portalOrgService.registerOrgFromDTOWithFile()` 호출 전 중복 체크 수행 --- ## 4. 검증 흐름 ``` [사용자 입력] ↓ [실시간 검증] /check-business-number API ├── 형식 검증 (10자리 숫자) └── 중복 검증 (DB 조회) ↓ [등록 요청] ↓ [등록 시 검증] registerOrgFromDTOWithFile 호출 전 └── 중복 체크 (이중 방어) ↓ [법인 생성] ``` --- ## 5. 기존 중복 데이터 처리 - 기존에 중복 등록된 데이터는 그대로 유지 - 신규 등록 시에만 중복 체크 적용 - 필요시 관리자 화면에서 중복 데이터 조회/정리 기능 별도 개발 가능 --- ## 6. 테스트 시나리오 | 시나리오 | 예상 결과 | |----------|-----------| | 형식이 잘못된 사업자등록번호 입력 | "유효하지 않은 사업자 등록번호입니다." | | 이미 등록된 사업자등록번호 입력 | "이미 등록된 사업자등록번호입니다." | | 사용 가능한 사업자등록번호 입력 | "사용 가능한 사업자 등록번호입니다." | | 중복된 번호로 법인 등록 시도 | 등록 실패, 에러 메시지 표시 | --- ## 7. 작업 완료 - [x] PortalOrgService에 existsByCompRegNo 메서드 추가 - [x] OrgRegisterFacadeImpl.checkBusinessNumber 수정 - [x] 법인 등록 메서드들에 중복 체크 로직 추가 - [x] 빌드 검증 완료