Skip to content

πŸ’° 금 거래 μ„œλΉ„μŠ€ μžμ› Repository

Notifications You must be signed in to change notification settings

jw427/gold-transaction-resource

Folders and files

NameName
Last commit message
Last commit date

Latest commit

Β 

History

57 Commits
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 

Repository files navigation

πŸ’° 금 거래 μ„œλΉ„μŠ€

πŸ’¬ ν”„λ‘œμ νŠΈ μ†Œκ°œ

κΈˆμ„ ν•œμ°½ μ—΄μ‹¬νžˆ νŒ”κ³  있던 μ•Œλ ˆν…Œμ΄μ•„λŠ”, κΈˆμ„ νŒλ§€ν•˜κ³  κ΅¬λ§€ν•˜λŠ” μ„œλΉ„μŠ€λ₯Ό μ œκ³΅ν•˜κΈ°λ‘œ κ²°μ •ν–ˆμŠ΅λ‹ˆλ‹€!
μ•Œλ ˆν…Œμ΄μ•„λŠ” 앱을 톡해 ꡬ맀, 판맀 주문을 κ΄€λ¦¬ν•˜λ €κ³  ν•©λ‹ˆλ‹€!
λ˜ν•œ λ―Έλž˜μ— μ„œλΉ„μŠ€κ°€ ν™•μž₯될 것을 κ³ λ €ν•˜μ—¬, 인증을 λ‹΄λ‹Ήν•˜λŠ” μ„œλ²„λ₯Ό λ³„λ„λ‘œ κ΅¬μΆ•ν•˜κΈ°λ‘œ κ²°μ •ν•©λ‹ˆλ‹€.

πŸ’‘ μš”κ΅¬μ‚¬ν•­

  1. RESTful APIλ₯Ό ν™œμš©ν•˜μ—¬ ꡬ맀, 판맀 μ£Όλ¬Έ CRUDλ₯Ό μˆ˜ν–‰ν•˜λŠ” μ„œλ²„ A κ΅¬ν˜„
  2. μ„œλ²„ A와 gRPCλ₯Ό 톡해 μ†Œν†΅ν•˜λ©°, μΈμ¦λ§Œμ„ λ‹΄λ‹Ήν•˜λŠ” μ„œλ²„ B κ΅¬ν˜„

πŸ› οΈ 기술 μŠ€νƒ


🏷️ λͺ©μ°¨

  1. πŸƒβ€β™€οΈ Quick Start
  2. πŸ“¦ ERD
  3. πŸ“ 디렉터리 ꡬ쑰
  4. πŸ“‘ κ΅¬ν˜„ λ‚΄μš©
  5. πŸ’Œ API λͺ…μ„Έ
  6. ⚑ νŠΈλŸ¬λΈ” μŠˆνŒ…
  7. πŸ€” κ³ λ―Ό 흔적

πŸƒβ€β™€οΈ Quick Start

  1. .env 파일
  • μžμ› μ„œλ²„
DB_URL=
DB_USERNAME=
DB_PASSWORD=
  • 인증 μ„œλ²„
DB_URL=
DB_USERNAME=
DB_PASSWORD=

JWT_SECRET_KEY="Key μ„€μ •"
ACCESS_TOKEN_EXPIRATION=μ•‘μ„ΈμŠ€ 토큰 만료 μ‹œκ°„
REFRESH_TOKEN_EXPIRATION=λ¦¬ν”„λ ˆμ‹œ 토큰 만료 μ‹œκ°„
  1. gradle build
  2. μ‹€ν–‰
βœ‹ Java 버전 좩돌둜 였λ₯˜κ°€ λ°œμƒν•˜λŠ” 경우
    ν˜„μž¬ ν”„λ‘œμ νŠΈλŠ” Java 17 버전을 μ‚¬μš©μ€‘μž…λ‹ˆλ‹€.
    λ”°λΌμ„œ 버전이 λ‹€λ₯Έ 경우 17 버전 jdk νŒŒμΌμ„ λ‹€μš΄λ‘œλ“œ ν›„
    root κ²½λ‘œμ— gradle.properties νŒŒμΌμ„ 생성해 μ•„λž˜μ™€ 같이 λ‹€μš΄λ‘œλ“œ 받은 파일의 경둜λ₯Ό μ„€μ •ν•΄μ£Όμ„Έμš”.
    org.gradle.java.home=C:/corretto-17.0.12

