[SpringBoot] 2024 게시판 만들기 실습 ⑤ - Controller

SihoonCho·2024년 11월 21일
0
post-thumbnail

※ 읽기에 앞서


본 시리즈는 작성자의 이해와 경험을 바탕으로 실습 위주의 설명을 제공하고자 작성되었습니다.
실습 중심의 이해를 목표로 작성되었기 때문에, 다소 과장되거나 생략된 부분이 있을 수 있습니다.
따라서, 이론적으로 미흡한 부분이 있을 수 있는 점에 유의하시고 양해 부탁드립니다.

또한, Spring Boot 기반의 Backend 개발에 중점을 두고 설명하고 있으므로,
Frontend와 관련된 내용은 별도의 참고자료를 검색/활용하실 것을 권장드립니다.


📌 패키지 구조


├── src
│   ├── main
│   │   ├── java
│   │   │   └── com.companyname.projectname
│   │   │       ├── post
│   │   │       │   ├── controller				// 패키지 추가
│   │   │       │   │   └── PostController.java		// 클래스 추가
│   │   │       │   ├── dto
│   │   │       │   │   ├── PostCreateRequestDto.java
│   │   │       │   │   ├── PostUpdateRequestDto.java
│   │   │       │   │   ├── PostDetailResponseDto.java
│   │   │       │   │   └── PostListResponseDto.java
│   │   │       │   ├── model
│   │   │       │   │   └── Post.java
│   │   │       │   ├── repository
│   │   │       │   │   └── PostRepository.java
│   │   │       │   └── service
│   │   │       │       ├── PostReadService.java
│   │   │       │       ├── PostReadServiceImpl.java
│   │   │       │       ├── PostWriteService.java
│   │   │       │       └── PostWriteServiceImpl.java
│   │   │       └── ProjectNameApplication.java
│   │   └── resources
│   └── test

📌 Controller


package com.companyname.projectname.post.controller;

import com.companyname.projectname.post.dto.PostCreateRequestDto;
import com.companyname.projectname.post.dto.PostDetailResponseDto;
import com.companyname.projectname.post.dto.PostListResponseDto;
import com.companyname.projectname.post.dto.PostUpdateRequestDto;
import com.companyname.projectname.post.service.PostReadService;
import com.companyname.projectname.post.service.PostWriteService;
import lombok.RequiredArgsConstructor;
import org.springframework.web.bind.annotation.*;

import java.util.List;

@RestController
@RequiredArgsConstructor
public class PostController {
    private final PostReadService postReadService;
    private final PostWriteService postWriteService;

    @GetMapping("/api/v1/post/list")
    public List<PostListResponseDto> getOverviewPosts() {
        return postReadService.findAllLists();
    }

    @GetMapping("/api/v1/post/list/detail")
    public List<PostDetailResponseDto> getDetailedPosts() {
        return postReadService.findAllDetails();
    }

    @GetMapping("/api/v1/post/{id}")
    public PostDetailResponseDto getPost(@PathVariable Long id) {
        return postReadService.findById(id);
    }

    @PostMapping("/api/v1/post")
    public PostDetailResponseDto createPost(@RequestBody PostCreateRequestDto requestDto) {
        return postWriteService.create(requestDto);
    }

    @PutMapping("/api/v1/post")
    public PostDetailResponseDto updatePost(@RequestBody PostUpdateRequestDto requestDto) {
        return postWriteService.update(requestDto);
    }

    @DeleteMapping("/api/v1/post/{id}")
    public void deletePost(@PathVariable Long id) {
        postWriteService.delete(id);
    }
}
  • @RestController
    • API 서버를 구현할 때 주로 사용하며,
      컨트롤러 클래스를 RESTful 웹 서비스의 엔드포인트로 만들어줌
    • @Controller@ResponseBody를 결합한 형태로, 반환값을 JSON 또는 XML 형태로
      바로 변환하여 클라이언트에 전달
  • @RequiredArgsConstructor
    • 필드 주입 대신 생성자 주입으로 PostService 자동으로 의존성 주입
    • Spring DI(Dependency Injection) 컨테이너에서 안전하게 의존성 관리
    • 선언된 final 필드는 생성자에서 자동으로 초기화
  • @GetMapping, @PostMapping, @PutMapping, @DeleteMapping
    • HTTP 메서드별 요청을 처리하는 매핑 어노테이션
      • @GetMapping: GET 요청 처리, 주로 조회 작업에 사용
      • @PostMapping: POST 요청 처리, 주로 생성 작업에 사용
      • @PutMapping: PUT 요청 처리, 주로 업데이트 작업에 사용
      • @DeleteMapping: DELETE 요청 처리, 주로 삭제 작업에 사용
    • RESTful API를 구현할 때 간결하고 가독성 높은 코드 작성 가능
  • @PathVariable
    • URL 경로에 포함된 변수를 매핑하는 데 사용
    • 주로 RESTful API에서 자원 식별자(ID) 등을 처리할 때 사용
  • @RequestBody
    • HTTP 요청의 본문(Body)을 Java 객체로 변환하여 매핑하는 데 사용
    • 주로 POST, PUT 요청에서 JSON 데이터를 객체로 변환할 때 사용


본 시리즈는 작성자의 이해와 경험을 바탕으로 실습 위주의 설명을 제공하고자 작성되었습니다.
실습 중심의 이해를 목표로 작성되었기 때문에, 다소 과장되거나 생략된 부분이 있을 수 있습니다.
따라서, 이론적으로 미흡한 부분이 있을 수 있는 점에 유의하시고 양해 부탁드립니다.

또한, Spring Boot 기반의 Backend 개발에 중점을 두고 설명하고 있으므로,
Frontend와 관련된 내용은 별도의 참고자료를 검색/활용하실 것을 권장드립니다.
profile
개발을 즐길 줄 아는 백엔드 개발자

0개의 댓글