버튼 수집상

[FastAPI] 인트라넷 앱을 위한 크롤링 API 만들기 - 0. 소개 본문

TIL - Python

[FastAPI] 인트라넷 앱을 위한 크롤링 API 만들기 - 0. 소개

cocokaribou 2024. 2. 13. 11:19

배경

인트라넷을 앱으로 만드는 내부 프로젝트가 착수됐다.

 

인트라넷은 정적문서로 만들어진 오래된 웹사이트라, 앱-웹을 연동시키는 API를 새로 만들어야 했다.

웹팀이 API를 만드는 동안, 앱팀은 UI 및 신기능 테스트를 위해 데모앱을 만들어보기로 했다.

그런데 빈 껍데기 앱을 만들자니 아무래도 허전하여, 필요에 맞게 간단한 API를 우선 직접 만들기로 한다.

 

✅FastAPI란?

경량화된 API 서버 만들기에 최적화된 파이썬 웹 프레임워크.

Swagger API 문서화 지원.

 

📝왜 크롤링 API를 만들었나?

1. 데모 앱에 필요한 최소한의 데이터를 읽어오는 API가 필요했다.
2. 회사 내부 DB 읽기 권한이 없어서 크롤링으로 구현했다.
3. Java와 달리 Python은 스크립트 언어라서 컴파일된 실행파일(ex: jar 파일) 올리지 않고 수정사항을 빠르게 반영시킬 수 있다.

(현직회사 웹팀은 Java Spring Boot를 사용한다.)

 

📦웹서버 스펙

클라우드 환경 AWS EC2 ubuntu
웹 서버 uvicorn (비동기 서버)
웹 프레임워크 FastAPI
스크래퍼 Selenium
크롬 브라우저 버전 110.0.5481.177

 

참고1)

정말 당연하지만 몰랐던 것:

로컬머신과 똑같이 ec2 ubuntu에도 크롬 브라우저를 깔아야 selenium이 돌아간다.

설치는 이 블로그를 참고했다.

 

참고2)

셀레니움을 쓴 이유는 웹문서와 상호작용할 일이 있어서다. (ex. 클릭)

그런데 상호작용 후에 필요한 웹 요소를 찾을 때는 BeautifulSoup 같은 파서를 함께 쓰는 경우가 많다고 한다.

현재 셀레니움으로 원하는 웹 요소를 찾는 코드는 썩 직관적이지 않아서 수정을 고려중.

 

⚙️EC2 내부 세션

  • SSH 터미널 세션
    • 사용자가 EC2에 접속하여 명령을 실행하는 터미널 세션.
    • 프라이빗 키로 접속한다.
  • Screen 세션
    • 백그라운드에서 FastAPI 애플리케이션(Uvicorn)을 실행.
    • SSH 접속 종료 후에도 세션을 유지하기 위함.
  • Selenium 프로세스
    • FastAPI 내부에서 별도의 프로세스로 Selenium 실행.

 

후속글에서 이어서 적겠다.

 

728x90