Spring

Jpa_2강

삼색이삼랑해 2022. 11. 17. 10:19

  파일 저장 및 다운로드

1. Multi-part

한 웹 문서 안에 문자와 바이너리 데이터(이미지, 동영상, 오디오 및 다양한 형식의 파일)가 같이 포함되어 있는 형태

 

Multi-part 관련 설정)

application.properties에서 다음과 같은 크기에 대한 설정을 할 수 있다.

  • 업로드 파일의 최대 크기 설정 : max-file-size
  • 요청 객체에 담을 수 있는 최대 크기 : max-request-size

input 태그의 file은 파일 전송을 위한 입력 태그로 단일 전송(single, 기본값)과 다중 전송(multiple)을 설정한다.

 

* multiple과 multi-part는 관계 없음

 

2. 파일의 저장 위치

  • DB에 내용과 함께 저장
  • DB에는 내용만, 파일은 따로 저장

둘 중 한 가지의 방식을 택해서 활용할 수 있으며, 다음 예제에서는 두 번째 방식을 사용할 것이다.

 

3. 업로드 파일 정보

업로드 파일 번호 : 자동 증가

게시글 번호 : 게시글 테이블의 pk => 외래키로 활용

파일 저장 이름 : 서버에 저장하는 실제 파일 이름(시간 - 밀리초값을 사용)

파일 원래 이름 : 다운로드 시 원래 이름을 사용

 

4. 파일 다운로드

파일 다운로드는 View를 거치지 않고 사용자(클라이언트) 컴퓨터로 파일이 전송되어야 하기 때문에 일반적인 처리와는 다른 방식이 필요하다.

 

=> ResponseEntity 객체를 활용

결과 데이터와 HTTP 상태 코드를 직접 제어할 수 있는 클래스

 

파일(저장 공간) === InputStream === Response => client device

  게시글 목록 가져오기

1. 페이징(Paging) 처리

Pagination(또는 Paging)은 다수의 정보를 출력할 때 한 화면에 출력할 내용의 개수를 제한하고, 책의 페이지처럼 여러 화면에 분리하는 방식이다.

 

이를 처리하기 위해서는

  • DB(MySQL)에서 SQL의 limit문을 사용하여 한 화면에 출력할 데이터를 나눠서 가져오는 방식을 활용
  • Jpa에서 Pageable 객체를 활용

위 두 가지를 활용해야 한다.

 

Jpa Pageable 관련 객체)

  • Page : paging한 데이터를 담는 객체(Entity를 기반으로 저장)
  • Pageable : Paging을 처리하는 객체(DB와 연동하여 조건에 맞는 범위의 데이터(page)를 처리)
  • PageRequest : 조건을 작성하는 객체(몇 번째 페이지인지, 정렬 방식 등을 지정

2. HTML 작성

HTML에서는 페이지 번호를 화면에 출력하기 위해 작성하는 과정이 필요하다. 이때 방식은 두 가지가 존재한다.

  • HTML에 직접 처리하도록 하는 방식
  • Java 코드에서 HTML 문장을 작성하는 방식

그리고 다음 예제에서는 두 번째 방식을 활용할 것이다.

 

참고) @AllArgsConstructor 어노테이션

Constructor란? 생성자 => 객체를 생성할 때 객체의 멤버 변수의 초기화

@AllArgsConstructor 어노테이션은 모든 멤버 변수에 초기값을 넣기 위한 생성자를 자동으로 만들어주는, Lombok에서 제공하는 어노테이션이다.