본문 바로가기
걸어서 개발 속으로

내 서비스에 로그 적용

by 손건호 2023. 5. 6.

이전 블로그 글에서 로그를 시작한다고 했다

https://pushvalue.tistory.com/59

 

로그 남기기

로그를 남기기전에 겪은 문제점 out 파일 관리 문제 따로 로그를 남기지않을때 nohup.out 파일에서 기본 에러문구를 볼수 있었다 계속해서 기본 로그가 쌓이는 형태인데 나름 관리를 해주겠다고 서

pushvalue.tistory.com

 

로깅 목표

  1 실행중인 서비스의 페이지 활성화,기능,api호출의 기록

  2 로깅 모듈의 로그파일 관리

  3 추후 구현할 testCase 의 성공 여부 확인

 

목표의 첫번째

페이지 로딩의 기록

어떤 페이지가 가장 자주 활성화 되고 사용 되는지 시각적으로 확인하고싶었다

페이지 활성화인 만큼 컨트롤러의 페이지를 반환하는 메서드에 로그를 남겼다

    @GetMapping("/")
    public String docList(HttpSession httpSession,Model model){
        LoginInfo loginInfo = (LoginInfo)httpSession.getAttribute("loginInfo");
        List<Doc> docs = docService.list();
        model.addAttribute("loginInfo",loginInfo);
        model.addAttribute("docs",docs);
        LOGGER.info("메인 페이지가 활성화되었습니다.");
        return "doc/docList";
    }

 

두번째 목표
나의 서비스중 가장 무거운 기능을 담당하는

스팀 api 파싱 기능이다

일 1회,주1회정도 사용,갱신이 되기때문에

홈페이지에 api 호출 버튼을 두지않고 uri로 사용하도록 했다

    @GetMapping("/appList")
    public String appList() {
        appService.rowClear();
        appService.apiParsing();
        return "home";
    }

하지만 페이지 반환이 아닌 DB 의 데이터 갱신이 목표인 기능이기 때문에

해당 메서드에 로그를 남겼다

    public void apiParsing() {
        long startTime = System.currentTimeMillis();
        String steamUrl = "https://api.steampowered.com/ISteamApps/GetAppList/v2/";
        RestTemplate restTemplate = new RestTemplate();
        ResponseEntity<String> response = restTemplate.getForEntity(steamUrl, String.class);
        ObjectMapper objectMapper = new ObjectMapper();
        JsonNode root = null;
        try {
            root = objectMapper.readTree(response.getBody());
        } catch (IOException e) {
            e.printStackTrace();
        }
        JsonNode appList = root.path("applist").path("apps");
        List<App> apps = new ArrayList<>();
        for (JsonNode app : appList) {
            App app1 = new App();
            app1.setApp_id(app.path("appid").asInt());
            app1.setApp_name(app.path("name").asText());
            apps.add(app1);
        }
        long endTime = System.currentTimeMillis();
        long elapsedTime = endTime - startTime;
        appRepository.save(apps);
        LOGGER.info("API 파싱 작업이 완료되었습니다. 소요시간: " + elapsedTime + "ms");
    }

 

가장 무거운 기능인 만큼
작동 시간이 알고싶었다
알고리즘 문제를 풀고난뒤
할고리즘의 작동 시간을 체크하는 방법을
api파싱 메서드에 똑같이 적용 해보았다

public void apiParsing() {
    long startTime = System.currentTimeMillis();

    // 기능부분 생략

    long endTime = System.currentTimeMillis();
    long elapsedTime = endTime - startTime;

    logger.info("API 파싱 작업이 완료되었습니다. 소요시간: " + elapsedTime + "ms");
}

해당 기능은 로컬에서 실행한 시간이고
원격지에서 원격지 자원에 의한 시간과 비교할수도 있다!

오라클 무료 인스턴스를 사용하기때문에 아마 더 오랜시간이 걸릴것 같다

 

그 외에

신규유저의 회원가입,

유저의 글 작성,

유저의 로그인 성공,실패

기존유저의 유저정보 수정 등등의 기능에

로그를 남겼다

 

'걸어서 개발 속으로' 카테고리의 다른 글

test code  (0) 2023.05.26
test case를 위한 test DB  (0) 2023.05.19
로그 남기기  (0) 2023.05.03
LFG 배포 자동화  (0) 2023.03.26
오라클 인스턴스 생성 기록  (0) 2023.03.25

댓글