hit-it-PDA / BE

🫧 Hit it! Backend 저장소
0 stars 2 forks source link

Hit-it! Back-end

포트폴리오 추천과 자산 관리, 노후 대비 기능을 제공하는 퇴직연금운용 노후 대비 자산관리 서비스 Hit it!의 Back-end 저장소입니다.

사용 기술

아키텍처

패키지 구조

마이크로서비스 아키텍처(MSA)를 기반으로 하는 멀티 모듈 프로젝트입니다.
각 모듈은 독립적으로 배포될 수 있으며, 서로 다른 서비스를 제공하여 전체적인 시스템의 기능을 구현합니다.
5가지 모듈로 구성되어 있습니다.

  1. mydata-service
  2. asset-service
  3. portfolio-service
  4. user-service
  5. utils

1. mydata-service

구조도
``` mydata-service ├── build.gradle ├── gradle │   └── wrapper │   ├── gradle-wrapper.jar │   └── gradle-wrapper.properties ├── gradlew ├── gradlew.bat └── src ├── main │   ├── java │   │   └── com │   │   └── pda │   │   └── mydata_service │   │   ├── MydataServiceApplication.java │   │   ├── controller │   │   │   └── MydataController.java │   │   ├── dto │   │   │   ├── BankAccountDto.java │   │   │   ├── CardDto.java │   │   │   ├── LoanDto.java │   │   │   ├── PensionDto.java │   │   │   ├── RetirementAccountDto.java │   │   │   ├── SecurityAccountDto.java │   │   │   ├── SecurityStockDto.java │   │   │   └── SecurityTransactionDto.java │   │   ├── jpa │   │   │   ├── BankAccount.java │   │   │   ├── BankAccountRepository.java │   │   │   ├── Card.java │   │   │   ├── CardRepository.java │   │   │   ├── Loan.java │   │   │   ├── LoanRepository.java │   │   │   ├── MydataUser.java │   │   │   ├── MydataUserRepository.java │   │   │   ├── Pension.java │   │   │   ├── PensionRepository.java │   │   │   ├── SecurityAccount.java │   │   │   ├── SecurityAccountRepository.java │   │   │   ├── SecurityStock.java │   │   │   ├── SecurityStockRepository.java │   │   │   ├── SecurityTransaction.java │   │   │   └── SecurityTransactionRepository.java │   │   └── service │   │   ├── BankAccountService.java │   │   ├── BankAccountServiceImpl.java │   │   ├── MydataService.java │   │   └── MydataServiceImpl.java │   └── resources │   ├── application-db.properties │   ├── application.properties │   └── env.properties └── test └── java └── com └── pda └── mydata_service └── MydataServiceApplicationTests.java ```

2. asset-service

