데이터 수집 - 1회차

Suhyeon Lee·2025년 1월 3일
0

라이브 세션

목록 보기
31/37

목표

데이터 수집에 관한 API 통신 및 크롤링 학습!
첫 번째로 API에 대해 알아보겠습니다.

  • API 통신의 개념 및 프로세스를 이해
  • 요청키(Payload Key) 발급
  • python을 통해 실습 진행


API 통신의 개념

API 통신이란 무엇일까요?

개념

  • API는 Application Programming Interface의 약자로, 소프트웨어 구성 요소가 서로 통신할 수 있게 하는 방식(메커니즘)
    • Interface?
      • 사물과 인간 사이의 경계에서 상호 간의 소통을 위해 만들어진 물리적 매개체나 프로토콜
        e.g. TV 리모콘 전원 버튼: 사람이 리모콘 버튼을 눌러 TV가 켜지도록 연결하는 매개체
        → 하드웨어(전원 버튼)를 누르면 소프트웨어(TV)
  • API 통신을 통해 기업에서 제공하는 다양한 데이터에 접근할 수 있음
    • 즉, API란 프로그램과 프로그램을 연결시켜주는 통신의 방법(통신규약)이라 생각할 수 있음

다음시간에 학습할 크롤링의 경우, ⚠️HTML 구조를 이해하고 있어야 한다는 점과, ⚠️법적 이슈(합법인가?)가 있을 수 있어 조심스러운 부분입니다.
크롤링 대비 API 통신은 payload KEY 값(통신키)을 기반으로 간단한 호출구문을 통해 데이터를 송신받을 수 있다는 점에서 보다 간편한 방식이라고 이해해 주시면 좋을 것 같습니다.

  • 은행 대출 vs 사채 대출 차이인가요?
    • 네ㅎㅎ 그렇죠! 크롤링은 나중에 사채가 될 수 있어요(기업 쪽에서 소송할 수 있음)
  • 오픈 API
    • 기업 내 데이터를 일반 사용자에게 공개하는 것을 의미

역할 및 특징

  1. 권한 관리

    • 많은 데이터가 적재(저장)되는 DB에 모든 사람들이 접근하면 보안상의 이슈가 생길 수 있음
    • API 는 이를 방지하기 위해 접근이 허용된 로컬에게만 권한을 부여하는 ‘중간관리자’ 역할을 수행
  2. 프로그램 간 (원활한) 통신 지원

    • 자칫 어려운 방식으로 데이터를 수집할 수 있는 부분을 키값을 통해 간편한 통신을 지원
    • 해당 키값에는 할당량(호출량)이 부여되고, 경우에 따라서는 할당량을 초과하는 경우 과금되는 경우도 있음
  3. 접속 표준화

    • DB에 접근하는 요청을 표준화 해줌

      • 즉, 규칙을 지정해 주는 것
    • 예시

      "1번과 2번 서버에서 매출데이터 최근 1년치 가져와줘"
      "1,2 서버 매출 2023-07-15~2024-07-14 가져와"

      • 위 두 문장은 같은 데이터를 의미하지만(같은 말이지만) 규칙성이 없어 처리에 어려움이 있음
      • 따라서 데이터 API 접근 시 규칙을 두는 것이 곧 API 표준화

종류

  • API 통신의 종류 4가지
    • 주로 허용 범위와 관련되어 있음
    1. Public API
      • 누구나 사용 가능한 공개 API
      • 열린데이터광장, 한국은행 API
    2. Private API
      • 사내에서 사용하는 API
    3. Partner API
      • 미리 정해놓은 사용자들만 쓰는 API
    4. Window API
      • 운영체제 대상 API

데이터 포맷

  • API 통신 이후 우리가 보게될 데이터의 형식: 주로 두 가지
    • JSON
      • JavaScript Object Notation의 약어
      • JavaScript에서 객체를 만들 때 사용하는 표현식
      • 웹브라우저상에서 작동하면서 데이터를 저장하거나 전송할 목적으로 디자인된 경량의 DATA 교환 형식
      • 작성구조가 매우 간단하고 타 프로그래밍언어에서도 용이하게 작성할 수 있다는 범용성 측면에서 강점을 가짐
    • XML
      • EXtensible Markup Language의 줄임말
      • 데이터베이스 상에서 데이터 필드값을 어떤 구조로 배치해 저장할 것인가를 정의
      • <> 안에 특정 요소를 넣으면 해당 태그 안의 내용은 데이터베이스의 구조상 해당 요소의 데이터필드값으로 정의가 가능하다는 의미를 가지고 있음
  • XML은 태그를 기반으로 데이터값의 구조적 위치를 정의하는 반면, JSON은 단순히 중괄호({})에 데이터값을 일렬로 나열 후 각 데이터값마다 comma(,)로 구분을 짓는다는 차이점이 있음

