WeniVooks

검색

정규표현식 톺아보기 with JavaScript and Python

실무 활용 프로젝트

1. 마크다운 파서 만들기

1.1 프로젝트 개요

마크다운 문서에서 제목, 링크, 강조 구문을 추출하고 HTML로 변환하는 파서를 만듭니다.

1.1.1 요구사항
  1. 헤더(h1~h6) 변환: # 제목<h1>제목</h1>
  2. 링크 변환: [텍스트](URL)<a href="URL">텍스트</a>
  3. 강조 구문 변환:
    • **텍스트**<strong>텍스트</strong>
    • *텍스트*<em>텍스트</em>
1.1.2 테스트용 입력 텍스트
# 메인 제목
## 부제목

이것은 [위니브](https://weniv.co.kr) 튜토리얼입니다.
**중요한** 내용과 *강조할* 내용이 있습니다.

### 세부 내용
추가 설명은 [여기](https://example.com)를 참고하세요.
# 메인 제목
## 부제목

이것은 [위니브](https://weniv.co.kr) 튜토리얼입니다.
**중요한** 내용과 *강조할* 내용이 있습니다.

### 세부 내용
추가 설명은 [여기](https://example.com)를 참고하세요.

2. 로그 파일 분석기

2.1 프로젝트 개요

웹 서버 로그 파일을 분석하여 주요 통계 정보를 추출하는 프로그램을 만듭니다.

2.1.1 요구사항
  1. IP 주소별 접속 횟수 카운트
  2. 시간대별 접속 통계
  3. 가장 많이 접속한 서비스 TOP 5
2.1.2 테스트용 로그 데이터
32.154.21.89 - - [29/Nov/2024:08:15:43 +0900] "GET /login HTTP/1.1" 200 4521 "https://sql.weniv.co.kr/main" "Mozilla/5.0"
187.234.121.55 - - [29/Nov/2024:08:16:12 +0900] "GET /course/python HTTP/1.1" 200 3267 "https://books.weniv.co.kr/" "Mozilla/5.0"
91.45.234.178 - - [29/Nov/2024:08:17:01 +0900] "POST /shorten HTTP/1.1" 201 342 "https://weniv.link/" "Chrome/120.0.0.0"
156.78.90.234 - - [29/Nov/2024:08:18:23 +0900] "GET /schedule HTTP/1.1" 200 2891 "https://time.weniv.co.kr/" "Safari/605.1.15"
211.89.145.67 - - [29/Nov/2024:08:19:45 +0900] "GET / HTTP/1.1" 200 1523 "https://weniv.co.kr" "Firefox/121.0"
167.89.234.90 - - [29/Nov/2024:08:20:11 +0900] "GET /dashboard HTTP/1.1" 200 5632 "https://canvas.weniv.co.kr/" "Edge/120.0.0.0"
45.178.234.89 - - [29/Nov/2024:08:21:34 +0900] "POST /query HTTP/1.1" 200 892 "https://sql.weniv.co.kr/editor" "Chrome/120.0.0.0"
123.45.167.89 - - [29/Nov/2024:08:22:56 +0900] "GET /book/python-basics HTTP/1.1" 200 4521 "https://books.weniv.co.kr/" "Firefox/121.0"
234.156.78.90 - - [29/Nov/2024:08:23:12 +0900] "GET /stats HTTP/1.1" 200 2341 "https://weniv.link/dashboard" "Safari/605.1.15"
89.234.156.78 - - [29/Nov/2024:08:24:45 +0900] "GET /calendar/2024 HTTP/1.1" 200 3421 "https://time.weniv.co.kr/" "Chrome/120.0.0.0"
178.90.234.156 - - [29/Nov/2024:08:25:23 +0900] "POST /contact HTTP/1.1" 200 567 "https://weniv.co.kr/about" "Edge/120.0.0.0"
90.234.156.78 - - [29/Nov/2024:08:26:34 +0900] "GET /assignments HTTP/1.1" 200 4532 "https://canvas.weniv.co.kr/" "Firefox/121.0"
145.67.89.234 - - [29/Nov/2024:08:27:56 +0900] "GET /practice HTTP/1.1" 200 3421 "https://sql.weniv.co.kr/learn" "Chrome/120.0.0.0"
67.89.234.156 - - [29/Nov/2024:08:28:12 +0900] "GET /ebook/javascript HTTP/1.1" 200 5632 "https://books.weniv.co.kr/" "Safari/605.1.15"
89.234.156.78 - - [29/Nov/2024:08:29:45 +0900] "POST /shorten/custom HTTP/1.1" 201 445 "https://weniv.link/" "Firefox/121.0"
234.156.78.90 - - [29/Nov/2024:08:30:23 +0900] "GET /reminder HTTP/1.1" 200 2341 "https://time.weniv.co.kr/" "Chrome/120.0.0.0"
156.78.90.234 - - [29/Nov/2024:08:31:34 +0900] "GET /courses HTTP/1.1" 200 6789 "https://weniv.co.kr/learning" "Edge/120.0.0.0"
78.90.234.156 - - [29/Nov/2024:08:32:56 +0900] "POST /submit HTTP/1.1" 200 892 "https://canvas.weniv.co.kr/" "Safari/605.1.15"
90.234.156.78 - - [29/Nov/2024:08:33:12 +0900] "GET /advanced HTTP/1.1" 200 4521 "https://sql.weniv.co.kr/courses" "Firefox/121.0"
234.156.78.90 - - [29/Nov/2024:08:34:45 +0900] "GET /shop HTTP/1.1" 200 3421 "https://books.weniv.co.kr/" "Chrome/120.0.0.0"
32.154.21.89 - - [29/Nov/2024:08:15:43 +0900] "GET /login HTTP/1.1" 200 4521 "https://sql.weniv.co.kr/main" "Mozilla/5.0"
187.234.121.55 - - [29/Nov/2024:08:16:12 +0900] "GET /course/python HTTP/1.1" 200 3267 "https://books.weniv.co.kr/" "Mozilla/5.0"
91.45.234.178 - - [29/Nov/2024:08:17:01 +0900] "POST /shorten HTTP/1.1" 201 342 "https://weniv.link/" "Chrome/120.0.0.0"
156.78.90.234 - - [29/Nov/2024:08:18:23 +0900] "GET /schedule HTTP/1.1" 200 2891 "https://time.weniv.co.kr/" "Safari/605.1.15"
211.89.145.67 - - [29/Nov/2024:08:19:45 +0900] "GET / HTTP/1.1" 200 1523 "https://weniv.co.kr" "Firefox/121.0"
167.89.234.90 - - [29/Nov/2024:08:20:11 +0900] "GET /dashboard HTTP/1.1" 200 5632 "https://canvas.weniv.co.kr/" "Edge/120.0.0.0"
45.178.234.89 - - [29/Nov/2024:08:21:34 +0900] "POST /query HTTP/1.1" 200 892 "https://sql.weniv.co.kr/editor" "Chrome/120.0.0.0"
123.45.167.89 - - [29/Nov/2024:08:22:56 +0900] "GET /book/python-basics HTTP/1.1" 200 4521 "https://books.weniv.co.kr/" "Firefox/121.0"
234.156.78.90 - - [29/Nov/2024:08:23:12 +0900] "GET /stats HTTP/1.1" 200 2341 "https://weniv.link/dashboard" "Safari/605.1.15"
89.234.156.78 - - [29/Nov/2024:08:24:45 +0900] "GET /calendar/2024 HTTP/1.1" 200 3421 "https://time.weniv.co.kr/" "Chrome/120.0.0.0"
178.90.234.156 - - [29/Nov/2024:08:25:23 +0900] "POST /contact HTTP/1.1" 200 567 "https://weniv.co.kr/about" "Edge/120.0.0.0"
90.234.156.78 - - [29/Nov/2024:08:26:34 +0900] "GET /assignments HTTP/1.1" 200 4532 "https://canvas.weniv.co.kr/" "Firefox/121.0"
145.67.89.234 - - [29/Nov/2024:08:27:56 +0900] "GET /practice HTTP/1.1" 200 3421 "https://sql.weniv.co.kr/learn" "Chrome/120.0.0.0"
67.89.234.156 - - [29/Nov/2024:08:28:12 +0900] "GET /ebook/javascript HTTP/1.1" 200 5632 "https://books.weniv.co.kr/" "Safari/605.1.15"
89.234.156.78 - - [29/Nov/2024:08:29:45 +0900] "POST /shorten/custom HTTP/1.1" 201 445 "https://weniv.link/" "Firefox/121.0"
234.156.78.90 - - [29/Nov/2024:08:30:23 +0900] "GET /reminder HTTP/1.1" 200 2341 "https://time.weniv.co.kr/" "Chrome/120.0.0.0"
156.78.90.234 - - [29/Nov/2024:08:31:34 +0900] "GET /courses HTTP/1.1" 200 6789 "https://weniv.co.kr/learning" "Edge/120.0.0.0"
78.90.234.156 - - [29/Nov/2024:08:32:56 +0900] "POST /submit HTTP/1.1" 200 892 "https://canvas.weniv.co.kr/" "Safari/605.1.15"
90.234.156.78 - - [29/Nov/2024:08:33:12 +0900] "GET /advanced HTTP/1.1" 200 4521 "https://sql.weniv.co.kr/courses" "Firefox/121.0"
234.156.78.90 - - [29/Nov/2024:08:34:45 +0900] "GET /shop HTTP/1.1" 200 3421 "https://books.weniv.co.kr/" "Chrome/120.0.0.0"
3장 실전 프로젝트3.2 프로젝트 해답