구조도
``` asset-service ├── build.gradle ├── gradle │   └── wrapper │   ├── gradle-wrapper.jar │   └── gradle-wrapper.properties ├── gradlew ├── gradlew.bat └── src ├── main │   ├── java │   │   └── com │   │   └── pda │   │   └── asset_service │   │   ├── AssetServiceApplication.java │   │   ├── controller │   │   │   ├── AccountController.java │   │   │   └── AssetController.java │   │   ├── dto │   │   │   ├── AccountCreateDto.java │   │   │   ├── AccountDto.java │   │   │   ├── BankAccountDto.java │   │   │   ├── BankAccountResponseDto.java │   │   │   ├── CardDto.java │   │   │   ├── CardResponseDto.java │   │   │   ├── LoanDto.java │   │   │   ├── LoanResponseDto.java │   │   │   ├── MydataInfoDto.java │   │   │   ├── PensionDto.java │   │   │   ├── PensionResponseDto.java │   │   │   ├── RetirementAccountDto.java │   │   │   ├── RetirementAccountResponseDto.java │   │   │   ├── SecurityAccountDto.java │   │   │   ├── SecurityAccountResponseDto.java │   │   │   ├── SecurityAccountStocksDto.java │   │   │   ├── SecurityAccountTransactionsDto.java │   │   │   ├── SecurityStockDto.java │   │   │   ├── SecurityStockResponseDto.java │   │   │   ├── SecurityTransactionDto.java │   │   │   ├── SecurityTransactionResponseDto.java │   │   │   └── UserAccountInfoDto.java │   │   ├── feign │   │   │   └── MydataServiceClient.java │   │   ├── jpa │   │   │   ├── Account.java │   │   │   ├── AccountRepository.java │   │   │   ├── AssetUser.java │   │   │   ├── AssetUserRepository.java │   │   │   ├── BankAccount.java │   │   │   ├── BankAccountRepository.java │   │   │   ├── Card.java │   │   │   ├── CardRepository.java │   │   │   ├── Loan.java │   │   │   ├── LoanRepository.java │   │   │   ├── MydataInfo.java │   │   │   ├── MydataInfoRepository.java │   │   │   ├── Pension.java │   │   │   ├── PensionId.java │   │   │   ├── PensionRepository.java │   │   │   ├── SecurityAccount.java │   │   │   ├── SecurityAccountRepository.java │   │   │   ├── SecurityStock.java │   │   │   ├── SecurityStockRepository.java │   │   │   ├── SecurityTransaction.java │   │   │   └── SecurityTransactionRepository.java │   │   ├── redis │   │   │   └── RedisConfig.java │   │   ├── service │   │   │   ├── AccountService.java │   │   │   ├── AccountServiceImpl.java │   │   │   ├── AssetService.java │   │   │   ├── AssetServiceImpl.java │   │   │   ├── BankAccountService.java │   │   │   ├── BankAccountServiceImpl.java │   │   │   ├── CardService.java │   │   │   ├── CardServiceImpl.java │   │   │   ├── LoanService.java │   │   │   ├── LoanServiceImpl.java │   │   │   ├── MydataInfoService.java │   │   │   ├── MydataServiceImpl.java │   │   │   ├── PensionService.java │   │   │   ├── PensionServiceImpl.java │   │   │   ├── SecurityAccountService.java │   │   │   ├── SecurityAccountServiceImpl.java │   │   │   ├── SecurityStockService.java │   │   │   ├── SecurityStockServiceImpl.java │   │   │   ├── SecurityTransactionService.java │   │   │   └── SecurityTransactionServiceImpl.java │   │   └── sms │   │   ├── SMSCertificationRepository.java │   │   ├── SMSCertificationService.java │   │   ├── SmsCertificationUtil.java │   │   └── UserDto.java │   └── resources │   ├── application-db.properties │   ├── application-sms.properties │   ├── application.properties │   └── env.properties └── test └── java └── com └── pda └── asset_service └── AssetServiceApplicationTests.java ```

3. portfolio-service

포트폴리오 관련 기능을 제공하는 서비스로, 포트폴리오 추천 포트폴리오 선택, 리밸런싱 알림 등 다양한 포트폴리오 관련 기능을 포함합니다.