Q. 왜 API는 미리 데이터를 데이터 프레임으로 저장하지 않나요?
A. HTTP 기반의 데이터를 뽑아 오는 것이기 때문에 데이터 프레임이 아닌 두 가지 형식을 취하게 된답니다.(개발언어의 표현식을 따라감)
Q. API 공급자 입장에선 API를 구축하는 것 자체가 비용일텐데 왜 단순 웹게시가 아닌 API 형식으로 데이터를 공유하는 것일까요?
A1. 회사 사정에 따라 다르긴 하지만 웹 게시보다 API가 더 싼 경우도 많아요!
옛날에는 데이터 공개를 쉬쉬했지만 요즘은 트렌드가 바뀌어서 공개한 데이터를 가지고 수익을 창출하는 경우도 많아졌습니다.(다양한 사용자에게 기회 제공 & 데이터를 더 가져가고 싶으면 돈을 내라)
제공된 API로 좋은 프로덕트를 만들면 협업 제안도 함 → 제공사 입장에서도 더 큰 수익을 노릴 수 있음
e.g. 노션 api를 가지고 사업을 만드는 회사들(상용화하는 회사들에게 권리를 일부 주장할 수 있습니다)이 엄청 많습니다.

  • 노션으로 만드는 블로그
  • 노션으로 만드는 뉴스레터
  • 노션으로 만드는 웹사이트 빌딩
    또한 기업 이미지를 위해 오픈하는 경우도 있어요!(긍정적 이미지)
    A2. 일부 데이터를 오픈하고자 할 때, 보안상의 이유로 API 방식으로 구성하기도 하는 듯 합니다.
    요청에 따라 반출되는 데이터를 오픈하는 기업 입장에서 제어하기가 용이합니다.(허가된 사용자에게, 정상적으로 요청되는 데이터만 반출되도록)


API 통신의 원리

데이터는 어떻게 주고받을 수 있을까요?

HTTP API 통신

주요 개념

  • 프로토콜(Protocal)
    • 메시지를 주고 받는 양식과 규칙의 체계
    • 통신 규약
  • 프로토콜(규칙) 종류
계층프로토콜(규칙, 약속) 이름
응용(Application)HTTP, SMTP, FTP, Telnet
표현(Presentation)ASCII, MPEG, JPEG, MIDI
전송(Transport)TCP, UDP, SPX
네트워크(Network)IP, IPX
데이터 링크(Data Link)Ethernet, Token Ring, FDDI, Apple Talk
  • 이러한 약속으로 인터넷에서는 TCP와 IP라는 프로토콜이 표준으로 사용되고 있음

🎯 IP 프로토콜: 한 컴퓨터에서 다른 컴퓨터까지 데이터를 전송하기 위한 절차와 방법을 정한 프로토콜
🎯 TCP 프로토콜: 네트워크의 혼잡도 등을 고려해 데이터의 흐름을 제어하고 데이터가 정확히 도착할 수 있게 하는 절차와 방법을 정한 프로토콜
→ 즉, 인터넷에서 정확한 목적지에 정확한 데이터를 전달하기 위해 가장 기본적인 프로토콜이 바로 TCP와 IP 프로토콜!
🎯HTTP 프로토콜: 웹 브라우저로 웹 사이트에 접속할 경우 따르는 규약에 대한 프로토콜

  • 프로토콜 주요 기능

    • 단편화
      • 송신 측에서 긴 데이터 블록을 손쉽게 전송할 수 있도록 크기가 똑같은 작은 블록으로 나누어 전송
    • 재합성
      • 수신 측에서 쪼개진 작은 데이터 블록을 재합성하여 원래의 메시지로 복원하는 기능
    • 캡슐화
      • 각 프로토콜에 적합한 데이터 블록을 만들려고 데이터에 정보를 추가하는 기능
  • HTTP

    • Hyper Text Transfer Protocol 의 약자
    • 웹 환경에서 정보를 주고받기 위한 프로토콜
      • 웹에 대한 통신이기 때문에 url이 계속 들어감!
  • HTTP API

    • HTTP를 이용해 프로그램끼리 소통하는 API
    • 우리가 흔히 보는 OPEN API, facebook API, kakao API 등의 대부분 API는 HTTP라는 통신 규칙으로 소통하는 API임
      • 즉, HTTP를 사용해서 서로 정해둔 스펙으로 데이터를 주고 받으며 통신하는 것

