문제 정의
BeautifulSoup을 이용한 Web Scrapping의 경우는 Dynamic Web의 경우, 동작하지 않는 경우가 많다. 이럴 경우, 실재 Web Browser를 이용한 것과 동일하게 Web Scrapping을 하는 방법이 있다. Selenium이다.
하지만, (1)에서 살펴 본것과 같이 Synology NAS에서는 X11 GUI가 없다. 그래서, Selenium을 쓰기 어렵다. 필자의 경우, Docker를 써보지 못해서 난이도가 높았다. 그래서, 다음과 같이 Prompting을 하고 필요한 절차를 작게 나누어 도전해보고자 한다. 이를 통해서, 여러 학습이 이루어 질 것으로 기대한다.
"Synology NAS에 Docker를 적용하여 나중에는 Selenium을 사용해서 Web Scrapping을 하려고해. 내가 Docker에 대해서는 아주 초보자여서 몇가지 단계를 나눠서 실행해 보고 이해도를 높이고 싶어 어떤 절차로 나눠서 하는 것이 좋을지 제안해줘."
Docker 학습 단계 제안
Synology NAS에서 Docker를 이용해 Selenium 기반 웹 스크래핑 환경을 구성하고자 한다면, 아래와 같이 단계를 나눠서 진행하는 것이 좋습니다. 각 단계는 개별적으로 실습하며 Docker에 대한 이해를 점차 높이는 구조로 구성했습니다:
1단계: Docker 기본 이해 및 Synology에서 사용법 익히기
- Synology DSM에서 Docker 패키지 설치
- Docker GUI로 간단한 이미지 다운로드 및 컨테이너 실행 (예:
hello-world,nginx) - 컨테이너의 시작, 중지, 삭제 실습
- 볼륨과 포트 매핑 개념 익히기
실습 예시:
docker run -d -p 8080:80 nginx
브라우저에서 NAS_IP:8080으로 접속해 nginx 테스트
2단계: Python 실행 환경 구성
- Python 실행 가능한 Docker 이미지(Python 3.x) 다운로드
- 로컬 폴더를 컨테이너에 마운트해서 코드 실행
- 간단한
requests,beautifulsoup4기반 웹 크롤링 스크립트 실행해 보기
실습 예시:
docker run -it -v /volume1/docker/scraper:/app python:3.10 bash cd /app && python simple_scraper.py
3단계: Selenium 및 Headless 브라우저 환경 구성
- Selenium + Chromium (또는 Firefox) 기반의 Docker 이미지 사용
- 웹 페이지의 JavaScript 렌더링 후 데이터 추출 테스트
- Headless 모드 동작 확인 (
selenium/standalone-chrome등 사용)
실습 예시:
docker run -d -p 4444:4444 --shm-size="2g" selenium/standalone-chrome
- 로컬에서 Python 코드로 Selenium Remote WebDriver로 접속하여 테스트
4단계: NAS 내부에서 Python 코드와 Selenium 연동
- NAS에 설치된 Python 환경에서 Selenium 서버(Docker 컨테이너)로 연결
- 컨테이너 간 네트워크 이해 (bridge, host, custom network)
- 내부적으로 자동 크롤링 스케줄링 구성 (예:
cron,watchtower,supervisord)
5단계: 결과 저장 및 자동화
- 크롤링 결과를 NAS의 공유 폴더에 저장 (CSV/Markdown)
- 로그 파일 관리 및 실패 시 재시도 처리 추가
- 필요 시 이메일/텔레그램/카카오톡으로 알림 전송 기능 추가
6단계: 보안 및 관리 최적화
- Docker Compose 사용해 환경 설정 자동화
- selenium-chrome에 인증서 문제 해결 및 User-Agent 변경 등 고급 설정
- Docker 컨테이너 백업 및 업데이트 전략 이해 (
watchtower등 활용)
참고 문헌
'Agentic Coding' 카테고리의 다른 글
| GUI 없는 NAS에서 Selenium Docker로 단계별 도전기: 3, 4단계 (2) | 2025.07.23 |
|---|---|
| GUI 없는 NAS에서 Selenium Docker로 단계별 도전기: 1, 2단계 (2) | 2025.07.16 |
| 앱 사용 이력을 정확히 추적하는 법: Android에서 UsageEvents 분석기 만들기 (3) | 2025.06.25 |
| AI 시대의 학습: 자비스와 간달프 사이에서 (5) | 2025.06.24 |
| 기술 덕후의 아침 루틴 만들기: Synology, Python, Obsidian 연동기 (3) | 2025.06.18 |