[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.
블로그의 정보
배부른코딩로그
배부른코딩로그활동하기
CodeLife배부른코딩로그 님의 블로그입니다.