Memorization

20220717 WIL

코드파고 2022. 7. 20. 02:45

이번 주는 구현하느라 정신없는 날이었다...!

MVP를 진행하는 동안 다뤄보았던 기술 스택을 정리해 보자면

WebClient를 공부했고 Lazy Subscription으로 MVC 패턴에 적용해 보았다. 😅
그 과정에서 Reactive Progrmming, WebFlux를 학습했으나 RestTemplate의 속도가 10%가량 빨라 프로젝트에는 RestTemplate를 주로 사용하고, JMeter를 적용해 Concurrent User에 대해 성능 테스트를 해 볼 예정이다.

RestTemplate을 도입한 이유는 공공 API, 카카오맵 API를 이용하기 위함이다.
공공 API에서 배리어 프리 업장을 얻어오고, 공공 API 데이터를 검증하고 더 많은 정보를 얻어오기 위해 카카오맵 로컬 API(키워드 검색, 위도 경도를 주소로 변환하는 API)를 사용한다.

CI/CD를 위해 Github Action을 프로젝트에 적용했다. Github의 Main branch 에 Push나 PR이 만들어지면 트리거되어 S3에 빌드 파일을 배포하고, 이를 CodeDeploy를 거쳐 EC2 서버에 올리고 프로젝트를 실행시킨다.

또한 백엔드 서버에 Https를 적용하였다. 가비아에서 구매한 도메인과 EC2의 Route53, LoadBalancer를 사용하여 적용할 수 있었다.

메인 페이지에서 카테고리별로 정보를 필터링해서 보여주는 프로젝트 특성 상 QueryDSL을 적용하는 편이 좋을 것 같아 현재 프로젝트에 QueryDSL을 사용하여 업장을 필터링해 조회해오고 있다.

public List<Store> findStoreOrderByBookmark(BigDecimal lat,
                                            BigDecimal lng,
                                            String category,
                                            List<String> facility,
                                            int limit) {

    BooleanBuilder builder = locTwoPointAndConditions(lat, lng, category, facility);

    return queryFactory.selectFrom(store)
            .where(builder)
            .orderBy(store.bookMarkCount.desc())
            .limit(limit)
            .fetch();
}

이런 식으로 원하는 조건을 만족하는 정렬된 결과를 가져오며 DTO로의 매핑은 Service에서 적용한다.

앞으로는 검색을 위해 Elastic Search를 적용해 볼 예정이다..!