Conversation
There was a problem hiding this comment.
Pull request overview
방 생성/입장 시 닉네임 비속어 검증을 추가하고, 방 내 중복을 피하는 랜덤 닉네임 생성 API를 제공해 닉네임 관련 UX/정책을 애플리케이션 레벨에서 일관되게 적용합니다.
Changes:
badwordfiltering라이브러리를 활용한 닉네임 비속어(공백 우회 포함) 검증 로직 및 에러코드 추가- 랜덤 닉네임 생성기 +
GET /rooms/nickname/random엔드포인트 추가 (옵션 joinCode로 방 내 중복 제외) - QR 관련 설정(
QrProperties,QrCodeConfig) 패키지 정리 및 Outbox relay 폴링 주기 설정값화
Reviewed changes
Copilot reviewed 25 out of 25 changed files in this pull request and generated no comments.
Show a summary per file
| File | Description |
|---|---|
| backend/src/main/java/coffeeshout/room/application/service/NicknameValidator.java | 비속어 필터 기반 닉네임 검증 서비스 추가 |
| backend/src/main/java/coffeeshout/room/application/service/NicknameGenerator.java | 형용사+명사 조합 랜덤 닉네임 생성기 추가 |
| backend/src/main/java/coffeeshout/room/application/service/RoomService.java | 방 생성/입장 시 닉네임 검증 연결 및 랜덤 닉네임 생성 기능 추가 |
| backend/src/main/java/coffeeshout/room/ui/RoomRestController.java | 랜덤 닉네임 생성 API 엔드포인트 추가 |
| backend/src/main/java/coffeeshout/room/ui/RoomApi.java | Swagger 문서에 랜덤 닉네임 생성 API 추가 |
| backend/src/main/java/coffeeshout/room/ui/response/RandomNicknameResponse.java | 랜덤 닉네임 응답 DTO 추가 |
| backend/src/main/java/coffeeshout/room/domain/RoomErrorCode.java | 비속어 포함 닉네임 에러코드 추가 |
| backend/src/main/java/coffeeshout/room/config/RoomConfig.java | BadWordFiltering Bean 등록 |
| backend/src/main/java/coffeeshout/room/config/QrProperties.java | QrProperties 패키지 이동 |
| backend/src/main/java/coffeeshout/room/config/QrCodeConfig.java | QrCodeConfig 패키지 이동 |
| backend/src/main/java/coffeeshout/room/application/service/QrCodeService.java | QrProperties import 갱신 |
| backend/src/main/java/coffeeshout/room/infra/ZxingQrCodeGenerator.java | QrProperties import 갱신 |
| backend/src/main/java/coffeeshout/room/infra/OracleObjectStorageService.java | QrProperties import 갱신 |
| backend/src/main/java/coffeeshout/global/outbox/OutboxRelayWorker.java | relay 스케줄 fixedDelay를 설정값으로 변경 |
| backend/src/main/resources/application.yml | outbox.relay.delay 기본값 추가 |
| backend/src/main/resources/application-local.yml | 로컬 outbox.relay.delay 오버라이드 및 로그레벨 조정 |
| backend/build.gradle.kts | badwordfiltering 의존성 추가 |
| backend/docs/nickname-system.md | 닉네임 시스템 설계 문서 추가 |
| backend/src/test/java/coffeeshout/room/application/service/NicknameValidatorTest.java | 닉네임 검증 단위 테스트 추가 |
| backend/src/test/java/coffeeshout/room/application/service/NicknameGeneratorTest.java | 닉네임 생성 단위 테스트 추가 |
| backend/src/test/java/coffeeshout/room/application/RoomServiceTest.java | 랜덤 닉네임 생성/비속어 검증 통합 테스트 추가 |
| backend/src/test/java/coffeeshout/room/application/QrCodeServiceTest.java | QrProperties import 갱신 |
| backend/src/test/java/coffeeshout/room/infra/OracleObjectStorageServiceTest.java | QrProperties import 갱신 |
| backend/src/test/java/coffeeshout/room/infra/OracleObjectStorageIntegrationTest.java | QrProperties import 갱신 |
| backend/src/test/java/coffeeshout/room/infra/OracleObjectStorageCircuitBreakerTest.java | QrProperties import 갱신 |
💡 Add Copilot custom instructions for smarter, more guided reviews. Learn how to get started.
|
Caution Review failedAn error occurred during the review process. Please try again later. Walkthrough닉네임 자동 생성 및 비속어 필터링 기능을 구현합니다. 한국어 형용사/명사 조합으로 닉네임을 생성하고, 외부 라이브러리(bad-word-filtering)를 활용하여 방 입장 시 비속어를 검사합니다. QR 코드 설정을 global에서 room 패키지로 이동하고, 스케줄러 지연을 설정 기반으로 변경합니다. Changes
Sequence DiagramsequenceDiagram
participant Client
participant RoomApi
participant RoomService
participant NicknameValidator
participant BadWordFiltering
participant Database
rect rgba(100, 150, 200, 0.5)
note over Client,Database: 방 입장 시 닉네임 검증 플로우
Client->>RoomApi: POST /rooms/:joinCode/enter {guestName}
RoomApi->>RoomService: enterRoomAsync(joinCode, guestName)
RoomService->>NicknameValidator: validate(guestName)
NicknameValidator->>BadWordFiltering: check(guestName)<br/>blankCheck(guestName)
alt 비속어 감지됨
BadWordFiltering-->>NicknameValidator: true
NicknameValidator-->>RoomService: throw InvalidArgumentException
RoomService-->>RoomApi: InvalidArgumentException
RoomApi-->>Client: 400 (PLAYER_NAME_CONTAINS_PROFANITY)
else 정상 닉네임
BadWordFiltering-->>NicknameValidator: false
NicknameValidator-->>RoomService: (return)
RoomService->>Database: createPlayerEntry(joinCode, guestName)
RoomService-->>RoomApi: Room
RoomApi-->>Client: 200 Room data
end
end
rect rgba(200, 150, 100, 0.5)
note over Client,Database: 닉네임 자동 생성 플로우
Client->>RoomApi: GET /rooms/nickname/random?joinCode=ABC123
RoomApi->>RoomService: generateRandomNickname(joinCode)
RoomService->>Database: loadRoom(joinCode)
Database-->>RoomService: Room {players: [names]}
RoomService->>RoomService: collectExistingNames() → Set
alt joinCode 제공됨 (기존 이름 제외)
RoomService->>RoomService: nicknameGenerator.generate(existingNames)
else joinCode 미제공
RoomService->>RoomService: nicknameGenerator.generate(emptySet)
end
RoomService-->>RoomApi: randomNickname
RoomApi-->>Client: 200 {nickname: "활발한_사자"}
end
개선 영역 및 고려사항1. 비속어 필터링의 화이트스페이스 우회 미흡문제점: 개선 방향:
2. 닉네임 생성 충돌 전략의 재시도 한계문제점: 개선 방향:
3. 패키지 이동(QrProperties)의 로컬 영향 범위 불명확문제점: 개선 방향:
4. RoomErrorCode 추가 시 enum 메시지만 확장문제점: 개선 방향:
5. Outbox Relay Delay 프로퍼티 설정의 기본값 일관성문제점: 개선 방향:
Estimated code review effort🎯 3 (Moderate) | ⏱️ ~25 minutes ✨ Finishing Touches🧪 Generate unit tests (beta)
Thanks for using CodeRabbit! It's free for OSS, and your support helps us grow. If you like it, consider giving us a shout-out. Comment Tip You can disable sequence diagrams in the walkthrough.Disable the |
✅ 체크리스트
🔥 연관 이슈
🚀 작업 내용
AI 활용하여 닉네임 검열 기능 및 대시보드는 소스코드가 너무 길어져서 닉네임 생성과 1차 필터링 기능 먼저 PR로 올립니다.
💬 리뷰 중점사항
중점사항
Summary by CodeRabbit
릴리스 노트
새로운 기능
설정
문서