01. 제목
패스트캠퍼스 환급챌린지 40일차 미션 (3월 11일) :
파이썬으로 할 수 있는 모든 것 with 47개 프로젝트 초격차 패키지 Online 수강 후기
02. 포스팅 본문 (학습 일기) 가이드
1. 학습 인증샷 2장 이상 포함


2. 학습 후기 700자 이상 (공백 제외)
오늘은 로그 남기기의 logging 모듈과 원하는 시간에 작업 실행해주는 sched 라이브러리까지 배웠다.
프로그램에서 로그를 남기는 것은 중요한 부분이다. (윈도우의 경우 C드라이브에서 windows 폴더에 들어가면 여러가지 로그 파일이 있다. 실행파일이 아니라 텍스트 메모장으로 읽어도 되니 참고하자. 그런데 로그를 남기는 지 중요하다고 해놓고 어떻게 중요한지 자세히 설명을 안해주셔서 일단 챗지피티(가끔씩 나를 즐겁게도 화나게도 하는 나의 스승님)로 해당 부분 첨삭했다. 로깅 모듈에서 로그의 중요성을 간단하게 설명하자면 파이썬에선 로그를 남기기 위해 logging이라는 모듈을 사용하는데 프로그램이 실행되는 동안 일어나는 정보를 기록하고 관리하는 로깅 모듈은 로그는 파일 뿐만 아니라 소켓, 이메일, 콘솔 등 다양한 방법으로 출력이 가능하다.
print()문 출력과 차이점은?
콘솔창에 문자열을 출력하는 print 문을 사용해서 기록을 남기는 방법도 있지만, 실행 기록을 관리하거나 분석 시에는 활용이 어렵다. 로깅은 프로그램 진행 상황에 따라 로그를 레벨 별로 관리하거나 모듈별 별도의 기록을 남기는 등의 작업이 가능하다. 문제가 되는 부분을 원인 추적하고 문제가 발생되지 않더라도 어떻게 프로그램이 실행되는지에 대한 정보기입도 기록되는게 로그이다.
프린트문은 말그대로 출력만 해주는 것이고 로깅의 사용의 경우는 코드가 길지만 여러가지 목적, 옵션 추가가 가능하다.
import logging 으로 로그 생성 변수를 만들고 logger = logging.getLogger()
로그의 출력 기준 설정 logger.setLevel(logging.INFO) 해준다.
로그 형식 지정도 가능하다. formatter = logging.Formatter('%(asctime)s-%(name)s-%(levelname)s-%(message)s')
시간, 로그 레벨 이름, 출력되는 메세지 포멧하고 log 출력 handler를 이용한다.
파일로 만들려면 파일 핸들러를 사용한다. (이 부분이 사실 제일 좋았다. 실물(?)을 가지게 되어서?)
# log 파일 생성
file_handler = logging.FileHandler('sample1.log') # sample1.log 파일이 디렉토리안에 만들어진다.
file_handler.setFormatter(formatter)
logger.addHandler(file_handler)
내 해당 파일에 2024-03-11 18:50:12,657 - root - INFO - 함수가 시작되었습니다. 이런 메세지가 담긴 로그가 만들어진다.
위에서 잠시 언급된 로그 레벨을 알아보았다. 로그 레벨은 총 5단계로 설정한 레벨 이상만 출력 가능하도록 할 수 있다.
예를 들어 핸들러나 로거의 로그 레벨을 'INFO'로 설정하면 DEBUG 단계의 로그는 출력되지 않고 인포 이상의 로그만 출력되어 기록된다.
5단계는 DEBUG < INFO < WARNING < ERROR < CRITICAL 순서로 각 자의 사용법은
1단계 디버그는 디버깅 목적으로 사용
2단계 인포는 일반 정보를 출력할 목적으로 사용
3단계 워닝은 경고 정보를 출력할 목적으로(작은 문제) 사용
4단계 에러는 오류 정보를 출력할 목적으로(큰 문제) 사용
4단계 크리티컬은 아주 심각한 문제를 출력할 목적으로 사용
이렇게 된다.
쓰는 법은 역시나 import logging 해주고 로그 생성 변수를 만들고 logger = logging.getLogger()
로그의 출력 기준 설정 logger.setLevel(logging.INFO) 로 해준다. 이렇게 셋레벨 단계에서 로깅 다음에 단계를 설정해주면된다. 위처럼 같이 formatter = logging.Formatter('%(asctime)s-%(name)s-%(levelname)s-%(message)s')
시간, 로그 레벨 이름, 출력되는 메세지 포멧하고 log 출력 handler를 이용한다.
파일로 만들려면 파일 핸들러를 사용한다. 여기선 sample2.log 파일로 만들어준다. 그 다음 5단계 레벨을 각 각 변수에 넣고 로그를 출력하면 셋레벨에서 설정해준 INFO 이상의 단계만 출력된다.
이번에는 원하는 시간에 작업 실행해주는 두 가지 라이브러리가 있는데 sched과 schedule 라이브러리가 있다.
스케드는 내장 라이브러리라 손쉽게 사용가능하고 스케쥴은 외장 라이브러리로 설치해서 사용해야 하지만 여러가지 기능이 있어 더 편리한 부분이 많다.
먼저 스케드는 지정된 시간 간격으로 원하는 이벤트를 실행하게 하는 이벤트 스케줄러 표준 라이브러리로
사용 순서는
1. 스케줄러 객체를 생성
2. enter(실행 간격(초), 우선순위, 실행할 함수, 함수에 전달할 인자) 함수를 사용하여 실행할 이벤트 등록
3. run() 스케줄러 실행
다음은 schedule로 스케드와 마찬가지로 일정한 시간 간격으로 프로그램을 실행시켜주는 외장 라이브러리이고,
원하는 함수들을 원하는 실행 주기를 손쉽게 설정이 가능하다.
시간 관련 내장 라이브러리인 time과 주로 함께 사용된다.
외장 라이브러리라서 주피터에 실행시키려면 설치해줘야하는데 여기 강의에서는 Anaconda Prompt를 실행시켜서 conda activate fastcampus 입력해주면 fastcampus 가상환경을 잡아주고 여기서 pip install schedule 해주면 된다.(주피터에서 스케줄 schedule을 scehdule 철자가 오타가 나있었다) 그런데 그냥 주피터에서 !pip 선언해서 하고 설치하면 되지 않나?
!pip install schedule 코드 넣고 실행하니
---------------------------------------------------------------------------
ModuleNotFoundError Traceback (most recent call last)
Cell In[8], line 1
----> 1 import schedule # pip install scehdule
2 import time
ModuleNotFoundError: No module named 'schedule'
해당 오류가 뜬다. 분명 주피터에서 설치성공으로 아래처럼 뜨서
Successfully installed schedule-1.2.1
설치는 된 것 같은데 실행은 안되는 문제가 생기는데 이유는 알려고 하니 귀찮으므로 pass 그냥 콘다에 설치하자.
시분초 단위로 스케줄을 실행
스케줄.every(원하는간격입력).세컨즈나hour미닛등.do(실행할함수, '인자') # 이벤트 등록하고 스케줄러 실행하면 그 이벤트가 실행되는 원리
무한루프로 실행하고 나서 정지 시킨뒤 바로 다음 함수 실행시키지말고 이전에 등록된 데이터가 남아있으니 schedule.clear() 해서 스케줄러 초기화를 한 번 시켜준다.
schedule.every(5).seconds.do(message, '5초') # 이벤트 등록
schedule.every(1).minutes.do(message, '1분')
schedule.every(1).hour.do(message, '1시간')
# 1일에 한번씩 함수 실행
schedule.every(1).days.do(message, '1일')
# 1주에 한번씩 함수 실행
schedule.every(1).weeks.do(message, '1주')
# 매일 13시 30분에 함수 실행
schedule.every().day.at("13:30").do(message, '1일')
# 매일 "11:11:11"에 함수 실행
schedule.every().day.at("11:11:11").do(message, '1일')
# 매주 월요일 13시 30분에 함수 실행
schedule.every().monday.at("13:30").do(message, '1주')
이런식으로 주기나 특정한 시간에 맞게 입력해서 스케줄을 실행시킬 수 있다.
[참고] - Chat GPT : 로그를 남겨야 하는 이유에 대한 질의응답 -
로그를 남기는 것은 소프트웨어 개발 및 운영에서 중요한 활동 중 하나입니다. 다양한 이유로 로그를 남기는 것이 권장되며, 주요 이유는 다음과 같습니다:
1. **디버깅 및 오류 추적:**
- 소프트웨어에서 버그가 발생하거나 예외가 발생하면 로그를 통해 해당 상황을 추적할 수 있습니다. 로그에는 프로그램의 실행 흐름, 변수의 값, 오류 메시지 등이 기록되어 디버깅에 도움이 됩니다.
2. **성능 모니터링:**
- 로그는 소프트웨어의 성능을 모니터링하는 데 사용될 수 있습니다. 실행 시간, 리소스 사용량, 데이터베이스 쿼리 시간 등의 정보를 로그로 남겨서 성능 개선에 도움이 됩니다.
3. **보안 감사:**
- 로그는 시스템에서 발생하는 활동을 기록하므로 보안 이벤트를 추적하고 감사할 수 있습니다. 로그를 통해 불법적인 액세스, 보안 위협, 인가되지 않은 활동 등을 탐지할 수 있습니다.
4. **사용자 행동 및 트랜잭션 추적:**
- 사용자의 행동과 액션을 로그에 남겨서 어떤 기능이 가장 많이 사용되는지, 사용자의 패턴을 파악할 수 있습니다. 또한, 트랜잭션 로그는 금융이나 전자 상거래와 같이 중요한 작업에서 사용자의 활동을 추적하는 데 사용됩니다.
5. **시스템 이벤트 모니터링:**
- 시스템의 여러 이벤트를 로그로 남겨서 시스템 상태를 모니터링하고 예측할 수 있습니다. 이는 예방적인 조치를 취하고 시스템의 안정성을 유지하는 데 도움이 됩니다.
6. **운영 및 유지보수:**
- 로그는 소프트웨어가 운영 중에 어떻게 동작하는지에 대한 중요한 정보를 제공합니다. 이를 통해 운영팀은 시스템을 지속적으로 모니터링하고 필요한 유지보수 작업을 수행할 수 있습니다.
로그를 효과적으로 활용하면 시스템의 안정성을 높이고 문제를 신속하게 해결할 수 있습니다. 또한, 로그는 소프트웨어의 생명 주기 전반에 걸쳐 중요한 역할을 하는 도구 중 하나로 여겨집니다.
03. 필수 본문 내용
본 포스팅은 패스트캠퍼스 환급 챌린지 참여를 위해 작성하였습니다.
04. 필수 해시태그
#패스트캠퍼스 #직장인자기계발 #직장인공부 #환급챌린지 #패스트캠퍼스후기 #오공완
05. 필수 URL
패스트캠퍼스 [직장인 실무교육]
프로그래밍, 영상편집, UX/UI, 마케팅, 데이터 분석, 엑셀강의, The RED, 국비지원, 기업교육, 서비스 제공.
fastcampus.co.kr
[수강 강의 클립]
-Ch07. [시스템] N배 빠른 병렬처리 웹 크롤러 만들기
04. 디버깅의 기본! 로그 남기기 - logging
05. 원하는 시간에 작업 실행 - sched
[※ 기타사항메모 ※]
{100% 환급챌린지 미션 가이드 참조 :
https://fastcampus.co.kr/event_online_challenge_2401_mission}
커리어 성장을 위한 최고의 실무교육 아카데미 | 패스트캠퍼스
성인 교육 서비스 기업, 패스트캠퍼스는 개인과 조직의 실질적인 '업(業)'의 성장을 돕고자 모든 종류의 교육 콘텐츠 서비스를 제공하는 대한민국 No. 1 교육 서비스 회사입니다.
fastcampus.co.kr