πŸ“¦ ERD

☝️ User ν…Œμ΄λΈ”κ³Ό Order ν…Œμ΄λΈ”μ΄ 1:N κ΄€κ³„λ‘œ μ—°κ²°λ˜μ—ˆμ§€λ§Œ μ‹€μ œλ‘œλŠ” μ„œλ²„λ₯Ό λΆ„λ¦¬ν–ˆκΈ° λ•Œλ¬Έμ— μ—°κ²°λ˜μ–΄μžˆμ§€ μ•Šλ‹€.

Untitled


πŸ“ 디렉터리 ꡬ쑰

μžμ› μ„œλ²„ 디렉터리 ꡬ쑰
src
β”œβ”€main
β”‚  β”œβ”€java
β”‚  β”‚  └─com
β”‚  β”‚      └─wanted
β”‚  β”‚          └─gold
β”‚  β”‚              β”‚  GoldApplication.java
β”‚  β”‚              β”‚
β”‚  β”‚              β”œβ”€client
β”‚  β”‚              β”‚  β”‚  AuthGrpcClient.java
β”‚  β”‚              β”‚  β”‚
β”‚  β”‚              β”‚  └─dto
β”‚  β”‚              β”‚          UserResponseDto.java
β”‚  β”‚              β”‚
β”‚  β”‚              β”œβ”€config
β”‚  β”‚              β”‚      SwaggerConfig.java
β”‚  β”‚              β”‚
β”‚  β”‚              β”œβ”€exception
β”‚  β”‚              β”‚  β”‚  BadRequestException.java
β”‚  β”‚              β”‚  β”‚  BaseException.java
β”‚  β”‚              β”‚  β”‚  ConflictException.java
β”‚  β”‚              β”‚  β”‚  ErrorCode.java
β”‚  β”‚              β”‚  β”‚  ErrorResponse.java
β”‚  β”‚              β”‚  β”‚  ForbiddenException.java
β”‚  β”‚              β”‚  β”‚  NotFoundException.java
β”‚  β”‚              β”‚  β”‚  UnauthorizedException.java
β”‚  β”‚              β”‚  β”‚
β”‚  β”‚              β”‚  └─handler
β”‚  β”‚              β”‚          GlobalExceptionHandler.java
β”‚  β”‚              β”‚
β”‚  β”‚              β”œβ”€order
β”‚  β”‚              β”‚  β”œβ”€controller
β”‚  β”‚              β”‚  β”‚      DeliveryController.java
β”‚  β”‚              β”‚  β”‚      OrderController.java
β”‚  β”‚              β”‚  β”‚      PaymentController.java
β”‚  β”‚              β”‚  β”‚
β”‚  β”‚              β”‚  β”œβ”€domain
β”‚  β”‚              β”‚  β”‚      Delivery.java
β”‚  β”‚              β”‚  β”‚      DeliveryStatus.java
β”‚  β”‚              β”‚  β”‚      Order.java
β”‚  β”‚              β”‚  β”‚      OrderStatus.java
β”‚  β”‚              β”‚  β”‚      OrderType.java
β”‚  β”‚              β”‚  β”‚      Payment.java
β”‚  β”‚              β”‚  β”‚      PaymentStatus.java
β”‚  β”‚              β”‚  β”‚
β”‚  β”‚              β”‚  β”œβ”€dto
β”‚  β”‚              β”‚  β”‚      CreateOrderRequestDto.java
β”‚  β”‚              β”‚  β”‚      DeliveryResponseDto.java
β”‚  β”‚              β”‚  β”‚      ModifyDeliveryRequestDto.java
β”‚  β”‚              β”‚  β”‚      ModifyPaymentRequestDto.java
β”‚  β”‚              β”‚  β”‚      OrderDetailResponseDto.java
β”‚  β”‚              β”‚  β”‚      OrderListPaginationResponseDto.java
β”‚  β”‚              β”‚  β”‚      OrderListResponseDto.java
β”‚  β”‚              β”‚  β”‚      PaymentResponseDto.java
β”‚  β”‚              β”‚  β”‚
β”‚  β”‚              β”‚  β”œβ”€repository
β”‚  β”‚              β”‚  β”‚      DeliveryRepository.java
β”‚  β”‚              β”‚  β”‚      OrderRepository.java
β”‚  β”‚              β”‚  β”‚      PaymentRepository.java
β”‚  β”‚              β”‚  β”‚
β”‚  β”‚              β”‚  └─service
β”‚  β”‚              β”‚          DeliveryService.java
β”‚  β”‚              β”‚          OrderService.java
β”‚  β”‚              β”‚          OrderValidator.java
β”‚  β”‚              β”‚          PaymentService.java
β”‚  β”‚              β”‚
β”‚  β”‚              └─product
β”‚  β”‚                  β”œβ”€controller
β”‚  β”‚                  β”‚      PriceController.java
β”‚  β”‚                  β”‚
β”‚  β”‚                  β”œβ”€domain
β”‚  β”‚                  β”‚      GoldType.java
β”‚  β”‚                  β”‚      Price.java
β”‚  β”‚                  β”‚      PriceType.java
β”‚  β”‚                  β”‚      Product.java
β”‚  β”‚                  β”‚
β”‚  β”‚                  β”œβ”€dto
β”‚  β”‚                  β”‚      CreatePriceRequestDto.java
β”‚  β”‚                  β”‚
β”‚  β”‚                  β”œβ”€repository
β”‚  β”‚                  β”‚      PriceRepository.java
β”‚  β”‚                  β”‚      ProductRepository.java
β”‚  β”‚                  β”‚
β”‚  β”‚                  └─service
β”‚  β”‚                          PriceService.java
β”‚  β”‚
β”‚  β”œβ”€proto
β”‚  β”‚      auth.proto
β”‚  β”‚
β”‚  └─resources
β”‚          application.yml
β”‚
└─test
    └─java
        └─com
            └─wanted
                └─gold
                        GoldApplicationTests.java
