- 2023.02 ~ 2023.04
코로나19가 완화됨에 따라 해외여행 수요가 급증하고 있다. 해외 여행을 계획하는 데 가장 중요한 것은 항공권이다. 기존 항공권 예매 사이트에서 불편한 점을 찾을 수 있었다.
- 항공권 가격의 과거 데이터를 제공하지 않아 지금 보고 있는 항공권 가격이 합리적인지 알 수 없다.
- 여러 개의 항공권을 한 눈에 비교할 수 없다.
- 찜한 항공권의 가격이 원하는 가격에 도달했는지 확인하는 과정이 귀찮다.
- 대부분 항공권 예약 사이트에선 인기 여행지로 도시만 추천한다.
- 항공권 가격 추이를 시각적으로 볼 수 있다.
- 여러 개의 항공권을 선택해 한 눈에 비교할 수 있다.
- 원하는 가격에 도달하면 찜한거 알림을 받을 수 있다.
- 관광지 기준으로 주변 공항을 지도에 표시한다.
- 여행 물품을 구매/대여할 수 있다.
- 각 나라의 공항 위치와 상세 정보를 제공.
- 대류별 인기 여행지를 제공.
- 여행지 클릭시, 지도 해당 여행지가 확대 되고, 상세 정보를 제공.
- 주변의 가까운 공항 정보와 위치 제공.
- 편도/왕복으로 검색 지원.
- 출발지/도착지 선택, 날짜 선택, 검색조건(경유조건, 가격조건) 설정 후 검색 지원.
-
실제와 동일한 항공권 마크와 색상으로 항공권 구별.
-
항공권을 5개까지 비교할 수 있는 기능 지원.
-
항공권 조회 결과 리스트 정렬 기능 지원.
- 금액 낮은 순
- 변동폭 큰 순
- 출발시간 빠른 순
- 소요시간 낮은 순
-
무한 스크롤로 조회 결과 제공.
- 각 항공권의 상세정보와 가격 변화의 추이 정보를 제공.
- 비교하기에 넣은 항공권에 대해 가격 비교와 추이 비교를 그래프로 지원.
- 찜하기 기능 & 알림 기능 지원.
편도 검색 결과
왕복 검색 결과
-
살게요/팔게요
- 여행물품 중고 거래 서비스 제공.
-
빌려주세요/빌려드려요
- 여행 물품 대여 서비스 제공.
-
모든 카테고리 조회 결과를 무한 스크롤 형태로 제공.
-
제목을 기준으로 도시와 물품으로 검색 기능 제공.
-
게시물 등록/수정 기능
- 해당 물품에 관련된 사진을 여러장 기입 가능.
- 아이디 및 닉네임 중복 검사 체크
- 로그인 시, 희망 가격을 정해놓은 찜한 항공권 알림 지원.
- 찜한 항공권에 대해 희망 가격 설정 할 수 있는 기능 지원.
- 희망 가격 이하의 항공권이 올라올 시, 알림 서비스 지원.
- pack 서비스에 대한 찜한 목록 제공.
- 판매자와 구매자의 실시간 채팅 제공.
- 새로운 메세지에 대한 알림과 과거 대화 내용 기록.
- 사진(여러개) 전송 가능.
- 구매완료를 등록 가능.
- 형상관리 : Gitlab
- 이슈관리 : Jira
- 커뮤니케이션 : Mattermost, Notion
- 디자인 : Figma
- Postman
- Termius
- IDE : Visual Studio Code
- language
- node js
18.13.0
- node js
- formatter
- eslint
8.32.0
- prettier
2.8.3
- eslint
- Library
- react
18.2.0
- react-dom
18.2.0
- router
- react-router-dom
6.9.0
- react-router-dom
- state management tool
- react-redux
8.0.5
- reduxjs/toolkit
1.9.3
- redux-persist
6.0.0
- react-redux
- http
- Axios
1.3.4
- Axios
- map
- react-leaflet
4.2.1
- react-leaflet
- chart
- chart.js
4.2.1
- chart.js
- chat
- sockjs
0.3.24
- sockjs-client
1.6.1
- stompjs
2.3.3
- stomp/stompjs
7.0.0
- sockjs
- style
- styled-components
5.3.9
- react-icons
4.8.0
- styled-components
- etc
- aws-sdk
2.1349.0
- firebase
9.19.1
- jwt-decode
3.1.2
- js-sha256
0.9.0
- aws-sdk
- react
- IDE : Intellij IDEA
2020.3
- language : Java openjdk
11.0.15 2022-04-19 LTS
- Springboot
2.7.9
- Spring Data JPA
- Spring Data redis
- Lombok
- Spring Security
- Spring Cloud
2021.0.5
- Spring Cloud Discovery
- Spring Cloud Config
- Spring Cloud AWS
- Logback
7.2
- Validation
- Spring Web
- Spring Websocket
- Build tool : Gradle
7.6
- QueryDsl
1.0.10
- firebase
7.1.1
- jackson
- Micrometer Prometheus
- com.auth0:java-jwt
4.0.0
- okhttp3
4.2.2
- hadoop
3.2.2
- spark
3.2.1
- Mysql
8.0.32-0ubuntu0.20.04.2
- https
TLS 1.0
- Ubuntu
20.0.4
- Nginx
1.18.0
- Docker
20.10.23
- Jenkins
Jenkins/jenkins:lts-jdk11
(Image tag name)
🎯 빅데이터 분산 시스템 구현
-
⚙ 항공권 크롤링
- Selenium을 통해 G마켓 항공에서 매일 미래 7일치 항공권 데이터를 수집 (1일 약 40만건)
-
🐘 Hadoop
- 수집한 항공권 데이터를 전처리 및 부하방지를 위해 분산 저장
-
🍧 Spark
- Python 기반의 PySpark 사용
- HDFS에 있는 오늘 날짜의 파일에 있는 데이터를 정제해 항공권 정보를 MySQL DB에 저장
- HDFS에 있는 과거 파일을 모두 읽어 항공권의 과거 가격 정보를 연산
🎯 MSA 설계
-
배포
- 서비스별 배포가 가능.(배포시 전체 서비스의 중단이 없음)
- 특정 서비스의 요구사항만 반영하여, 빠르게 배포 가능.
-
확장
- 다양하고, 새로운 서비스에 대한 유연한 확장 가능.
-
장애
- 일부 서비스의 장애가 전체 서비스로 확장될 가능성을 차단. (User service 에 해당하는 장애가 Owner service에 영향을 미치지 ❌)
- 부분적 장애에 대한 격리 처리 가능.
🎯 redis사용
-
redis 캐시 db
- redis에 채팅방 정보와 채팅 메시지를 저장
- 채팅에 사용한 Redis Cache Strategy Pattern
- 변경이 적고 자주 사용되는 정보들(유적지 데이터/ 회원 데이터 조회) 캐시로 저장.
-
redis pub/sub
- STOMP와 Redis의 pub/sub구조를 이용하여 실시간 채팅 기능 구현
-
Cache warming
- write back후 전 날 00시부터의 채팅 메시지를 redis에 데이터를 밀어 넣어둠
-
Write-Back
- 새벽 3시마다 Spring Scheduler와 Jdbctemplate을 이용하여, Redis에 쌓아놨던 데이터들을 db로 bulk insert를 진행
-
Look-Aside(Lazy Loading)
- 클라이언트가 채팅 메시지 읽기 요청 시 Redis에서 먼저 확인
- 더 과거의 채팅 메시지를 요청 시 DB에서 데이터를 조회하여 Redis에 저장 후, 결과 값 반환
- 무한스크롤을 구현했기 때문에, 한번에 하루 치의 데이터씩만 Redis에 저장함.
-
Redis Sentinel
- HA를 위해 Auto Failover를 수행할 수 있는 Sentinel을 구성함
- Redis 서버 3대, Redis Sentinel을 5대 기동
🎯 모니터링
- prometheus & grafana
- 서버의 metric을 수집하여, 해당 서버의 부하 및 메모리 사용량 등을 시각화
🎯 log분석
- elk
- logstash : 서버의 로그를 수집
- elasticsearch : 로그 검색 기능
- kibana : 로그 데이터 시각화
[ER Diagram](https://www.erdcloud.com/d/DQ8Lr5CfJQKmjWGvL)
최희수 | 김승희 | 이상민 | 김아린 | 신현광 | 허윤회 |
---|---|---|---|---|---|
Leader & Backend | Backend | Backend | Backend | Frontend | Frontend |