스프링 프로젝트 진행 중 학교 웹사이트에서 필요한 정보들을 크롤링 할 필요가 생겼다.
jsoup으로 동적 웹페이지를 크롤링하기엔 한계가 있어 크롬드라이버와 셀레니움을 선택했다.
리눅스 서버에서 도커이미지의 스프링부트 프로젝트에서 크롤링을 한다.
1. 학교 서버를 이용하기에 공용서버에 크롬과 크롬드라이버를 설치하는데 생기는 부담
2. 서버에 크롬과 크롬드라이버를 설치한 후 도커 컨테이너에 마운트 시킬때 생기는 복잡함
3. 도커이미지에 크롬과 크롬드라이버를 포함시 항상 바뀌는 버전에 대한 최신화와 자동화 문제
공용 서버이기에 도커이미지에 크롬과 크롬드라이버을 포함시켜 컨테이너를 띄우기로 결정했다.
헤드리스 모드 등에 대한 셀레니움 내부 설정에 대한 설명은 생략한다.
FROM openjdk:17-jdk-slim
# 필요한 패키지 설치 및 로케일 설정
RUN apt-get update && \
apt-get install -y locales wget unzip && \
echo "ko_KR.UTF-8 UTF-8" > /etc/locale.gen && \
locale-gen && \
apt-get clean
# Locale 환경변수 설정
ENV LANG=ko_KR.UTF-8
ENV LANGUAGE=ko_KR:ko
ENV LC_ALL=ko_KR.UTF-8
# 크롬 브라우저 설치
RUN wget https://dl.google.com/linux/direct/google-chrome-stable_current_amd64.deb && \
apt-get install -y ./google-chrome-stable_current_amd64.deb && \
rm google-chrome-stable_current_amd64.deb
# 크롬 버전 확인 및 해당 버전에 맞는 크롬 드라이버 다운로드 및 설치
RUN CHROME_VERSION=$(google-chrome --version | grep -oP '[0-9]+\.[0-9]+\.[0-9]+\.[0-9]+') && \
echo "Chrome version: $CHROME_VERSION" && \
wget https://storage.googleapis.com/chrome-for-testing-public/$CHROME_VERSION/linux64/chromedriver-linux64.zip && \
unzip chromedriver-linux64.zip -d /usr/bin/ && \
rm chromedriver-linux64.zip
# 환경변수 PATH에 크롬 드라이버 경로 추가
ENV PATH="/usr/bin/chromedriver-linux64:${PATH}"
# 애플리케이션 JAR 파일 복사
COPY ./build/libs/inu-portal-0.0.1-SNAPSHOT.jar app.jar
# 애플리케이션 실행
ENTRYPOINT ["java", "-jar", "/app.jar"]
1. 이미지 선택 : 자바를 지원하는 여러가지 이미지들이 있지만, apt를 지원하는 이미지로 선택했다.
2. 환경설정 : zip파일을 해제하기 위한 기능들을 설치하고, 한글 설정 없이 그대로 실행시키는 경우 스프링의 로그를 열어보면 한글이 ????로 나오기에 설정해줬다. (스프링 내부 프로퍼티 설정에서 설정을 해 줄 경우 필요없다.)
3. 크롬브라우저 설치 : 링크를 이용해 안정적인 최신버전의 크롬 브라우저를 설치한다.
4. 크롬드라이버 설치 : 크롬드라이버의 경우 공식사이트에서는 최신버전의 크롬드라이버가 올라와 있지 않다. 하지만 깃허브상에서 최신 크롬버전에 맞는 크롬드라이버를 설치할 수 있다.
링크텍스트
해당 링크에서 있는 리눅스용 크롬드라이버 설치 주소에 현재 도커 컨테이너에 설치된 크롬의 버전을 가져온 후 넣어주면 최신버전의 크롬에 대한 드라이버 설치의 자동화가 완료된다.
5. 환경변수 설정: 도커 컨테이너에서 환경변수에 크롬드라이버의 경로를 추가하지 않으면 크롬드라이버를 찾을 수 없다는 오류가 발생하기 때문에 반드시 설정을 해줘야한다.
도커 컨테이너 속 크롬버전의 업그레이드에 따른 크롬드라이버 버전에 대한 갱신에 자동화에 대한 여러 시행착오를 겪었다.
처음에는 고정된 버전의 크롬과 드라이버가 RedHat 계열의 리눅스에서만 설치가 가능해 페도라 이미지를 사용했었지만, 설치 링크가 사라지는 등의 문제들이 발생했었다.
현재 도커파일에서 사용하고 있는 깃허브에 올라와있는 크롬 드라이버 설치 링크가 가장 안정적이기에 사용했지만, 이 또한 언제 사라질지 모른다.
쌀 먹듯이 후다닥 읽고 갑니다