Skip to content

Release v2.7.0 - #1447

Merged
bingle625 merged 5 commits into
mainfrom
dev
Aug 6, 2026
Merged

Release v2.7.0#1447
bingle625 merged 5 commits into
mainfrom
dev

Conversation

@bingle625

@bingle625 bingle625 commented Aug 6, 2026

Copy link
Copy Markdown
Contributor

🚀 Release v2.7.0

2026-08-01 ~ 2026-08-05

📋 변경사항 요약

동문수첩에 커서 기반 섹션 목록 조회를 도입했습니다. 크롤링 계정의 하드코딩을 제거하고, 로그인 및 탈퇴 사용자 정리 배치의 안정성을 개선했습니다.

✨ 새 기능

  • 동문수첩에서 커서 기반으로 섹션별 사용자 목록을 조회할 수 있도록 개선했습니다. #1444
  • 크롤링 게시물 작성자를 전용 시스템 사용자로 분리해 하드코딩된 사용자 의존성을 제거했습니다. #1428

🐛 버그 수정

  • 잘못된 사용자 정보로 로그인될 수 있는 문제를 수정했습니다. #1441
  • 탈퇴 사용자 정리 배치의 대상 조회와 페이지네이션을 개선했습니다. #1431

🗄️ 데이터베이스 변경

  • 크롤러 전용 시스템 사용자를 생성하는 마이그레이션이 포함됩니다.
  • 동문 정보에 커피챗 가능 여부 컬럼을 추가하는 마이그레이션이 포함됩니다.
  • 배포 PR에 db-change 라벨이 필요합니다.

Full Changelog: https://github.com/CAUCW/causw_backend/compare/v2.5.1...v2.7.0

Summary by CodeRabbit

  • 새 기능
    • 커서 기반 동문 수첩 조회를 지원하며, 섹션별 목록·다음 커서를 제공합니다.
    • 사용자 프로필에 학과 정보와 커피챗 가능 여부가 표시됩니다.
    • 리프레시 토큰 충돌 정리 기능이 추가되었습니다.
  • 개선 사항
    • 리프레시 토큰의 고유성이 강화되었습니다.
    • OIDC 로그인 시 소셜 ID를 우선 확인하고 이메일로 대체 조회합니다.
    • 탈퇴 사용자 개인정보 정리 대상 처리가 안정화되었습니다.
    • 크롤링 게시글 작성자가 시스템 계정으로 관리됩니다.

bingle625 and others added 5 commits August 1, 2026 11:10
* feat: 크롤링 시스템 계정 추가

* test: 테스트 코드 수정

* refactor: flyway 스크립트 개선

