ta,iger_banner_2.png

서비스 바로가기 →

Front-End Github →

Back-End Github →


📖  아키텍쳐

서비스 아키텍처 (수정본).png


💯 기술스택


🕹️ 기술적 의사결정

사용 기술 기술 설명
CloudFront 사용자에게 제공되는 정적 컨테츠의 전송 속도를 높이고 보안을 위한 HTTPS를 적용시키기 위해 사용되었다.
Sock.js 실시간 데이터 통신으로서, 실시간으로 owner 와 renter가 채팅으로 정보 공유가 가능해졌다. 또한 실시간 알림을 통해 답장이 왔는지 알수 있게 되었다.
Redux-Toolkit 액션타입, 리듀서, 액션 생성 함수, 초기상태를 하나의 함수로 편하게 선언할 수 있고, 불변성 유지를 위해 번거롭게 코드들을 작성하지 않고 유지를 해준다.
Chart.js 사용자에게 수익을 한눈에 볼 수 있게끔 데이터를 시각화 하였다.
React-Multidate-Picker 오너의 편의성을 위해 등록날짜, 예약날짜를 구분하기 위함과 동시에 오너가 한 눈에 볼 수 있게 달력을 사용.
Kakao Map API & Daum Postcode API 두 가지 API를 같이 사용한 이유는 우선 kako map api 성능은 google map 다음으로 빠르다. google map은 대한미국에서 사용하기에 적잘하지 않기 때문에 kakao map 을 사용했고, daum postcode api는 카카오 맵과 호환성이 뛰어나고, 우리 서비스상 필요한 상세주소가 다 담겨져 있어서 사용하기 편했다.
Intersection Observer scroll-height로 계산하여 무한스크롤 사용이 가능하지만, Intersection Observer 를 사용하면 이미 설정한 element가 노출이 되었는지 판단하고 감지가 되어서 이 점을 활용하여 무한스크롤을 구현했다. 불필요한 요청을 줄이고 필요할때만 요청이 가게끔 했다. 그리고 debounce & throttle 같이 추가적으로 코드를 안써도 되고, offsetTop으로 layout에 정확한 값을 구하기 위해 Reflow를 하는데, Intersection Observer를 사용하면 매번 Reflow를 할 필요없다.
browser-image-compression 이용자들이 고의적으로 많은 양에 고화질 이미지들을 업로드 했을때 s3 비용과 서비스 렌더링 속도에 악 영향을 미칠수 있기에, 프론트쪽에서 이미지 용량을 압축해서 s3로 보내기 위해서 도입 하였습니다.
SSE(Server-Sent Event) 물론 WebSocket으로도 알림 기능을 구현 가능하지만 알림이라는 것이 양방향으로 데이터를 주고 받기보다는 서버에서 클라이언트로 일방적으로 보내주는 것이기 떄문에 overkill이라고 생각되는 websocket이 아닌 SSE를 통해 알림을 구현했다.
QueryDSL 검색을 위해서는 복잡한 쿼리가 필요한데, JPQL의 경우에는 컴파일 시점에서 문법 오류를 잡지 못한다. 그래서 JPQL보다 동적인 쿼리 작성이 편리한 QueryDSL을 사용하여 검색 기능을 구현했다.
Swagger Spring REST Docs는 개발기간이 짧은 항해99 실전 프로젝트의 특성상 문서 작성에 드는 시간이 길고 복잡하다. 그러나 Swagger는 비교적 쉽고 간편하게 적용이 가능해서 Swagger를 통해 API 문서를 자동화했다.

🛠️ 핵심기능

Owner 와 Renter 간에 실시간 채팅, 알림 기능 💬

image (2).png