
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. PostService의 createPost 메서드 호출
- 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'
}
주먹구구로 작성만 하다가 이제는 흐름을 이해하려고 한다. 기능이 어떻게 구현되는지 흐름을 연습하고 또 연습하기
조회, 삭제도 이어서 정리할 예정이다.
'웹개발 > Spring Boot' 카테고리의 다른 글
| [AI] 챗봇 답변 DB저장 하기 오류 해결과정 (0) | 2024.07.17 |
|---|---|
| [ SpringBoot] JPA Entity Mysql 연동 과정 (0) | 2024.02.20 |
| [Spring Boot] RequestDisPatcher 와 sendRedirect (0) | 2024.02.08 |
| JPA N+1문제 @BatchSize로 해결하기 (2) | 2024.01.30 |
| [Spring Boot] Model Mapper (0) | 2024.01.29 |