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


2. 학습 후기 700자 이상 (공백 제외)
오늘은 챕터7의 병렬처리 웹크롤러 만들기에서 간단하게 개요와 시스템 정보 확인을 하는 것과 매개변수 입력 받기 까지 알아보았다.
사실 웹크롤러라고 해서 웹크롤링과 관련된 건가 싶었는데 병렬처리라는 단어가 또 붙어서 어떤 내용인가 궁금했었다. 내가 알고 있던 웹크롤링을 하는 줄 알았는데 그것보다는 파이썬으로 시스템, 운영처리, 메모리 멀티CPU 병렬처리하는 방법을 배운다. 이거랑 크롤링이 무슨 상관인가 싶어서 그것에 관련된 이야기는 없어서 구글 검색을 통해 알아보았다.
크롤링(crawling) 은 웹 페이지를 그대로 가져와서 거기서 데이터를 추출해 내는 행위다. 크롤링하는 소프트웨어는 크롤러(crawler)라고 부른다. 스크래핑과 햇갈릴 수 있는데, 크롤링은 동적으로 웹페이지를 돌아다니면서 수집하는 것을 말할다. 물론 실생활에서는 구분 없이 쓰는 경우가 많다. 그리고 구글 검색하다가 이 크롤링에 대해 아주 진지하고 심각하게 분통(?)을 터트리는 재미있는 블로그를 발견해서 참고할만하다고 느껴 링크를 남겨본다(https://velog.io/@mowinckel/%EC%9B%B9-%ED%81%AC%EB%A1%A4%EB%A7%81-I) 댓글까지 읽다보니 참 다양한 사람과 다양한 각도로 보는 생각이 많구나 싶다. 그리고 내가 배우는 초격차 패키지에서도 파트3에 웹 크롤링 프로젝트가 있는데 목차를 읽어보니 저기 블로그 주인께서 분통을 터트리는 내용과 비슷한 과정이 있어서 이번 챕터7 마무리가 되면 바로 파트3의 웹크롤링 프로젝트로 넘어갈 예정이다. 옛날부터 크롤링에 대해 관심은 많았지만 어느 날부터인가 엑셀로 하는 크롤링 뭐 이런것까지 나오길레 이제는 비개발자도 하는게 크롤링인가 하는 생각이 들었는데 무엇을 비판하고 느끼려고 해도 뭘해봐야 비판할 수 있으니 해당 과정을 보고 짧게나마 느낀 점을 간추려야겠다.
참고로 chatgpt에게 병렬처리 웹크롤러에 대해 물어본 답변은
병렬처리 웹 크롤러는 여러 개의 동시에 실행되는 작업을 이용하여 웹에서 데이터를 수집하는 크롤러(웹 스크레이퍼)입니다. 이 크롤러는 병렬 처리 기술을 사용하여 여러 작업을 동시에 실행함으로써 데이터 수집 속도를 향상시킵니다.
일반적으로 웹 크롤러는 웹 페이지를 방문하고 필요한 정보를 추출하는 프로그램입니다. 병렬 처리를 도입한 웹 크롤러는 여러 스레드, 프로세스, 또는 비동기 프로그래밍을 사용하여 여러 웹 페이지를 동시에 요청하고 데이터를 수집합니다.
이러한 병렬 처리 기술을 사용함으로써 단일 작업보다 효율적으로 웹 데이터를 크롤링할 수 있습니다. 그러나 주의가 필요한 부분도 있습니다. 웹사이트에서의 데이터 수집은 서버에 부하를 줄 수 있으므로, 로봇 배제 표준(robots.txt)을 준수하고 서버에 무리를 주지 않도록 주의해야 합니다. 또한, 크롤링한 데이터를 적절히 다루고 저장하는 것도 중요한 고려사항입니다.
다시 본론으로 들어와서 병렬처리 웹크롤러 만들기는 원하는 크롤링 목표 웹사이트가 있다면 싱글코어가 아닌 요즘 컴퓨터 성능에 맞도록 멀티코어로 멀티프로세싱 알고리즘을 통해 여러 작업을 실행해서 데이터 수집 속도를 향상시키고, 파이썬으로 만들 수 있는 간단한 라이브러리를 알아본다. 그렇게 해서 수집된 데이터를 원하는 정형 데이터로 가공(XML, 엑셀, JSON 등 표준데이터로 파싱)시킬 수 있다.
우리가 가진 시스템 사양을 확인하는 platform 정보들을 argparse와 multiprocessing 이라는 라이브러리를 통해 병렬 처리를 해주고 여러 프로세스를 동시에 실행해본다. 그 다음 크롤러를 이용해서 프로그램에서 일어나는 일을 알고 싶어 로그를 남기고 싶을 때 logging과 어떤 주기로 스케줄로 실행되는지 알 수 있게 하는 sched, 웹페이지에 있는 html 정보들을 가져와 다룰 때 requests를 다룬다.
먼저 시스템 정보 확인하는 platform 라이브러리는 실행하고자하는 프로그램이 시스템 요구사항을 만족하는지 사양 정보를 확인할 때 사용하는 모듈로 말그대로 확인용이다.
import platform 해서 현재 사용하는 디바이스 platform.system(), platform.version()을 알아본다.
OS : Windows
OS Version : 10.0.22631
나의 os 정보는 이렇게 뜨고 튜플 객체형 platform.uname()으로 확인해본다.
info = platform.uname()
uname_result(system='Windows', node='KOOK', release='10', version='10.0.22631', machine='AMD64')
위에서 튜플 객체로 저장한 info 변수에 프로세서를 넣어 CPU와 메모리도 확인해본다.
info.processor
'Intel64 Family 6 Model 154 Stepping 3, GenuineIntel'
os 라이브러리를 통해 cpu 코어 개수 확인해본다
import os
os.cpu_count()
16
psutil 을 사용하면 램사이즈를 알 수 있다.
import platform ,psutil
def printSystemInfor():
print('Process information :\t', platform.processor())
print('Process Architecture :\t', platform.machine())
print('CPU Cores :\t', os.cpu_count())
print('RAM Size :\t',str(round(psutil.virtual_memory().total / (1024.0 **3)))+"(GB)")
# Byte 단위라서 보기 쉽도록 1024를 3번 곱해서 kb -> mb -> gb로 바꾸어 준다.
printSystemInfor()
Process information : Intel64 Family 6 Model 154 Stepping 3, GenuineIntel
Process Architecture : AMD64
CPU Cores : 16
RAM Size : 8(GB)
여기까지 보기엔 영상내용이 너무 짧아서 매개변수 입력 받는 라이브러리까지 보았다.
일단 매개변수는 프로그램 명령행(cmd나 명령프롬프트, 터미널 등)에서 사용자로부터 입력 받는 값 (혹은 인자) 외부에서 입력 받는 값에 따라 프로그램 동작이 달라져야 할 경우 주로 사용한다고 되어있다.
sys.argv 라이브러리는 파이썬 스크립트로 전달한 명령행 매개변수를 처리할 때 사용하는 모듈로 list() 형식의 반환값을 사용하기 때문에 여러개의 인자를 다룰 때 편하다.
해당 라이브러리는 파이참을 통해 실습해보았다. 오랜만에 파이참을 꺼내니 약간 낯설었다.
해당 차수 py 파일 실행하고 터미널에서 해당 위치까지 이동을 위해 ls 명령어를 넣고 디렉토리가 나오면 해당 차수 이동을 위해 cd (체인지 디렉토리) part 입력 후 탭을 누르면 파이참이 자동적으로 첫번째 디렉토리 주소까지 반환해주게 된다.
이렇게 디렉토리를 따라서 하는 이유는 바로 경로복사를 할 수도 있지만 보통의 프로그램들은 영어에 적합화 되어 있어서 한글 경로를 그대로 복붙해서 불러올 경우에 오류가 생길 수 있기 때문이다.(스페이스나 특수문자도 마찬가지)
여기서 다시 ls해서 해당 폴더의 디렉토리 불러와지면 해당 경로에 맞게 cd ch07 탭 해주고(영상에선 폴더명이 강의자료 업로드에서 달라졌는지 ch가 생략 되어있었다)
그 다음 다시 ls 해주고 이번에는 python 03 으로 들어간다(디렉토리가 아닌 파일 자체를 선택해야하는데 여기서 03에도 ipynb과 py 파일 확장자가 있어서 주피터 노트북이 아닌 파이썬 파일 그대로 쓸거라서 python으로 입력)
여기서 탭 탭 탭 해주면 다음 파일로 넘어가진다. 이번 강의는 1번 실행하는 거라서 탭해주지 않고 03. 매개변수 입력 받기 - sys.argv, argparse (1) 그대로 사용한다. 강사님은 탭해서 넘겨진 것을 숫자 수정해서 경로 수정을 하였는데, 나는 보통 프로그래밍할때 shift를 넣으면 역실행 되는 것이 생각나서 shift + Tab 해봤더니 경로가 이전으로 돌아가졌다. 나름 꿀팁?!
(경로에서 숫자를 수정해서 적으니 오류 나는 것 같았다 그러니까 쉬프트 탭을 이용하도록!)
['.\\03. 매개변수 입력 받기 - sys.argv, argparse (1).py'] 과 같이 리스트가 반환되고 아무 작업을 하지 않았을때는 항상 첫번째 인수는 실행시킨 파일의 경로정보가 오게 된다. 즉 인덱스 [0]은 디폴트로 경로값이므로 실질적으로 인수를 적용하려면 [1] 부터 쓰면 된다. 해당 인수에 맞게 매개변수를 넣으면 된다.
다음 매개변수를 확인할 수 있는 argparse 라이브러리는 sys.argv 모듈과 마찬가지로 명령행 매개변수를 다룰 때 사용된다. sys.argv는 인자를 파싱하는 과정이 필요하며(위의 인덱스 기준으로 1, 2, 3 이런식으로) 이는 인자 별 예외처리가 필요함을 의미한다.(개발자의 경우는 이 인자가 무엇인지 알겠지만 사용자의 입장에서는 인덱스로 관리하고 인자들이 많아졌을때 따로 설명까지 해줘야한다) 즉 sys.argv의 불편한 부분을 아그파스의 경우는 인자를 입력받고, 파싱하고, 예외처리, 사용법 작성까지 자동으로 수행해주는 편리한 모듈이다. 그래서 아그파스를 더 많이 선호한다.
파이참에서 해당 경로의 아무런 값을 넣지않으면 error: the following arguments are required: X, Y 라고 아그먼츠가 필요하다는 예외처리도 자동적으로 해준다. (참고로 매개변수: parameter, argument : [컴퓨터] 독립 변수(變數), 인수(引數)라는 뜻이다. 참고로 인수는 또 매개변수라는 의미를 가진다. 그러니까 매개변수나 파라미터나 아그먼츠나 인수나 다 같은 뜻이라는? 대충 대충 의미를 제대로 인식하지 않고 영어와 한자를 쓰다보니 너무 헷갈려서 정리하고 감, 그리고 해당 강의 제목도 매개변수 입력받기로 아그먼츠 파생적인 라이브러리의 단어를 쓰니 그냥 인자(끌어올 수, 끌어올 그 무엇)라고 생각하자 나같이 영어를 어려워하고 한자도 어려운 사람은 이참에 프로그래밍 공부하면서 일거양득의 기회를?!)
아무튼 여기서 인자를 --help 또는 -h 해주면 친절하게 설명도 쓸 수 있다. (부가적인 기능을 써서 사용자에게 알려줄 수 있다)
(tip : 파이참 터미널에서 ↑ 위 화살표해주면 이전에 썼던 경로의 명령어를 그대로 가져온다.)
03. 필수 본문 내용
본 포스팅은 패스트캠퍼스 환급 챌린지 참여를 위해 작성하였습니다.
04. 필수 해시태그
#패스트캠퍼스 #직장인자기계발 #직장인공부 #환급챌린지 #패스트캠퍼스후기 #오공완
05. 필수 URL
패스트캠퍼스 [직장인 실무교육]
프로그래밍, 영상편집, UX/UI, 마케팅, 데이터 분석, 엑셀강의, The RED, 국비지원, 기업교육, 서비스 제공.
fastcampus.co.kr
[수강 강의 클립]
-Ch07. [시스템] N배 빠른 병렬처리 웹 크롤러 만들기
01. 프로젝트 개요
02. 시스템 정보 확인 - platform
03. 매개변수 입력 받기 - sys.argv, argparse
[※ 기타사항메모 ※]
{100% 환급챌린지 미션 가이드 참조 :
https://fastcampus.co.kr/event_online_challenge_2401_mission}
커리어 성장을 위한 최고의 실무교육 아카데미 | 패스트캠퍼스
성인 교육 서비스 기업, 패스트캠퍼스는 개인과 조직의 실질적인 '업(業)'의 성장을 돕고자 모든 종류의 교육 콘텐츠 서비스를 제공하는 대한민국 No. 1 교육 서비스 회사입니다.
fastcampus.co.kr