슬라이스 로그 필터 챌린지

GolangBeginner
지금 연습하기

소개

이번 챌린지에서는 관련 로그 메시지를 처리하고 추출하는 슬라이스 기반 로그 필터링 기능을 개발합니다. 급변하는 사이버 보안 분야에서 잠재적인 보안 위협을 식별하기 위해서는 효율적인 로그 필터링이 매우 중요합니다. 여러분의 목표는 주어진 키워드를 기반으로 로그 메시지를 필터링하는 filterLogs 함수를 구현하는 것입니다. 이 함수는 대소문자를 구분해야 하며, 빈 슬라이스나 빈 키워드가 입력되었을 때도 안정적으로 동작해야 합니다. 또한, 타임스탬프나 기타 메타데이터를 제외하고 오직 메시지 내용만 반환해야 합니다.

이 콘텐츠는 챌린지 (Challenge) 입니다. 가이드 실습 (Guided Lab) 과 달리, 단계별 지침을 따르는 것이 아니라 스스로의 힘으로 과제를 해결해야 합니다. 챌린지는 보통 난이도가 조금 있는 편입니다. 해결이 어렵다면 Labby 와 상의하거나 모범 답안을 확인해 보세요. 통계 데이터에 따르면 이 챌린지는 초급 수준이며, 통과율은 96%, 학습자 만족도는 88%입니다.

슬라이스 로그 필터 함수 구현

슬라이스 기반의 로그 필터링 기능을 개발하여 특정 키워드에 해당하는 로그 메시지 내용 (타임스탬프 제외) 만 추출하세요.

과제

  • 로그 엔트리 슬라이스와 키워드를 매개변수로 받는 filterLogs 함수를 구현합니다.
  • 이 함수는 지정된 키워드를 포함하는 로그 엔트리에서 메시지 내용만 추출하여 새로운 슬라이스에 담아 반환해야 합니다.
  • 함수는 대소문자를 엄격히 구분해야 합니다.
  • Go 의 슬라이스 연산을 사용하여 로그 엔트리를 필터링하고 처리하세요.
  • 빈 슬라이스나 빈 키워드가 들어올 경우를 적절히 처리하세요.

요구 사항

  • ~/project/logfilter.go 파일에 코드를 작성하세요.
  • 함수는 원본 슬라이스를 수정해서는 안 되며, 처리된 결과가 담긴 새로운 슬라이스를 반환해야 합니다.
  • 필터링을 위해 외부 라이브러리를 사용하지 마세요.
  • 키워드 이후의 메시지 내용만 추출하여 반환해야 합니다 (예: "2023-06-15 ERROR: Disk is almost full" 대신 "Disk is almost full"만 반환).
  • 로그 처리를 위해 문자열 조작 함수를 사용하세요.

예시

다음과 같은 로그 엔트리가 주어졌을 때:

logs := []string{
    "2023-06-15 ERROR: Security breach detected",
    "2023-06-15 INFO: System startup completed",
    "2023-06-15 WARN: Unauthorized access attempt",
    "2023-06-15 ERROR: Disk is almost full",
    "2023-06-15 INFO: User login",
    "2023-06-15 WARN: System temperature too high",
}
go run logfilter.go

출력 결과:

Error Logs: [Security breach detected Disk is almost full]
Warning Logs: [Unauthorized access attempt System temperature too high]
Info Logs: [System startup completed User login]

힌트

  1. 로그 순회: for 루프를 사용하여 각 로그 엔트리를 확인하세요.
  2. 키워드 찾기: 로그 내에서 "<KEYWORD>: " 패턴을 찾으세요.
  3. 메시지 추출: 슬라이싱을 사용하여 키워드와 ": " 뒷부분만 가져오세요.
  4. 빈 입력 처리: 로그나 키워드가 비어 있으면 빈 슬라이스를 반환하세요.
  5. 결과 추가: append를 사용하여 일치하는 메시지를 새 슬라이스에 추가하세요.
✨ 솔루션 확인 및 연습

요약

요약하자면, 이번 챌린지에서는 주어진 키워드를 바탕으로 로그 문자열 슬라이스에서 메타데이터를 제외한 관련 메시지만 효율적으로 추출하는 filterLogs 함수를 구현해 보았습니다. 이 과정에서 대소문자 구분 처리, 빈 입력값에 대한 예외 처리 등을 고려하며 Go 의 슬라이스 및 문자열 조작 연산을 활용하는 숙련도를 높일 수 있었습니다.