Skip to content

[FEAT] 성별 기반 방 목록 필터링 및 신청 차단#92

Merged
ydking0911 merged 5 commits intodevelopfrom
feat/#90/성별-기반-방-목록-필터링-room-테이블-gender-컬럼-추가-및-인덱스-확장
Apr 17, 2026

Hidden character warning

The head ref may contain hidden characters: "feat/#90/\uc131\ubcc4-\uae30\ubc18-\ubc29-\ubaa9\ub85d-\ud544\ud130\ub9c1-room-\ud14c\uc774\ube14-gender-\uceec\ub7fc-\ucd94\uac00-\ubc0f-\uc778\ub371\uc2a4-\ud655\uc7a5"
Merged

[FEAT] 성별 기반 방 목록 필터링 및 신청 차단#92
ydking0911 merged 5 commits intodevelopfrom
feat/#90/성별-기반-방-목록-필터링-room-테이블-gender-컬럼-추가-및-인덱스-확장

Conversation

@ydking0911
Copy link
Copy Markdown
Contributor

📝 Pull Request Template

📌 제목

성별 기반 방 목록 필터링 및 신청 차단


📢 요약

기숙사 특성상 남성/여성 방을 분리하여 표시해야 하나, 기존에는 성별 구분 없이 전체 방이 노출되었습니다.
방 목록을 요청자 성별과 일치하는 방만 반환하도록 필터링을 추가하고, 타 성별 방에 대한 신청 자체를 서버에서 차단했습니다.

🔗 연관 이슈: Resolves #90


✨ 변경사항

레이어 변경 내용
Room 엔티티 gender 필드 추가, 방 생성 시 방장 성별로 저장
CreateRoomUseCase 방장 gender 조회 후 Room 생성, 이미 방에 속한 사용자 사전 차단(ROOM013)
FindRoomsUseCase 요청자 userNo → gender 조회 후 필터 파라미터로 전달
FindRoomsController @currentuser String userNo 추가
RoomService.searchByCursor Gender gender 파라미터 추가
RoomRepositoryImpl QueryDSL 경로: room.gender.eq(gender) WHERE 추가
RoomRepositoryImpl LATERAL 경로: AND r.gender = :gender 추가 (LATERAL 실행 전 필터링으로 성능 유지)
ApplyRoomUseCase 신청자 gender ≠ 방 gender 시 GENDER_MISMATCH(ROOM016) 예외 반환
RoomErrorStatus GENDER_MISMATCH(ROOM016) 에러 코드 추가


성능 고려사항

LATERAL 쿼리 방식(체크리스트 필터 적용 시)에서 gender 필터를 LATERAL 서브쿼리 실행 이전 outer WHERE에 배치하여, 불필요한 LATERAL 실행 횟수를 성별 비율만큼 감소시킵니다.


🚀 PR 유형

해당하는 항목에 체크해주세요.

  • ✨ 새로운 기능 추가
  • 🐛 버그 수정
  • 🎨 CSS/UI 디자인 변경
  • 🔧 코드에 영향 없는 변경(오타 수정, 탭 사이즈 변경, 변수명 변경 등)
  • 🔨 코드 리팩토링
  • 📝 주석 추가 및 수정
  • 📄 문서 수정
  • 🧪 테스트 추가 또는 리팩토링
  • 🏗️ 빌드 및 패키지 매니저 수정
  • 📂 파일 또는 폴더명 수정
  • 🗑️ 파일 또는 폴더 삭제

✅ PR 체크리스트

PR이 다음 요구 사항을 충족하는지 확인해주세요.

  • 🔹 커밋 메시지 컨벤션을 준수했습니다. (Commit message convention 참고)
  • 🔹 변경 사항에 대한 테스트를 수행했습니다. (버그 수정/기능 테스트)
  • 🔹 관련 문서를 업데이트했습니다. (필요한 경우)

📜 기타

DB 마이그레이션이 필요할 것 같아서 schema.sql도 수정해두었습니다.

- Room 엔티티에 gender 컬럼 추가, 방 생성 시 방장 성별로 저장
- 방 목록 조회(FindRoomsUseCase)에서 요청자 성별과 일치하는 방만 반환
  - QueryDSL 경로: room.gender.eq(gender) WHERE 조건 추가
  - LATERAL 경로: AND r.gender = :gender 조건 추가 (LATERAL 실행 전 필터링)
- 방 신청(ApplyRoomUseCase)에서 성별 불일치 시 GENDER_MISMATCH(ROOM016) 에러 반환
  - 목록 필터링(Layer 1) + 신청 차단(Layer 2) 2중 방어 구조
- 방 생성(CreateRoomUseCase)에서 이미 방에 속한 사용자 사전 검증 추가
  - 기존 DB constraint 오류 대신 ALREADY_JOINED_USER(ROOM013) 반환
- 인덱스 교체: idx_room_status_created → (room_status, gender, created_at, room_no)
- 에러 코드 추가: GENDER_MISMATCH(ROOM016)
- 관련 단위 테스트 전체 반영
@ydking0911 ydking0911 requested review from KoungQ and Copilot April 15, 2026 04:28
@ydking0911 ydking0911 self-assigned this Apr 15, 2026
@coderabbitai
Copy link
Copy Markdown

coderabbitai bot commented Apr 15, 2026

Important

Review skipped

