기술 선정 및 검토 - 100-hours-a-week/16-Hot6-wiki GitHub Wiki

기술 스택 선정 및 검토 - AI 기반 데스크 셋업 추천 서비스

이 문서는 "AI 기반 데스크 셋업 추천 서비스" 프로젝트에서 사용된 기술 스택과 그 선정 이유를 상세하게 설명합니다. 각 기술은 프로젝트의 요구사항, 확장성, 보안성, 성능, 운영 용이성을 고려하여 선택되었습니다.

1. 프로젝트 개요

  • 서비스 명: AI 기반 데스크 셋업 추천 서비스
  • 주요 기능
    • 사용자가 업로드한 데스크 이미지를 기반으로 AI가 최적의 데스크 환경을 추천
    • 추천된 셋업과 관련된 상품 정보 제공 (최저가 상품 자동 연동)
    • 유저 커뮤니티 내 공유 및 피드백 기능
    • 실시간 개인화 추천 기능
  • 핵심 요구사항
    • OAuth 기반 로그인 및 사용자 인증
    • 사용자별 데이터 저장 및 관리
    • 빠른 응답속도를 위한 캐싱 전략 필요
    • 보안이 강화된 토큰 기반 인증 체계
    • 유연하고 유지보수 쉬운 API 설계
    • 안정되고 정규화된 ERD 설계

2. 기술 스택 선정

2-1. Java 21 (LTS)

활용 범위: 사용자 인증, 추천 API, 상품 연동, 커뮤니티 기능 등 전체 백엔드 설계

  • 선정 이유
    • Java 21은 2023년 9월에 출시된 최신 LTS(Long Term Support) 버전으로, 장기적인 안정성과 보안 패치 지원이 제공됩니다.
    • 주요 기능 개선
      • Virtual Threads (가상 스레드): 고성능 비동기 서버를 더 단순하게 구현 가능하며, 동시성 처리에 매우 유리
      • Record Patterns / Pattern Matching: 더 간결한 코드 작성과 유지보수가 쉬운 조건 분기 구현 가능
      • String Templates (미리보기 기능): 복잡한 문자열 결합을 보다 명확하게 처리 가능
      • Scoped Values: ThreadLocal을 대체할 수 있는 가볍고 안전한 상태 전달 기능 제공
    • 최신 JVM 최적화 기술을 바탕으로 더 빠른 실행 속도와 낮은 메모리 사용
    • 빠른 개발과 배포가 가능한 스타터 프레임워크로, 개발자 생산성을 극대화함
    • 설정이 간편하며, RESTful API 기반 서비스 구조를 빠르게 구축할 수 있음
    • 의존성 관리가 용이하고, 다양한 Spring 프로젝트(Spring Security, Spring Data 등)와의 통합성이 뛰어남
    • CI/CD 환경 구축과 운영에 최적화되어 있어 서비스의 확장과 유지보수에 유리함

2-2. Spring Boot (v3.2)

활용 범위: 사용자 인증, 추천 API, 상품 연동, 커뮤니티 기능 등 전체 백엔드 설계

  • 선정 이유
    • Spring Boot 3.2는 Java 21과 완전한 호환성을 제공하며, 최신 기능들을 손쉽게 활용할 수 있음
    • Virtual Threads와 같은 Java 21 기능을 활용한 고성능 비동기 서버 구현이 가능
    • Spring Framework 6 기반으로 Jakarta EE 10을 지원하며, 향후 기술 스택 확장에 유리함
    • RESTful API 설계, JPA 연동, Spring Security 기반 인증 등 백엔드 설계에 필요한 구성 요소를 모두 포함
    • GraalVM Native Image 지원으로, 서버리스나 경량화 배포 환경에서도 활용 가능

2-3. MySQL (v8.0)

활용 범위: 사용자 정보, 셋업 데이터, 커뮤니티 게시글 및 댓글 저장

  • 선정 이유
    • 본 프로젝트는 사용자, 데스크 셋업, 상품, 커뮤니티 게시글 등 정형화된 관계형 데이터 중심의 구조를 가지며, 이에 따라 관계형 DBMS 중 가장 대중적이고 안정적인 MySQL 8.0을 선정했습니다.
    • Spring Boot + JPA와의 연동이 원활하며, 개발 속도를 높이고 유지보수를 용이하게 합니다.
    • JSON 컬럼, 윈도우 함수, CTE(Common Table Expression) 등의 최신 SQL 기능을 지원해 추천 기록, 사용자 반응 기록 등의 비정형 데이터 처리에도 유리합니다.
    • UTF-8MB4 인코딩 기본 지원으로 다양한 언어, 이모지 기반 사용자 콘텐츠 저장에도 강점을 가집니다.
    • 커뮤니티 규모가 크고 운영 도구가 풍부해, 장기적으로 안정적인 운영이 가능합니다.
    • MySQL 8.0은 현재 가장 널리 사용되는 안정적인 버전으로, 최신 SQL 기능과 JSON, 윈도우 함수, CTE(Common Table Expressions) 등 고급 기능을 폭넓게 지원
    • 인덱스 기능 개선: 히스토그램 통계를 통한 쿼리 최적화와 가변형 인덱스를 지원
    • 보안 강화: 기본적인 암호화, 인증 플러그인 강화, 기본적인 NoSQL 기능 내장
    • UTF-8MB4를 기본 인코딩으로 채택하여 다양한 언어와 이모지 처리에 탁월함
    • MySQL Shell과 같은 관리 도구를 통해 운영 편의성도 향상됨

