- 2024.07 ~ 2024.09.14: プロジェクトの初期開発および基本機能の実装
- 2025.01 ~ 2025.03.08: MSA(マイクロサービスアーキテクチャ)の実装および機能改善
- 2025.04.11 ~ 2025.04.13: 緊急バグ修正
- 2025.08.07 ~ 2025.09.13: ElasticSearchの追加、性能最適化
- 2025.10.02 ~ 2025.10.09: mtls, multi stage build
- Adding Delivery Service
- etc(including frontend)
back end : Spring boot 3
front end : react 18
- Back End
- Spring Boot 3.4.1
- Spring Batch
- Spring Cloud 2024.0.0
- Spring Security 6
- ElasticSearch(catalog-service)
- postgresql 15+
- MongoDB(chat-service)
- Redis
- kafka
- Amazon S3
- Front End
- React 18
- React Query v5
- React Redux
- Material UI
- TailWind CSS 5
- Styled Components
- Webpack 5
- Paypal react button
-
ユーザーサービス (User service) : 会員登録、ログイン、トークン発行、ユーザー情報管理などのサービスを提供します。
- 会員登録時、チャットサービス、注文サービス、クーポンサービスにユーザー作成メッセージを送信します。
- チャットサービス (Chat service): メッセージ情報をもとにChatMemberを作成し、テーブルに保存します。
- 注文サービス (Order service): メッセージ情報をもとにCustomerを作成し、テーブルに保存します。
- クーポンサービス (Coupon service): メッセージ情報をもとにCouponを作成し、テーブルに保存します。
- 会員登録時、チャットサービス、注文サービス、クーポンサービスにユーザー作成メッセージを送信します。
-
クーポンサービス (Coupon service) : クーポン発行、利用などのサービスを提供します。
- クーポン適用時、カートサービスにクーポン利用メッセージを送信します。
- カートサービス (Cart service): メッセージ情報をもとにクーポン適用後の価格をテーブルに保存します。
- 注文サービスからクーポンを元に戻すメッセージを受け取ると、クーポンの状態をNOT_USEDに変更します。
- クーポン適用時、カートサービスにクーポン利用メッセージを送信します。
-
カタログサービス (Catalog service) : 商品情報、検索などのサービスを提供します。
- 注文成功時、注文サービスから商品更新メッセージを受け取り、商品の販売数と在庫数を更新してテーブルに保存します。
-
カートサービス (Cart service) : カート情報管理などのサービスを提供します。
- 注文サービスからカートを空にするメッセージを受け取ると、カート情報を削除します。
- 注文サービスからカートを元に戻すメッセージを受け取ると、カート内の商品数量を1にリセットし、カートの価格も修正します。
-
注文サービス (Order service) : 注文、注文情報管理などのサービスを提供します。
- PayPalでの支払いが成功した場合、支払いサービスに支払い完了メッセージを送信します (Outbox Pattern)。
- PayPalでの支払いがキャンセルされた場合、支払いサービスに支払いキャンセルメッセージを送信します (Outbox Pattern)。
- 支払いサービスから支払い応答メッセージを受け取り、Saga Patternに従って処理します。
- 支払いサービスから支払いが完了したというメッセージを受け取った場合、カートサービスにはカートを空にするメッセージを送り、カタログサービスには商品更新メッセージを送ります。
- 支払いサービスから支払いがキャンセルされたというメッセージを受け取った場合、カートサービスにはカートを元に戻すメッセージを送り、クーポンサービスにはクーポンを元に戻すメッセージを送ります。
-
支払いサービス (Pay service) : 支払い情報管理などのサービスを提供します。
- 注文サービスから受け取ったメッセージ情報をもとに、支払い情報をテーブルに保存します。
- 注文サービスに支払い応答メッセージを送信します (Outbox Pattern)。
- アクセストークンにはブラックリストを導入し、リフレッシュトークンはHttpOnlyクッキーに保存してRefresh Token Rotationでセキュリティを強化しました。
- 会員登録はEメール認証方式です。
- ログイン後のすべてのリクエストは、API Gatewayのトークン検証フィルターを通じて認証・認可されます。
- メッセージブローカーにはKafkaを使用し、サービス間のデータ照会が必要な場合はOpenFeign機能を導入しました。
- 注文サービスと支払いサービスにはTransaction Outbox Patternを使用しました。
- 注文サービスにはSaga Patternを使用しました。
- カタログサービスでの商品照会時、Redis Cacheを適用しました。
- チャットサービスでのチャットメッセージのロードは、Cursor-based Paginationで実装しました。
- チャットサービスのチャットメッセージは、Mongo Sink Connectorを通じてMongoDBに保存します。
- https://github.com/no2ehi/full-amazon-clone をフォークし、NextJSからReactに変更しながら、React Queryによるデータ取得とチャットサービス用のUIを実装しました。
- アクセストークンはメモリに、リフレッシュトークンはHttpOnlyクッキーに保存してセキュリティを強化しました。
- Eコマースにチャット機能を追加しました(現在は部屋の作成、部屋名のダブルクリックによるチャットルーム切り替え、チャット、無限スクロール機能のみ実装)。
- 会員登録はEメール認証方式を実装しました。
-
User service : 회원 가입, 로그인, 토큰 발급, 유저 정보 관리 등 서비스 제공
- 회원 가입시 chat service, order service, coupon service에 유저 생성 메시지를 전송합니다.
- chat service : 메시지 정보를 토대로 ChatMember를 생성하여 테이블에 저장합니다.
- order service : 메시지 정보를 토대로 Customer를 생성하여 테이블에 저장합니다.
- coupon service : 메시지 정보를 토대로 coupon를 생성하여 테이블에 저장합니다.
- 회원 가입시 chat service, order service, coupon service에 유저 생성 메시지를 전송합니다.
-
Coupon service : 쿠폰 발급, 사용 등 서비스 제공
- 쿠폰 적용 시 cart service에 쿠폰 사용 메시지를 전송합니다.
- cart service : 메시지 정보를 토대로 쿠폰 적용 후 가격을 테이블에 저장합니다.
- order service로부터 coupon 되돌리기 메시지를 받으면 쿠폰 상태를 NOT_USED로 변경합니다.
- 쿠폰 적용 시 cart service에 쿠폰 사용 메시지를 전송합니다.
-
Catalog service : 상품 정보, 검색 등 서비스 제공
- 주문 성공시 order service로부터 상품 업데이트 메시지를 받아 제품의 판매량과 재고 값을 업데이트하여 테이블에 저장합니다.
-
Cart service : 카트 정보 관리 등을 서비스 제공
- order service로부터 카트 비우기 메시지를 받으면 카트 정보를 삭제합니다.
- order service로부터 카트 되돌리기 메시지를 받으면 카트에 담긴 상품 수량을 1로 리셋하고 카트 가격도 수정합니다.
-
Order service : 주문, 주문 정보 관리 등 서비스 제공
- paypal로 지불이 성공하면 pay service에 지불 완료 메시지를 보냅니다.(outbox pattern)
- paypal로 지불이 취소되면 pay service에 지불 취소 메시지를 보냅니다.(outbox pattern)
- pay service로부터 지불 응답 메시지를 받아서 saga pattern에 따라 처리합니다.
- pay service로부터 지불이 완료됐다는 메시지를 받은 경우 cart service에는 카트 비우기 메시지를 보내고
catalog service에는 상품 업데이트 메시지를 보냅니다. - pay service로부터 지불이 취소됐다는 메시지를 받은 경우 cart service에는 카트 되돌리기 메시지를 보내고
coupon service에는 쿠폰 되돌리기 메시지를 보냅니다.
-
Pay service : 지불 정보 관리 등 서비스 제공
- order service로부터 받은 메시지 정보를 토대로 지불 정보를 테이블에 저장합니다.
- order service에 지불 응답 메시지를 보냅니다.(outbox pattern)
- 액세스 토큰은 블랙리스트를 도입하고 , 리프레시 토큰은 httpOnly 쿠키에 저장하고 Refresh Token Rotation 으로 보안을 강화하였습니다.
- 회원 가입은 이메일 인증 방식입니다.
- 로그인 후에 모든 요청은 Api Gateway에서 토큰 검증 필터를 통해 인증/인가 합니다.
- 메시지 브로커는 Kafka를 사용하였고 서비스간의 데이터 조회가 필요한 경우는 OpenFeign 기능을 도입하였습니다.
- Order Service 와 Payment Service에는 Transaction OutBox Pattern을 사용했습니다.
- Order Service에는 Saga Pattern을 사용했습니다.
- Catalog Service에서 상품 조회 시 Redis Cache를 적용했습니다.
- Chat Service에서 채팅 메시지을 로드할 때 Cursor based paigination로 구현하였습니다.
- Chat Service에서 채팅 메시지는 Mongo Sink Connector를 통해 MongoDB에 저장합니다.
- https://github.com/no2ehi/full-amazon-clone 을 포크해서 NextJS에서 React로 변경하면서 React Query로 Data Fetch, Chat Service를 위한 UI를 구현하였습니다.
- 액세스 토큰은 메모리에 저장하고 리프레시 토큰은 httpOnly 쿠키로 저장하여 보안을 강화하였습니다.
- e-commerce 에 chat 기능울 추가하였습니다.(현재는 방만들기, 방 이름 더블클릭으로 채팅 방 전환, 채팅, 무한 스크롤 기능만 구현)
- 회원 가입은 이메일 인증 방식을 구현하였습니다
. java 17 install
. kafa install
. elasticsearch install
. redis install
. mongodb install
. postgresql 15 install
. chat-connector, order-payment-connector, payment-connector
1. .env.development
REACT_APP_API_URL=http://localhost:8000
NODE_ENV = "development"
PUBLIC_URL=http://localhost:3000
REACT_APP_PAYPAL_CLIENT_ID=
2. terminal command
- cd frontend
- npm i
- npm start








