서버에서 크롬을 띄운다? “헤드리스 Chromium”을 써보니
들어가며
웹 자동화나 서버에서 웹페이지를 처리하는 작업을 하다 보면 한 번쯤 이런 생각을 하게 됩니다.
“서버에서 크롬을 직접 실행해야 하나?”
일반적인 PC 환경이라면 Chrome을 실행하고 웹페이지를 열면 그만입니다. 그런데 서버 환경에서는 이야기가 조금 달라집니다. 특히 화면이 없는 리눅스 서버에서 웹페이지를 열고, 특정 버튼을 클릭하거나 JavaScript가 실행된 결과를 가져오거나, 페이지를 캡처해야 한다면 일반적인 브라우저 실행 방식으로는 불편한 점이 많습니다.
이럴 때 사용하는 방법 중 하나가 바로 헤드리스 Chromium(Headless Chromium) 입니다.
쉽게 말하면 화면을 표시하지 않는 Chromium 브라우저라고 생각하면 됩니다.
헤드리스 Chromium이란?
Headless라는 단어 그대로 화면이 없는 상태에서 브라우저를 실행하는 방식입니다.
일반적인 Chrome이나 Chromium은 브라우저 창을 띄워 사용자가 직접 웹페이지를 볼 수 있습니다. 반면 헤드리스 모드에서는 브라우저 화면을 실제로 표시하지 않습니다.
그렇다고 단순히 HTML 파일을 읽는 프로그램이라고 생각하면 조금 다릅니다.
Chromium 자체가 웹브라우저이기 때문에 HTML을 읽고 CSS를 적용하고 JavaScript를 실행하는 등 실제 브라우저에 가까운 동작을 수행할 수 있습니다.
예를 들어 JavaScript를 실행해야만 화면에 데이터가 나타나는 웹페이지가 있다고 해보겠습니다.
단순 HTTP 요청으로 HTML을 가져오면 데이터가 없는 상태의 HTML만 받을 수도 있습니다.
하지만 헤드리스 Chromium을 이용하면 페이지를 실제 브라우저처럼 로딩한 뒤 JavaScript가 실행된 결과를 기준으로 작업할 수 있습니다.
이 차이가 생각보다 상당히 큽니다.
어디에 사용하는 걸까?
헤드리스 Chromium은 웹 자동화에서 특히 많이 활용됩니다.
대표적인 예를 들면 다음과 같습니다.
- 웹페이지 자동 테스트
- 로그인 및 페이지 이동 자동화
- JavaScript 렌더링 결과 확인
- 웹페이지 스크린샷 생성
- PDF 변환
- 반복적인 브라우저 작업 자동화
- 동적 웹페이지 데이터 처리
- 서버에서 브라우저 기반 테스트 수행
개발하면서 가장 이해하기 쉬운 사례는 자동 테스트입니다.
사용자가 웹사이트에 접속해서 로그인하고 특정 메뉴를 클릭한 다음 결과 페이지가 정상적으로 표시되는지를 사람이 직접 확인할 수도 있습니다.
하지만 이런 작업을 매번 사람이 하는 것은 상당히 비효율적입니다.
헤드리스 Chromium을 이용하면 브라우저 창을 직접 띄우지 않고도 비슷한 과정을 자동으로 수행할 수 있습니다.
Selenium이나 Puppeteer와 무슨 관계일까?
여기서 처음 접하는 사람들은 조금 헷갈릴 수 있습니다.
헤드리스 Chromium 자체는 브라우저이고, Selenium이나 Puppeteer 같은 도구는 브라우저를 자동으로 제어하기 위한 도구라고 생각하면 이해하기 쉽습니다.
즉,
Chromium = 실제 브라우저
Headless Chromium = 화면 없이 실행되는 Chromium
Selenium / Puppeteer / Playwright = 브라우저를 자동으로 제어하는 도구
이런 식으로 구분하면 됩니다.
예를 들어 Puppeteer를 사용하면 Chromium을 실행한 뒤 특정 URL로 이동하고, 페이지가 로딩될 때까지 기다린 다음 스크린샷을 찍는 등의 작업을 코드로 작성할 수 있습니다.
개발자가 브라우저 창을 직접 보고 클릭하지 않아도 프로그램이 브라우저를 조작하는 것입니다.
일반 HTTP 요청과 다른 점
웹 개발을 하다 보면 curl이나 Java의 HTTP Client, Python의 requests 같은 방식으로 웹페이지를 가져오는 경우가 있습니다.
이 방법은 단순한 페이지를 가져올 때는 매우 빠르고 편합니다.
하지만 JavaScript로 데이터를 동적으로 생성하는 사이트에서는 문제가 생길 수 있습니다.
HTTP 요청은 서버가 반환한 HTML을 가져오는 방식이지만, 헤드리스 Chromium은 실제 브라우저 환경에서 페이지를 렌더링합니다.
따라서 JavaScript 실행 결과가 필요한 상황이라면 헤드리스 브라우저가 더 적합할 수 있습니다.
물론 무조건 헤드리스 Chromium을 사용하는 것이 정답은 아닙니다.
단순 API 호출로 데이터를 받을 수 있다면 굳이 브라우저까지 실행할 필요가 없습니다. 브라우저는 일반적인 HTTP 요청보다 메모리와 CPU를 더 많이 사용하기 때문입니다.
그래서 개발할 때는 먼저 공식 API나 일반 HTTP 요청으로 해결할 수 있는지 확인하고, 브라우저 렌더링이 꼭 필요한 경우에 헤드리스 Chromium을 선택하는 것이 좋습니다.
서버에서 사용할 때 주의할 점
헤드리스 Chromium을 서버에서 실행할 때는 성능도 신경 써야 합니다.
브라우저 하나를 실행하는 것 자체가 가벼운 작업은 아닙니다.
동시에 여러 페이지를 처리한다면 메모리 사용량이 증가할 수 있고, 브라우저 프로세스가 정상적으로 종료되지 않는 문제가 발생하면 서버 자원이 계속 사용될 수도 있습니다.
그래서 실제 서비스에서는 브라우저를 무작정 여러 개 실행하기보다는 브라우저 인스턴스를 효율적으로 관리하고, 작업이 끝난 페이지와 컨텍스트를 적절하게 종료하는 방식으로 구성하는 것이 중요합니다.
또한 서버 환경에 따라 Chromium 실행에 필요한 라이브러리나 폰트 등의 추가 설정이 필요할 수도 있습니다.
헤드리스 Chromium을 써야 할까?
개인적으로 헤드리스 Chromium은 “웹브라우저가 필요한 자동화 작업”에서 진가가 나타나는 도구라고 보는 게 가장 이해하기 쉽습니다.
API로 데이터를 가져올 수 있는데 굳이 브라우저를 실행하는 것은 오히려 복잡도를 높일 수 있습니다.
반대로 JavaScript 렌더링, 실제 브라우저 동작, 화면 캡처, 자동 클릭과 같은 작업이 필요하다면 이야기가 달라집니다.
특히 테스트 자동화나 웹페이지 PDF 생성처럼 사람이 브라우저에서 직접 하는 작업을 서버에서 반복해야 한다면 상당히 유용합니다.
처음에는 단순히 “화면이 없는 크롬” 정도로 생각했는데, 실제 개발 관점에서 보면 브라우저를 프로그램의 일부처럼 사용할 수 있게 해주는 기술에 가깝습니다.
결국 핵심은 하나입니다.
웹페이지를 단순히 가져오는 것이 목적이라면 HTTP 요청이나 API를 먼저 고려하고, 실제 브라우저의 동작이 필요하다면 헤드리스 Chromium을 고려하는 것.
이렇게 기준을 잡아두면 언제 헤드리스 브라우저를 사용해야 하는지 판단하기가 훨씬 쉬워집니다.
홍TV



![Eclipse에서 갑자기 "[m2e] Lifecycle Mapping" 오류? Maven 프로젝트가 빨간 줄 뜨는 이유 4 Eclipse에서 갑자기 [m2e] Lifecycle Mapping 오류? Maven 프로젝트가 빨간 줄 뜨는 진짜 이유](https://hongtv.co.kr/wp-content/uploads/2026/09/62edeb0f-aaf8-42cc-af31-1a91e54bc187-300x200.png)
댓글 0
첫 댓글을 남겨보세요.