관광지, 축제에 관한 지도 기반 웹 리뷰 서비스입니다.
관광지, 축제의 평점 확인, 리뷰 작성 및 조회, 평점 높고 거리가 가까운 여행지들을 추천합니다.
관심있는 지역을 팔로우하고 새로운 관광지 추가시 실시간 알림도 받아볼 수 있습니다.
- Java 8
- Spirng Boot 2.7.17
- Spring Security/JWT
- MySQL
- Redis
- MyBatis
- AWS S3, EC2
- Docker
-
mysql
db.url
db.port
db.db
db.username
db.password
-
redis
redis.host
redis.port
-
공공 데이터 API
api.data
-
Naver API
- Clover
api.naver.id
api.naver.secret
api.naver.url
- Map
api.naver.map.url
- Clover
-
S3
api.s3.id
api.s3.secret
api.s3.url
api.s3.bucket
mvn clean compile package
java -jar -Dapi.data=api.key
-Dapi.naver.id=api.naver.ic -Dapi.naver.map.url=api.naver.map.url
-Dapi.naver.secret=api.naver.secret -Dapi.naver.url=api.naver.url
-Dapi.s3.id=s3.id -Dapi.s3.secret=s3.secret -Dapi.s3.url=s3.url
-Ddb.password=db.passowrd -Ddb.port=db.port -Ddb.url=db.url -Ddb.username=db.usernmae -Dmail.password=mail.password -Dmail.username=mail.usernmae -Dredis.host=redie.host -Dredis.port=redis.port target/*.jar
관심있는 지역을 팔로우 할 수 있으며, SSE(Server Sent Event)를 활용해서 팔로우한 시도의 새 컨텐츠의 알람 조회 할 수 있습니다.
지도 페이지에서는 '시도, 구군, 컨텐츠' or 키워드 조회 조회한 컨텐츠에 대한 리뷰 작성을 할 수 있습니다.
- 서버와 DB 사이의 네트워크 통신 지연되는 상황과 DB 시스템의 쿼리최적화 부담을 줄여 성능을 높이기 위해 쿼리 압축을 진행했습니다.
- N+1 문제 해결을 위한 Mybatis Collection
- INSERT INTO ~ SELECT
- Mybatis 동적쿼리
- 서버에서 클라이언트로 단방향 알림푸쉬 통신을 위한 SSE Connection 기술을 사용했습니다
- polling, long polling, websocket, sse 등의 기술 중 원하는 기능 구현에 맞는 기술을 조사하고 선택했습니다.
- 메모리로 관리하는 SSE Emitter의 소멸과 재생성 콜백은 생성과 다른 쓰레드에서 진행되기 때문에 Thread Safe한 자료구조를 사용했습니다.
- 제가 설계한 백엔드 로직을 API 명세서만으로 설명하면서 프론트엔드 팀원과 구현이 다른 방향으로 이어져 협업에 어려움이 있었습니다. 시퀀스 다이어그램을 사용해 시각적으로 로직을 설명함으로써 이전에 비해 짧고 정확하게 의사소통할 수 있었고 고민에 대한 피드백도 더 빠르게 받을 수 있었습니다.