Skip to content

[FIX]: 회원 테스트 데이터 미적재 오류 수정 - #59

Merged
HyeonBin2379 merged 2 commits into
devfrom
fix/#58-fix-csv-loader
May 16, 2026
Merged

[FIX]: 회원 테스트 데이터 미적재 오류 수정#59
HyeonBin2379 merged 2 commits into
devfrom
fix/#58-fix-csv-loader

Conversation

@HyeonBin2379

@HyeonBin2379 HyeonBin2379 commented May 16, 2026

Copy link
Copy Markdown
Contributor

작업 배경

  • 부하테스트 진행에 필요한 회원 테스트 데이터가 적재되지 않은 오류 확인
    (초기 admin 계정 6개만 적재됨)

작업 내용

  • CHECK_SQL 조건 수정

테스트 여부

  • 재배포 후 회원 테스트 데이터 저장 여부 확인
    (회원 테스트 데이터 적재됨을 확인)

기타

이슈

이 PR과 연관된 이슈 번호를 작성해주세요. (이슈 없으면 생략 가능)

Summary by CodeRabbit

릴리스 노트

  • 개선 사항
    • 데이터 로딩 시 필요한 최소 데이터 건수 임계값을 상향하여 더욱 엄격한 데이터 유효성 검증 기준이 적용되었습니다. 사용자 정보 및 채팅 시간 범위 데이터에 대해 일관되게 적용됩니다.

Review Change Stack

@HyeonBin2379 HyeonBin2379 self-assigned this May 16, 2026
@HyeonBin2379 HyeonBin2379 added the bug Something isn't working label May 16, 2026
@github-project-automation github-project-automation Bot moved this to Backlog in 8949 project May 16, 2026
@coderabbitai

coderabbitai Bot commented May 16, 2026

Copy link
Copy Markdown
Contributor
📝 Walkthrough

개요

ChatTimeCsvLoader와 UserCsvLoader의 데이터 존재 여부 확인 SQL이 10,000건 이상 레코드 기준으로 통일되었습니다. 기존 COUNT(*) ... LIMIT 1 방식에서 CASE WHEN COUNT(*) >= 10000 THEN 1 ELSE 0 END 형태로 변경되어 원격 배포 시 CSV 데이터 적재 조건을 명확히 합니다.

변경 사항

CSV 로더 데이터 임계값 통일

계층 / 파일 요약
데이터 적재 임계값 강화
src/main/java/org/pgsg/user_service/user/infrastructure/loader/ChatTimeCsvLoader.java, src/main/java/org/pgsg/user_service/user/infrastructure/loader/UserCsvLoader.java
CHECK_SQL 쿼리가 p_chat_time_rangep_user 테이블의 레코드 수를 10,000건 이상 기준으로 확인하도록 변경되어, 데이터 적재 완료 조건을 통일합니다.

예상 코드 리뷰 노력

🎯 1 (간단함) | ⏱️ ~5분

제안 리뷰어

  • loveletheart

축하 시

🐰 테스트 데이터 적재의 작은 문제,
임계값 통일로 크게 해결했네요!
만 개의 행이 무릎 꿇고,
원격 배포의 길을 밝히네요. ✨
데이터 로더, 이제 정확해요! 📊

🚥 Pre-merge checks | ✅ 3
✅ Passed checks (3 passed)
Check name Status Explanation
Linked Issues check ✅ Passed PR은 #58 이슈의 목표(CsvLoader 수정을 통한 회원 테스트 데이터 적재)를 충족하기 위해 두 파일의 CHECK_SQL을 변경했습니다.
Out of Scope Changes check ✅ Passed PR의 모든 변경사항이 #58 이슈 해결(CsvLoader의 CHECK_SQL 조건 수정)에 직접 관련되어 있습니다.
Description Check ✅ Passed Check skipped - CodeRabbit’s high-level summary is enabled.

✏️ Tip: You can configure your own custom pre-merge checks in the settings.

✨ Finishing Touches
🧪 Generate unit tests (beta)
  • Create PR with unit tests
  • Commit unit tests in branch fix/#58-fix-csv-loader

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.

❤️ Share

Comment @coderabbitai help to get the list of available commands and usage tips.

@HyeonBin2379
HyeonBin2379 requested a review from loveletheart May 16, 2026 08:25
@HyeonBin2379 HyeonBin2379 changed the title [FIX]: 회원 테스트 데이터 미적재 오류 [FIX]: 회원 테스트 데이터 미적재 오류 수정 May 16, 2026

@coderabbitai coderabbitai Bot left a comment

Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

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

🧹 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

📥 Commits

Reviewing files that changed from the base of the PR and between 0688c60 and c284390.

📒 Files selected for processing (2)
  • src/main/java/org/pgsg/user_service/user/infrastructure/loader/ChatTimeCsvLoader.java
  • src/main/java/org/pgsg/user_service/user/infrastructure/loader/UserCsvLoader.java

@HyeonBin2379
HyeonBin2379 merged commit 53fa5b3 into dev May 16, 2026
4 checks passed
@github-project-automation github-project-automation Bot moved this from Backlog to Done in 8949 project May 16, 2026
HyeonBin2379 added a commit that referenced this pull request May 20, 2026
* 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>
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

bug Something isn't working

Projects

Status: Done

Development

Successfully merging this pull request may close these issues.

[FIX] 원격 배포 시 .csv 파일의 회원 데이터가 적재되지 않는 문제 수정

1 participant