{
	글의 정보...
	...
	모집 분야 : [
		{
			필드명 : 백엔드
			모집인원 : 2
			종합 요구 능력치 : 10
			
			기술 스택 : [
					{
						스택 이름 : 스프링
					}
			]
	]
						

글 작성 및 추가 시, 프론트에서 위와 같은 JSON 데이터를 서버에 보내주면, 아래와 같은 방식으로 처리하도록 구성하였다.

@PostMapping("/recruitment")
public PostResponse recruitmentWrite(@RequestBody CreatePostRequest postDto) {
    return postService.createPost(postDto);
}
  1. 요청이 오면 해당 컨트롤러에서 @RequestBody를 통해서 Data를 받는다.
public PostResponse createPost(CreatePostRequest postDto) {

    Post post = Post.builder()
            .title(postDto.getTitle())
            .recruitType(postDto.recruitTypeToEnum())
            .contact(postDto.getContact())
            .recruitIntroduction(postDto.getRecruitIntroduction())
            .isCompleted(false)
            .build();

    List<CreateFieldsRequest> fieldsRequests = postDto.getFieldsList();
    for (CreateFieldsRequest fieldsRequest : fieldsRequests) {
        Fields fields = Fields.builder()
                .post(post)
                .fieldsName(fieldsRequest.getFieldsName())
                .recruitCount(fieldsRequest.getRecruitCount())
                .totalAbility(fieldsRequest.getTotalAbility())
                .build();

        fieldsRequest.getStacks()
                .forEach(techStackDto -> TechStack.builder()
                        .fields(fields)
                        .stackName(techStackDto.getStackName())
                        .build());
    }

    postRepository.save(post);

    return new PostResponse(post);
}
  1. 받은 데이터는 위 서비스 로직에서 처리한다.
    1. 받아온 DTO 정보를 기반으로 Post 엔티티를 빌드한다.
    2. Post 엔티티 빌드 시, isCompleted 옵션은 기본적으로 false로 설정해준다.
    3. 받아온 DTO 안에 있는 List<CreateFieldsRequest>를 꺼내온다.
    4. 향상된 for 문을 돌려 DTO의 data를 기반으로, Fields 엔티티를 빌드한다.
    5. 동시에 FieldsDto 내부의 List<CreateTechStackRequest>의 정보를 이용하여 TechStack 엔티티를 빌드하고, 해당 엔티티에 d에서 빌드한 Fields 엔티티를 할당해준다. (연관관계)
    6. Post 엔티티에서 Fields 생명 주기를 관리할 수 있도록 cascade = ALL, orphanremoval = true 옵션이 부여되어 있고, Fields 엔티티에서 TechStack 생명 주기를 관리할 수 있도록 cascade = ALL, orphanremoval = true 이 부여되어 있다. 그렇기 때문에 마지막으로 Post 엔티티만 저장해주면 모든것이 다 연관된 채로 저장이 완료된다.
    7. 저장된 Data를 PostResponse Dto로 매핑 및 변경하고, 프론트에 데이터를 내려준다.