[FIX]: 회원 테스트 데이터 미적재 오류 수정 - #59
Conversation
- CHECK_SQL 조건 수정
📝 Walkthrough개요ChatTimeCsvLoader와 UserCsvLoader의 데이터 존재 여부 확인 SQL이 10,000건 이상 레코드 기준으로 통일되었습니다. 기존 변경 사항CSV 로더 데이터 임계값 통일
예상 코드 리뷰 노력🎯 1 (간단함) | ⏱️ ~5분 제안 리뷰어
축하 시
🚥 Pre-merge checks | ✅ 3✅ Passed checks (3 passed)
✏️ Tip: You can configure your own custom pre-merge checks in the settings. ✨ Finishing Touches🧪 Generate unit tests (beta)
Thanks for using CodeRabbit! It's free for OSS, and your support helps us grow. If you like it, consider giving us a shout-out. Comment |
There was a problem hiding this comment.
🧹 Nitpick comments (1)
src/main/java/org/pgsg/user_service/user/infrastructure/loader/ChatTimeCsvLoader.java (1)
10-10: ⚡ Quick win매직 넘버를 상수화하거나 설정 가능하게 만드는 것을 고려하세요.
임계값
10000이 두 로더에서 반복 사용되고 있습니다. 이를 공통 상수로 추출하거나 설정 파일에서 읽어오도록 하면 유지보수성이 향상됩니다.♻️ 제안: 공통 상수로 추출
공통 인터페이스나 AbstractCsvLoader에 상수를 정의:
// AbstractCsvLoader 또는 별도의 상수 클래스에 protected static final int DATA_LOADED_THRESHOLD = 10000;그런 다음 각 로더에서:
- private static final String CHECK_SQL = "SELECT CASE WHEN COUNT(*) >= 10000 THEN 1 ELSE 0 END FROM p_chat_time_range"; + private static final String CHECK_SQL = "SELECT CASE WHEN COUNT(*) >= " + DATA_LOADED_THRESHOLD + " THEN 1 ELSE 0 END FROM p_chat_time_range";🤖 Prompt for AI Agents
Verify each finding against current code. Fix only still-valid issues, skip the rest with a brief reason, keep changes minimal, and validate. In `@src/main/java/org/pgsg/user_service/user/infrastructure/loader/ChatTimeCsvLoader.java` at line 10, The hard-coded threshold 10000 in CHECK_SQL (used in ChatTimeCsvLoader and another loader) should be extracted to a shared constant or made configurable: add a DATA_LOADED_THRESHOLD constant (or load from configuration) in AbstractCsvLoader or a common constants/config class, update ChatTimeCsvLoader.CHECK_SQL to build or parameterize the SQL using that constant/value, and update the other loader to reference the same constant/value so the threshold is centralized and reusable.
🤖 Prompt for all review comments with AI agents
Verify each finding against current code. Fix only still-valid issues, skip the
rest with a brief reason, keep changes minimal, and validate.
Nitpick comments:
In
`@src/main/java/org/pgsg/user_service/user/infrastructure/loader/ChatTimeCsvLoader.java`:
- Line 10: The hard-coded threshold 10000 in CHECK_SQL (used in
ChatTimeCsvLoader and another loader) should be extracted to a shared constant
or made configurable: add a DATA_LOADED_THRESHOLD constant (or load from
configuration) in AbstractCsvLoader or a common constants/config class, update
ChatTimeCsvLoader.CHECK_SQL to build or parameterize the SQL using that
constant/value, and update the other loader to reference the same constant/value
so the threshold is centralized and reusable.
ℹ️ Review info
⚙️ Run configuration
Configuration used: Organization UI
Review profile: CHILL
Plan: Pro Plus
Run ID: 475222ca-b74e-4932-ac7b-ba1b4c2108d4
📒 Files selected for processing (2)
src/main/java/org/pgsg/user_service/user/infrastructure/loader/ChatTimeCsvLoader.javasrc/main/java/org/pgsg/user_service/user/infrastructure/loader/UserCsvLoader.java
- .gitignore 수정
* Merge pull request #3 from 89-49/feature/security-refactor feat : Security 설정 추가 * [Feat] 회원 엔티티 및 VO 추가 (#4) * feat: 회원권한 vo 추가 - 회원권한은 USER, MANAGER, MASTER로 구분 - X-User-Role의 문자열에 해당하는 회원권한 enum을 찾아 반환하는 도메인 로직 추가 * feat: 채팅가능시간대 vo 추가 - 1개의 채팅가능 시간대는 요일, 시작시간, 종료시간 필드로 구성 - VO 생성에 필요한 정적 팩토리 메서드 추가 * feat: 회원 엔티티 추가 - 회원 도메인의 애그리거트 루트 역할을 하는 엔티티 - 회원의 username, name, nickname에 관한 복합 unique 제약조건 추가 - 회원 엔티티 생성에 필요한 정적 팩토리 메서드 추가 - 회원의 채팅가능시간대를 저장하는 도메인 로직은 인증 기능 구현 완료 흐 추가할 예정입니다. * feat : 토큰 저장 및 만료 부분 구현 (#7) * feat : 토큰 저장 및 만료 부분 구현 - 토큰 생성 및 유효성 검사 작성 - RefreshToken 구현은 해놓았으나 추후에 사용 예정 * feat : 코드 래빗 내용 참조 및 내용 수정 - string userid -> uuid로 변경 - UserRole를 참조해서 role를 가져오도록 설정 - TokenPair에서 검증하도록 로직 추가 - 토큰 저장,조회시 hash값을 사용하도록 수정 * fix : userId UUID로 통합 및 누락 부분 추가 수정 * fix : // 만료된 토큰에서도 클레임을 추출 부분 에서 토큰이 어떤 부분을 의미하는지 부정확함으로 수정 * fix : 토큰 사용자 식별값 string -> uuid로 변경 * feat: 회원 리포지토리 추가 - domain 패키지에 UserRepository 추가 및 userId, username 기반 단일 회원 조회 메서드 추가 - infrastructure 패키지에 JpaUserRepository 추가 * feat: 로그인용 회원정보 조회 DTO 추가 - application 패키지 내 UserDetailsInfo 추가 - presentation 패키지 내 GetUserDetailsResponse 추가 - 로그인용 회원정보 조회 요청에 관한 응답 시, User -> UserDetailsInfo -> GetUserDetailsResponse 로 진행되는 흐름을 구현 * feat: 회원 엔티티 수정 - 회원 엔티티의 복합 unique 제약 조건을 단일 unique 제약 조건으로 수정하여 username의 중복 방지 - isEnabled() 메서드 추가 * feat: 회원 조회 서비스 로직 추가 - application 패키지 내 UserService 클래스 추가 및 로그인용 회원 조회 기능 구현 * feat: 로그인 전용 회원 조회 엔드포인트 추가 - presentation 패키지 내 UserInternalController 추가 - username 기반 회원 조회를 수행하기 위한 /internal/v1/users/{username} 엔드포인트 추가 * refactor: 로그인용 회원조회 관련 DTO 수정 - UserDetailInfo DTO 이름 오탈자 수정 - GetUserDetailsResponse에서 LoginUserResponse로 DTO명 변경 * Update README.md * feat: userId 기반 회원조회 관련 DTO 수정 - UserDetailInfo 레코드 필드로 chatTimeRange 리스트 추가 및 관련 정적 팩토리 메서드 추가 - application 패키지에 ChatTimeRangeInfo DTO 클래스 추가 - presentation 패키지에 UserDetailResponse DTO 클래스 추가 * feat: userId 기반 회원 단건 조회 기능 추가 - UserService 내 userId 기반 회원 단건 조회 기능 구현 - UserController 클래스 및 /api/v1/users/{userId} 엔드포인트 추가 * fix: UserService 회원 조회 메서드 수정 - 누락된 @transactional(readOnly=true) 어노테이션 추가 * fix: UserDetailInfo 수정 및 LoginUserDetailInfo 추가 - UserDetailInfo에서 내부 인증 호출 전용 LoginUserDetailInfo 분리 - UserDetailInfo의 메서드 getChatTimeTangeInfos()에 NPE 방지 로직 추가 * feat: 회원 권한 체크 도메인 로직 추가 - user/domain/service 패키지 내부에 RoleCheck를추가하여 현재 요청자가 메서드 파라미터에서 지정한 권한을 보유하는지를 확인하는 기능을 정의 - SecurityRoleCheck에서 hasRole 메서드의 내부 로직은 공통 모듈 배포 이후 SecurityUtil을 사용하여 구현할 예정 * refactor: userId 기반 관리자 전용/내부 호출용 회원조회 기능 분리 - /api/v1/users/{userId}는 관리자 전용 회원 조회 기능이므로 UserService의 기존 getUser를 getUserForAdmin 메서드와 getUser 메서드로 분리 - getUserForAdmin 내부에 RoleCheck를 활용한 관리자 권한 확인 기능 추가 - 잠재적인 경로 체크 문제 방지 및 API 가독성 개선 측면에서 UserInternalController의 `/internal/v1/users/{username}`을 `/internal/v1/users?username={username}`으로 수정 * feat : 로그인 기능 구현 (#10) * feat : 로그인 기능 구현 - 임시로 usersevies에서 username으로 검색하도록 구현 - LoginFilter 간소화 -> 추후 게이트 웨이에서 검증 부분 추가 필요 - 로그인시 암호 해독으로 config에 PasswordEncoder부분 추가 * Apply suggestions from code review Co-authored-by: coderabbitai[bot] <136622811+coderabbitai[bot]@users.noreply.github.com> --------- Co-authored-by: coderabbitai[bot] <136622811+coderabbitai[bot]@users.noreply.github.com> * [Chore] 도메인 계층 엔티티 관련 패키지명 수정 및 dto 관련 하위 패키지 추가 (#13) * chore: dto 저장 경로 변경 - user/application/dto의 하위 패키지에 info, command 패키지를 추가함에 따라, 기존의 ~Info로 끝나는 DTO의 저장 경로를 user/application/dto/info로 변경 - user/presentation/dto의 하위 패키지로 request, response 패키지를 추가한 후 기존 응답 DTO의 저장 경로를 response 패키지 내부로 이전 - import문의 회원 도메인 관련 dto 패키지 경로 수정 * fix: UserAuthenticator 컴파일 에러 수정 - 메서드 중간에 import문이 삽입되어 컴파일 에러를 발생시켰던 부분을 정리 * feat: 회원등록 메서드 추가 - UserRepository save() 메서드 추가 - UserService createUser() 메서드 추가 * chore: domain 계층 패키지명 변경 - 인증, 회원 도메인의 domain/entity 패키지를 domain/model로 변경하고 import문에도 변경 사항을 반영 * fix: jwtProperties 관련 컴파일 에러 수정 - getSecret() 메서드 대신 getSecretKey()를 호출하면서 발생한 컴파일 에러 수정 * 로그아웃 기능 구현 (#15) * feat : 로그아웃 구현 - userId로 로그아웃이 되도록 작성함 * fix : UserAuthenticator.java파일에 이상하게 작성되어 있던 부분 수정 * [Feat] 회원가입 기능 구현 (#18) * feat: 신규 회원 생성용 DTO 추가 - 회원정보 생성, 회원의 채팅가능 시간대 추가용 DTO를 각각 CreateUserCommand, CreateChatTimeCommand로 구현 * feat: 신규 회원 생성 서비스 로직 구현 - User 엔티티 내부에 채팅가능 시간대를 저장하는 메서드 추가 - UserService의 createUser() 메서드 구현 * feat: 회원 등록 시 검증 로직 추가 - UserRepository에 중복된 username을 사용하는 회원을 조회하는 메서드를 추가하고 이를 UserService에 사용하여 회원가입 시 중복된 username 사용을 방지 - 현재 요청자가 총관리자 권한을 보유할 때만 관리자, 총관리자 등록 가능하도록 제한 - 최초로 총관리자를 등록하는 문제를 해결하기 위해, 회원 도메인 서버 구동 시 src/main/resources/data.sql의 insert문을 통해 총관리자를 등록 가능하도록 설정, WHERE NOT EXISTS 조건을 통해 중복 등록 방지 * fix: 코드래빗 수정사항 반영 - data.sql의 비밀번호 원문 관련 주석 삭제 - username 중복 여부 검사 시점과 회원 엔티티 저장 시점 간 차이로 인해 다른 사용자가 동일한 username으로 저장할 시 발생하는 데이터 무결성 문제에 관한 예외처리 코드 추가 * feat: 인증 도메인 회원가입 관련 DTO 추가 - auth/application/dto/command 패키지에 회원 도메인으로 사용자의 입력값들을 전송하기 위한 SignupUserCommand DTO 추가 - auth/presentation/dto/request 패키지에 회원가입 요청 데이터를 저장하기 위한 UserSignupRequest 추가 * feat: 회원가입 메서드 추가 - AuthService 클래스에 signup() 메서드를 추가 - signup() 메서드에서는 인증 도메인에서 수신한 데이터를 회원 도메인의 회원 등록 기능에서 사용할 DTO로 변환 후 회원 등록 진행 * feat: 회원가입 엔드포인트 추가 - AuthController에 POST /api/v1/auth/signup api를 추가 * feat: 인증 도메인 회원가입 응답 DTO 추가 - auth/presentation/dto/response에 UserSignupResponse를 추가하여 회원가입 요청에 관한 응답을 제공할 때 활용 - auth/application/dto/info 패키지에 SignupInfo를 추가하여 회원가입 완료된 사용자의 정보를 presentation 계층으로 전송할 때 사용 * feat: 회원가입 기능 관련 응답 DTO 적용 - 회원가입을 수행하는 signup() 메서드의 반환타입으로는 새로 추가한 회원가입 응답 DTO를 사용 - AuthService의 회원가입 메서드의 반환타입으로 SignupInfo를 지정 - AuthController의 회원가입용 엔드포인트의 반환타입으로 UserSignupResponse를 사용 * feat: 로그인/로그아웃 @transactional 추가 - AuthService의 login(), logout() 메서드에 @transactional 어노테이션 적용 * feat: 회원의 채팅 가능 시간대 검증 기능 추가 - dayOfWeek, startTime, endTime이 모두 null이 아니면서, startTime이 endTime보다 항상 앞서야 한다는 검증 규칙 추가 * refactor: CreateChatTimeCommand 정적 팩토리 메서드명 변경 - CreateChatTimeCommand의 메서드명을 to()에서 toChatTime()으로 변경하여 가독성 개선 * fix: 권한 문자열 매핑 로직 수정 - 권한의 한글 설명, enum 상수명, ROLE_ 접두사를 사용한 권한명에 대해 해당하는 UserRole enum을 매핑하도록 개선 * fix: 회원가입 요청 DTO 유효성 검증 로직 보강 - 정규표현식 기반 username, password, userRole, name, nickname 검증 추가 - name, nickname는 최대 20글자까지만 허용 - 채팅가능 시간이 null이 아닌 것만 Command로 변환하도록 null 체크 로직 보강 * [Feat] 공통모듈 설정 적용 (#20) * chore: 공통모듈 적용에 필요한 build.gradle 설정 추가 - repositories에 사용할 공통 모듈 경로 추가 - github package를 통해 공통모듈을 제공받기 위해 필요한 github access token 관련 설정도 추가 - 공통 모듈 의존성('org:pgsg:common') 추가 * comment: 인증 도메인 TODO 주석 추가 - 인증 도메인에서 공통모듈 적용과 관련해서 추가 작업이 필요한 부분에 TODO 주석 작성 * feat: 회원 권한 검사 기능 구현 - SecurityRoleCheck에서 미구현된 hasRole() 메서드의 세부 기능 추가 * feat: 회원 엔티티 Auditing 필드 추가 - 회원 엔티티가 공통 모듈의 BaseEntity를 상속받도록 수정 - 회원 엔티티의 isEnabled() 조건 수정 - 회원 엔티티에 @SQLRestriction("deleted_at IS NULL") 어노테이션 추가 * chore: user-service 실행 환경 세팅 - src/main/resources/application.yml 파일 설정 세팅 및 관련 주석 추가 - src/test/resources/application.yml 파일 설정 세팅 및 관련 주석 추가 - .env.example 파일 내용 갱신 - build.gradle의 spring cloud 버전을 spring boot 3.5.13 버전에 호환되도록 수정 - 테스트용 h2 DB 의존성 추가 * chore: 통합 테스트 전용 설정 분리 - UserServiceApplicationTests에 src/test/resources/application.yml 파일의 설정을 적용하도록 설정 변경 * feat: 회원 조회 DTO Auditing 필드 추가 - 회원조회 DTO에 BaseEntity의 Auditing 필드를 추가하여 회원 조회 시 생성일자, 생성자, 수정일자, 수정자, 삭제일자, 삭제자 정보를 제공 * remove: global 패키지 삭제 - 공통모듈에서 제공하는 security 기능을 사용하게 되면서 더 이상 사용하지 않는 global 패키지를 삭제 * refactor: Config 클래스 수정 - auth/infrastructure/config 패키지의 SecurityConfig 클래스 이름이 공통모듈에서의 Config 클래스와 중복되므로, auth/infrastructure/config 패키지에 있던 SecurityConfig를 UserAuthConfig로 변경 - UserAuthConfig에 AuthenticationManager 빈 설정 추가 * refactor: 공통 모듈의 UserDetailsImpl 적용 - UserDetailsServiceImpl에서 사용하던 UserDetailsImpl을 공통모듈에서 제공하는 UserDetailsImpl로 교체 - auth/infrastructure 패키지에 있던 기존 UserDetailsImpl은 삭제 * refactor: UserAuthenticator에 공통 모듈 코드 적용 - UserAuthenticator를 인터페이스로 분리하고, 그 구현체인 UserAuthenticatorImpl 클래스는 auth/infrastructure 패키지로 이전 - UserAuthenticatorImpl의 verify() 메서드 호출 시, 내부적으로 AuthenticationManager.authenticate() 메서드를 사용하도록 코드 수정 * refactor: JWT 발급 기능에 공통모듈의 UserDetailsImpl 적용 - accessToken 발급 기능과 refreshToken 발급 기능 분리 - accessToken 발급 시 공통모듈의 UserDetailsImpl을 사용하도록 수정 - refreshToken 발급 시 회원의 UUID, 권한만 사용하도록 수정 * feat: 회원 도메인 내 userId 기반 인증 도메인용 회원조회 기능 추가 - 인증 도메인의 재발급 로직에서 활용 - LoginUserDetailInfo에 UserDetailImpl로의 전환에 활용할 toUserDetails() 메서드 추가 - 인증 처리용 회원조회 메서드와 일반 회원조회용 메서드 구분을 위해 인증 도메인에서 사용할 조회 메서드의 이름은 getUserForAuth()로 통일 * refactor: 회원 도메인 전용 커스텀 예외 클래스 추가 - UserServiceException 추가 - 회원도메인 에러메시지 관리용 application-error.yml 파일 추가 - 기존 예외 클래스를 회원 도메인 전용 커스텀 예외 클래스로 대체 * comment: TODO 주석 삭제 - 회원 도메인 전용 커스텀 예외 적용 관련 TODO 주석 삭제 * refactor: accessToken의 Bearer 접두사 추가 시점 변경 - 로그인 요청에 관한 응답 시점이 아닌 accessToken생성 시점으로 Bearer 접두사 추가 시점을 변경 * refactor: accessToken의 Bearer 접두사 추가 시점 변경 - 회원/인증 도메인 전용 security 설정에 관한 UserAuthConfig 추가 - UserAuthConfig 설정과 공통 모듈의 SecurityConfig 설정을 모두 적용 * chore: 배포 관련 설정 수정 - Dockerfile 설정에 공통모듈 사용에 필요한 github package 인증 관련 환경변수 추가 - 유레카 서버 연동 관련 bridge network 설정 추가 - UserServiceApplication 내 EnableEurekaClient 어노테이션 추가 - application.yml 파일 환경변수 설정 추가 * fix: 동기식 통신용 internal api 인가 설정 추가 - UserAuthConfig 클래스 내 filterChain() 메서드에 /internal/v1/users/** api 호출은 모두 허용하는 설정 추가 * comment: env.example 파일 설명 수정 - env.example 상단에 안내문 추가 - JWT 시크릿 관련 예시 값 수정 * chore: docker 설정 수정 - 빌드 시점에만 github package 인증 정보를 사용하도록 dockerfile 수정 * fix: 코드래빗 수정사항 반영 - DataIntegrityViolationException 발생 시 유니크 제약조건을 위반했을 때만 409 예외를 발생시키도록 유도 - UserAuthConfig /api/v1/auth/logout의 경우 인증된 사용자일 때만 로그아웃 가능하도록 수정 - src/test/resources/application.yml 파일 설정 수정 * fix: UserRole 관련 예외 처리 방식 수정 - application-error.yml 내 UserRoleNotFoundException 객체 추가 - UserRole에서 회원권한에 해당하는 enum을 찾지 못할 때 회원 도메인 전용 커스텀 예외를 던지도록 수정 * fix: 코드래빗 수정사항 반영 - docker-compose.yml 파일의 포트 매핑이 SERVER_PORT 환경 변수와 동기화되도록 수정 - AuthService 내 하드코딩된 refreshtoken TTL 수정 * fix: docker-compose.yml 수정 - docker-compose.yml 네트워크 설정 조정 * chore: user-service 실행 환경 설정 수정 (#22) * chore: user-service 실행 환경 설정 수정 - docker-compose.yml 네트워크 설정 및 서버 포트번호 매핑 설정 조정 - 프로젝트 폴더 내 .env 파일을 불러온 후 config-server의 설정을 불러오도록 수정 - README.md 파일 내 docker 파일 실행 방법 관련 설명 추가 * docs: README.md 파일 내용 보충 - 환경변수 설정 관련 내용(env.example 파일) 업데이트 - * comment: README.md 수정 - docker run 명령어 실행 관련 주석 위치 수정 * docs: README.md 수정 - docker 명령어 실행 시 주의사항 추가 * docs: env.example 수정 - env.example 파일 환경변수명 수정 - 관련 README 내용 업데이트 * chore: application.yml 수정 (#24) - 누락된 application.yml 파일 설정 추가 및 README 업데이트 * [Feat] JWT 인증 필터(임시) 구현 및 토큰 재발급 로직 추가 (#27) * chore: auth/infrastructure 내 하위 패키지 추가 - security 패키지와 redis 패키지로 분리 - 기존의 config 패키지는 security 패키지 내부로 이전 * feat: JWT 토큰 검증 및 토큰 파싱 기능 수정 - JwtTokenProvider에 parseClaims() 메서드 추가 - JwtTokenProviderImpl 내 parseClaims() 메서드의 접근제한자를 public으로 변경 - validateToken() 메서드 내부의 예외 처리 로직 세분화 * feat: Http 요청에 관한 Wrapper 추가 - Http 요청을 서블릿에서 처리할 때 원본 요청 헤더는 기본적으로 read-only이므로 커스텀 요청 헤더를 요청 메시지에 추가하려면 decorator 패턴에 기반한 전용 Wrapper 활용 필수 - 이 클래스에서는 기존의 요청 헤더에 JWT 토큰을 파싱하여 만든 커스텀 요청 헤더를 추가하는 작업을 진행 - 게이트웨이에 사용할 spring-cloud-gateway는 webflux 기반이므로 이 클래스는 게이트웨이로 JWT 인증 필터를 분리하기 전까지만 임시로 사용 * feat: 임시 JWT 인증 필터 기능 구현 및 적용 - 발급받은 JWT 토큰(accessToken)을 요청 헤더로 변조하는 작업을 수행하는 JwtAuthenticationFilter 추가 - JwtAuthenticationFilter를 먼저 실행한 다음 LoginFilter를 실행하도록 설정 - 필터 실행 순서 및 각 필터별 역할에 관한 주석 추가 * comment: redis 기반 토큰 저장소 관련 TODO 주석 추가 - 게이트웨이 인증 필터 구현 관련 주석 추가 - 토큰을 관리하기 위한 redis는 user-service에 두어 토큰 데이터가 gateway, user-service에 각각 분산되지 않고 통합적으로 관리될 수 있게 함 * refactor: auth/infrastructure 패키지 내부 구조 세분화 및 TokenProvider 클래스명 변경 - auth/infrastructure 패키지 내부를 filter, jwt, config로 세분하여 이후의 게이트웨이 인증 필터 분리 작업을 대비 - JwtAuthenticationFilter는 filter 패키지로 이동 -> 게이트웨이 인증 필터의 내부 로직으로 활용 - 기존 JwtTokenProvider 인터페이스의 이름을 TokenProvider로 변경함에 따라 JwtTokenProviderImpl -> JwtTokenProvider로 클래스명을 변경 - JwtProperties, JwtTokenProvider는 jwt 패키지로 이전 -> 공통모듈에 추가 예정 * comment: TokenProvider 내 게이트웨이 필터 분리 작업 계획 관련 TODO 주석 - gateway와 user-service에서 코드 중복 없이 TokenProvider를 사용하기 위해 TokenProvider를 공통모듈로 이전하기 위한 준비 - TokenProvider를 공통 모듈로 이전할 때 수행할 작업에 관한 주석 추가 * comment: 게이트웨이 인증 필터 분리 작업 계획 정리 - 현재는 임시로 user-service에서 JWT 인증 및 요청헤더 변조 작업까지 수행하도록 구현 - gateway-server에 JWT 인증 필터 기능을 이전하는 작업에 관한 TODO 주석 추가 * comment: 게이트웨이 인증 필터 분리 작업 관련 TODO 주석 추가 - 게이트웨이 인증 필터 분리 작업 진행 시 gateway-server와 user-service에 동일한 tokenProvider를 공유하기 위해 필요한 사항 정리 - 공통모듈에 추가된 JwtProperties, JwtTokenProvider 코드만 제공하고 자동 빈 등록, 수동 빈 등록 모두 수행하지 않는다는 TODO 주석 작성 * refactor: 패키지 경로 및 클래스명 변경사항 반영 - auth 패키지 내 일부 클래스명/인터페이스명 변경 및 패키지 저장 경로 관련 변경사항을 반영하여 import문 수정 * refactor: TODO 주석 미반영 사항 수정 - SignupInfo에 createdAt, createdBy 필드 추가 * fix: JWT 인증 필터 기능 보강 - 클라이언트가 Authorization 헤더 없이 X-User-* 헤더만 담긴 요청 메시지를 발송한 경우에는 해당 커스텀 요청 헤더를 위변조된 헤더로 판정하여 삭제하도록 수정 * comment: JWT 인증 필터 기능 보강 관련 주석 추가 - 클라이언트가 Authorization 헤더 없이 x-user- 로 시작하는 헤더를 보내는 것을 공격으로 간주하는 이유에 관한 주석 추가 * refactor: 코드래빗 수정사항 반영 - doFilterInternal() 메서드 내 try-catch문 추가를 통해 500 에러 예외처리 - X-User-Enabled 헤더 기본값 설정 * refactor: 코드래빗 수정사항 반영 - parseClaim() 메서드 관련 예외처리 및 doFilterInternal() 메서드 가독성 개선 * feat: 토큰 재발급용 DTO 추가 - auth/presentation 패키지 내 UserReissueRequest 추가 - auth/application 패키지 내 ReissueUserCommand 추가 * feat: 토큰 재발급 로직 구현 - AuthService 내 reissue() 메서드 추가 - AuthController 내 /api/v1/auth/reissue 엔드포인트 추가 * refactor: 사용자 인증 로직과 토큰 관리 로직 분리 - userAuthenticator에 토큰 검증 및 토큰 블랙리스트 검증 메서드 정의 - 인증 도메인 내 토큰 발급, 토큰 유효성(만료시간, 서명) 검사, 토큰 저장 등 토큰 관리 기능을 TokenService에 통합 * feat: 토큰 블랙리스트 검증 기능 추가 - 로그아웃한 사용자의 accessToken의 유효기간이 남은 경우, 이를 재사용하는 것을 방지하기 위해 남은 유효시간 동안만 accessToken을 블랙리스트에 저장 - accessToken의 남은 유효기간을 계산할 메서드(getRemainingTime()) 정의 및 기능 구현 * comment: 게이트웨이 인증 필터 분리 관련 TODO 주석 수정 - UserAuthenticatorImpl 내 토큰 블랙리스트 관련 주석 추가 - 작업 완료된 사항에 관한 주석 삭제 * fix: 코드래빗 수정사항 반영 - 토큰 재발급 엔드포인트 호출은 모든 사용자가 가능하도록 UserAuthConfig 수정 - ReissueUserCommand 빈 문자열, null 체크 추가 - TokenService의 토큰 검증 기능 관련 예외 처리 로직 보강 * fix: 토큰 블랙리스트 redis key 수정 - 로그아웃한 사용자의 accessToken을 토큰 블랙리스트에 저장할 시 accessToken의 subject인 userId를 redis key, accessToken은 redis value로 사용하도록 수정 * refactor: refreshTokenHash 파라미터명 수정 - 실제 동작과 불일치하므로 refreshToken으로 수정 * fix: 토큰 타입 구분용 enum 추가 - TokenType enum을 사용하여 발급된 토큰 타입을 구분함으로써 accessToken 대신 refreshToken이 오용되는 것을 방지 * refactor: JwtUtil 클래스 추가 - JWT 관련 중복되는 상수 및 기능 통합 * fix: 코드래빗 수정사항 반영 - 블랙리스트 저장/조회 시 토큰 형식 통합 * chore: 공통모듈 버전 업그레이드 - build.gradle에서 사용할 공통모듈의 버전을 0.1.0으로 업그레이드 * refactor: 요청 DTO 유효성 검사 규칙 수정 - String 타입 필드에 관한 유효성 검증 시 @notblank를 사용하도록 수정 - 입력받은 데이터에 관한 유효성 검사는 presentation 계층의 요청 DTO에서만 수행 * refactor: 회원 도메인 예외 처리 방식 변경 - 발생한 에러를 검출하기 위해, 기존의 application-error.yml에서 에러메시지를 관리하는 방식 대신 UserErrorCode enum을 통해 application-error.yml 파일의 key값을 관리하는 방향으로 수정 - 회원 도메인용 커스텀 예외 핸들러 추가 - UserServiceException 수정 - 기존의 application-error.yml 파일의 이름을 application-user-error.yml로 변경 - application-user-error.yml 파일의 설정을 불러오도록 application.yml 파일의 설정 수정 * refactor: 회원 도메인 예외 처리 방식 적용 - UserServiceException 예외 처리 시 UserErrorCode enum을 사용하도록 기존 예외 처리 로직을 수정 * fix: 코드래빗 수정사항 반영 - 유효성 검사 어노테이션 관련 피드백 반영 - UserExceptionHandler 관련 피드백 반영 * fix: 코드래빗 수정사항 반영 - 토큰 재발급 요청 DTO에 accessToken 또는 refreshToken이 null일 시 지정한 에러 메시지와 400 에러로 응답하도록 수정 - 최소 1개의 채팅 가능 시간대를 지정해야 한다는 규칙과 관련된 유효성 검증 로직 강화 * fix: 로그아웃 진행 시 블랙리스트 로직 미적용 문제 수정 - JwtAuthenticationFilter 내부에 UserAuthenticator를 주입하여, 내부에서 동작하는 UserAuthenticator가 블랙리스트 검증 로직을 수행하도록 위임 * fix: 코드래빗 피드백 반영 - 블랙리스트에 등록된 토큰일 때의 로그 메시지에서 accessToken이 노출되는 문제 수정 * [Chore] 회원 - 게이트웨이 간 연동 확인(docker 기준) (#29) * chore: 공통모듈 버전 업그레이드 - 공통모듈에 추가한 JWT 토큰 발급 관련 기능을 사용하기 위해 build.gradle의 공통모듈의 버전을 0.2.0 버전으로 업데이트 * refactor: 공통모듈의 코드로 Jwt 토큰 발급 기능 대체 - auth 패키지에 작성된 기존의 JWT 토큰 발급 기능을 공통모듈에 추가한 Jwt 토큰 발급 기능으로 교체 - 기존의 auth 패키지에 작성된 JWT 토큰 발급 기능은 deprecated 처리 * fix: 빈 순환참조 문제 수정 - gradle build clean 명령어 실행 시 빈 순환참조 문제로 인해 contextLoad()에서 발생한 오류 해결 - UserAuthConfig 내부에서 빈 주입과 생성을 동시에 수행하는 코드를 수정하기 위해 JwtConfig, UserAuthenticatorConfig 클래스를 분리 - 기존 UserAuthConfig는 UserSecurityConfig로 명칭 변경 * remove: 공통모듈로 이전함에 따라 더 이상 사용되지 않는 파일 삭제 - 공통모듈에 추가한 Jwt 토큰 발급 기능으로 대체되어 삭제 * refactor: 공통모듈의 클래스 적용 - 공통모듈로 이전한 Jwt 관련 기능으로 대체 * chore: 테스트 실행환경 수정 - ddl-auto의 값을 create-drop으로 변경 - jwt secret-key 기본값을 게이트웨이와 통일 * chore: 사용하지 않는 임포트 및 주석 삭제 - 사용하지 않는 임포트 및 주석 삭제 * chore: 코드래빗 피드백 반영 - 테스트 환경의 config import 적용 순서를 일반 실행 환경과 동일하게 적용 * [Feat] 회원 자신의 회원정보 조회 기능 구현 (#31) * feat: 로그인한 회원 자신의 정보 조회 기능 추가 - GET /api/v1/users/me api 엔드포인트 추가 * fix: TODO 주석 작업 진행 - UserSignupResponse DTO 내 createdAt, createdBy 필드 추가 * [Feat] 게이트웨이 전용 토큰 검증 api 구현 (#33) * feat: 블랙리스트 검증 요청/응답 DTO 추가 - UserVerifyRequest, UserVerifyResponse DTO 추가 * feat: /internal/v1/auth/verify api 추가 - AuthInternalController 클래스 추가 - 게이트웨이에서 전송한 accessToken이 로그아웃한 사용자의 토큰인지 검증하는 작업을 수행 * refactor: UserSecurityConfig 수정 - /internal/v1/**로 시작되는 api가 호출된 경우에는 모두 허용 - 내부 호출용 api로 FeignClient에서만 사용되고, 게이트웨이를 통해서는 해당 api 호출 불가능하도록 이미 처리함 * commend: isBlacklisted() 메서드 주석 수정 - try 블록 안에서 발생한, 검증 대상인 accessToken의 userId 추출 실패 등의 모든 예외 상황은 토큰이 블랙리스트에 포함된 것과 동일하게 취급하여 fast-fail 처리 * [Feat] 회원 목록 조회 및 검색 기능 구현 (#35) * refactor: 로그인용 회원정보 조회 DTO명 수정 - LoginUserResponse에서 UserLoginResponse로 변경하여 DTO 명명 방식의 일관성 유지 * feat: 회원 목록 조회/검색용 DTO 추가 - user/application/dto/query 패키지에 검색조건에 관한 SearchUserQuery DTO 추가 - user/application/dto/query 패키지에 단건 검색결과에 관한 UserSearchResult DTO 추가 - user/presentation/dto 패키지에 검색 요청, 응답 DTO 추가 * feat: 회원 목록 조회/검색용 엔드포인트 추가 - GET /api/v1/users 요청을 처리하기 위한 엔드포인트 추가 * refactor: CQRS 패턴 적용 - 회원 도메인의 조회 기능은 용도에 따라 세분되어 있으나, 변경 기능은 용도가 한정되어 있으므로, 이 두 기능을 별도로 분리하여 관리하기 위해 CQRS 패턴을 적용 - 필요한 범위 내에서만 트랜잭션을 적용하여 관리할 수 있도록 Facade 계층 분리 - 기존의 UserService는 UserQueryFacade, UserCommandFacade로 분리 * refactor: CQRS 패턴 반영 - 회원/인증 도메인에서 회원 정보를 조회할 때는 UserQueryFacade를 호출하도록 변경 - 인증 도메인에서 회원 등록을 진행할 때는 UserCommandFacade를 사용하도록 변경 * chore: build.gradle 수정 - 회원/인증 도메인의 엔티티에 관한 Q클래스 생성용 annotationProcessor 설정 * feat: 회원목록 조회 및 검색 기능 구현 - QueryDsl 기반 회원목록 조회 및 검색 기능 구현 - 검색 조건으로는 keyword(통합검색), username, name, nickname, userRole을 지정 * refactor: UserRole 기능 분리 - UserRole의 문자열-enum 변환과 권한 검증 로직 분리 - 검색 조건에 관한 UserSearchRequest에서는 문자열-enum 변환만 수행하여 회원 권한을 검색조건으로 지정하지 않을 시 예외 발생 대신 null 처리를 수행 * feat: 권한 검증 로직 보강 및 적용 - SecurityUtil 기반 회원 본인 여부 확인 기능 추가 - 권한 검증 로직을 RoleCheck로 통합 - application 계층의 권한 검증 기능에 변경된 권한 검증 로직 적용 * feat: 커스텀 페이지네이션 DTO 적용 - api 명세서의 형식 준수 - UserController에 적용 * refactor: UserSecurity 필터 적용 순서 가독성 개선 - 코드 변경 전, 후 모두 필터 적용 순서는 JwtAuthenticationFilter -> LoginFilter -> UsernamePasswordAuthenticationFilter 순으로 동일 - 요청 메시지를 기준으로 했을 때의 필터 통과 순서를 명확히 드러내는 방향으로 수정 * fix: 회원 목록 조회 관련 코드래빗 개선사항 반영 - UserQueryCondition 오타 수정 - UserSearchRequest 필드 순서 수정 - 조회된 결과가 없더라도 예외 처리 없이 빈 페이지를 반환하도록 UserQueryService의 회원 목록 조회 로직 수정 * fix: 회원 등록 관련 코드래빗 개선사항 반영 - DataIntegrityViolationException 중 unique 제약조건 위반에 의해 발생한 예외는 DuplicateKeyException을 사용하여 처리 * fix: 코드래빗 수정사항 반영 - 에러코드 매핑 키 불일치 수정 * [Feat] 회원정보 수정, 삭제 기능 구현 (#37) * feat: 회원 수정, 삭제용 DTO 추가 - application 계층 내 회원정보 수정, 삭제용 DTO 추가 - presentation 계층 내 회원정보 수정, 삭제용 요청, 응답 DTO 추가 * feat: 회원정보 수정, 삭제 서비스 로직 구현 - UserCommandFacade, UserCommandService 내 updateUser(), deleteUser() 메서드 추가 및 구현 * feat: 회원정보 수정, 삭제 api 호출용 엔드포인트 추가 - PATCH /api/v1/users/{userId}, PATCH /api/v1/users/me 호출용 엔드포인트 추가 - DELETE /api/v1/users/{userId} 엔드포인트 추가 * feat: 회원정보 수정, 삭제 관련 도매인 로직 추가 - User 엔티티 내 update(), delete() 메서드 추가 - UserRepository 내 수정/삭제할 회원 조회용 메서드 정의 * feat: 회원정보 수정, 삭제 권한 관련 에러코드 추가 - 회원정보 수정, 삭제는 회원 본인 혹은 권한이 관리자, 총관리자인 회원만 가능 - 지정한 권한을 보유하지 않은 회원이 회원정보 수정이나 삭제를 요청하는 경우에 관한 에러코드 추가 * refactor: 회원정보 수정 요청 DTO 분리 - 회원정보 수정 DTO를 관리자 전용 회원정보 수정용 DTO와 회원 자신의 회원정보 수정용 DTO로 분리 * refactor: 채팅가능시간대 요청 DTO 분리 - 회원가입 DTO의 내부 클래스로 사용했던 채팅가능시간대 DTO를 별도의 public 클래스로 분리하여 회원정보 수정 기능에서 재사용 * feat: 회원정보 수정 관련 엔티티 메서드 추가 - 회원 권한 수정, 비밀번호 변경 기능 추가 - 리스트 단위 채팅 가능 시간대 저장, 변경, 삭제 기능 추가 - 채팅 가능 시간대의 변경은 기존 채팅가능 시간대의 일괄 삭제 후 변경할 시간대로 일괄 추가하는 방식 * feat: 회원정보 수정 시 채팅가능시간대 정렬 추가 - 회원정보 수정 시 채팅가능 시간대를 요일, 시작시간대 순으로 정렬 - 회원정보 수정 Command DTO 내부의 채팅가능 시간대 DTO를 엔티티로 변환하는 메서드에 정렬 로직 추가 * fix: 회원정보 수정 관련 응답 DTO 필드 추가 - UserUpdateResponse의 누락된 필드 추가 * feat: 회원정보 수정 기능 관련 서비스 로직 구현 - 회원정보 수정 기능을 회원 본인의 회원정보 수정 기능과 관리자 전용 회원정보 수정 기능으로 분리 - 회원 본인의 회원정보 수정 시, Facade 계층에 변경 범위에 비밀번호가 포함될 때의 비밀번호 암호화 로직을 추가 * refactor: 회원정보 수정 기능 관련 컨트롤러 메서드명 수정 - 각각의 회원정보 수정용 엔드포인트의 용도를 명확히 드러내는 방향으로 수정 * fix: 회원조회 기능의 권한 확인 로직 수정 - getUserWithAuthCheck() 메서드의 권한 확인 조건을 or 조건에서 and 조건으로 변경 - 총관리자/관리자 권한이거나 회원 본인인 경우에만 회원조회 기능을 이용 가능하도록 수정 * chore: 로컬/원격 application.yml 파일 설정 조정 - 로컬 application.yml 파일의 db, redis, jpa 관련 설정을 원격 configs의 user-service/application.yml로 이전 - 로컬 application.yml 파일 내 환경변수 우선순위 설정 조정 - jwt 만료시간 설정 추가 + 원격 kafka 서버 연동 관련 설정 추가 * docs: README 내용 업데이트 - docker 기반 실행 환경 세팅 관련 내용 업데이트 * feat: 임시 빈 등록 설정 추가 - OutboxService 빈 임시 등록용 * fix: 코드래빗 수정사항 반영 - 관리자 전용 삭제 기능 사용 시 회원 삭제가 불가능한 문제 수정 - UserSelfUpdateRequest chatTimeRange 관련 Null 검증 추가 - deleteUser() 메서드의 PathVariable 경로 변수 바인딩 대상 명시 * fix: docker 환경에서의 라우팅 오류 수정 - application.yml 파일 설정 수정 후 게이트웨이와 user-service 간 라우팅이 정상적으로 수행되지 않는 문제 수정 - application.yml 파일 내 prefer-ip-address: true 설정 추가 * fix: 코드래빗 수정사항 반영 - PathVariable 관련 피드백 반영 * [Feat]/#40 user service test (#41) * remove: 사용하지 않는 클래스 삭제 - common 모듈에 OutboxService 빈이 추가되어 그 이전까지 임시 사용 중이던 EventBeanConfig를 삭제 * refactor: UserExceptionHandler 재배치 - UserExceptionHandler를 domain 패키지에서 presentation 패키지로 이전 * chore: build.gradle common 모듈 버전 업그레이드 - 사용할 common 모듈의 버전을 0.2.6-SNAPSHOT에서 0.2.7-SNAPSHOT 버전으로 업그레이드 * chore: 테스트 환경 수정 - 테스트 진행 시 eureka server와의 연동을 비활성화하도록 수정 * refactor: ChatTimeRange 관련 예외처리 클래스 변경 - 이전에 사용했던 IllegalArgumentException을 UserServiceException으로 대체 * test: 회원 도메인 application 계층 관련 테스트코드 추가 - UserCommandFacade, UserCommandService, UserQueryFacade, UserQueryService에 관한 테스트코드 추가 * test: 회원 도메인 domain 계층 관련 테스트코드 추가 - User, UserRole, ChatTimeRange, UserErrorCode 관련 테스트코드 추가 * test: 회원 도메인 infrastructure 계층 관련 테스트코드 추가 - QueryDsl 회원 목록 검색 조건, 회원 목록 조회/검색 쿼리, 회원 목록 정렬 관련 테스트코드 추가 - SecurityRoleCheck의 권한 체크 로직 관련 테스트코드 추가 * test: 회원 엔티티 관련 테스트코드 보강 - 회원정보 수정용 메서드의 파라미터의 값이 null이면 User 엔티티의 대응되는 필드의 기존 값을 유지하는지 확인하는 테스트코드 추가 - User 엔티티가 삭제되지 않았을 때만 isEnabled()가 true를 반환하는지 확인하는 테스트코드 추가 * test: 회원 도메인 application 계층 관련 테스트코드 보강 - UserCommandFacade, UserCommandService, UserQueryFacade 관련 테스트코드 보강 * test: 회원 도메인 presentation 계층 관련 테스트코드 보강 - UserExceptionHandler 관련 테스트코드 보강 * fix: MethodArgumentNotValidException 관련 예외 처리 핸들러 수정 - UserErrorCode에 매핑할 수 없는 에러인 경우에도 4xx 상태코드를 반환하도록 수정 * fix: 코드래빗 피드백 반영 - 테스트코드 보강 * [Feat] 인증 도메인 단위테스트 진행 (#43) * refactor: DTO 클래스를 record로 변경 - 별도의 설정 없이도 JSON으로 직렬화/역직렬화를 수행하기 위해 DTO 클래스를 record로 수정 * test: 인증 도메인 application 계층 테스트코드 추가 - AuthService, TokenService 관련 테스트코드 추가 - TokenService에 관한 테스트코드 중 블랙리스트 검증에 관한 테스트코드는 별도 클래스로 분리 * refactor: AuthController 수정 및 테스트코드 추가 - 회원가입, 로그아웃 성공 시 상태코드는 각각 201, 204를 반환 - 로그아웃 시 @AuthenticationPrincipal 대신 @RequestHeader를 사용하도록 메서드 파라미터 수정 - AuthController api 호출 성공 케이스 관련 테스트코드 추가 * test: AuthInternalController 테스트코드 추가 - 토큰의 블랙리스트 포함 여부를 검증하는 내부 호출용 api에 관한 테스트코드 추가 * test: UserAuthentication 관련 테스트코드 추가 - 아이디 & 비밀번호 검증 관련 테스트코드 추가 - 토큰 검증 관련 테스트코드 추가 * test: HttpRequestHeaderWrapper 관련 테스트코드 추가 - 헤더 스푸핑 방지 기능 관련 테스트코드 추가 - 정상적인 인증 흐름에서의 요청 헤더 추가 기능 관련 테스트코드 추가 * refactor: JwtAuthenticationFilter 세부 로직 수정 및 테스트코드 추가 - doFilterInternal()의 내부 로직에서 null 체크를 수행하는 코드를 Optional로 대체 - JwtAuthenticationFilter 실행 성공, 실패 케이스에 관한 테스트코드 추가 * test: HttpRequestHeaderWrapper 관련 테스트코드 보강 - getHeaders(), getHeaderNames() 관련 테스트코드 추가 및 테스트 진행 * fix: 코드래빗 수정사항 반영 - 토큰 발급 시 Duration 관련 검증 수행 - 토큰의 블랙리스트 포함 여부에 관한 테스트 방식의 일관성 유지 * refactor: JwtAuthenticationFilter 헤더 추가 로직 수정 - 값이 존재하지 않을 시 null을 반환하고, 헤더 추가 시 Optional을 사용하도록 수정 - 헤더 추가 로직 관련 테스트코드 수정 * fix: ChatTimeRange dayOfWeek 필드 수정 (#45) - @Enumerated(EnumType.STRING) 추가 * [Feat] 지정한 날짜, 시간을 충족하는 특정 회원의 채팅 가능 시간대 조회 기능 구현 (#47) * feat: 회원의 채팅 가능 시간대 관련 에러코드 추가 - UserErrorCode에 회원의 채팅 가능 시간대 검색 조건, 중복 등록 관련 에러코드 추가 * feat: 회원의 채팅 가능 시간대 관련 도메인 로직 추가 - ChatTimeRange 내 채팅 가능 시간대 겹침 여부 판정용 도메인 로직 추가 - 채팅 시간대 겹침 여부 판정 관련 테스트코드 추가 * feat: ChatTimeRange 관련 제약조건 추가 및 채팅 시간대 검색 로직 추가 - ChatTimeRange에 관한 복합 유니크 키 제약조건 추가 (user_id, day_of_week, start_time으로 구성) - 한 회원의 채팅 가능 시간대가 다른 회원의 채팅 가능 시간대를 모두 포괄하는 경우도 중복된 시간대로 간주 - 지정한 날짜, 시간 조건을 충족하는 채팅 가능 시간대 리스트 조회 관련 도메인 로직 추가 - 채팅 가능 시간대 일괄 등록 기능에 중복 여부 검증 로직 추가 - 추가된 도메인 로직에 관한 테스트코드 추가 * feat: 지정한 날짜, 시간을 충족하는 채팅 가능 시간대 검색 관련 서비스 로직 구현 - 지정한 날짜, 시간을 충족하는 채팅 가능 시간대 검색 관련 application 계층 서비스 로직 구현 - 테스트 코드 추가 및 단위 테스트 진행 * feat: 지정한 날짜, 시간 조건을 충족하는 채팅 가능 시간대 검색 관련 DTO 추가 - SearchChatTimeQuery, UserChatTimeListResponse, UserChatTimeSearchRequest DTO 추가 * refactor: DTO 필드명 수정 - 도메인 계층의 명명 규칙에 따라 DTO 필드명을 수정하여 명명 규칙의 일관성 유지 * feat: 지정한 날짜, 시간을 충족하는 채팅 가능 시간대 검색용 api 추가 - 내부호출용 GET /internal/v1/{userId}/chat-availability api 추가 * feat: 회원 도메인 에러코드 추가 - 회원의 채팅 가능 시간대 검색용 요청 DTO 필드의 유효성 검사 관련 에러코드 추가 * chore: 사용하지 않는 패키지 import문 삭제 - @AuthenticationPrincipal이 @RequestHeader로 대체되면서 더 이상 사용하지 않는 import문 삭제 * fix: 코드래빗 개선사항 반영 - ChatTimeRange 유니크 제약조건명 수정 * feat: 회원 도메인 테스트데이터 자동 추가 기능 구현 - 도메인 서비스 초기 구동 시 .csv 파일로 생성한 테스트 데이터를 자동 추가하기 위한 CsvLoader 구현 * refactor: 내부 인증 필터 로직 수정 - 한글 인코딩 로직을 게이트웨이의 JwtGatewayFilter와 동일한 방식으로 수행하도록 수정 * fix: 코드래빗 피드백 반영 - INSERT_SQL에 ON CONFLICT DO NOTHING 구문을 추가함으로써 멱등성을 확보하고, 이미 저장된 데이터가 존재하는 경우에는 다음 데이터 추가 작업을 진행 - CHECK_SQL의 하드코딩된 데이터를 limit문으로 대체 * chore: 회원 도메인 ci/cd 수행용 설정 추가 (#49) * chore: 회원 도메인 ci/cd 수행용 설정 추가 - 배포 전용 docker-compose.yaml 파일 추가 - 배포 전용 .env.template 파일 추가(deploy 폴더 내부에 .env 파일 생성) - github action 워크플로우 스크립트 추가 * chore: 코드래빗 피드백 일부 반영 - Github Variables에 GCP_ZONE 환경변수 추가 * chore: 코드래빗 피드백 반영 - main 브랜치에 직접 push 시에는 배포되지 않도록 on 트리거 수정 - deploy 시 수동 배포만 가능하도록 수정 - dev -> main merge되어 배포된 경우에만 :stable 태그 부여 * chore: 코드래빗 피드백 반영 - 배포용 .env 파일 존재 여부 및 pgsg-network 생성 여부 확인 * chore: common 모듈 버전 업그레이드 - common 모듈의 버전을 0.2.7에서 0.2.8로 업그레이드 * chore: common 모듈 버전 업그레이드 - common 모듈의 버전을 0.2.8에서 0.2.10으로 업그레이드 * chore: github action 배포/롤백 관련 워크플로우 수정 (#51) * chore: github action 배포/롤백 관련 워크플로우 수정 - 배포/롤백 시 실행되는 docker compose 명령어를 수정 * fix: 코드래빗 수정사항 반영 - 롤백용 docker compose 관련 오기재된 환경변수명 수정 * chore: application.yaml 파일 수정 - 유레카 연동 및 헬스체크 관련 설정 추가 * chore: todo 주석 추가 - config 서버 연동 관련 TODO 주석 추가 * [TASK] 유레카 서버 연동 관련 application.yaml 파일 설정 수정 (#53) * chore: application.yaml 파일 수정 - 유레카 서버 연동 관련 설정 수정 - config-server 관련 todo 주석 추가 * chore: deploy/.env.template 관련 코드래빗 피드백 내용 반영 - eureka 서버 주소 관련 환경변수명 수정 - CONFIG_SERVER, JWT_SECRET 관련 주석 보충 * chore: deploy/.env.template 오타 수정 - eureka 서버 주소 관련 환경변수명을 EUREKA_SERVER_URL로 수정 * chore: application.yaml config 서버 연동 관련 설정 수정 - 유레카 서버에 등록된 config server와 연동되도록 설정 수정 * chore: ar-image-retention-policy.json 수정 - 유효하지 않은 코드 수정 * chore: promote-stable 수행 조건 수정 - main/dev 브랜치 병합 및 배포 성공 시에만 수행하도록 조건 변경 * chore: application.yaml 설정 수정 - config server 연동 완료 전까지만 임시로 이전 연동 방식을 적용 * chore: application.yaml 설정 수정 - 유레카 서버에 등록된 config server에 연동하도록 수정 * chore: 워크플로우 실행 중 오류 확인용 작업 추가 - 임시 확인용 작업 추가 * chore: 워크플로우 실행 중 오류 확인용 작업 추가 - 임시 확인용 작업 추가 * chore: 워크플로우 실행 중 오류 확인용 작업 추가 - 임시 확인용 작업 추가 * chore: 워크플로우 실행 중 오류 수정 - 임시 확인용 작업 추가 * chore: 워크플로우 실행 중 오류 수정 - 임시 확인용 작업 추가 * chore: 워크플로우 실행 중 오류 수정 - 임시 확인용 작업 추가 * chore: 워크플로우 실행 중 오류 수정 - gateway-server의 워크플로우를 user-service에 맞게 수정 - 이전 코드는 별도로 백업 * chore: 워크플로우 실행 중 오류 수정 및 코드리뷰 피드백 반영 - AR Image Retention Policy 한정으로 오류 발생하더라도 다음 작업 진행 허용 - promote-stable 수행 조건 수정 * fix: user-service application.yaml 설정 수정 - prefer-ip-address: true로 변경 * fix: user-service application.yaml 설정 수정 ip-address 관련 설정 추가 * Update application.yml * [FIX] 모니터링 api 차단 문제 해결 (#55) * fix: 모니터링 api 차단 문제 해결 - UserSecurityConfig의 설정 수정 * chore: 모니터링 관련 설정 추가 - prometheus 의존성 추가 및 zipkin 설정 추가 * chore: 빌드 및 배포 시 헬스체크 주기 조정 - 배포 속도 개선을 위해 헬스체크 주기를 조정 * chore: zipkin 서버 연동 관련 설정 추가 - deploy/promtail-config.yml 추가 - application.yaml 및 deploy/docker-compose.prod.yaml 파일에 zipkin, promtail 관련 설정 추가 * chore: zipkin 서버 연동 설정 관련 배포 오류 수정 - deploy.yaml에 promtail.yml 파일을 배포하기 위한 스크립트 추가 * fix: 코드래빗 수정사항 반영 - deploy.yaml에서 헬스체크 주기 및 횟수가 하드코딩된 부분을 수정 - zipkin, loki 엔드포인트를 환경변수로 변경 및 원격 서버에 환경변수 등록 - docker-compose.prod.yaml 파일 promtail 관련 명령어 수정 * promtail 컨테이너명 수정 user-service-promtail에서 promtail로 수정 * [TASK] user-service 로그 수집에 필요한 설정 추가 (#57) * chore: user-service 배포 시 로그 수집 관련 필요한 설정 추가 - docker-compose.prod.yml 파일에 user-service 기능 수행 중 생성된 로그파일의 저장 경로 지정 - docker-compose.prod.yml promtail-config.yml 파일 환경변수 값 치환 설정 추가 - deploy/.env.template 업데이트 * chore: deploy/.env.template 파일 수정 - LOG_FILE_PATH 환경변수 값 설정 형식 추가 * comment: deploy/.env.template 파일 수정 - 도메인 서비스별 로그 파일 경로명 관련 주석 추가 * chore: 코드래빗 피드백 반영 - .env.template 파일 수정 * [FIX]: 회원 테스트 데이터 미적재 오류 수정 (#59) * fix: 회원 테스트 데이터 미적재 오류 - CHECK_SQL 조건 수정 * fix: 회원 테스트 데이터 미적재 오류 - .gitignore 수정 * chore: user-service-2 스케일아웃 기능 추가 (#61) * chore: user-service-2 스케일아웃 기능 추가 - user-service 스케일아웃 워크플로우 추가 * chore: 코드래빗 리뷰 반영 - user-service 스케일아웃 워크플로우 수정 * [TASK] README 내용 업데이트 (#63) * docs: README 내용 업데이트 - user-service 관련 README 내용 최신화 * docs: 코드리뷰 피드백 반영 - 오칼자 수정 --------- Co-authored-by: loveletheart <83873639+loveletheart@users.noreply.github.com> Co-authored-by: coderabbitai[bot] <136622811+coderabbitai[bot]@users.noreply.github.com>
작업 배경
(초기 admin 계정 6개만 적재됨)
작업 내용
테스트 여부
(회원 테스트 데이터 적재됨을 확인)
기타
이슈
Summary by CodeRabbit
릴리스 노트