Skip to content

Conversation

@EpicFn
Copy link
Collaborator

@EpicFn EpicFn commented Oct 15, 2025

📢 기능 설명

필요시 실행결과 스크린샷 첨부

🩷 Approve 하기 전 확인해주세요!

  • 리뷰어가 확인해줬으면 하는 사항 적어주세요.
  • [ ]

✅ 체크리스트

  • PR 제목 규칙 잘 지켰는가?
  • 추가/수정사항을 설명하였는가?
  • 이슈넘버를 적었는가?
  • Approve 하기 전 확인 사항 체크했는가?

Kimgooner and others added 30 commits September 19, 2025 10:01
* feat: GlobalExceptionHandler 진행 사항 저장.

* feat/OPS-262 : GlobalExceptionHandler 작성 완료.
* feat/OPS-127 : Member 엔티티 작성(필드, 연관 관계, 생성자, 메소드)

* feat/OPS-128 : MemberRepository 작성(name, email 검색 옵션 추가)

* feat: GlobalExceptionHandler 작성을 위한 진행 사항 저장.

* feat/OPS-129 : MemberService 작성(조회, 생성/수정, 삭제)

* feat/OPS-126 : Member 도메인 설계 완료. Service 테스트 코드 추가
* chore/OPS-264 : ci.yml 수정

* Update .github/workflows/ci.yml

Co-authored-by: Copilot <[email protected]>

* Update .github/workflows/ci.yml

Co-authored-by: Copilot <[email protected]>

---------

Co-authored-by: Copilot <[email protected]>
Add .idea/ to .gitignore to exclude IntelliJ project files
헌재 소셜 로그인에 사용하는 특정 민감한 값(JWT 토큰, 소셜 client_id 등)을 @value 어노테이션을 통해 받아오고 있습니다. 하지만 해당 민감한 값을 저장한 yaml 파일을 레포지토리에 바로 올릴 수 없기에, 레포지토리의 secrets에 해당 값들을 저장해놓고, CI 워크플로우에 이 값들을 사용해서 application-secrets.yml 파일을 작성하는 로직을 추가했습니다.
* feat/OPS-155 : 소셜 로그인/회원가입 기능 구현 (카카오) 완료. 수정 사항 반영.

* feat/OPS-155 : 소셜 로그인/회원가입 기능 구현 (카카오) 완료. 수정 사항 반영 #2.

* feat/OPS-155 : 소셜 로그인/회원가입 기능 구현 (카카오) 완료. 수정 사항 반영 #3.
* chore/OPS-266 : EC2 인스턴스 생성

* chore/OPS-267 : VPC, IAM, SG 설정

* chore : 서브넷 설정 수정 및 nginx, mysql 볼륨 마운트 설정 추가

* chore : Dockerfile 수정 및 EC2 보안 그룹 수정

* chore : MYSQL 컨테이너 실행시 초기 DB 이름 지정하도록 설정
* refactor: archive_id + name 복합 유니크 제약 추가

* refactor: folder_id + title 복합 유니크 제약 추가

* refactor: member_id, archive_id 단일 유니크 제약 추가

* refactor: 엔티티 제약

* feat/OPS-209-BE-feat-폴더-생성 완료

* feat/OPS-209-BE-feat-폴더-생성 완료
* feat/OPS-210 : 폴더 삭제 구현
- groq api를 이용하여 요약, 태그 추출 기능 구현
* feat/OPS-158 : 소셜 로그인(구글) 구현, JWT, Member, Auth 도메인 고도화

* feat/OPS-158 : 테스트 케이스 수정.

* fix/OPS-158 : template 충돌 해결.

* fix/OPS-158 : @transactional import 수정
* feat/OPS-211 : 폴더 이름 변경 구현

* refactor/OPS-211 : 폴더명 중복 예외처리 추가

* refactor/OPS-211 : 폴더명 중복 예외처리 추가
* chore/OPS-187 : Terraform을 활용해 RDS 인스턴스 생성 및 설치

* chore : RDS 서브넷 그룹 private으로 수정

* chore : AWS 리소스 네이밍 규칙 적용
* new/OPS-222 : space controller, sevice, repository 빈 생성

# Conflicts:
#	src/main/java/org/tuna/zoopzoop/backend/global/initData/BaseInitData.java

* feat/OPS-222 : 스페이스 생성 엔드포인트 추가

* new/OPS-222 : spaceControllerTest 파일 세팅

* refactor/OPS-222 : 테스트 클래스의 공용 파트 추상 클래스로 분리

* fix : 최신사항 반영

* fix/OPS-222 : 테스트 코드에서 형식 다르던 거 수정

* feat/OPS-222 : 스페이스 생성 구현

* feat/OPS-222 : space 단위 핸들러, 커스텀 에러 생성

* fix/OPS-222 : controller 생성 테스트 통과

* feat/OPS-222 : 스페이스 생성 로직 완성

* feat/OPS-222 : 스페이스 삭제 구현

* fix/OPS-222 : 테스트 케이스 통과

* feat/OPS-245 : controller 단위 테스트 케이스 작성

* feat/OPS-245 : 스페이스 명 변경 구현

* fix/OPS-244 : 이름 변경 시 saveAndFlush로 즉시 반영

* chore/OPS-222 : develop 최신 사항 반영

* fix : 저장

* fix/OPS-222 : globalExceptionHandler 컨벤션 통일

* feat/OPS-244 : 스페이스 목록 조회 controller 단위 테스트 작성

* feat/OPS-244 : membership 관리 빈 생성

* feat/OPS-244 : membership 생성 관련 테스트 케이스 작성

* fix : 테스트 케이스 간 충돌 해결 중

* fix : 최신 사항 반영

* 임시저장

* 초기 상태

* fix : 미봉책 적용

* feat/OPS-244 : 스페이스 멤버 추가 기능

* fix : spaceControllerTest와 memberControllerTest 간 충돌 해결

* feat/OPS-244 : 스페이스 목록 조회 엔드포인트 생성

* chore/OPS-244 : 인증 관련 코드 주석 처리

* feat/OPS-270 : 스페이스 로직에 사용자 정보 체크 추가

* feat/OPS-22 : 테스트 케이스에 WithUserDetails 반영

* feat/OPS-222 : 인증 관련 테스트 케이스 추가

* fix : 불필요한 주석 삭제

* new/OPS-222 : space controller, sevice, repository 빈 생성

# Conflicts:
#	src/main/java/org/tuna/zoopzoop/backend/global/initData/BaseInitData.java

* feat/OPS-222 : 스페이스 생성 엔드포인트 추가

* new/OPS-222 : spaceControllerTest 파일 세팅

* refactor/OPS-222 : 테스트 클래스의 공용 파트 추상 클래스로 분리

* fix : 최신사항 반영

* fix/OPS-222 : 테스트 코드에서 형식 다르던 거 수정

* feat/OPS-222 : 스페이스 생성 구현

* feat/OPS-222 : space 단위 핸들러, 커스텀 에러 생성

* fix/OPS-222 : controller 생성 테스트 통과

* feat/OPS-222 : 스페이스 생성 로직 완성

* feat/OPS-222 : 스페이스 삭제 구현

* fix/OPS-222 : 테스트 케이스 통과

* feat/OPS-245 : controller 단위 테스트 케이스 작성

* feat/OPS-245 : 스페이스 명 변경 구현

* fix/OPS-244 : 이름 변경 시 saveAndFlush로 즉시 반영

* chore/OPS-222 : develop 최신 사항 반영

* fix : 저장

* fix/OPS-222 : globalExceptionHandler 컨벤션 통일

* feat/OPS-244 : 스페이스 목록 조회 controller 단위 테스트 작성

* feat/OPS-244 : membership 관리 빈 생성

* feat/OPS-244 : membership 생성 관련 테스트 케이스 작성

* fix : 테스트 케이스 간 충돌 해결 중

* fix : 최신 사항 반영

* 임시저장

* 초기 상태

* fix : 미봉책 적용

* feat/OPS-244 : 스페이스 멤버 추가 기능

* fix : spaceControllerTest와 memberControllerTest 간 충돌 해결

* feat/OPS-244 : 스페이스 목록 조회 엔드포인트 생성

* chore/OPS-244 : 인증 관련 코드 주석 처리

* feat/OPS-270 : 스페이스 로직에 사용자 정보 체크 추가

* feat/OPS-22 : 테스트 케이스에 WithUserDetails 반영

* feat/OPS-222 : 인증 관련 테스트 케이스 추가

* fix : 불필요한 주석 삭제

* fix : 불필요한 파일 삭제

---------

Co-authored-by: EpicFn <[email protected]>
* feat/OPS-211 : 폴더 이름 변경 구현

* refactor/OPS-211 : 폴더명 중복 예외처리 추가

* refactor/OPS-211 : 폴더명 중복 예외처리 추가

* feat/OPS-272 : 폴더/파일 조회 구현

* refactor/OPS-272 : tag 생성자 추가
* chore/OPS-278 : Auth 도메인 문서화 완료 & ApiV1MemberController 추가 기능 구현.

* refactor/OPS-278 : ApiV1MemberController 추가 사항에 맞게 테스트 추가 구현.

* refactor/OPS-278 : Member 생성 시, 랜덤한 UUID의 앞 5글자를 태그로 사용하도록 변경.
* new/OPS-189 : 초대 관리 Controller 및 테스트 클래스 생성

* feat/OPS-189 : 초대 수락 관련 테스트 코드 작성

* feat : 멤버 권한 변경 함수 생성

* feat/OPS-189 : 초대 수락 구현

* feat/OPS-190 : 초대 거절 테스트 케이스 작성

* feat/OPS-190 : 초대 거절 엔드포인트 생성

* feat/OPS-190 : membershipService 관련 단위 테스트 추가

* refactor : 코드 간단한 위치 조정