인증 μ„œλ²„ 디렉터리 ꡬ쑰
src
β”œβ”€main
β”‚  β”œβ”€java
β”‚  β”‚  └─com
β”‚  β”‚      └─wanted
β”‚  β”‚          └─gold
β”‚  β”‚              β”‚  GoldApplication.java
β”‚  β”‚              β”‚
β”‚  β”‚              β”œβ”€config
β”‚  β”‚              β”‚      SwaggerConfig.java
β”‚  β”‚              β”‚
β”‚  β”‚              β”œβ”€exception
β”‚  β”‚              β”‚  β”‚  BadRequestException.java
β”‚  β”‚              β”‚  β”‚  BaseException.java
β”‚  β”‚              β”‚  β”‚  ConflictException.java
β”‚  β”‚              β”‚  β”‚  ErrorCode.java
β”‚  β”‚              β”‚  β”‚  ErrorResponse.java
β”‚  β”‚              β”‚  β”‚  NotFoundException.java
β”‚  β”‚              β”‚  β”‚  UnauthorizedException.java
β”‚  β”‚              β”‚  β”‚
β”‚  β”‚              β”‚  └─handler
β”‚  β”‚              β”‚          GlobalExceptionHandler.java
β”‚  β”‚              β”‚
β”‚  β”‚              β”œβ”€server
β”‚  β”‚              β”‚      AuthServer.java
β”‚  β”‚              β”‚
β”‚  β”‚              └─user
β”‚  β”‚                  β”œβ”€config
β”‚  β”‚                  β”‚      SecurityConfig.java
β”‚  β”‚                  β”‚      TokenAuthenticationFilter.java
β”‚  β”‚                  β”‚      TokenProvider.java
β”‚  β”‚                  β”‚
β”‚  β”‚                  β”œβ”€controller
β”‚  β”‚                  β”‚      TokenController.java
β”‚  β”‚                  β”‚      UserController.java
β”‚  β”‚                  β”‚
β”‚  β”‚                  β”œβ”€domain
β”‚  β”‚                  β”‚      Role.java
β”‚  β”‚                  β”‚      Token.java
β”‚  β”‚                  β”‚      User.java
β”‚  β”‚                  β”‚      UserDetail.java
β”‚  β”‚                  β”‚
β”‚  β”‚                  β”œβ”€dto
β”‚  β”‚                  β”‚      SignUpRequestDto.java
β”‚  β”‚                  β”‚      SignUpResponseDto.java
β”‚  β”‚                  β”‚      TokenRequestDto.java
β”‚  β”‚                  β”‚      TokenResponseDto.java
β”‚  β”‚                  β”‚      UserLoginRequestDto.java
β”‚  β”‚                  β”‚      UserLoginResponseDto.java
β”‚  β”‚                  β”‚
β”‚  β”‚                  β”œβ”€repository
β”‚  β”‚                  β”‚      TokenRepository.java
β”‚  β”‚                  β”‚      UserRepository.java
β”‚  β”‚                  β”‚
β”‚  β”‚                  └─service
β”‚  β”‚                          AuthServiceGrpcImpl.java
β”‚  β”‚                          TokenService.java
β”‚  β”‚                          UserDetailService.java
β”‚  β”‚                          UserService.java
β”‚  β”‚                          UserValidator.java
β”‚  β”‚
β”‚  β”œβ”€proto
β”‚  β”‚      auth.proto
β”‚  β”‚
β”‚  └─resources
β”‚          application.yml
β”‚
└─test
    └─java
        └─com
            └─wanted
                └─gold
                        GoldApplicationTests.java

