본문 바로가기
📕 Spring Framework/Spring Project

2022.05.10 「Rest Ful Api & DTO,VO mapping & Mysql Index & 상수화」

by GroovyArea 2022. 5. 10.
프로젝트를 진행 중에 수정사항이 너무도 많다는 것을 알게 되었다. 예전에 학원에서 프로젝트를 할 때는 어떻게 만들든 기한이 정해져 있었기 때문에 완성도가 우선이었고, 유지보수에 대한 프로그래밍에 신경을 쓰지 않았었다. 
하지만 실제로 제대로 된 프로그래밍을 하다 보니 예전 버릇이 나오게 되었고, 이번 리뷰를 받은 김에 리팩터링을 빠르게 하며 정리를 해볼 생각이다.

 

RestFul Api 의 return 값 

1. 되도록 체이닝 하는 방식을 사용

2. response에 해당되는 헤더 메시지(상태 코드, 메시지 등등), 바디 값을 다 넣도록 노력하자

 

임시적인 ResponseEntity의 사용

 

DTO, VO 간의 매핑

현재 Mybatis를 사용중이므로 테이블 자체의 Entity는 VO

 service < - > mapper 계층 이동 시 VO를 이용해야 함 (이유? DB를 표현한 직접적인 객체이기 때문이다!)

요게 핵심

하지만 매핑을 하는 메서드들을 만들자니 필드가 워낙 많아 복잡하다.

그래서 친절히 누군가 만들어 놓은 라이브러리를 이용할 것이다~

ModelMapper 의존성 추가
이런식으로 setter를 언제 다 쓰고 있을까?
이 한줄이면 끝나는 것을!

 

=> ModelMapper는 Service에서 자주 사용될 것이므로 아예 Bean으로 등록했다.

Configuration 이용

상수화

당연히 리터럴 값은 존재하면 그 값은 의미없는 값이자 객체지향적인 설계가 아니다.

상수화를 하거나 Enum을 만들어 관리하자

ProductController 내에서.
ResponseEntity에 태워 보낼 메시지 열거형

Mysql Index 관련

product 테이블의 select 쿼리 관련해서 Primary Key인 product_no 컬럼을 이용하려 그랬다.

하지만 상품 추가 액션에서 추가 후 추가된 상품 내역을 응답하는 로직에서 

sql은 아직 받아오지 못한 product_no로 찾고 있었다. 

해서 Index를 추가해서 쿼리 성능을 높이는 방식을 택했다.

추가하는 dto는 product_no를 가지고 있지 않음.
이름을 인덱스로 찾는 service 메서드 추가
flyway를 통해 테이블 인덱스 추가
서버를 실행하니 제대로 동작함
역시 product_name 컬럼을 이용한 인덱스가 잘 추가된 것을 볼 수 있다.

반응형