구조도
``` ├── build.gradle ├── gradle │   └── wrapper │   ├── gradle-wrapper.jar │   └── gradle-wrapper.properties ├── gradlew ├── gradlew.bat └── src ├── main │   ├── java │   │   └── com │   │   └── pda │   │   └── portfolio_service │   │   ├── PortfolioServiceApplication.java │   │   ├── controller │   │   │   ├── DataController.java │   │   │   ├── PortfolioController.java │   │   │   └── PortfolioMessageController.java │   │   ├── dto │   │   │   ├── FundProductDto.java │   │   │   ├── HititPortfoliosFundsResponseDto.java │   │   │   ├── HititPortfoliosFundsStocksAndBondsResponseDto.java │   │   │   ├── HititPortfoliosResponseDto.java │   │   │   ├── MyDataFlaskLevelTest.java │   │   │   ├── MyDataPortfolioDto.java │   │   │   ├── OptimizeDto.java │   │   │   ├── OptimizeResponseCamelCaseDto.java │   │   │   ├── OptimizeResponseMapper.java │   │   │   ├── PortfolioFundAssetResponseDto.java │   │   │   ├── StockIncomeRevResponseDto.java │   │   │   ├── StockRevIncomeRequestDto.java │   │   │   ├── UserAgeTestScoreDto.java │   │   │   └── UserPortfolioFundRequestDto.java │   │   ├── dto_test │   │   │   ├── Bond.java │   │   │   ├── Fund.java │   │   │   ├── MyDataTestDto.java │   │   │   ├── Portfolio.java │   │   │   ├── PortfolioResponse.java │   │   │   └── Stock.java │   │   ├── feign │   │   │   ├── FlaskTestServiceClient.java │   │   │   ├── MyDataFlaskLevelTestResponseDto.java │   │   │   ├── MyDataFlaskResponseDto.java │   │   │   ├── MyDataFundData.java │   │   │   ├── MyDataPortfolioServiceClient.java │   │   │   ├── MyDataTransaction.java │   │   │   ├── MydataAssetClient.java │   │   │   ├── MydataDto.java │   │   │   ├── MydataUserClient.java │   │   │   ├── OptimizeResponseDto.java │   │   │   ├── OptimizeServiceClient.java │   │   │   ├── PensionResponseDto.java │   │   │   ├── SecurityAccountStocksDto.java │   │   │   ├── SecurityAccountTransactionsDto.java │   │   │   ├── SecurityTransactionDto.java │   │   │   └── UserServiceClient.java │   │   ├── jpa │   │   │   ├── FundBonds.java │   │   │   ├── FundBondsRepository.java │   │   │   ├── FundPrices.java │   │   │   ├── FundPricesId.java │   │   │   ├── FundPricesRepository.java │   │   │   ├── FundProducts.java │   │   │   ├── FundProductsRepository.java │   │   │   ├── FundStocks.java │   │   │   ├── FundStocksRepository.java │   │   │   ├── Portfolio.java │   │   │   ├── PortfolioFund.java │   │   │   ├── PortfolioFundAsset.java │   │   │   ├── PortfolioFundAssetRepository.java │   │   │   ├── PortfolioFundBond.java │   │   │   ├── PortfolioFundBondId.java │   │   │   ├── PortfolioFundBondRepository.java │   │   │   ├── PortfolioFundId.java │   │   │   ├── PortfolioFundRepository.java │   │   │   ├── PortfolioFundStock.java │   │   │   ├── PortfolioFundStockId.java │   │   │   ├── PortfolioFundStockRepository.java │   │   │   ├── PortfolioRepository.java │   │   │   ├── UserPortfolio.java │   │   │   ├── UserPortfolioRepository.java │   │   │   ├── UserPortfolios.java │   │   │   ├── UserPortfoliosFundProducts.java │   │   │   ├── UserPortfoliosFundProductsRepository.java │   │   │   └── UserPortfoliosRepository.java │   │   ├── redis │   │   │   └── RebalancingData.java │   │   └── service │   │   ├── DataService.java │   │   └── PortfolioService.java │   └── resources │   ├── application-db.properties │   ├── application.properties │   └── env.properties └── test └── java └── com └── pda └── portfolio_service └── PortfolioServiceApplicationTests.java ```

4. user-service

사용자 관련 기능을 제공하는 서비스로, 로그인 및 회원가입, 테스트, 알림 등 다양한 사용자 관련 기능을 포함합니다.

