<aside>
💡
중간 발표 내용 총 정리?
*MVP
<메뉴 추천 프로젝트>
프로젝트 목표 : 점심과 저녁 메뉴 고민을 해결하기 위한 개인 맞춤형 AI 메뉴 추천 애플리케이션 개발
목표 사용자
- 메뉴 결정에 어려움을 겪는 일반 사용자
- 메뉴 추천을 받은 후 주변 맛집을 바로 찾고자 하는 사용자
주요 기능
- 맞춤형 데이터 분석 : 사용자 취향 데이터를 바탕으로 GPT-3.5 Turbo 모델을 통해 개인화된 메뉴 추천
- 인터페이스 : 카카오맵 API를 이용한 키워드 검색으로 간편한 맛집 정보 제공
- 소셜 기능 : 오픈 채팅을 통한 사용자 간 소통과 추천 메뉴 공유
MVP 구현 방향 및 특징
- 핵심 기능에 집중 : AI 메뉴 추천, 지도 기반 검색, 실시간 채팅
- 외부 API 활용
- GPT-3.5 Turbo : 완성형 AI 모델로 정밀한 메뉴 추천
- 카카오맵 API : 맛집 검색 및 시각화
- 특징
- 실용성 : 사용자 요구를 충족하는 실질적 기능 제공
- 확장성 : 사업자 인증, 예약 시스템 및 알림, 고도화된 AI 기능
- 단순성 : 사용자 취향 기반 추천 및 간단한 지도 검색
</aside>
<aside>
💡 *기술적 의사결정 발표 내용정리 완료
기술 스택 선정 : 서비스 구현의 안정성과 확장성을 고려하여 선택하였습니다.
(선택한 버전에 맞는 기술 내용 정리)
- Spring Framework(v.3.3.1) + Java(v.21)
- Spring Framework (v.3.3.1)
- 최신 안정 릴리스 : 최신 안정 버전으로 성능 최적화와 보안 강화가 이루어진 버전이다.
- Spring AI 지원 : Spring AI와의 완벽한 통합을 지원하는 버전으로, AI 기반 서비스 개발에 적합 3.2.X와 3.3.X에서 지원
- 유연성과 확장성 : IoC/DI(의존성 주입)를 통해 객체 생성 및 관리를 프레임워크가 담당, 코드 결합도를 낮추고 유지보수성을 강화
- 모듈화 호환: Spring Security, Spring Data 등 다양한 모듈과 완벽한 호환성 제공, 프로젝트 요구사항에 맞는 설계 가능
- 엔터프라이즈 표준 : 대규모 애플리케이션 개발에서 검증된 기술로, 안정성과 신뢰성을 보장
- Java (v.21)
- 최신 장기 지원(LTS) 버전 : 장기 지원(Long-Term Support) 릴리스로, 보안 패치와 장기적 안정성이 보장
- Spring Framework와 호환성 : Spring Framework가 요구하는 Java의 기능을 완벽히 지원
- 성능 최적화 : 최신 JVM 최적화와 Garbage Collection 개선으로 대규모 트래픽 처리와 고성능 애플리케이션에 적합
- 최신 기능 활용 가능 : 개발 생산성을 높이는 레코드(Records) 등 최신 기능 포함
- 미래 지향적 : 지속적인 업데이트와 개선이 보장되어 있음
- 간단 설명
- Spring Framework 3.3.1과 Java 21의 조합은 최신 기술 스택으로 성능과 안정성 그리고 확장성을 동시에 확보한다. 특히 AI 서비스 개발, 보안강화, 유지보수성 향상 등 다양한 프로젝트 요구사항에 최적화된 선택을 하였다.
- Spring Security(v.6.4.2) + JWT
- Spring Security (v.6.4.2)
- 강력한 인증/인가 처리 : 필터 기반 보안 구조로 요청마다 인증 및 권한 검증
- 확장성과 커스터마이징 : 프로젝트 요구에 맞는 보안 정책 적용 가능
- 최신 기능 지원 : OAuth2 인증, JWT 통합 등 현대적 보안 요구 사항 충족
- JWT (Json Web Token)
- 무상태 인증 : 서버에서 사용자 상태를 저장하지 않아 확장성(Scale-Out)에 유리
- 구성요소
- Header : 토큰의 타입 및 알고리즘 정보
- Payload : 사용자 정보(ID, 권한), 만료시간
- Signature : 위변조 방지 서명
- 인증 정보를 포함하여 서버-클라이언트 간 빠르고 효율적인 통신
- 발급된 토큰으로 인증 상태를 유지, 서버 부하 감소
- API 보안 강화
- HTTPS 적용 : 데이터 전송 중 도청 및 변조 방지
- CORS 정책 : 허용된 도메인에서만 안전하게 요청 허용
- Custom Exception Handling: 인증 및 권한 오류를 중앙에서 관리
- 간단 설명
- Spring Security와 JWT을 통합하여 사용할 경우 Spring Security가 요청을 필터링 및 검증하고, JWT로 인증 정보를 캡슐화하여 클라이언트와 서버 간의 통신을 하여 최신 보안 요구 사항을 충족하며, 무상태 인증과 확장성을 동시에 확보할 수 있다. 또한 Redis의 결합으로 토큰 관리(블랙리스트) 최적화와 보안 강화를 실현하며, HTTPS와 CORS를 적용해 안전한 API 통신을 보장할 수 있어 선택하게 되었다.
- 추가설명
- 무상태 설계(확장성)
- JWT로 인증 상태를 관리하며, 서버의 세션 저장 부담을 제거하여 수평 확장(Scale-Out)에 유리
- Redis (v.7.2.7)
- 최신 안정 릴리스 : 향상된 Pub/Sub 기능 지원으로 메시지 동기화 및 다중 서버 지원
- 빠른 데이터 처리와 다양한 데이터 구조 지원 : 인메모리 데이터베이스로, 빠른 데이터 읽기/쓰기 성능을 제공하여 캐싱 및 데이터 구조 최적화로 실시간 처리 성능 강화
- TTL(Time-To-Live) : 자동 만료로 효율적인 캐싱 및 토큰 관리 가능
- 간단 설명
- 빠른 데이터 처리와 캐싱 지원, 실시간 메시지 동기화가 필요한 프로젝트의 요구사항을 충족하는 동시에 최신 안정 버전의 강점을 활용해 보안과 성능을 모두 강화할 수 있어서 인증 및 실시간 서비스의 핵심 기술로 활용하기 위해 선택하게 되었다.
- MySQL (v.8) + H2 (테스트 환경)
- MySQL (v.8)
- 안정성과 성능 : 대규모 트래픽 처리에 적합한 관계형 데이터베이스
- JSON 타입 지원 : 비정형 데이터를 효율적으로 처리 가능
- ERD 설계 기반 : 데이터 무결성 및 구조적 설계 보장
- H2 (테스트 환경)
- 경량 인메모리 데이터베이스 : 빠르고 독립적인 테스트 환경 제공
- MySQL과 호환성 : 동일 쿼리 구조로 개발-테스트 환경의 일관성 유지
- 속도 최적화 : 테스트 실행 시간을 단축하며 개발 생산성 강화
- 간단 설명
- MySQL과 H2 조합은 운영 환경의 안정성과 테스트 효율성을 동시에 만족시키며, 실제 데이터베이스와 일관된 테스트 환경을 보장하기 때문에 선택하게 되었다.
- JPA & Hibernate
- 생산성 향상 : 객체와 관계형 데이터베이스 간의 매핑을 자동화하여 개발자가 SQL 작성에 집중하지 않고 비즈니스 로직에 집중 가능
- 유지보수 용이 : 데이터베이스 변경이 발생해도 엔티티 매핑만 수정하면 코드 변경 최소화
- 표준 기술 : JPA는 자바 표준 기술로, Hibernate는 JPA의 구현체로 안정성과 성능이 입증됨
- 확장성 : 다양한 데이터베이스를 지원하며, 프로젝트 확장에 유리
- 데이터 로딩 전략 : Lazy Loading을 사용해 필요한 시점에 데이터를 조회하여 불필요한 데이터 로딩을 방지
- 캐싱 전략
- 관계 매핑 :
@ManyToOne
@OneToOne
@OneToMany
를 활용하여 엔티티 간 관계를 효율적으로 매핑하고 Cascade 옵션으로 엔티티를 영속화
- 간단 설명
- WebSocket + STOMP + SockJS
- AWS S3
- 외부 API
- 프로젝트 구조 설계 및 Git Flow
- 아키텍쳐 : 클린 아키텍쳐 + 레이어드 아키텍쳐
- Git Flow
- 배포
</aside>
<aside>
💡
</aside>
<aside>
💡
</aside>
<aside>
💡
</aside>
<aside>
💡
</aside>
발표 대본