실무 활용 프로젝트
1. 마크다운 파서 만들기
1.1 프로젝트 개요
마크다운 문서에서 제목, 링크, 강조 구문을 추출하고 HTML로 변환하는 파서를 만듭니다.
1.1.1 요구사항
- 헤더(h1~h6) 변환:
# 제목
→<h1>제목</h1>
- 링크 변환:
[텍스트](URL)
→<a href="URL">텍스트</a>
- 강조 구문 변환:
**텍스트**
→<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 요구사항
- IP 주소별 접속 횟수 카운트
- 시간대별 접속 통계
- 가장 많이 접속한 서비스 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"