๋ชฉ์ฐจ
์๋ฌ ๋ฐ์!!!!!!!!!!!!
https://lotuus.tistory.com/145
์์ ์๋ ์์ ๋ค์ด๋ก๋ ๊ฒ์๊ธ์ ์ฌ๋ ธ์๋๋ฐ,
์ด์์์ ๊ฐ์๊ธฐ ํ๋ฉ๋ชจ๋ฆฌ๊ฐ ๋ถ์กฑํ๋ค๋ฉฐ Out Of Memory ์๋ฌ๊ฐ ๋ฐ์ํ๋ค.....
์ด์ ๋ ๋๊ฐ์ง์๋ค
์ฒซ๋ฒ์งธ ) ์์ฒญ ์ค๋ณต ํํฐ๋ง ์ํจ
ํ๋ฉด์ ๋ณด์ด๋ ์์ ๋ค์ด๋ก๋ ๋ฒํผ์ ๋๋ฅด๊ณ , ์ค์ ๋ค์ด๋ก๋ ์ฐฝ์ด ๋ฐ๋๊น์ง๋ ์๊ฐ์ด ์ข ๊ฑธ๋ฆฐ๋ค
๊ทธ๋ฐ๋ฐ ์ฐธ์์ฑ ์๋ ๋ถ๋ค์ด ๊ธฐ๋ค๋ฆฌ์ง ์๊ณ (์ฌ์ค ๊ทธ๋ ๊ฒ ์ค๋ ๊ฑธ๋ฆฌ์ง๋ ์๋๋ค...๊ณ ์ใฑ๊ฐํ๋ค ใ ใ ใ )
์ฌ๋ฌ๋ฒ ๊ณ์ ์ค๋ณตํด์ ์์ ๋ค์ด๋ก๋ ๋ฒํผ์ ํด๋ฆญํ์๋ค
ํ๋ก ํธ์์๋ ์ค๋ณต ํด๋ฆญ ๋ฐฉ์ง๊ฐ ์๊ณ .. ๋ฐฑ์๋์์๋ ์ค๋ณต ํด๋ฆญ์ ํํฐ๋งํ์ง ์์๊ธฐ ๋๋ฌธ์
์์ฒญ์ด ๋ค์ด์ค๋๋๋ก ์์ ํ์ผ์ ๋ง๋ค๊ธฐ ์ํด ์๋ฒ์์ ์์ฒญ๋ ๋ฉ๋ชจ๋ฆฌ๋ฅผ ์ก์๋จน๊ณ ์๋๊ฒ์ด์๊ณ
๊ฒฐ๊ตญ Out Of Memory๊ฐ ๋ฐ์ํ๊ฒ๋์๋ค!
๋๋ฒ์งธ ) XSSF ๊ตฌํ์ฒด๋ฅผ ์ ํํ์ฌ ์์ ํ์ผ ์์ฑํจ
- XSSF๋ ๋ฉ๋ชจ๋ฆฌ์ ํ์ผ๋ฐ์ดํฐ๋ฅผ ์์๋๊ณ ๋ค์ด๋ก๋ํ๋ ๋ฐฉ์
- SXSSF๋ ์์ํ์ผ์ ์ค๊ฐ์ค๊ฐ ์์ฑํ์ฌ ๋ฉ๋ชจ๋ฆฌ๋ฅผ ์ ๊ฒ ์ฌ์ฉํ๋ ๋ฐฉ์
(์์ ์ฐจ์ด์ ์ ์ผ์ฐ ์์๋๋ผ๋ฉด Out Of Memory ๋ฐ์๋น๋๊ฐ ์ค์ง ์์์๊น...? ๋๋ฌผ...)
XSSF๋ฅผ ์ฌ์ฉํ์ฌ ์์ ๋ค์ด๋ก๋๋ฅผ ๊ตฌํํด๋จ๋๋ฐ
์ฒซ๋ฒ์งธ ์์ธ์ด ๊ฒน์น๋ฉด์ ๋ค์ด๋ก๋ ์์ฒญ์ด ๋ค์ด์ฌ๋๋ง๋ค ๋ฉ๋ชจ๋ฆฌ์ ๋ฐ์ดํฐ๋ฅผ ๊ณ์ ๊ณ์ ์ฌ๋ ค๋๋ ์ํฉ์ด ๋๋
Out Of Memory๊ฐ ๋ฐ์๋๋๊ฑด ๋น์ฐํ ๋ฌธ์ ์๋ค....
ํด๊ฒฐ๋ฐฉ๋ฒ
์ฒซ๋ฒ์งธ ) ์ค๋ณต ์์ฒญ ํํฐ๋ง
๋ด๊ฐ ์ด์ํ๊ณ ์๋ ์๋ฒ๋ ์์ ๋ค์ด๋ก๋๊ฐ ํ๋ฃจ์ ํ๋๋ฒ? ์ ๋๋ง ์์ฒญ์ด ๋ค์ด์ค๊ณ ์์ด์
์ค์ ๋ก ํด๋ณด์ง์์์ง๋ง ์์ด๋์ด๋ ์๋ค.
๋ค์ด๋ก๋ ์์ฒญ ์ Request Parameter๋ฅผ ํด์๊ฐ์ผ๋ก ๋ง๋ค์ด ๊ฐ์ง๊ณ ์๋ค๊ฐ
๋ค์ ์์ฒญ์ด ๋ค์ด์์ ๋ Request Parameter๋ฅผ ํด์๊ฐ์ผ๋ก ๋ฐ๊พผ๊ฐ๊ณผ ์๋ก ๋น๊ตํด๋ณด๋ ๊ฒ์ด๋ค.
1๋ฒ์งธ ์์ฒญ ํ๋ผ๋ฏธํฐ์ ํด์๊ฐ๊ณผ 2๋ฒ์งธ ์์ฒญ ํ๋ผ๋ฏธํฐ์ ํด์๊ฐ์ด ๊ฐ๋ค๋ฉด ์ค๋ณต์์ฒญ์ด๋ฏ๋ก ๊ฑธ๋ฌ๋ด๋ฉด ๋๋ค.
์ผ๋จ ๋๋... ์๋ฌ๊ฐ ๋ง ํฐ์ง๊ณ ์๋ ์ํฉ์ด์์ด์ ๋น ๋ฅด๊ฒ ํ๋ก ํธ์ ๋ง์๋ฌ๋ผ๊ณ ์์ฒญํ๋ค ^^..
๋๋ฒ์งธ ) SXSSF ๊ตฌํ์ฒด๋ก ์์ ํ์ผ์ ์์ฑํ๋ค
์์์ ์ค๋ช ํ๋๋ก SXSSF๋
[์์ํ์ผ์ ์ค๊ฐ์ค๊ฐ ์์ฑํ์ฌ ๋ฉ๋ชจ๋ฆฌ๋ฅผ ์ ๊ฒ ์ฌ์ฉํ๋ ๋ฐฉ์]์ผ๋ก ์์ ํ์ผ์ ๋ง๋ค์ด์ค๋ค.
๋ฐ๋ก ์ ์ฉํด๋ณด์.
/**
* ์์
๋ค์ด๋ก๋ ๊ตฌํ ๐ฅ๐ฅ๐ฅ
*/
private void createExcelDownloadResponse(HttpServletResponse response, List<UserPoint> userPointList) {
try{
//์ ๊ฑฐ
//Workbook workbook = new XSSFWorkbook();
//์ถ๊ฐ๐ฅ : SXSSF ์ฌ์ฉ
Workbook workbook = new SXSSFWorkbook();
Sheet sheet = workbook.createSheet("์ฌ์ฉ์ ํฌ์ธํธ ํต๊ณ");
//์ซ์ ํฌ๋งท ์ฒ๋ฆฌ
//ํ์ผ๋ช
์ฒ๋ฆฌ
//ํค๋ ์ฒ๋ฆฌ
//๋ฐ๋ ์ฒ๋ฆฌ
response.setContentType("application/vnd.ms-excel");
response.setHeader("Content-Disposition", "attachment;filename="+ URLEncoder.encode(fileName, "UTF-8")+".xlsx");
//ํ์ผ๋ช
์ URLEncoder๋ก ๊ฐ์ธ์ฃผ๋๊ฒ ์ข๋ค!
//์ ๊ฑฐ
//workbook.write(response.getOutputStream());
//workbook.close();
//์ถ๊ฐ๐ฅ : ์ค๊ฐ์ค๊ฐ ์์ํ์ผ์ ๋ง๋ค์ด OOM์ ๋ฐฉ์งํ๋ค
OutputStream tempFile = response.getOutputStream();
workbook.write(tempFile);
tempFile.close();
response.getOutputStream().flush();
response.getOutputStream().close();
workbook.dispose(); //์์ํ์ผ ์ญ์
}catch(IOException e){
e.printStackTrace();
}
}
์์ ๋ค์ด๋ก๋ SXSSF๋ก ๋ฐ๊พผ ํ Out Of Memory ๋ฌธ์ ๋ฅผ ์ก์ ์ ์์๋ค!
ํธ์ํ ์ฃผ๋ง์ ๋ณด๋ด๊ณ ์ถ๋ค๋ฉด ๊ผญ. ํ์๋ก SXSSF ๋ฐฉ์์ ์ฌ์ฉํ์!!!