Daily Notebook

[Spring] Controller CRUD 보일러플레이트성 코드 줄이기

by 배부른코딩로그
💡 모든 도메인에 대해 CRUD는 대부분 존재한다. 이러한 보일러플레이트성 코드를 획기적으로 줄여보자!

목표

  • 보일러플레이트 코드(Boilerplate code)란 무엇인지 설명할 수 있다.
  • 컨트롤러(Controller)의 반복적인 CRUD 코드량을 획기적으로 줄일 수 있다.

 

스프링에서 사용자의 요청과 응답을 처리하는 컨트롤러(Controller)는 다양한 요청처리를 담당한다.

특정한 도메인 데이터(예. 고객, 주문)에 대한 데이터 CRUD(생성/조회/갱신/삭제) 또는 비지니스 로직이 있을텐데,

CRUD는 기본적으로 작성된다.

 

매번 똑같은 패턴의 CRUD는 크게 변경될 일이 없기 때문에 보일러플레이트성 코드라고 할 수 있다.

그렇다면, 반복적인 CRUD 코드를 확 줄일 방법은 없을까?

 

제네릭과 매핑정보를 이용한 작성전략

제네릭 타입을 이용하여 추상클래스를 만들면 다양한 방면에서 재사용이 가능해진다.

컨트롤러 이외에 반복적인 패턴을 이용하는 부분에도 활용할 수 있으며,

프로젝트의 전체적인 코드량이 줄어들고, 기능개발 혹은 유지보수 시 일관된 코딩 패턴을 유지할 수 있다.

package com.example.etoho.controller;
import java.util.ArrayList;
import java.util.List;
import org.springframework.web.bind.annotation.DeleteMapping;
import org.springframework.web.bind.annotation.GetMapping;
import org.springframework.web.bind.annotation.PatchMapping;
import org.springframework.web.bind.annotation.PostMapping;
public abstract class CrudController<D,P,S> {
S service;
@PostMapping
@ResponseStatus(HttpStatus.CREATED)
public int create(D dto) {
LOG.debug("DTO 객체에 대한 DAO 삽입로직");
return 0;
}
@PatchMapping("{id}")
public int update(
@PathVariable P primayKey,
D dto
) {
LOG.debug("id 값rhk DTO 객체를 이용하여 DAO 수정 로직");
return 0;
}
@GetMapping
public List<D> findAll(){
System.out.println("DAO에서 DTO 타입의 객체 리스트를 가져오는 로직");
List<D> dList = new ArrayList<>();
return dList;
}
@GetMapping("{id}")
public D findByID(@PathVariable P primaryKey) {
LOG.debug("id 값을 이용하여 DTO 객체를 가져오는 DAO 로직");
D d = (D) new Object();
return d;
}
@DeleteMapping("{id}")
public int delete(@PathVariable P primaryKey) {
LOG.debug("id 값을 이용하여 해당 DTO 객체를 삭제하는 DAO 로직");
return 0;
}
}​

 

 

 

출처

  • in My Company, EHOTO, 2023-04-04

 

Last Updated. 2022. 04. 04.

 

블로그의 프로필 사진

블로그의 정보

배부른코딩로그

배부른코딩로그

활동하기