-
POST 요청으로 연관관계를 갖는 객체들의 데이터 생성하기Today I Learned 2022. 11. 1. 23:53
객체 간 연관관계가 존재하는 객체들의 데이터를 한 번에 생성해 저장해야 하는 경우가 있다. 가령 게시글을 작성한다고 할 때, 글과 함께 사진 여러 장을 첨부해 등록하는 경우가 있다. JPA 환경 하에서 이를 구현하고자 한다면 사진 객체 여럿이 게시글 하나를 참조하는 형태가 될 것이다.
나중에 언젠가는 짚고 넘어가야 할 부분이므로 미리 연습해보는 차원에서 POST 요청을 통해 연관관계를 갖는 객체들을 생성해야 하는 순서를 정리했다.
유저 객체를 생성하면서 생성된 유저 객체가 작성자인 게시글들을 동시에 생성하는 경우를 생각해보자. (예시가 이해가 가지 않는다면 유저를 게시글에, 게시글을 이미지에 매핑해보자.) 다음의 테이블들 중 PERSON 테이블에 새로운 사용자를 추가하고, 생성된 사용자 객체를 참조하는 게시물들을 POST 테이블에 추가할 것이다.
해당 테이블들은 다음의 양방향 @OneToMany, @ManyToOne 형태로 정의되어 있다.
새 객체 인스턴스를 추가하는 로직은 POST 요청을 받기는 하지만 @RequestBody를 이용해 어떤 값을 전달하지는 않고 다음과 같이 고정된 값을 직접 이용하는 식으로 구상했다.
두 번째 사진의 소스코드 로직은 다음과 같다.
1. 사용자 객체를 생성하고 사용자 Repository에 추가한다.
2. id가 부여된 사용자 객체를 게시글 객체에 생성자로 같이 전달한 뒤 게시글 Repository에 모두 추가한다.
(사진에서는 게시글의 id를 직접 부여했지만 Entity를 정의할 때 id 필드에 생성자를 통한 생성 시 값이 자동으로 생성되는 @GeneratedValue 어노테이션을 붙였기 때문에 id는 부여하지 않아도 된다.)
httpie를 통해 POST 요청을 보낸 뒤 데이터베이스 상에서 확인한 결과는 다음과 같다.
'Today I Learned' 카테고리의 다른 글
스프린트 주간 2주차 중간점검 (0) 2022.11.03 양방향 연관관계를 갖는 객체를 테스트하는 어려움 (0) 2022.11.02 모델 구조 설계는 데이터베이스 설계가 아닌 객체 설계 먼저 (0) 2022.10.30 양방향 @ManyToMany 관계를 갖는 모델을 정의하고 데이터 가져오기 (0) 2022.10.29 너무 큰 작업은 task를 쪼개 MVP로 만들기 (0) 2022.10.28