연합 프로젝트
Aucison은 기존 쇼핑몰과 중고거래 시스템을 확장하여, 일반 상품은 물론 판매자가 자체 제작한 상품을 경매 방식으로 등록할 수 있는 것이 특징인 중고 경매 플랫폼입니다.
2023-09-17 ~ 2024-02-13
2023-09-17 ~ 2023-09-30 : 프로젝트 구체화 및
2023-10-01 ~ 2023-10-21 : MSA구조로 구현
2023-11-01 ~ 2024-02-13 : 모놀로틱 구조로 전환 및 구현
2024-02-14 ~ : 보완 및 업데이트 진행중
Java 17
IntelliJ
Ubuntu 22.04
Spring Boot 3.1.4
Kafka
ElasticSearch
Docker
AWS EC2, RDS, S3
OAuth2.0 & JWT
HTTPS
Spring Security
GitHub Actions
Amazon EC2 Auto Scaling
AWS CodeDeploy
MySQL
JPA
JWT
HTTPS
Jira
Notion
Discord
Git
Postman
메인 페이지 | ?? 페이지 |
---|---|
?? 페이지 | ?? 페이지 |
- Google을 통해 회원가입이 가능하며 이수 추가적인 정보를 입력할 수 있습니다.
- 회원가입 시 Google의 인증페이지로 리다이렉트하는 URL을 제공합니다.
- 사용자는 자신의 Google의 계정으로 로그인하고 애플리케이션에 대한 접근 권한을 부여 받으며 인증 완료시 권한을 부여하게 되면 애플리케이션 서버로 리다이렉트 됩니다.
- 사용자 인증 완료시 JWT토큰이 생성되고 사용자에게 반환되며 사용자는 해당 JWT토큰을 통해 여러 API를 인증된 상태로 접근 가능합니다.
- 주요 서비스 : Google 로그인, 사용자 정보 추가입력, MyPage
- 사용자가 경매 상품에 대해 실시간으로 입찰하고 경매 상태를 확인할 수 있습니다.
- 특정 경매 상품에 대한 상세 정보를 조회가 가능하며 경매 상품의 현재 가격, 최고 입찰자, 경매 종료 시간 등의 정보를 조회할 수 있습니다.
- 입찰 시도시 경매 종료시간 이전이어야 하며 최고 입찰가격보다 높은 입찰 가격으로만 입찰이 가능하고 입찰시 입찰자의 크레딧이 차감됩니다.
- 상위 입찰자가 등장할 경우 입찰한 크레딧은 자동 환불됩니다.
- 경매 종료 특정 시간 전부터(3분전) 새로운 입찰이 이루어진다면 경매 종료 시간을 일정 시간 연장됩니다.
- 경매가 종료되면 최고입찰가가 낙찰가가 됩니다.
- 사용자별 낙찰, 패찰 상태가 보여집니다.
- 주요 서비스 : 상품 입찰, 입찰 현황 조회, 경매시간 연장, 자동 크레딧 환불
- 상품 구매시 사용자의 크래딧을 차감하여 상품을 결제할 수 있습니다.
- 현재 실제 결재시스템은 미 구현 상태로 히든로직을 통해 사용자의 크래딧을 컨트롤할 수 있습니다.
- 상품 구매 및 입찰 모두 사용자의 크래딧 보다 낮은 가격의 상품만 구매 가능합니다.
- 결제 시작 및 완료 시점까지 모두 별도의 로그를 DB에 저장하여 안전하게 관리할 수 있고 분석 및 오류처리를 유연하게 할 수 있습니다.
- 결제 완료 후 관련정보는 모두 DB에 저장되며 MyPage에서 조회 가능합니다.
- 주요 서비스 : 상품 구매/입찰, 결제시스템, 구매/입찰 내역 조회
- 각 상품에 대해 별도의 문의게시판이 존재하며 사용자가 상품에 대한 질문을 올리고 다른 사용자나 관리자가 답변을 할 수 있습니다.
- 인증 인가가 완료된 사용자만 이용 가능하며 유효하지 않는 값(공백, 일정 길이 이상의 글)은 입력할 수 없습니다.
- 주요 서비스 : 게시물 조회/등록/수정/삭제, 댓글 조회/등록/수정/삭제, 신고문의
- 사용자가 입력한 키워드를 통해 유사도가 높은 결과값을 제공합니다.
- Elasticsearch를 활용하여 구현되었으며 Document 객체를 Elasticsearch에 색인화 하여 검색엔진에서 검색 가능하게 합니다.
- 검색 결과로 반환된 Document 객체들은 다시 사용자에게 보여질 수 있게 변환됩니다.
- 기존의 표준 데이터베이스 쿼리에 비해 매우 빠른 응답시간을 보입니다.
- 주요 서비스 : 상품 검색엔진
- 사용자에게 인기 있는 상품과 최근에 등록된 상품을 추천하요 사용자가 다양한 상품을 쉽게 발견하고 탐색할 수 있게 합니다.
- 인기 상품의 경우 입찰자 수가 많은 상품을 상위 10개로 보여줍니다.
- 최신 상품의 경우 카테고리별 가장 최근에 등록된 상품 상위 10개를 보여줍니다.
- 주요 서비스 : 인기 상품 추천, 최신 상품 조회
main
└── java
└── com
└── example
└── aucison_service
├── AucisonServiceApplication.java
├── BaseTimeEntity.java
├── admin
│ └── AdminController.java
├── config
│ ├── AppConfig.java
│ ├── CorsConfig.java
│ ├── ElasticsearchConfig.java
│ ├── RedisConfig.java
│ └── S3Config.java
├── controller
│ ├── AddressController.java
│ ├── AuthController.java
│ ├── BoardController.java
│ ├── CreditController.java
│ ├── HomeController.java
│ ├── InquiryController.java
│ ├── MypageController.java
│ ├── PaymentsController.java
│ ├── ProductController.java
│ └── WishController.java
├── dto
│ ├── ApiResponse.java
│ ├── aucs_sale
│ │ ├── AucsProductResponseDto.java
│ │ └── SaleProductResponseDto.java
│ ├── auth
│ │ ├── AuthResponseDto.java
│ │ ├── GoogleTokenRequestDto.java
│ │ ├── GoogleTokenResponseDto.java
│ │ ├── MemberAdditionalInfoRequestDto.java
│ │ ├── MemberDto.java
│ │ └── MemberUpdateDto.java
│ ├── board
│ │ ├── CommentCRUDResponseDto.java
│ │ ├── CommentListResponseDto.java
│ │ ├── CommentRegistRequestDto.java
│ │ ├── CommentUpdateRequestDto.java
│ │ ├── PostCRUDResponseDto.java
│ │ ├── PostListResponseDto.java
│ │ ├── PostRegistRequestDto.java
│ │ └── PostUpdateRequestDto.java
│ ├── deliveries
│ │ ├── DeliveriesCreateDto.java
│ │ └── DeliveriesResponseDto.java
│ ├── home
│ │ ├── HomeResponseDto.java
│ │ └── ProductMainResponseDto.java
│ ├── inquiry
│ │ ├── InquiryRequestDto.java
│ │ └── InquiryResponseDto.java
│ ├── mypage
│ │ ├── RequestAddressDto.java
│ │ ├── RequestMembersInfoDto.java
│ │ ├── RequestUpdateAddressDto.java
│ │ ├── ResponseAddressDto.java
│ │ ├── ResponseBidsHistoryDto.java
│ │ ├── ResponseMemberProfileDto.java
│ │ ├── ResponseOrderDetailsDto.java
│ │ ├── ResponseOrderHistoryDto.java
│ │ └── ResponseSellHistoryDto.java
│ ├── orders
│ │ ├── OrdersCreateDto.java
│ │ └── OrdersResponseDto.java
│ ├── payments
│ │ ├── AddrInfoResponseDto.java
│ │ ├── PaymentsRequestDto.java
│ │ └── VirtualPaymentResponseDto.java
│ ├── product
│ │ ├── ProductAllResponseDto.java
│ │ ├── ProductDetailResponseDto.java
│ │ ├── ProductRegisterFinshResponseDto.java
│ │ ├── ProductRegisterRequestDto.java
│ │ └── UpdateOnlyCostResponseDto.java
│ ├── search
│ │ ├── ProductSearchRequestDto.java
│ │ └── ProductSearchResponseDto.java
│ └── wish
│ ├── ProductWishCountDto.java
│ ├── WishRequestDto.java
│ ├── WishResponseDto.java
│ └── WishSimpleResponseDto.java
├── elastic
│ ├── ProductsDocument.java
│ ├── ProductsDocumentRepository.java
│ └── ProductsIndexService.java
├── enums
│ ├── Category.java
│ ├── Kind.java
│ ├── OrderType.java
│ ├── OStatusEnum.java
│ ├── PageType.java
│ ├── PStatusEnum.java
│ ├── QStatusEnum.java
│ └── Role.java
├── exception
│ ├── AppException.java
│ └── ErrorCode.java
├── jpa
│ ├── member
│ │ ├── entity
│ │ │ ├── AddressesEntity.java
│ │ │ ├── HistoriesEntity.java
│ │ │ ├── HistoriesImgEntity.java
│ │ │ ├── InquirysEntity.java
│ │ │ ├── MembersEntity.java
│ │ │ ├── MembersImgEntity.java
│ │ │ ├── MembersInfoEntity.java
│ │ │ └── WishesEntity.java
│ │ └── repository
│ │ ├── AddressesRepository.java
│ │ ├── HistoriesImgRepository.java
│ │ ├── HistoriesRepository.java
│ │ ├── InquirysRepository.java
│ │ ├── MembersImgRepository.java
│ │ ├── MembersInfoRepository.java
│ │ ├── MembersRepository.java
│ │ └── WishesRepository.java
│ └── product
│ ├── entity
│ │ ├── AucsInfosEntity.java
│ │ ├── BidCountsEntity.java
│ │ ├── CommentsEntity.java
│ │ ├── PostsEntity.java
│ │ ├── ProductImgEntity.java
│ │ ├── ProductsEntity.java
│ │ └── SaleInfosEntity.java
│ └── repository
│ ├── AucsInfosRepository.java
│ ├── BidCountsRepository.java
│ ├── CommentsRepository.java
│ ├── PostsRepository.java
│ ├── ProductImgRepository.java
│ ├── ProductsRepository.java
│ └── SaleInfosRepository.java
│ └── shipping
│ ├── entity
│ │ ├── Bids.java
│ │ ├── Deliveries.java
│ │ ├── Orders.java
│ │ ├── PageAccessLogs.java
│ │ ├── Payments.java
│ │ └── Refunds.java
│ └── repository
│ ├── BidsRepository.java
│ ├── DeliveriesRepository.java
│ ├── OrdersRepository.java
│ ├── PageAccessLogsRepository.java
│ ├── PaymentsRepository.java
│ └── RefundsRepository.java
├── kafka
│ ├── KafkaConsumerService.java
│ └── config
│ └── KafkaProducerConfig.java
├── security
│ ├── JwtAuthenticationFilter.java
│ ├── JwtAuthenticationProvider.java
│ ├── JwtTokenProvider.java
│ └── SecurityConfig.java
├── service
│ ├── HomeService.java
│ ├── HomeServiceImpl.java
│ ├── address
│ │ ├── AddressService.java
│ │ └── AddressServiceImpl.java
│ ├── hidden
│ │ ├── CreditService.java
│ │ └── CreditServiceImpl.java
│ ├── member
│ │ ├── GoogleAuthService.java
│ │ ├── InquiryService.java
│ │ ├── InquiryServiceImpl.java
│ │ ├── MemberDetails.java
│ │ ├── MemberInfoService.java
│ │ ├── MemberInfoServiceImpl.java
│ │ ├── MypageService.java
│ │ ├── MypageServiceImpl.java
│ │ ├── UserDetailsServiceImpl.java
│ │ ├── WishService.java
│ │ └── WishServiceImpl.java
│ ├── product
│ │ ├── BoardService.java
│ │ ├── BoardServiceImpl.java
│ │ ├── ProductService.java
│ │ └── ProductServiceImpl.java
│ ├── s3
│ │ └── S3Service.java
│ └── shipping
│ ├── PaymentsService.java
│ └── PaymentsServiceImpl.java
└── util
└── resources
├── application.yml
├── application-aws.yml
├── application-google.yml
├── application-https.yml
├── application-test.yml
└── keystore.p12