Skip to content

Repository files navigation

멋쟁이사자처럼 백엔드 스쿨 (3기)

😎 KLover Crew

👨‍👨‍👧‍👦 팀원 소개

윤수근 주선경 오상민 구준휘 이승헌
GitHub GitHub GitHub GitHub GitHub


📌 KLover 프로젝트 개요

Image

😎 KLover 서비스 소개

한국을 방문하는 외국인 관광객들이 겪는 언어 장벽, 정보 부족 등의 문제를 해결하고, 한국의 다채로운 매력을 쉽고 편리하게 경험할 수 있도록 돕는 올인원(All-in-one) 인바운드 관광 플랫폼

문제인식

작년 4월까지 우리나라에 입국한 외국인은 약 274만명으로 지난해 같은 기간에 비해 6배가량 증가했는데요. 다만 한국 재방문율은 50% 수준으로 관광대국들에 한참 못 미친다고 합니다. 처음 한국을 방문하는 외국인 관광객 수는 매년 늘고 있는데 재방문율이 높아지지 않는 것은 그럴만한 이유가 있기 때문이라고 하는데요. 어떤 부분이 외국인들이 한국에 또 오는 걸 주저하게 만들까요?


1. 길 찾는 게 어려워요

구글 맵은 전 세계적으로 유용하지만, 한국에서는 지도 데이터 반출 문제와 정부의 이견 으로 인해 서비스가 매우 제한적이며, 이는 특히 외국인 관광객에게 큰 불편을 초래하고 있다.


2. 민망한 엉터리 영어

한국을 방문하는 외국인 관광객이 늘고 있지만, 공공장소 및 식당 등에서 제공되는 영어 번역이 매우 부실하여 외국인 관광객에게 큰 불편을 초래하고, 한국에 대한 부정적인 인상을 심어줄 수 있다. 특히 한식에 대한 높은 관심에도 불구하고, 한식당의 번역 문제는 더욱 심각한 상황이다.


3. 매력적인 관광지, 관광 코스 없어

한국이 외국인 관광객 유치를 위한 야심 찬 목표를 세웠지만, 매력적인 관광 콘텐츠 부족, 숙박 및 교통 시설 미비, 기타 불친절 문제 등 여러 요인으로 인해 재방문율이 낮다. 관광 매력 국가로 발돋움하기 위한 전반적인 개선이 필요한 상황이다.



🎥 시연 영상

아래 이미지를 클릭하면 시연 영상을 시청할 수 있습니다.



⚙️ 서비스 아키텍처

아키텍처 보기



👨‍⚖️ 기술적 의사결정

1. 데이터베이스 선택

📌 PostgreSQL (메인 DB - 게시글 및 지도 데이터 저장)

  1. GIS(Geographic Information System) 지원 → `PostGIS` 확장을 활용하여 위치 기반 서비스에 최적화
  2. 강력한 트랜잭션 관리 → `ACID` 특성을 보장하여 데이터 정합성 유지
  3. JSON 지원 → 구조화된 데이터뿐만 아니라 JSON 형식도 저장 가능
📌 MongoDB (실시간 채팅 데이터 저장)

  1. NoSQL 기반의 유연한 스키마 → 채팅 메시지에 다양한 데이터(텍스트, 이미지, 파일 등) 저장 가능
  2. 수평 확장성(Sharding) 지원 → 대량의 채팅 데이터를 효율적으로 분산 저장
  3. 빠른 읽기/쓰기 성능 → 실시간 메시징 환경에서 높은 처리 속도 보장

2. 검색 엔진 선택

📌 ElasticSearch (검색 및 다국어 검색 처리)

  1. 고성능 검색 엔진 → 대량의 데이터에서도 빠른 검색 속도 제공
  2. 토큰화 및 형태소 분석 → 한국어 및 다국어 검색 최적화 가능

3. 메시지 큐 (Message Queue) 적용

📌 RabbitMQ (채팅 및 알림 시스템)

  1. 비동기 메시징 시스템 → 실시간 알림 및 채팅에서 서버 부하 없이 메시지 전달
  2. 확장성과 부하 분산 → 서버 과부하를 방지하며 안정적인 데이터 처리 가능

4. 프론트엔드 (모바일 앱 최적화)

