thumbnail
비상교육 현장실습 - 프로젝트 툴 선정
VISANG
2023.07.08.

MyBatis vs JPA

프로젝트 코드와 SQL문을 분리하기 위해서 JPA, MyBatis 주로 사용한다. 그러나, JPA는 객체지향적으로 개발할 수 있고, MyBatis는 SQL문을 직접 작성할 수 있다는 장점이 있다. 따라서, 프로젝트의 특성에 따라서 선택해야 한다.

MyBatis

SQL를 소스 코드가 아닌 XML로 분리하여 관리한다.

  • 장점

    • 배우기가 쉽고, SQL문 변경할 때마다 자바 코드를 수정하거나 컴파일 하지 않아도 됨

    • 또한, 다양한 프로그래밍 언어로 구현 가능

  • 단점

    • 스키마 변경시 SQL 쿼리를 직접 수정해줘야함

    • 반복 쿼리작업을 수행해야 할 수도 있음

    • 데이터베이스 변경 시 로직도 함께 수정해줘야한다.

JPA

구현된 클래스와 매핑을 해주기 위해 사용되는 프레임워크

Class와 RDB의 테이블을 매핑해주는 ORM 기술 기반

ex) Hibernate

  • 장점

    • 쿼리 코드량 감소, 간편하게 수정이 가능(유지보수, 리팩토링 용이)

    • 동일한 쿼리에 대한 캐시 기능을 사용하기 때문에 더욱 높은 성능을 낼 수 있음

  • 단점

    • 매핑 설계를 잘못했을 때 성능 저하 발생 가능

    • 다수의 테이블 조인시, 신경써야 할 게 많음

Swagger vs Spring REST Docs

API 문서화 : 클라이언트가 REST API 애플리케이션에 요청을 전송하기 위해서 알아야 되는 요청 정보(요청 URI, RequestBody, QueryParameter 등)를 정리하여 문서화 하는 과정

애플리케이션 빌드를 통해 API 문서를 자동 생성하는 경우가 대부분이다.

클라이언트에게 제공된 API 정보와 수기로 작성한 API 문서의 정보가 다를 수도 있는데, 자동화를 하면 이를 방지할 수 있다.

Swagger

  • Springboot 프로젝트에 Controller에 명시된 어노테이션을 해석하여 API 문서를 자동으로 만들어줌

  • API 정보 현행화가 가능하고, API를 통해 Parameter, 응답 정보, 예제 등 Spec 정보 전달이 용이함

  • 하지만, 꽤 많은 어노테이션을 애플리케이션 코드에 추가해야함

Spring REST Docs

  • 애플리케이션 코드에는 API 문서 생성을 위한 어노테이션 같은 정보가 추가되지 않음

  • 하지만, Controller 테스트 코드가 선행되어야 하며, Controller 테스트 클래스에 API 문서를 위한 정보가 추가됨

  • 테스트에 성공해야만 API 문서가 생성되므로, API 스펙 정보와 일치하는 API 문서가 만들어짐

  • 개발 도중에 API가 수시로 변경되는 상황에서는 변경사항에 대해 테스트 코드까지 일일이 수정해야함

결론

SQL를 직접 작성할 수 있어 여러 DB 테이블들 간의 조인같은 복잡한 작업들을 통해 새로운 비즈니스 가치 창출효과를 누릴 수 있는 MyBatis 가 더 적합하다고 본다.
또한, 프로젝트 초기 단계이므로 API 스펙이 계속해서 바뀔거라 예상한다. 이에 대응하려면 테스트 코드를 계속 변경해야 하는데 굉장한 불편함이 발생할 거라 생각한다. 따라서, 변경되는 정보들을 바로 적용할 수 있는 Swagger를 쓰는게 더 적합하다고 본다.