2022. 4. 17. 10:58ㆍBackEnd(Java)/Rest API
최근 웹이나 앱을 보면 이미지 업로드 및 조회 기능은 웬만하면 다 들어가는 필수 요소인 거 같다.
나도 프로젝트 진행하면서 기능이 필요해서 만들어 보려고 한다.(테스트는 PostMan 사용)
1편에서 포스트맨 설정 및 업로드 기능 만들고 2편에서 조회 기능을 만들 것이다.
기능을 개발하면서 많은 애를 먹어서(포스트맨 설정, 컨트롤러 부분 등..) 이 글을 보고 조금이나마 도움이 되었으면 한다.(ㅠㅠ 처음 해보는 거라 애먹었음) 😓😓
1. 포스트맨에서 파일 및 데이터 보내기
- 파일 전송 설정
나는 리뷰 기능을 만들고 있어서 리뷰 내용(data)과 리뷰 사진들을 같이 Request 하려고 한다. 파일 전송부터 보자.
- Body 선택 -> form-data를 클릭한다.(그림 1)
- Key 부분에 text or File을 선택한다.(그림 2)
- File을 선택하면 value 부분에 select Files가 뜨게 되고 파일을 선택하면 된다(그림 3)
파일 전송 설정 완료!!
- data 설정
data를 보내려면 그림 4와 같이 value부분에 전송할 data를 json형식으로 보내줘야 한다. 그리고 Content Type을 설정해줘야 하는데 Content Type을 설정하려면 그림 5를 보면 빨간색 테투리 부분을 클릭하면 체크할 수 있는 항목이 뜨게 된다. Content Type을 체크한다.
체크까지 완료되면 그림 6처럼 CONTENT TYPE에 application/json을 설정한다.
여기까지 설정하였으면 포스트매에서 파일 및 데이터 전송을 위한 설정은 끝났다!! 😋😋
나는 그림 7처럼 설정을 완료하였다.
2. 이미지 업로드 기능 개발
- Controller 설정
Controller부분에서 이미지를 받을 때 List <MultipartFile>을 사용하여 이미지를 받는다.
그리고 이미지와 data 받을 때 @RequestPart을 사용해서 파라미터를 받는 반면에, pt-Id는 @RequestParam을 사용해서 받고 있다. pt-id도 @RequestPart를 사용해서 받아봤는데 content type 'application/octet-stream' not supported 오류가 발생하게 되어서 pt-id는 @RequestParam을 사용해서 테스트 해봤는데 제대로 받아졌다.
@RequestPart를 알기 전에 파일은 @RequestParam 사용, 데이터는 @RequestBody 등 여러 방법으로 테스트를 진행하였는데 다 잘 안되었다. 그래서 구글링 해서 찾아보니 "multipart/form-data" 요청을 받기 위해 @RequestPart를 사용해야 한다는 것을 알게 되었다.)
- FileUpload 로직
아래는 파일을 저장하는 로직이다. 해당 로직에서 중요한 부분은 파일을 저장장치에 저장하고 DB에는 파일 저장 경로, 크기 등 필요한 정보를 저장한다. 그리고 파일을 저장할 때 파일 이름 암호화 + random함수를 사용하여 파일 이름 중복 방지를 한다.(동일한 파일이 서버에 올라가면 덮어쓰기 돼서 기존 데이터가 사라질 수 있다)
내 경우는 리뷰에 올라가는 파일들이라 리뷰 - 파일(1:N)관계를 가지게 되어 @OnetoMany로 연관관계를 가지고 파일들을 엔티티로 관리하였다.
그 외 크게 어려운 부분은 없으며 주석 보면서 참고하면 된다.
- 테스트
포스트맨을 활용하여 파일 업로드가 잘 되었는지 확인해보자.
아래 그림 10을 보면 리뷰 내용 + 파일들이 잘 저장되었는것을 확인할 수 있다.
파일인 경우 파일을 다운받아 볼 수 있는 URI를 제공하여 프론트에서 처리할 수 있게 하였다.
글이 길면 읽기 힘드니까 2편에서 계속...
'BackEnd(Java) > Rest API' 카테고리의 다른 글
RestAPI에 대해서 제대로 알고 있는가? (0) | 2022.06.29 |
---|---|
RestAPI LocalDateTime 응답 데이터 포맷 변경 방법 (0) | 2022.05.22 |
이미지 업로드 및 조회 API 개발 2편 (0) | 2022.04.18 |
API Swagger 적용기 (0) | 2022.03.31 |
RestApi 참고자료 (0) | 2022.03.29 |