Skip to content

youhyeoneee/hitit-BE

 
 

Repository files navigation

Hit-it! Back-end

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

사용 기술

  • Spring boot, Spring Security, Spring Data JPA 3.3.0
  • Java 17.0
  • MySql 8.0
  • RabbitMQ 3.13.3
  • Redis
  • AWS EC2 t3.large
  • AWS RDS

패키지 구조

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

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

제가 주로 담당하여 개발한 부분은 user-service, utils 입니다.

  • 소셜 로그인 및 인증 기능 개발
  • 회원 가입 및 로그인 기능 개발
  • 투자 성형 및 노후 종합 진단 API 개발
  • 리밸런싱 시 알림 기능 개발

user-service

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

  • investment_test : 투자 성향 테스트 클래스들이 포함되어있습니다.
  • notification : 사용자에게 보낼 알림 기능 클래스들이 포함되어있습니다.
  • retirements : 노후 준비 종합 진단 테스트 클래스들이 포함되어있습니다.
  • 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


utils

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

  • api_utils : 공통 리스폰스, 문자열 변환 등의 API 호출에 사용되는 유틸리티 클래스들이 포함되어 있습니다.
  • exception : 예외 처리 관련 클래스들이 포함되어 있습니다.
  • rabbitmq: RabbitMQ 메시징을 위한 설정 및 서비스 클래스들이 포함되어 있습니다.
  • security : JWT 인증 및 Security 설정 클래스가 포함되어 있습니다.
구조도
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

  • 서비스
  • 마이데이터

아키텍처

회고

😊 잘했던 점

  • commit, pull & request, issue 컨벤션을 정의하여 원활한 협업이 가능하게 하였습니다.
  • 멀티모듈 아키텍처 구조를 처음 진행해 보았는데, 설계에 대해 팀원들과 많은 대화와 고민을 하였습니다.
  • 단위 테스트 코드를 작성하여 개발한 알고리즘을 검증하였습니다.
  • 서비스 간 통신 시 직접 호출과 메세지 큐를 상황에 맞게 적절히 구분해 사용하였습니다.

🧐 아쉬웠던 점

  • RDS 사용 비용이 예상보다 많이 발생하였습니다.
    → 필요한 데이터의 총 Rows와 I/O 빈도, 주어진 예산과 필요한 데이터 중 우선순위를 고려하여 RDS 인스턴스를 결정했어야 했습니다.
  • 시간 부족으로 CI/CD를 프로젝트에 도입하지 못했으나 빌드 후 배포 시 서버를 자주 껐다 켰다 하는 과정에서 시간이 많이 소요되었습니다.
    → CI/CD를 통해 빌드를 자동화하는 이유를 깨닫고, 초기에 설정하는 것이 효율적임을 배웠습니다.

About

2024 퇴직연금운용 노후 대비 자산관리 서비스 Hit it!

Resources

Stars

Watchers

Forks

Releases

No releases published

Packages

No packages published

Languages

  • Java 100.0%