기술 선정 및 검토 - 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를 통해 안전하게 보호됩니다.
- 데이터 정합성과 유지 보수를 고려한 구조로 향후 기능 확장도 유연하게 진행 가능합니다.