REST API 통신

  • REST
    • HTTP를 잘 활용하기 위한 원칙
      • HTTP를 조금 더 잘 쓰기 위해 개선한 것!
  • REST API
    • REST 원칙을 준수해 만든 API
  • 역사
    • 2000년도에 로이 필딩(Roy Fielding)의 박사학위 논문에서 최초로 소개
      • 로이 필딩: HTTP의 주요 저자 중 한 사람
    • 웹(HTTP) 설계의 우수성 대비 활용도가 낮은 점에 기반하여 HTTP의 장점을 최대한 활용할 수 있는 아키텍처로써 REST를 발표
      • REST API는 이 원칙을 준수해 만든 API
      • 네트워크 아키텍처 스타일 = 네트워크 자원을 정의하고 처리하는 방법
  • 특징
    • HTTP 통신 프로토콜을 따르면서, 아래 4가지 추가 규약을 따름
    1. 자원의 식별
    2. 메세지를 통한 리소스 조작
    3. 자기서술적 메세지
    4. 애플리케이션의 상태에 대한 엔진으로서 하이퍼미디어(HATEOAS)

API 통신 제반사항

  • API 통신 KEY 발급받기

    • 다양한 기업에서 API 통신을 통해 데이터를 제공
    • 기업은 일부 데이터를 제공함으로써 서비스의 영향력을 키울 수 있어 다소 민감한 정보(고객, 매출)를 제외한 데이터를 제공하는 추이를 보이고 있음
  • 주요 API 제공 사이트 목록

  • 공공데이터포털 API 통신예제를 실습하기 위한 준비

    1. 서울시청 사이트에서 회원가입을 진행
    2. 서울 열린데이터 광장에서 로그인을 진행한 뒤 서울시 인터넷 쇼핑몰 현황 데이터셋으로 접근
    3. OPEN API를 클릭한 뒤 인증키 신청을 진행
    4. 서비스 사용환경 및 사용 URL을 설정
      • 사용 URL은 localhost로 기입
        ※ localhost 찾기: 윈도우창에서 cmd창 실행 → ipconfig 입력 후 실행
    5. 발급받은 API 키 확인
    6. 서울시 인터넷 쇼핑몰 현황 화면으로 돌아가 샘플 URL을 확인
    7. JupyterNotebook 실행

python 준비: Request Library

  • REST API를 사용하기 위해 파이썬에서 requests 라이브러리를 사용
    • requests는 python으로 HTTP 호출 시 가장 많이 사용되는 라이브러리
  • 주요 함수 4가지
    • GET : 요청, 값 가져오기
    • POST : 생성, 액션
    • PUT : 수정, 덮어씌우기
    • DELETE : 삭제


Python 실습

python으로 직접 활용해보기

코드

# 라이브러리 설치 
# 최초 1회만 실행(이젠 아시죠?)
pip install requests

## 라이브러리 임포트
import requests
import pprint
import json
import pandas as pd

# 서울시 열린광장에서 복사해온 KEY 값과 URL 을 기입합니다.
# url 중 xml 부분을 json 으로 변경 -- *1
url = 'http://openapi.seoul.go.kr:8088/736567756761726439365543736d77/json/ServiceInternetShopInfo/1/5/'

# request library를 이용한 json file 로드 
response = requests.get(url).json()

# json 데이터 확인 
response

# json file 의 key 값 확인 (각 딕셔너리 값으로 이뤄져있음)
response['ServiceInternetShopInfo'].keys()

# json 파일의 row 데이터 로드 
response['ServiceInternetShopInfo']['row']

# json file 형식을 dataframe 으로 받아주기
raw1 = pd.DataFrame(response['ServiceInternetShopInfo']['row'])
raw1.head()
raw1.T
  • *1: 우리가 사용하고 싶은 데이터의 형식이 json이니까 xml 부분을 json으로 변경해줘야 함
    • 샘플 url
  • requests.get(url).json()
    • requests
      • requests라는 라이브러리에서
    • .get(url)
      • get 함수를 가져와 REST API 통신을 할 거임
      • 어떤 url을 가지고? 인증키가 부여된 나의 url
    • .json()
      • 해당 데이터셋을 .json()을 통해 JSON 형태로 받을 것

결과 화면

json 출력 화면

dataframe 출력 화면


profile
2 B R 0 2 B

0개의 댓글

관련 채용 정보