Notice
Recent Posts
Recent Comments
Link
«   2025/01   »
1 2 3 4
5 6 7 8 9 10 11
12 13 14 15 16 17 18
19 20 21 22 23 24 25
26 27 28 29 30 31
Archives
Today
Total
관리 메뉴

개발자되기 프로젝트

[Server] 효율성 개선 본문

Project/대중교통 길찾기

[Server] 효율성 개선

Seung__ 2022. 1. 31. 00:32

이전 코드는 모든 SubPath객체 생성시 바로 실시간 정보를 요청했다.

 

이로인해 필요없는 data에 대해 api를 호출하는 등 리소스 낭비가 심했다.

 

현재 코드는 출발지->경유지, 경유지->목적지 각각 2개씩 경로를 사용한다.

 

따라서 실제로 view에 오프한 path에 대해서만 실시간 정보를 요청하는 것이 합리적이다.

 

 

1. SubPath.class


  • 생성자에서 odsayClient를 호출하는 것이 아닌
  • 메서드를 통해 별도로 처리함.
  • 모든 subPath객체에 대해서 생성하지 않아도 됨.
public void getStationIdAndRealTimeInfo(OdSayClient odSayClient) {
    
    if (this.trafficType == 2){
        this.stationId = odSayClient.getStationId(startName, String.valueOf(startX), String.valueOf(startY));
        SearchRealTimeStationReq searchRealTimeStationReq = new SearchRealTimeStationReq(stationId, this.lane.getBusID());
        SearchRealTimeStationRes realTimeBusInfo = odSayClient.getRealTimeBusStation(searchRealTimeStationReq);
        this.arrivalMin = realTimeBusInfo.getArrivalMin();
        this.leftStation = realTimeBusInfo.getLeftStation();
    }
}

 

 

2. ApiController


  • 2개의 path를 추려내고 실시간 정보를 요청함.
public  SearchRouteRes searchRoute3(@ModelAttribute("searchRouteReq") SearchRouteReq searchRouteReq){
    JSONObject jsonResult = odSayClient.searchRoute(searchRouteReq);
    SearchRouteRes searchRouteRes = new SearchRouteRes(jsonResult, odSayClient);

    ArrayList<Path> pathList = getPathList(searchRouteRes);
    //api로 얻은 pathList를 대체함.
    searchRouteRes.setPathList(pathList);

    return searchRouteRes;
}

private ArrayList<Path> getPathList(SearchRouteRes searchRouteRes) {
    //여러 path중 2개만 사용.
    ArrayList<Path> pathList = new ArrayList<>();
    pathList.add(searchRouteRes.getPathList().get(0));
    pathList.add(searchRouteRes.getPathList().get(1));

    //2개의 path에 대해 realtime 정보를 가져옴.
    for (Path path : pathList) {
        for (SubPath subPath : path.getSubPathList()) {
            subPath.getStationIdAndRealTimeInfo(odSayClient);
        }
    }
    return pathList;
}

 

 

3. 결과


훨씬 동작이 가벼워졌다 ㅋㅋㅋㅋㅋ 불필요한 api 호출을 줄였다.

그런데, 12시가 넘어서인지 운행하는 버스가 없다.

이후에 예외처리할 때 참고해야함.

Servlet.service() for servlet [dispatcherServlet] in context with path [] threw exception [Request processing failed; nested exception is org.json.JSONException: JSONObject["arrival1"] not found.] with root cause

 

Comments