📌 React Native (모바일 앱 개발)

  1. 크로스 플랫폼 지원 → `iOS`와 `Android`를 하나의 코드베이스로 개발하여 유지보수 비용 절감
  2. 빠른 UI 업데이트 → `Hot Reloading` 기능을 활용해 실시간 UI 변경 가능

5. 소셜 로그인 도입

📌 소셜 로그인(Google & LINE 로그인)

  1. 외국인 사용자 비율 고려 → Kakao 및 Naver 대신 Google과 LINE을 활용
  2. 보안 및 편의성 강화 → OAuth 2.0을 기반으로 안전한 인증 제공

🗂 프로젝트 구조

디렉토리 구조
server
  ├── domain
  │   ├── auth
  │   │   ├── controller
  │   │   ├── dto
  │   │   └── service
  │   ├── chat
  │   │   ├── chatMessage
  │   │   │   ├── controller
  │   │   │   ├── dto
  │   │   │   ├── entity
  │   │   │   ├── repository
  │   │   │   ├── service
  │   │   │   └── serviceImpl
  │   │   └── chatRoom
  │   │       ├── controller
  │   │       ├── dto
  │   │       ├── entity
  │   │       ├── repository
  │   │       ├── service
  │   │       └── serviceImpl
  │   ├── community
  │   │   ├── commPost
  │   │   │   ├── controller
  │   │   │   ├── dto
  │   │   │   ├── entity
  │   │   │   ├── enums
  │   │   │   ├── event
  │   │   │   ├── repository
  │   │   │   ├── service
  │   │   │   └── serviceImpl
  │   │   └── comment
  │   │       ├── controller
  │   │       ├── dto
  │   │       ├── entity
  │   │       ├── event
  │   │       ├── repository
  │   │       ├── service
  │   │       └── serviceImpl
  │   ├── member
  │   │   └── v1
  │   │       ├── controller
  │   │       ├── dto
  │   │       ├── entity
  │   │       ├── enums
  │   │       ├── repository
  │   │       └── service
  │   ├── notification
  │   │   ├── controller
  │   │   ├── dto
  │   │   ├── entity
  │   │   ├── enums
  │   │   └── eventListener
  │   └── tour
  │       ├── enums
  │       ├── review
  │       │   ├── controller
  │       │   ├── dto
  │       │   ├── entity
  │       │   ├── repository
  │       │   ├── service
  │       │   └── serviceImpl
  │       ├── tourApi
  │       │   ├── scheduler
  │       │   ├── service
  │       │   └── serviceImpl
  │       └── tourPost
  │           ├── controller
  │           ├── dto
  │           ├── entity
  │           ├── repository
  │           ├── service
  │           └── serviceImpl
  └── global
      ├── common
      │   ├── constant
      │   └── response
      ├── elasticsearch
      │   ├── commpost
      │   │   ├── doc
      │   │   ├── service
      │   │   └── springevent
      │   │       ├── event
      │   │       ├── eventlistener
      │   │       └── message
      │   ├── config
      │   └── tourpost
      │       ├── doc
      │       ├── service
      │       └── springevent
      │           ├── event
      │           ├── eventlistener
      │           └── message
      ├── exception
      │   └── handler
      ├── fcm
      │   ├── initiallizer
      │   └── service
      ├── i18n
      │   └── service
      ├── initData
      ├── jpa
      ├── rabbitMQ
      │   ├── consumer
      │   ├── producer
      │   └── queueNames
      ├── redis
      ├── s3
      ├── security
      │   ├── config
      │   ├── custom
      │   ├── filter
      │   └── provider
      ├── stomp
      ├── translation
      │   ├── client
      │   │   ├── config
      │   │   └── controller
      │   ├── config
      │   ├── controller
      │   ├── dto
      │   ├── interceptor
      │   └── service
      └── util


🛠 설계

ERD

API



🕵️‍♂️ 트러블슈팅

트러블슈팅 하나씩 채워 나갈 것것



😭 이번 프로젝트에서 보완해야 할 점



🤭 이번 프로젝트를 하며 새롭게 배운 것



About

No description, website, or topics provided.

Resources

Stars

0 stars

Watchers

0 watching

Forks

Releases

Packages

Contributors

Languages