구조도
``` user_service ├── build.gradle ├── gradle │   └── wrapper │   ├── gradle-wrapper.jar │   └── gradle-wrapper.properties ├── gradlew ├── gradlew.bat └── src ├── main │   ├── java │   │   └── com │   │   └── pda │   │   ├── UserServiceApplication.java │   │   ├── investment_test │   │   │   ├── controller │   │   │   │   └── InvestmentTestController.java │   │   │   ├── dto │   │   │   │   ├── QuestionDto.java │   │   │   │   └── ResultDto.java │   │   │   ├── jpa │   │   │   │   ├── InvestmentType.java │   │   │   │   ├── answer │   │   │   │   │   ├── Answer.java │   │   │   │   │   └── AnswerRepository.java │   │   │   │   ├── question │   │   │   │   │   ├── Question.java │   │   │   │   │   └── QuestionRepository.java │   │   │   │   └── user_answer │   │   │   │   ├── UserAnswer.java │   │   │   │   └── UserAnswerRepository.java │   │   │   └── service │   │   │   └── InvestmentTestService.java │   │   ├── notification │   │   │   ├── controller │   │   │   │   └── NotificationController.java │   │   │   ├── dto │   │   │   ├── jpa │   │   │   │   ├── Notification.java │   │   │   │   └── NotificationRepository.java │   │   │   └── service │   │   │   └── NotificationService.java │   │   ├── retirements │   │   │   ├── controller │   │   │   │   └── RetirementController.java │   │   │   ├── dto │   │   │   │   ├── RetirementTestRequestDto.java │   │   │   │   └── RetirementTestResponseDto.java │   │   │   ├── jpa │   │   │   │   ├── Gender.java │   │   │   │   ├── RetirementTestResult.java │   │   │   │   ├── RetirementTestResultRepository.java │   │   │   │   └── RetirementType.java │   │   │   └── service │   │   │   └── RetirementService.java │   │   └── user_service │   │   ├── controller │   │   │   ├── UserController.java │   │   │   └── UserOpenFeignController.java │   │   ├── dto │   │   │   ├── KaKaoTokenDto.java │   │   │   ├── KakaoUserDto.java │   │   │   ├── LoginDto.java │   │   │   ├── LoginResponseDto.java │   │   │   ├── SignupUserDto.java │   │   │   ├── UserAgeTestScoreDto.java │   │   │   ├── UserInfoDto.java │   │   │   └── UserUpdateRequestDto.java │   │   ├── jpa │   │   │   ├── User.java │   │   │   └── UserRepository.java │   │   └── service │   │   ├── UserMessageService.java │   │   └── UserService.java │   └── resources │   ├── application-db.properties │   ├── application-mq.properties │   ├── application.properties │   └── env.properties └── test └── java └── com └── pda └── user_service └── UserServiceApplicationTests.java ```

5. utils

공통적으로 사용될 수 있는 유틸리티 함수들과 예외 처리, 보안, 메시징 등의 기능을 제공합니다.

구조도
``` utils ├── build.gradle ├── gradle │   └── wrapper │   ├── gradle-wrapper.jar │   └── gradle-wrapper.properties ├── gradlew ├── gradlew.bat └── src ├── main │   ├── java │   │   └── com │   │   └── pda │   │   └── utils │   │   ├── UtilsApplication.java │   │   ├── api_utils │   │   │   ├── ApiUtils.java │   │   │   ├── CustomNumberUtils.java │   │   │   ├── CustomStringUtils.java │   │   │   └── StringListConverter.java │   │   ├── exception │   │   │   ├── DuplicatedEmailException.java │   │   │   ├── GlobalExceptionHandler.java │   │   │   ├── InvalidParameterException.java │   │   │   ├── investment_tests │   │   │   │   ├── AnswerNotFoundException.java │   │   │   │   ├── QuestionNotFoundException.java │   │   │   │   └── UserAnswerNotFoundException.java │   │   │   ├── login │   │   │   │   ├── NotCorrectPasswordException.java │   │   │   │   └── NotFoundUserException.java │   │   │   └── sms │   │   │   └── SmsCertificationException.java │   │   ├── rabbitmq │   │   │   ├── config │   │   │   │   └── RabbitMQConfig.java │   │   │   ├── dto │   │   │   │   └── NotificationDto.java │   │   │   └── service │   │   │   └── MessageService.java │   │   └── security │   │   ├── JwtAuthenticationFilter.java │   │   ├── JwtTokenProvider.java │   │   ├── WebSecurityConfig.java │   │   ├── dto │   │   │   └── UserDetailsDto.java │   │   ├── openfeign │   │   │   └── AuthClient.java │   │   └── service │   │   └── CustomUserDetailsService.java │   └── resources │   ├── application-mq.properties │   ├── application.properties │   └── env.properties └── test └── java └── com └── pda └── utils ├── UtilsApplicationTests.java └── api_utils ├── CustomNumberUtilsTest.java └── CustomStringUtilsTest.java ```

ERD