êžì íì°œ ìŽì¬í íê³ ìë ìë í
ìŽìë, êžì í맀íê³ êµ¬ë§€íë ìë¹ì€ë¥Œ ì ê³µíêž°ë¡ ê²°ì íìµëë€!
ìë í
ìŽìë ì±ì íµíŽ 구맀, í맀 죌묞ì êŽëŠ¬íë €ê³ í©ëë€!
ëí 믞ëì ìë¹ì€ê° íì¥ë ê²ì ê³ ë €íì¬, ìžìŠì ëŽë¹íë ìë²ë¥Œ ë³ëë¡ êµ¬ì¶íêž°ë¡ ê²°ì í©ëë€.
- RESTful API륌 íì©íì¬ êµ¬ë§€, í맀 죌묞 CRUD륌 ìííë ìë² A 구í
- ìë² Aì gRPC륌 íµíŽ ìíµíë©°, ìžìŠë§ì ëŽë¹íë ìë² B 구í
- ðââïž Quick Start
- ðŠ ERD
- ð ëë í°ëŠ¬ 구조
- ð 구í ëŽì©
- ð API ëª ìž
- â¡ ížë¬ëž ìí
- ð€ ê³ ë¯Œ íì
- .env íìŒ
- ìì ìë²
DB_URL=
DB_USERNAME=
DB_PASSWORD=
- ìžìŠ ìë²
DB_URL=
DB_USERNAME=
DB_PASSWORD=
JWT_SECRET_KEY="Key ì€ì "
ACCESS_TOKEN_EXPIRATION=ì¡ìžì€ í í° ë§ë£ ìê°
REFRESH_TOKEN_EXPIRATION=늬íë ì í í° ë§ë£ ìê°
- gradle build
- ì€í
â Java ë²ì 충ëë¡ ì€ë¥ê° ë°ìíë 겜ì°
gradle.properties
íìŒì ìì±íŽ ìëì ê°ìŽ ë€ìŽë¡ë ë°ì íìŒì 겜ë¡ë¥Œ ì€ì íŽì£Œìžì.org.gradle.java.home=C:/corretto-17.0.12
âïž User í ìŽëžê³Œ Order í ìŽëžìŽ 1:N êŽê³ë¡ ì°ê²°ëìì§ë§ ì€ì ë¡ë ìë²ë¥Œ ë¶ëŠ¬íêž° ë묞ì ì°ê²°ëìŽìì§ ìë€.
ìì ìë² ëë í°ëŠ¬ 구조
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
- ê³ì ëª ê³Œ ë¹ë°ë²íž ì íšì± ê²ì¬
- ì€ë³µ ê³ì ëª ë°©ì§ êž°ë¥
- ë¡ê·žìž ì ì¡ìžì€ í í°ê³Œ 늬íë ì í í° ë°êž
- 몚ë 죌묞 ìë¹ì€ì ë¡ê·žìž í íìë§ ì ê·Œ ê°ë¥í êž°ë¥
- ì¡ìžì€ í í° ë§ë£ ì 늬íë ì í í°ìŽ ì íší ê²œì° ì¡ìžì€ í í° ì¬ë°êž
- 죌묞 ìì±ì íìí ì ë³Žë€ ì ë ¥ ì 죌묞 ìì±
- 죌묞íë ìë ì ë ¥ ì ìì ë짞ì늬ê¹ì§ë§ íì©íêž° ìí ì íšì± ê²ì¬
- ì¬ê³ ì íšìšì ìž êŽëŠ¬ë¥Œ ìíŽ êµ¬ë§€ 죌묞 ì 죌묞 ìëìŽ ì¬ê³ ë³Žë€ ë§ì ê²œì° ì£Œë¬ž ë¶ê° ë° ì£Œë¬žìŽ ê°ë¥í ê²œì° ìí ì¬ê³ ì°šê°
- 볞ìžì 죌묞 목ë¡ë§ ì¡°í ê°ë¥
- êŽëŠ¬ìì ê²œì° ëªšë 죌묞 ëª©ë¡ ì¡°í ê°ë¥
- ì¡°í ì ë°ìŽí°ë¥Œ íìŽì§ë€ìŽì ìŒë¡ ìëµ
- 죌묞 ììž ì¡°í ì 죌묞 ì 볎 ë¿ë§ ìëëŒ ì£Œë¬žì íŽë¹íë ë°°ì¡ ì 볎ì ê²°ì ì 볎ë íšê» ìëµ
- ìŒë° íìì ê²œì° ë€ë¥ž íìì 죌묞 ì 볎 ì¡°í ë¶ê°
- 볞ìžì ì£Œë¬žë§ ìì ê°ë¥
- ê²°ì ê° ì§íë ê²œì° ìì ë¶ê°
- êŽëŠ¬ìë§ ì ê·Œ ê°ë¥
- ê° í목 ë³ë¡ 죌묞 ì íë³ë¡ ê°ê²© ë±ë¡ ê°ë¥
- 볞ìžì ê²°ì ì ë³Žë§ ìì ê°ë¥
- íììê²ì ì 볎 ì ë ¥ë°ì ìì íë êž°ë¥
- ìì í ì 볎륌 íëë ì ë ¥íì§ ìì ê²œì° ìì ë¶ê°
- ìŽë¯ž ê²°ì ê° ìë£ë ìíììë ìì ë¶ê°
- 볞ìžì ë°°ì¡ ì ë³Žë§ ìì ê°ë¥
- íììê²ì ì 볎 ì ë ¥ë°ì ìì íë êž°ë¥
- ìì í ì 볎륌 íëë ì ë ¥íì§ ìì ê²œì° ìì ë¶ê°
- ìŽë¯ž ë°°ì¡ìŽ ìë£ëë ìíììë ìì ë¶ê°
- êŽëŠ¬ìë§ ì ê·Œ ê°ë¥
- ê²°ì ê° ìë£ëë©Ž êŽëŠ¬ìê° íìž í ê²°ì ìí륌 ìë£ë¡ ì ë°ìŽížíë êž°ë¥
- êŽëŠ¬ìë§ ì ê·Œ ê°ë¥
- ë°°ì¡ìŽ ìë£ëë©Ž êŽëŠ¬ìê° íìž í ë°°ì¡ ìí륌 ìë£ë¡ ì ë°ìŽížíë êž°ë¥
- ìì ìë²ì RESTful API í¬ížë 9999ë², grpc í¬ížë 50052ë²
- ìžìŠ ìë²ì RESTful API í¬ížë 8888ë², grpc í¬ížë 50051ë²
- ë ìë²ë¥Œ ê°ê° ë¶ëŠ¬íŽ gRPC ì°ê²° í ìì ìë²ìì íì ìžìŠìŽ íìí ì ìžìŠ ìë²ì ìžìŠ ìì²ì 볎ëŽë êž°ë¥
â¡ ë¹ë ì 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ë¡ ì€ì íê³ êµ¬ë§€, í맀 죌묞 ìë²ìì 몚ë ìì²ì ìžìŠ ìë²ì ìì²ì íŽ ê¶í ìžìŠ í ì§ííêž°ë¡ íë€.