웹개발/Spring Boot

[Spring Boot] JPA 게시판 게시글 등록, swagger-ui

BEOTIZA♥ 2024. 2. 19. 20:00

JPA 게시판 게시글 등록 기능을 개발해보자

1. build.gradle 세팅
2. PostController에서 클라이언트 요청
3. PostController의 postCreate 메서드
4. PostService의 createPost 메서드 호출
5. PostRepository 게시물 생성 및 저장
6. 저장된 게시물 정보를 바탕으로 새로운 CreatePostResponse 객체
7. swagger-ui로 확인하기

 

 

1. build.gradle 

dependencies {
	//라이브러리 추가 : 의존성 추가
	implementation 'org.springframework.boot:spring-boot-starter-web'
	testImplementation 'org.springframework.boot:spring-boot-starter-test'
	
	// spring-boot-jpa
	implementation 'org.springframework.boot:spring-boot-starter-data-jpa'

	//lombok
	compileOnly 'org.projectlombok:lombok'
	annotationProcessor 'org.projectlombok:lombok'

	// mysql
	runtimeOnly 'com.mysql:mysql-connector-j'
    }

 

2. PostController에서 클라이언트 요청

  •   /api/v1/posts 경로로 POST 요청
  • 클라이언트가 보낸 데이터(title과 content)를 담은 CreatePostRequest 객체를 받아서 PostService의 createPost 메서드에 전달한다.
// PostController

@Controller
@ResponseBody
@RestController // @RequestMapping : 특정 URL을 매핑하게 도와준다
@RequestMapping("/api/v1/posts") // @RequiredArgsConstructor : final을 혹은 @NonNull 어노테이션이 붙은 필드에 대한 생성자를 자동으로 생성해준다
@RequiredArgsConstructor
public class PostController {
    }

3. PostController postCreate 메서드

  • postService.createPost(request)를 호출하여 게시물을 생성 : dto CreatePostRequest
  • 해당 메서드는 클라이언트가 보낸 데이터(title과 content)를 담은 CreatePostRequest 객체를 받는다
//dto CreatePostRequest

@Getter
@AllArgsConstructor
@NoArgsConstructor
public class CreatePostRequest {

    private String title;
    private String content;
}
  • PostService의 createPost 메서드 호출
  • return
// PostController

@Controller
@ResponseBody
@RestController // @RequestMapping : 특정 URL을 매핑하게 도와준다
@RequestMapping("/api/v1/posts") // @RequiredArgsConstructor : final을 혹은 @NonNull 어노테이션이 붙은 필드에 대한 생성자를 자동으로 생성해준다
@RequiredArgsConstructor
public class PostController {

    private final PostService postService;

    // 작성
    @PostMapping
    public ResponseEntity<CreatePostResponse> postCreate(
            @RequestBody CreatePostRequest request){

        CreatePostResponse response = postService.createPost(request);
        return new ResponseEntity<>(response, HttpStatus.OK);
    }

 

4. PostServicecreatePost 메서드 호출

  • createPost 메서드는 받은 데이터로 새로운 게시물을 만들고
  • postRepository.save(post)post라는 Post 엔티티를 데이터베이스에 저장하는 역할
  • 메서드의 반환값(return)은 데이터베이스에 저장된 결과인 'Post' 엔터티 savePost 변수에 할당
  • savePost.getPostId(), savePost.getTitle(), savePost.getContent()는 데이터베이스에 저장된 게시물의 정보를 가져와서 새로운 CreatePostResponse 객체를 생성
  • 이 객체에는 새로운 게시물의 정보가 담겨 있다
// PostService

@Service
@Transactional(readOnly = true)
@RequiredArgsConstructor
public class PostService {

    private final PostRepository postRepository;

    @Transactional
    public CreatePostResponse createPost(CreatePostRequest request){
        Post post = Post.builder()
                .title(request.getTitle())
                .content(request.getContent())
                .build();

        Post savePost = postRepository.save(post);

        return new CreatePostResponse(savePost.getPostId(), savePost.getTitle(), savePost.getContent());
    }
    }

 

 

5. PostRepository 게시물 생성 및 저장

// PostRepository

public interface PostRepository extends JpaRepository<Post, Long> {
// createPost 메서드에서는 PostRepository를 사용하여 새로운 게시물을 저장합니다.
}

 

6. 저장된 게시물 정보를 바탕으로 새로운 CreatePostResponse 객체

  • 이 객체에는 새로운 게시물의 정보가 담겨 있습니다.
  • CreatePostResponse 객체를 사용하여 클라이언트에게 응답을 보냅니다.
@Getter
@AllArgsConstructor
@NoArgsConstructor
public class CreatePostResponse {

    private Long postId;
    private String title;
    private String content;
}

 

7. swagger-ui로 확인하기

www.locallhost:8080/swagger-ui/index.html

// build.gradle

dependencies {

	// 생략    
	// swagger - springdoc
	implementation 'org.springdoc:springdoc-openapi-starter-webmvc-ui:2.3.0'
}

주먹구구로 작성만 하다가 이제는 흐름을 이해하려고 한다. 기능이 어떻게 구현되는지 흐름을 연습하고 또 연습하기

조회, 삭제도 이어서 정리할 예정이다.