과제 8. Controller - Service - Repository

수원 개발자·2024년 4월 15일

스진초_과제

목록 보기
8/12
post-thumbnail

Controller

먼저 컨트롤러는 Model - 사용자의 중간 매개체의 역할을 한다. 사용자가 요청을 하면 그에 맞는 로직을 부르고 데이터를 보내주는 소통의 역할을 한다. 정확히 말하자면 사용자가 요청을 던지면 그에 맞는 로직을 수행할 수 있도록 서비스에게 시킬 예정이다.

@RestController
public class ProductController {
    // 사용자가 요청을 던지면
    // 그에 맞는 로직을 수행할 수 있도록 서비스에게 시킬 예정.

    @Autowired
    private ProductService productService;
    
    // 개별 상품 조회
    // @RequestMapping -> 내용에 맞는 요청이 날라오면 아래의 로직이 실행될 것이다라는 의미
    @GetMapping("/products/{id}")
    public Product findProduct(@PathVariable("id") int id) {
        System.out.println(id);
        return productService.findProduct(id);
    }

나는 실질적으로 HTTP 요청을 받아들이고, 해당 요청에 맞는 서비스 메서드를 호출한 뒤, 그 결과를 HTTP 응답으로 반환하는 가장 중요한 역할을 한다고 생각한다.

Service

서비스는 주로 컨트롤러에서 받은 요청을 처리하고, 데이터 처리, 외부 시스템과 상호 작용등을 수행하는 비즈니스 로직을 담당하는 부분이다. 컨트롤러에서 주로 사용하는 로직에 대해 모듈화하고 이를 통해 간결한 코드를 통해 중복을 줄일 수 있다.

public class ProductService {

    private ProductRepository productRepository;

    @Autowired
    ProductService(ProductRepository productRepository) {
        this.productRepository = productRepository;
    }

    public Product findProduct(int id) {
        return productRepository.findProduct(id);
    }

Repository

레포지토리는 데이터베이스와의 상호작용을 담당하는 역할을 한다. 데이터베이스와 기존 로직들에 대해서 연결하기 위해서 데이터베이스에서 데이터를 읽어오고 이에 대해 관련 로직 및 CRUD 작업을 주로 수행한다. JPA, jdbc, Spring JPA 등을 통해 더 편하고 객체와 데이터베이스를 연동하고, 사용감을 올리는 등의 과정을 수행할 수 있다.

public class ProductRepository {

    @Autowired
    EntityManager entityManager;

    private Map<Integer, Product> db = new HashMap<>();
    private int id = 1;


    public Product findProduct(int idx) {
        return db.get(idx);
    }

0개의 댓글