2022 01 28 - oneso123456789/2022 GitHub Wiki

other

ํŒŒ์ผ ์—…๋กœ๋“œ ์ฒ˜๋ฆฌ

Controller์˜ ๋งŽ์€ ์ž‘์—…์€ ์Šคํ”„๋ง MVC๋ฅผ ํ†ตํ•ด์„œ ์ฒ˜๋ฆฌํ•˜๊ธฐ ๋•Œ๋ฌธ์— ๊ฐœ๋ฐœ์ž๋Š” ์ž์‹ ์ด ํ•ด๋‹นํ•˜๋Š” ์—ญํ™œ์—๋งŒ ์ง‘์ค‘ํ•ด์„œ
์ฝ”๋“œ๋ฅผ ์ž‘์„ฑ ํ•  ์ˆ˜ ์žˆ์ง€๋งŒ, ์กฐ๊ธˆ ์‹ ๊ฒฝ ์จ์•ผ ํ•˜๋Š” ๋ถ€๋ถ„์ด ์žˆ๋‹ค๋ฉด ํŒŒ์ผ์„ ์—…๋กœ๋“œ ํ•˜๋Š” ๋ถ€๋ถ„์— ๋Œ€ํ•œ ์ฒ˜๋ฆฌ์ž„
ํŒŒ์ผ ์—…๋กœ๋“œ๋ฅผ ํ•˜๊ธฐ ์œ„ํ•ด์„œ๋Š” ์ „๋‹ฌ๋˜๋Š” ํŒŒ์ผ ๋ฐ์ดํ„ฐ๋ฅผ ๋ถ„์„ํ•ด์•ผ ํ•˜๋Š”๋ฐ, ์ด๋ฅผ ์œ„ํ•ด์„œ Servlet 3.0 ์ „๊นŒ์ง€๋Š”
commons์˜ ํŒŒ์ผ์—…๋กœ๋“œ๋ฅผ ์ด์šฉํ•˜๊ฑฐ๋‚˜ cos.jar ๋“ฑ์„ ์ด์šฉํ•ด์„œ ์ฒ˜๋ฆฌํ•ด ์™”์Œ
๊ทธ๋Ÿฌ๋‚˜ Servlet 3.0 ์ดํ›„(Tomcat 7.0)์—๋Š” ๊ธฐ๋ณธ์ ์œผ๋กœ ์—…๋กœ๋“œ๋˜๋Š” ํŒŒ์ผ์„ ์ฒ˜๋ฆฌํ•  ์ˆ˜ ์žˆ๋Š” ๊ธฐ๋Šฅ์ด ์ถ”๊ฐ€๋˜์–ด ์žˆ์œผ๋ฏ€๋กœ
๋” ์ด์ƒ ์ถ”๊ฐ€์ ์ธ ๋ผ์ด๋ธŒ๋Ÿฌ๋ฆฌ๊ฐ€ ํ•„์š”ํ•˜์ง€ ์•Š์Œ
ํ•˜์ง€๋งŒ ์•„์‰ฌ์šด ์ ์€ Spring Legacy Project๋กœ ์ƒ์„ฑ๋˜๋Š” ํ”„๋กœ์ ํŠธ์˜ ๊ฒฝ์šฐ Servlet 2.5๋ฅผ ๊ธฐ์ค€์œผ๋กœ ์ƒ์„ฑ๋˜๊ธฐ ๋•Œ๋ฌธ์—
3.0์ดํ›„์— ์ง€์›๋˜๋Š” ์„ค์ •์„ ์‚ฌ์šฉํ•˜๊ธฐ ์–ด๋ ต๋‹ค๋Š” ์ ์ž„ ..
3.0 ์ด์ƒ์˜ ํŒŒ์ผ ์—…๋กœ๋“œ ๋ฐฉ์‹์€ ๋ณ„๋„์˜ ํŒŒํŠธ๋กœ ๋‹ค๋ฃจ๋„๋ก ํ•˜๊ณ  ์ผ๋ฐ˜์ ์œผ๋กœ ์‚ฌ์šฉํ•˜๋Š” commons-flieupload๋ฅผ ์ด์šฉํ•˜๊ฒ ์Œ

pom.xml์— commons-fileupload ๋ผ์ด๋ธŒ๋Ÿฌ๋ฆฌ ์ถ”๊ฐ€

commons-fileupload ๋ผ์ด๋ธŒ๋Ÿฌ๋ฆฌ๋ฅผ ์ถ”๊ฐ€ํ•จ ๋ฒ„์ „์€ 1.3.3์œผ๋กœ ๋‹ค์Œ์œผ๋กœ ํŒŒ์ผ์ด ์ž„์‹œ๋กœ ์—…๋กœ๋“œ๋  ํด๋”๋ฅผ C๋“œ๋ผ์ด๋ธŒ ์•„๋ž˜ upload/tmp๋กœ ์ž‘์„ฑํ•จ

servlet-context.xml์„ค์ •