이메일로 ID 동적 조회
* refactor: User 엔티티로 익명화 여부 판단 로직 이동 (#1430)

* fix: 익명화된 사용자를 배치 정리 대상에서 제외 (#1430)

* refactor: 탈퇴 사용자 정리 배치 조회 로직 개선 (#1430)

* refactor: 미사용 메서드 제거 (#1430)

* refactor: 사용자 정리 대상 조회 쿼리 명확화 (#1430)

* test: 배치 사용자 정리 테스트를 조회 방식 변경에 맞게 수정 (#1430)

* style: Spotless 포맷팅 적용 (#1430)

* fix: 누락된 배치 테스트 수정 반영 (#1430)

* fix: 탈퇴 사용자 조회 조건의 LIKE 패턴 이스케이프 적용 (#1430)

* refactor: Reader 계층을 통해 배치 조회하도록 구조 개선 (#1430)
* fix: 리프레시 토큰 jti 추가

* fix: OIDC 로그인 유저 조회를 socialId 우선으로 변경

* feat: 충돌 리프레시 토큰 1회성 정리 러너 추가
* remove: 더 이상 사용하지 않는 v1 repository 삭제

* feat: 커피챗 허용 속성 추가 및 사용하지 않는 job 속성 삭제

* fix: typo

* fix: typo

* feat: 동문수첩 상세 조회 시 커피챗 허용여부 포함하도록 변경

* feat: 동문수첩 상세 조회 시 학과 정보 포함

* feat: 동문 정보 리스트 조회 cursor 추가

* feat: 커서 기반 동문리스트 조회 api 추가

* refactor: 커서 관련 책임 분리

* feat: summary 에 커피챗 가능 여부, 학과 정보 추가

* feat: 커서 일관성 유지를 위한 필터해시 추가

* docs: javadoc 주석 추가

* test: #1442 동문수첩 서비스 테스트 수정
@bingle625 bingle625 self-assigned this Aug 6, 2026
@github-actions
github-actions Bot requested a review from wldy4627 August 6, 2026 12:19
@coderabbitai

coderabbitai Bot commented Aug 6, 2026

Copy link
Copy Markdown

Review Change Stack

Caution

Review failed

The pull request is closed.

ℹ️ Recent review info
⚙️ Run configuration

Configuration used: Path: .coderabbit.yaml

Review profile: CHILL

Plan: Pro Plus

Run ID: 9ce2c5ee-a1f7-4050-a84c-27d999e4f19d

📥 Commits

Reviewing files that changed from the base of the PR and between 5028a22 and 983422f.

📒 Files selected for processing (42)
  • app-main/src/main/java/net/causw/app/main/core/batch/BatchScheduler.java
  • app-main/src/main/java/net/causw/app/main/core/security/JwtTokenProvider.java
  • app-main/src/main/java/net/causw/app/main/domain/integration/crawled/service/CrawledToPostTransferService.java
  • app-main/src/main/java/net/causw/app/main/domain/user/account/api/v2/controller/UserInfoController.java
  • app-main/src/main/java/net/causw/app/main/domain/user/account/api/v2/dto/request/UserInfoListRequest.java
  • app-main/src/main/java/net/causw/app/main/domain/user/account/api/v2/dto/response/DepartmentResponse.java
  • app-main/src/main/java/net/causw/app/main/domain/user/account/api/v2/dto/response/UserInfoDetailResponse.java
  • app-main/src/main/java/net/causw/app/main/domain/user/account/api/v2/dto/response/UserInfoDirectoryResponse.java
  • app-main/src/main/java/net/causw/app/main/domain/user/account/api/v2/dto/response/UserInfoSectionResponse.java
  • app-main/src/main/java/net/causw/app/main/domain/user/account/api/v2/dto/response/UserInfoSummaryResponse.java
  • app-main/src/main/java/net/causw/app/main/domain/user/account/api/v2/mapper/UserInfoDtoMapper.java
  • app-main/src/main/java/net/causw/app/main/domain/user/account/entity/userInfo/UserInfo.java
  • app-main/src/main/java/net/causw/app/main/domain/user/account/enums/userinfo/UserInfoSectionType.java
  • app-main/src/main/java/net/causw/app/main/domain/user/account/repository/user/UserRepository.java
  • app-main/src/main/java/net/causw/app/main/domain/user/account/repository/userInfo/UserInfoQueryRepository.java
  • app-main/src/main/java/net/causw/app/main/domain/user/account/repository/userInfo/UserInfoQueryV1Repository.java
  • app-main/src/main/java/net/causw/app/main/domain/user/account/repository/userInfo/UserInfoQueryV1RepositoryImpl.java
  • app-main/src/main/java/net/causw/app/main/domain/user/account/service/UserInfoService.java
  • app-main/src/main/java/net/causw/app/main/domain/user/account/service/dto/UserInfoCursor.java
  • app-main/src/main/java/net/causw/app/main/domain/user/account/service/dto/result/UserInfoDetailResult.java
  • app-main/src/main/java/net/causw/app/main/domain/user/account/service/dto/result/UserInfoDirectoryResult.java
  • app-main/src/main/java/net/causw/app/main/domain/user/account/service/dto/result/UserInfoSectionResult.java
  • app-main/src/main/java/net/causw/app/main/domain/user/account/service/dto/result/UserInfoSummaryResult.java
  • app-main/src/main/java/net/causw/app/main/domain/user/account/service/implementation/UserInfoReader.java
  • app-main/src/main/java/net/causw/app/main/domain/user/account/service/implementation/UserReader.java
  • app-main/src/main/java/net/causw/app/main/domain/user/account/service/implementation/UserWriter.java
  • app-main/src/main/java/net/causw/app/main/domain/user/account/service/mapper/UserInfoMapper.java
  • app-main/src/main/java/net/causw/app/main/domain/user/account/service/util/UserInfoCursorManager.java
  • app-main/src/main/java/net/causw/app/main/domain/user/auth/handler/OAuth2SuccessHandler.java
  • app-main/src/main/java/net/causw/app/main/shared/exception/errorcode/UserInfoErrorCode.java
  • app-main/src/main/java/net/causw/app/main/shared/infra/redis/CollidedRefreshTokenCleanupRunner.java
  • app-main/src/main/java/net/causw/app/main/shared/infra/redis/RedisUtils.java
  • app-main/src/main/resources/application.yml
  • app-main/src/main/resources/db/migration/V20260727181056__CreateCrawlerSystemUser.sql
  • app-main/src/main/resources/db/migration/V20260804194808__AddCoffeeChatAvailabilityToUserInfo.sql
  • app-main/src/test/java/net/causw/app/main/core/security/JwtTokenProviderTest.java
  • app-main/src/test/java/net/causw/app/main/core/security/batch/BatchSchedulerTest.java
  • app-main/src/test/java/net/causw/app/main/domain/integration/crawled/service/CrawledToPostTransferServiceTest.java
  • app-main/src/test/java/net/causw/app/main/domain/user/account/service/UserInfoServiceTest.java
  • app-main/src/test/java/net/causw/app/main/domain/user/auth/handler/OAuth2SuccessHandlerTest.java
  • app-main/src/test/java/net/causw/app/main/shared/infra/redis/RedisUtilsTest.java
  • global/src/main/java/net/causw/global/constant/StaticValue.java

Walkthrough

탈퇴 사용자 정리와 크롤러 계정 전환을 변경했습니다. 사용자 디렉터리에 커서 기반 섹션 조회와 학과·커피챗 정보를 추가했습니다. JWT·OIDC 인증 흐름과 Redis 중복 토큰 정리 기능도 확장했습니다.

Changes

커서 기반 사용자 디렉터리

Layer / File(s) Summary
디렉터리 계약과 사용자 정보 모델
app-main/.../api/v2/dto/*, app-main/.../service/dto/*, app-main/.../UserInfo.java, app-main/.../UserInfoSectionType.java
요청 커서, 디렉터리·섹션 응답, 학과 정보, 커피챗 가능 여부를 계약과 사용자 모델에 추가했습니다.
커서 검증과 저장소 조회
app-main/.../UserInfoQueryRepository.java, app-main/.../UserInfoReader.java, app-main/.../UserInfoCursorManager.java
필터 해시, Base64 커서, 정렬별 페이지 조건과 섹션별 Slice<UserInfo> 조회를 구현했습니다.
디렉터리 서비스와 API 매핑
app-main/.../UserInfoService.java, app-main/.../UserInfoController.java, app-main/.../*Mapper.java, app-main/.../UserInfoServiceTest.java
본인 프로필을 포함한 디렉터리 조회를 서비스와 API에 연결하고, 결과 매핑과 기존 상세 조회 테스트를 갱신했습니다.

탈퇴 사용자 개인정보 정리

Layer / File(s) Summary
정리 대상 조회와 반복 처리
app-main/.../UserRepository.java, app-main/.../UserReader.java, app-main/.../BatchScheduler.java
findCleanupTargets 목록 조회를 추가하고, 배치가 빈 목록까지 반복 처리하도록 변경했습니다.
익명화 처리와 검증
app-main/.../UserWriter.java, app-main/.../BatchSchedulerTest.java
익명화 여부를 기준으로 건너뛰던 분기를 제거하고 배치 테스트를 목록 조회 방식으로 변경했습니다.

크롤러 시스템 계정

Layer / File(s) Summary
시스템 크롤러 계정과 게시물 전환
app-main/.../V20260727181056__CreateCrawlerSystemUser.sql, global/.../StaticValue.java, app-main/.../CrawledToPostTransferService.java
시스템 크롤러 계정을 생성하고 기존 크롤링 게시물의 작성자를 변경했습니다. 공지 변환은 시스템 크롤러 이메일을 조회합니다.
크롤러 계정 연동 테스트
app-main/.../CrawledToPostTransferServiceTest.java
신규 게시물, 기존 게시물, 변경 대상이 없는 경우의 계정 조회 기준을 갱신했습니다.

인증 토큰 운영 변경

Layer / File(s) Summary
JWT와 OIDC 사용자 조회
app-main/.../JwtTokenProvider.java, app-main/.../OAuth2SuccessHandler.java, app-main/.../*Test.java
Refresh token에 jti와 발급 시각을 추가했습니다. OIDC 사용자는 social ID를 먼저 조회하고 실패하면 이메일을 사용합니다.
Redis 중복 토큰 정리
app-main/.../RedisUtils.java, app-main/.../CollidedRefreshTokenCleanupRunner.java, app-main/src/main/resources/application.yml, app-main/.../RedisUtilsTest.java
충돌한 refresh token과 사용자 인덱스를 정리하고, 설정이 활성화된 경우 애플리케이션 준비 시 1회 실행합니다.

Estimated code review effort: 4 (Complex) | ~60 minutes

Possibly related PRs

  • CAUCSE/CAUSW_backend#1428: 크롤러 시스템 계정, 게시물 작성자 전환, 관련 마이그레이션과 테스트가 동일합니다.
  • CAUCSE/CAUSW_backend#1431: 탈퇴 사용자 정리 배치와 저장소·서비스·테스트 변경이 동일합니다.
  • CAUCSE/CAUSW_backend#1444: 커서 기반 동문 디렉터리 API와 관련 DTO, 서비스, 저장소 변경이 동일합니다.

Suggested labels: bug, D-0

Suggested reviewers: kyeoungwoon

✨ Finishing Touches
📝 Generate docstrings
  • Create stacked PR
  • Commit on current branch
🧪 Generate unit tests (beta)
  • Create PR with unit tests
  • Commit unit tests in branch dev

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.

@github-actions

github-actions Bot commented Aug 6, 2026

Copy link
Copy Markdown

Test Results Summary

175 files  175 suites   15s ⏱️
586 tests 586 ✅ 0 💤 0 ❌
606 runs  606 ✅ 0 💤 0 ❌

Results for commit 983422f.

@github-actions

github-actions Bot commented Aug 6, 2026

Copy link
Copy Markdown

Migration Result 📦

Status Count
✅ Success 91
❌ Failed 0
⏳ Pending 0

Schema Validation Result 🔍

✅ No schema mismatches detected.

Results for commit 983422f

♻️ This comment has been updated with latest results.

@bingle625 bingle625 changed the title RELEASE Release v2.7.0 Aug 6, 2026
@bingle625
bingle625 merged commit 3113f48 into main Aug 6, 2026
17 of 18 checks passed
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Projects

None yet

Development

Successfully merging this pull request may close these issues.

4 participants