Skip to content

Used Technology

joyfulviper edited this page May 25, 2023 · 3 revisions

적용기술

🚀 JAVA, Spring boot, MySQL, Spring data JPA, Gradle, AWS EC2, AWS RDS

  • Java 버전 17 사용
  • Spring boot 버전 3.0.0 버전 사용
  • 그 외 특이사항 없음

🚀 Jenkins

  • Develop branch에 Push 발생시 자동 Test / Build / Deploy진행

🚀 TestContainer

  • 실제 db를 사용하는 환경과 같은 환경의 Container를 띄워 테스트 진행

🚀 Docker, Vault

  • Docker를 이용해 ElasticSearch 클러스터 생성 및 Vault 서버 실행

🚀 ElasticSearch & Kibana

  • 단일 클러스터로 적용
  • 조회시 ElasticSearchRepository를 이용해 조회
  • Kibana를 이용해 통계 자료 시각화(가장 많이 팔린 상품, 매출 통계, 가장 구매를 많이 한 사용자)

🚀 Nginx

  • Nginx의 리버스 프록시 기능을 이용해 무중단 배포
  • 기존의 Nginx서버가 8080포트를 가리키고 있는 상황인 경우 새로운 버전의 프로젝트를 8081 포트에 배포한 후 Nginx가 8081포트를 가리키도록 설정

🚀 Spring WebFlux

  • WebClient를 이용해 비동기적으로 네트워크 요청
  • 리액티브 스트림을 이용해 유연한 코드 작성 및 오류처리

🚀 Spring Batch

  • 구독한 사용자에 한하여 매달 28일 00시 구독 결제 Spring batch를 이용해 일괄처리
  • 구독 취소 사용자 또한 매달 28일 00시 구독 취소 처리 진행
  • Step을 구독 취소 -> 구독 결제의 순서로 구현했기 때문에 구독 취소한 사용자가 다시 구독처리 될 상황은 없음
  • 배치과정을 비동기로 처리해서 성능향상
  • 비동기 처리시 데이터를 읽어올 때 멀티 스레드에 안전한 JpaItemReader를 이용해 동시성 문제 제어

🚀 Apache Kafka

  • MySQL과 Elasticsearch 저장소의 데이터 일관성을 위해 두 저장소 사이 Kafka로 중계
  • 메시지 큐 오류 시 다른 토픽에 전송하도록 예외 처리
  • AOP를 이용해 RDBMS 저장 메소드 종료시 Kafka에 전송하도록 구현

Clone this wiki locally