Skip to content

codemonnn/sulrail-mirror

Repository files navigation

기차에 설렘을 더하다, 설레일

프로젝트 소개

설레일을 통해 AI와 함께 여행 계획을 세우고, 타인과 동행하며 더욱 즐겁고 편리한 기차 여행을 즐겨보세요!

  1. 🔒 회원가입 및 로그인
  • 전화번호로 본인인증 후 설레일에 가입해요
  1. ⚒️ AI와 여행 계획
  • AI에게 모든 여행 계획을 맡길 수 있어요
  • 여행할 지역과 원하는 테마를 선택하면, AI가 그동안 남긴 리뷰를 확인해 가장 좋아할 계획을 세워줘요
  • 내가 세운 계획을 기반으로도 좋아할 만한 방문지를 추천 받을 수 있어요
  1. 🗺️ 여행 계획 세우기
  • 방문지나 기차 노선을 조회하고, 현재 일정을 기반으로 쉽게 확인하고 편집할 수 있어요
  • 나만의 특별한 일정은 직접 만들어서 추가해요
  1. 🚝 내일로의 낭만, 사람들과 함께 해요
  • 내 여행 계획을 공개해 함께할 사람을 구할 수 있어요
  • 안전을 위해 성별과 나이를 제한할 수 있어요
  • 원하는 만큼만 공개해 사람을 구할 수 있어요
  • 혼자 가기 어려웠던 식당과 사진을 남기고 싶은 포토스팟에 함께 할 동행을 구해보세요
  1. 💬 실시간 채팅
  • 서비스 내 일대일 채팅과 단체 채팅으로 개인정보 노출의 위험 없이 편하게 대화해요
  • 동행을 신청한 사람에게 궁금한 점을 물어 보고, 함께 여행을 가는 사람들과 함께 의견을 공유하세요
  1. 🧾 함께한 경험을 나눠요
  • 여행을 다녀오면 방문했던 곳들과 함께 했던 사람들에게 리뷰를 남길 수 있어요
  • 방문지에 솔직한 리뷰를 남기면, AI가 다음에 더 똑똑하게 추천해요
  • 동행인에게 리뷰를 남기면 동행인의 신뢰 점수인 설레일 시속에 반영돼요
  • 좋았던 동행인을 추천하고, 불편했던 동행인을 알려주세요
  1. 💌 알림
  • 내일로 패스가 공개되는 날과 여행을 떠나기 전에 알림을 보내드려요
  • 채팅방에 메시지가 오면 실시간으로 채팅을 보내드려요
  • 맘편히 여행만 다녀올 수 있개 섬세하게 챙겨드릴게요

팀원 구성

박상훈 서현호 이종현
Mobile Mobile Mobile
공연경 백대환 정현정
Backend Backend Backend

기술 스택

  • Java 21
  • SpringBoot 3.5.3
  • MySQL 9.4.0
  • Redis 8.0.3
  • QDrant 1.15.1
  • Docker 27.5.1
  • Nginx 1.28.0

프로젝트 중점 사항

전문 검색을 통한 대용량 데이터 조회 최적화

기존 인덱스 활용 한계

  • 190만행이 넘는 Place 테이블에 대해 중분류, 대분류 테이블과 조인해 검색
  • 검색 조건이 세 테이블의 필드를 대상으로 하고 있어 기존 RDBMS의 인덱싱을 통한 정렬 생략 효과를 얻기 어려움
  • 키워드 검색으로 인해 문자열에 대한 인덱스 처리 불가

해결

  • MySQL의 Full Text Index를 활용해 키워드 검색 구현
  • 데이터 특성 상 수정이 자주 일어나지 않고, 검색 조건이 항상 바뀌는 것을 고려해 조회용 반정규화 테이블 생성

결과

  • 기존 API 대비 10s -> 0.9s로 개선
  • 추후 메뉴 데이터, 리뷰 데이터에 대한 확장성 증가
WebSocket과 FCM을 활용한 실시칸 채팅 구축

채팅 서비스 설계

  • 서비스에 로그인 시 소켓 연결 후 서비스 종료까지 유지
  • 채팅방에 진입 시 구독 및 퇴장 시 구독 해제. 채팅방에서 대화를 나눌 때만 STOMP 기반 실시간 통신 수행

안 읽은 메시지

  • 사용자가 채팅방에서 나갈 때 마지막으로 방문한 시간 기록
  • 서비스에 로그인 시 마지막 방문 시간을 기반으로 안 읽은 메시지 조회
  • 소켓이 연결된 동안 오는 메시지는 안드로이드와 서버에서 각각 저장, 재로그인 시 다시 동기화되도록 설정

사용자의 상태에 따른 알림 전송

  • 사용자의 채팅방 구독 정보를 활용해 소켓 채팅 중인 사용자는 알림을 보내지 않도록 처리
벡터 DB를 활용한 질의 데이터 고도화

벡터 DB 구축

  • 사용자, 플레이스의 메타데이터를 활용하여 임베딩 벡터 생성
  • 사용자의 플레이스 리뷰 데이터를 활용한 벡터 DB의 실시간 업데이트

메타 데이터를 활용하여 스케줄 자동 생성기능 구현

  • 플레이스의 좌표 정보와 리뷰, 1, 2차 카테고리를 활용하여 질의에 활용할 후보 데이터 선정

OpenAI API를 활용한 플레이스 추천 서비스의 질의 데이터 활용

  • 플레이스 추천 요청자의 임베딩 벡터를 활용하여 맞춤형 질의 데이터를 생성
  • 고급 프롬프팅 기법을 적용해 구조화된 API 응답을 확보
  • 응답 결과를 사용자의 별도 입력 없이도 추천 항목으로 영속화하여 서비스 품질 향상
TSP 알고리즘, 동적 프로그래밍을 활용한 경로 최적화 및 스케줄 자동 생성

방문을 원하는 지역 목록만으로 AI를 활용한 맞춤형 스케줄 생성

  • 기차 운행정보 API 캐싱
  • 기차 운행정보를 바탕으로 기차역 간 인접 정보(이동 가능여부, 최소 소요 시간) 갱신 및 캐싱
  • 인접 정보 처리 고도화를 통하여, 기차 운행정보 API 최소 호출으로 기차 환승을 통하여 목적지에 도달하는 경로 생성
  • 비트마스킹 TSP 알고리즘을 사용하여 이동시간을 최소화한 최적 지역 방문 순서 보장

동적 프로그래밍을 활용한 KTX 이용 2회 제한(내일로 패스의 제약)

  • 최적 지역 방문 순서에 따라 지역을 순회하기 위하여, 최적 기차 운행 정보 선정
  • 내일로 도메인의 특성에 따라 KTX 이용 2회 제한 로직을 동적 프로그래밍을 활용하여 구현

About

No description, website, or topics provided.

Resources

Stars

Watchers

Forks

Releases

No releases published

Packages

No packages published

Contributors 7

Languages