티스토리 뷰
1. 개요
하이차트를 보면 나오는 차트를 사용자들이 내려 받을 수 있는 기능을 제공한다. 이 기능을 어떻게 구현을 했을지 생각을 해보았고 따라 해보기로 했다.
처음에는 Front-End단에서 해당 기능을 구현을 하려고 했다. 그래서 찾아본 것이 html2canvas라는 녀석이 였고 크롬에서 svg를 이미로 만들어 내는데 성공하였다.
그래서 FireFox에서 테스트를 진행 동작하지 않음, IE에서 테스트 진행.... 동작하지 않음, 사파리 마찬가지.....동작하지 않았다...
html2canvas에 대해서 자세히 조사하지 않은 나의 잘못이었다. html2canvas가 이미 FireFox등 몇몇 브라우저에서는 몇가지 문제가 있다는 글들이 있었던 것이다. 근데 또 순수 이미지만 내려 받는건 잘 되었다.
위 처럼 또 다른 라이브러리를 사용해도 브라우저 고려해야 하는 것이 귀찮았고 SVG내용을 서버로 주어 이미지로 변환해서 다시 클라이언트에게 다운시키는 것을 생각 해보았다.
그러면서 batik, itext라는 라이브러리를 찾았다.
batik라이브러리는 SVG를 이미지로 변환 해주는 라이브러리이며 itext는 pdf관련 여러 기능을 제공해주는 라이브러리이다.
내가 생각한 간단한 개념도는 이렇다.
먼저 Client단에서 SVG내용과 어떤 형식의 파일을 받고 싶은지 전달하고 Server는 해당 내용을 받아 Type에 맞는 파일 형태로 다시 내려주는 형식을 생각했다.
2. 구현
먼저 요청을 받아 들일 컨트롤러가 필요하다.
순서대로 호출되는 Util들에 대해서 설명을 한다.
jpg 와 png 타입일 경우 제일 먼저 호출 되는 유틸은 SVGToJPEGConverorUtils이다.
SVGToJPEGConvertorUtils가 호출되고 난뒤 호출되는 유틸들은 MediaType을 설정하고 header를 조작하는 기능을 한다.
HeaderConfiguer에서는 ContentType과 Content-Disposition을 설정하게 되는데 다운될 파일명을 Content-Disposition에서 설정해줄 수 있다.
주석 부분을 지우지 않은 이유는 처음에 헤더를 주석 부분으로 설정을 해주니 익스플로러, 사파리에서 파일을 다운 받는 형식이 아닌 창에 보여주는 형태로 되었다.
이제 부터는 Client 단의 소스 내용을 살펴 본다.
간단한 테스트를 하기 위한 html 내용이다.
그럼 다운 버튼을 눌렀을 경우 파일이 내려 받아지는지 확인 해보자.
3. 정리
하이차트가 이러한 방식으로 구현했는지는 알 방법은 없지만 하이차트의 exporting.src.js 소스를 보게 되면 https://export.highcharts.com/을 호출하는 부분을 확인 할 수 있듯이 위와 방식과는 유사할 거 같다고 조심스럽게 예상해본다.
현재 포스팅된 내용에서는 이미지 변환간의 생성되는 파일을 삭제해주는 기능이 없어 다운받는 횟수에 따라 계속해서 파일이 누적이 된다. 파일을 삭제 하는 부분은 파일 삭제 스레드를 하나 생성하여 특정 시간마다 돌면서 삭제 하도록 만들면 재밌을거 같다.
추후 만들게 되면 추가하여 포스팅~~
'Spring' 카테고리의 다른 글
Spring HttpSessionListener (2) | 2017.03.25 |
---|---|
Spring Security Custom EntryPoint (0) | 2016.12.28 |
JUnit 테스트 시 Spring 구동 및 Autowired하는 방법 (0) | 2016.11.15 |
Spring Bean Scope (0) | 2016.10.11 |
@PostConstruct (0) | 2016.09.03 |