<Lx하우시스> 실시간 PDF 견적서 서비스 구축기
인테리어처럼 대리점 기반의 전통적인 오프라인 비지니스라도 고객 소통은 모두 온라인으로 진행한다. 특히 고객 견적서는 문서(=PDF)형식으로 카카오톡이나 메일등으로 고객에게 사전 고지되어야 한다.
<Lx하우시스> 실시간 PDF 견적서 서비스 구축기
인테리어처럼 대리점 기반의 전통적인 오프라인 비지니스라도 고객 소통은 모두 온라인으로 진행한다. 특히 고객 견적서는 문서(=PDF)형식으로 카카오톡이나 메일등으로 고객에게 사전 고지되어야 한다.

명확한 견적을 고객에게 고지해야 한다.
<Lx하우시스>는 한 장의 PDF 문서도 생성하지 않고 이 문제를 해결하였다.
콘텐츠 특성 이해하기
이미 웹을 기반으로 <Lx 하우시스>는 대리점/B2B 시스템이 완벽하게 구축된 상태였다. 고객은 다음 사항들이 해소되길 희망하였다.
- 폐쇄망에는 완전한 견적서 시스템이 존재한다.
- 견적은 자주 바뀐다.
- 고객이 항상 열람하는 것도 아니며, 하더라도 일회성이다.
- 배치 시스템 추가, 스토리지 사용량 증가를 원하지 않는다.
실시간(on the fly)방식은 이런 데이터 성격에 적합하다.
안만들고 PUSH하자
이미 만들어져 있는 웹 페이지를 기반으로 PDF를 실시간 생성하는 시스템을 구축하였다. 서비스 시나리오는 아래와 같다.

서비스 플로우
- 고객에게 견적서 URL을 push한다.
- 고객이 클릭하면 요청이 발생한다.
- 폐쇄망의 견적서 웹 페이지를 요청한다.
- 견적서 웹 페이지를 실시간으로 PDF로 렌더링한다.
- PDF응답한다.
솔루션(M2Live)은 허가된 요청 이외는 모두 403 Forbidden으로 응답한다. 약속된 서비스/API에 대해서만 폐쇄망의 웹 페이지나 API만 연동한다.
응용
추후 상세히 다루겠지만 아래 서비스 상황에서 유사하게 적용 가능하다.
- 일정 시간만 유용한 특가 할인 브로셔
- 실시간 가격/판매량이 반영되는 배너 이미지
- 개인 맞춤형 Push
- 티켓/쿠폰
기타
몇 가지 구현 디테일은 다음과 같다.
서버사이드 렌더링 + Nunjucks 조합은 변수 처리에 유용하다.
- 서비스 시나리오에는 다양한 변수가 필요하다. 예를 들어 유효기간, 고객번호, 견적일 등 고객 요청으로부터 입력될 수도 있고, 연동된 백엔드 API로 제공될 수도 있다. 이런 구조화된 정보를 렌더링 단계에 반영시키는 단게에서 Nunjucks 을 도입하였다. 생각보다 쉽고 빠르고 문자열 처리가 유연하여 솔루션 설정에서 유연함이 필요한 곳에 확대 적용하였다.
- Selector. 페이지의 모든 부분이 다 필요한 것은 아니다. 웹 페이지 중 특정 영역만 지정할 수 있도록 구성하면 깔끔한 출력물을 얻을 수 있다.
- 매번 Headless Browser를 다시 가동하면 좋은 성능을 얻을 수 없다. 또 너무 많이 재사용할 경우 메모리 문제가 야기될 수 있다. 필드에서 운용하면서 적절한 재가동 타이밍이 중요하다.
- 리눅스의 기본 폰트는 미천하다. 꼭 디자인시안에 맞는 폰트를 미리 설치해 주고 디자인팀에 검수요청하자.
메타데이터
- post_id
- e71e864630f5
- slug
- lx하우시스-pdf-견적서-실시간-생성-e71e864630f5
- url
- https://medium.com/@woosikmoon/lx%ED%95%98%EC%9A%B0%EC%8B%9C%EC%8A%A4-pdf-%EA%B2%AC%EC%A0%81%EC%84%9C-%EC%8B%A4%EC%8B%9C%EA%B0%84-%EC%83%9D%EC%84%B1-e71e864630f5
- canonical_url
- https://medium.com/@woosikmoon/lx%ED%95%98%EC%9A%B0%EC%8B%9C%EC%8A%A4-pdf-%EA%B2%AC%EC%A0%81%EC%84%9C-%EC%8B%A4%EC%8B%9C%EA%B0%84-%EC%83%9D%EC%84%B1-e71e864630f5
- author_url
- https://medium.com/@woosikmoon
- status
- ok
- fetched_at
- 2026-07-11 23:47:18