πŸ“‘ κ΅¬ν˜„ λ‚΄μš©

νšŒμ›κ°€μž…

  • 계정λͺ…κ³Ό λΉ„λ°€λ²ˆν˜Έ μœ νš¨μ„± 검사
  • 쀑볡 계정λͺ… 방지 κΈ°λŠ₯

둜그인

  • 둜그인 μ‹œ μ•‘μ„ΈμŠ€ 토큰과 λ¦¬ν”„λ ˆμ‹œ 토큰 λ°œκΈ‰
  • λͺ¨λ“  μ£Όλ¬Έ μ„œλΉ„μŠ€μ— 둜그인 ν•œ νšŒμ›λ§Œ μ ‘κ·Ό κ°€λŠ₯ν•œ κΈ°λŠ₯

μ•‘μ„ΈμŠ€ 토큰 μž¬λ°œκΈ‰

  • μ•‘μ„ΈμŠ€ 토큰 만료 μ‹œ λ¦¬ν”„λ ˆμ‹œ 토큰이 μœ νš¨ν•  경우 μ•‘μ„ΈμŠ€ 토큰 μž¬λ°œκΈ‰

μ£Όλ¬Έ 생성

  • μ£Όλ¬Έ 생성에 ν•„μš”ν•œ 정보듀 μž…λ ₯ μ‹œ μ£Όλ¬Έ 생성
  • μ£Όλ¬Έν•˜λŠ” μˆ˜λŸ‰ μž…λ ₯ μ‹œ μ†Œμˆ˜ λ‘˜μ§Έμžλ¦¬κΉŒμ§€λ§Œ ν—ˆμš©ν•˜κΈ° μœ„ν•œ μœ νš¨μ„± 검사
  • 재고의 효율적인 관리λ₯Ό μœ„ν•΄ ꡬ맀 μ£Όλ¬Έ μ‹œ μ£Όλ¬Έ μˆ˜λŸ‰μ΄ μž¬κ³ λ³΄λ‹€ λ§Žμ„ 경우 μ£Όλ¬Έ λΆˆκ°€ 및 주문이 κ°€λŠ₯ν•œ 경우 μƒν’ˆ 재고 차감

μ£Όλ¬Έ λͺ©λ‘ 쑰회

  • 본인의 μ£Όλ¬Έ λͺ©λ‘λ§Œ 쑰회 κ°€λŠ₯
  • κ΄€λ¦¬μžμ˜ 경우 λͺ¨λ“  μ£Όλ¬Έ λͺ©λ‘ 쑰회 κ°€λŠ₯
  • 쑰회 μ‹œ 데이터λ₯Ό νŽ˜μ΄μ§€λ„€μ΄μ…˜μœΌλ‘œ 응닡