2-4. JPA (Java Persistence API)

활용 범위: Entity 기반 도메인 모델 설계, 데이터 저장/조회/갱신, 서비스 계층에서 비즈니스 로직 처리

  • 선정 이유
    • 객체지향적인 방식으로 데이터베이스를 다룰 수 있어 비즈니스 로직에 집중 가능
    • MySQL과의 연동을 통해 도메인 모델과 테이블 간의 일관성을 유지하고 유지보수를 용이하게 함
    • 복잡한 쿼리를 메서드 기반으로 작성할 수 있으며, QueryDSL 등과 결합 시 동적 쿼리도 손쉽게 처리 가능
    • 트랜잭션, 영속성 컨텍스트 관리, 지연 로딩 및 즉시 로딩 등 다양한 기능 제공으로 개발 생산성 향상

2-5. Redis

활용 범위: 인증 세션 캐싱, 추천 결과 캐싱, 알림 큐 기반 구성 가능

  • 선정 이유
    • 메모리 기반 Key-Value 저장소로 응답 속도가 매우 빠르며, 고속 데이터 처리에 적합함
    • JWT 인증 시스템에서 refresh_token 저장 및 블랙리스트 관리에 적합함
      • 일반적으로 JWT는 서버가 상태를 가지지 않는 무상태(stateless) 구조로, 토큰 자체에 대한 무효화 처리가 어렵습니다.
      • Redis를 활용하면 로그아웃 시 토큰을 블랙리스트에 저장하거나 삭제하여 즉시 무효화할 수 있어 보안성이 높아집니다.
      • 사용자의 다중 로그인 제어, 로그아웃 처리, 탈취 대응 등 다양한 인증 전략을 유연하게 구성할 수 있습니다.
    • TTL(Time To Live)을 통해 토큰 만료를 서버 측에서 능동적으로 관리 가능
    • 사용자의 행동 기록이나 AI 추천 결과를 캐싱하여 서버 부하를 줄이고 사용자 경험 개선 가능
    • 추후 실시간 알림 기능이나 랭킹 시스템 등 확장 기능에 활용 가능성 높음

2-6. OAuth 2.0 (Kakao OAuth)

활용 범위: 카카오 계정을 통한 로그인 및 프로필 정보 수집

  • 선정 이유
    • 소셜 로그인 도입으로 사용자 진입 장벽을 낮추고 사용자 수를 빠르게 확보 가능
    • 자체 로그인 시스템 구축보다 보안 리스크가 낮고 사용자 정보 연동이 간편함
    • 카카오 플랫폼 사용자 기반이 크며, 해당 API를 통해 기본 정보 외에도 친구, 프로필 등 다양한 정보 획득 가능

2-7. JWT (JSON Web Token)

활용 범위: 사용자 인증, 권한 검증, 토큰 갱신 로직 처리

  • 선정 이유
    • Stateless 인증 구조를 지원하여 서버의 상태 저장 부담을 줄임
    • access_token과 refresh_token 전략을 통해 만료와 재발급 로직을 분리할 수 있어 보안과 유연성 동시 확보
    • 토큰에 정보를 포함하고 있어 인증 시 DB 조회 없이도 사용자 식별 가능
    • Redis와 결합 시 강력한 토큰 무효화/관리 전략을 구성 가능

2-8. Spring Security

활용 범위: API 접근 제어, 인증 필터링, 사용자 권한 관리

  • 선정 이유
    • Spring 생태계 내에서 인증 및 인가에 최적화된 보안 프레임워크
    • 필터 기반 인증 흐름 제어 가능, JWT 및 OAuth와의 통합이 유연함
    • CSRF, CORS, 세션 관리, 권한 제어 등 필수 보안 요소를 기본 제공
    • 실 서비스 수준의 역할 기반 접근 제어(Role-based Access Control) 설정이 용이함

3. 기술 흐름 구조도 (간단 텍스트 흐름)

[사용자] → [Kakao OAuth 로그인 요청]
       → [OAuth access_token 수신]
       → [서버에 전달 → 사용자 인증 → JWT 발급(access + refresh)]
       → [Redis에 refresh_token 저장]
       → [Spring Security 기반 API 인증 처리]

4. 결론 및 기대 효과

  • Spring Boot, MySQL, Redis, OAuth, JWT, Spring Security를 조합한 기술 스택은 보안, 성능, 확장성, 운영 편의성에서 뛰어난 조합입니다.
  • 특히 AI 기반 추천 결과는 Redis 캐싱을 통해 실시간으로 처리되며, 인증은 OAuth + JWT를 통해 안전하게 보호됩니다.
  • 데이터 정합성과 유지 보수를 고려한 구조로 향후 기능 확장도 유연하게 진행 가능합니다.