2025/20.개발산출물/02.개발문서(설계서,설치가이드) » IITP-DABT-DataCollector_서버설치및실행가이드.md
/* PDF 변환 시 페이지 머리글 및 번호 표시 */
@page {
@top-left {
content: "IITP DABT DataCollector 배포 설치 가이드";
font-size: 10pt;
color: #666;
font-family: Arial, sans-serif;
}
@bottom-center {
content: counter(page) " / " counter(pages);
font-size: 10pt;
color: #666;
font-family: Arial, sans-serif;
}
}
IITP DABT DataCollector
배포 실행 가이드
문서 버전: 1.0.0
작성일: 2025-11-27
(주)스위트케이
문서 History
| 버전 | 일자 | 작성자 | 변경 내용 |
|---|---|---|---|
| 1.0.0 | 2025-11-27 | (주)스위트케이 | 최초 작성 |
목차
- 개요 1.1. 문서 목적 1.2. 적용 범위
- 사전 요구사항 2.1. 시스템 요구사항 2.2. 사용자 계정
- 설치 절차 3.1. 디렉토리 구조 생성 3.2. 소스 코드 배포 3.3. Python 가상환경 설정 3.4. 의존성 패키지 설치
- 환경 설정 4.1. .env 파일 생성 4.2. 환경 변수 설정
- 실행 방법 5.1. 수동 실행 5.2. Cron을 이용한 자동 실행
- 실행 확인 및 검증 6.1. 실행 결과 확인 6.2. 로그 확인 6.3. 다운로드 파일 확인
- 문제 해결 7.1. 일반적인 오류 및 해결 방법 7.2. 권한 문제 7.3. 네트워크 문제
- 부록 A. 디렉토리 구조 B. 환경 변수 참고
1. 개요
1.1. 문서 목적
본 문서는 IITP DABT DataCollector를 Ubuntu 22.04 서버 환경에 설치하고 실행하는 방법을 상세히 안내합니다.
본 가이드를 따라 설치 및 설정을 완료하면, CSV 파일에 포함된 이미지 URL을 기반으로 대량의 이미지를 자동으로 다운로드할 수 있습니다.
1.2. 적용 범위
본 문서는 다음 환경을 기준으로 작성되었습니다:
- 운영체제: Ubuntu 22.04 LTS
- Python 버전: 3.8 이상
- 실행 계정: iitp-app
- 기본 설치 경로:
/home/iitp-app/IITP-DABT-DataCollector
2. 사전 요구사항
2.1. 시스템 요구사항
다음 사항을 확인하세요:
2.1.1. 운영체제 확인
lsb_release -a
예상 출력:
No LSB modules are available. Distributor ID: Ubuntu Description: Ubuntu 22.04.3 LTS Release: 22.04 Codename: jammy
2.1.2. Python 버전 확인
python3 --version
요구사항: Python 3.8 이상
예상 출력:
Python 3.10.12
Python이 설치되어 있지 않은 경우:
sudo apt update
sudo apt install python3 python3-venv python3-pip -y
2.1.3. 네트워크 연결 확인
외부 이미지 URL에 접근할 수 있어야 합니다:
ping -c 3 8.8.8.8
curl -I https://www.google.com
2.2. 사용자 계정
2.2.1. iitp-app 계정 확인
id iitp-app
예상 출력:
uid=1001(iitp-app) gid=1001(iitp-app) groups=1001(iitp-app)
계정이 없는 경우 생성:
sudo useradd -m -s /bin/bash iitp-app
sudo passwd iitp-app
2.2.2. 홈 디렉토리 확인
echo $HOME
예상 출력:
/home/iitp-app
3. 설치 절차
3.1. 디렉토리 구조 생성
iitp-app 계정으로 로그인한 후 다음 디렉토리 구조를 생성합니다:
# iitp-app 계정으로 로그인
su - iitp-app
# 기본 디렉토리 생성
mkdir -p /home/iitp-app/IITP-DABT-DataCollector
cd /home/iitp-app/IITP-DABT-DataCollector
# 하위 디렉토리 생성
mkdir -p data
mkdir -p downloads
mkdir -p logs
생성되는 디렉토리 구조:
/home/iitp-app/IITP-DABT-DataCollector/ ├── data/ # CSV 파일 저장 디렉토리 ├── downloads/ # 다운로드된 이미지 저장 디렉토리 └── logs/ # 로그 파일 저장 디렉토리
3.2. 소스 코드 배포
소스 코드를 /home/iitp-app/IITP-DABT-DataCollector 디렉토리에 배포합니다.
필수 파일:
downloader.pyanalyze_errors.pyrequirements.txtenv.sample
배포 방법은 Git 클론, 압축 파일 해제, 직접 복사 등 적절한 방법을 사용하세요.
권한 확인:
ls -la /home/iitp-app/IITP-DABT-DataCollector/
모든 파일의 소유자가 iitp-app인지 확인하세요.
3.3. Python 가상환경 설정
Python 가상환경을 생성하고 활성화합니다:
cd /home/iitp-app/IITP-DABT-DataCollector
# 가상환경 생성
python3 -m venv venv
# 가상환경 활성화
source venv/bin/activate
활성화 확인:
프롬프트 앞에 (venv)가 표시되어야 합니다:
(venv) iitp-app@server:~/IITP-DABT-DataCollector$
가상환경 비활성화:
deactivate
3.4. 의존성 패키지 설치
가상환경이 활성화된 상태에서 의존성 패키지를 설치합니다:
# pip 업그레이드 (선택사항)
pip install --upgrade pip
# 의존성 패키지 설치
pip install -r requirements.txt
설치되는 패키지:
requests==2.32.3python-dotenv==1.0.1
설치 확인:
pip list
예상 출력:
Package Version ------------- ------- pip 23.x.x python-dotenv 1.0.1 requests 2.32.3 setuptools x.x.x
4. 환경 설정
4.1. .env 파일 생성
env.sample 파일을 복사하여 .env 파일을 생성합니다:
cd /home/iitp-app/IITP-DABT-DataCollector
cp env.sample .env
4.2. 환경 변수 설정
.env 파일을 편집하여 환경 변수를 설정합니다:
nano .env
또는
vi .env
4.2.1. 필수 환경 변수
URL_CSV_PATH
처리할 CSV 파일의 전체 경로를 설정합니다:
URL_CSV_PATH=/home/iitp-app/IITP-DABT-DataCollector/data/images.csv
주의사항:
- 절대 경로를 사용하세요
- 파일 확장자는 반드시
.csv여야 합니다 - 파일이 실제로 존재하는지 확인하세요
파일 존재 확인:
ls -l /home/iitp-app/IITP-DABT-DataCollector/data/images.csv
4.2.2. 선택 환경 변수
LOG_LEVEL
로깅 레벨을 설정합니다:
LOG_LEVEL=INFO
가능한 값: DEBUG, INFO, WARNING, ERROR, CRITICAL
ROOT_DIR
다운로드한 이미지가 저장될 루트 디렉토리를 설정합니다:
ROOT_DIR=/home/iitp-app/IITP-DABT-DataCollector/downloads
기본값: 현재 작업 디렉토리의 downloads 폴더
주의사항:
- 절대 경로를 권장합니다
- 디렉토리가 존재하지 않으면 자동으로 생성됩니다
- 쓰기 권한이 있어야 합니다
THREADS
병렬 다운로드에 사용할 스레드 수를 설정합니다:
THREADS=8
권장값:
- 네트워크 대역폭이 충분한 경우: 8~16
- 서버 부하를 고려해야 하는 경우: 4~8
- 매우 느린 네트워크: 2~4
HEAD_CHECK
다운로드 전 HEAD 요청으로 이미지 타입을 사전 검증할지 여부:
HEAD_CHECK=false
가능한 값: true, false, 1, 0, yes, no, y, n, on, off
VERIFY_SSL
HTTPS 요청 시 SSL 인증서 검증 여부:
VERIFY_SSL=true
주의사항:
- 운영 환경에서는 반드시
true로 설정 권장 - 자체 서명 인증서를 사용하는 내부 서버의 경우에만
false고려
REQUEST_HEADERS_JSON
추가 HTTP 헤더를 JSON 형식으로 설정:
REQUEST_HEADERS_JSON={"Referer":"https://example.com"}
또는 여러 헤더:
REQUEST_HEADERS_JSON={"Referer":"https://example.com","User-Agent":"Mozilla/5.0"}
주의사항:
- JSON 형식이 올바른지 확인하세요
- 따옴표 이스케이프가 필요한 경우 주의하세요
4.2.3. .env 파일 예시
전체 .env 파일 예시:
# Logging level: DEBUG, INFO, WARNING, ERROR, CRITICAL
LOG_LEVEL=INFO
# Root directory where date-based folder (YYYY-MM-DD) will be created to store images
ROOT_DIR=/home/iitp-app/IITP-DABT-DataCollector/downloads
# Number of parallel download threads
THREADS=8
# Full path (including filename) to the CSV file with columns: No,Type,Title,Img-link
URL_CSV_PATH=/home/iitp-app/IITP-DABT-DataCollector/data/images.csv
# Optional: perform HTTP HEAD to check Content-Type is image/* before GET (true/false)
HEAD_CHECK=false
# Optional: verify SSL certificates on HTTPS requests (true/false). Set false only if necessary.
VERIFY_SSL=true
# Optional: extra request headers in JSON (e.g., Referer or custom User-Agent)
# Example: {"Referer":"https://example.com","User-Agent":"Mozilla/5.0"}
REQUEST_HEADERS_JSON=
4.2.4. 환경 변수 검증
설정한 환경 변수가 올바른지 확인합니다:
# 가상환경 활성화
source venv/bin/activate
# Python으로 환경 변수 확인 (테스트)
python3 -c "
import os
from dotenv import load_dotenv
load_dotenv()
print('URL_CSV_PATH:', os.getenv('URL_CSV_PATH'))
print('ROOT_DIR:', os.getenv('ROOT_DIR'))
print('THREADS:', os.getenv('THREADS'))
"
5. 실행 방법
5.1. 수동 실행
5.1.1. 기본 실행
가상환경을 활성화한 후 프로그램을 실행합니다:
# iitp-app 계정으로 로그인
su - iitp-app
# 작업 디렉토리로 이동
cd /home/iitp-app/IITP-DABT-DataCollector
# 가상환경 활성화
source venv/bin/activate
# 프로그램 실행
python3 downloader.py
5.1.2. 실행 예시
정상 실행 시 출력 예시:
2025-10-23 14:30:15,123 [INFO] CSV: /home/iitp-app/IITP-DABT-DataCollector/data/images.csv 2025-10-23 14:30:15,123 [INFO] Output dir: /home/iitp-app/IITP-DABT-DataCollector/downloads/2025-10-23 2025-10-23 14:30:15,123 [INFO] Log file: /home/iitp-app/IITP-DABT-DataCollector/logs/image_downloader_2025-10-23.log 2025-10-23 14:30:15,123 [INFO] Threads: 8 2025-10-23 14:30:15,123 [INFO] HEAD_CHECK: false 2025-10-23 14:30:15,123 [INFO] VERIFY_SSL: true 2025-10-23 14:30:16,456 [INFO] Saved: /home/iitp-app/IITP-DABT-DataCollector/downloads/2025-10-23/1.교육-제목_ 2025_11_27_14_30.jpg ... 2025-10-23 14:30:20,789 [INFO] Total links: 100 2025-10-23 14:30:20,789 [INFO] Succeeded: 95 2025-10-23 14:30:20,789 [INFO] Failed: 5 2025-10-23 14:30:20,789 [INFO] Error rows file: /home/iitp-app/IITP-DABT-DataCollector/data/images_errorRow.csv Total links: 100 Succeeded: 95 Failed: 5 Error rows file: /home/iitp-app/IITP-DABT-DataCollector/data/images_errorRow.csv
5.1.3. 실행 스크립트 생성 (선택사항)
반복 실행을 위해 실행 스크립트를 생성할 수 있습니다:
cat > /home/iitp-app/IITP-DABT-DataCollector/run.sh << 'EOF'
#!/bin/bash
cd /home/iitp-app/IITP-DABT-DataCollector
source venv/bin/activate
python3 downloader.py
deactivate
EOF
chmod +x /home/iitp-app/IITP-DABT-DataCollector/run.sh
실행:
/home/iitp-app/IITP-DABT-DataCollector/run.sh
5.2. Cron을 이용한 자동 실행
Cron을 사용하여 주기적으로 자동 실행하도록 설정할 수 있습니다.
5.2.1. Cron 설정
iitp-app 계정의 crontab을 편집합니다:
# iitp-app 계정으로 로그인
su - iitp-app
# crontab 편집
crontab -e
5.2.2. Cron 실행 스크립트 생성
Cron에서 사용할 실행 스크립트를 생성합니다:
cat > /home/iitp-app/IITP-DABT-DataCollector/run_cron.sh << 'EOF'
#!/bin/bash
# 환경 변수 설정
export PATH=/usr/local/bin:/usr/bin:/bin
cd /home/iitp-app/IITP-DABT-DataCollector
# 가상환경 활성화 및 실행
source venv/bin/activate
python3 downloader.py
deactivate
EOF
chmod +x /home/iitp-app/IITP-DABT-DataCollector/run_cron.sh
Cron에 등록:
# 매일 오전 2시 실행
0 2 * * * /home/iitp-app/IITP-DABT-DataCollector/run_cron.sh >> /home/iitp-app/IITP-DABT-DataCollector/logs/cron.log 2>&1
5.2.3. Cron 설정 확인
# 현재 등록된 cron 작업 확인
crontab -l
# Cron 서비스 상태 확인
sudo systemctl status cron
5.2.4. Cron 로그 확인
# Cron 실행 로그 확인
tail -f /home/iitp-app/IITP-DABT-DataCollector/logs/cron.log
# 시스템 Cron 로그 확인
sudo tail -f /var/log/syslog | grep CRON
6. 실행 확인 및 검증
6.1. 실행 결과 확인
프로그램 실행 후 콘솔 출력에서 다음 정보를 확인합니다:
- Total links: 처리된 총 URL 개수
- Succeeded: 성공한 다운로드 개수
- Failed: 실패한 다운로드 개수
- Error rows file: 에러 리포트 파일 경로 (실패한 경우)
정상 실행 예시:
Total links: 100 Succeeded: 95 Failed: 5 Error rows file: /home/iitp-app/IITP-DABT-DataCollector/data/images_errorRow.csv
6.2. 로그 확인
6.2.1. 로그 파일 위치
로그 파일은 다음 위치에 저장됩니다:
/home/iitp-app/IITP-DABT-DataCollector/logs/image_downloader_YYYY-MM-DD.log
6.2.2. 로그 확인 방법
# 최신 로그 파일 확인
ls -lt /home/iitp-app/IITP-DABT-DataCollector/logs/ | head -5
# 로그 파일 내용 확인
tail -100 /home/iitp-app/IITP-DABT-DataCollector/logs/image_downloader_2025-10-23.log
# 실시간 로그 모니터링
tail -f /home/iitp-app/IITP-DABT-DataCollector/logs/image_downloader_2025-10-23.log
6.2.3. 로그 레벨별 확인
INFO 레벨 로그 확인:
grep "\[INFO\]" /home/iitp-app/IITP-DABT-DataCollector/logs/image_downloader_2025-10-23.log
ERROR 레벨 로그 확인:
grep "\[ERROR\]" /home/iitp-app/IITP-DABT-DataCollector/logs/image_downloader_2025-10-23.log
6.3. 다운로드 파일 확인
6.3.1. 다운로드 디렉토리 확인
# 날짜별 폴더 확인
ls -la /home/iitp-app/IITP-DABT-DataCollector/downloads/
# 특정 날짜의 다운로드 파일 확인
ls -lh /home/iitp-app/IITP-DABT-DataCollector/downloads/2025-10-23/ | head -20
# 다운로드된 파일 개수 확인
find /home/iitp-app/IITP-DABT-DataCollector/downloads/2025-10-23/ -type f | wc -l
6.3.2. 파일 크기 확인
# 전체 다운로드 용량 확인
du -sh /home/iitp-app/IITP-DABT-DataCollector/downloads/2025-10-23/
# 파일별 크기 확인
ls -lhS /home/iitp-app/IITP-DABT-DataCollector/downloads/2025-10-23/ | head -10
6.3.3. 에러 리포트 확인
다운로드 실패가 있는 경우 에러 리포트를 확인합니다:
# 에러 리포트 파일 확인
ls -lh /home/iitp-app/IITP-DABT-DataCollector/data/*_errorRow.csv
# 에러 리포트 내용 확인
head -20 /home/iitp-app/IITP-DABT-DataCollector/data/images_errorRow.csv
에러 분석 유틸리티 실행:
cd /home/iitp-app/IITP-DABT-DataCollector
source venv/bin/activate
python3 analyze_errors.py /home/iitp-app/IITP-DABT-DataCollector/data/images_errorRow.csv
deactivate
7. 문제 해결
7.1. 일반적인 오류 및 해결 방법
7.1.1. 환경 변수 오류
오류 메시지:
Missing required env var: URL_CSV_PATH
해결 방법:
.env파일이 존재하는지 확인:ls -l /home/iitp-app/IITP-DABT-DataCollector/.env.env파일의URL_CSV_PATH값 확인:grep URL_CSV_PATH /home/iitp-app/IITP-DABT-DataCollector/.envCSV 파일 경로가 올바른지 확인:
ls -l /home/iitp-app/IITP-DABT-DataCollector/data/images.csv
7.1.2. CSV 파일 오류
오류 메시지:
ERROR: CSV headers must be exactly: No, Type, Title, Img-link; got: ...
해결 방법:
CSV 파일의 헤더 확인:
head -1 /home/iitp-app/IITP-DABT-DataCollector/data/images.csv헤더가 정확히
No,Type,Title,Img-link인지 확인 (대소문자 구분)CSV 파일 인코딩 확인:
file -i /home/iitp-app/IITP-DABT-DataCollector/data/images.csvUTF-8 또는 UTF-8 BOM이어야 합니다.
7.1.3. Python 모듈 오류
오류 메시지:
ModuleNotFoundError: No module named 'requests'
해결 방법:
가상환경이 활성화되어 있는지 확인:
which python3 # 출력: /home/iitp-app/IITP-DABT-DataCollector/venv/bin/python3의존성 패키지 재설치:
cd /home/iitp-app/IITP-DABT-DataCollector source venv/bin/activate pip install -r requirements.txt
7.2. 권한 문제
7.2.1. 디렉토리 쓰기 권한 오류
오류 메시지:
PermissionError: [Errno 13] Permission denied: '/home/iitp-app/IITP-DABT-DataCollector/downloads'
해결 방법:
디렉토리 소유권 확인:
ls -ld /home/iitp-app/IITP-DABT-DataCollector/downloads소유권 변경:
sudo chown -R iitp-app:iitp-app /home/iitp-app/IITP-DABT-DataCollector권한 확인:
chmod -R 755 /home/iitp-app/IITP-DABT-DataCollector
7.2.2. CSV 파일 읽기 권한 오류
해결 방법:
chmod 644 /home/iitp-app/IITP-DABT-DataCollector/data/images.csv
7.3. 네트워크 문제
7.3.1. 연결 타임아웃
오류 메시지:
Timeout Connection timeout
해결 방법:
네트워크 연결 확인:
ping -c 3 8.8.8.8 curl -I https://www.google.com방화벽 설정 확인:
sudo ufw status프록시 설정이 필요한 경우
.env파일에REQUEST_HEADERS_JSON추가
7.3.2. SSL 인증서 오류
오류 메시지:
SSL: CERTIFICATE_VERIFY_FAILED
해결 방법:
운영 환경에서는
VERIFY_SSL=true유지 권장내부 서버의 경우에만 임시로
VERIFY_SSL=false설정 (보안 위험)인증서 설치:
sudo apt install ca-certificates
8. 부록
A. 디렉토리 구조
설치 완료 후 전체 디렉토리 구조:
/home/iitp-app/IITP-DABT-DataCollector/ ├── venv/ # Python 가상환경 │ ├── bin/ │ ├── lib/ │ └── ... ├── data/ # CSV 파일 저장 디렉토리 │ ├── images.csv # 입력 CSV 파일 │ ├── images_errorRow.csv # 에러 리포트 (실패 시 생성) │ └── images_summary.csv # 에러 요약 (analyze_errors.py 실행 시 생성) ├── downloads/ # 다운로드된 이미지 저장 디렉토리 │ └── YYYY-MM-DD/ # 날짜별 폴더 │ └── *.jpg, *.png 등 # 다운로드된 이미지 파일 ├── logs/ # 로그 파일 저장 디렉토리 │ ├── image_downloader_YYYY-MM-DD.log │ └── cron.log # Cron 실행 로그 (선택사항) ├── downloader.py # 메인 다운로더 프로그램 ├── analyze_errors.py # 에러 분석 유틸리티 ├── requirements.txt # Python 패키지 의존성 ├── env.sample # 환경 변수 샘플 파일 ├── .env # 환경 변수 설정 파일 (생성 필요) ├── run.sh # 수동 실행 스크립트 (선택사항) └── run_cron.sh # Cron 실행 스크립트 (선택사항)
B. 환경 변수 참고
B.1. 환경 변수 요약
| 변수명 | 필수 | 기본값 | 설명 |
|---|---|---|---|
| URL_CSV_PATH | 예 | 없음 | 처리할 CSV 파일 경로 |
| LOG_LEVEL | 아니오 | INFO | 로깅 레벨 |
| ROOT_DIR | 아니오 | ./downloads | 이미지 저장 루트 디렉토리 |
| THREADS | 아니오 | 8 | 병렬 다운로드 스레드 수 |
| HEAD_CHECK | 아니오 | false | HEAD 요청 사전 검증 여부 |
| VERIFY_SSL | 아니오 | true | SSL 인증서 검증 여부 |
| REQUEST_HEADERS_JSON | 아니오 | 빈 문자열 | 추가 HTTP 헤더 (JSON 형식) |
B.2. .env 파일 템플릿
# Logging level: DEBUG, INFO, WARNING, ERROR, CRITICAL
LOG_LEVEL=INFO
# Root directory where date-based folder (YYYY-MM-DD) will be created to store images
ROOT_DIR=/home/iitp-app/IITP-DABT-DataCollector/downloads
# Number of parallel download threads
THREADS=8
# Full path (including filename) to the CSV file with columns: No,Type,Title,Img-link
URL_CSV_PATH=/home/iitp-app/IITP-DABT-DataCollector/data/images.csv
# Optional: perform HTTP HEAD to check Content-Type is image/* before GET (true/false)
HEAD_CHECK=false
# Optional: verify SSL certificates on HTTPS requests (true/false). Set false only if necessary.
VERIFY_SSL=true
# Optional: extra request headers in JSON (e.g., Referer or custom User-Agent)
# Example: {"Referer":"https://example.com","User-Agent":"Mozilla/5.0"}
REQUEST_HEADERS_JSON=
B.3. 유용한 명령어
환경 변수 확인:
cd /home/iitp-app/IITP-DABT-DataCollector
source venv/bin/activate
python3 -c "from dotenv import load_dotenv; import os; load_dotenv(); print('URL_CSV_PATH:', os.getenv('URL_CSV_PATH'))"
deactivate
디스크 사용량 확인:
du -sh /home/iitp-app/IITP-DABT-DataCollector/downloads/*
df -h /home/iitp-app/IITP-DABT-DataCollector
프로세스 확인:
ps aux | grep downloader.py
포트 및 네트워크 확인:
netstat -tuln | grep :80
curl -I https://example.com