전체 프로젝트

Product case study

CasterN — 문서 제작과 출력 도구

웹 편집기와 Windows 앱으로 프로젝트를 만들고 저장하며, PDF 편집과 내보내기, 인쇄 규격 출력까지 다루는 문서 제작 도구입니다. 기존 Qt/C++ 도구를 웹 기반으로 다시 만드는 과정에 참여했습니다.

2025.07 — 현재Frontend Engineer

01

프로젝트 저장과 불러오기, 패키지 내보내기

Context

프로젝트를 만들거나 기존 파일을 열 때 원본 문서와 썸네일, 이미지 리소스의 경로와 이름이 서로 다르게 처리되어 일부 파일을 찾지 못하는 문제가 있었습니다.

Goal

프로젝트 생성, 저장, 불러오기와 패키지 내보내기에서 필요한 파일과 리소스를 빠짐없이 다뤄야 했습니다.

What I changed

  • 프로젝트 생성, 등록, 저장, 불러오기 순서를 정리했습니다.
  • 원본 문서와 썸네일, 이미지 리소스가 제각각이던 경로·이름 규칙을 하나로 맞췄습니다.
  • 패키지로 내보낸 프로젝트를 웹 버전과 설치형 앱에서 다시 열 때 발생하던 문제를 수정했습니다.

Outcome

저장한 프로젝트를 다시 열거나 다른 실행 환경으로 옮겨도 파일과 리소스가 그대로 따라오게 됐습니다.

02

대용량 문서 내보내기

Context

수 GB 규모 문서를 한 번에 전달하면 메모리 사용량이 크게 증가하고, 내보내기를 취소하거나 전송이 실패한 뒤에는 작업 상태와 임시 파일이 남을 수 있었습니다.

Goal

진행 상태를 보여 주면서 큰 문서를 나누어 전달하고, 취소와 실패 뒤에 남은 작업까지 정리하는 것이 목표였습니다.

What I changed

  • 문서를 여러 조각으로 나누어 웹에서 Windows 앱으로 전달하고, 다 받은 뒤 크기와 해시로 완전 수신을 검증한 다음에만 파일을 공개하도록 구현했습니다.
  • 페이지 처리와 전송 진행 상태를 화면에 표시하고 중간 취소를 연결했습니다.
  • 전송이 실패하거나 취소되면 진행 중인 작업과 임시 파일을 정리했습니다.

Outcome

이제 수 GB 문서도 진행률을 보며 내보낼 수 있고, 중단된 작업이 임시 파일로 남아 다음 내보내기를 방해하는 일이 사라졌습니다.

03

PDF 편집과 렌더링, 인쇄

Context

페이지를 추가하거나 삭제하고 도형과 이미지를 편집한 결과가 화면과 PDF 내보내기, 인쇄에서 다르게 보였습니다.

Goal

편집한 페이지와 좌표, 이미지가 PDF와 인쇄에서도 올바른 위치와 순서로 나와야 했습니다.

What I changed

  • PDF 페이지 추가, 삭제, 이동과 페이지 번호 처리를 수정했습니다.
  • Canvas에서 편집한 도형과 이미지가 PDF에 반영되도록, 화면과 내보내기, 인쇄가 같은 기준 좌표계를 쓰게 변환을 정리했습니다.
  • 브라우저와 Windows 인쇄에서 페이지 크기와 방향, 출력 위치를 맞췄습니다.

Outcome

화면에서 편집한 결과와 PDF 내보내기, 인쇄 출력이 같은 위치와 순서로 맞아떨어지는 것을 실제 출력물로 확인했습니다.

04

PDF 엔진과 기존 프로젝트 호환

Context

기존 Qt/C++ 도구에서 만든 프로젝트를 새 웹 편집기에서 열거나 PDF 처리 모듈을 업데이트했을 때 일부 파일과 이미지가 다르게 처리됐습니다.

Goal

기존 프로젝트를 계속 쓸 수 있도록 파일 구조를 파악하고, 웹 편집기와 PDF 엔진 사이의 호환 문제를 잡아야 했습니다.

What I changed

  • Qt/C++ 소스를 확인해 프로젝트 파일과 리소스를 읽고 내보내는 방식을 파악했습니다.
  • 새 편집기에서 기존 프로젝트를 열 때 발생하던 파일 경로와 리소스 처리 문제를 수정했습니다.
  • WebAssembly 기반 PDF 엔진의 시작과 종료, 파일 읽기와 이미지 처리를 실제 편집 기능에 맞게 고치고, 계약 테스트를 44개에서 102개로 늘렸습니다.

Outcome

기존 프로젝트를 새 편집기에서 열고 PDF로 내보내는 흐름이 안정됐고, 엔진을 업데이트할 때도 테스트로 호환성을 먼저 확인할 수 있게 됐습니다.