포트폴리오 서비스(주식 정보 조회 페이지 개선)

·2023년 12월 16일
0

Portfolio Backtest

목록 보기
8/31

생각한것

  • 지금 조회 페이지는 2785개의 주식이 조회된다. 해당 자료를 페이징을 이용해서 나누지 않으면 페이지가 너무 길어진다.
  • 조회 혹은 정렬을 하는 기능도 필요해 보인다.
  • 종목명 및 종목 코드로 검색하는 기능과 시장분류 필터를 만들자!

페이징

스프링 JPA의 domain.Page를 이용하여 구현하였다.
Controller

    @GetMapping("/stockinfo")
    public String showStockInfo(Model model, @RequestParam(value="page", defaultValue="0") int page) {
        Page<StockInfo> pagingStocks = stockDataLoader.getStockInfo(page);
        model.addAttribute("paging", pagingStocks);
        model.addAttribute("totalStocks", pagingStocks.getTotalElements());

        return "stockinfo";
    }

Service

    public Page<StockInfo> findAll(int page) {
        Pageable pageable = PageRequest.of(page, 20);
        return stockInfoRepository.findAll(pageable);
    }


성공적으로 페이지가 구성되었다. 하지만, 2786개의 데이터를 페이지만으로 확인하기는 쉽지않다. 분류와 검색 기능이 필요해 보인다.

종목명, 종목코드로 검색

public StockInfo findByItmsNmOrSrtnCd(String query) {
        if(query.charAt(0) <= '9' && query.charAt(0) >= '0') {
            return stockInfoRepository.findBySrtnCd(query);
        }else{
            return stockInfoRepository.findByItmsNm(query);
        }
    }
    

우선 서비스에서 입력받은 문자열의 맨앞자리가 숫자인지 파악하여 그에따라 종목명, 종목코드로 검색하도록 하였다.

    @GetMapping("/stockinfo/search")
    public String searchStockInfo(Model model, @RequestParam String query) {
        StockInfo stocks = stockInfoService.findByItmsNmOrSrtnCd(query);
        model.addAttribute("stock", stocks);

        return "search_stockinfo";
    }

그 후 컨트롤러를 이용해서 새로운 페이지인 search_stockinfo로 이동하도록 하였다.


시장분류로 필터

우선 stream을 이용해서 시장분류만 하나의 리스트로 만들었다.

        List<String> mrktCtgList = pagingStocks.getContent()
                .stream()
                .map(StockInfo::getMrktCtg)
                .distinct()
                .collect(Collectors.toList());

service에 시장분류로 데이터를 가져오는 부분을 추가하였다.

    public Page<StockInfo> findAllByMrktCtg(String filter, int page) {
        Pageable pageable = PageRequest.of(page, 20);
        return stockInfoRepository.findAllByMrktCtg(filter, pageable);
    }


성공적으로 완성하였다.

다음에 할일

  • 주식 가격 정보를 추가하는 부분 구현
  • 주식 가격 정보를 확인하는 부분 구현

profile
백엔드 개발자가 꿈인 컴공과

0개의 댓글

관련 채용 정보