Skip to content

Commit efb3c46

Browse files
KimgoonerEpicFnCopilottaekkongyonggi1234
authored
Develop -> Main merge : 2025.10.14 - 11:14 (#180)
* [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 Co-authored-by: Copilot <[email protected]> * Update .github/workflows/ci.yml Co-authored-by: Copilot <[email protected]> --------- Co-authored-by: Copilot <[email protected]> * 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) Co-authored-by: EpicFn <[email protected]> * 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 : 불필요한 파일 삭제 --------- Co-authored-by: EpicFn <[email protected]> * 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 : 사용자에게 온 스페이스 초대 목록 조회 테스트 케이스 작성 --------- Co-authored-by: EpicFn <[email protected]> * 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 : 사용자에게 온 스페이스 초대 목록 조회 테스트 케이스 작성 --------- 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]> * 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 : 사용자에게 온 스페이스 초대 목록 조회 테스트 케이스 작성 --------- 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 데이터 관리 도메인 설계 완료. 테스트 추가. (#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 패키지 변경 --------- Co-authored-by: EpicFn <[email protected]> * 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 : 사용자에게 온 스페이스 초대 목록 조회 테스트 케이스 작성 --------- 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-255 : 자료 이동 및 수정 구현 --------- Co-authored-by: Hyeok Jin Kim <[email protected]> Co-authored-by: EpicFn <[email protected]> * 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 : 스페이스 목록 조회 페이징 기능 추가 --------- Co-authored-by: EpicFn <[email protected]> * [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를 수행하지 않도록 변경 --------- Co-authored-by: EpicFn <[email protected]> * [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 파이프라인 수정 --------- Co-authored-by: EpicFn <[email protected]> * [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) Co-authored-by: EpicFn <[email protected]> * 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로 변경 --------- Co-authored-by: EpicFn <[email protected]> * [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 : 테스트 케이스 수정 --------- Co-authored-by: EpicFn <[email protected]> * [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) Co-authored-by: EpicFn <[email protected]> * [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 : 오타 추가 수정; --------- Co-authored-by: EpicFn <[email protected]> * [Feat/OPS-379] liveblocks 연동 (#118) * new : Liveblock API 호출을 위한 Client 빈 생성 * feat : 스페이스 생성/삭제 시 liveblocks room 도 함께 생성/삭제 * fix : test 시 mock 빈 사용 * feat : jwt 발급 로직 구현 --------- Co-authored-by: EpicFn <[email protected]> * [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 : 관련 테스트 케이스 수정 --------- Co-authored-by: EpicFn <[email protected]> * [Feat/OPS-379] liveblocks 연동 (#124) * new : Liveblock API 호출을 위한 Client 빈 생성 * feat : 스페이스 생성/삭제 시 liveblocks room 도 함께 생성/삭제 * fix : test 시 mock 빈 사용 * feat : jwt 발급 로직 구현 * fix : SpaceArchiveDataSourceControllerTest에서 liveblocks 빈 mock 처리 * fix : 오타 수정 --------- Co-authored-by: EpicFn <[email protected]> * 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 --------- Co-authored-by: EpicFn <[email protected]> * fix : 오타 수정 (#128) Co-authored-by: EpicFn <[email protected]> * [Hotfix] 파이프라인 오타 수정 (#129) * fix : 오타 수정 * fix : bucket 오타 수정 * fix: S3 관련 값 롤백 --------- Co-authored-by: EpicFn <[email protected]> * 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 : 불필요한 어노테이션 삭제 --------- Co-authored-by: EpicFn <[email protected]> * [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 문제 해결 --------- Co-authored-by: EpicFn <[email protected]> * 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 : 오타 수정 --------- Co-authored-by: EpicFn <[email protected]> * fix/OPS-399: 리프레시 토큰 이슈 수정 #2 (#165) * fix : 이미지 경로 및 반환 형식 수정 (#166) Co-authored-by: EpicFn <[email protected]> * fix : Url 수정 (#167) Co-authored-by: EpicFn <[email protected]> * fix/OPS-400 : 수정&삭제 요구사항 반영 (#169) * fix: 운영서버/테스트서버 vpc 분리되어 있어, rabbitmq host 도 분리 (#171) * fix : 멤버 삭제 시 유령 스페이스 삭제 로직 구현 (#172) Co-authored-by: EpicFn <[email protected]> * Develop -> main 병합 (#168) (#173) * [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]…
1 parent 4de2b8d commit efb3c46

File tree

265 files changed

+18965
-199
lines changed

Some content is hidden

Large Commits have some content hidden by default. Use the searchbox below for content that may be hidden.

265 files changed

+18965
-199
lines changed

.github/workflows/ci.yml

Lines changed: 0 additions & 52 deletions
This file was deleted.

.github/workflows/prod-server.yml

Lines changed: 182 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,182 @@
1+
# 워크플로우 이름
2+
name: Spring CD (Production)
3+
4+
# main 브랜치 PR에서만 실행 (이미 빌드된 Docker 이미지 사용)
5+
on:
6+
push:
7+
branches:
8+
- main
9+
paths:
10+
- 'src/**'
11+
- 'build.gradle*'
12+
- 'settings.gradle*'
13+
- 'gradle/**'
14+
- 'Dockerfile'
15+
- '.github/workflows/**'
16+
17+
jobs:
18+
# ==================================
19+
# CD: Deploy to Production Environment
20+
# ==================================
21+
cd-prod:
22+
runs-on: ubuntu-latest
23+
24+
steps:
25+
- name: Checkout code
26+
uses: actions/checkout@v4
27+
28+
- name: Deploy to Test Environment
29+
uses: appleboy/[email protected]
30+
with:
31+
host: ${{ secrets.PROD_SERVER_HOST }}
32+
username: ec2-user
33+
key: ${{ secrets.SSH_PRIVATE_KEY }}
34+
script: |
35+
36+
# GHCR 로그인 (EC2)
37+
echo "${{ secrets.GITHUB_TOKEN }}" | docker login ghcr.io -u "${{github.repository_owner}}" --password-stdin
38+
39+
# 최신 이미지 pull
40+
docker pull ghcr.io/${{ github.repository }}/zoopzoop:latest
41+
42+
# NPM API 설정
43+
NPM_HOST="localhost:81"
44+
NPM_EMAIL="${{secrets.NPM_ADMIN_EMAIL}}"
45+
NPM_PASSWORD="${{secrets.NPM_ADMIN_PASSWORD}}"
46+
PROXY_HOST_ID="${{secrets.NPM_PROXY_HOST_ID}}"
47+
48+
# NPM API 토큰 가져오기
49+
echo "Getting NPM API token..."
50+
TOKEN=$(curl -s -X POST "http://${NPM_HOST}/api/tokens" \
51+
-H "Content-Type: application/json" \
52+
-d "{\"identity\":\"${NPM_EMAIL}\",\"secret\":\"${NPM_PASSWORD}\"}" | \
53+
jq -r '.token')
54+
if [ "$TOKEN" == "null" ] || [ -z "$TOKEN" ]; then
55+
echo "❌ Failed to get NPM API token"
56+
exit 1
57+
fi
58+
59+
# 현재 NPM Proxy Host 설정 확인
60+
echo "📋 Checking current NPM configuration... 📋"
61+
CURRENT_CONFIG=$(curl -s -H "Authorization: Bearer $TOKEN" \
62+
"http://${NPM_HOST}/api/nginx/proxy-hosts/${PROXY_HOST_ID}")
63+
64+
CURRENT_TARGET=$(echo $CURRENT_CONFIG | jq -r '.[0].forward_host // .forward_host')
65+
CURRENT_PORT=$(echo $CURRENT_CONFIG | jq -r '.[0].forward_port // .forward_port')
66+
67+
echo "Current NPM target: $CURRENT_TARGET:$CURRENT_PORT"
68+
69+
# Blue-Green 배포
70+
if [ "$(docker ps -q -f name=zoopzoop-blue)" ]; then
71+
NEW_CONTAINER=zoopzoop-green
72+
OLD_CONTAINER=zoopzoop-blue
73+
NEW_PORT=8082
74+
else
75+
NEW_CONTAINER=zoopzoop-blue
76+
OLD_CONTAINER=zoopzoop-green
77+
NEW_PORT=8081
78+
fi
79+
80+
echo "Starting new container: $NEW_CONTAINER on port $NEW_PORT"
81+
docker run -d --restart unless-stopped \
82+
-p $NEW_PORT:8080 \
83+
--name $NEW_CONTAINER \
84+
--network common \
85+
-e SPRING_PROFILES_ACTIVE=server \
86+
-e SPRING_DATASOURCE_URL="${{secrets.PROD_DB_URL}}" \
87+
-e SPRING_DATASOURCE_USERNAME="${{secrets.PROD_DB_USERNAME}}" \
88+
-e SPRING_DATASOURCE_PASSWORD="${{secrets.PROD_DB_PASSWORD}}" \
89+
-e AWS_S3_BUCKET_NAME="${{secrets.AWS_S3_BUCKET_NAME}}" \
90+
-e AWS_S3_PREFIX="${{secrets.PROD_AWS_S3_PREFIX}}" \
91+
-e SPRING_RABBITMQ_HOST="${{secrets.PROD_RABBITMQ_HOST}}" \
92+
-e SPRING_RABBITMQ_PORT="${{secrets.PROD_RABBITMQ_PORT}}" \
93+
-e SPRING_RABBITMQ_USERNAME="${{secrets.PROD_RABBITMQ_USERNAME}}" \
94+
-e SPRING_RABBITMQ_PASSWORD="${{secrets.PROD_RABBITMQ_PASSWORD}}" \
95+
-e REDIS_HOST="${{secrets.PROD_REDIS_HOST}}" \
96+
-e REDIS_PASSWORD="${{secrets.PROD_REDIS_PASSWORD}}" \
97+
-e KAKAO_CLIENT_ID="${{secrets.OAUTH_KAKAO_CLIENT_ID}}" \
98+
-e GOOGLE_CLIENT_ID="${{secrets.OAUTH_GOOGLE_CLIENT_ID}}" \
99+
-e GOOGLE_CLIENT_SECRET="${{secrets.OAUTH_GOOGLE_CLIENT_SECRET}}" \
100+
-e KAKAO_REDIRECT_URI="${{secrets.PROD_OAUTH_KAKAO_REDIRECT_URI}}" \
101+
-e GOOGLE_REDIRECT_URI="${{secrets.PROD_OAUTH_GOOGLE_REDIRECT_URI}}" \
102+
-e SENTRY_DSN="${{secrets.SENTRY_DSN}}" \
103+
-e OPENAI_API_KEY="${{secrets.PROD_OPENAI_API_KEY}}" \
104+
-e LIVEBLOCKS_SECRET_KEY="${{secrets.LIVEBLOCKS_SECRET_KEY}}" \
105+
-e NAVER_CLIENT_ID="${{secrets.NAVER_CLIENT_ID}}" \
106+
-e NAVER_CLIENT_SECRET="${{secrets.NAVER_CLIENT_SECRET}}" \
107+
-e JWT_SECRET_KEY="${{secrets.JWT_SECRET_KEY}}" \
108+
-e JWT_ACCESS_TOKEN_VALIDITY="${{secrets.JWT_ACCESS_TOKEN_VALIDITY}}" \
109+
-e JWT_REFRESH_TOKEN_VALIDITY="${{secrets.JWT_REFRESH_TOKEN_VALIDITY}}" \
110+
-e FRONT_REDIRECT_DOMAIN="${{secrets.FRONT_REDIRECT_DOMAIN}}" \
111+
-e FRONT_MAIN_DOMAIN="${{secrets.MAIN_DOMAIN}}" \
112+
-e ELASTIC_HOST="${{secrets.PROD_ELASTIC_HOST}}" \
113+
ghcr.io/${{ github.repository }}/zoopzoop:latest
114+
115+
116+
# 헬스체크 (Spring Boot Actuator)
117+
for i in {1..30}; do
118+
if curl -s http://localhost:$NEW_PORT/actuator/health | grep -q '"status":"UP"'; then
119+
echo "✅New container is healthy!"
120+
break
121+
else
122+
echo "Waiting for new container to be healthy..."
123+
sleep 5
124+
fi
125+
126+
if [ $i -eq 30 ]; then
127+
echo "❌ Health check failed. Rolling back..."
128+
docker stop $NEW_CONTAINER || true
129+
docker rm $NEW_CONTAINER || true
130+
exit 1
131+
fi
132+
done
133+
134+
# NPM에서 트래픽 스위칭
135+
echo "🔄 Switching traffic in Nginx Proxy Manager..."
136+
DOMAIN_NAME=$(echo $CURRENT_CONFIG | jq -r '.domain_names[0]')
137+
CERT_ID=$(echo "$CURRENT_CONFIG" | jq -r '.certificate_id')
138+
139+
SWITCH_RESPONSE=$(curl -s -w "%{http_code}" -X PUT "http://${NPM_HOST}/api/nginx/proxy-hosts/${PROXY_HOST_ID}" \
140+
-H "Authorization: Bearer $TOKEN" \
141+
-H "Content-Type: application/json" \
142+
-d "{
143+
\"domain_names\": [\"$DOMAIN_NAME\"],
144+
\"forward_scheme\": \"http\",
145+
\"forward_host\": \"$NEW_CONTAINER\",
146+
\"forward_port\": 8080,
147+
\"caching_enabled\": false,
148+
\"block_exploits\": true,
149+
\"advanced_config\": \"\",
150+
\"locations\": [],
151+
\"certificate_id\": $CERT_ID,
152+
\"ssl_forced\": 1,
153+
\"hsts_enabled\": 1,
154+
\"hsts_subdomains\": 1
155+
}")
156+
157+
HTTP_CODE=${SWITCH_RESPONSE: -3}
158+
if [ "$HTTP_CODE" -eq 200 ] || [ "$HTTP_CODE" -eq 201 ]; then
159+
echo "✅ Traffic switching completed successfully!"
160+
echo "🎯 NPM now points to: $NEW_CONTAINER:8080"
161+
162+
# 최종 확인
163+
sleep 5
164+
echo "🔍 Final verification..."
165+
VERIFY_CONFIG=$(curl -s -H "Authorization: Bearer $TOKEN" \
166+
"http://${NPM_HOST}/api/nginx/proxy-hosts/${PROXY_HOST_ID}")
167+
VERIFY_TARGET=$(echo $VERIFY_CONFIG | jq -r '.forward_host')
168+
echo "✅ Verified NPM target: $VERIFY_TARGET"
169+
170+
else
171+
echo "❌ Traffic switching failed! HTTP Code: $HTTP_CODE"
172+
echo "Response: ${SWITCH_RESPONSE%???}"
173+
echo "🔄 Rolling back new container..."
174+
docker stop $NEW_CONTAINER || true
175+
docker rm $NEW_CONTAINER || true
176+
exit 1
177+
fi
178+
179+
# 이전 컨테이너 종료 및 제거
180+
echo "Stopping old container: $OLD_CONTAINER"
181+
docker stop $OLD_CONTAINER || true
182+
docker rm $OLD_CONTAINER || true

.github/workflows/terraform.yml

Lines changed: 56 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,56 @@
1+
name: Terraform Apply
2+
3+
on:
4+
workflow_dispatch:
5+
6+
jobs:
7+
terraform-apply:
8+
runs-on: ubuntu-latest
9+
10+
steps:
11+
- name: Checkout code
12+
uses: actions/checkout@v3
13+
14+
- name: Setup Terraform
15+
uses: hashicorp/setup-terraform@v2
16+
with:
17+
terraform_version: 1.7.6
18+
19+
- name: Terraform Init
20+
working-directory: ./infra/terraform #워크플로우 파일 위치 폴더 기준 x, 체크아웃된 저장소 루트 기준
21+
run: terraform init
22+
23+
- name: Set Environment based on Branch
24+
run: |
25+
BRANCH=${{ github.ref_name }}
26+
if [ "$BRANCH" = "develop" ] ; then
27+
ENV="test"
28+
elif [ "$BRANCH" = "main" ] ; then
29+
ENV="prod"
30+
else
31+
echo "Unsupported branch: $BRANCH"
32+
exit 1
33+
fi
34+
echo "Environment: $ENV"
35+
36+
if [ "$ENV" = "prod" ] ; then
37+
echo "${{secrets.TFVARS_PROD}}" > ./infra/terraform/env/terraform.tfvars
38+
else
39+
echo "${{secrets.TFVARS_TEST}}" > ./infra/terraform/env/terraform.tfvars
40+
fi
41+
42+
- name: Select or Create Workspace
43+
working-directory: ./infra/terraform
44+
run: |
45+
if terraform workspace list | grep -q "$ENV"; then
46+
terraform workspace select "$ENV"
47+
else
48+
terraform workspace new "$ENV"
49+
fi
50+
51+
- name: Terraform Apply
52+
working-directory: ./infra/terraform/env
53+
run: terraform apply -auto-approve -var-file="terraform.tfvars"
54+
env:
55+
AWS_ACCESS_KEY_ID: ${{ secrets.AWS_ACCESS_KEY_ID }}
56+
AWS_SECRET_ACCESS_KEY: ${{ secrets.AWS_SECRET_ACCESS_KEY }}

0 commit comments

Comments
 (0)