※ 읽기에 앞서
본 시리즈는 작성자의 이해와 경험을 바탕으로 실습 위주의 설명을 제공하고자 작성되었습니다.
실습 중심의 이해를 목표로 작성되었기 때문에, 다소 과장되거나 생략된 부분이 있을 수 있습니다.
따라서, 이론적으로 미흡한 부분이 있을 수 있는 점에 유의하시고 양해 부탁드립니다.
또한, 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와 관련된 내용은 별도의 참고자료를 검색/활용하실 것을 권장드립니다.