Conversation
* [fix] #128 prefilght 요청 허용 * [fix] #128 로컬 환경 secret 파일 경로 설정 추가 * [test] #128 테스트를 위한 빌드 브랜치 변경 * [refactor] #128 백엔드를 도커에 추가 * [refactor] #128 elasticsearch 메모리 낮추기 * [fix] #128 depends_on 조건 완화 * [fix] #128 Dockerfile 수정 * [fix] #128 strip_components 제거 * [fix] #128 도커 이미지 이름 오류 수정 * [fix] #128 도커 이미지 이름 오류 수정 * [fix] #128 elasticsearch 환경변수 추가 * [fix] #128 deploy 브랜치 dev로 변경
* [feat] #130 서버에 nginx 컨테이너 추가 및 설정 파일 작성 * [feat] #130 https 적용 * [feat] #130 deploy 코드에 nginx.conf 추가 * [feat] #130 cors에 프론트엔드 주소 추가 * [feat] #130 프록시 신뢰 설정 추가 * [refactor] #130 환경에 따라 리다이렉트 주소 동적으로 바꾸기 * [fix] #130 deploy 브랜치 dev로 변경 * [refactor] #130 커넥션 및 톰캣 스레드 제한 * [refactor] #130 도커 메모리 제한 설정 및 es 리포지토리 스캔 범위 최적화 * [refactor] #130 도커 메모리 제한 설정 해제
* [feat] #130 fcm 토큰 삭제 api 추가 * [feat] #130 배포 시 fcm 시크릿 json 파일 생성 * [fix] #130 탈퇴 후 간편로그인 재가입 문제 해결 * [fix] #130 탈퇴 시 관심 카테고리 전부 삭제 * [fix] #130 탈퇴 시 알림 내역 및 설정 초기화 * [fix] #130 비밀번호 설정 문구 수정 * [refactor] #130 구글smtp 메일에서 resend로 변경 * [fix] #130 이메일 전송 시 이름 MODI로 수정 * [test] #130 빌드 테스트 * [test] #130 테스트 후 dev 브랜치로 변경
* [perf] #139 es VM 분리 및 prod/local docker-compose 정리 * [perf] #139 연속 push 문제 해결 및 dns 주기적으로 다시 조회 * [perf] #139 런타임 개선을 위한 prod 파일 추가 및 스레드풀 설정 * [perf] #139 대시보드 Redis 캐시와 Hikari 커넥션 풀 적용 * [fix] #139 캐시 직렬화 방식 수정 * [fix] #139 거래내역 내보내기 최대 기간 설정 및 템플릿 변경 * [fix] #139 삭제된 계좌는 스냅샷으로 가져오도록 수정 * [fix] #139 dev 브랜치로 변경
* chore: Remove unused frontend folder from Backend * [feat] #143 어드민 공동구매 오류수정 및 기능추가
* [fix] 예산 비교 사용자 집합을 종합 비교와 일치하도록 수정 종합 비교에는 나오지만 예산 비교에는 안 보이던 공개 사용자 노출. Budget 레코드 유무와 무관하게, 해당 월에 수입/지출/예산 활동이 하나라도 있는 공개 사용자를 포함하도록 findPublicMonthlyTotals 재작성 (예산 없으면 0원). PublicBudgetFilterRequest 를 단일 year/month 로 정리하고 관련 테스트 갱신. Co-Authored-By: Claude Opus 4.7 <noreply@anthropic.com> * [fix] #140 게시판 관련 오류 수정 --------- Co-authored-by: Claude Opus 4.7 <noreply@anthropic.com>
* [fix] 예산 비교 사용자 집합을 종합 비교와 일치하도록 수정 종합 비교에는 나오지만 예산 비교에는 안 보이던 공개 사용자 노출. Budget 레코드 유무와 무관하게, 해당 월에 수입/지출/예산 활동이 하나라도 있는 공개 사용자를 포함하도록 findPublicMonthlyTotals 재작성 (예산 없으면 0원). PublicBudgetFilterRequest 를 단일 year/month 로 정리하고 관련 테스트 갱신. Co-Authored-By: Claude Opus 4.7 <noreply@anthropic.com> * [fix] #140 게시판 관련 오류 수정 --------- Co-authored-by: Claude Opus 4.7 <noreply@anthropic.com>
로그인 성공 후 redirect_uri 쿠키값을 무검증으로 사용해 임의 URI 로 토큰을 전송할 수 있던 open redirect 취약점 보완. OAuth2RedirectUriValidator 로 화이트리스트 정확 일치 검증, 미등록 값은 기본 URI 로 fallback + WARN 로그. - OAuth2RedirectUriValidator 및 단위 테스트 신설 (4 케이스) - application.yml 에 authorized-redirect-uris 목록 (web/admin/prod/native) - OAuth2SuccessHandler 가 validator 경유하도록 변경 Co-authored-by: Claude Opus 4.7 <noreply@anthropic.com>
…으로 복원 (#160) 이전 세션의 리팩터(AuthService.issueTokens 도입) 는 별도 브랜치로 원복됐는데 OAuth2SuccessHandler 만 그 호출 흔적을 유지하고 있어 빌드가 깨졌음. 기존 HEAD 패턴대로 jwtTokenProvider.createAccessToken/createRefreshToken + refreshTokenRepository.save 직접 호출로 복원. Co-authored-by: Claude Opus 4.7 <noreply@anthropic.com>
* [perf] ACC-161 DB 조회 성능 개선 및 JDBC batch 활성화 Board/Comment 사용자 기반 조회와 벌크 update 성능을 개선하고 Testcontainers 기반 벤치마크로 정량 검증. - Board `idx_board_user_type (user_id, type)` 복합 인덱스 추가 - Comment `idx_comment_user (user_id, created_at)` 복합 인덱스 추가 → ORDER BY created_at DESC 를 인덱스로 흡수해 filesort 제거 - Hibernate JDBC batch 활성화 (batch_size=20, order_inserts/updates, batch_versioned_data, default_batch_fetch_size=100) - prod 배포용 마이그레이션 SQL 스냅샷 추가 (docs/db/migration/2026-08-05_add_user_indexes.sql) 측정 결과 (Testcontainers MySQL 8, Board 10k / Comment 100k): - Board findByUserIdAndType: 3.54 → 1.57 ms (-55.5%) - Comment findByUserId ORDER BY created_at DESC LIMIT 20: 22.01 → 0.65 ms (-97.1%) - Comment 200건 bulk update: SQL 4020 → 40 (-99.0%), wall clock 37.58 → 27.77 ms (-26.1%) 벤치마크 인프라: - src/test/java/.../benchmark/DbIoBenchmark.java (Testcontainers, @tag "benchmark") - scripts/run-bench.sh (2-pass 실행 스크립트) - docs/benchmark/results/2026-08-05_db_io.csv (원본 데이터) - Testcontainers 1.20.4 로 upgrade (Docker Engine 29 호환) 사전 존재하던 grouppruchase 테스트 4파일 컴파일 오류로 임시 exclude 처리 (별도 이슈에서 수정 필요). Co-authored-by: Claude Opus 4.7 <noreply@anthropic.com> * [perf] ACC-161 Notification/UserDevice/Account DB I/O 개선 및 FCM 토큰 검증 전 도메인 감사에서 도출된 High 3종을 병렬 적용하고 Testcontainers 벤치마크로 정량 검증. 계정 삭제 시 알림 벌크 UPDATE 압축, 알림/디바이스/계좌 조회 인덱스 부착, FCM 토큰 등록 시 형식 검증 추가. - Notification bulk soft-delete: findAll+deleteAll 루프 → 단일 UPDATE (@SQLDelete 정합성 유지 위해 UPDATE deleted_at 로 구현) - Notification `idx_notification_user (user_id)` 인덱스 추가 - UserDevice `idx_userdevice_user (user_id)` 인덱스 추가 + `findByUser(User)` → `findByUserId(Long)` 로 전환 - Account `idx_account_user (user_id)`, `idx_account_user_name` 복합 인덱스 추가 - UserDeviceService.registerToken 에 FCM 토큰 형식 검증 추가 (길이 100~250, 정규식 ^[A-Za-z0-9_:\-]+$). S4 요금폭탄 완화. - INVALID_FCM_TOKEN 에러 코드 신설 - prod 배포용 마이그레이션 SQL 추가 (docs/db/migration/2026-08-05_add_account_notification_indexes.sql) 측정 결과 (Testcontainers MySQL 8, 3회 반복 평균): - H1 Notification bulk soft-delete: wall clock 23.57 → 5.67 ms (-75.9%), SQL 2010 → 10 (-99.5%) - H2 Notification 조회 (20k rows): 12.22 → 1.72 ms (-85.9%) - H2 UserDevice 조회 (10k rows, hot path): 1.56 → 0.70 ms (-55.2%) - H3 Account 조회 (3k rows): 1.16 → 0.68 ms (-41.5%) 벤치마크 인프라 확장: - DbIoBenchmark 에 R3/R4/R5/U2 시나리오 및 시드 4종 추가 - docs/benchmark/results/2026-08-05_db_io.csv 에 append - 재현: ./gradlew bench -Dbench.run.scenarios=R3,R4,R5,U2 전 도메인 감사 리포트 claude.md 에 신설 (D1~D10, 공통 안티패턴, Medium 백로그). Co-authored-by: Claude Opus 4.7 <noreply@anthropic.com> --------- Co-authored-by: Claude Opus 4.7 <noreply@anthropic.com>
전 도메인 감사에서 도출된 Medium 백로그 6건을 A/B/C 배치로 진행. 실 코드 재확인으로 D5/D7 은 오탐으로 판정하고 취소, 실효 4건 처리. **A. 인덱스 확장 (D4, D9)** - GroupPurchase `idx_gp_status_category_deadline (status, category_id, deadline)` → findActiveGroupPurchases 의 filter + ORDER BY deadline 을 인덱스로 흡수 → filesort 제거 - TransactionCategory `idx_txcategory_user_name_type (user_id, name, type)` → existsByUserIdAndNameAndType 등 카테고리 CRUD 중복 검증에 covering index **B. 벌크 소프트 삭제 통일 (D8)** - InterestCategoryRepository.softDeleteByUserId (@Modifying UPDATE) - FixedTransactionRepository.softDeleteByAccountId / softDeleteByTransactionCategoryId - InterestCategoryService / AccountService / CategoryService 의 `findAll + forEach delete` 3곳을 단일 UPDATE 로 치환 - FixedTransaction 인덱스 추가: idx_fixed_transaction_account, idx_fixed_transaction_category (bulk UPDATE WHERE 조건 커버) - InterestCategory 인덱스 추가: idx_interest_user **C. 정확성 수정 (D6)** - BudgetService.copyPlan 에서 카테고리 삭제된 예산의 transactionCategory NPE 위험 → resolveCategoryId 헬퍼 재사용 (snapshot fallback) **취소 (오탐)** - D5 Budget @SQLRestriction 부재: 이미 존재. native workaround 는 restore-on-recreate 흐름용 (버그 아님). - D7 Compare 캐시 evict 누락: 30분 TTL 은 warm-up 스케줄과 정합된 의도적 설계. 개별 write allEntries evict 시 cross-user warm hit 파괴. 측정 결과 (Testcontainers MySQL 8): - D4 GroupPurchase filter+sort (10k): 4.66 → 1.61 ms (-65.4%), filesort 제거 - D9 TransactionCategory exists (2k): rows 검사 2000 → 1 (-99.95%), covering - D8-1 InterestCategory bulk soft-delete (100건): 18.42 → 6.73 ms (-63.5%), SQL 1010 → 10 (-99.0%) - D8-2 FixedTx bulk soft-delete (100건): 16.18 → 5.09 ms (-68.6%), SQL 1010 → 10 (-99.0%) prod 마이그레이션 SQL: - docs/db/migration/2026-08-05_add_grouppurchase_txcategory_indexes.sql - docs/db/migration/2026-08-05_add_interest_fixed_indexes.sql 벤치마크 인프라: - DbIoBenchmark 에 R6/R7/U3/U4 시나리오 및 seed 4종 (GroupPurchase 10k, TransactionCategory 2k, InterestCategory 6k, FixedTransaction 6k) 추가 - CSV append: docs/benchmark/results/2026-08-05_db_io.csv claude.md 감사 리포트 갱신 (D5/D7 오탐 사유 명시). BudgetServiceTest 3건 사전 존재 실패는 이번 변경과 무관 (별도 이슈 필요). Co-authored-by: Claude Opus 4.7 <noreply@anthropic.com>
…emplate (#180) **Profile 분리 (P0-1)** - application.yml 을 공통 설정만 남기고 profile-specific 값 분리 - `spring.profiles.active: ${SPRING_PROFILES_ACTIVE:local}` 명시 (default=local) - 제거: ddl-auto, show-sql, format_sql, hikari pool size, CORS 목록, mail.dev-log-code - application-local.yml (신규) - ddl-auto: update / show-sql: true / hikari 5 - CORS: localhost:5173/5174/capacitor + http://localhost - dev-log-code: true - application-prod.yml - dev-log-code: false 추가 (기존 validate/pool 20/prod CORS 유지) - docker-compose.local.yml: SPRING_PROFILES_ACTIVE=local 명시 (default 의존 해소) **Secret 온보딩 (A안, P3-4 부분)** - application-secret.yml.example 커밋 (placeholder 값) - 신규 개발자: 파일 복사 후 실제 값 채우기 - application-secret.yml 자체는 이미 .gitignore 등록되어 있음 (커밋 이력 없음 확인) **추가 발견 (P0-9 신규 등록)** - SecurityConfig CORS 바인딩 pre-existing 버그로 로컬 부팅 지속 실패 - 도입 커밋 f9edfe3 (#162, 2026-08-06) 이후 재현 - 프로파일 분리 검증 중 발견. 별도 이슈로 해결 예정 - CLAUDE.md P0-9 항목에 원인/완화 방안 기록 **검증 상태** - Profile 분리 자체는 파일 매핑 / config loading 순서 확인 완료 - prod validate 검증은 P0-9 해결 후 재수행 필요 Co-authored-by: Claude Opus 4.7 <noreply@anthropic.com>
rlatjddms
approved these changes
Sep 8, 2026
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.
dev 브랜치에서 main 브랜치로 이관 처리