Compare commits

..

4 Commits

Author SHA1 Message Date
ondal
21b9c77109 Entity 클래스 및 서비스 로직 개선
- kos-mock Entity 클래스 개선 (BillEntity, CustomerEntity, ProductEntity)
- user-service Entity 클래스 개선 (AuthUserEntity, AuthUserPermissionEntity)
- UserService 로직 개선
- kos-mock 데이터베이스 업데이트

🤖 Generated with [Claude Code](https://claude.com/claude-code)

Co-Authored-By: Claude <noreply@anthropic.com>
2025-11-21 15:46:19 +09:00
ondal
77fd4a56a5 user-service Redis 연결 정보 로컬 환경으로 변경
- REDIS_HOST를 외부 IP에서 localhost로 변경
- REDIS_PASSWORD 업데이트
- 로컬 개발 환경 설정

🤖 Generated with [Claude Code](https://claude.com/claude-code)

Co-Authored-By: Claude <noreply@anthropic.com>
2025-11-21 15:10:46 +09:00
ondal
054e14b922 bill-inquiry DB storageClass 변경
- storageClass를 'standard'에서 'managed'로 변경
- 운영 환경 호환성 향상

🤖 Generated with [Claude Code](https://claude.com/claude-code)

Co-Authored-By: Claude <noreply@anthropic.com>
2025-11-21 15:08:18 +09:00
ondal
4390a0a7a4 가이드 업데이트 및 DB 설정 변경
- CLAUDE.md 가이드 섹션 최신화 (2025-11-18)
- GradleWrapper생성가이드, ArgoCD파이프라인준비가이드 등 신규 가이드 추가
- bill-inquiry-postgres LoadBalancer 타입 변경
- 서비스 실행 프로파일 업데이트 (bill-service, product-service, user-service)
- kos-mock 데이터베이스 업데이트

🤖 Generated with [Claude Code](https://claude.com/claude-code)

Co-Authored-By: Claude <noreply@anthropic.com>
2025-11-21 15:07:31 +09:00
11 changed files with 69 additions and 394 deletions

365
CLAUDE.md
View File

@ -142,366 +142,6 @@ QA Engineer
---
[가이드]
```
# Clauding Guide
최종 수정일시: 2025-08-22 11:50
## 서비스기획 가이드
- 서비스기획프롬프트
- 설명: 유저스토리 작성 등 서비스 기획을 위한 프롬프트 예시
- URL: https://raw.githubusercontent.com/cna-bootcamp/clauding-guide/refs/heads/main/guides/prompt/02.think-prompt.md
- 파일명: think-prompt.md
- 서비스기획가이드
- 설명: 서비스 기획 방법 안내
- URL: https://raw.githubusercontent.com/cna-bootcamp/clauding-guide/refs/heads/main/guides/think/think-guide.md
- 파일명: think-guide.md
---
## 설계 가이드
- 설계실행프롬프트
- 설명: 각 설계 단계 실행을 위한 프롬프트 모음
- URL: https://raw.githubusercontent.com/cna-bootcamp/clauding-guide/refs/heads/main/guides/prompt/03.design-prompt.md
- 파일명: design-prompt.md
- 공통설계원칙
- 설명: 모든 설계 시 적용할 공통설계원칙
- URL: https://raw.githubusercontent.com/cna-bootcamp/clauding-guide/refs/heads/main/guides/design/common-principles.md
- 파일명: common-principles.md
- UI/UX설계가이드
- 설명: UI/UX 설계 방법 안내
- URL: https://raw.githubusercontent.com/cna-bootcamp/clauding-guide/refs/heads/main/guides/design/uiux-design.md
- 파일명: uiux-design.md
- 프로토타입작성가이드
- 설명: 프로토타입 작성 방법 안내
- URL: https://raw.githubusercontent.com/cna-bootcamp/clauding-guide/refs/heads/main/guides/design/uiux-prototype.md
- 파일명: uiux-prototype.md
- 아키텍처패턴선정 가이드
- 설명: 클라우드 아키텍처 패턴 선정 방법 안내
- URL: https://raw.githubusercontent.com/cna-bootcamp/clauding-guide/refs/heads/main/guides/design/architecture-patterns.md
- 파일명: architecture-patterns.md
- 논리아키텍처설계가이드
- 설명: 논리 아키텍처 설계 방법 안내
- URL: https://raw.githubusercontent.com/cna-bootcamp/clauding-guide/refs/heads/main/guides/design/logical-architecture-design.md
- 파일명: logical-architecture-design.md
- API설계가이드
- 설명: API 설계 방법 안내
- URL: https://raw.githubusercontent.com/cna-bootcamp/clauding-guide/refs/heads/main/guides/design/api-design.md
- 파일명: api-design.md
- 외부시퀀스설계가이드
- 설명: 외부 시퀀스 설계 방법 안내
- URL: https://raw.githubusercontent.com/cna-bootcamp/clauding-guide/refs/heads/main/guides/design/sequence-outer-design.md
- 파일명: sequence-outer-design.md
- 내부시퀀스설계 가이드
- 설명: 내부 시퀀스 설계 방법 안내
- URL: https://raw.githubusercontent.com/cna-bootcamp/clauding-guide/refs/heads/main/guides/design/sequence-inner-design.md
- 파일명: sequence-inner-design.md
- 클래스설계가이드
- 설명: 클래스 설계 방법 안내
- URL: https://raw.githubusercontent.com/cna-bootcamp/clauding-guide/refs/heads/main/guides/design/class-design.md
- 파일명: class-design.md
- 데이터설계가이드
- 설명: 데이터 설계 방법 안내
- URL: https://raw.githubusercontent.com/cna-bootcamp/clauding-guide/refs/heads/main/guides/design/data-design.md
- 파일명: data-design.md
- HighLevel아키텍처정의가이드
- 설명: 상위수준 아키텍처 정의 방법 안내
- URL: https://raw.githubusercontent.com/cna-bootcamp/clauding-guide/refs/heads/main/guides/design/architecture-highlevel.md
- 파일명: architecture-highlevel.md
- 물리아키텍처설계가이드
- 설명: 물리 아키텍처 설계 방법 안내
- URL: https://raw.githubusercontent.com/cna-bootcamp/clauding-guide/refs/heads/main/guides/design/physical-architecture-design.md
- 파일명: physical-architecture-design.md
- 프론트엔드설계가이드
- 설명: 프론트엔드 설계 방법 안내
- URL: https://raw.githubusercontent.com/cna-bootcamp/clauding-guide/refs/heads/main/guides/design/frontend-design.md
- 파일명: frontend-design.md
---
## 개발 가이드
- 개발실행프롬프트
- 설명: 각 개발 단계 실행을 위한 프롬프트 모음
- URL: https://raw.githubusercontent.com/cna-bootcamp/clauding-guide/refs/heads/main/guides/prompt/04.develop-prompt.md
- 파일명: develop-prompt.md
- 데이터베이스설치계획서가이드
- 설명: 데이터베이스 설치 방법 안내 요청 시 참조
- URL: https://raw.githubusercontent.com/cna-bootcamp/clauding-guide/refs/heads/main/guides/develop/database-plan.md
- 파일명: database-plan.md
- 데이터베이스설치가이드
- 설명: 데이터베이스 설치 방법 안내 요청 시 참조
- URL: https://raw.githubusercontent.com/cna-bootcamp/clauding-guide/refs/heads/main/guides/develop/database-install.md
- 파일명: database-install.md
- MQ설치게획서가이드
- 설명: Message Queue 설치 방법 안내 요청 시 참조
- URL: https://raw.githubusercontent.com/cna-bootcamp/clauding-guide/refs/heads/main/guides/develop/mq-plan.md
- 파일명: mq-plan.md
- MQ설치가이드
- 설명: Message Queue 설치 방법 안내 요청 시 참조
- URL: https://raw.githubusercontent.com/cna-bootcamp/clauding-guide/refs/heads/main/guides/develop/mq-install.md
- 파일명: mq-install.md
- 백엔드개발가이드
- 설명: 백엔드 개발 가이드
- URL: https://raw.githubusercontent.com/cna-bootcamp/clauding-guide/refs/heads/main/guides/develop/dev-backend.md
- 파일명: dev-backend.md
- 서비스실행프로파일작성가이드
- 설명: 백엔드 서비스 실행 프로파일 작성 가이드
- URL: https://raw.githubusercontent.com/cna-bootcamp/clauding-guide/refs/heads/main/guides/develop/make-run-profile.md
- 파일명: make-run-profile.md
- 백엔드테스트가이드
- 설명: 백엔드 테스트 가이드
- URL: https://raw.githubusercontent.com/cna-bootcamp/clauding-guide/refs/heads/main/guides/develop/test-backend.md
- 파일명: test-backend.md
- 프론트엔드개발가이드
- 설명: 프론트엔드 개발 가이드
- URL: https://raw.githubusercontent.com/cna-bootcamp/clauding-guide/refs/heads/main/guides/develop/dev-frontend.md
- 파일명: dev-frontend.md
---
## 배포 가이드
- 백엔드컨테이너이미지작성가이드
- 설명: 백엔드 컨테이너 이미지 작성 가이드
- URL: https://raw.githubusercontent.com/cna-bootcamp/clauding-guide/refs/heads/main/guides/deploy/build-image-back.md
- 파일명: build-image-back.md
- 프론트엔드컨테이너이미지작성가이드
- 설명: 프론트엔드 컨테이너 이미지 작성 가이드
- URL: https://raw.githubusercontent.com/cna-bootcamp/clauding-guide/refs/heads/main/guides/deploy/build-image-front.md
- 파일명: build-image-front.md
- 백엔드컨테이너실행방법가이드
- 설명: 백엔드 컨테이너 실행방법 가이드
- URL: https://raw.githubusercontent.com/cna-bootcamp/clauding-guide/refs/heads/main/guides/deploy/run-container-guide-back.md
- 파일명: run-container-guide-back.md
- 프론트엔드컨테이너실행방법가이드
- 설명: 프론트엔드 컨테이너 실행방법 가이드
- URL: https://raw.githubusercontent.com/cna-bootcamp/clauding-guide/refs/heads/main/guides/deploy/run-container-guide-front.md
- 파일명: run-container-guide-front.md
- 백엔드배포가이드
- 설명: 백엔드 서비스를 쿠버네티스 클러스터에 배포하는 가이드
- URL: https://raw.githubusercontent.com/cna-bootcamp/clauding-guide/refs/heads/main/guides/deploy/deploy-k8s-back.md
- 파일명: deploy-k8s-back.md
- 프론트엔드배포가이드
- 설명: 프론트엔드 서비스를 쿠버네티스 클러스터에 배포하는 가이드
- URL: https://raw.githubusercontent.com/cna-bootcamp/clauding-guide/refs/heads/main/guides/deploy/deploy-k8s-front.md
- 파일명: deploy-k8s-front.md
- 백엔드Jenkins파이프라인작성가이드
- 설명: 백엔드 서비스를 Jenkins를 이용하여 CI/CD하는 배포 가이드
- URL: https://raw.githubusercontent.com/cna-bootcamp/clauding-guide/refs/heads/main/guides/deploy/deploy-jenkins-cicd-back.md
- 파일명: deploy-jenkins-cicd-back.md
- 백엔드GitHubActions파이프라인작성가이드
- 설명: 백엔드 서비스를 GitHub Actions를 이용하여 CI/CD하는 배포 가이드
- URL: https://raw.githubusercontent.com/cna-bootcamp/clauding-guide/refs/heads/main/guides/deploy/deploy-actions-cicd-back.md
- 파일명: deploy-actions-cicd-back.md
## 참조 문서
- 프로젝트지침템플릿
- 설명: 프로젝트 지침인 CLAUDE.md 파일 템플릿
- URL: https://raw.githubusercontent.com/cna-bootcamp/clauding-guide/refs/heads/main/references/instruction-template.md
- 파일명: instruction-template.md
- 유저스토리작성방법
- 설명: 유저스토리 형식과 작성법
- URL: https://raw.githubusercontent.com/cna-bootcamp/clauding-guide/refs/heads/main/references/유저스토리작성방법.md
- 파일명: userstory-writing.md
- 유저스토리예제
- 설명: 유저스토리 예제
- URL: https://raw.githubusercontent.com/cna-bootcamp/clauding-guide/refs/heads/main/samples/sample-%EC%9C%A0%EC%A0%80%EC%8A%A4%ED%86%A0%EB%A6%AC.md
- 파일명: sample-userstory.md
- 클라우드아키텍처패턴요약표
- 설명: 클라우드 디자인 패턴 요약표
- URL: https://raw.githubusercontent.com/cna-bootcamp/clauding-guide/refs/heads/main/references/Cloud%20Design%20Patterns(%EA%B0%9C%EC%9A%94).md
- 파일명: cloud-design-patterns.md
- HighLevel아키텍처정의서템플릿
- 설명: MSA 7대 컴포넌트별로 상위 수준의 아키텍처를 정의한 문서
- URL: https://raw.githubusercontent.com/cna-bootcamp/clauding-guide/refs/heads/main/references/highlevel-architecture-template.md
- 파일명: highlevel-architecture-template.md
- 제품별버전가이드
- 설명: 개발언어, 개발 프레임워크, AI제품 등의 버전 참조를 위한 페이지 링크 제공
- URL: https://raw.githubusercontent.com/cna-bootcamp/clauding-guide/refs/heads/main/references/제품버전참조.md
- 파일명: version-link.md
- 백킹서비스설치방법
- 설명: 데이터베이스, Message Queue 등 백킹서비스설치방법 설명
- URL: https://raw.githubusercontent.com/cna-bootcamp/clauding-guide/refs/heads/main/references/백킹서비스설치방법.md
- 파일명: backing-service-method.md
---
## 표준
- 개발주석표준
- 설명: 개발 주석 표준
- URL: https://raw.githubusercontent.com/cna-bootcamp/clauding-guide/refs/heads/main/standards/standard_comment.md
- 파일명: standard_comment.md
- 패키지구조표준
- 설명: 패키지 구조 표준과 설계 아키텍처 패턴(Layered, Clean, Hexagonal)별 예시
- URL: https://raw.githubusercontent.com/cna-bootcamp/clauding-guide/refs/heads/main/standards/standard_package_structure.md
- 파일명: standard_package_structure.md
- 테스트코드표준
- 설명: 테스트 코드 작성 표준
- URL: https://raw.githubusercontent.com/cna-bootcamp/clauding-guide/refs/heads/main/standards/standard_testcode.md
- 파일명: standard_testcode.md
---
## 기술 도구
- PlantUML문법검사가이드
- 설명: PlantUML 문법 검사하는 방법 안내
- URL: https://raw.githubusercontent.com/cna-bootcamp/clauding-guide/refs/heads/main/guides/tools/plantuml-guide.md
- 파일명: plantuml-guide.md
- Mermaid문법검사가이드
- 설명: Mermaid 문법 검사하는 방법 안내
- URL: https://raw.githubusercontent.com/cna-bootcamp/clauding-guide/refs/heads/main/guides/tools/mermaid-guide.md
- 파일명: mermaid-guide.md
- MCP동기화도구
- 설명: Window에서 Cloude Desktop의 MCP설정을 읽어 Claude Code에 MCP 서버를 동기화하는 툴
- URL: https://raw.githubusercontent.com/cna-bootcamp/clauding-guide/refs/heads/main/guides/tools/sync-mcp.md
- 파일명: sync-mcp.md
- PlantUML문법검사기(Window)
- 설명: Window용 PlantUML 스크립트 문법 검사기
- URL: https://raw.githubusercontent.com/cna-bootcamp/clauding-guide/refs/heads/main/guides/tools/check-plantuml.ps1
- 파일명: check-plantuml.ps1
- Mermaid문법검사기(Window)
- 설명: Window용 PlantUML 스크립트 문법 검사기
- URL: https://raw.githubusercontent.com/cna-bootcamp/clauding-guide/refs/heads/main/guides/tools/check-mermaid.ps1
- 파일명: check-mermaid.ps1
- PlantUML문법검사기(Linux/Mac)
- 설명: Linux/Mac용 PlantUML 스크립트 문법 검사기
- URL: https://raw.githubusercontent.com/cna-bootcamp/clauding-guide/refs/heads/main/guides/tools/check-plantuml.sh
- 파일명: check-plantuml.sh
- Mermaid문법검사기(Linux/Mac)
- 설명: Linux/Mac용 PlantUML 스크립트 문법 검사기
- URL: https://raw.githubusercontent.com/cna-bootcamp/clauding-guide/refs/heads/main/guides/tools/check-mermaid.sh
- 파일명: check-mermaid.sh
- IntelliJ서비스실행기
- 설명: IntelliJ에 등록된 실행프로파일을 이용하여 서비스 실행
- URL: https://raw.githubusercontent.com/cna-bootcamp/clauding-guide/refs/heads/main/guides/tools/run-intellij-service-profile.py
- 파일명: run-intellij-service-profile.py
---
## 산출물 디렉토리
- 유저스토리: design/userstory.md
- UI/UX설계서: design/uiux/uiux.md
- 스타일가이드: design/uiux/style-guide.md
- 프로토타입: design/uiux/prototype/*.html
- 아키텍처패턴: design/pattern/architecture-pattern.md
- 논리아키텍처: design/backend/logical/*
- API설계서: design/backend/api/*
- API명세서: design/backend/api/spec/*
- 외부시퀀스설계서: design/backend/sequence/outer/{플로우명}.puml
- 내부시퀀스설계서: design/backend/sequence/inner/{service-name}-{flow-name}.puml
- 클래스설계서: design/backend/class/*
- 백엔드패키지구조도: 클래스설계 결과(design/backend/class/class.md)의 '패키지 구조도' 섹션
- 데이터설계서: design/backend/database/*
- HighLevel아키텍처정의서: design/high-level-architecture.md
- 물리아키텍처: design/backend/physical/*
- 데이터베이스설치계획서
- develop/database/plan/db-plan-{service-name}-dev.md
- develop/database/plan/db-plan-{service-name}-prod.md
- 캐시설치계획서:
- develop/mq/mq-plan-dev.md
- develop/mq/mq-plan-prod.md
- MQ설치계획서
- develop/database/plan/mq-plan-{service-name}-dev.md
- develop/database/plan/mq-plan-{service-name}-prod.md
- 데이터베이스설치결과서
- develop/database/exec/db-exec-dev.md
- develop/database/exec/db-exec-prod.md
- 캐시설치결과서
- develop/database/exec/cache-exec-{service-name}-dev.md
- develop/database/exec/cache-exec-{service-name}-prod.md
- MQ설치결과서
- develop/mq/mq-exec-dev.md
- develop/mq/mq-exec-prod.md
- 백엔드개발결과서: develop/dev/dev-backend.md
- 백엔드테스트결과서: develop/dev/test-backend.md
- 프론트엔드설계서: design/frontend/frontend-design.md
## 프롬프트 약어
### 역할 약어
- "@archi": "--persona-architect"
- "@front": "--persona-front"
- "@back": "--persona-backend"
- "@secu": "--persona-security"
- "@qa": "--persona-qa"
- "@refact": "--persona-refactor"
- "@devops": "--persona-devops"
- "@scribe": "--persona-scriber"
### 작업 약어
- "@complex-flag": --seq --c7 --uc --wave-mode auto --wave-strategy systematic --delegate auto
- "@userstory": /sc:document @scribe @archi --think --wave-strategy systematic
- "@uiux": /sc:design --think @front --uc --wave-mode auto --wave-strategy systematic
- "@prototype": /sc:implement @front --answer-only
- "@design-pattern": /sc:design @archi --think-hard @complex-flag
- "@architecture": /sc:design @archi @back @refact --think-hard @complex-flag
- "@plan": --plan --think
- "@backing-service": /sc:implement @devops @back --think-hard @complex-flag
- "@dev-backend": /sc:implement @back --think-hard @complex-flag
- "@dev-front": /sc:implement @front --think-hard @complex-flag
- "@test-backend": /sc:test @back @qa --think @complex-flag
- "@test-api": /sc:test @back @qa --think 1) 소스 수정 후 컴파일하고 서버 시작 요청. 2) API경로와 DTO를 분석하여 정확하게 요청하여 테스트
- "@run-back":
- 'IntelliJ서비스실행기'를 'tools' 디렉토리에 다운로드
- python 또는 python3 명령으로 백그라우드로 실행하고 결과 로그를 분석
nohup python3 tools/run-intellij-service-profile.py {service-name} > logs/{service-name}.log 2>&1 & echo "Started {service-name} with PID: $!"
- "@test-front": /sc:test @front @qa --play --think @complex-flag
- "@cicd": /sc:implement @devops --think @complex-flag
- "@document": /sc:document --think @scribe @complex-flag
- "@fix": /sc:troubleshoot --think @complex-flag
- "@estimate": /sc:estimate --think-hard @complex-flag
- "@improve": /sc:improve --think @complex-flag
- "@analyze": /sc:analyze --think --seq
- "@explain": /sc:explain --think --seq --answer-only
### 파일 약어
- "@error": debug/error.png파일을 의미함
- "@info": debug/info.png파일을 의미함
### 작업 단계 가이드 약어
- "@think-help": "기획실행프롬프트 내용을 터미널에 출력"
- "@design-help": "설계실행프롬프트 내용을 터미널에 출력"
- "@develop-help": "개발실행프롬프트 내용을 터미널에 출력"
- "@deploy-help": "배포실행프롬프트 내용을 터미널에 출력"
```
# Lessons Learned
## 개발 워크플로우
- **❗ 핵심 원칙**: 코드 수정 → 컴파일 → 사람에게 서버 시작 요청 → 테스트
@ -544,3 +184,8 @@ QA Engineer
- **환경변수 확인**: `kubectl exec -n {namespace} {pod-name} -c postgresql -- env | grep POSTGRES`
- **SQL 실행**: `kubectl exec -n {namespace} {pod-name} -c postgresql -- bash -c 'PGPASSWORD="$POSTGRES_POSTGRES_PASSWORD" psql -U postgres -d {database} -c "{SQL}"'`
- **예시**: `kubectl exec -n phonebill-dev product-change-postgres-dev-postgresql-0 -c postgresql -- bash -c 'PGPASSWORD="$POSTGRES_POSTGRES_PASSWORD" psql -U postgres -d product_change_db -c "ALTER TABLE product_change.pc_product_change_history ALTER COLUMN customer_id TYPE VARCHAR(100);"'`
[가이드]
```
$(cat claude/guide.md)
```

View File

@ -5,7 +5,7 @@
<map>
<entry key="CORS_ALLOWED_ORIGINS" value="http://localhost:3000" />
<entry key="DB_CONNECTION_TIMEOUT" value="30000" />
<entry key="DB_HOST" value="20.249.175.46" />
<entry key="DB_HOST" value="localhost" />
<entry key="DB_IDLE_TIMEOUT" value="600000" />
<entry key="DB_KIND" value="postgresql" />
<entry key="DB_LEAK_DETECTION" value="60000" />
@ -13,8 +13,8 @@
<entry key="DB_MAX_POOL" value="20" />
<entry key="DB_MIN_IDLE" value="5" />
<entry key="DB_NAME" value="bill_inquiry_db" />
<entry key="DB_PASSWORD" value="BillUser2025!" />
<entry key="DB_PORT" value="5432" />
<entry key="DB_PASSWORD" value="BillUser2025@" />
<entry key="DB_PORT" value="25432" />
<entry key="DB_USERNAME" value="bill_inquiry_user" />
<entry key="JWT_ACCESS_TOKEN_VALIDITY" value="18000000" />
<entry key="JWT_REFRESH_TOKEN_VALIDITY" value="86400000" />
@ -22,12 +22,12 @@
<entry key="KOS_BASE_URL" value="http://localhost:8084" />
<entry key="LOG_FILE_NAME" value="logs/bill-service.log" />
<entry key="REDIS_DATABASE" value="1" />
<entry key="REDIS_HOST" value="20.249.193.103" />
<entry key="REDIS_HOST" value="localhost" />
<entry key="REDIS_MAX_ACTIVE" value="8" />
<entry key="REDIS_MAX_IDLE" value="8" />
<entry key="REDIS_MAX_WAIT" value="-1" />
<entry key="REDIS_MIN_IDLE" value="0" />
<entry key="REDIS_PASSWORD" value="Redis2025Dev!" />
<entry key="REDIS_PASSWORD" value="Redis2025Dev@" />
<entry key="REDIS_PORT" value="6379" />
<entry key="REDIS_TIMEOUT" value="2000" />
<entry key="SERVER_PORT" value="8082" />

Binary file not shown.

View File

@ -62,9 +62,10 @@ public class BillEntity {
private String dueDate;
@CreationTimestamp
@Column(name = "created_at", nullable = false)
private LocalDateTime createdAt;
@Column(name = "created_at", nullable = false, updatable = false)
@Builder.Default
private LocalDateTime createdAt = LocalDateTime.now();
// 고객 정보와의 관계
@ManyToOne(fetch = FetchType.LAZY)
@JoinColumn(name = "line_number", insertable = false, updatable = false)

View File

@ -41,12 +41,14 @@ public class CustomerEntity {
private LocalDateTime contractDate;
@CreationTimestamp
@Column(name = "created_at", nullable = false)
private LocalDateTime createdAt;
@Column(name = "created_at", nullable = false, updatable = false)
@Builder.Default
private LocalDateTime createdAt = LocalDateTime.now();
@UpdateTimestamp
@Column(name = "updated_at", nullable = false)
private LocalDateTime updatedAt;
@Builder.Default
private LocalDateTime updatedAt = LocalDateTime.now();
// 상품 엔티티와의 관계 설정 (조회 성능을 위해)
@ManyToOne(fetch = FetchType.LAZY)

View File

@ -54,10 +54,12 @@ public class ProductEntity {
private String description;
@CreationTimestamp
@Column(name = "created_at", nullable = false)
private LocalDateTime createdAt;
@Column(name = "created_at", nullable = false, updatable = false)
@Builder.Default
private LocalDateTime createdAt = LocalDateTime.now();
@UpdateTimestamp
@Column(name = "updated_at", nullable = false)
private LocalDateTime updatedAt;
@Builder.Default
private LocalDateTime updatedAt = LocalDateTime.now();
}

View File

@ -4,11 +4,11 @@
<option name="env">
<map>
<entry key="CORS_ALLOWED_ORIGINS" value="http://localhost:3000" />
<entry key="DB_HOST" value="20.249.107.185" />
<entry key="DB_HOST" value="localhost" />
<entry key="DB_KIND" value="postgresql" />
<entry key="DB_NAME" value="product_change_db" />
<entry key="DB_PASSWORD" value="ProductUser2025!" />
<entry key="DB_PORT" value="5432" />
<entry key="DB_PASSWORD" value="ProductUser2025@" />
<entry key="DB_PORT" value="35432" />
<entry key="DB_USERNAME" value="product_change_user" />
<entry key="DDL_AUTO" value="update" />
<entry key="JWT_ACCESS_TOKEN_VALIDITY" value="18000000" />
@ -19,8 +19,8 @@
<entry key="KOS_CLIENT_ID" value="product-service-dev" />
<entry key="KOS_MOCK_ENABLED" value="true" />
<entry key="REDIS_DATABASE" value="2" />
<entry key="REDIS_HOST" value="20.249.193.103" />
<entry key="REDIS_PASSWORD" value="Redis2025Dev!" />
<entry key="REDIS_HOST" value="localhost" />
<entry key="REDIS_PASSWORD" value="Redis2025Dev@" />
<entry key="REDIS_PORT" value="6379" />
<entry key="SERVER_PORT" value="8083" />
<entry key="SPRING_PROFILES_ACTIVE" value="dev" />

View File

@ -4,19 +4,19 @@
<option name="env">
<map>
<entry key="CORS_ALLOWED_ORIGINS" value="http://localhost:3000" />
<entry key="DB_HOST" value="20.249.70.6" />
<entry key="DB_HOST" value="localhost" />
<entry key="DB_KIND" value="postgresql" />
<entry key="DB_NAME" value="phonebill_auth" />
<entry key="DB_PASSWORD" value="AuthUser2025!" />
<entry key="DB_PORT" value="5432" />
<entry key="DB_PASSWORD" value="AuthUser2025@" />
<entry key="DB_PORT" value="15432" />
<entry key="DB_USERNAME" value="auth_user" />
<entry key="DDL_AUTO" value="update" />
<entry key="JWT_ACCESS_TOKEN_VALIDITY" value="18000000" />
<entry key="JWT_REFRESH_TOKEN_VALIDITY" value="86400000" />
<entry key="JWT_SECRET" value="nwe5Yo9qaJ6FBD/Thl2/j6/SFAfNwUorAY1ZcWO2KI7uA4bmVLOCPxE9hYuUpRCOkgV2UF2DdHXtqHi3+BU/ecbz2zpHyf/720h48UbA3XOMYOX1sdM+dQ==" />
<entry key="REDIS_DATABASE" value="0" />
<entry key="REDIS_HOST" value="20.249.193.103" />
<entry key="REDIS_PASSWORD" value="Redis2025Dev!" />
<entry key="REDIS_HOST" value="localhost" />
<entry key="REDIS_PASSWORD" value="Redis2025Dev@" />
<entry key="REDIS_PORT" value="6379" />
<entry key="SERVER_PORT" value="8081" />
<entry key="SHOW_SQL" value="true" />

View File

@ -21,9 +21,12 @@ public class AuthUserEntity extends BaseTimeEntity {
@Column(name = "user_id", length = 50)
private String userId;
@Column(name = "password", nullable = false, length = 255)
private String password;
@Column(name = "password_hash", nullable = false, length = 255)
private String passwordHash;
@Column(name = "password_salt", nullable = false, length = 100)
private String passwordSalt;
@ -35,7 +38,15 @@ public class AuthUserEntity extends BaseTimeEntity {
@Column(name = "user_name", length = 100)
private String userName;
@Column(name = "enabled", nullable = false)
@Builder.Default
private Boolean enabled = true;
@Column(name = "locked", nullable = false)
@Builder.Default
private Boolean locked = false;
@Enumerated(EnumType.STRING)
@Column(name = "account_status", length = 20)
@Builder.Default

View File

@ -19,17 +19,23 @@ public class AuthUserPermissionEntity extends BaseTimeEntity {
@GeneratedValue(strategy = GenerationType.IDENTITY)
@Column(name = "user_permission_id")
private Long userPermissionId;
@Column(name = "user_id", nullable = false, length = 50)
private String userId;
@Column(name = "permission_id", nullable = false)
@Column(name = "permission_id")
private Long permissionId;
@Column(name = "permission_name", nullable = false, length = 50)
private String permissionName;
@Column(name = "description", length = 200)
private String description;
@Column(name = "granted")
@Builder.Default
private Boolean granted = true;
@Column(name = "granted_by", length = 50)
private String grantedBy;

View File

@ -118,10 +118,12 @@ public class UserService {
AuthUserPermissionEntity userPermission = AuthUserPermissionEntity.builder()
.userId(userId)
.permissionId(permission.getPermissionId())
.permissionName(permission.getPermissionCode())
.description(permission.getPermissionDescription())
.granted(true)
.grantedBy(grantedBy)
.build();
authUserPermissionRepository.save(userPermission);
}
@ -261,8 +263,11 @@ public class UserService {
.customerId(request.getCustomerId())
.lineNumber(request.getLineNumber())
.userName(request.getUserName())
.password(hashedPassword)
.passwordHash(hashedPassword)
.passwordSalt(salt)
.enabled(existingUser.getEnabled())
.locked(existingUser.getLocked())
.accountStatus(existingUser.getAccountStatus())
.failedLoginCount(existingUser.getFailedLoginCount())
.lastFailedLoginAt(existingUser.getLastFailedLoginAt())
@ -331,8 +336,11 @@ public class UserService {
.customerId(request.getCustomerId())
.lineNumber(request.getLineNumber())
.userName(request.getUserName())
.password(hashedPassword)
.passwordHash(hashedPassword)
.passwordSalt(salt)
.enabled(true)
.locked(false)
.accountStatus(AuthUserEntity.AccountStatus.ACTIVE)
.failedLoginCount(0)
.build();