# Day10 피어세션 ## KAI ### 설계의도 - 로그 파일을 특정 위치를 찾고, 파일의 데이터를 배열에 담는다. - 정규표현식으로 문자열의 원하는 값을 추출한다. - 로그레벨, 기록시각, 프로세스, 기록 프로퍼티를 가지는 구조체를 생성 - 각 로그 데이터 값을 포함할 객체 또는 타입을 선언해야 한다. - 로그 레벨 유형별로 필터링 - 로그 시각으로 정렬 - 프로세스 이름으로 필터링 - 프로세스 이름으로 정렬 - 로그레벨, 프로세스 카운트 값 가져오기 ### 구현방식 각각 필요한 프로퍼티와 동작에 맞는 메서드를 가지는 LogAnalsis 클래스를 선언 각각 필요한 프로퍼티와 동작에 맞는 메서드를 가지는 LogAnalsis 클래스를 선언 #### readLogFile() 파일경로설정 로그 전체 데이터를 줄바꿈 기준으로 한 문장씩 originalLogLines 배열에 담는다. flatMap을 통해 [LogModel]를 배열에 담을 때 2차원 배열이 1차원 배열이 되도록 리턴함 logDataArr에 LogModel을 따르는 배열을 모든 데이터를 담는다. #### extractDataUsingRegex() 로그 전체 데이터를 줄바꿈 기준으로 나눈 한 문장씩 정규표현식을 통해 문장을 판단 1.1 regex : pattern을 정규식으로 변환 1.2 result : String에서 regex와 일치하는 부분들 한 문장에서 추출된 값들을 LogModel에 따르도록 값을 넣고 logDataArray배열에 담는다. #### filterLogEntriesByLevel(logLevel:) logDataArr를 순회하여 각 요소의 level이 전달된 logLevel과 일치하면 count 1씩 증가하고, 일치하는 로그들만 results 배열에 담는다. results 순회하여 각각 요소를 문자열로 리턴한다 #### filterLogEntriesByProcessName(processName:) logDataArr를 순회하여 각 요소의 process가 전달된 processName과 일치하면 count 1씩 증가하고, 일치하는 로그들만 results 배열에 담는다. results 순회하여 각각 요소를 문자열로 리턴한다. #### sortLogEntriesByTime() logDataArr에서 각 요소의 time을 비교하여 오름차순으로 정렬한다. #### sortLogEntriesByProcessName() logDataArr에서 각 요소의 process를 비교하여 오름차순으로 정렬한다. 파일경로설정 로그 전체 데이터를 줄바꿈 기준으로 한 문장씩 originalLogLines 배열에 담는다. flatMap을 통해 [LogModel]를 배열에 담을 때 2차원 배열이 1차원 배열이 되도록 리턴함 logDataArr에 LogModel을 따르는 배열을 모든 데이터를 담는다. ### 질문 - 정규표현식에 양쪽 #은 뭔가요? -> #사이에 문자열을 바로 넣으면 \\을 쓰지 않고 인식할 수 있습니다. ## Saturn ### 설계의도 - main.js에 사용자 입력을 반복해서 받고 입력값에 따라 알맞은 메서드를 호출하는 코드를 작성한다. - data.js의 객체 내부에 로그 파일의 내용을 저장할 알맞은 데이터구조를 삽입하고, 데이터를 필터링할 메서드와 정렬하는 메서드를 넣어준다. ### 구현방식 #### <main.js> - while(true)를 사용하여 사용자 입력을 반복적으로 받을 수 있게 한다. - 사용자가 입력한 문자열을 배열로 바꾸어준 뒤 구조분해 할당하여 변수로 저장한다. - switch를 이용해 명령의 종류에 알맞은 메서드를 호출하고, 해당 메서드에 필요한 매개변수를 전달한다. - try catch를 이용해 에러가 발생해도 프로그램이 종료되지 않고 계속해서 입력을 받게 한다. #### <data.js> - fs.readFileSync를 이용해 로그 파일의 내용을 문자열로 불러오고, 해당 내용은 \n과 \t로 잘라 배열 안에 객체가 들어가는 형태로 데이터 구조를 설정하였다. - filter 메서드: 로그 요소와 요소의 value를 매개변수로 받아와 filter메서드를 이용하여 조건에 맞는 객체만 반환한다. 반환된 배열의 길이를 통해 조건에 맞는 로그의 개수를 출력한다. - sort 메서드: 로그 요소를 매개변수로 받아와 해당 요소에 해당하는 값들의 크기를 비교한 후 -1, 1, 0 셋 중 하나의 값을 반환하는 방식으로 정렬한다. ### 질문 - while(true)를 종료할 방법은? - 외부에 true를 변수로 저장하고 해당 변수를 while 내부에 담아준다. 사용자가 종료 메시지를 입력하면 true가 저장된 변수를 false로 바꿔준다.