굉장히 늦은 감이 있는 Triple 프로젝트의 회고록이다.
이렇게 늦게 회고록 느낌의 글을 쓰는 이유는 나는 Spring 기반의 웹 서버 개발자를 희망하기에, 주로 백엔드 개발을 공부하고, 연습한다. 따라서, 이 프로젝트의 경우에도 백엔드 부분은 모든 기능을 완성했고, 이를 Postman과 같은 툴을 사용해서 테스트까지 마쳤지만, 프론트가 없고, 실제 배포를 해서 유지하는 프로젝트가 아닌 만큼, 추후에 다른 사람이 이 프로젝트의 기능이 잘 작동하는지 확인할 방법이 없었다.
따라서 나는 내가 만든 프로젝트의 모든 api들의 작동을 Postman으로 호출하여, 어떻게 응답이 오는지 기록을 해놓고자 했고, 이 회고록을 쓰게 되었다.
이 회고록의 목적이 기술적 기록이 아닌 프로젝트의 완성도에 대한 기록이니만큼, 코드나 기술적 설명 없이 Api 호출에 대한 캡처 내용으로 구성된다.
Triple clone 프로젝트는 Triple이라는 내가 자주 쓰던 여행 어플이다.
해당 어플의 일부 기능을 Clone 코딩했던 프로젝트인데, 회고록을 안썼다가 시간이 좀 많이 지난 지금 써보려고 한다.
시간이 꽤나 지난 만큼 그떄의 기억이 새록새록 다 떠오르지는 않을 것 같다...ㅜㅜ
기록의 중요성을 다시 한번 느낀다.
Triple 프로젝트에서는 정말 여러가지 처음 써보는 기술을 많이 써보고, 여러가지 문제 해결을 경험 했던 것 같다.
이미 포스팅을 한 성능 개선이나 순환 참조등 여러 가지 경험을 해보았고, 그 과정에서 많은 고민도 했다.
Triple 프로젝트에서 처음 사용해봤거나, 공부해본 기술을 나열해보자면,
- Docker
- QueryDsl
- nGrinder
- Actuator + Prometheus + Grafana
- Bucket4J (처리율 제한 장치)
- Jenkins (CI/CD)
- Mock test
이정도인 것 같다.
사실 내가 생각했을 때는 한 프로젝트에서 이정도로 많은 학습을 얻어간다는건 굉장하다고 생각한다.
이 프로젝트를 진행하며 제일 많이 고민한 부분은 따로 포스팅을 해놓았다.
게시글 제일 아래에 링크를 걸어둘 예정이니, 만약 궁금하다면 들어가서 보면 될 것 같다.
또한 Github의 Readme에 프로젝트 소개도 넣어놓았으니, 한번 봐주길 바란다!! ^^
그럼 이 포스팅의 주 목적인 API 요청과 응답에 대한 기록을 시작하겠다.
모든 API에 대한 요청과 응답이 아닌 주요 기능에 대한 API만 기록할 생각이다.
API 요청 및 응답
1. 추천 여행지
- 추천 여행지 생성 API
추천 여행지를 create 하는 API이다, 제목, 부제목, 상세 페이지 URL, 위치, 이미지, 등록 날짜, 좋아요 수, 리뷰 수
로 구성되어 있으며, mainImage는 따로 API를 빼놓았다.
- 추천 여행지 전체 조회 API
생성된 추천 여행지들을 전체 조회하는 API 입니다.
no-offset 페이지네이션 방식을 사용하여서 구성했으며, 원하는 정렬 방식을 request param으로 설정할 수 있게 했습니다.
- 추천 여행지 좋아요 및 단일 조회 API
위 사진은 좋아요를 하기 전 단일 조회 API를 호출한 응답입니다.
응답의 맨 마지막 12번째 라인을 보면 like : false로 되어 있는걸 볼 수 있으며, 만약 좋아요 api를 호출할 시에는
위처럼 like가 true로 변하게 됩니다, 물론 다시 한번 좋아요를 누를 시엔 다시 false로 되돌아 가게 됩니다.
2. 계획 생성
- Google map에서 내 계획 보여주기
생성된 계획에 따라서 Google map API를 사용하여 google map을 보여줄 수 있습니다.
응답으로 받은 html을 브라우저에서 확인하면
이와 같이 지도를 볼 수 있으며, 마커 또한 추가할 수 있다.
- 세부 계획 생성 및 마크 생성
계획은 큰 계획과 세부 계획으로 나뉘며, 세부 계획을 생성할 시에는 지도에 자동으로 마커가 생성되도록 구성했다.
이렇게 세부 계획을 생성한 뒤에 다시 지도 조회를 해보면,
이처럼 지도에 마커가 생성된다.
추후에 세부 계획이 다양해지면, 마커는 여러개로 늘어나고, 시간순에 따라서 마커끼리 선으로 이어지게 된다.
2번째 테스트용 세부 계획을 만들때 위도와 경도를 내 맘대로 바꿔서 넣었더니 북한쪽으로 갔지만....어쨌든 잘 작동한다.
2. 숙소 예약
- 숙소 리스트 가져오기
이 Triple 프로젝트의 경우에는 여행 계획을 짜는 어플이니 만큼 숙소 예약 또한 함께 서비스로 지원할 수 있어야 한다,
하지만 그 많은 숙소 정보를 내가 어떻게 받아올 수 있을까 고민했고, 나는 python을 이용한 웹 스크래핑을 사용하기로 했다.
from selenium import webdriver
from bs4 import BeautifulSoup
import urllib.parse
import time
def scrape_yanolja(local):
hdr = {'User-agent': 'Mozilla/5.0 (iPhone; CPU iPhone OS 10_3 like Mac OS X) AppleWebKit/603.1.23 (KHTML, like Gecko) Version/10.0 Mobile/14E5239e Safari/602.1'}
driver = webdriver.Chrome()
keyword = urllib.parse.quote(local)
driver.get('https://www.yanolja.com/search/{keyword}?keyword={keyword}&searchKeyword={keyword}')
time.sleep(5)
page_source = driver.page_source
soup = BeautifulSoup(page_source, 'html.parser')
elements = soup.select('strong.PlaceListTitle_text__2511B, span.PlacePriceInfoV2_discountPrice__1PuwK')
results = []
for element in elements:
results.append(element.text.strip())
driver.quit()
return results
파이썬 코드다, BeatifulSoup를 사용해서 웹 스크래핑을 진행했고, 특정 지역이름이 Param으로 주어지면 그 지역에 맞는 숙소들을 다 검색해서 올 수 있도록 구성했다.
이를 통해 나는 메모장에 여러 숙소들의 이름과 별점, 가격들을 가져올 수 있었고, 내 Spring 서버에서는 이 메모장을 토대로 데이터를 저장하도록 했다.
숙소 조회 또한 no-offset 방식의 페이지네이션으로 구성했으며, 해당 요청은 강릉에 있는 숙소들을 야놀자 홈페이지에서 스크래핑 해 온 데이터들이다.
- 숙소 예약
이렇게 조회된 숙소들에 대해서는 바로 내 계획에 추가하거나, 예약을 할 수 있도록 구현하였지만, 실제로 야놀자를 통해 예약이 되도록 하는 기능은 구현하지 못했다.
여기까지가 내 프로젝트 내에서 중요하다고 생각되는 기능들에 관한 API들의 응답값들이며, 이 포스팅을 하는 김에 Test 코드까지 함께 보여주고자 한다.
Test 코드는 단위 테스트를 하려고 노력했으며, 총 94개의 테스트 코드로 구성되었다.
하지만 이 Test 코드는 의미없는 테스트 코드들이 포함되어 있다고 생각된다....굳이 테스트 하지 않아도 될...???
따라서 테스트 커버리지를 진행해볼 생각이고, 이는 따로 포스팅으로 올릴 생각이다.
마지막으로 앞서 말했던 이 프로젝트를 진행하면서 제일 많이 고민했던 내용의 트러블 슈팅 링크와 github 링크를 올리는 걸로 포스팅을 마치도록 하겠다.
https://youngs-java-study.tistory.com/28
https://youngs-java-study.tistory.com/29
https://youngs-java-study.tistory.com/30
https://github.com/piedra-de-flor/Triple_clone
'백엔드 멘토링' 카테고리의 다른 글
[회고록] Stock-simulation 프로젝트 API 완성도 기록지 (1) | 2024.12.20 |
---|---|
주식 프로젝트 influx DB 도입 ADR 과정 (0) | 2024.10.30 |
주식 투자 프로젝트 실시간 Real time DB 적용기 (9) | 2024.09.06 |
계좌 잔액 업데이트 동시성 문제 해결 과정 (5) | 2024.09.03 |
객체지향적 Refactoring 과정의 기록 (1) | 2024.07.11 |