Conversation
[CHORE/#1] 공통 인프라 초기 세팅
[CHORE/#4] application.yml 설정 정비, build.gradle 의존성 주입
* chore: macOS metadata .gitignore 추가(.DS_Store) * feat: Member 엔티티 및 Repository 구현 * feat: 아이디 중복 확인 API 구현 * docs: 아이디 중복 확인 API Swagger 명세 추가 * refactor: 아이디 중복 확인 응답 타입을 ApiResponse<Void>로 수정 * refactor: @SQLRestriction 도입 및 탈퇴 회원 포함 중복 체크 로직 수정 * docs: Swagger 예시 응답 형식 수정 * refactor: 서비스 레이어 CQRS 적용 * chore: .gitignore에서 OS 전용 파일 제거 * refactor: MemberRepository default 메서드 도입 및 입력값 공백 제거 처리
## 🔗 Related Issue <!-- 이슈 번호를 작성하여 종료시켜주세요 --> - Closes #18 ## 📝 Summary <!-- 작업한 기능을 설명해주세요 --> Swagger 접속을 위해 Spring Security를 설정했습니다. - build.grade에 Spring Security 의존성 추가 - Swagger 관련 주소 접속 허용 ## 🔄 Changes <!-- 구체적으로 어떤 파일/로직이 변경되었는지 체크해주세요 --> - [ ] API 변경 (추가/수정) - [ ] 데이터 및 도메인 변경 (DB, 비즈니스 로직) - [x] 설정 또는 인프라 관련 변경 - [ ] 리팩토링 ## 💬 Questions & Review Points <!-- 리뷰어가 특별히 봐주었으면 하는 부분이 있다면 작성해주세요 --> Swagger 접속을 위해 JWT 및 다른 기능들은 제외하고 SecurityConfig만 먼저 올립니다! 다른 기능들은 [기존 PR](https://github.com/Valuedi/Valuedi_Backend/pull/14)에서 확인해주세요! ## 📸 API Test Results (Swagger) <!-- API 테스트 스크린샷 첨부 --> <img width="1325" height="713" alt="스크린샷 2026-01-15 오후 10 27 24" src="https://github.com/user-attachments/assets/763ce258-99b4-4810-bad1-4bb4a0bf36a9" /> ## ✅ Checklist - [x] API 테스트 완료 - [x] 테스트 결과 사진 첨부 - [x] 빌드 성공 확인 (./gradlew build)
## 🔗 Related Issue <!-- 이슈 번호를 작성하여 종료시켜주세요 --> - Closes #16 ## 📝 Summary <!-- 작업한 기능을 설명해주세요 --> - 금감원(FSS) 적금 OpenAPI 연동(WebClient/설정값) 기반 구축 - FSS 응답 DTO + 적금 목록 응답 DTO 작성, Converter로 목록 응답 변환 로직 구현 - 외부 API 호출 실패/예외 상황에 대한 공통 처리 기준을 정리하여 실패 응답이 일관되게 반환되도록 개선 ## 🔄 Changes <!-- 구체적으로 어떤 파일/로직이 변경되었는지 체크해주세요 --> - [x] API 변경 (추가/수정) - [ ] 데이터 및 도메인 변경 (DB, 비즈니스 로직) - [ ] 설정 또는 인프라 관련 변경 - [ ] 리팩토링 ## 💬 Questions & Review Points <!-- 리뷰어가 특별히 봐주었으면 하는 부분이 있다면 작성해주세요 --> 현재 금융 MBTI 기능이 아직 머지되지 않아 추천 로직 및 제미나이 연동은 포함되지 않습니다. 이번 PR에서는 금감원 OpenAPI 연동과 적금 상품 목록 조회 기능만 구현했습니다. 추후 금융 MBTI 기능이 반영되면, 추천 기능까지 확장할 예정입니다. ## 📸 API Test Results (Swagger) <!-- API 테스트 스크린샷 첨부 --> <img width="1744" height="1375" alt="image" src="https://github.com/user-attachments/assets/f567a5e2-2921-481b-b440-bdc32f4e5109" /> ## ✅ Checklist - [x] API 테스트 완료 - [x] 테스트 결과 사진 첨부 - [x] 빌드 성공 확인 (./gradlew build) --------- Co-authored-by: leesiyeon <sylee3182@gmail.com>
## 🔗 Related Issue <!-- 이슈 번호를 작성하여 종료시켜주세요 --> - Closes #10 ## 📝 Summary <!-- 작업한 기능을 설명해주세요 --> 카카오 계정으로 Valuedi 서비스에 로그인/회원가입할 수 있도록 구현했습니다. - `member` 엔티티 ERD 변경사항 - `username` 필드가 기존에 `NOT NULL` 이었으나, 소셜 로그인 시 `username`이 존재하지 않아 `NULL`로 변경하였습니다. - 현재 기획 상 별도의 관리자 기능은 없으나, Spring Security 설정 및 `CustomUserDetails` 구현 시 권한 정보가 필요하여 `role` 필드를 추가하였습니다. - `FeignClient`를 이용한 카카오 인증/API 서버 통신 로직 구현 - 카카오 API 서버에서 받아오는 고유 ID, 이름, 생일, 성별 등의 정보를 바탕으로 회원가입 처리 구현 (`member` 및 `member_auth_provider` 엔티티 생성) - 카카오 계정으로 로그인 시 JWT 발급 (Access Token & Refresh Token) - Spring Security 설정 및 `JwtAuthFilter` 구현 ## 🔄 Changes <!-- 구체적으로 어떤 파일/로직이 변경되었는지 체크해주세요 --> - [x] API 변경 (추가/수정) - [ ] 데이터 및 도메인 변경 (DB, 비즈니스 로직) - [ ] 설정 또는 인프라 관련 변경 - [ ] 리팩토링 ## 💬 Questions & Review Points <!-- 리뷰어가 특별히 봐주었으면 하는 부분이 있다면 작성해주세요 --> 현재 코드에서는 토큰을 발급해주기만 하고 Redis에 저장한다던가, Refresh Token을 이용해 Access Token을 재발급 해주는 기능은 구현되어 있지 않습니다. 나머지 기능들은 해당 PR 머지 후에 작업하겠습니다 카카오 로그인 및 JWT 관련 환경변수들은 노션에 `환경 변수` 페이지에 정리해놨습니다! 그리고 카카오 로그인 API는 Swagger로 테스트하는거 보다 영상으로 보는게 더 좋을거 같아서 영상도 함께 첨부했습니다! ## 📸 API Test Results (Swagger) <!-- API 테스트 스크린샷 첨부 --> <img width="1312" height="796" alt="스크린샷 2026-01-12 오후 8 30 24" src="https://github.com/user-attachments/assets/64b89d15-a287-48cc-a51b-1637e3791b72" /> <img width="1315" height="813" alt="스크린샷 2026-01-12 오후 8 30 51" src="https://github.com/user-attachments/assets/1e87bb61-dea7-48a3-9ce9-5b2d2d8c09f1" /> https://github.com/user-attachments/assets/93d6cfc1-e8da-4fc9-8c8c-b10f98ac24a5 - **테스트 시나리오**: - `/auth/oauth/kakao/login` 호출 (302 Redirect 확인) - 카카오 로그인 페이지 진입 및 로그인 - 콜백 API를 통해 JWT(Access/Refresh)가 정상 발급되는지 확인 ## ✅ Checklist - [x] API 테스트 완료 - [x] 테스트 결과 사진 첨부 - [x] 빌드 성공 확인 (./gradlew build)
## 🔗 Related Issue - Closes #21 ## 📝 Summary ### Finance MBTI 테스트 제출 API - 테스트 제출 시 서버 기준의 활성 문항 목록을 기준으로 검증 - 첫검사와 재검사를 동일한 API로 통합하여 처리 - 재검사 전용 엔드포인트를 추가하지 않고, 테스트 재제출 시 기존 active 결과를 비활성화(isActive=false) 하고 새 결과를 active로 저장하는 방식으로 구현 - answers 데이터에 대한 예외처리를 서비스에 추가 1. questionId 중복 제출 여부 2. 활성화되지 않은 문항 ID 포함 여부 3. choiceValue가 1~5 범위를 벗어나는 경우 4. answers 개수와 활성 문항 개수 동일 여부 ### MBTI 결과 조회 - member 기준으로 항상 최신(active) 결과 1건만 조회 - 이전 결과는 히스토리로 남고, 조회 대상에서는 제외 ### MBTI 유형 정보 조회 - 각 MBTI 유형(16유형)에 대해 영문 타입명/축 이름을 함께 제공 ### MBTI 유형별 질문 조회 - 4가지 영역별 질문 12개 조회 가능 ## 🔄 Changes - [x] API 변경 (추가/수정) - [ ] 데이터 및 도메인 변경 (DB, 비즈니스 로직) - [ ] 설정 또는 인프라 관련 변경 - [ ] 리팩토링 ## 💬 Questions & Review Points 재검사의 경우 딱히 횟수 제한이나, mbti 변경시 비교 화면이 없어서 굳이 새 엔드포인트 만들 필요는 없다고 판단해서 테스트 엔드포인트 그대로 사용합니다!! ## 📸 API Test Results (Swagger) ### POST /api/finance-mbti/test <img width="1962" height="1284" alt="image" src="https://github.com/user-attachments/assets/3d6ba5f4-4f35-4ba9-9867-9a5dc07057e6" /> <img width="1968" height="1162" alt="image" src="https://github.com/user-attachments/assets/63dcadae-0b1b-4dd2-b4d9-f92346667269" /> ### GET /api/finance-mbti/result <img width="2005" height="1263" alt="image" src="https://github.com/user-attachments/assets/e11fcbb6-74d6-448b-a6b6-4a5200993444" /> ### GET /api/finance-mbti/questions <img width="2074" height="1220" alt="image" src="https://github.com/user-attachments/assets/c6ac7855-9d9d-4a8d-b36b-83c7578e1624" /> ### GET /api/finance-mbti/result/type <img width="2074" height="1220" alt="image" src="https://github.com/user-attachments/assets/7c7b8733-03e6-4d39-ba9d-842fe02e201c" /> ## ✅ Checklist - [x] API 테스트 완료 - [x] 테스트 결과 사진 첨부 - [x] 빌드 성공 확인 (./gradlew build) --------- Co-authored-by: JeongGyul <60035227+JeongGyul@users.noreply.github.com>
## 🔗 Related Issue <!-- 이슈 번호를 작성하여 종료시켜주세요 --> - Closes #12 ## 📝 Summary <!-- 작업한 기능을 설명해주세요 --> - CODEF 의존성 추가: EasyCodef 라이브러리 및 관련 의존성 설정 - 외부 API 통신 모듈 추가: FeignClient 기반 CODEF API 클라이언트 구현 (계정 관리, 은행/카드 조회) - 카드사/은행 연동 API 구현: 금융사 계정 연동 (Create/Add), 연동된 계좌/카드 목록 조회 기능 구현 - 연동된 은행 목록 조회 API 구현: DB 기반 연동 은행 목록, CODEF API 기반 실제 카드 목록 조회 - 연동된 카드 목록 조회 API 구현: CODEF 보유카드 조회 API 연동 및 응답 파싱 ## 🔄 Changes <!-- 구체적으로 어떤 파일/로직이 변경되었는지 체크해주세요 --> - [X] API 변경 (추가/수정) - [ ] 데이터 및 도메인 변경 (DB, 비즈니스 로직) - [ ] 설정 또는 인프라 관련 변경 - [ ] 리팩토링 ## 💬 Questions & Review Points <!-- 리뷰어가 특별히 봐주었으면 하는 부분이 있다면 작성해주세요 --> ## 📸 API Test Results (Swagger) <img width="1784" height="1161" alt="image" src="https://github.com/user-attachments/assets/0880b3f8-ea22-444e-9286-15f54a97dd1e" /> <img width="1741" height="1281" alt="image" src="https://github.com/user-attachments/assets/07bd230d-6d7e-40c7-8005-9aaf1065aeb4" /> <img width="1754" height="1149" alt="image" src="https://github.com/user-attachments/assets/0fb65b26-1f0c-47b3-9246-7ffecaad395c" /> <img width="2289" height="1084" alt="image" src="https://github.com/user-attachments/assets/4e555d6b-d080-4696-b12b-9b38f7c1da1d" /> <img width="2222" height="1230" alt="image" src="https://github.com/user-attachments/assets/b6679af8-c1eb-45cc-bf53-565b28987e16" /> ## ✅ Checklist - [X] API 테스트 완료 - [X] 테스트 결과 사진 첨부 - [X] 빌드 성공 확인 (./gradlew build)
## 🔗 Related Issue <!-- 이슈 번호를 작성하여 종료시켜주세요 --> - Closes #27 ## 📝 Summary <!-- 작업한 기능을 설명해주세요 --> 로컬 회원가입 시 사용자가 입력한 이메일로 인증번호를 발송하고 검증하는 API를 구현했습니다. - 이메일 발송을 위한 Gmail SMTP 설정 - 인증번호(6자리 난수) 생성 후 3분 간 Redis 저장 및 `JavaMailSender`를 이용한 메일 전송 - 사용자 이메일 및 인증번호를 이용한 검증 - 인증된 사용자 이메일 Redis 저장 (회원가입 시 필요) ## 🔄 Changes <!-- 구체적으로 어떤 파일/로직이 변경되었는지 체크해주세요 --> - [x] API 변경 (추가/수정) - [ ] 데이터 및 도메인 변경 (DB, 비즈니스 로직) - [ ] 설정 또는 인프라 관련 변경 - [ ] 리팩토링 ## 💬 Questions & Review Points <!-- 리뷰어가 특별히 봐주었으면 하는 부분이 있다면 작성해주세요 --> 현재는 이메일 발송을 제 개인 Gmail로 하는데, 상황에 따라 밸류디 전용 Gmail 생성 또는 Naver Cloud Outbound Mailer/AWS SES 사용을 고려해보면 좋을거 같습니다! 이번 PR이 파일 바뀐게 많이 없어서, 가급적 빠르게 머지 하고 로컬 로그인/회원가입 한번에 작업하겠습니다! ## 📸 API Test Results (Swagger) <!-- API 테스트 스크린샷 첨부 --> <img width="1428" height="811" alt="스크린샷 2026-01-19 오전 12 26 52" src="https://github.com/user-attachments/assets/2f50f120-7de2-41cf-998c-501bb1393515" /> <img width="1470" height="956" alt="스크린샷 2026-01-19 오전 12 22 20" src="https://github.com/user-attachments/assets/dc975963-84cb-40dc-8fe3-835b987d578d" /> <img width="1426" height="809" alt="스크린샷 2026-01-19 오전 12 27 24" src="https://github.com/user-attachments/assets/9fd601a1-b55a-4a35-ade4-5c9fae82cb8d" /> <img width="1470" height="956" alt="스크린샷 2026-01-19 오전 12 23 06" src="https://github.com/user-attachments/assets/22351fa1-130d-4756-9647-20e5d9b2e835" /> <img width="994" height="574" alt="스크린샷 2026-01-19 오전 12 23 34" src="https://github.com/user-attachments/assets/92198142-7003-4f57-af4a-e7a602dc4412" /> ## ✅ Checklist - [x] API 테스트 완료 - [x] 테스트 결과 사진 첨부 - [x] 빌드 성공 확인 (./gradlew build)
## 🔗 Related Issue <!-- 이슈 번호를 작성하여 종료시켜주세요 --> - Closes #28 ## 📝 Summary <!-- 작업한 기능을 설명해주세요 --> - 최신 약관 목록 조회 기능 구현 - `resources/data.sql`에 약관(terms) 초기 데이터 seed 추가 - `ON DUPLICATE KEY UPDATE`로 중복 실행 시에도 안전하게 갱신되도록 처리 - 사용자가 동의한 약관 조회 기능 구현 - 약관 동의 저장 기능 구현 ## 🔄 Changes <!-- 구체적으로 어떤 파일/로직이 변경되었는지 체크해주세요 --> - [x] API 변경 (추가/수정) - [ ] 데이터 및 도메인 변경 (DB, 비즈니스 로직) - [ ] 설정 또는 인프라 관련 변경 - [ ] 리팩토링 ## 💬 Questions & Review Points <!-- 리뷰어가 특별히 봐주었으면 하는 부분이 있다면 작성해주세요 --> 로그인/인증 기능이 아직 완료되지 않아, 임시로 memberId를 RequestParam으로 전달받아 회원 약관 정보를 조회/저장하도록 구현했습니다. 추후 인증(JWT) 적용 후에는 토큰에서 memberId를 추출하는 방식으로 변경할 예정입니다. ## 📸 API Test Results (Swagger) <!-- API 테스트 스크린샷 첨부 --> <img width="1717" height="284" alt="image" src="https://github.com/user-attachments/assets/027f120b-2701-42e4-9d57-cfab4094d2e7" /> <img width="1731" height="1323" alt="image" src="https://github.com/user-attachments/assets/10bf9f80-1e67-470b-9fc4-ac398198a001" /> <img width="1724" height="1378" alt="image" src="https://github.com/user-attachments/assets/da824eb3-1eaa-4189-8ac8-a8c7d9c99dbb" /> <img width="1730" height="1384" alt="image" src="https://github.com/user-attachments/assets/e876bdc3-1ed6-43d0-bc8f-1e54ebcda10a" /> <img width="1727" height="595" alt="image" src="https://github.com/user-attachments/assets/ef47d927-c65d-4d88-82ba-4a6dba167919" /> ## ✅ Checklist - [x] API 테스트 완료 - [x] 테스트 결과 사진 첨부 - [x] 빌드 성공 확인 (./gradlew build) --------- Co-authored-by: leesiyeon <sylee3182@gmail.com>
## 🔗 Related Issue <!-- 이슈 번호를 작성하여 종료시켜주세요 --> - Closes #3 ## 📝 Summary <!-- 작업한 기능을 설명해주세요 --> 로컬 로그인/회원가입 기능을 구현했습니다. - `Member` 엔티티 변경사항 - 회원가입 시 문자 인증 대신 이메일 인증으로 변경되어 `phone_number` 필드 삭제 - 탈퇴사유를 저장하는 `withdrawal_reason` 필드 및 Enum 타입 추가 - 회원가입 API 구현 - 컨트롤러 응답 시 `ResponseEntity.status(HttpStatus.CREATED)`를 사용하여 `201 Created`로 응답 - 이메일 인증번호 검증 후 Redis에 저장된 이메일만 회원가입 가능 - 비밀번호 암호화 하여 저장 - 로그인 API 구현 - 보안을 위해 아이디 또는 비밀번호 불일치 시 에러 응답 통일 (아이디 또는 비밀번호가 일치하지 않습니다.) - 로컬 로그인 및 기존에 구현했던 카카오 로그인에 리프레시 토큰을 Redis에 저장하는 로직 추가 - 로그인 시 엑세스 토큰, 리프레시 토큰, memberId 응답 ## 🔄 Changes <!-- 구체적으로 어떤 파일/로직이 변경되었는지 체크해주세요 --> - [x] API 변경 (추가/수정) - [ ] 데이터 및 도메인 변경 (DB, 비즈니스 로직) - [ ] 설정 또는 인프라 관련 변경 - [ ] 리팩토링 ## 💬 Questions & Review Points <!-- 리뷰어가 특별히 봐주었으면 하는 부분이 있다면 작성해주세요 --> 개발 당시에는 약관 쪽 엔티티 구현이 되지 않아 회원가입 시 약관 동의 내역을 저장하지 않았는데, 현재 올라와있는 #35 PR 머지 후 회원가입 로직에서 약관 동의 내역을 저장하도록 수정하면 될거 같습니다. 그리고 회원가입의 경우 HTTP 상태코드를 `201 Created`로 응답하고 싶어 일부러 `ResponseEntity.status(HttpStatus.CREATED)`를 사용했는데, 백엔드팀 개발 컨벤션에 따라 현재 코드 유지 또는`ApiResponse.onSuccess()` 방식으로 통일시키겠습니다. 이 PR 머지 후 토큰 재발급 및 로그아웃 등 다른 기능들 개발하겠습니다! ## 📸 API Test Results (Swagger) <!-- API 테스트 스크린샷 첨부 --> <img width="1427" height="809" alt="스크린샷 2026-01-20 오전 4 21 47" src="https://github.com/user-attachments/assets/57a5dc4d-93a5-4701-82b2-411e2ed7cf84" /> <img width="1428" height="811" alt="스크린샷 2026-01-20 오전 4 20 48" src="https://github.com/user-attachments/assets/4de1202b-45f6-4aca-aed7-ce32741b9945" /> <img width="1427" height="810" alt="스크린샷 2026-01-20 오전 4 22 02" src="https://github.com/user-attachments/assets/bb7daefe-3ea3-4070-8b4a-41e96e88e890" /> <img width="1425" height="810" alt="스크린샷 2026-01-20 오전 4 22 33" src="https://github.com/user-attachments/assets/cb85c530-c940-48ba-a295-26e35e9e9302" /> <img width="994" height="574" alt="스크린샷 2026-01-20 오전 4 22 55" src="https://github.com/user-attachments/assets/8f10d73b-cebb-44df-9769-4df863c39938" /> ## ✅ Checklist - [x] API 테스트 완료 - [x] 테스트 결과 사진 첨부 - [x] 빌드 성공 확인 (./gradlew build)
## 🔗 Related Issue <!-- 이슈 번호를 작성하여 종료시켜주세요 --> - Closes #38 ## 📝 Summary <!-- 작업한 기능을 설명해주세요 --> - CODEF 자산 조회 및 DB 저장 - CODEF에서 조회한 보유계좌, 보유카드, 카드 승인내역, 은행 수시입출 거래내역을 DB에 저장하는 구조로 변경하였습니다. - 승인내역과 거래내역의 경우 데이터가 많으므로 비동기로 처리되도록 구현하였습니다. - 승인내역과 거래내역의 경우 Bulk Insert 최적화를 통해 수백 건 이상의 Insert가 개별 쿼리로 실행되는 문제를 방지했습니다. - 일부 계좌 유형(청약, 펀드 등)은 거래 내역 조회가 불가능한데, 이 경우에도 전체 동기화가 실패하지 않도록 예외 처리를 추가했습니다. - 카드 목록 조회 방식 변경 - 카드 목록을 매번 외부 API로 조회하고 있음을 확인하여 이를 DB 조회 방식으로 변경하였습니다. - API 명세서(Notion)와 실제 구현된 URL이 다른 부분을 수정했습니다 ## 🔄 Changes <!-- 구체적으로 어떤 파일/로직이 변경되었는지 체크해주세요 --> - [X] API 변경 (추가/수정) - [X] 데이터 및 도메인 변경 (DB, 비즈니스 로직) - [ ] 설정 또는 인프라 관련 변경 - [x] 리팩토링 ## 💬 Questions & Review Points <!-- 리뷰어가 특별히 봐주었으면 하는 부분이 있다면 작성해주세요 --> 거래내역 도메인 관련 작업을 진행하기 위해 우선 DB 저장이 완료되어야 하는 상황이어서, 빠른 개발을 위해 최소한의 에러 처리 및 로깅만 적용하였습니다. 상세한 에러 처리는 이후 단계에서 보완할 예정입니다. ## 📸 API Test Results <!-- API 테스트 스크린샷 첨부 --> - 카드 승인내역 및 은행 수시입출 거래내역 DB 저장 확인 <img width="1483" height="819" alt="image" src="https://github.com/user-attachments/assets/a283a5f4-3513-40e7-a54e-cb657ce0950d" /> <img width="1483" height="819" alt="image" src="https://github.com/user-attachments/assets/59e8ba7e-da62-4fc2-9dae-720d40c9ccf0" /> - 로그 성공 확인 <img width="1752" height="795" alt="image" src="https://github.com/user-attachments/assets/f1770582-bd8c-4401-b473-26af8dcc2a32" /> ## ✅ Checklist - [x] API 테스트 완료 - [x] 테스트 결과 사진 첨부 - [x] 빌드 성공 확인 (./gradlew build)
## 🔗 Related Issue <!-- 이슈 번호를 작성하여 종료시켜주세요 --> - Closes #42 ## 📝 Summary <!-- 작업한 기능을 설명해주세요 --> ### 1. 금융사 연동 삭제 API 구현 - Codef API(v1/account/delete)를 호출하여 실제 금융사 연동 해제 처리 - CodefConnection 삭제 시 Cascade 설정 및 @SQLDelete 어노테이션을 통해 하위 엔티티(BankAccount, Card)도 자동으로 isActive = false 처리되도록 구현 - Goal(목표) 연동 해제 로직은 추후 구현을 위해 TODO 주석 처리 ### 2. Swagger / API 명세 정합성 개선 - 스웨거 예시 응답값과 실제 응답값 불일치 수정 - SpringDoc 3.x 표준에 맞게 DTO 필드의 `@Schema(required = true)` → `requiredMode = Schema.RequiredMode.REQUIRED`로 변경 - 요청/응답 DTO의 필드 의미가 명확히 드러나도록 응답 필드 구조 정리 ## 🔄 Changes <!-- 구체적으로 어떤 파일/로직이 변경되었는지 체크해주세요 --> - [x] API 변경 (추가/수정) - [ ] 데이터 및 도메인 변경 (DB, 비즈니스 로직) - [ ] 설정 또는 인프라 관련 변경 - [x] 리팩토링 ## 💬 Questions & Review Points <!-- 리뷰어가 특별히 봐주었으면 하는 부분이 있다면 작성해주세요 --> 연동 삭제 시 금융사 계좌가 함께 삭제되기 때문에, 계좌와 연결된 목표(Goal) 연동 해제 로직이 필요합니다. 해당 부분은 목표 도메인 PR(#37) merge 이후 추가 구현하여 반영할 예정입니다 ## 📸 API Test Results (Swagger) <!-- API 테스트 스크린샷 첨부 --> <img width="1614" height="1273" alt="image" src="https://github.com/user-attachments/assets/7547715c-9cbb-4d14-b7eb-558ecd5c6ee1" /> ## ✅ Checklist - [x] API 테스트 완료 - [x] 테스트 결과 사진 첨부 - [x] 빌드 성공 확인 (./gradlew build)
## 🔗 Related Issue <!-- 이슈 번호를 작성하여 종료시켜주세요 --> - Closes #39 ## 📝 Summary <!-- 작업한 기능을 설명해주세요 --> 카카오/로컬 회원가입 시 약관 동의 내역을 저장하는 로직을 추가하고, 로그아웃 및 토큰 재발급 API를 구현했습니다. - 약관 도메인 리팩토링 - 기존의 약관 동의 저장 API(`POST /api/terms/agree`)는 회원가입 API로 통합될 예정이었으나, 회원가입 시 약관을 동의하는 경우와 기존 회원이 동의했던 약관을 수정하는 경우가 둘 다 있다고 판단되어 기존의 API를 유지하고 서비스 로직을 두 가지 경우로 분리 - 로그인/회원가입 기능이 전부 구현됨에 따라 약관 동의 저장 API(`POST /api/terms/agree`) 호출 시 `memberId`를 `@AuthenticationPrincipal`로 추출하는 방식으로 변경 - 토큰 재발급 API - 기존의 로그인 로직은 사용자가 로그인을 하면 memberId, 엑세스 토큰, 리프레시 토큰을 함께 JSON Body로 응답했으나 보안을 위해 리프레시 토큰은 HttpOnly 쿠키에 담아 전달하고, JSON Body에는 memberId와 엑세스 토큰만 반환하도록 수정 - 토큰 재발급 API 호출 시 프론트엔드에서는 별도의 로직 없이 쿠키를 통해 리프레시 토큰을 서버로 전달 - 토큰을 재발급 받으면 엑세스 토큰 및 리프레시 토큰이 모두 재발급 되며, 엑세스 토큰이 만료되기 전에 재발급을 요청하면 기존 엑세스 토큰은 무효화 처리 - 로그아웃 API - 인증된 사용자가 로그아웃 API(`POST /auth/logout`)를 호출하면 Redis에서 리프레시 토큰을 삭제하고, 유효기간이 남은 엑세스 토큰은 Blacklist로 저장 - Blacklist로 등록된 엑세스 토큰으로 요청을 보낼 경우 `JwtAuthFilter`에서 차단 ## 🔄 Changes <!-- 구체적으로 어떤 파일/로직이 변경되었는지 체크해주세요 --> - [x] API 변경 (추가/수정) - [ ] 데이터 및 도메인 변경 (DB, 비즈니스 로직) - [ ] 설정 또는 인프라 관련 변경 - [x] 리팩토링 ## 💬 Questions & Review Points <!-- 리뷰어가 특별히 봐주었으면 하는 부분이 있다면 작성해주세요 --> 위에 말한거처럼 약관 동의 저장 API의 경우 기존 로직은 살려놓고 회원가입 시 약관 동의 내역 저장하는 로직만 추가했습니다! 그리고 카카오 회원가입 시에도 밸류디 약관에 동의할 수 있도록 추가해놨고, 로컬 회원가입과 똑같이 같은 테이블에 저장됩니다 지금 `KakaoService.mapKakaoTagToTermsId()` 메서드가 하드코딩으로 되어있는데... 이건 추후에 DB에서 id 조회하도록 수정하겠습니다! ## 📸 API Test Results (Swagger) <!-- API 테스트 스크린샷 첨부 --> <img width="1426" height="809" alt="스크린샷 2026-01-23 오전 3 29 07" src="https://github.com/user-attachments/assets/451ba9c8-d263-4430-8d9e-7609b5fec479" /> <img width="1422" height="770" alt="스크린샷 2026-01-23 오전 3 29 24" src="https://github.com/user-attachments/assets/952f6e84-5173-4ff1-af66-1c6ba0ca6a7a" /> <img width="1427" height="810" alt="스크린샷 2026-01-23 오전 3 30 14" src="https://github.com/user-attachments/assets/a06d000b-3bcd-4885-82b4-26939fa98371" /> <img width="1427" height="812" alt="스크린샷 2026-01-23 오전 3 26 41" src="https://github.com/user-attachments/assets/2db058d9-3f98-493b-9aee-6d5c81361404" /> <img width="1425" height="756" alt="스크린샷 2026-01-23 오전 3 27 12" src="https://github.com/user-attachments/assets/682986c8-3963-4ba1-b58d-dd31c31689ff" /> <img width="1423" height="809" alt="스크린샷 2026-01-23 오전 3 27 58" src="https://github.com/user-attachments/assets/a01b4c04-3107-4946-9941-68baf92729e0" /> <img width="1426" height="720" alt="스크린샷 2026-01-23 오전 3 27 45" src="https://github.com/user-attachments/assets/7fc09758-79e9-4150-89c3-068e52f05442" /> <img width="1138" height="676" alt="스크린샷 2026-01-23 오전 3 35 27" src="https://github.com/user-attachments/assets/b6b2fc29-f555-44ed-bfd9-75e36a7806b6" /> <img width="647" height="808" alt="스크린샷 2026-01-22 오후 9 49 58" src="https://github.com/user-attachments/assets/dd930bc3-8c6b-4a71-a82b-c47f19148449" /> ## ✅ Checklist - [x] API 테스트 완료 - [x] 테스트 결과 사진 첨부 - [x] 빌드 성공 확인 (./gradlew build)
## 🔗 Related Issue <!-- 이슈 번호를 작성하여 종료시켜주세요 --> - Closes #30 ## 📝 Summary - 목표 생성/조회/수정/삭제를 위한 Goal 도메인 API 신규 구현 ### 목표 생성 API - 목표 이름, 시작일, 종료일, 목표 금액을 입력받아 목표 생성 - 계좌 연동 정보는 추후 연동을 고려하여 현재는 제외 - 목표 생성 시 기본 상태를 ACTIVE로 설정 - 생성 성공 시 생성된 목표 ID 반환 ### 목표 목록 조회 API - memberId와 목표 상태(ACTIVE / COMPLETE / CANCELED)를 기준으로 목표 목록 조회 - 진행 중 / 완료 / 취소 목표를 status 기준으로 분리 조회 가능 - 각 목표에 대해 다음 정보 제공 1. 목표 제목 2. 남은 목표 금액 3. 남은 일자 4. 달성률 5. 연결 계좌 은행 정보(추후 연동 예정) ### 목표 상세 조회 API - goalId를 기준으로 단일 목표 상세 정보 조회 - 상세 조회 시 다음 정보 제공 1. 목표 제목 2. 모은 금액 3. 목표 금액 4. 남은 일자 5. 달성률 6. 저축 계좌 정보(은행/계좌번호, 추후 연동 예정) ### 목표 수정 API - goalId를 기준으로 목표 정보 수정 - 목표 제목, 기간, 목표 금액만 수정 가능 ### 목표 삭제 API - goalId를 기준으로 목표 삭제 처리 - 삭제 시 목표 상태를 CANCELED로 변경하여 히스토리 유지 ### 진행 중 목표 개수 조회 API - memberId 기준으로 현재 ACTIVE 상태인 목표 개수 반환 ## 🔄 Changes <!-- 구체적으로 어떤 파일/로직이 변경되었는지 체크해주세요 --> - [x] API 변경 (추가/수정) - [ ] 데이터 및 도메인 변경 (DB, 비즈니스 로직) - [ ] 설정 또는 인프라 관련 변경 - [ ] 리팩토링 ## 💬 Questions & Review Points 아직 계좌 연동 api + 목표 설정 시 계좌 선택이랑 목표 별 색상, 아이콘 설정은 구현하지 않았습니다!!! ## 📸 API Test Results (Swagger) <!-- API 테스트 스크린샷 첨부 --> ### 목표 생성 API <img width="989" height="868" alt="image" src="https://github.com/user-attachments/assets/b9195c6a-07f7-4c19-b517-1c68e4196de4" /> ### 목표 목록 조회 API <img width="938" height="793" alt="image" src="https://github.com/user-attachments/assets/a2376018-1818-41ec-ac41-d562796cb5b1" /> ### 목표 상세 조회 API <img width="965" height="642" alt="image" src="https://github.com/user-attachments/assets/55c2977c-6822-4039-8b07-6df98f1eb6a8" /> ### 목표 수정 API <img width="961" height="893" alt="image" src="https://github.com/user-attachments/assets/70cd47fe-65e6-4c1d-b5db-6a379db11165" /> ### 목표 삭제 API <img width="981" height="863" alt="image" src="https://github.com/user-attachments/assets/13d1b7ac-e143-44af-9f12-6941221204a4" /> ### 진행 중 목표 개수 조회 API <img width="970" height="612" alt="image" src="https://github.com/user-attachments/assets/f5d2637d-f089-4cf5-b69a-bf5287aad26f" /> ## ✅ Checklist - [x] API 테스트 완료 - [x] 테스트 결과 사진 첨부 - [x] 빌드 성공 확인 (./gradlew build)
## 🔗 Related Issue <!-- 이슈 번호를 작성하여 종료시켜주세요 --> - Closes #48 ## 📝 Summary <!-- 작업한 기능을 설명해주세요 --> - 계좌번호 원문 암호화하여 DB 저장 - 거래내역 조회 API 호출 시 이를 다시 복호화하여 전달하는 로직을 구현 ## 🔄 Changes <!-- 구체적으로 어떤 파일/로직이 변경되었는지 체크해주세요 --> - [ ] API 변경 (추가/수정) - [X] 데이터 및 도메인 변경 (DB, 비즈니스 로직) - [ ] 설정 또는 인프라 관련 변경 - [ ] 리팩토링 ## 💬 Questions & Review Points <!-- 리뷰어가 특별히 봐주었으면 하는 부분이 있다면 작성해주세요 --> ## 📸 API Test Results (Swagger) <!-- API 테스트 스크린샷 첨부 --> ## ✅ Checklist - [X] API 테스트 완료 - [ ] 테스트 결과 사진 첨부 - [ ] 빌드 성공 확인 (./gradlew build)
## 🔗 Related Issue <!-- 이슈 번호를 작성하여 종료시켜주세요 --> - Closes #47 ## 📝 Summary <!-- 작업한 기능을 설명해주세요 --> 현재 접속 중인 사용자의 로그인 여부를 판단하고, 화면에 표시할 기본적인 회원 정보(이름)를 제공하는 API를 구현했습니다. - 로그인 상태 조회의 경우 요청 헤더의 엑세스 토큰이 유효하면 로그인 상태로, 유효하지 않거나 토큰이 없으면 비로그인 상태로 간주 - 기본 정보 조회는 로그인한 사용자의 `memberId`를 이용해 `Member` 객체 조회 후 DTO로 변환하여 응답 ## 🔄 Changes <!-- 구체적으로 어떤 파일/로직이 변경되었는지 체크해주세요 --> - [x] API 변경 (추가/수정) - [ ] 데이터 및 도메인 변경 (DB, 비즈니스 로직) - [ ] 설정 또는 인프라 관련 변경 - [ ] 리팩토링 ## 💬 Questions & Review Points <!-- 리뷰어가 특별히 봐주었으면 하는 부분이 있다면 작성해주세요 --> ## 📸 API Test Results (Swagger) <!-- API 테스트 스크린샷 첨부 --> <img width="1423" height="812" alt="image" src="https://github.com/user-attachments/assets/294d27ff-90e0-4ec0-ad9a-4b62df96d37e" /> <img width="1426" height="812" alt="image" src="https://github.com/user-attachments/assets/9b2b4dd2-66d0-478e-bb5b-fdd83e99bfe9" /> <img width="1424" height="809" alt="image" src="https://github.com/user-attachments/assets/c15a9130-f560-4b52-af76-5a548006cc5a" /> <img width="1427" height="756" alt="image" src="https://github.com/user-attachments/assets/396a9895-22be-4057-9bea-48dfad1b1741" /> ## ✅ Checklist - [x] API 테스트 완료 - [x] 테스트 결과 사진 첨부 - [x] 빌드 성공 확인 (./gradlew build)
## 🔗 Related Issue <!-- 이슈 번호를 작성하여 종료시켜주세요 --> - Closes #24 ## 📝 Summary <!-- 작업한 기능을 설명해주세요 --> - 금감원 적금 상품(Open API) 데이터를 파싱하여 DB에 적재하는 기능을 구현했습니다. - Gemini 연동을 통해 사용자 금융 MBTI 결과 기반으로 DB 내 적금 상품을 추천/저장/조회하는 기능을 구현했습니다. - 개발/테스트 편의를 위해 관리자용 적재/조회 API를 추가했습니다. ## 🔄 Changes <!-- 구체적으로 어떤 파일/로직이 변경되었는지 체크해주세요 --> - [x] API 변경 (추가/수정) - [ ] 데이터 및 도메인 변경 (DB, 비즈니스 로직) - [ ] 설정 또는 인프라 관련 변경 - [x] 리팩토링 ## 💬 Questions & Review Points <!-- 리뷰어가 특별히 봐주었으면 하는 부분이 있다면 작성해주세요 --> 관리자 API(`/api/admin/**`)는 개발 편의 목적입니다. JWT 기반 `memberId` 추출은 현재 `Long.parseLong(userDetails.getUsername())` 방식으로 적용되어 있으며, `getMemberId()` 또는 커스텀 어노테이션이 추가되는 대로, 해당 방식으로 리팩토링 예정입니다. ## 📸 API Test Results (Swagger) <!-- API 테스트 스크린샷 첨부 --> <img width="1441" height="1129" alt="image" src="https://github.com/user-attachments/assets/65bbdc84-69ab-4fec-9c2d-a99166708041" /> <img width="1725" height="206" alt="image" src="https://github.com/user-attachments/assets/f7a040c4-8659-4e52-a3a1-d7e0f9515220" /> <img width="1730" height="343" alt="image" src="https://github.com/user-attachments/assets/2ad7b09e-df66-4c52-a49a-2297128a3de5" /> <img width="1441" height="1225" alt="image" src="https://github.com/user-attachments/assets/f82df7ca-04b0-4acd-85f2-4ada0a07000e" /> <img width="1445" height="1232" alt="image" src="https://github.com/user-attachments/assets/7c287f53-1fd9-475a-963c-02cf458d0fcb" /> <img width="1449" height="1116" alt="image" src="https://github.com/user-attachments/assets/1ecc94db-20de-4b05-89ec-33c29d7542ea" /> ## ✅ Checklist - [x] API 테스트 완료 - [x] 테스트 결과 사진 첨부 - [x] 빌드 성공 확인 (./gradlew build) --------- Co-authored-by: leesiyeon <sylee3182@gmail.com>
## 🔗 Related Issue <!-- 이슈 번호를 작성하여 종료시켜주세요 --> - Closes #45 ## 📝 Summary <!-- 작업한 기능을 설명해주세요 --> - CODEF API 호출 구조 개선 및 공통화 - API 호출 시 재시도 및 공통 에러 처리를 담당하는 CodefApiExecutor를 도입하여 코드 중복을 제거하고 안정성을 높였습니다. - CodefApiResponse에 제네릭 타입을 도입하고 ObjectMapper를 활용하여 기존 Map 기반의 캐스팅 방식을 타입 안정성이 보장된 DTO 방식으로 리팩토링했습니다. - 보안 및 데이터 처리 로직 강화 - 거래 내역이 없는 경우(정상 케이스)와 실제 에러 발생 상황을 분리하여 예외 처리 로직을 구체화했습니다. - 자산 동기화 과정에서 발생할 수 있는 LazyInitializationException 및 DataIntegrityViolationException 방지 로직을 추가했습니다. - 코드 최적화 및 유틸리티 분리 - 자산별(계좌/카드) 중복되던 조회 로직을 제네릭 메서드로 통합하여 유지보수성을 향상했습니다. - 날짜/시간 파싱 로직의 안정성을 강화하고, 불필요한 연결 메서드를 제거하여 CodefAssetService를 경량화했습니다. - 자산 원본 데이터 저장 시 AssetRawDataSaveEvent를 발행하도록 비동기 이벤트 구조를 도입했습니다. - 이벤트 및 트랜잭션 처리 안정성 개선 - 비동기 이벤트 처리 과정에서 엔티티 직접 참조로 인해 발생할 수 있는 오류를 방지하기 위해 이벤트 전달 대상을 엔티티가 아닌 ID 기반으로 변경했습니다. - 토큰 및 기준 데이터 관리 개선 - CodefTokenService의 토큰 관리를 메모리 기반에서 Redis 기반으로 변경했습니다. ## 🔄 Changes <!-- 구체적으로 어떤 파일/로직이 변경되었는지 체크해주세요 --> - [ ] API 변경 (추가/수정) - [ ] 데이터 및 도메인 변경 (DB, 비즈니스 로직) - [ ] 설정 또는 인프라 관련 변경 - [X] 리팩토링 ## 💬 Questions & Review Points <!-- 리뷰어가 특별히 봐주었으면 하는 부분이 있다면 작성해주세요 --> - AssetRawDataSaveEvent를 처리하는 리스너 구현은 ledger 도메인 반영 이후 추가할 예정입니다. - 금융사 연동 과정에서 거래내역(카드 승인 내역, 은행 거래 내역) 동기화에 실패한 경우를 대비해, 재동기화를 위한 별도의 API가 필요해 보입니다. 해당 부분은 별도 이슈로 분리하여 진행할 예정입니다. ## 📸 API Test Results (Swagger) <!-- API 테스트 스크린샷 첨부 --> ## ✅ Checklist - [x] API 테스트 완료 - [ ] 테스트 결과 사진 첨부 - [x] 빌드 성공 확인 (./gradlew build)
## 📝 Summary <!-- 작업한 기능을 설명해주세요 --> commit 6787e16.을 롤백합니다. ## 🔄 Changes <!-- 구체적으로 어떤 파일/로직이 변경되었는지 체크해주세요 --> - [ ] API 변경 (추가/수정) - [ ] 데이터 및 도메인 변경 (DB, 비즈니스 로직) - [ ] 설정 또는 인프라 관련 변경 - [X] 리팩토링 ## 💬 Questions & Review Points <!-- 리뷰어가 특별히 봐주었으면 하는 부분이 있다면 작성해주세요 --> ## 📸 API Test Results (Swagger) <!-- API 테스트 스크린샷 첨부 --> ## ✅ Checklist - [ ] API 테스트 완료 - [ ] 테스트 결과 사진 첨부 - [ ] 빌드 성공 확인 (./gradlew build)
## 🔗 Related Issue <!-- 이슈 번호를 작성하여 종료시켜주세요 --> - Closes #53 ## 📝 Summary <!-- 작업한 기능을 설명해주세요 --> 카카오/로컬로 가입한 회원이 밸류디 서비스를 탈퇴하는 API를 구현했습니다. - 회원탈퇴 및 재가입 정책 - 현재 구현된 코드 및 정책 상으로는 회원이 탈퇴를 요청하면 그 즉시 탈퇴되며, 복구가 불가능합니다. - 개인정보보호법 및 밸류디 개인정보 처리방침에 따라 회원이 탈퇴하는 시점에 즉시 개인정보는 복구 불가능한 방법으로 영구 삭제(마스킹) 됩니다. - 마스킹 되는 개인정보에는 `아이디`, `이메일`, `이름`, `생일`, `성별`, `비밀번호`, `소셜 서비스 회원번호`가 있습니다. - 현재 서버에서 별도로 로그 기록을 저장하고 있지는 않으나, 통신비밀보호법에 따라 로그인 기록을 최소 3개월 동안 보관해야 하기 때문에 탈퇴한 회원의 `Member` 및 `MemberAuthProvider` 정보는 DB에서 삭제하지 않고 개인정보만 마스킹한 채 보관합니다. - 탈퇴 즉시 탈퇴한 회원의 개인정보는 마스킹되어 식별 불가능 하기 때문에, 탈퇴한 회원은 동일한 정보로 재가입이 가능합니다. ## 🔄 Changes <!-- 구체적으로 어떤 파일/로직이 변경되었는지 체크해주세요 --> - [x] API 변경 (추가/수정) - [ ] 데이터 및 도메인 변경 (DB, 비즈니스 로직) - [ ] 설정 또는 인프라 관련 변경 - [ ] 리팩토링 ## 💬 Questions & Review Points <!-- 리뷰어가 특별히 봐주었으면 하는 부분이 있다면 작성해주세요 --> 정책같은 경우는 확실히 정해진게 없어서 기능 구현 편의성에 따라 제가 임의로 설정했습니다! 상황에 따라 회원이 탈퇴를 요청하면 며칠 간의 유예 기간을 거친 뒤 탈퇴시킨다던가, 유예 기간 내에 회원이 탈퇴를 철회할 경우 계정 복구 API를 추가해도 좋을거 같습니다. 그리고 현재 구현된 API 상으로는 카카오로 로그인한 회원이 탈퇴할 경우 밸류디 서비스 자체적으로는 탈퇴가 진행되지만, 카카오 계정 자체에서 밸류디 서비스와 연동을 해제하는 기능은 구현되어 있지 않습니다. (카카오 API 요청 필요) 이 부분은 추후 구현해놓겠습니다.... ## 📸 API Test Results (Swagger) <!-- API 테스트 스크린샷 첨부 --> <img width="1314" height="877" alt="image" src="https://github.com/user-attachments/assets/a2d82d0a-2919-44f0-943f-e36c34149450" /> <img width="1301" height="751" alt="image" src="https://github.com/user-attachments/assets/fa91f944-8f90-4b02-99ff-f04a95df5ff1" /> <img width="1582" height="1035" alt="image" src="https://github.com/user-attachments/assets/a23c073c-3be7-4f49-85dd-f6a2fb32e96c" /> <img width="1582" height="1035" alt="image" src="https://github.com/user-attachments/assets/5785c018-ad0a-43ea-8022-43ec4cb7013c" /> ## ✅ Checklist - [x] API 테스트 완료 - [x] 테스트 결과 사진 첨부 - [x] 빌드 성공 확인 (./gradlew build)
## 🔗 Related Issue <!-- 이슈 번호를 작성하여 종료시켜주세요 --> - Closes #60 ## 📝 Summary <!-- 작업한 기능을 설명해주세요 --> - 로그인된 사용자 주입 방식을 하드코딩에서 커스텀 어노테이션 기반으로 개선 - 전체 은행/카드사 목록 추가 - Codef의 엑세스 토큰 관리 방식을 Redis 기반으로 변경 ## 🔄 Changes <!-- 구체적으로 어떤 파일/로직이 변경되었는지 체크해주세요 --> - [ ] API 변경 (추가/수정) - [ ] 데이터 및 도메인 변경 (DB, 비즈니스 로직) - [ ] 설정 또는 인프라 관련 변경 - [X] 리팩토링 ## 💬 Questions & Review Points <!-- 리뷰어가 특별히 봐주었으면 하는 부분이 있다면 작성해주세요 --> 현재는 최소한의 코드 개선만 해둔 상태입니다. 추가적인 리팩토링 및 예외처리는 거래내역 마무리 후 추가 이슈파서 작업하겠습니다. ## 📸 API Test Results (Swagger) <!-- API 테스트 스크린샷 첨부 --> ## ✅ Checklist - [x] API 테스트 완료 - [x] 테스트 결과 사진 첨부 - [x] 빌드 성공 확인 (./gradlew build)
## 🔗 Related Issue - Closes #41 ## 📝 Summary CODEF 연동을 통한 가계부(Ledger) 시스템의 초기 설계 및 구현을 완료 ## 🔄 Changes - [x] API 변경 (추가/수정) - [x] 데이터 및 도메인 변경 (DB, 비즈니스 로직) - [ ] 설정 또는 인프라 관련 변경 - [ ] 리팩토링 ## 💬 Questions & Review Points 카테고리 매핑 부분과 거래내역과 승인 내역의 중복여부 체크 부분 ## 📸 API Test Results (Swagger) <img width="719" height="668" alt="image" src="https://github.com/user-attachments/assets/3d5b9256-8fcf-4121-834b-63773722cb50" /> <img width="726" height="767" alt="image" src="https://github.com/user-attachments/assets/4a3db17a-e692-43e2-b7b9-4fa600b69469" /> <img width="726" height="767" alt="image" src="https://github.com/user-attachments/assets/308c1f91-11e3-4e83-8da2-f15598aede3f" /> <img width="1796" height="323" alt="image" src="https://github.com/user-attachments/assets/1702413a-ae63-4da9-a14b-6d4cc8620673" /> ## ✅ Checklist - [x] API 테스트 완료 - [x] 테스트 결과 사진 첨부 - [x] 빌드 성공 확인 (./gradlew build) --------- Co-authored-by: hodoon <ehgns79513@gmial.com> Co-authored-by: Kwon-DoHee <152317074+seamooll@users.noreply.github.com>
## 🔗 Related Issue <!-- 이슈 번호를 작성하여 종료시켜주세요 --> - Closes #50 ## 📝 Summary 1. FinanceMbtiController 에서 기존 dto로 응답하던 부분 ApiResponse 응답으로 전부 수정 2. 응답 success 코드 추가 3. 기존 RequestParam으로 memberId 받던 부분 전부 @CurrentMember 어노테이션으로 수정 ## 🔄 Changes <!-- 구체적으로 어떤 파일/로직이 변경되었는지 체크해주세요 --> - [ ] API 변경 (추가/수정) - [ ] 데이터 및 도메인 변경 (DB, 비즈니스 로직) - [ ] 설정 또는 인프라 관련 변경 - [x] 리팩토링 ## 💬 Questions & Review Points <!-- 리뷰어가 특별히 봐주었으면 하는 부분이 있다면 작성해주세요 --> ## ✅ Checklist - [x] API 테스트 완료 - [ ] 테스트 결과 사진 첨부 - [x] 빌드 성공 확인 (./gradlew build)
Summary of ChangesHello @seamooll, I'm Gemini Code Assist1! I'm currently reviewing this pull request and will post my feedback shortly. In the meantime, here's a summary to help you and other reviewers quickly get up to speed! 이 Pull Request는 develop 브랜치의 주요 기능과 아키텍처 개선 사항을 main 브랜치로 통합합니다. 금융 자산 통합 관리, 사용자 인증 시스템 강화, 개인 목표 설정 및 추적, 상세한 가계부 기능, 그리고 인공지능 기반의 맞춤형 금융 상품 추천까지, 사용자에게 포괄적인 금융 관리 경험을 제공하기 위한 기반을 마련합니다. Highlights
🧠 New Feature in Public Preview: You can now enable Memory to help Gemini Code Assist learn from your team's feedback. This makes future code reviews more consistent and personalized to your project's style. Click here to enable Memory in your admin console. Ignored Files
Using Gemini Code AssistThe full guide for Gemini Code Assist can be found on our documentation page, here are some quick tips. Invoking Gemini You can request assistance from Gemini at any point by creating a comment using either
Customization To customize Gemini Code Assist for GitHub experience, repository maintainers can create a configuration file and/or provide a custom code review style guide (such as PEP-8 for Python) by creating and adding files to a Limitations & Feedback Gemini Code Assist may make mistakes. Please leave feedback on any instances where its feedback is incorrect or counter productive. You can react with 👍 and 👎 on @gemini-code-assist comments. If you're interested in giving your feedback about your experience with Gemini Code Assist for Github and other Google products, sign up here. You can also get AI-powered code generation, chat, as well as code reviews directly in the IDE at no cost with the Gemini Code Assist IDE Extension. Footnotes
|
| implementation "io.github.openfeign.querydsl:querydsl-jpa:7.0" | ||
| implementation "io.github.openfeign.querydsl:querydsl-core:7.0" | ||
| annotationProcessor "io.github.openfeign.querydsl:querydsl-apt:7.0:jpa" |
There was a problem hiding this comment.
io.github.openfeign.querydsl 그룹 ID를 사용하는 QueryDSL 의존성은 공식 라이브러리가 아니며, typosquatting을 통한 supply chain attack의 위험이 있습니다. 공식 com.querydsl 그룹 ID를 사용하는 의존성으로 즉시 교체해야 합니다. 또한, 주석에 언급된 OpenFeign과 QueryDSL은 직접적인 관련이 없습니다.
implementation "com.querydsl:querydsl-jpa:5.0.0:jakarta"
annotationProcessor "com.querydsl:querydsl-apt:5.0.0:jakarta"
| annotationProcessor "jakarta.annotation:jakarta.annotation-api" | ||
|
|
||
| implementation'org.springframework.boot:spring-boot-starter-mail' |
| implementation 'io.jsonwebtoken:jjwt-api:0.12.3' | ||
| implementation 'io.jsonwebtoken:jjwt-impl:0.12.3' | ||
| implementation 'io.jsonwebtoken:jjwt-jackson:0.12.3' | ||
| implementation 'org.springframework.boot:spring-boot-configuration-processor' |
| @GetMapping("/banks") | ||
| public ApiResponse<List<BankResDTO.BankConnection>> getBanks( // TODO: List 객체 래핑으로 변경 | ||
| @CurrentMember Long memberId | ||
| ) { | ||
| List<BankResDTO.BankConnection> banks = connectionQueryService.getConnectedBanks(memberId); | ||
| return ApiResponse.onSuccess(GeneralSuccessCode.OK, banks); | ||
| } |
There was a problem hiding this comment.
| @Component | ||
| @RequiredArgsConstructor | ||
| @Transactional(readOnly = true) | ||
| public class FinanceMbtiTypeInfo implements FinanceMbtiProvider { |
| public CorsConfigurationSource corsConfigurationSource() { | ||
| CorsConfiguration configuration = new CorsConfiguration(); | ||
|
|
||
| configuration.setAllowedOriginPatterns(List.of("*")); |
| public void addCookie(HttpServletResponse response, String name, String value, int maxAge, String path) { | ||
| ResponseCookie cookie = ResponseCookie.from(name, value) | ||
| .httpOnly(true) | ||
| .secure(false) // 개발 서버 테스트를 위해 임시로 HTTP 허용. 실제 배포 시에는 true로 변경 |
📝 Summary
develop 브랜치의 최신 변경사항을 main 브랜치에 반영합니다.
🔄 Changes