μ£Όλ¬Έ 상세 쑰회

  • μ£Όλ¬Έ 상세 쑰회 μ‹œ μ£Όλ¬Έ 정보 뿐만 μ•„λ‹ˆλΌ 주문에 ν•΄λ‹Ήν•˜λŠ” 배솑 정보와 결제 정보도 ν•¨κ»˜ 응닡
  • 일반 νšŒμ›μ˜ 경우 λ‹€λ₯Έ νšŒμ›μ˜ μ£Όλ¬Έ 정보 쑰회 λΆˆκ°€

μ£Όλ¬Έ μ‚­μ œ

  • 본인의 주문만 μ‚­μ œ κ°€λŠ₯
  • κ²°μ œκ°€ μ§„ν–‰λœ 경우 μ‚­μ œ λΆˆκ°€

가격 등둝

  • κ΄€λ¦¬μžλ§Œ μ ‘κ·Ό κ°€λŠ₯
  • 각 ν’ˆλͺ© λ³„λ‘œ μ£Όλ¬Έ μœ ν˜•λ³„λ‘œ 가격 등둝 κ°€λŠ₯

결제 정보 μˆ˜μ •

  • 본인의 결제 μ •λ³΄λ§Œ μˆ˜μ • κ°€λŠ₯
  • νšŒμ›μ—κ²Œμ„œ 정보 μž…λ ₯λ°›μ•„ μˆ˜μ •ν•˜λŠ” κΈ°λŠ₯
  • μˆ˜μ •ν•  정보λ₯Ό ν•˜λ‚˜λ„ μž…λ ₯ν•˜μ§€ μ•Šμ„ 경우 μˆ˜μ • λΆˆκ°€
  • 이미 κ²°μ œκ°€ μ™„λ£Œλœ μƒνƒœμ—μ„œλŠ” μˆ˜μ • λΆˆκ°€

배솑 정보 μˆ˜μ •

  • 본인의 배솑 μ •λ³΄λ§Œ μˆ˜μ • κ°€λŠ₯
  • νšŒμ›μ—κ²Œμ„œ 정보 μž…λ ₯λ°›μ•„ μˆ˜μ •ν•˜λŠ” κΈ°λŠ₯
  • μˆ˜μ •ν•  정보λ₯Ό ν•˜λ‚˜λ„ μž…λ ₯ν•˜μ§€ μ•Šμ„ 경우 μˆ˜μ • λΆˆκ°€
  • 이미 배솑이 μ™„λ£Œλ„λ‹ˆ μƒνƒœμ—μ„œλŠ” μˆ˜μ • λΆˆκ°€

결제 μƒνƒœ μˆ˜μ •

  • κ΄€λ¦¬μžλ§Œ μ ‘κ·Ό κ°€λŠ₯
  • κ²°μ œκ°€ μ™„λ£Œλ˜λ©΄ κ΄€λ¦¬μžκ°€ 확인 ν›„ 결제 μƒνƒœλ₯Ό μ™„λ£Œλ‘œ μ—…λ°μ΄νŠΈν•˜λŠ” κΈ°λŠ₯

배솑 μƒνƒœ μˆ˜μ •

  • κ΄€λ¦¬μžλ§Œ μ ‘κ·Ό κ°€λŠ₯
  • 배솑이 μ™„λ£Œλ˜λ©΄ κ΄€λ¦¬μžκ°€ 확인 ν›„ 배솑 μƒνƒœλ₯Ό μ™„λ£Œλ‘œ μ—…λ°μ΄νŠΈν•˜λŠ” κΈ°λŠ₯

πŸ’‘ μžμ› μ„œλ²„μ™€ 인증 μ„œλ²„ gRPC μ—°κ²°

  • μžμ› μ„œλ²„μ˜ RESTful API ν¬νŠΈλŠ” 9999번, grpc ν¬νŠΈλŠ” 50052번
  • 인증 μ„œλ²„μ˜ RESTful API ν¬νŠΈλŠ” 8888번, grpc ν¬νŠΈλŠ” 50051번
  • 두 μ„œλ²„λ₯Ό 각각 뢄리해 gRPC μ—°κ²° ν›„ μžμ› μ„œλ²„μ—μ„œ νšŒμ› 인증이 ν•„μš”ν•  μ‹œ 인증 μ„œλ²„μ— 인증 μš”μ²­μ„ λ³΄λ‚΄λŠ” κΈ°λŠ₯