Auto reviews are disabled on base/target branches other than the default branch.

Please check the settings in the CodeRabbit UI or the .coderabbit.yaml file in this repository. To trigger a single review, invoke the @coderabbitai review command.

⚙️ Run configuration

Configuration used: Path: .coderabbit.yml

Review profile: ASSERTIVE

Plan: Pro

Run ID: e6575b8a-51c4-4bb7-b3dd-f406d7f9d892

You can disable this status message by setting the reviews.review_status to false in the CodeRabbit configuration file.

Use the checkbox below for a quick retry:

  • 🔍 Trigger review
✨ Finishing Touches
🧪 Generate unit tests (beta)
  • Create PR with unit tests
  • Commit unit tests in branch feat/#90/성별-기반-방-목록-필터링-room-테이블-gender-컬럼-추가-및-인덱스-확장

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.

❤️ Share

Comment @coderabbitai help to get the list of available commands and usage tips.

@ydking0911
Copy link
Copy Markdown
Contributor Author

copilot 리뷰 확인하고 PR Merge 되는대로 다음 이슈도 이어서 진행할 예정.

Copy link
Copy Markdown

Copilot AI left a comment

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Pull request overview

성별(MALE/FEMALE) 기준으로 방 목록 노출을 필터링하고, 타 성별 방에 대한 신청을 서버에서 차단하기 위해 Room.gender를 도입하고 조회/신청 흐름 전반에 성별 조건을 추가한 PR입니다. 기존에 성별 구분 없이 전체 방이 노출되던 동작을 개선해 기숙사 운영 정책(성별 분리)에 맞게 동작하도록 합니다.

Changes:

  • Roomgender 필드를 추가하고, 방 생성 시 방장 성별을 Room.gender로 저장하도록 생성 흐름 수정
  • 방 목록 조회 시 로그인 사용자의 성별을 조회해 RoomRepository 검색 조건(일반 QueryDSL / LATERAL 네이티브 쿼리)에 성별 필터 추가
  • 방 신청 시 신청자 성별과 방 성별 불일치 시 ROOM016 (GENDER_MISMATCH)로 차단 및 관련 테스트 보강

Reviewed changes

Copilot reviewed 17 out of 17 changed files in this pull request and generated 5 comments.

Show a summary per file
File Description
src/main/java/com/project/dorumdorum/domain/room/domain/entity/Room.java gender 컬럼 및 성별 포함 인덱스 정의 추가
src/main/java/com/project/dorumdorum/domain/room/application/usecase/CreateRoomUseCase.java 방장 성별 조회 후 Room 생성 + 사전 “이미 방 소속” 차단
src/main/java/com/project/dorumdorum/domain/room/application/usecase/FindRoomsUseCase.java 사용자 성별 조회 후 커서 검색에 성별 조건 전달
src/main/java/com/project/dorumdorum/domain/room/application/usecase/ApplyRoomUseCase.java 신청 시 성별 불일치 차단(ROOM016)
src/main/java/com/project/dorumdorum/domain/room/domain/service/RoomService.java create/searchByCursor에 Gender 파라미터 추가
src/main/java/com/project/dorumdorum/domain/room/domain/repository/RoomQueryRepository.java findByCursor 시그니처에 Gender 추가
src/main/java/com/project/dorumdorum/domain/room/infra/repository/RoomRepositoryImpl.java QueryDSL/LATERAL 양쪽 경로에 gender WHERE 조건 추가
src/main/java/com/project/dorumdorum/domain/room/ui/spec/FindRoomsApiSpec.java API 설명에 성별 필터링 명시 + hidden userNo 파라미터 추가
src/main/java/com/project/dorumdorum/domain/room/ui/FindRoomsController.java @CurrentUser userNo를 받아 use case로 전달
src/main/java/com/project/dorumdorum/global/exception/code/status/RoomErrorStatus.java GENDER_MISMATCH (ROOM016) 추가
src/main/resources/schema.sql room 상태/성별 기반 인덱스 생성으로 변경
src/test/java/com/project/dorumdorum/domain/room/unit/usecase/FindRoomsUseCaseTest.java userNo 기반 실행 및 성별 조회 mocking 반영
src/test/java/com/project/dorumdorum/domain/room/unit/usecase/CreateRoomUseCaseTest.java “이미 방 소속” 차단 테스트 + gender 포함 생성 테스트 반영
src/test/java/com/project/dorumdorum/domain/room/unit/usecase/ApplyRoomUseCaseTest.java 성별 불일치 차단 테스트 추가 및 기존 케이스 업데이트
src/test/java/com/project/dorumdorum/domain/room/unit/ui/FindRoomsControllerTest.java controller 시그니처 변경 반영
src/test/java/com/project/dorumdorum/domain/room/unit/service/RoomServiceTest.java service 시그니처/레포 호출 변경 반영
src/test/java/com/project/dorumdorum/domain/room/unit/infra/repository/RoomRepositoryImplTest.java repository 시그니처 변경 및 gender 파라미터 반영

💡 Add Copilot custom instructions for smarter, more guided reviews. Learn how to get started.

Comment thread src/main/resources/schema.sql
@ydking0911 ydking0911 merged commit 9008ec6 into develop Apr 17, 2026
4 checks passed
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

Projects

None yet

Development

Successfully merging this pull request may close these issues.

3 participants