◆ 가상화
- 다운로드 때문에 (DB)데이터베이스의 정보만 저장하고 하드디스크에 물리적인 파일 용량을 저장해준다.
- DB는 저장한 파일의 정보(파일의 크기, 이름, 유형 등등)만 저장하고 파일은 절대 들어가지 않는다.
- 데이터베이스의 모든걸(정보와 물리적인 파일용량) 저장하기에는 비싸기 때문이다.
- 서버가 여러 개 인데 한 개 인것처럼 사용하는 것도 가상화이다.
◆ 파일 전송
파일 업로드 : 클라이언트(사용자)가 파일을 서버로 전송하는 것
파일 다운로드 : 서버가 파일을 클라이언트(사용자)에게 전송하는 것
- input[type=file]로 작성 한다.
- GET방식은 용량 제한 때문에 파일 전송이 불가능하며 이름(정보)만 전송된다.
- POST 방식은 용량 제한은 없지만 전송이 불가능하며 이름(정보)만 전송된다.
- POST 방식은 Encoding Type에 따라 두 가지로 나눠진다.
- application/x-www-form-urlencoded은 기본 방식이며 key=value 형태로 전송된다.
- &
으로 데이터를 구분하여 전송된다.
- key와 value가 1:1 연결되므로 파일과 같이 정보가 많을 때는 전송이 어렵다.
- 파일을 전송하고 싶다면 반드시 enctype="multipart/form-data"로 변경해야 한다.
- multipart/form-data은 boundary
로 데이터를 구분하여 전송한다.
(참고) 크롬에서는 데이터가 잘려서 보이고 파이어폭스는 데이터가 다 나오므로 파이어폭스 사용을 권장한다.
◆ 파일 업로드 환경 설정
application.properties
에서 코드 아래 코드를 추가한다.
- 파일 업로드를 가능하게 하고 싶을 때
- spring.servlet.multipart.enabled=true
- 파일 한 개 용량 제한 크기
- spring.servlet.multipart.max-file-size=1MB
- 업로드 하려는 전체 파일 총 용량 제한 크기
- spring.servlet.multipart.max-request-size=10MB
◆ 파일 업로드
- 파일 업로드
- 파일 업로드는 PostMapping만 가능
- 전송된 파일은 MultipartFile 이라는 형태로 수신이 가능하다.
- 파일 전송 완료 후에는 반드시 redirect를 해야한다.
- 안하면 새로고침시 재업로드 해야한다.
- (주의)파일을 전송하지 않아도 attach는
null
이 아니므로 추가 검사가 필요하다.
- 파일을 한 개 첨부 하는 방법
- input
<input type="file">
로 작성 한다.
- GET방식은 용량 제한 때문에 파일 전송이 불가능하며 이름(정보)만 전송된다.
- POST 방식은 용량 제한은 없지만 전송이 불가능하며 이름(정보)만 전송된다.
POST 방식은 Encoding Type에 따라 두 가지로 나눠진다.
- application/x-www-form-urlencoded은 기본 방식이며 key=value 형태로 전송된다.
&
으로 데이터를 구분하여 전송된다.
- key와 value가 1:1 연결되므로 파일과 같이 정보가 많을 때는 전송이 어렵다.
- 파일을 전송하고 싶다면 반드시 input 태그에 enctype="multipart/form-data" 코드를 추가해야 한다.
- multipart/form-data은
boundary
로 데이터를 구분하여 전송한다.
- 파일을 여러 개 첨부하는 방법
1) input 태그를 여러 개 만든다.
- 개수를 제한하고 싶을 때 사용
2) input 태그에 multiple 옵션을 추가한다.
- 개수 무제한 (제한하려면 프로그래밍)
◆ 파일 정보 등록
- 시퀀스를 insert에서 만들것인지 아니면 미리 생성할 것인지 판단한다.
- 번호를 insert를 제외한 코드에서 사용하려면 분할, 아니면 통합한다.