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