작업 일지#13 프로덕션 코드 리팩토링 - JPA로 이전
2022. 3. 5. 00:30ㆍ작업일지
프로젝트 진행이 거의 7개월이 넘어간다. 알고리즘, CS 공부와 병행하는 상황이라, 프로젝트에 시간을 많이 투자하질 못해서 아쉽긴 하지만, 프레임워크만 잘 사용한다고, 애플리케이션 코드의 퀄리티와 이해도가 깊어지는 것은 아니니, 꼭 병행해야만 했었던 부분이었다. 어쨌거나, 기간이 길어지고, 그 기간 동안, 다양한 학습을 하면서, 진행했던 프로젝트 코드들을 살펴보니, 다음과 같은 문제점들을 발견했다.
- 데이터 액세스 로직 구현의 경우, myBatis를 활용하였는데, 자바 객체와 릴레이션의 구조적인 차이로 인해 POJO 스타일의 코드를 일부 포기할 수 밖에 없었다. (ex. 자바의 경우, 의존하는 객체는 해당 인스턴스 변수를 참조하는 방식으로 구현해야 하는데, 릴레이션의 경우, FK를 참조해야 한다.)
- 간단한 CRUD 로직부터, 복잡한 비즈니스 로직에 필요한 SQL 쿼리문을 전부 직접 매핑해야 하는데, myBatis의 경우 이 과정이 너무 번거롭다.
- 프로젝트가 장기화되면서, JAVA에 대한 이해도가 달라지고 interface의 설계 구조를 개선하면서 진행하다 보니, 결과적으로는 도메인마다 일관적이지 않아, 코드의 생산성이 떨어졌다.
JPA를 선정한 이유는 다음과 같다.
- 자바의 객체와 릴레이션의 차이를 해결해주어, 객체지향적인 코드를 좀 더 직관적으로 구현할 수 있게 도와준다.
- 잘못 이해하고 사용하면, 성능 저하를 일으킬 수 있지만, 제대로 이해하고 사용한다면, 오히려 SQL mapper 보다 더 좋은 성능을 쉽게 확보할 수 있다. (특히, 영속성 콘텍스트의 캐시의 특성을 잘 이해하면, 좀 더 간결한 코드로 DB IO를 줄일 수 있다.)
- spring-data-jpa가 의존하는 spring-data-common에서 제공하는 repository 계열의 검증된 인터페이스를 활용하여, 인터페이스 설계로 인해 발생하는 시간을 줄이고, 비즈니스 로직에 좀 더 집중할 수 있는 시간을 확보할 수 있다.
'작업일지' 카테고리의 다른 글
[회고] 기능 구현부터 배포 자동화까지... -1- 왜 CI/CD가 필요할까? (0) | 2022.04.22 |
---|---|
작업일지#14 Sync와 Async 속도차이 (0) | 2022.03.24 |
작업 일지#12 1차 배포 (0) | 2022.03.01 |
작업 일지#11 배포준비 (0) | 2022.02.10 |
작업 일지#10 작업 방향 계획 변경 (0) | 2022.01.26 |