---
# System prepended metadata

title: Day10 피어세션

---

# 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로 바꿔준다.