* feat/OPS-188 : 스페이스 초대 목록 조회 완료

* fix/OPS-188 : dto 네이밍 수정

* refactor/OPS-188 : 스페이스에 초대된 유저 목록 조회의 controller 위치 변경

* feat : 사용자에게 온 스페이스 초대 목록 조회 엔드포인트 생성

* feat : 사용자에게 온 스페이스 초대 목록 조회 테스트 케이스 작성

---------

Co-authored-by: EpicFn <[email protected]>
* refactor/OPS-285 : datasource 엔티티 thumbnailUrl 이름 변경

* refactor/OPS-285 : datasource 엔티티 thumbnailUrl 이름 변경
* feat/OPS-175 : 웹 크롤링 데이터 정제화 기능 구현
* refactor/OPS-287 : newsSearch 메소드 로직 변경 및 일부 API 문서화.

* refactor/OPS-287 : NewsServiceTest API를 호출하는 방식으로 변경.
* refactor/OPS-283 : datasource 엔티티 수정

* [Feat/OPS-186] 스페이스 초대 관리 (#38)

* new/OPS-189 : 초대 관리 Controller 및 테스트 클래스 생성

* feat/OPS-189 : 초대 수락 관련 테스트 코드 작성

* feat : 멤버 권한 변경 함수 생성

* feat/OPS-189 : 초대 수락 구현

* feat/OPS-190 : 초대 거절 테스트 케이스 작성

* feat/OPS-190 : 초대 거절 엔드포인트 생성

* feat/OPS-190 : membershipService 관련 단위 테스트 추가

* refactor : 코드 간단한 위치 조정

* feat/OPS-188 : 스페이스 초대 목록 조회 완료

* fix/OPS-188 : dto 네이밍 수정

* refactor/OPS-188 : 스페이스에 초대된 유저 목록 조회의 controller 위치 변경

* feat : 사용자에게 온 스페이스 초대 목록 조회 엔드포인트 생성

* feat : 사용자에게 온 스페이스 초대 목록 조회 테스트 케이스 작성

---------

Co-authored-by: EpicFn <[email protected]>

* refactor/OPS-285 : datasource 엔티티 thumbnailUrl 이름 변경 (#40)

* refactor/OPS-285 : datasource 엔티티 thumbnailUrl 이름 변경

* refactor/OPS-285 : datasource 엔티티 thumbnailUrl 이름 변경

* feat/OPS-226 : 자료 등록 구현

* refactor/OPS-226 : 메서드 명 수정

---------

Co-authored-by: Hyeok Jin Kim <[email protected]>
Co-authored-by: EpicFn <[email protected]>
* refactor/OPS-283 : datasource 엔티티 수정

* [Feat/OPS-186] 스페이스 초대 관리 (#38)

* new/OPS-189 : 초대 관리 Controller 및 테스트 클래스 생성

* feat/OPS-189 : 초대 수락 관련 테스트 코드 작성

* feat : 멤버 권한 변경 함수 생성

* feat/OPS-189 : 초대 수락 구현

* feat/OPS-190 : 초대 거절 테스트 케이스 작성

* feat/OPS-190 : 초대 거절 엔드포인트 생성

* feat/OPS-190 : membershipService 관련 단위 테스트 추가

* refactor : 코드 간단한 위치 조정

* feat/OPS-188 : 스페이스 초대 목록 조회 완료

* fix/OPS-188 : dto 네이밍 수정

* refactor/OPS-188 : 스페이스에 초대된 유저 목록 조회의 controller 위치 변경

* feat : 사용자에게 온 스페이스 초대 목록 조회 엔드포인트 생성

* feat : 사용자에게 온 스페이스 초대 목록 조회 테스트 케이스 작성

---------

Co-authored-by: EpicFn <[email protected]>

* refactor/OPS-285 : datasource 엔티티 thumbnailUrl 이름 변경 (#40)

* refactor/OPS-285 : datasource 엔티티 thumbnailUrl 이름 변경

* refactor/OPS-285 : datasource 엔티티 thumbnailUrl 이름 변경

* feat/OPS-226 : 자료 등록 구현

* feat/OPS-215 : 자료 삭제 구현

* feat/OPS-215 : 자료 삭제 구현

* feat/OPS-215 : 자료 삭제 구현

* feat/OPS-215 : 자료 삭제 구현

---------

Co-authored-by: Hyeok Jin Kim <[email protected]>
Co-authored-by: EpicFn <[email protected]>
* feat/OPS-293 : LiveBlocks를 위한 React-flow 데이터 관리 도메인 설계 완료. 테스트 추가.

* feat/OPS-293 : folder 테스트에 @transactional 추가.

* feat/OPS-293 : MemberServiceTest 수정 #1

* feat/OPS-293 : MemberServiceTest 수정 #2

* feat/OPS-293 : Folder 테스트에 ActiveProfile(test) 추가.

* feat/OPS-293 : 테스트에 무결성 검증을 위한 @afterall, @AfterEach 추가.

* feat/OPS-293 : 일부 수정.

* feat/OPS-293 : 진짜 마지막 수정.
* chore/OPS-133 : CI 파이프라인 구축

* chore: 테스트/운영 환경용 GitHub Actions Terraform 수동 인프라 적용 워크플로우 추가

* chore : 환경변수로 test/prod 서버 분리 가능하도록 설정

* chore/OPS-135 : CD 워크플로우 추가

* chore: CI 후 CD 실행되도록 설정

* chore : CI 워크플로우 job 분리(테스트,빌드/도커 빌드,ghcr push)

* chore : docker build jobs에서 checkout 단계 추가

* chore: CI 워크플로우 job 구분 없앰

* chore : develop/main 브랜치에 따라 CI/CD 워크플로우 분리

* chore : Spring Boot Acutator 의존성 추가

* chore: Actions에서 SSH 접속 후 docker 실행 권한 갖도록 설정

* chore: 컨테이너 실행 로그 터미널에 출력 설정

* chore : 헬스체크 설정

* chore: secrets 직접 ssh 환경 변수로 전달

* chore: 환경변수 직접 docker run에 넣기

* chore: spdocker run 에서 ring profile 제거

* chore: nginx 설정

* chore: test-cd 수정

* chore: test-cd 수정2

* chore: ghcr 로그인 토큰 수정

* chore: 도커 이미지 pull 이름 수정

* chore: ssh 내 안전한 ghcr 로그인

* chore : 이미 pull한 이미지와 run 이미지 이름 일치시키기

* chore: mysql driver 의존성 추가

* chore : 헬스체크 요청 스프링 시큐리티 필터에 걸리지 않도록 설정

* chore: nginx 포트 스위칭 설정

* chore: nginx 포트 스위칭 설정 수정

* chore: nginx 포트 스위칭 설정 수정2

* chore: 운영서버 CD 워크플로우 수정

* chore : prod-server 워크플로우 활성화 경로 설정

* chore : test commit 나중에 지우기
taekkong and others added 27 commits October 11, 2025 21:45
* refactor : membership 조회 시 lazy loading에 의한 n+1 문제 개선

* refactor : space의 member 목록 조회 시 n+ 1 문제 해결

---------

Co-authored-by: EpicFn <[email protected]>
* fix : 확장자 추가하고 로그 뱉도록 변경

* fix : prefix 로 구분하도록 변경

* fix : CI 과정에 더미 prefix 값 추가

* fix : 환경 파일에 prefix 추가

* fix : 오타 수정

---------

Co-authored-by: EpicFn <[email protected]>
* [feat/OPS-262] GlobalExceptionHandler 설정 (#8)

* feat: GlobalExceptionHandler 진행 사항 저장.

* feat/OPS-262 : GlobalExceptionHandler 작성 완료.

* [feat/OPS-126] Member 도메인 기초 설계 (#9)

* feat/OPS-127 : Member 엔티티 작성(필드, 연관 관계, 생성자, 메소드)

* feat/OPS-128 : MemberRepository 작성(name, email 검색 옵션 추가)

* feat: GlobalExceptionHandler 작성을 위한 진행 사항 저장.

* feat/OPS-129 : MemberService 작성(조회, 생성/수정, 삭제)

* feat/OPS-126 : Member 도메인 설계 완료. Service 테스트 코드 추가

* [Chore/OPS-264] ci 워크플로우 개선 (#10)

* chore/OPS-264 : ci.yml 수정

* Update .github/workflows/ci.yml



* Update .github/workflows/ci.yml



---------



* Update .gitignore to exclude IntelliJ files (#11)

Add .idea/ to .gitignore to exclude IntelliJ project files

* feat/OPS-134 : ApiV1Controller 작성 완료. (#12)

* [chore/OPS-268] CI 워크플로우 개선 #2 (#15)

헌재 소셜 로그인에 사용하는 특정 민감한 값(JWT 토큰, 소셜 client_id 등)을 @value 어노테이션을 통해 받아오고 있습니다. 하지만 해당 민감한 값을 저장한 yaml 파일을 레포지토리에 바로 올릴 수 없기에, 레포지토리의 secrets에 해당 값들을 저장해놓고, CI 워크플로우에 이 값들을 사용해서 application-secrets.yml 파일을 작성하는 로직을 추가했습니다.

* [feat/OPS-155] 소셜 로그인 회원가입 기능 구현(카카오) (#18)

* feat/OPS-155 : 소셜 로그인/회원가입 기능 구현 (카카오) 완료. 수정 사항 반영.

* feat/OPS-155 : 소셜 로그인/회원가입 기능 구현 (카카오) 완료. 수정 사항 반영 #2.

* feat/OPS-155 : 소셜 로그인/회원가입 기능 구현 (카카오) 완료. 수정 사항 반영 #3.

* [chore/ops-130] Terraform을 활용해 EC2 인스턴스 생성 및 설정 (#17)

* chore/OPS-266 : EC2 인스턴스 생성

* chore/OPS-267 : VPC, IAM, SG 설정

* chore : 서브넷 설정 수정 및 nginx, mysql 볼륨 마운트 설정 추가

* chore : Dockerfile 수정 및 EC2 보안 그룹 수정

* chore : MYSQL 컨테이너 실행시 초기 DB 이름 지정하도록 설정

* fix/OPS-271 : SecurityConfig 및 Jwt 인증 필터 수정 (#19)

* Feat/ops 209 be feat 폴더 생성 (#21)

* refactor: archive_id + name 복합 유니크 제약 추가

* refactor: folder_id + title 복합 유니크 제약 추가

* refactor: member_id, archive_id 단일 유니크 제약 추가

* refactor: 엔티티 제약

* feat/OPS-209-BE-feat-폴더-생성 완료

* feat/OPS-209-BE-feat-폴더-생성 완료

* fix : 컨벤션 통일 (#22)



* Feat/ops 210 be feat 폴더 삭제  (#23)

* feat/OPS-210 : 폴더 삭제 구현

* [feat/OPS-151] llm 활용 데이터 정제화 기능 구현 (#27)

- groq api를 이용하여 요약, 태그 추출 기능 구현

* [feat/OPS-158] 소셜 로그인 회원가입 기능 구현(구글) (#28)

* feat/OPS-158 : 소셜 로그인(구글) 구현, JWT, Member, Auth 도메인 고도화

* feat/OPS-158 : 테스트 케이스 수정.

* fix/OPS-158 : template 충돌 해결.

* fix/OPS-158 : @transactional import 수정

* feat/OPS-211 : 폴더 이름 변경 구현 (#25)

* feat/OPS-211 : 폴더 이름 변경 구현

* refactor/OPS-211 : 폴더명 중복 예외처리 추가

* refactor/OPS-211 : 폴더명 중복 예외처리 추가

* [chore/OPS-187] Terraform을 활용해 RDS 인스턴스 생성 및 설정 (#29)

* chore/OPS-187 : Terraform을 활용해 RDS 인스턴스 생성 및 설치

* chore : RDS 서브넷 그룹 private으로 수정

* chore : AWS 리소스 네이밍 규칙 적용

* [feat] 스페이스 데이터 관리  (#32)

* new/OPS-222 : space controller, sevice, repository 빈 생성

# Conflicts:
#	src/main/java/org/tuna/zoopzoop/backend/global/initData/BaseInitData.java

* feat/OPS-222 : 스페이스 생성 엔드포인트 추가

* new/OPS-222 : spaceControllerTest 파일 세팅

* refactor/OPS-222 : 테스트 클래스의 공용 파트 추상 클래스로 분리

* fix : 최신사항 반영

* fix/OPS-222 : 테스트 코드에서 형식 다르던 거 수정

* feat/OPS-222 : 스페이스 생성 구현

* feat/OPS-222 : space 단위 핸들러, 커스텀 에러 생성

* fix/OPS-222 : controller 생성 테스트 통과

* feat/OPS-222 : 스페이스 생성 로직 완성

* feat/OPS-222 : 스페이스 삭제 구현

* fix/OPS-222 : 테스트 케이스 통과

* feat/OPS-245 : controller 단위 테스트 케이스 작성

* feat/OPS-245 : 스페이스 명 변경 구현

* fix/OPS-244 : 이름 변경 시 saveAndFlush로 즉시 반영

* chore/OPS-222 : develop 최신 사항 반영

* fix : 저장

* fix/OPS-222 : globalExceptionHandler 컨벤션 통일

* feat/OPS-244 : 스페이스 목록 조회 controller 단위 테스트 작성

* feat/OPS-244 : membership 관리 빈 생성

* feat/OPS-244 : membership 생성 관련 테스트 케이스 작성

* fix : 테스트 케이스 간 충돌 해결 중

* fix : 최신 사항 반영

* 임시저장

* 초기 상태

* fix : 미봉책 적용

* feat/OPS-244 : 스페이스 멤버 추가 기능

* fix : spaceControllerTest와 memberControllerTest 간 충돌 해결

* feat/OPS-244 : 스페이스 목록 조회 엔드포인트 생성

* chore/OPS-244 : 인증 관련 코드 주석 처리

* feat/OPS-270 : 스페이스 로직에 사용자 정보 체크 추가

* feat/OPS-22 : 테스트 케이스에 WithUserDetails 반영

* feat/OPS-222 : 인증 관련 테스트 케이스 추가

* fix : 불필요한 주석 삭제

* new/OPS-222 : space controller, sevice, repository 빈 생성

# Conflicts:
#	src/main/java/org/tuna/zoopzoop/backend/global/initData/BaseInitData.java

* feat/OPS-222 : 스페이스 생성 엔드포인트 추가

* new/OPS-222 : spaceControllerTest 파일 세팅

* refactor/OPS-222 : 테스트 클래스의 공용 파트 추상 클래스로 분리

* fix : 최신사항 반영

* fix/OPS-222 : 테스트 코드에서 형식 다르던 거 수정

* feat/OPS-222 : 스페이스 생성 구현

* feat/OPS-222 : space 단위 핸들러, 커스텀 에러 생성

* fix/OPS-222 : controller 생성 테스트 통과

* feat/OPS-222 : 스페이스 생성 로직 완성

* feat/OPS-222 : 스페이스 삭제 구현

* fix/OPS-222 : 테스트 케이스 통과

* feat/OPS-245 : controller 단위 테스트 케이스 작성

* feat/OPS-245 : 스페이스 명 변경 구현

* fix/OPS-244 : 이름 변경 시 saveAndFlush로 즉시 반영

* chore/OPS-222 : develop 최신 사항 반영

* fix : 저장

* fix/OPS-222 : globalExceptionHandler 컨벤션 통일

* feat/OPS-244 : 스페이스 목록 조회 controller 단위 테스트 작성

* feat/OPS-244 : membership 관리 빈 생성

* feat/OPS-244 : membership 생성 관련 테스트 케이스 작성

* fix : 테스트 케이스 간 충돌 해결 중

* fix : 최신 사항 반영

* 임시저장

* 초기 상태

* fix : 미봉책 적용

* feat/OPS-244 : 스페이스 멤버 추가 기능

* fix : spaceControllerTest와 memberControllerTest 간 충돌 해결

* feat/OPS-244 : 스페이스 목록 조회 엔드포인트 생성

* chore/OPS-244 : 인증 관련 코드 주석 처리

* feat/OPS-270 : 스페이스 로직에 사용자 정보 체크 추가

* feat/OPS-22 : 테스트 케이스에 WithUserDetails 반영

* feat/OPS-222 : 인증 관련 테스트 케이스 추가

* fix : 불필요한 주석 삭제

* fix : 불필요한 파일 삭제

---------



* Ops 272 be feat 자료 이름 조회 (#31)

* feat/OPS-211 : 폴더 이름 변경 구현

* refactor/OPS-211 : 폴더명 중복 예외처리 추가

* refactor/OPS-211 : 폴더명 중복 예외처리 추가

* feat/OPS-272 : 폴더/파일 조회 구현

* refactor/OPS-272 : tag 생성자 추가

* feat/OPS-195 : 뉴스 목록 조회 기능 구현(최신 뉴스, 키워드 기반). 서비스 테스트 추가. (#33)

* refactor/OPS-277 : default 폴더 자동 생성 (#34)

* [chore/OPS-278] Auth, Member, News 도메인 문서화 및 고도화. (#35)

* chore/OPS-278 : Auth 도메인 문서화 완료 & ApiV1MemberController 추가 기능 구현.

* refactor/OPS-278 : ApiV1MemberController 추가 사항에 맞게 테스트 추가 구현.

* refactor/OPS-278 : Member 생성 시, 랜덤한 UUID의 앞 5글자를 태그로 사용하도록 변경.

* [Feat/OPS-186] 스페이스 초대 관리 (#38)

* new/OPS-189 : 초대 관리 Controller 및 테스트 클래스 생성

* feat/OPS-189 : 초대 수락 관련 테스트 코드 작성

* feat : 멤버 권한 변경 함수 생성

* feat/OPS-189 : 초대 수락 구현

* feat/OPS-190 : 초대 거절 테스트 케이스 작성

* feat/OPS-190 : 초대 거절 엔드포인트 생성

* feat/OPS-190 : membershipService 관련 단위 테스트 추가

* refactor : 코드 간단한 위치 조정

* feat/OPS-188 : 스페이스 초대 목록 조회 완료

* fix/OPS-188 : dto 네이밍 수정

* refactor/OPS-188 : 스페이스에 초대된 유저 목록 조회의 controller 위치 변경

* feat : 사용자에게 온 스페이스 초대 목록 조회 엔드포인트 생성

* feat : 사용자에게 온 스페이스 초대 목록 조회 테스트 케이스 작성

---------



* refactor/OPS-283 : datasource 엔티티 수정 (#39)

* refactor/OPS-285 : datasource 엔티티 thumbnailUrl 이름 변경 (#40)

* refactor/OPS-285 : datasource 엔티티 thumbnailUrl 이름 변경

* refactor/OPS-285 : datasource 엔티티 thumbnailUrl 이름 변경

* [feat/OPS-175] 웹 크롤링 데이터 정제화 기능 구현 (#41)

* feat/OPS-175 : 웹 크롤링 데이터 정제화 기능 구현

* [refactor/OPS-287] News 도메인 고도화 (#42)

* refactor/OPS-287 : newsSearch 메소드 로직 변경 및 일부 API 문서화.

* refactor/OPS-287 : NewsServiceTest API를 호출하는 방식으로 변경.

* Ops 226 be feat 자료 등록 (#44)

* refactor/OPS-283 : datasource 엔티티 수정

* [Feat/OPS-186] 스페이스 초대 관리 (#38)

* new/OPS-189 : 초대 관리 Controller 및 테스트 클래스 생성

* feat/OPS-189 : 초대 수락 관련 테스트 코드 작성

* feat : 멤버 권한 변경 함수 생성

* feat/OPS-189 : 초대 수락 구현

* feat/OPS-190 : 초대 거절 테스트 케이스 작성

* feat/OPS-190 : 초대 거절 엔드포인트 생성

* feat/OPS-190 : membershipService 관련 단위 테스트 추가

* refactor : 코드 간단한 위치 조정

* feat/OPS-188 : 스페이스 초대 목록 조회 완료

* fix/OPS-188 : dto 네이밍 수정

* refactor/OPS-188 : 스페이스에 초대된 유저 목록 조회의 controller 위치 변경

* feat : 사용자에게 온 스페이스 초대 목록 조회 엔드포인트 생성

* feat : 사용자에게 온 스페이스 초대 목록 조회 테스트 케이스 작성

---------



* refactor/OPS-285 : datasource 엔티티 thumbnailUrl 이름 변경 (#40)

* refactor/OPS-285 : datasource 엔티티 thumbnailUrl 이름 변경

* refactor/OPS-285 : datasource 엔티티 thumbnailUrl 이름 변경

* feat/OPS-226 : 자료 등록 구현

* refactor/OPS-226 : 메서드 명 수정

---------




* Ops 215 be feat 자료 삭제 (#46)

* refactor/OPS-283 : datasource 엔티티 수정

* [Feat/OPS-186] 스페이스 초대 관리 (#38)

* new/OPS-189 : 초대 관리 Controller 및 테스트 클래스 생성

* feat/OPS-189 : 초대 수락 관련 테스트 코드 작성

* feat : 멤버 권한 변경 함수 생성

* feat/OPS-189 : 초대 수락 구현

* feat/OPS-190 : 초대 거절 테스트 케이스 작성

* feat/OPS-190 : 초대 거절 엔드포인트 생성

* feat/OPS-190 : membershipService 관련 단위 테스트 추가

* refactor : 코드 간단한 위치 조정

* feat/OPS-188 : 스페이스 초대 목록 조회 완료

* fix/OPS-188 : dto 네이밍 수정

* refactor/OPS-188 : 스페이스에 초대된 유저 목록 조회의 controller 위치 변경

* feat : 사용자에게 온 스페이스 초대 목록 조회 엔드포인트 생성

* feat : 사용자에게 온 스페이스 초대 목록 조회 테스트 케이스 작성

---------



* refactor/OPS-285 : datasource 엔티티 thumbnailUrl 이름 변경 (#40)

* refactor/OPS-285 : datasource 엔티티 thumbnailUrl 이름 변경

* refactor/OPS-285 : datasource 엔티티 thumbnailUrl 이름 변경

* feat/OPS-226 : 자료 등록 구현

* feat/OPS-215 : 자료 삭제 구현

* feat/OPS-215 : 자료 삭제 구현

* feat/OPS-215 : 자료 삭제 구현

* feat/OPS-215 : 자료 삭제 구현

---------




* [feat/OPS-293] LiveBlocks를 위한 React-flow 데이터 관리 도메인 설계 완료. 테스트 추가. (#47)

* feat/OPS-293 : LiveBlocks를 위한 React-flow 데이터 관리 도메인 설계 완료. 테스트 추가.

* feat/OPS-293 : folder 테스트에 @transactional 추가.

* feat/OPS-293 : MemberServiceTest 수정 #1

* feat/OPS-293 : MemberServiceTest 수정 #2

* feat/OPS-293 : Folder 테스트에 ActiveProfile(test) 추가.

* feat/OPS-293 : 테스트에 무결성 검증을 위한 @afterall, @AfterEach 추가.

* feat/OPS-293 : 일부 수정.

* feat/OPS-293 : 진짜 마지막 수정.

* [chore/ops-132] CI/CD 파이프라인 구축 (#43)

* chore/OPS-133 : CI 파이프라인 구축

* chore: 테스트/운영 환경용 GitHub Actions Terraform 수동 인프라 적용 워크플로우 추가

* chore : 환경변수로 test/prod 서버 분리 가능하도록 설정

* chore/OPS-135 : CD 워크플로우 추가

* chore: CI 후 CD 실행되도록 설정

* chore : CI 워크플로우 job 분리(테스트,빌드/도커 빌드,ghcr push)

* chore : docker build jobs에서 checkout 단계 추가

* chore: CI 워크플로우 job 구분 없앰

* chore : develop/main 브랜치에 따라 CI/CD 워크플로우 분리

* chore : Spring Boot Acutator 의존성 추가

* chore: Actions에서 SSH 접속 후 docker 실행 권한 갖도록 설정

* chore: 컨테이너 실행 로그 터미널에 출력 설정

* chore : 헬스체크 설정

* chore: secrets 직접 ssh 환경 변수로 전달

* chore: 환경변수 직접 docker run에 넣기

* chore: spdocker run 에서 ring profile 제거

* chore: nginx 설정

* chore: test-cd 수정

* chore: test-cd 수정2

* chore: ghcr 로그인 토큰 수정

* chore: 도커 이미지 pull 이름 수정

* chore: ssh 내 안전한 ghcr 로그인

* chore : 이미 pull한 이미지와 run 이미지 이름 일치시키기

* chore: mysql driver 의존성 추가

* chore : 헬스체크 요청 스프링 시큐리티 필터에 걸리지 않도록 설정

* chore: nginx 포트 스위칭 설정

* chore: nginx 포트 스위칭 설정 수정

* chore: nginx 포트 스위칭 설정 수정2

* chore: 운영서버 CD 워크플로우 수정

* chore : prod-server 워크플로우 활성화 경로 설정

* chore : test commit 나중에 지우기

* [Feat/OPS-214] 스페이스 멤버 관리 (#50)

* feat/OPS-227 : 스페이스 멤버 목록 조회 테스트 케이스 작성

* feat/OPS-227 : 스페이스 목록 반환 엔드포인트 완성

* feat/OPS-251 : 권한 변경 테스트 케이스 작성

* feat/OPS-214 : 권한 변경 엔드포인트 구현

* fix/OPS-214 : 단순 메세지 오류 테스트 케이스 수정

* fix/OPS-214 : 로직 관련 테스트 케이스 수정

* fix/OPS-251 : globalExceptionHandler에 역직렬화 실패 에러 추가

* refactor/OPS-214 : 비즈니스 로직을 서비스 계층에 일임

* feat/OPS-231 : 스페이스 초대 컨트롤러 테스트케이스 작성

* feat/OPS-231 : 스페이스 초대 로직 작성

* feat/OPS-231 : 스페이스초대 서비스 빈 테스트 케이스 추가

* feat/OPS-228 : 팀원 퇴출 컨트롤러 테스트 케이스 작성

* feeat/OPS-229 : 팀원 퇴출 구현 완료

* fix : 기존 테스트 케이스 일관성 있게 수정

* feat : 멤버 퇴출 서비스 테스트 콛드 작성

* refactor : DTO 패키지 변경

* feat/OPS-294 : 스페이스 나가기 컨트롤러 단위 테스트 작성

* feat/OPS-294 : 스페이스 나가기 로직 완성

* refactor : space 도메인 dto 패키지 변경

* feat/OPS-227 : 스페이스 멤버 목록 조회 테스트 케이스 작성

* feat/OPS-227 : 스페이스 목록 반환 엔드포인트 완성

* feat/OPS-251 : 권한 변경 테스트 케이스 작성

* feat/OPS-214 : 권한 변경 엔드포인트 구현

* fix/OPS-214 : 단순 메세지 오류 테스트 케이스 수정

* fix/OPS-214 : 로직 관련 테스트 케이스 수정

* fix/OPS-251 : globalExceptionHandler에 역직렬화 실패 에러 추가

* refactor/OPS-214 : 비즈니스 로직을 서비스 계층에 일임

* feat/OPS-231 : 스페이스 초대 컨트롤러 테스트케이스 작성

* feat : 최신 사항 반영

* feat/OPS-231 : 스페이스초대 서비스 빈 테스트 케이스 추가

* feat/OPS-228 : 팀원 퇴출 컨트롤러 테스트 케이스 작성

* feeat/OPS-229 : 팀원 퇴출 구현 완료

* fix : 기존 테스트 케이스 일관성 있게 수정

* feat : 멤버 퇴출 서비스 테스트 콛드 작성

* refactor : DTO 패키지 변경

* feat/OPS-294 : 스페이스 나가기 컨트롤러 단위 테스트 작성

* feat/OPS-294 : 스페이스 나가기 로직 완성

* refactor : space 도메인 dto 패키지 변경

---------



* refactor/OPS-308 : 도메인 분리 & CI 워크플로우에 application-secrets-server.yml 추가. (#52)

* Ops 255 be feat 자료 수정 (#54)

* refactor/OPS-283 : datasource 엔티티 수정

* [Feat/OPS-186] 스페이스 초대 관리 (#38)

* new/OPS-189 : 초대 관리 Controller 및 테스트 클래스 생성

* feat/OPS-189 : 초대 수락 관련 테스트 코드 작성

* feat : 멤버 권한 변경 함수 생성

* feat/OPS-189 : 초대 수락 구현

* feat/OPS-190 : 초대 거절 테스트 케이스 작성

* feat/OPS-190 : 초대 거절 엔드포인트 생성

* feat/OPS-190 : membershipService 관련 단위 테스트 추가

* refactor : 코드 간단한 위치 조정

* feat/OPS-188 : 스페이스 초대 목록 조회 완료

* fix/OPS-188 : dto 네이밍 수정

* refactor/OPS-188 : 스페이스에 초대된 유저 목록 조회의 controller 위치 변경

* feat : 사용자에게 온 스페이스 초대 목록 조회 엔드포인트 생성

* feat : 사용자에게 온 스페이스 초대 목록 조회 테스트 케이스 작성

---------



* refactor/OPS-285 : datasource 엔티티 thumbnailUrl 이름 변경 (#40)

* refactor/OPS-285 : datasource 엔티티 thumbnailUrl 이름 변경

* refactor/OPS-285 : datasource 엔티티 thumbnailUrl 이름 변경

* feat/OPS-226 : 자료 등록 구현

* feat/OPS-215 : 자료 삭제 구현

* feat/OPS-255 : 자료 이동 및 수정 구현

---------




* feat/OPS-289 : dataprocessor 서비스 생성 (#59)

* fix/OPS-318  : proxy host 스위칭ì� ssl 인증서 유지 (#60)

* [refactor/OPS-310] redirect url 변경 (#53)

* refactor/OPS-310 : redirect-url 변경.

* refactor/OPS-310 : 작은 수정.

* refactor/OPS-310 : 또 하나의 작은 수정.

* refactor/OPS-310 : 큰 수정.

* refactor/OPS-310 : 테스트

* refactor/OPS-310 : 요청 사항 반영.

* refactor/OPS-310 : 요청 사항 반영 #2

* refactor/OPS-255 : datasource 테이블 sources 칼럼 추가 (#64)

* [refactor/OPS-323] News API 조회 로직 수정. (#65)

* 배포 테스트 #2

* 로직 수정 테스트

* 로직 수정 테스트 #2

* refactor/OPS-322 : source 칼럼명 수정 (#68)

* refactor/OPS-322 : source 칼럼명 수정

* refactor/OPS-322 : source 칼럼명 수정

* feat/OPS-321 : dataProcessorService에서 요약 로직 완성 (#69)

* [fix/OPS-317] CI/CD 파이프라인 이벤트 분리 (#66)

* fix : prod-server nginx 정보 출력 제거

* fix : prod-server CD 워크플로우 main에 push될 때 실행되도록 수정

* fix : test-server CI는 pr시 develop에 실행, CD는 push될 때 실행

* fix : test-server CI 워크플로우에서 CD 부분 제거

* chore : 빌드시 aws관련 정보 application-secret.yml에 들어가도록 설정 (#73)

* chore : S3 사용을 위해 빌드시 AWS 정보 application-secrets.yml에 추가되도록 설정

* chore : 역할에 S3 접근 정책 부착 하도록 설정

* chore : ãyml에 추가정보 넣도록 설정

* [Feat/OPS-275] 스페이스 썸네일 이미지 저장 (#71)

* chore : S3 환경 설정

* feat : S3Service 구성

* chore : multipart 데이터 크기 설정

* feat : S3 업로드 테스트용 엔드포인트 생성

* feat : S3 연동 완료

* feat : space entity에 imageUrl 항목 추가

* feat : 썸네일 캡처 테스트용

* feat : 썸네일 촬영 테스트 엔드포인트 작성

* feat : 스페이스 썸네일 갱신 API 생성

* feat : 스페이스 이미지 갱신 기능 완성

* feat : 스페이스 목록 반환 시 썸네일 url 같이 반환

* feat : 스페이스 단건 조회 테스트 케이스 작성

* feat : 스페이스 단건 조회 구현

* feat : 스페이스 목록 조회 페이징 기능 추가

---------



* [feat/OPS-324] 크롬 확장 프로그램 소셜 로그인 분기 & 소셜 로그인 테스트 API 추가. (#70)

* feat/OPS-324 : 확장 프로그램 분기 및 소셜 로그인 테스트 API 추가.

* feat/OPS-324 : 테스트 로직 일부 수정.

* feat/OPS-324 : 테스트 로직 일부 수정. #2

* feat/OPS-324 : 테스트 완료, 테스트 코드 제거.

* feat/OPS-324 : 로그인 분기 수정.

* feat/OPS-324 : state 정보를 저장하는 resolver 추가.

* feat/OPS-324 : session 등록을 위한 OAuth2LoginSourceFilter 클래스 추가.

* feat/OPS-324 : 해결

* fix : ci 시 secrets 에서 S3 관련 시크릿 값 삭제하도록 변경(버킷명 제외) (#74)

* fix : ci 시 secrets 에서 S3 관련 시크릿 값 삭제하도록 변경(버킷명 제외)

* fix : CI 오타 수정

* fix : build 단계에선 testest를 수행하지 않도록 변경

---------



* [feat/OPS-198] 아카이브 정보로 뉴스 목록 조회 (#75)

* feat/OPS-198 : 아카이브 기반 뉴스 조회 구현.

* feat/OPS-198 : 테스트 케이스 추가.

* feat/OPS-265 : LLM-활용-데이터-정제화-시-기존-아카이브의-태그-연동 (#77)

* refactor/OPS-319: 아카이브 로그인 연동 (#76)

* refactor/OPS-255 : datasource 테이블 sources 칼럼 추가

* refactor/OPS-319 : 아카이브 로그인 연동

* refactor/OPS-319 : 아카이브 로그인 연동

* fix : SpringDoc과 Spring AI 간 의존성 충돌 해결 (#79)

* [Feat/OPS-327] 자료 등록 llm 연동   (#78)

* refactor/OPS-255 : datasource 테이블 sources 칼럼 추가

* refactor/OPS-319 : 아카이브 로그인 연동

* refactor/OPS-319 : 아카이브 로그인 연동

* refactor/OPS-327 : 자료 등록 LLM 연동

* [feat/OPS-328] 인증/인가 로직 변경 (#80)

* feat/OPS-328 : RefreshToken을 서버에서 저장하도록 변경. API 일부 수정.

* feat/OPS-328 : 확장 프로그램 로그인 메소드 추가 및 데이터 캐싱 메소드 추가.

* [refactor/OPS-337] 요구사항 반영 및 일부 로직 수정. (#81)

* refactor/OPS-337 : 프론트 요구사항 반영 및 에러 수정.

* refactor/OPS-337 : 테스트 케이스 수정.

* refactor/OPS-338 : 아카이브 mock 데이터 입력 (#82)

* refactor/OPS-338 : 아카이브 mock 데이터 입력

* refactor/OPS-338 : 아카이브 mock 데이터 입력

* refactor/OPS-338 : mock 추가로 인한 testcase 수정

* [feat/OPS-338] 아카이브 mock 데이터 입력 (#83)

* refactor/OPS-338 : 아카이브 mock 데이터 입력

* refactor/OPS-338 : 아카이브 mock 데이터 입력

* refactor/OPS-338 : mock 추가로 인한 testcase 수정

* refactor/OPS-338 : Dev 토큰 발급 컨트롤러 추가

* [Feat/OPS-326] 대시보드 데이터 저장 체계 구축 (#85)

* refactor : graph 도메인을 dashboard 도메인으로 수정, dashboard 엔티티 생성

* feat : 스페이스 단건 조회 시 대시보드 id도 함께 반환

* refactor : API 명 변경

* dashboard 기반으로 저장/조회 되도록 변경

* refactor : 테스트 코드 수정

* fix : 반환 메세지 수정

* feat : 서명 검증 로직 구현

* refactor : signature 서비스 분리

* fix : 오타 수정

* fix : CI 파이프라인 수정

---------



* [feat/OPS-329] Sentry를 통한 모니터링 환경 구축. (#86)

* feat/OPS-329 : Sentry를 통한 모니터링 환경 구축.

* feat/OPS-329: 추가로 프론트 요구 사항 반영.

* refactor/OPS-353 : 분리 완료. (#87)

* [refactor/OPS-354] 테스트 케이스 사용 프로필 변경. (#88)

* refactor/OPS-354 : 테스트 케이스 사용 프로필 변경.

* refactor/OPS-354 : 이래도 안돼?

* refactor/OPS-355 : 요구 사항 반영. (#91)

* feat/OPS-358: Redis 의존성 추가 및 RedisConfig 설정 완료. AuthResultData 직렬화 및 AuthResult 클래스에 TTL 도입. (#92)

* feat/OPS-356 : 네이버 블로그 크롤러 생성 (#93)

* [feat/OPS-252] 조건별 자료 검색 (#89)

* refactor/OPS-255 : datasource 테이블 sources 칼럼 추가

* refactor/OPS-319 : 아카이브 로그인 연동

* refactor/OPS-319 : 아카이브 로그인 연동

* refactor/OPS-327 : 자료 등록 LLM 연동

* refactor/OPS-252 : 조건별 자료 검색 구현

* refactor/OPS-252 : 조건별 자료 검색

* fix : 스페이스, 사용자 목록 반환 시 항상 id 오름차순 정렬 (#94)



* IllegalStateException(동시성 문제)관련 처리 메소드 추가. (#95)

* [fix/OPS-362] 요구 사항 반영 (#96)

* fix/OPS-362 : 요구사항 반영.

* fix/OPS-362 : 요구사항 반영#2

* [feat/OPS-341] 벨로그 크롤러 생성 (#90)

* feat/OPS-341 : Velog 크롤러 생성

* fix : createDate,modifyDate 자동 적용되도록 설정

* fix/OPS-362 : 요구사항 반영#3 (#97)

* fix/OPS-362 : 요구사항 반영#4 (#98)

* fix/OPS-362 : 요구사항 반영#5 (#99)

* fix/OPS-362 : 요구사항 반영#6 (#100)

* [refactor/OPS-360] folder&datasource 리펙토링 (#101)

* refactor/OPS-360 : OpenAPI 애너테이션 추가

* refactor/OPS-360 : NoResultException 예외 분리

* refactor/OPS-360 : param 추가

* refactor/OPS-360 : param 추가

* refactor/OPS-360 : default 폴더 CRUD 로직 수정

* refactor/OPS-360 : 폴더 리스트는 호출 로직 수정

* fix/OPS-362 : 요구사항 반영#7 (#102)

* fix/OPS-362 : 요구사항 반영#8 (#103)

* hotfix/OPS-346 : 파일 조회 수정 (#104)

* [feat/OPS-365 ] soft delete + 휴지통 조회 구현 (#105)

* feat/OPS-365 : soft delete + 휴지통 조회 구현

* refactor/OPS-246 : 요구사항 리팩토링

* chore : rabbitmq 환경설정 (#106)

* chore : rabbitmq 로컬 개발 환경 설정

* chore : rabbitmq 관련 springboot 환경 설정

* chore: rabbitmq 의존성 추가

* [Feat/OPS-344] message queue 구현 (#107)

* chore : RabbitMQ 환경 설정

* chore : CI 파이프라인에서 RabbitMQ 컨테이너를 띄워서 사용하도록 설정

* new : RabbitMQ 설정 클래스, dto 생성

* feat : producer method 생성

* feat : 메세지 큐 구현 완료

* feat : 데이터 저장 요청 테스트 케이스 수정

* feat : ConsumerTest 코드 추가

* fix : 저장 테스트 케이스 성공

* fix : 테스트 코드 수정 중

* fix : 테스트 케이스 성공

* feat : dlq 도입

* feat : 데이터 순서 보장을 위해 version 추가

* refactor : MQConfig 파일 위치 변경

* chore : RabbitMQ 환경 설정

# Conflicts:
#	docker-compose.yml
#	src/main/resources/application.yml

* chore : CI 파이프라인에서 RabbitMQ 컨테이너를 띄워서 사용하도록 설정

* new : RabbitMQ 설정 클래스, dto 생성

* feat : producer method 생성

* feat : 메세지 큐 구현 완료

* feat : 데이터 저장 요청 테스트 케이스 수정

* feat : ConsumerTest 코드 추가

* fix : 저장 테스트 케이스 성공

* fix : 테스트 코드 수정 중

* fix : 테스트 케이스 성공

* feat : dlq 도입

* feat : 데이터 순서 보장을 위해 version 추가

* refactor : MQConfig 파일 위치 변경

* fix : 최신 사항 반영

* fix : copilot review 반영

* feat : Dashboard에서 graph 참조 방식 EAGER -> LAZY 로 변경

* CI 실패해서 다시 EAGER로 변경

* fix : 다시 LAZY로 변경

---------



* [Refactor/OPS-373] 자료 조회 검색 요구사항 수정 (#108)

* refactor/OPS-373 : 자료 이름 unique 속성 삭제

* refactor/OPS-373 : 자료 수정 가능 칼럼 추가

* refactor/OPS-373 : 명시적 null과 미전달 구분

* [Feat/OPS-376] 스페이스 목록 참여 인원 반환 api 구성 (#109)

* refactor : dto 이름 일부 변경

* feat : 구현 완료

* feat : 관련 테스트 케이스 추가

* fix : 테스트 케이스 수정

---------



* [Refactor/OPS-290] 데이터소스 정제화 기능 고도화 (#112)

* refactor/OPS-290 : 데이터소스 정제화 기능 고도화

* [Feat/OPS-346] 공유 폴더 관리 (#113)

* refactor/OPS-360 : OpenAPI 애너테이션 추가

* refactor/OPS-360 : NoResultException 예외 분리

* refactor/OPS-360 : param 추가

* refactor/OPS-360 : param 추가

* refactor/OPS-360 : default 폴더 CRUD 로직 수정

* refactor/OPS-360 : 폴더 리스트는 호출 로직 수정

* refactor/OPS-346 : 공유 폴더 관리

* feat/OPS-365 : soft delete + 휴지통 조회 구현

* feat/OPS-346 : 공유 폴더 관리

* feat/OPS-346 : 공유 폴더 관리

* refactor/OPS-346 : 개인 / 공유 폳더 관리 분리

* refactor/OPS-346 : 검색 기능 출처 누락 수정

* feat : 스페이스 목록 조회 시 생성 일자도 반환 (#114)



* [feat/OPS-377] 운영/테스트 서버 분리 작업 (#115)

* feat/OPS-377 : 테스트/운영 환경 분리

* feat/OPS-377 : 테스트/운영 환경 분리 #2

* feat/OPS-377 : 테스트/운영 환경 분리 #3

* feat/OPS-377 : 테스트/운영 환경 분리 #4

* [Fix/OPS-378] 대시보드 하위 entity 수정 (#117)

* fix : node, edge dto 수정

* fix : 테스트 케이스 수정

* fix : 테스트 수정 완료

* fix : 오타 수정

* fix : 오타 추가 수정;

---------



* [Feat/OPS-379] liveblocks 연동 (#118)

* new : Liveblock API 호출을 위한 Client 빈 생성

* feat : 스페이스 생성/삭제 시 liveblocks room 도 함께 생성/삭제

* fix : test 시 mock 빈 사용

* feat : jwt 발급 로직 구현

---------



* [Feat/OPS-246] 공유 파일 관리   (#119)

* refactor/OPS-360 : OpenAPI 애너테이션 추가

* refactor/OPS-360 : NoResultException 예외 분리

* refactor/OPS-360 : param 추가

* refactor/OPS-360 : param 추가

* refactor/OPS-360 : default 폴더 CRUD 로직 수정

* refactor/OPS-360 : 폴더 리스트는 호출 로직 수정

* refactor/OPS-346 : 공유 폴더 관리

* feat/OPS-365 : soft delete + 휴지통 조회 구현

* feat/OPS-346 : 공유 폴더 관리

* feat/OPS-346 : 공유 폴더 관리

* feat/OPS-246 : 공유 파일 관리

* refactor/OPS-346 : 개인 / 공유 폳더 관리 분리

* refactor/OPS-346 : 개인 / 공유 파일 관리 분리

* refactor/OPS-346 : 검색 기능 출처 누락 수정

* feat/OPS-246 : 개인 / 공유 파일 관리 분리

* feat/OPS-246 : api 요청 수정

* feat/OPS-246 : api 요청 수정 - request 이름 통일

* refactor/OPS-246 : 머지

* refactor/OPS-246 : 머지

* [Feat/OPS-388] 다건삭제 DELETE 본문 수정 (#122)

* refactor/OPS-388 : 다건삭제 DELETE 본문 수정

* refactor/OPS-388 : 다건삭제 DELETE 테스트 케이스 수정

* Hotfix/스페이스초대목록 반환 시 invite id 포함 (#123)

* fix : 스페이스 초대 목록 조회 시 inviteId 반환하도록 변경

* fix : 관련 테스트 케이스 수정

---------



* [Feat/OPS-379] liveblocks 연동 (#124)

* new : Liveblock API 호출을 위한 Client 빈 생성

* feat : 스페이스 생성/삭제 시 liveblocks room 도 함께 생성/삭제

* fix : test 시 mock 빈 사용

* feat : jwt 발급 로직 구현

* fix : SpaceArchiveDataSourceControllerTest에서 liveblocks 빈 mock 처리

* fix : 오타 수정

---------



* refactor : secrets값 컨테이너 실행시 환경변수로 주입되도록 수정 (#120)

* refactor: 빌드 전 secrets.yml 파일 삭제

* refactor : 테스트 서버 환경변수 주입 설정

* refactor : 운영서버 환경변수 주입 설정

* refactor : 운영환경별 YML 분리 및 배포 환경 설정 구조 개선

* refactor : 로컬(dev,test).yml 복구

* refactor : 빌드전 테스트 secrets.yml V2로 변경

* refactor: gradle 테스트시 환경변수로 설정값 주입

* refactor: yml파일 들여쓰기 수정

* refactor: yml 플레이스홀더 네이밍 규칙 일관성 유지하도록 수정

* [Feat/ops-379] feat liveblocks 연동 (#127)

* new : Liveblock API 호출을 위한 Client 빈 생성

* feat : 스페이스 생성/삭제 시 liveblocks room 도 함께 생성/삭제

* fix : test 시 mock 빈 사용

* feat : jwt 발급 로직 구현

* fix : SpaceArchiveDataSourceControllerTest에서 liveblocks 빈 mock 처리

* fix : 오타 수정

* new : Liveblock API 호출을 위한 Client 빈 생성

# Conflicts:
#	src/main/java/org/tuna/zoopzoop/backend/global/clients/liveblocks/LiveblocksClient.java

---------



* fix : 오타 수정 (#128)



* [Hotfix] 파이프라인 오타 수정 (#129)

* fix : 오타 수정

* fix : bucket 오타 수정

* fix: S3 관련 값 롤백

---------



* refactor: s3 prefix separation (#131)

* refactor: S3 prefix 환경변수 분리 및 server 프로파일 설정 추가

* fix: cd 오타 수정

* fix : docker run 주석 없앰

* refactor: s3 prefix separation (#132)

* refactor: S3 prefix 환경변수 분리 및 server 프로파일 설정 추가

* fix: cd 오타 수정

* fix : docker run 주석 없앰

* fix: bucket 오타 수정

* fix: 오타 제거

* [fix/OPS-390] Secret 값 관련 일부 수정 (#126)

* fix/OPS-390 : secret 템플릿 및 수정 사항에 맞게 코드 변수명 변경.

* feat/OPS-390: NEWS API 수정 추가 사항 반영.

* feat/OPS-390: CI 워크플로우 일부 수정.

* feat/OPS-390: 일부 placeholders 수정.

* feat/OPS-390: 일부 문서화 항목 수정.

* refactor: s3 prefix 분리 및 ci/cd 안정화 (#134)

* refactor: S3 prefix 환경변수 분리 및 server 프로파일 설정 추가

* fix: bucket 오타 수정

* [Hotfix] 로그인 에러 수정 (#135)

* Update README.md

* Remove unnecessary blank line in ApiV1DashboardController

* [Feat/OPS-389] 스페이스 초대 알림 구현 (#136)

* new : emitter 관리 service, controller 생성

* feat : 하트비트 로직 구현

* fix : 비동기 처리 하도록 변경

* feat : 관련 테스트 케이스 추가

* fix : 테스트 수정

* fix : 불필요한 어노테이션 삭제

---------



* [feat/OPS-392] 사용자 검색 기능 추가 (#137)

* feat/OPS-392: 검색 기능 추가 & ElasticSearch 구현 & 일부 도메인 오류 수정.

* feat/OPS-392: CI 워크플로우에 ElasticSearch 서비스 컨테이너 생성 로직 추가.

* feat/OPS-392: CI 워크플로우에 ElasticSearch 서비스 컨테이너 생성 로직 추가 #2

* feat/OPS-392: 추가 도메인 오류 수정.

* feat/OPS-392: Docker-compose에 elastic-search 서비스 항목 추가.

* fix: 도메인 요청 사항에 맞게 수정. (#138)

* 배포용 커밋. (#139)

* 배포용 커밋 (#140)

* 배포용 커밋.

* 배포용 커밋.

* 배포용 커밋 #2

* 배포용 커밋. (#142)

* 배포용 커밋.

* 배포용 커밋.

* 배포용 커밋 #2

* 배포용 커밋 #3

* 배포용 커밋 #4

* [Feat/OPS-391] 아카이브 자료 img 자료 형식 수정  (#141)

* feat/OPS-391 : 이미지 수정 multi part 구현

* feat/OPS-391 : 이미지 수정 multi part 구현

* refactor/OPS-391 : enum 대소문자 무시

* 배포용 커밋. (#143)

* 배포용 커밋.

* 배포용 커밋.

* 배포용 커밋 #2

* 배포용 커밋 #3

* 배포용 커밋 #4

* 배포용 커밋 #5

* 배포용 커밋 #6

* fix: 운영서버 rabbitmq 환경변수 설정 (#144)

* feat/OPS-393 : 티스토리 크롤러 생성 (#145)

* fix/OPS-394: API 문서화 및 s3 오류 수정 #1 (#146)

* [fix/OPS-394] 문서화 및 오류 수정 3 (#148)

* fix/OPS-394: API 문서화 및 s3 오류 수정 #3

* fix/OPS-394: API 문서화 및 s3 오류 수정 #4

* refactor/OPS-395: 검색 로직 수정. (#149)

* fix: 벨로그 크롤러 작성일자 파싱 이슈 해결 (#111)

* fix : 작성일자 파싱 이슈 해결

* refactor: velog 크롤러 우선순위 높게 설정

* fix: 벨로그 크롤러 예외 처리 추가 (HTML 요소 없을 시 빈 문자열, 작성일 없을 시 기본값)

* fix : docker 실행시 AWS 환경변수값 제거 (#150)

* fix: 줄바꿈 문자 뒤 공백 제거 및 OPENAI API Key 운영환경값 분리 (#152)

* refactor/OPS-396: n-gram analyzer 적용을 통한 검색 결과 향상 & OAuth2SuccessHandler 로컬 환경 분기. (#154)

* refactor/OPS-398: 인증/인가 오류 수정 (#155)

* [Refactor/OPS-380] 스페이스 목록 조회 개선 (#156)

* refactor : membership 조회 시 lazy loading에 의한 n+1 문제 개선

* refactor : space의 member 목록 조회 시 n+ 1 문제 해결

---------



* Update README.md (#157)

* Create DEV_GUIDE.md (#158)

* Update README.md (#159)

* fix/OPS-399: 리프레시 토큰 이슈 수정. (#160)

* refactor/OPS-397 : 검색 요구사항 반영 (#161)

* hotfix : 스페이스 이미지 저장 로직 수정 (#163)

* fix : 확장자 추가하고 로그 뱉도록 변경

* fix : prefix 로 구분하도록 변경

* fix : CI 과정에 더미 prefix 값 추가

* fix : 환경 파일에 prefix 추가

* fix : 오타 수정

---------



* fix/OPS-399: 리프레시 토큰 이슈 수정 #2 (#165)

* fix : 이미지 경로 및 반환 형식 수정 (#166)



* fix : Url 수정 (#167)



---------

Co-authored-by: Whitedoggy <[email protected]>
Co-authored-by: Hyeok Jin Kim <[email protected]>
Co-authored-by: Copilot <[email protected]>
Co-authored-by: main <[email protected]>
Co-authored-by: EpicFn <[email protected]>
Co-authored-by: osh5030 <[email protected]>
* fix/OPS-402: 오류 수정.

* fix/OPS-402: 오류 수정 #2
* fix/OPS-403 : 공유 스페이스 썸네일 삭제 문제

* fix/OPS-403 : 검색 - 날짜별 정렬 기준 변경
Copilot AI review requested due to automatic review settings October 15, 2025 06:20
@EpicFn EpicFn merged commit 4f5044d into main Oct 15, 2025
1 check passed
Copy link
Contributor

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

This PR adds a comprehensive test suite and shared test utilities to validate core domains (member, space, archive, datasource, dashboard, news) and controller endpoints, including integration with security and external clients.

  • Introduces a reusable ControllerTestSupport for consistent MockMvc usage and common assertions.
  • Adds extensive unit/integration tests across services and controllers (space, membership, archive/folder, datasource, dashboard, news), including messaging and signature verification.
  • Mocks/stubs external dependencies (Liveblocks, AI/Chat, tag repo) for deterministic tests.

Reviewed Changes

Copilot reviewed 258 out of 265 changed files in this pull request and generated 11 comments.

Show a summary per file
File Description
src/test/java/org/tuna/zoopzoop/backend/testSupport/ControllerTestSupport.java Provides shared MockMvc/ObjectMapper helpers and common response assertions for controller tests.
src/test/java/org/tuna/zoopzoop/backend/domain/space/space/service/SpaceServiceTest.java Service tests for create/update/delete space behavior and duplicate name handling.
src/test/java/org/tuna/zoopzoop/backend/domain/space/space/controller/ApiV1SpaceControllerTest.java Controller tests for space CRUD and list endpoints with authority checks.
src/test/java/org/tuna/zoopzoop/backend/domain/space/membership/service/NotificationServiceTest.java Verifies SSE notification dispatch integration.
src/test/java/org/tuna/zoopzoop/backend/domain/space/membership/service/MembershipServiceTest.java Membership add/invite/accept/reject/authority change tests.
src/test/java/org/tuna/zoopzoop/backend/domain/space/membership/controller/ApiV1MembershipControllerTest.java Controller tests for membership listing/invite/authority/expel/leave.
src/test/java/org/tuna/zoopzoop/backend/domain/space/membership/controller/ApiV1InviteControllerTest.java Invite accept/reject and listing tests.
src/test/java/org/tuna/zoopzoop/backend/domain/space/archive/service/SpaceArchiveFolderServiceTest.java Service tests for shared archive folder operations with authority checks.
src/test/java/org/tuna/zoopzoop/backend/domain/space/archive/service/SpaceArchiveDataSourceServiceTest.java Service tests for shared archive datasource operations (import/move/update/delete).
src/test/java/org/tuna/zoopzoop/backend/domain/space/archive/controller/SpaceArchiveFolderControllerTest.java Controller tests for shared archive folder endpoints.
src/test/java/org/tuna/zoopzoop/backend/domain/space/archive/controller/SpaceArchiveDataSourceControllerTest.java Controller tests for shared archive datasource endpoints.
src/test/java/org/tuna/zoopzoop/backend/domain/news/service/NewsServiceTest.java Tests for tag frequency extraction.
src/test/java/org/tuna/zoopzoop/backend/domain/news/service/NewsAPIServiceTest.java Integration-like test for news search service.
src/test/java/org/tuna/zoopzoop/backend/domain/member/service/MemberServiceTest.java Member service create/find/update/delete tests.
src/test/java/org/tuna/zoopzoop/backend/domain/member/repository/MemberRepositoryTest.java Repository test asserting cascade creation of personal archive and default folder.
src/test/java/org/tuna/zoopzoop/backend/domain/member/controller/MemberSearchControllerTest.java Member search endpoint tests.
src/test/java/org/tuna/zoopzoop/backend/domain/member/controller/MemberControllerTest.java Member info/edit/delete controller tests.
src/test/java/org/tuna/zoopzoop/backend/domain/datasource/service/PersonalArchiveDataSourceServiceTest.java Service tests for personal datasource operations.
src/test/java/org/tuna/zoopzoop/backend/domain/datasource/service/DataSourceServiceTest.java Domain datasource service tests (create/update/move/delete/search).
src/test/java/org/tuna/zoopzoop/backend/domain/datasource/service/DataProcessorServiceTest.java Tests for URL processing (network fetch) and error handling.
src/test/java/org/tuna/zoopzoop/backend/domain/datasource/service/CrawlerManagerServiceTest.java Tests for crawler manager with specific/generic site DTOs.
src/test/java/org/tuna/zoopzoop/backend/domain/datasource/service/AiServiceTest.java AI analysis service test with mocked ChatClient.
src/test/java/org/tuna/zoopzoop/backend/domain/datasource/repository/DataSourceQRepositoryImplTest.java Querydsl repository tests for search/sort/paging/active flags.
src/test/java/org/tuna/zoopzoop/backend/domain/datasource/crawler/service/VelogCrawlerTest.java Velog crawler tests.
src/test/java/org/tuna/zoopzoop/backend/domain/datasource/controller/DataSourceControllerTest.java Personal archive datasource controller tests.
src/test/java/org/tuna/zoopzoop/backend/domain/dashboard/service/GraphServiceTest.java Graph/nodes/edges persistence test.
src/test/java/org/tuna/zoopzoop/backend/domain/dashboard/extraComponent/GraphUpdateConsumerTest.java Message consumer integration test with Rabbit + graph update.
src/test/java/org/tuna/zoopzoop/backend/domain/dashboard/controller/DashboardControllerTest.java Dashboard graph get/update (with webhook signature) tests.
src/test/java/org/tuna/zoopzoop/backend/domain/archive/folder/service/PersonalArchiveFolderServiceTest.java Personal folder service tests.
src/test/java/org/tuna/zoopzoop/backend/domain/archive/folder/service/FolderServiceTest.java Folder domain service tests.
src/test/java/org/tuna/zoopzoop/backend/domain/archive/folder/controller/FolderControllerTest.java Personal folder controller tests.
Files not reviewed (5)
  • .idea/.gitignore: Language not supported
  • .idea/.name: Language not supported
  • .idea/compiler.xml: Language not supported
  • .idea/misc.xml: Language not supported
  • .idea/vcs.xml: Language not supported

Tip: Customize your code reviews with copilot-instructions.md. Create the file or learn how to get started.

Comment on lines +31 to +38
@DisplayName("성공 -> https로 주었을때")
void checkUrlTest1() {
// given
String inputUrl = "https://example.com";

// when
Map<String, Object> outputMap = dataProcessorService.checkUrl(inputUrl);
Document doc = (Document) outputMap.get("document");
Copy link

Copilot AI Oct 15, 2025

Choose a reason for hiding this comment

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

These tests perform real network calls (e.g., example.com) which can be flaky and slow in CI. Replace external HTTP calls by stubbing/mocking the fetch (e.g., use WireMock or inject a Jsoup Connection factory), or provide in-memory HTML to unit test parsing logic.

Copilot uses AI. Check for mistakes.
Comment on lines +19 to +22
@Test
@DisplayName("Velog 크롤러 작동 테스트")
void testExtract() throws IOException {
Document doc = Jsoup.connect("https://velog.io/@imcute0703123/%EC%BA%A0%ED%8D%BC%EC%8A%A4%EC%8B%9C%EA%B7%B8%EB%84%90-2025-%EB%B0%B1%EC%84%9D%EC%97%B0%ED%99%94-1%EB%93%B1-%EB%B6%80%EC%8A%A4-%EB%9F%AC%EB%B8%8C%EB%9D%BC%EC%9D%B8-%EB%A7%A4%EC%B9%AD-%EC%84%9C%EB%B9%84%EC%8A%A4-%ED%9A%8C%EA%B3%A0%EB%A1%9D").get();
Copy link

Copilot AI Oct 15, 2025

Choose a reason for hiding this comment

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

This test hits a live Velog URL, making the suite dependent on external network and page structure. For reliability, switch to a static HTML fixture (Jsoup.parse) or stub the connection to return deterministic content.

Suggested change
@Test
@DisplayName("Velog 크롤러 작동 테스트")
void testExtract() throws IOException {
Document doc = Jsoup.connect("https://velog.io/@imcute0703123/%EC%BA%A0%ED%8D%BC%EC%8A%A4%EC%8B%9C%EA%B7%B8%EB%84%90-2025-%EB%B0%B1%EC%84%9D%EC%97%B0%ED%99%94-1%EB%93%B1-%EB%B6%80%EC%8A%A4-%EB%9F%AC%EB%B8%8C%EB%9D%BC%EC%9D%B8-%EB%A7%A4%EC%B9%AD-%EC%84%9C%EB%B9%84%EC%8A%A4-%ED%9A%8C%EA%B3%A0%EB%A1%9D").get();
// Static HTML fixture representing a Velog post (simplified for test)
private static final String VELOG_HTML_FIXTURE = "<html><head><title>Test Velog Post</title></head><body>"
+ "<div class='post-title'>캠퍼스시그널 2025 백석연화 1등 부스 러브라인 매칭 서비스 회고록</div>"
+ "<div class='post-content'>이것은 테스트용 Velog 포스트 내용입니다.</div>"
+ "<img class='post-image' src='https://example.com/test-image.jpg' />"
+ "<div class='post-source'>Velog</div>"
+ "<div class='post-date'>2024-06-01</div>"
+ "</body></html>";
@Test
@DisplayName("Velog 크롤러 작동 테스트")
void testExtract() throws IOException {
Document doc = Jsoup.parse(VELOG_HTML_FIXTURE);

Copilot uses AI. Check for mistakes.
@Autowired FolderRepository folderRepository;
@Autowired DataSourceRepository dataSourceRepository;

@Mock PersonalDataSourceService personalApp;
Copy link

Copilot AI Oct 15, 2025

Choose a reason for hiding this comment

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

This mock is never used and not registered in the Spring context (should be @MockBean if overriding a bean). Remove it or convert to @MockBean and use it explicitly to avoid confusion.

Suggested change
@Mock PersonalDataSourceService personalApp;

Copilot uses AI. Check for mistakes.
Comment on lines +74 to +76
@Qualifier("dataProcessorService")
@Autowired
private DataProcessorService dataProcessorService;
Copy link

Copilot AI Oct 15, 2025

Choose a reason for hiding this comment

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

Using @qualifier("dataProcessorService") here prevents the @primary stub from being injected and will bind the real bean by name. Since this field is not used in the test, remove the qualifier (or the field) to avoid conflicting wiring.

Suggested change
@Qualifier("dataProcessorService")
@Autowired
private DataProcessorService dataProcessorService;

Copilot uses AI. Check for mistakes.

@TestConfiguration
static class StubConfig {
@Bean @Primary
Copy link

Copilot AI Oct 15, 2025

Choose a reason for hiding this comment

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

If you intend to target a named qualifier, consider naming this bean 'dataProcessorService' (e.g., @bean(name = "dataProcessorService")) or adding @qualifier on injection sites; otherwise, rely solely on @primary without qualifiers to ensure the stub is used.

Suggested change
@Bean @Primary
@Bean(name = "dataProcessorService") @Primary

Copilot uses AI. Check for mistakes.
SharingArchive sa = new SharingArchive();
Archive a = new Archive();
ReflectionTestUtils.setField(a, "id", archiveId);
sa.archive = a;
Copy link

Copilot AI Oct 15, 2025

Choose a reason for hiding this comment

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

Directly assigning 'sa.archive = a;' bypasses encapsulation and likely won't compile if the field is private. Use the setter consistently: 'sa.setArchive(a);'.

Suggested change
sa.archive = a;
sa.setArchive(a);

Copilot uses AI. Check for mistakes.
package org.tuna.zoopzoop.backend.domain.space.archive.controller;

import com.fasterxml.jackson.databind.ObjectMapper;
import jakarta.transaction.Transactional;
Copy link

Copilot AI Oct 15, 2025

Choose a reason for hiding this comment

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

[nitpick] Most tests here use Spring's @transactional (org.springframework.transaction.annotation.Transactional); standardize imports/annotations to the same variant for consistency and clearer rollback semantics in the Spring test context.

Suggested change
import jakarta.transaction.Transactional;
import org.springframework.transaction.annotation.Transactional;

Copilot uses AI. Check for mistakes.
@SpringBootTest
@Transactional
@TestInstance(TestInstance.Lifecycle.PER_CLASS)
class GraphUpdateConsumerTest extends ControllerTestSupport {
Copy link

Copilot AI Oct 15, 2025

Choose a reason for hiding this comment

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

[nitpick] This test doesn't use MockMvc/ObjectMapper from ControllerTestSupport; consider removing the inheritance to avoid pulling in extra test configuration unnecessarily.

Suggested change
class GraphUpdateConsumerTest extends ControllerTestSupport {
class GraphUpdateConsumerTest {

Copilot uses AI. Check for mistakes.
Comment on lines +81 to +82
try { memberService.createMember("spaceOwner", "http://img/owner.png", OWNER_PK, Provider.KAKAO); } catch (Exception ignored) {}
try { memberService.createMember("spaceReader", "http://img/reader.png", READER_PK, Provider.KAKAO); } catch (Exception ignored) {}
Copy link

Copilot AI Oct 15, 2025

Choose a reason for hiding this comment

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

Catching and ignoring all exceptions can hide real setup failures. Prefer checking existence first or catch specific duplicate-key exceptions so genuine errors fail fast.

Suggested change
try { memberService.createMember("spaceOwner", "http://img/owner.png", OWNER_PK, Provider.KAKAO); } catch (Exception ignored) {}
try { memberService.createMember("spaceReader", "http://img/reader.png", READER_PK, Provider.KAKAO); } catch (Exception ignored) {}
if (memberRepository.findByProviderAndProviderKey(Provider.KAKAO, OWNER_PK).isEmpty()) {
memberService.createMember("spaceOwner", "http://img/owner.png", OWNER_PK, Provider.KAKAO);
}
if (memberRepository.findByProviderAndProviderKey(Provider.KAKAO, READER_PK).isEmpty()) {
memberService.createMember("spaceReader", "http://img/reader.png", READER_PK, Provider.KAKAO);
}

Copilot uses AI. Check for mistakes.
Comment on lines +114 to +116
try {
memberService.createMember("testUser_sc1111", "http://img", TEST_PROVIDER_KEY, Provider.KAKAO);
} catch (Exception ignored) {}
Copy link

Copilot AI Oct 15, 2025

Choose a reason for hiding this comment

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

Avoid swallowing exceptions in test setup; check for existing member or catch a specific duplicate exception to prevent masking actual setup issues.

Suggested change
try {
memberService.createMember("testUser_sc1111", "http://img", TEST_PROVIDER_KEY, Provider.KAKAO);
} catch (Exception ignored) {}
if (memberRepository.findByProviderAndProviderKey(Provider.KAKAO, TEST_PROVIDER_KEY).isEmpty()) {
memberService.createMember("testUser_sc1111", "http://img", TEST_PROVIDER_KEY, Provider.KAKAO);
}

Copilot uses AI. Check for mistakes.
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

6 participants