Skip to content

[FIX] 모니터링 api 차단 문제 해결 - #55

Merged
HyeonBin2379 merged 6 commits into
devfrom
fix/#54-update-security-setting
May 14, 2026
Merged

[FIX] 모니터링 api 차단 문제 해결#55
HyeonBin2379 merged 6 commits into
devfrom
fix/#54-update-security-setting

Conversation

@HyeonBin2379

@HyeonBin2379 HyeonBin2379 commented May 14, 2026

Copy link
Copy Markdown
Contributor

작업 배경

  • 모니터링 api 호출 시 401 에러 발생 문제 해결

작업 내용

  • UserSecurityConfig의 설정 수정
  • zipkin 서버 연동 관련 설정 추가
    • deploy/promtail-config.yml 파일도 원격 서버에 배포되도록 deploy.yaml의 배포 워크플로우 수정
    • application.yaml 파일에 Zipkin 관련 설정 추가
    • user-service 원격 VM 인스턴스에 zipkin, loki 관련 환경변수 추가
    • deploy/docker-compose.prod.yaml 파일에 promtail 관련 설정 추가
    • deploy/promtail-config.yml 파일 추가

테스트 여부

  • 현재 PR에서 UserSecurityConfig 수정사항을 반영하기 위한 재배포부터 우선 진행
    • user-service의 모니터링 기능 연동 확인
    • user-service의 Zipkin 연동 여부 확인
user-service Prometheus 연동 확인 image
user-service Zipkin 연동 확인 image

기타

  • 우선은 UserSecurityConfig의 보안 설정 수정사항부터 먼저 반영하기 위해 해당 사항에 관한 재배포만 먼저 수행했습니다.
  • 이후 현재 PR에서 로그 수집 관련 설정까지 반영한 다음 PR merge를 진행할 예정입니다.

이슈

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

Summary by CodeRabbit

릴리스 노트

  • Chores
    • 모니터링 엔드포인트에 대한 비인증 액세스 범위를 확대하도록 보안 설정을 업데이트했습니다.

Review Change Stack

- UserSecurityConfig의 설정 수정
@HyeonBin2379
HyeonBin2379 requested a review from Jin4041 May 14, 2026 02:36
@HyeonBin2379 HyeonBin2379 self-assigned this May 14, 2026
@HyeonBin2379 HyeonBin2379 added bug Something isn't working enhancement New feature or request labels May 14, 2026
@HyeonBin2379 HyeonBin2379 linked an issue May 14, 2026 that may be closed by this pull request
@github-project-automation github-project-automation Bot moved this to Backlog in 8949 project May 14, 2026
@coderabbitai

coderabbitai Bot commented May 14, 2026

Copy link
Copy Markdown
Contributor
📝 Walkthrough

Walkthrough