servlet-context.xml์€ ์Šคํ”„๋ง MVC์˜ ํŠน์ •ํ•œ ๊ฐ์ฒด(๋นˆ)๋ฅผ ์„ค์ •ํ•ด์„œ ํŒŒ์ผ์„ ์ฒ˜๋ฆฌํ•จ
๋‹ค๋ฅธ ๊ฐ์ฒด(Bean)๋ฅผ ์„ค์ •ํ•˜๋Š” ๊ฒƒ๊ณผ ๋‹ฌ๋ฆฌ ํŒŒ์ผ ์—…๋กœ๋“œ์˜ ๊ฒฝ์šฐ์—๋Š” ๋ฐ˜๋“œ์‹œ id ์†์„ฑ๊ฐ’์„
'multipartResolver'๋กœ ์ •ํ™•ํ•˜๊ฒŒ
์ง€์ •ํ•ด์•ผ ํ•˜๋ฏ€๋กœ ์ฃผ์˜๊ฐ€ ํ•„์š”ํ•จ

maxUploadSize๋Š” ํ•œ ๋ฒˆ์˜ Request๋กœ ์ „๋‹ฌ๋  ์ˆ˜ ์žˆ๋Š” ์ตœ๋Œ€์˜ ํฌ๊ธฐ๋ฅผ ์˜๋ฏธํ•˜๊ณ ,
maxUploadSizePerFile์€ ํ•˜๋‚˜์˜ ํŒŒ์ผ ์ตœ๋Œ€ํฌ๊ธฐ,
maxInMemorySize๋Š” ๋ฉ”๋ชจ๋ฆฌ์ƒ์—์„œ ์œ ์ง€ํ•˜๋Š” ์ตœ๋Œ€์˜ ํฌ๊ธฐ๋ฅผ ์˜๋ฏธํ•จ
๋งŒ์ผ ์ด ํฌ๊ธฐ ์ด์ƒ์˜ ๋ฐ์ดํ„ฐ๋Š” uploadTempDir์— ์ž„์‹œ ํŒŒ์ผ์˜ ํ˜•ํƒœ๋กœ ๋ณด๊ด€๋จ
uploadTempDir์—์„œ ์ ˆ๋Œ€ ๊ฒฝ๋กœ๋ฅผ ์ด์šฉํ•˜๋ ค๋ฉด URIํ˜•ํƒœ๋กœ ์ œ๊ณตํ•ด์•ผ ํ•˜๊ธฐ ๋•Œ๋ฌธ์— 
'file:/'๋กœ ์‹œ์ž‘ํ•˜๋„๋ก ํ•ด์•ผํ•จ
defaultEncoding์€ ์—…๋กœ๋“œํ•˜๋Š” ํŒŒ์ผ์˜ ์ด๋ฆ„์ด ํ•œ๊ธ€์ผ ๊ฒฝ์šฐ ๊นจ์ง€๋Š” ๋ฌธ์ œ๋ฅผ ์ฒ˜๋ฆฌํ•จ

SampleController์— exUpload()๋ฉ”์†Œ๋“œ ์ถ”๊ฐ€

get๋ฐฉ์‹์œผ๋กœ /exUpload๋งคํ•‘์„ ํ•ด์คŒ, ์‹คํ–‰๋ ์‹œ ๋กœ๊ทธ๋ฅผ ์ฐ์–ด์คŒ

exUpload.jsp ํŒŒ์ผ์ž‘์„ฑ

ํŒŒ์ผ ์—…๋กœ๋“œ๋ฅผ ํ•ด ๋ณผ /WEB-INF/views/sample/๊ฒฝ๋กœ์— exUpload.jspํŒŒ์ผ์„ ๋งŒ๋“ฌ html 4.01๋ฒ„์ „์œผ๋กœ ๋ฐ”๊ฟ”์ฃผ๊ณ  metaํƒœ๊ทธ์— http-equiv์†์„ฑ๊ณผ content์†์„ฑ์„ ์ด์šฉํ•ด์„œ UTF-8์ธ์ฝ”๋”ฉ ์ž‘์—…์„ํ•ด์คŒ
bodyํƒœ๊ทธ์•ˆ์— form ํƒœ๊ทธ์„ ๋งŒ๋“ค์–ด์คŒ ๊ธฐ๋ณธ์•ก์…˜์€/sample/exuploadPOST๋กœ ํ•˜๊ณ  ๋ฐฉ์‹์€ post๋ฐฉ์‹์ด๋ฉฐ
enctype๋กœ ํผ ๋ฐ์ดํ„ฐ๊ฐ€ ์„œ๋ฒ„๋กœ ๋ณด๋‚ด์งˆ๋•Œ ์ธ์ฝ”๋”ฉ๋ฐฉ์‹์„ ์„ ํƒํ•˜๋Š”๋Œ€ ํŒŒ์ผ์„ ์ „์†กํ• ๊บผ๋‹ˆ multipart/form-data์†์„ฑ๊ฐ’์„ ์„ ํƒ(์ด ๋ฐฉ์‹์€ ๋ชจ๋“ ๋ฌธ์ž๋ฅผ ์ธ์ฝ”๋”ฉ ํ•˜์ง€ ์•Š์Œ ๊ณ ๋กœ ํŒŒ์ผ์ด๋‚˜ ์ด๋ฏธ์ง€๋ฅผ ์ „์†กํ• ๋•Œ ์‚ฌ์šฉํ•จ)