πŸ’Œ API λͺ…μ„Έ

πŸ”— Swagger API λ¬Έμ„œ


⚑ νŠΈλŸ¬λΈ” μŠˆνŒ…

⚑ λΉŒλ“œ μ‹œ Java 버전이 λ‹€λ₯Έ 문제

    gRPC μ‚¬μš©μ„ μœ„ν•΄μ„œλŠ” .proto νŒŒμΌμ„ μ»΄νŒŒμΌν•΄μ•Όν•œλ‹€. 그런데 λΉŒλ“œ μ‹œλ„λ₯Ό ν•˜λ‹ˆ 였λ₯˜κ°€ λ°œμƒν–ˆλ‹€. ν˜„μž¬ ν”„λ‘œμ νŠΈλ₯Ό μœ„ν•΄μ„œ Java와 gradle λͺ¨λ‘ 17 버전을 μ‚¬μš©ν•˜κ³  있고 섀정도 그에 맞게 ν•΄μ€¬μ§€λ§Œ λΉŒλ“œλ₯Ό μ‹œλ„ν•˜λ©΄ 계속 μžλ°” 11 버전을 가져와 μΆ©λŒν•˜λŠ” λ¬Έμ œμ˜€λ‹€.
    κ·Έλž˜μ„œ root κ²½λ‘œμ— gradle.properties νŒŒμΌμ„ 생성해 μžλ°” μ„€μΉ˜ 경둜λ₯Ό μ•„λž˜μ™€ 같이 λͺ…μ‹œν•΄μ€¬λ‹€.
    org.gradle.java.home=C:/corretto-17.0.12

⚑ JPA @ColumnDefault에 λŒ€ν•œ μ˜€ν•΄

    μ£Όλ¬Έμ΄λ‚˜ 결제, 배솑 객체 생성 μ‹œ μ£Όλ¬Έ νƒ€μž…, μ£Όλ¬Έ μƒνƒœ λ“±μ˜ μ΄ˆκΈ°κ°’μ„ μžλ™μœΌλ‘œ λ„£κ³  μ‹Άμ—ˆλ‹€.
    κ·Έλž˜μ„œ @ColumnDefault μ–΄λ…Έν…Œμ΄μ…˜μœΌλ‘œ ν•„λ“œμ˜ μ΄ˆκΈ°κ°’μ„ μ•„λž˜μ™€ 같이 섀정해쀬닀.

    @ColumnDefault("'PENDING'")
    private DeliveryStatus deliveryStatus; 

    μ΄λ ‡κ²Œ 지정해주면 객체가 생성될 λ•Œ ν•΄λ‹Ή ν•„λ“œμ˜ 값이 μžλ™μœΌλ‘œ μ–΄λ…Έν…Œμ΄μ…˜ μ•ˆμ˜ κ°’μœΌλ‘œ λ°”λ€ŒλŠ” 쀄 μ•Œμ•˜λ‹€. (예λ₯Ό λ“€λ©΄ deliveryStatus의 값은 PENDINGμ΄λΌλŠ” 값이 μžλ™μœΌλ‘œ 생성)
    κ·ΈλŸ¬λ‚˜ 생성 μš”μ²­μ„ 보낸 κ²°κ³Ό ν•΄λ‹Ή ν•„λ“œμ˜ 값은 null κ°’μ΄μ—ˆλ‹€.
    μ™œ μ„€μ •ν•΄μ€€ 값이 μžλ™μœΌλ‘œ 듀어가지 μ•Šμ„κΉŒ κΆκΈˆν•΄μ„œ μ°Ύμ•„λ³Έ κ²°κ³Ό, @ColumnDefault에 λŒ€ν•΄μ„œ μ™„μ „νžˆ μ˜€ν•΄ν•˜κ³  μžˆμ—ˆλ‹€.
    @ColumnDefaultλŠ” ν…Œμ΄λΈ”μ„ 처음 생성할 λ•Œ, default값을 생성해 μ£ΌλŠ” 역할을 ν•˜λŠ” μ–΄λ…Έν…Œμ΄μ…˜μ΄μ—ˆλ‹€. λ”°λΌμ„œ ν•΄λ‹Ή μ–΄λ…Έν…Œμ΄μ…˜μ΄ 뢙은 μ»¬λŸΌμ— λ‹€λ₯Έ 값을 λ„£μœΌλ €κ³  ν•˜λ©΄ 였λ₯˜κ°€ μƒκΈ°λŠ” 것이닀.
    객체 생성 μ‹œ μ—”ν‹°ν‹° 상단에 @Builderλ₯Ό μ‚¬μš©ν–ˆκΈ° λ•Œλ¬Έμ— 값을 μ§€μ •ν•˜μ§€ μ•Šμ€ ν•„λ“œλŠ” null 값이 λ“€μ–΄κ°€κ²Œ λ˜λ―€λ‘œ, @ColumnDefault둜 μ„€μ •ν•œ 값이 듀어가지 μ•Šκ²Œ 된 것이닀.
    이λ₯Ό ν•΄κ²°ν•˜κΈ° μœ„ν•΄ λͺ…μ‹œμ μœΌλ‘œ ν•΄λ‹Ή ν•„λ“œμ— 기본값을 넣어쀬닀.


