Skip to content

TryItOn-TIO/TryItOn-server-spring

Repository files navigation

TryItOn Spring Server

📖 프로젝트 소개: 스마트한 가상 피팅을 위한 백엔드

TryItOn 서비스의 핵심 비즈니스 로직을 처리하는 백엔드 API 서버입니다. 사용자의 가상 피팅 요청을 처리하고, 방대한 상품 데이터를 관리하며, 개인화된 추천을 제공하는 등 서비스의 두뇌 역할을 담당합니다. 안정적이고 확장 가능한 아키텍처를 통해 사용자에게 끊김 없는 쇼핑 경험을 제공하는 것을 목표로 합니다.


✨ 핵심 기능 및 아키텍처

  • 사용자 맞춤형 서비스: JWT 기반 인증 및 Google 소셜 로그인을 통한 안전하고 편리한 사용자 관리.
  • 상품 및 재고 관리: 대규모 상품 데이터의 효율적인 처리 및 실시간 재고 관리.
  • 주문 및 결제 시스템: Toss Payments와 연동된 안정적인 결제 및 주문 관리.
  • AI 추천 시스템 연동: 외부 추천 배치 서버와 연동하여 개인화된 상품 추천 API 제공.
  • 클라우드 네이티브 아키텍처: AWS 서비스를 적극 활용한 CI/CD 및 인프라 구성.

🛠️ 기술 스택 상세

  • Core Framework: Spring Boot (v3.5), Java 17, Gradle
    • Java 17의 LTS(장기 지원) 버전과 최신 Spring Boot를 사용하여 안정성과 최신 기능(가상 스레드 등)을 모두 확보했습니다. 의존성 관리는 Gradle을 통해 체계적으로 이루어집니다.
  • 데이터베이스 및 영속성: JPA (Hibernate), MySQL, H2
    • JPA와 Hibernate를 통해 객체-관계 매핑(ORM)을 구현하여 생산성을 높이고, MySQL을 프로덕션 데이터베이스로 사용합니다. CI/CD 파이프라인 및 로컬 테스트 환경에서는 인메모리 DB인 H2를 사용하여 테스트의 격리성과 속도를 보장합니다.
  • 보안: Spring Security, JWT (jjwt 라이브러리)
    • Spring Security를 통해 인증/인가 아키텍처의 기반을 마련하고, HTTP 요청 필터링을 통해 보안을 강화했습니다. 인증된 사용자는 상태 비저장(Stateless) 방식인 JWT를 발급받아 API 요청 시 자신을 증명하며, 이는 서버의 확장성을 용이하게 합니다.
  • 클라우드 통합: Spring Cloud AWS (v3.1)
    • Secrets Manager: 데이터베이스 접속 정보, JWT 비밀키 등 민감한 설정 정보를 코드나 설정 파일에서 분리하여 AWS Secrets Manager에 안전하게 저장하고, 애플리케이션 실행 시 동적으로 주입받아 보안을 강화했습니다.
    • S3 (Simple Storage Service): 상품 이미지와 같은 대용량 정적 파일을 AWS S3에 저장하고, 필요 시 Pre-signed URL을 생성하여 클라이언트가 안전하게 파일에 접근하도록 구현했습니다. 이를 통해 애플리케이션 서버의 부하를 크게 줄였습니다.
  • API 문서화: SpringDoc (OpenAPI v3)
    • 컨트롤러에 작성된 코드를 기반으로 API 명세를 자동으로 생성하고, Swagger UI를 통해 프론트엔드 개발자 및 API 사용자가 API를 쉽게 테스트하고 이해할 수 있도록 돕습니다.

🚀 성능 최적화 전략

  • 캐싱을 통한 응답 속도 향상:
    • Redis를 캐시 저장소로 활용합니다. 자주 조회되지만 변경 빈도가 낮은 데이터(예: 상품 카테고리, 메인 페이지 상품 목록)를 Redis에 캐싱하여, 반복적인 DB 조회를 피하고 API 응답 속도를 밀리초 단위로 단축시켰습니다. Spring의 @Cacheable 어노테이션을 활용해 코드 변경을 최소화하며 캐싱 로직을 적용했습니다.
  • 데이터베이스 성능 최적화:
    • JPA N+1 문제 해결: Fetch Join@EntityGraph를 사용하여 연관 관계가 있는 엔티티를 조회할 때, 불필요한 추가 쿼리가 발생하는 N+1 문제를 해결했습니다. 이를 통해 단일 요청에 대한 DB 쿼리 횟수를 최소화했습니다.
    • 인덱싱(Indexing): 데이터 조회(SELECT)가 빈번하게 일어나는 컬럼(예: product_name, user_email)에 인덱스를 적용하여 데이터베이스 검색 속도를 최적화했습니다.
  • 비동기 처리 및 리액티브 프로그래밍:
    • Spring WebFlux를 일부 도입하여 외부 API 호출과 같이 대기 시간이 긴 I/O 작업을 논블로킹(Non-blocking) 방식으로 처리합니다. 이를 통해 적은 수의 스레드로도 높은 동시 처리량을 확보할 수 있습니다.
  • 커넥션 풀 관리:
    • HikariCP (Spring Boot 기본 DBCP)의 커넥션 풀 설정을 서버 사양과 예상 트래픽에 맞게 튜닝하여, 데이터베이스 연결 시 발생하는 오버헤드를 최소화하고 안정적인 DB 연결을 유지합니다.
  • CI/CD 파이프라인 최적화:
    • Gradle의 빌드 캐시를 활성화하고, 테스트 시에는 @Tag를 이용해 무거운 통합 테스트를 제외한 유닛 테스트만 실행하는 등 CI/CD 과정 자체의 속도를 개선하여 개발 및 배포 사이클을 단축시켰습니다.

About

[TryItOn] 서버(백엔드) 스프링 부트 레포지토리입니다.

Resources

Stars

Watchers

Forks

Releases

No releases published

Packages

No packages published

Contributors 5