액추에이터 인증 규칙을 /actuator/**로 확대하고, 메트릭 레지스트리 추가, Promtail 서비스·구성 및 Zipkin 샘플링 설정을 추가하며, 배포 워크플로우의 HEALTH_INTERVAL을 10→5로 단축했습니다.

변경 사항

모니터링 및 배포 인프라

Layer / File(s) Summary
액추에이터 엔드포인트 인증 규칙 확대
src/main/java/org/pgsg/user_service/auth/infrastructure/security/config/UserSecurityConfig.java
권한 부여 설정에서 액추에이터 엔드포인트의 와일드카드 경로(/actuator/**)를 허용하도록 변경했습니다.
빌드 종속성: common 버전 업그레이드, Prometheus 레지스트리 추가
build.gradle
org.pgsg:common 스냅샷 버전이 0.3.2-SNAPSHOT로 업데이트되고 io.micrometer:micrometer-registry-prometheus 의존성이 추가되었습니다.
프로메테일 서비스 추가 (docker-compose)
deploy/docker-compose.prod.yaml
promtail 서비스가 추가되어 호스트 설정 파일과 로그 볼륨을 마운트하고 pgsg-network에 연결됩니다.
Promtail 구성 파일
deploy/promtail-config.yml
Loki 푸시 엔드포인트와 /logs/*.log를 스크랩하는 user-service job이 정의된 Promtail 설정이 추가되었습니다.
트레이싱 설정 및 배포 워크플로우 변수
src/main/resources/application.yml, .github/workflows/deploy.yaml
Zipkin 엔드포인트와 management.tracing.sampling.probability: 1.0가 추가되었고, 배포 워크플로우의 HEALTH_INTERVAL10에서 5로 변경되었습니다.

Estimated code review effort

🎯 3 (Moderate) | ⏱️ ~20 minutes

Possibly related PRs

  • 89-49/user-service#29: 관련된 UserSecurityConfig 변경(액추에이터 접근 허용)와 직접적으로 연관됩니다.
  • 89-49/user-service#3: 액추에이터 엔드포인트에 대한 Spring Security 허용 규칙 변경과 유사한 작업을 포함합니다.

Suggested reviewers

  • loveletheart
  • Jin4041

전체 변경 사항 요약

사용자 서비스의 보안 설정에서 모니터링 관련 액추에이터 엔드포인트에 대한 인증 규칙을 확대했습니다. 기존의 /actuator/health, /actuator/info 특정 경로 허용에서 /actuator/** 와일드카드로 변경하여 모든 액추에이터 엔드포인트에 대한 비인증 접근을 허용합니다. 또한 Prometheus 레지스트리 의존성 추가, Promtail 서비스 및 구성 파일 추가, Zipkin 트레이싱 샘플링 설정(100%) 및 배포 워크플로우의 HEALTH_INTERVAL 단축(10→5)이 포함됩니다.

시 (Poem)

🐰 밤새 로그를 모으며 말하네
작은 발로 새벽을 돌보고
와일드카드로 문을 살짝 열어
모니터링 빛이 퍼지네 ✨
모두의 서비스, 평온하길 바라며

🚥 Pre-merge checks | ✅ 1 | ❌ 2

❌ Failed checks (1 warning, 1 inconclusive)

Check name Status Explanation Resolution
Out of Scope Changes check ⚠️ Warning PR #54의 요구사항(UserSecurityConfig 수정)을 초과하는 변경사항들이 포함되어 있습니다: Prometheus 의존성 추가, HEALTH_INTERVAL 조정, Promtail/Zipkin 설정 추가. 범위 외 변경사항 제거 또는 별도 PR 분리: (1) Prometheus/Promtail/Zipkin 관련 변경을 별도 PR로 분리, (2) HEALTH_INTERVAL 변경의 필요성 검토 및 별도 이슈 생성 후 처리.
Linked Issues check ❓ Inconclusive PR은 주요 목표인 UserSecurityConfig 수정을 통한 모니터링 엔드포인트 접근 허용을 구현했으나, 추가 변경사항들이 이슈 #54의 범위를 초과합니다. PR 설명에서 언급한 대로 UserSecurityConfig 수정만 먼저 머지하고, 로그 관련 설정(Promtail, Zipkin, Prometheus)은 별도 PR에서 처리할 것을 권장합니다.
✅ Passed checks (1 passed)
Check name Status Explanation
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/#54-update-security-setting

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.

@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/auth/infrastructure/security/config/UserSecurityConfig.java (1)

46-46: ⚡ Quick win

액추에이터 엔드포인트 접근 제어 개선 권장

현재 Spring Boot 3.5의 기본 설정에서는 /actuator/health 엔드포인트만 노출됩니다. 그러나 /actuator/** 와일드카드 패턴은 향후 management.endpoints.web.exposure.include 설정을 통해 추가 엔드포인트가 활성화될 경우, 다음과 같은 민감한 정보가 인증 없이 공개될 수 있는 잠재적 보안 위험을 남깁니다:

  • /actuator/env - 환경 변수 및 시크릿
  • /actuator/configprops - 설정 속성
  • /actuator/heapdump - 힙 메모리 덤프
  • /actuator/loggers - 로그 레벨 변경 가능

보안 강화 원칙(Defense in Depth)에 따라 필요한 엔드포인트만 명시적으로 허용하는 것이 권장됩니다.

추천 수정사항
-                        .requestMatchers("/actuator/**").permitAll()
+                        .requestMatchers("/actuator/health", "/actuator/info").permitAll()

프로메테우스 메트릭 모니터링이 필요한 경우 /actuator/prometheus를 추가로 포함하세요.

🤖 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/auth/infrastructure/security/config/UserSecurityConfig.java`
at line 46, The current security rule in UserSecurityConfig that uses
.requestMatchers("/actuator/**").permitAll() is too permissive; replace it with
explicit actuator paths (e.g., .requestMatchers("/actuator/health").permitAll()
and, if required for metrics,
.requestMatchers("/actuator/prometheus").permitAll()) inside the same security
configuration method where requestMatchers is used so only those endpoints are
exposed without authentication and all other actuator endpoints remain
protected.
🤖 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/auth/infrastructure/security/config/UserSecurityConfig.java`:
- Line 46: The current security rule in UserSecurityConfig that uses
.requestMatchers("/actuator/**").permitAll() is too permissive; replace it with
explicit actuator paths (e.g., .requestMatchers("/actuator/health").permitAll()
and, if required for metrics,
.requestMatchers("/actuator/prometheus").permitAll()) inside the same security
configuration method where requestMatchers is used so only those endpoints are
exposed without authentication and all other actuator endpoints remain
protected.

ℹ️ Review info
⚙️ Run configuration

Configuration used: Organization UI

Review profile: CHILL

Plan: Pro Plus

Run ID: dfac2f66-fa92-4295-93af-c4975b51c23f

📥 Commits

Reviewing files that changed from the base of the PR and between 80b9c19 and b0afd50.

📒 Files selected for processing (1)
  • src/main/java/org/pgsg/user_service/auth/infrastructure/security/config/UserSecurityConfig.java

- prometheus 의존성 추가 및 zipkin 설정 추가
- 배포 속도 개선을 위해 헬스체크 주기를 조정

@Jin4041 Jin4041 left a comment

Copy link
Copy Markdown

Choose a reason for hiding this comment

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

확인했습니다!

- deploy/promtail-config.yml 추가
- application.yaml 및 deploy/docker-compose.prod.yaml 파일에 zipkin, promtail 관련 설정 추가

@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.

Actionable comments posted: 6

🧹 Nitpick comments (4)
deploy/promtail-config.yml (2)

10-11: 💤 Low value

파일 기반 스크래핑에서 targets: localhost는 의미가 없습니다.

Promtail의 파일 기반 로그 수집에서 targets 필드는 실질적인 역할을 하지 않습니다. 서비스 디스커버리에서 사용되는 필드이므로 혼란을 줄 수 있습니다.

♻️ 간소화 제안

targets 필드를 제거하여 설정을 더 명확하게 만들 수 있습니다:

 scrape_configs:
   - job_name: user-service
     static_configs:
-      - targets:
-          - localhost
-        labels:
+      - labels:
           job: user-service
           __path__: /logs/*.log

하지만 현재 구성도 정상적으로 작동하므로 이는 선택 사항입니다.

🤖 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 `@deploy/promtail-config.yml` around lines 10 - 11, 파일 기반 스크래핑 섹션에서 불필요한
"targets: - localhost" 필드는 의미가 없으니 제거하세요: locate the file-based scrape block
that contains the "targets" key (the YAML block shown in the diff) and delete
the "targets" and its value so the scrape config only defines the file
paths/labels; ensure no other references to "targets" remain in that scrape
config and validate the YAML after removing the key.

1-14: ⚡ Quick win

positions 파일 설정 추가를 권장합니다.

현재 설정에는 positions 파일 경로가 지정되지 않아 기본값 /tmp/positions.yaml이 사용됩니다. 컨테이너 재시작 시 이 파일이 손실되어 로그가 중복으로 수집될 수 있습니다.

📝 권장 설정 추가

영구 볼륨에 positions 파일을 저장하도록 설정을 추가하세요:

 server:
   http_listen_port: 9080
+
+positions:
+  filename: /logs/positions.yaml

 clients:
   - url: http://34.47.69.9:3100/loki/api/v1/push

positions 파일이 logs 볼륨에 저장되므로 추가 볼륨 마운트가 필요하지 않습니다.

🤖 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 `@deploy/promtail-config.yml` around lines 1 - 14, Add a persistent positions
file to the promtail config so offsets aren’t lost on container restart: under
the top-level config (alongside server/clients/scrape_configs) add a positions
stanza that sets filename to a path on the existing logs volume (e.g.
/logs/positions.yaml). This change updates the positions file location used by
promtail (so that the __path__ /logs/*.log offsets persist) and requires
ensuring the container mounts the logs volume where /logs/positions.yaml will be
written.
deploy/docker-compose.prod.yaml (1)

15-25: 리소스 제한 설정을 추가하는 것을 고려하세요.

Promtail 서비스에 메모리 및 CPU 제한을 설정하면 호스트 시스템의 안정성을 보장할 수 있습니다.

💡 권장 리소스 제한 예시
  promtail:
    image: grafana/promtail:2.9.1
    container_name: user-service-promtail
    restart: always
    volumes:
      - /opt/user-service/promtail-config.yml:/etc/promtail/config.yml
      - /opt/user-service/logs:/logs
    command: -config.file=/etc/promtail/config.yml
    networks:
      - pgsg-network
    deploy:
      resources:
        limits:
          memory: 256M
          cpus: '0.5'
        reservations:
          memory: 128M
          cpus: '0.25'
🤖 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 `@deploy/docker-compose.prod.yaml` around lines 15 - 25, Add resource
constraints to the promtail service in docker-compose.prod.yaml by adding a
deploy.resources block under the promtail service (service name "promtail" /
container_name "user-service-promtail") with limits and reservations (e.g.,
limits.memory, limits.cpus and reservations.memory, reservations.cpus) to cap
memory and CPU usage; also update the promtail command if needed to match your
config flag style (the reviewer suggested using
"-config.file=/etc/promtail/config.yml") so the service uses the correct config
path and the host is protected by the specified resource limits.
.github/workflows/deploy.yaml (1)

17-18: 헬스체크 대기 시간이 서비스 시작에 충분한지 확인하세요.

HEALTH_INTERVAL을 10에서 5로 줄이면 총 대기 시간이 300초에서 150초로 단축됩니다. 이는 배포 속도를 개선하지만, user-service가 150초 이내에 정상적으로 시작되는지 확인이 필요합니다.

만약 서비스가 시작하는 데 더 많은 시간이 필요하다면 불필요한 배포 실패와 롤백이 발생할 수 있습니다.

🤖 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 @.github/workflows/deploy.yaml around lines 17 - 18, HEALTH_INTERVAL을 5로 줄여 총
헬스체크 대기시간이 150초(HEALTH_RETRIES × HEALTH_INTERVAL)로 감소했으므로, 배포 실패를 방지하려면
user-service가 150초 이내에 시작되는지 검증하거나 설정을 변경하세요: 서비스 시작에 더 시간이 필요하면
HEALTH_INTERVAL을 원래 10으로 복원하거나 HEALTH_RETRIES 값을 늘려 총 대기시간을 이전 수준(예: 300초)으로
맞추고, user-service의 실제 시작 시간(로그/착신 헬스엔드포인트)을 측정한 뒤
HEALTH_INTERVAL/HEALTH_RETRIES를 조정해 안정성을 확보하세요.
🤖 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.

Inline comments:
In @.github/workflows/deploy.yaml:
- Line 18: The rollback health-check loop currently uses hardcoded retry/count
values ("seq 1 18" and "sleep 10") which diverge from the deployment path that
uses HEALTH_RETRIES and HEALTH_INTERVAL; update the rollback loop to use the
HEALTH_RETRIES and HEALTH_INTERVAL environment variables instead of hardcoded
values so both deploy and rollback share the same timeout/retry behavior
(replace occurrences of "seq 1 18" and "sleep 10" in the rollback block with
constructs that iterate HEALTH_RETRIES times and sleep HEALTH_INTERVAL seconds,
ensuring variable names HEALTH_RETRIES and HEALTH_INTERVAL are referenced).

In `@build.gradle`:
- Line 33: org.pgsg:common을 0.3.2-SNAPSHOT으로 올리면서 발생할 수 있는 호환성 문제를 검증하세요: 프로젝트에서
사용하는 핵심 타입들(CustomException, ErrorCode, BaseEntity, SecurityUtil, 응답 모델 클래스 등)을
검색해 해당 클래스/메서드 시그니처나 패키지명이 변경되었는지 확인하고(예: import 변경, 생성자/메서드 시그니처 차이), 변경사항에 맞춰
호출부를 수정하거나 어댑터를 추가한 뒤 단위·통합 테스트와 주요 시나리오(인증/권한, 예외 매핑, DB 엔티티 직렬화/저장, API 응답
포맷)를 실행해 실패를 모두 해결하세요.

In `@deploy/docker-compose.prod.yaml`:
- Line 22: The Promtail container command is invalid: replace the current `run
--config.format=promtail /etc/promtail/config.yml` invocation with a proper
Promtail startup command that uses the -config.file flag to point at the config
(i.e., start the promtail binary and pass
-config.file=/etc/promtail/config.yml); update the `command:` value so the
container runs the promtail binary with the -config.file flag instead of the
non-existent `run` subcommand and `--config.format` flag.

In `@deploy/promtail-config.yml`:
- Line 5: The Promtail config currently hardcodes the Loki endpoint IP on the
line with "url: http://34.47.69.9:3100/loki/api/v1/push"; change this to
reference an environment variable (e.g., use a placeholder like ${LOKI_URL}) and
update the Docker Compose service "promtail" to pass LOKI_URL (or switch the URL
to a DNS name such as http://loki.monitoring.svc:3100/loki/api/v1/push) so the
config is environment-driven; ensure the config templating syntax you use
matches Promtail/Compose variable substitution and add a default/fallback value
if supported.

In `@src/main/resources/application.yml`:
- Around line 54-57: The current tracing sampling setting
management.tracing.sampling.probability is set to 1.0 which will enable 100%
tracing and can cause performance issues in production; change this to a lower
default (e.g., 0.01–0.1) and externalize it to an environment variable or
profile-managed property so production can use a low sampling rate (e.g.,
replace the hardcoded probability with a placeholder like
${TRACING_SAMPLING_PROBABILITY:0.01} and ensure profiles or env vars override it
for dev/test as needed).
- Around line 58-60: Replace the hardcoded Zipkin IP in the configuration by
reading the endpoint from an environment/property value instead of literal
"http://34.47.69.9:9411/api/v2/spans"; update the zipkin.tracing.endpoint
property to reference a configurable variable (e.g., ${ZIPKIN_ENDPOINT} or an
application property) and ensure any default value or profile-specific override
is documented so environments can supply a DNS name or env var rather than the
fixed IP.

---

Nitpick comments:
In @.github/workflows/deploy.yaml:
- Around line 17-18: HEALTH_INTERVAL을 5로 줄여 총 헬스체크 대기시간이 150초(HEALTH_RETRIES ×
HEALTH_INTERVAL)로 감소했으므로, 배포 실패를 방지하려면 user-service가 150초 이내에 시작되는지 검증하거나 설정을
변경하세요: 서비스 시작에 더 시간이 필요하면 HEALTH_INTERVAL을 원래 10으로 복원하거나 HEALTH_RETRIES 값을 늘려 총
대기시간을 이전 수준(예: 300초)으로 맞추고, user-service의 실제 시작 시간(로그/착신 헬스엔드포인트)을 측정한 뒤
HEALTH_INTERVAL/HEALTH_RETRIES를 조정해 안정성을 확보하세요.

In `@deploy/docker-compose.prod.yaml`:
- Around line 15-25: Add resource constraints to the promtail service in
docker-compose.prod.yaml by adding a deploy.resources block under the promtail
service (service name "promtail" / container_name "user-service-promtail") with
limits and reservations (e.g., limits.memory, limits.cpus and
reservations.memory, reservations.cpus) to cap memory and CPU usage; also update
the promtail command if needed to match your config flag style (the reviewer
suggested using "-config.file=/etc/promtail/config.yml") so the service uses the
correct config path and the host is protected by the specified resource limits.

In `@deploy/promtail-config.yml`:
- Around line 10-11: 파일 기반 스크래핑 섹션에서 불필요한 "targets: - localhost" 필드는 의미가 없으니
제거하세요: locate the file-based scrape block that contains the "targets" key (the
YAML block shown in the diff) and delete the "targets" and its value so the
scrape config only defines the file paths/labels; ensure no other references to
"targets" remain in that scrape config and validate the YAML after removing the
key.
- Around line 1-14: Add a persistent positions file to the promtail config so
offsets aren’t lost on container restart: under the top-level config (alongside
server/clients/scrape_configs) add a positions stanza that sets filename to a
path on the existing logs volume (e.g. /logs/positions.yaml). This change
updates the positions file location used by promtail (so that the __path__
/logs/*.log offsets persist) and requires ensuring the container mounts the logs
volume where /logs/positions.yaml will be written.
🪄 Autofix (Beta)

Fix all unresolved CodeRabbit comments on this PR:

  • Push a commit to this branch (recommended)
  • Create a new PR with the fixes

ℹ️ Review info
⚙️ Run configuration

Configuration used: Organization UI

Review profile: CHILL

Plan: Pro Plus

Run ID: 0163534f-ff68-4444-af43-930f72689b2e

📥 Commits

Reviewing files that changed from the base of the PR and between b0afd50 and cfd7f23.

📒 Files selected for processing (5)
  • .github/workflows/deploy.yaml
  • build.gradle
  • deploy/docker-compose.prod.yaml
  • deploy/promtail-config.yml
  • src/main/resources/application.yml

Comment thread .github/workflows/deploy.yaml
Comment thread build.gradle
Comment thread deploy/docker-compose.prod.yaml Outdated
Comment thread deploy/promtail-config.yml Outdated
Comment thread src/main/resources/application.yml Outdated
Comment thread src/main/resources/application.yml Outdated
- deploy.yaml에 promtail.yml 파일을 배포하기 위한 스크립트 추가
- deploy.yaml에서 헬스체크 주기 및 횟수가 하드코딩된 부분을 수정
- zipkin, loki 엔드포인트를 환경변수로 변경 및 원격 서버에 환경변수 등록
- docker-compose.prod.yaml 파일 promtail 관련 명령어 수정
@HyeonBin2379
HyeonBin2379 merged commit 205de52 into dev May 14, 2026
4 checks passed
@github-project-automation github-project-automation Bot moved this from Backlog to Done in 8949 project May 14, 2026
@HyeonBin2379
HyeonBin2379 deleted the fix/#54-update-security-setting branch May 19, 2026 08:17
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 enhancement New feature or request

Projects

Status: Done

Development

Successfully merging this pull request may close these issues.

[FIX] 모니터링 관련 보안 설정 수정

2 participants