개인적인 생각을 작성한 글입니다. 잘못된 점이나 부족한 부분이 있다면 언제든 지적 부탁드립니다
지금 진행 중인 프로젝트에서 글 작성 api 를 담당하게 되었다. 글 작성 화면은 아래와 같다.
기존에 내가 작성한 게시글 작성 api에서는 게시글에 필요한 정보 와 이미지 리스트 를 한번에 가져와 서비스에서 처리하도록 되어있었다.
@PostMapping
public ResponseEntity<IdResponse<Long>> addStory(@RequestPart AddStoryRequest request,
@RequestPart(required = false) List<MultipartFile> images){
return ResponseEntity.status(HttpStatus.CREATED).body(storyService.addStory(request, images));
}
그런데 이런 피드백을 듣게 되었고 ,, 처음엔 글을 작성하는데 api를 두번이나 호출해야하나? 생각했지만 ,, 계속 생각을 하다 보니 ..
만약 하나의 api로 글을 작성하는데 첨부하는 이미지의 용량이 크고 개수가 많다면 시간이 오래 걸리게 될 것이다. 그런데 게시글 작성 API와 이미지 업로드 API를 분리하면, 이미지 업로드가 진행되는 동안에도 게시글 작성 API는 동시에 다른 요청을 처리할 수 있기 때문에 시스템 성능이 향상될 것이라는 결론을 내리게 되었다.
그리고 다시 이미지 엔티티와 게시글 엔티티를 어떻게 매핑하는 게 좋을지 고민에 빠지게 되었다.
방법 1: 이미지 업로드 api에서 이미지 엔티티 생성 후 이미지 id 리스트 반환
-> 게시글 생성 시 게시글 엔티티와 이미지 id로 찾은 이미지 엔티티 매핑
방법 2: 게시글 생성 api에서 게시글 엔티티 생성후 게시글 id 반환
-> 이미지 업로드 시 이미지 엔티티와 게시글 id로 찾은 게시글과 매핑
방법 1 : 이미지 업로드가 잘 되고, 게시글 생성에서 오류가 터지면 큰 문제는 없음. 하지만 이미지 업로드를 하고 게시글 작성을 하면 .. 아무곳에도 쓰이지 않는 이미지가 db에 저장됨
방법 2 : 게시글 업로드가 되었는데 이미지 업로드가 제대로 이루어지지 않는다면 이미지가 없는 게시글이 됨.
후자가 나을 것 같다는 결론을 내렸다. 허나 사용하지 않는 이미지가 db에 있을 필요가 없기 때문에 이를 처리하는 로직을 따로 추가해야할 것 같다.
✌🏻 수정한 코드
/**
* 이야기에 첨부될 이미지를 저장합니다.
* @param images 이야기에 첨부한 사진 입니다. 10장까지 첨부 가능합니다.
* @return 생성된 이야기의 id가 반환됩니다.
*/
@PostMapping
public ResponseEntity<List<UUID>> addStoryImage(@RequestPart(required = false) List<MultipartFile> images) throws IOException {
return ResponseEntity.status(HttpStatus.CREATED).body(imageService.addStoryImage(images));
}
/**
* 이야기를 생성합니다.
* @param request 이야기 생성을 위한 dto 입니다.
* @return 생성된 이야기의 id가 반환됩니다.
*/
@PostMapping
public ResponseEntity<IdResponse<Long>> addStory(@RequestBody AddStoryRequest request) {
return ResponseEntity.status(HttpStatus.CREATED).body(storyService.addStory(request));
}
'Server > Spring boot' 카테고리의 다른 글
Facade Pattern(퍼사드 패턴) 도입기 (0) | 2023.09.05 |
---|---|
[트러블 슈팅] 스프링 순환 참조(spring circular reference) 해결하기 (0) | 2023.07.15 |
[Spring boot] Google 로그인 유저 정보 가져오기 (0) | 2023.05.02 |
[Spring boot] security + Oauth2로 구글 로그인 구현하기 (1) | 2023.05.01 |
[Spring boot] security + Oauth2로 구글 로그인 구현하기 - OAuth 서비스 등록 (0) | 2023.04.29 |