πŸ€” κ³ λ―Ό 흔적

πŸ’­ ERDλŠ” μ–΄λ–»κ²Œ μ„€κ³„ν•˜λŠ” 것이 μ’‹μ„κΉŒ?

    μš”κ΅¬μ‚¬ν•­μ„ λΆ„μ„ν•˜λ©° λͺ¨λΈλ§μ„ μ§„ν–‰ν•˜λ©΄μ„œ μ–΄λ–»κ²Œ μ£Όλ¬Έ λ‘œμ§μ„ μ§œλŠ” 것이 쒋을지 고민이 됐닀.
    ν•΄λ‹Ή μ„œλΉ„μŠ€λŠ” μ„œλΉ„μŠ€ 주인이 νšŒμ›μ—κ²Œ 금 ꡬ맀와 판맀 주문을 μ œκ³΅ν•˜λŠ” μ„œλΉ„μŠ€λ‘œ, ꡬ맀 μ£Όλ¬Έκ³Ό 판맀 주문의 μ£Όλ¬Έ 과정이 μƒμ΄ν•˜κΈ° λ•Œλ¬Έμ— 배솑과 μ£Όλ¬Έ ν…Œμ΄λΈ”μ„ ꡬ맀 μ£Όλ¬Έκ³Ό 판맀 μ£Όλ¬Έ λ”°λ‘œ λ‚˜λˆ„λŠ” 것이 쒋을지 κ³ λ―Όν–ˆλ‹€.
    κ·ΈλŸ¬λ‚˜ 주문의 μ„ΈλΆ€ λ‘œμ§μ€ λ‹€λ₯΄μ§€λ§Œ μ£Όλ¬Έ β†’ 결제 β†’ λ°°μ†‘μ˜ 과정을 κ±°μΉ˜λŠ” 것은 λ™μΌν–ˆκΈ° λ•Œλ¬Έμ— ν…Œμ΄λΈ”μ„ 같이 μ“°λŠ” 것이 효율적이라고 μƒκ°ν–ˆλ‹€.
    λ”°λΌμ„œ ꡬ맀 μ£Όλ¬Έκ³Ό 판맀 μ£Όλ¬Έ λ‘˜ λ‹€ 같은 μ£Όλ¬Έ, 결제, 배솑 ν…Œμ΄λΈ”μ„ μ“°λŠ” λŒ€μ‹  μ£Όλ¬Έ νƒ€μž…μ„ μ‹λ³„ν•˜κΈ° μœ„ν•΄ 각각 식별할 수 μžˆλŠ” Enum 클래슀λ₯Ό μ‚¬μš©ν•˜κΈ°λ‘œ ν–ˆλ‹€.
    (주문의 경우 μ£Όλ¬Έ νƒ€μž…, 결제의 경우 결제 μƒνƒœ, λ°°μ†‘μ˜ 경우 배솑 μƒνƒœ)
    그리고 결제 μƒνƒœμ™€ 배솑 μƒνƒœμ˜ 경우 μ„œλΉ„μŠ€ κ΄€λ¦¬μžκ°€ λ³€κ²½ν•  수 μžˆλ„λ‘ ν•˜λŠ” 것이 λ³΄μ•ˆμ„± μΈ‘λ©΄μ—μ„œ μ’‹λ‹€κ³  생각해 κ΄€λ¦¬μžλ§Œ λ³€κ²½ν•  수 있게 μ„€μ •ν•˜κΈ°λ‘œ ν–ˆλ‹€.

