기존에는 하나의 파일만 S3에 업로드해서 저장한 경우라면 이번에는 하나의 게시판에 다중의 사진을 업로드하는 로직을 추가하였다.
처음에는 다중으로 이미지를 업로드 하는 방법이 쉽게 생각나지는 않았다.
데이터베이스는 리스트를 저장할 수 없기 떄문에 따로 테이블을 만들기로 생각했다.
@Entity
@Getter
@NoArgsConstructor
public class PostImage {
@Id
@GeneratedValue(strategy = GenerationType.IDENTITY)
private Long id;
@ManyToOne(fetch = FetchType.LAZY)
@JoinColumn(name = "POST_ID")
private Post post;
@Column
private String image;
public PostImage(Post post, String image) {
this.post = post;
this.image = image;
}
}
Post와의 다대일 연관관계를 설정해서 Post(게시글)의 id를 기억하게 했다.
이렇게 하면 다음과 같이 저장될것이다.
Pk=1 Fk=1 imge=http://s3.amzone...jpg
Pk=2 Fk=1 imge=http://s3.amzone...jpg
즉 id가 1인 게시글의 이미지를 2개를 저장한 것이다.
Post를 작성하는 서비스에서 다음과 같은 코드를 추가해주면 된다.
List<String> imgList = new ArrayList<>();
List<String> img_url = s3Service.upload(requestDto.getImage());
for (String image : img_url) {
PostImage img = new PostImage(posts, image);
postImageRepository.save(img);
imgList.add(image);
}