[크롤링] 웹 - 서버와 클라이언트, 웹 구조
서론
'크롤링'이라는 말을 듣고 졸업프로젝트 때의 악몽이 떠올랐다.
인공지능과 ai는 학부과정으로 깔짝깔짝 듣고 웹 크롤링에 대해 아는 것이 하나도 없었는데
팀원들 중에 그나마 AI를 접해본 사람이 나였어서, 거의 맨땅에 헤딩 수준의 구글링 독학으로 크롤링을 했다.
그래서 크롤링을 배운다고 했을 때 반갑기도 하고 드디어 이걸 제대로 배우는 구나.. 싶어서 나름 기뻤다.
AI 분야는 많은 데이터를 가지고 작업을 수행하는 만큼, 데이터를 수집하는 것도 필요하다.
웹크롤링을 3일치 배운 지금 생각해보면, 내가 졸프 때 했던 크롤링 방법은 여러가지 방법중에 selenium 을 이용한 방법이었다.
본격적인 크롤링을 배우기 전에 웹에 대해 알아보았다.
웹 구조
웹 크롤링이 웹에서 데이터를 긁어오는 것인 만큼,
웹이 어떻게 이루어져있고, 서버와 클라이언트가 어떤 방식으로 데이터를 주고 받는지를 이해해야 한다.
서버와 클라이언트
- 클라이언트는 브라우저를 사용해 서버에 데이터를 요청하는 컴퓨터이고,
- 서버는 클라이언트가 데이터를 요청할 때 그 요청에 따라 데이터를 전송하는 컴퓨터이다.
URL
- URL은 Uniform Resource Locator의 약자로,
- protocol, domain, port, path, page, query, fragment 등으로 이루어져 있다.
- 예시 : http://news.naver.com:80/main/read.nhn?mode=LSD&mid=shm&sid1=105&oid=001&aid=0009847211#da_727145
- https:// - 프로토콜
프로토콜은 데이터를 주고받을 때 '001은 A를 의미해' 이런 것들이 정해져있는 규칙이다. - news - sub domain
naver.com - domain
도메인은, 브라우저에서 서버컴퓨터에 데이터를 요청할 때 그 서버 컴퓨터를 찾아야 하는데, 그 때 도메인을 이용해 찾는다.
(도메인을 IP주소로 매핑해 찾는다.) - 80 - port (어떤 프로그램으로 데이터 전송할 지 알게 함)
서버 컴퓨터에 도착을 했을 때 포트 번호가 80이라면 웹 어플리케이션을 찾는다.
보통 포트 번호가 80이면 web application, 3306이면 DB프로그램이다. (http의 경우)
프로토콜이 다르면 포트번호를 다르게 사용한다. (http는 WA가 80, https는 WA가 443) - /main/ - path
서버 컴퓨터 내 경로를 말한다. - read.nhn - page
서버 컴퓨터 내 파일을 말한다. - ?mode=LSD&mid=shm&sid1=105&oid=001&aid=0009847211 - query
전송한 데이터를 말한다. - #da_727145 - fragment
전체 document는 긴데, 특정 위치로 이동해서 화면에 출력한다. (카테고리를 클릭하면 거기로 이동하는 것처럼)
- https:// - 프로토콜
서버-클라이언트 소통 그림
Get과 Post
클라이언트에서 서버에게 데이터를 요청하는 방식에는 4가지가 있다.
그 중 2가지가 get과 post이다.
- Get
- url에 데이터가 포함된다. (데이터가 노출)
- 길이 제한이 있음
- Post
- Body에 데이터가 포함된다. (데이터가 숨겨짐)
클라이언트가 서버에게 'a=100' 이라는 정보를 요청한다고 하자.
그럴 때 get 방식은 url 안에 ______?a=100 과 같은 방법으로 요청하고,
post 방식은 패킷(데이터 전송 단위, url도 들어있고 body도 들어있음) 속 body에 a=100을 숨겨서 보낸다.
정적 웹과 동적 웹
- 정적 웹 : 서버에서 고정된 html 파일을 그대로 response한다.
- 페이지 데이터가 변경되려면 url이 변화되던가 새로고침 버튼을 눌러야 한다.
- response 시 html 포맷의 데이터를 받아온다.
- 동적 웹 : 서버 측 어플리케이션 엔진 (WAS : Web Application Service)이 html을 만들어서 response한다.
- url 변화 없이 페이지 데이터 변경이 가능하다.
- response 시 json 포맷의 데이터를 받아온다.
인터넷
- 인터넷은 컴퓨터로 연결하여 TCP/IP(Transmission Control Protocol/Internet Protocol)라는 통신 프로토콜을 사용해 정보를 주고받는 컴퓨터 네트워크로, 컴퓨터와 컴퓨터 사이에 데이터를 주고받도록 도움을 준다.
- 해저케이블을 이용해 전세계 서버에 접속하여 인터넷을 사용하고 있다.
- 스타링크(위성으로 데이터를 주고 받음) 서비스가 상용화된다면 해저케이블이 없어도 미국과 소통이 가능하다.
- 예시 - 서울에서 미국으로 소통
서울 공유기 - kt 사설망 - 한전 back bone - 부산 - 해저케이블 - 미국
돌아올 때도 마찬가지
OSI 7 Layer
- Open Systems Interconnection Reference Model의 약자
- 국제 표준화 기구(ISO)에서 개발한 모델로,
컴퓨터 네트워크 프로토콜 디자인과 통신을 계층으로 나누어 설명한 것이다. - 하위 계층으로 갈 수록 페이로드가 증가한다.
클라이언트에서 서버로 보내고자 한 데이터는 맨 위 3개의 계층이라고 보면 된다.
하지만 그 데이터만 가지고는 서버까지 도달할 수 없으니까, 프로토콜도 추가되고, ip도 추가되고 하면서 실제로 보내지는 데이터의 길이가 길어진다.
쿠키, 세션, 캐시
쿠키
- 클라이언트에 저장하는 문자열 데이터로, 도메인 별로 따로 로컬에 저장한다.
- 예) 로그인 정보, 내가 봤던 상품 정보, 팝업 다시보지 않기
- 하나의 클라이언트에 300개, 도메인당 20개, 쿠키 하나 당 4바이트 차지
세션
- 클라이언트와 서버의 연결 정보를 말한다.
- 서버에 저장하는 객체 데이터로, 브라우저와 연결을 하면 세션 아이디를 만든다.
- 세션아이디를 쿠키에 저장함으로 로그인 연결을 유지한다.
- 같은 브라우저로 같은 서버에 접속하면 세션 아이디가 같아서,
로그인 연결 정보와 같은 것에 이용된다.
캐시
- 클라이언트나 서버의 메모리에 저장해 빠르게 데이터를 가져오는 목적의 저장소이다.
- 데이터를 하드디스크에서 가져오려면 SSD->RAM->CPU를 거쳐야 하는데, 속도를 빠르게 하려고 캐시를 사용한다.
- 속도는 빠르지만 공간은 좁다.
쿠키는 데이터가 브라우저에 저장해 SSD에 저장하지만, 캐시는 RAM에 저장해서 속도가 빠르다.
HTTP Status Code
- 200번대 : 성공
- 300번대 : redirection (브라우저 캐시)
- 요청해서 html을 가져왔는데, 다시 동일한 html을 요청할 때, 갖고 있는 걸 띄울 때 뜨는 코드
- 400번대 : 페이지 없음 (request error), 보통 url 잘 못 기입했을 때
- 500번대 : 서버 에러
웹 언어와 프레임워크
- 클라이언트 => publisher / front-end
- HTML : 레이아웃 등 화면을 구성하는 언어
- CSS : style - 글자크키, 테두리 두께 등
- Javascript : 이벤트 - 버튼 클릭, 스크롤 내림, 마우스 포커스 등
- 서버 => back-end
- 파이썬 : Django, Flask
- 자바 : Spring
- Ruby : Rails
- Javascipt : Node.js (Express)
- Scala - Play
스크랩핑 / 크롤링 / 스파이더 / 봇
- Scraping : 데이터를 수집하는 작업
- Crawling : 여러 페이지의 특정 데이터들을 수집하고 분류하는 작업
(스크래핑을 여러 페이지를 해, 분류함) - Spider / Web Crawler : 웹 데이터를 수집하는 소프트웨어
- Bot : 인터넷 상에서 자동화된 작업을 실행하는 소프트웨어
ex) 구글 봇 - 구글 봇이 각기 다른 사이트에서 정보를 수집해 구글 DB에 저장한다. 그리고 구글 서버를 통해 검색 엔진을 제공한다.