πŸ’­ Grpc Server와 Grpc Clientλ₯Ό 각각 μ–΄λ–€ μ„œλ²„λ‘œ μ„€μ •ν• κΉŒ?

    gRPCλŠ” ꡬ글이 졜초둜 κ°œλ°œν•œ μ˜€ν”ˆ μ†ŒμŠ€ 원격 ν”„λ‘œμ‹œμ € 호좜 μ‹œμŠ€ν…œμ΄λ‹€. gRPCλ₯Ό μ‚¬μš©ν•˜λ©΄ μ„œλ‘œ λ‹€λ₯Έ μœ„μΉ˜μ— μ‘΄μž¬ν•˜λŠ” κ³΅κ°„μ—μ„œ λ™μΌν•œ 객체λ₯Ό κ°€μ Έλ‹€ μ™€μ„œ μ‚¬μš©ν•  수 μžˆλ‹€.
    이 gRPCλ₯Ό μ‚¬μš©ν•΄ ꡬ맀, 판맀 주문을 λ‹΄λ‹Ήν•˜λŠ” μ„œλ²„μ™€ μΈμ¦λ§Œμ„ λ‹΄λ‹Ήν•˜λŠ” μ„œλ²„λ₯Ό μ†Œν†΅ν•˜κ²Œ ν•˜λ €κ³  ν•œλ‹€. μ΄λ•Œ Grpc Server와 Grpc Clientλ₯Ό 각각 μ–΄λ–€ μ„œλ²„λ‘œ 섀정해야할지 고민이 됐닀.
    μš”κ΅¬μ‚¬ν•­μ„ λ‹€μ‹œ μ½μ–΄λ³΄λ‹ˆ μœ μ €μ˜ κΆŒν•œ 확인이 ν•„μš”ν•œ 경우, grpcλ₯Ό 톡해 인증을 λ‹΄λ‹Ήν•˜λŠ” μ„œλ²„ B에 JWT 토큰을 보내어 인증 μ—¬λΆ€λ₯Ό 확인해야 ν•©λ‹ˆλ‹€. λΌλŠ” 뢀뢄이 μžˆμ—ˆλ‹€.
    ꡬ맀, 판맀 μ£Όλ¬Έ μ„œλ²„μ—μ„œμ˜ λͺ¨λ“  μš”μ²­μ€ κΆŒν•œ 확인이 ν•„μš”ν•˜λ‹€. λ‹€μ‹œ 말해 ꡬ맀, 판맀 μ£Όλ¬Έ μ„œλ²„μ—μ„œ 인증 μ„œλ²„λ‘œ κΆŒν•œ μš”μ²­μ„ ν•˜λŠ” 과정이 ν•„μš”ν•˜λ‹€.
    λ”°λΌμ„œ ꡬ맀, 판맀 μ£Όλ¬Έ μ„œλ²„λ₯Ό Grpc Client둜, 인증 μ„œλ²„λ₯Ό Grpc Server둜 μ„€μ •ν•˜κ³  ꡬ맀, 판맀 μ£Όλ¬Έ μ„œλ²„μ—μ„œ λͺ¨λ“  μš”μ²­μ€ 인증 μ„œλ²„μ— μš”μ²­μ„ ν•΄ κΆŒν•œ 인증 ν›„ μ§„ν–‰ν•˜κΈ°λ‘œ ν–ˆλ‹€.

About

πŸ’° 금 거래 μ„œλΉ„μŠ€ μžμ› Repository

Resources

Stars

Watchers

Forks

Releases

No releases published

Packages

No packages published

Languages