SampleController์— /exUploadPost() ๋ฉ”์„œ๋“œ ์ž‘์„ฑ

exUpload.jsp์—์„œ ๋ณด๋‚ธ form์˜ action ์†์„ฑ๊ฐ’์€ /sample/exUploadPost์ž„
๋”ฐ๋ผ์„œ ํ•ด๋‹น ์†์„ฑ๊ฐ’๊ณผ ๊ฐ™์€ Post๋งคํ•‘์„ ๋งŒ๋“ค์–ด์คŒ exUploadPost() ๋ฉ”์„œ๋“œ์˜ ํŒŒ๋ผ๋ฏธํ„ฐ๋Š” ArrayList files ๋กœ ๋งŒ๋“ค์–ด์คŒ
ArrayList๋ฅผ ์‚ฌ์šฉํ•˜๋Š” ์ด์œ ๋Š” exUpload.jspํŒŒ์ผ์—์„œ ํŒŒ์ผ ์ฒ˜๋ฆฌ๋ฅผ ์œ„ํ•œ inputํƒœ๊ทธ์˜ ์ด๋ฆ„์„ ์ „๋ถ€ files๋กœ ํ–ˆ๊ธฐ ๋•Œ๋ฌธ์ž„
์ด ํŒŒ์ผ์„ ํ•˜๋‚˜์”ฉ ๊บผ๋‚ด๊ธฐ ์œ„ํ•ด์„œ forEach๋ฌธ์„ ์‚ฌ์šฉํ•จ fileํƒ€์ž…์„ ํ•˜๋‚˜์”ฉ ๊บผ๋‚ด๋ฉด์„œ ๋กœ๊ทธ๋กœ ์ด๋ฆ„๊ณผ ์‚ฌ์ด์ฆˆ๋ฅผ ์ฐ์–ด์คŒ
์—ฌ๊ธฐ์„œ ๊ถ๊ธˆํ•œ๊ฒŒ ์ƒ๊น€ forEach๋ฌธ์˜ ์‹œ์ž‘์ด ์ด๋Ÿฐ ํ˜•ํƒœ์ธ๋Œ€ files.forEach(file ->{ ์—ฌ๊ธฐ์„œ ํŒŒ์ผ ๋ง๊ณ  ์ด๋ฏธ์ง€๋กœ ๋ฐ”๊พผ๋‹ค๋ฉด ์–ด๋–ป๊ฒŒ ๋ ์ง€
๊ทธ๋ƒฅ forEach๋ฌธ์—์„œ ์‚ฌ์šฉํ•  ๋ณ€์ˆ˜๋ช…์„ ๋žŒ๋‹ค์‹์œผ๋กœ ํ‘œํ˜„ํ•œ๊ฑฐ๋ผ์„œ ๋”ฑํžˆ ์ƒ๊ด€์€ ์—†๋Š”๊ฑฐ ๊ฐ™์Œ ๊ทธ๋ฆฌ๊ณ  ์•„๊นŒ Servlet-context.xml์— ์„ค์ •ํ•ด์ค€ uploadTempDir์„ ํ™•์ธํ•˜๊ธฐ ์œ„ํ•ด์„œ 2mb์ด์ƒ์˜ ์ด๋ฏธ์ง€๋ฅผ
์„ ํƒํ•˜๋ฉด 500์—๋Ÿฌ๊ฐ€ ๋‚˜์˜ค๋ฉด์„œ ์‚ฌ์ด์ฆˆ๊ฐ€ ํฌ๋‹ค๋Š” ์˜ค๋ฅ˜๊ฐ€ ๋‚˜์˜ด ํ•ด๊ฒฐํ•˜๊ธฐ์œ„ํ•œ ๋ฐฉ๋ฒ•์€ ์•Œ์•„๋ณด๋‹ˆ ๋’ค์— ๋‚ด์šฉ์—์„œ ๋‚˜์˜ค๋Š”๋“ฏ
๊ทธ๋ฆฌ๊ณ  ์ด์ „์— ์˜ฌ๋ฆฐ ํŒŒ์ผ๋“ค๋„ ์ €์žฅ์ด ์•ˆ๋˜๋Š”๊ฑฐ ๋ณด๋‹ˆ๊นŒ ์ž„์‹œํŒŒ์ผ ํ˜•ํƒœ๋กœ ์˜ฌ๋ผ๊ฐ€๊ณ  ๊ทธ๋’ค ์‚ญ์ œ๋˜๋Š”๊ฑฐ ๊ฐ™์Œ