Conversation
- auth 모듈을 core, device, member, mobile, oauth, security, ticket, token, web 경계로 재구성 - 컨트롤러의 인증 분기와 예외 처리 로직을 application service로 이동 - 기존 웹 HttpOnly 쿠키와 XSRF 인증 계약을 유지 - PKCE S256 기반 모바일 OAuth transaction과 일회용 code 교환을 구현 - 모바일 login, token, refresh, logout, signup API를 추가 - 로그인 계정 연동과 설정 화면 소셜 추가 연동을 지원 - Bearer AT를 우선 검증하고 헤더가 없을 때만 웹 AT 쿠키로 fallback - AT에 session id를 포함하고 provider와 session id를 타입화된 인증 문맥으로 제공 - 기존 RT rotation, 중복 refresh 수렴과 재사용 탐지 정책을 모바일에서도 공유 - 모바일 guest credential 발급, 해시 저장, 만료 정리와 발급 제한을 구현 - 검증된 Bearer와 guest credential 요청만 선택적으로 CSRF에서 제외 - 신뢰 프록시 체인과 HMAC 기반 클라이언트 IP 식별을 적용 - OAuth code, state, token과 ticket을 요청 로그에서 마스킹 - Apple OAuth 사용자 처리와 동적 client secret 생성을 구현 - 인증 예외와 요청 검증 오류를 글로벌 예외 처리로 통합 - 모바일 실기기용 외부 presign endpoint를 지원 - 모바일 guest와 Apple provider용 마이그레이션 및 회귀 테스트를 추가
- 검색과 즐겨찾기를 전체 개수와 페이지 수를 포함하는 PageResponse로 변경 - 검색과 즐겨찾기의 페이지 크기를 서버에서 5개로 고정 - 한 글자 지역명 prefix 검색과 과거 지역명 정규화를 지원 - 검색 내용과 전체 개수 조회를 QueryDSL로 구현 - 즐겨찾기 단순 페이지 조회는 Spring Data JPA 파생 쿼리로 처리 - 최근 7일 고유 제보자 수를 우선하는 인기 지역 TOP 20을 산정 - 제보 수, 최신 제보 시각과 지역 ID를 후순위 정렬 기준으로 적용 - 인기 순위를 10분 단위 DB 스냅샷으로 저장 - 계산 시각, 집계 구간과 알고리즘 버전을 기록 - 이전 순위, 변화량과 NEW·UP·DOWN·SAME 상태를 저장 - 인기 TOP 20을 동일 스냅샷의 원자 응답으로 제공 - 프론트가 5개씩 표시하도록 pageSize와 totalPages를 제공 - 지역 검색 및 인기 순위용 마이그레이션과 회귀 테스트를 추가
- 개발과 운영 배포에 환경별 Apple OAuth secret 전달을 추가 - Apple client, team, key와 private key 설정 함께 검증 - Apple secret이 일부만 설정된 경우 배포 중단 - Apple 설정이 모두 존재할 때만 apple Spring profile 활성화 - Compose가 주입된 SPRING_PROFILES_ACTIVE를 사용하도록 변경 - 모바일 콜백과 인기 지역 정책이 포함된 config 서브모듈 버전 갱신
- 기존 계정 소유권 확인에 사용한 재인증 provider와 최종 로그인 provider 분리 - 웹 계정 연동 완료 시 신규 소셜 provider로 AT와 RT 발급 - 모바일 계정 연동 완료 및 code 교환 시 신규 소셜 provider로 토큰 발급 - OAuth 신원 확인 단계에서는 lastLoginAt 갱신하지 않음 - 웹 토큰 발급과 모바일 code 교환 시 최종 provider의 로그인 시각 기록 - 설정 화면의 단순 소셜 연동과 연동 재인증은 로그인 이력에서 제외 - refresh는 로그인 시각을 갱신하지 않는 기존 정책 유지 - 웹/모바일 연동 provider와 소셜 로그인 시각 회귀 테스트 추가
- 제보 목록의 이미지 연관관계를 루트 페이징 후 QueryDSL fetch join으로 일괄 조회 - 컬렉션 fetch join의 메모리 페이징을 방지하고 이미지 조회 N+1 제거 - 제보 작성자 회원 정보를 ID 목록으로 일괄 조회해 회원 조회 N+1 제거 - 소셜 계정 조회 시 member 연관관계를 QueryDSL fetch join으로 로딩 - 즐겨찾기와 소셜 연동의 동시 요청에서 즉시 flush해 제약 위반을 트랜잭션 안에서 감지 - 명명된 고유 제약 충돌을 FAVORITE_ALREADY_EXISTS 등 도메인 오류로 변환 - 회원별 소셜 제공자 중복과 동일 인기 스냅샷 중복 생성을 DB 제약으로 차단 - DB 비관적 잠금과 계산 구간 버킷으로 다중 인스턴스의 인기 순위 갱신 직렬화 - 동시성 충돌, 스냅샷 멱등성 및 일괄 조회 회귀 테스트 추가
- gradle.properties를 애플리케이션 버전의 단일 기준점으로 추가 - 모든 Gradle 모듈과 실행 JAR에 0.2.0 버전 적용 - 재현 가능한 Spring build-info를 생성하고 health 응답에 버전 노출 - Docker 이미지에 애플리케이션 버전과 Git revision OCI label 추가 - dev와 prod 이미지에 버전 및 커밋 SHA 기반 불변 태그 발급 - 운영 이미지에 0.2.0 버전 별칭과 prod 최신 별칭 유지 - Compose가 APP_IMAGE_TAG를 사용해 정확한 빌드 이미지를 배포하도록 변경 - health 버전 응답 회귀 테스트 추가
- 인증과 피드백 IP 판별의 하드코딩된 프록시 대역 제거 - 프록시 미설정 시 빈 목록으로 처리해 전달 헤더를 신뢰하지 않도록 변경 - JWT 인증, RT 재사용 탐지, 모바일 OAuth와 CSRF 오류 분기를 얼리 리턴으로 정리 - 연속 조건문과 변수/실행 로직 사이의 공백 규칙 적용 - 단일 반환문과 최종 반환문의 공백 규칙을 전체 Java 소스에 적용 - 탭 들여쓰기를 4칸 공백으로 통일 - 테스트의 하드코딩된 IP 리터럴 제거 - 신뢰 프록시 설정이 포함된 config 서브모듈 버전 갱신
|
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment
Add this suggestion to a batch that can be applied as a single commit.This suggestion is invalid because no changes were made to the code.Suggestions cannot be applied while the pull request is closed.Suggestions cannot be applied while viewing a subset of changes.Only one suggestion per line can be applied in a batch.Add this suggestion to a batch that can be applied as a single commit.Applying suggestions on deleted lines is not supported.You must change the existing code in this line in order to create a valid suggestion.Outdated suggestions cannot be applied.This suggestion has been applied or marked resolved.Suggestions cannot be applied from pending reviews.Suggestions cannot be applied on multi-line comments.Suggestions cannot be applied while the pull request is queued to merge.Suggestion cannot be applied right now. Please check back later.



주요 변경 사항