그동안 기존 업무 + 회사프로젝트 + 정보처리기사 실기로 인해 조금 열심히 살았다
급하고 중요했던 정보처리기사 실기 시험이 끝나서(마지막 기회였는데.... 다시 필기로 ROLLBACK....인가) 그 동안 진행중이었던 프로젝트 기술에 대한 정리 및 기록을 남기려 한다.
MES 프로젝트로 BACK-END서버를 구축하고 있다.
대략적인 개발환경은
Springboot 2.7.0 / java 17 / mysql 8버전 / Rocky OS(가비아 G클라우드) / intellij 요렇게 구성했다.
Mybatis / JPA 중 고민하다가 새로운 기술을 익히고 조금 더 객체지향이라는 것과 향후 성능과 확장성을 고려하여 JPA를 활용하기로 결정하고, 다만 동적처리인경우 Mybatis를 활용하는 방향으로 설계(?)를 했다.
JPA의 개념과 장/단점 Mybatis와 차이점을 정리해보려고 한다.
1. JPA란?
JPA는 Java Persistence API의 약자로 ORM(Object-Relational Mapping) 기술 표준으로 사용되는 인터페이스의 모음이다.
어플리케이션과 JDBC 사이에서 동작해 매핑해주는 역할을 감당한다. 대표적인 오픈소스로 Hibernate가 있다.
*ORM (Object-Relational Mapping)
객체 - 테이블을 매핑하며 어플리케이션의 객체를 RDB테이블에 자동으로 영속화를 해준다.
2. JPA 의 장/단점
- SQL문이 아닌 메소드를 통해 DB를 조작. 예를들어 저장의 경우 JPA 메소드 save()를 요청하면 INSERT문을 작성할 필요 없이 DB에 저장이 된다. => CRUD 구현의 단순화, 부수적인 코드작성 필요치 않음 => 생산성 향상
- 객체지향적인 코드 작성 가능 => 테이블을 객체화한 Entity 클래스
- 필드의 추가시 기존 참조하는 모든 SQL문을 수정 => 이런 과정을 JPA가 대신 처리 => 유지보수성 향상
but
- 프로젝트 규모가 크고 복잡하여 설계가 변경되는 경우 등 일관성을 깨트릴 수 있음
- 복잡한 동적쿼리를 완벽하게 대체 불가 => 결국 SQL를 작성해야함
*직접 사용해보니...
확실히 CRUD의 경우 불필요한 쿼리의 작성시간을 많이 줄여주었다. 단순 반복
-> 협업 시 여러 개발자들이 코드를 일관되게 작성하는 부분에서 조금 더 수월한 것 같다.(메소드 호출만 하면되니까)
entity 클래스를 읽고 그대로 CREATE TABLE 해줘서 테이블도 만들어 준다.
3. 그럼에도 불구하고 Mybatis의 필요성
하지만 완벽하게 동적인 SQL까지 대체할 수 없어 보인다. 동적인 구현을 위해 Querydsl도 같이 활용하고 있으나. 조인 조건이 많이질수록, 서브쿼리가 많이 질수록 가독성이 떨어짐을 느꼈다.(내가 잘 몰라서 그런건가...)
그래서 Mybatis도 함께 설정해 병행해서 DB와 접근가능하도록 길을 만들었다.
4. 그렇게 BACK-END 데이터의 흐름이 정리되었다
다음시간에는 Springboot에서 JPA 설정 및 메소드를 정리해 보겠다
*혹시 잘못된 정보가 있으면 댓글로 남겨주세요
'JAVA' 카테고리의 다른 글
땅꼬마의 JPQL 사용하기! (0) | 2023.07.31 |
---|---|
땅꼬마의 Springboot3 + JPA 구현하기! (0) | 2023.07.25 |
땅꼬마의 Springboot 3.X 버전에 Swagger 연동하기 (0) | 2023.04.24 |
땅꼬마의 While문 만들기! (0) | 2022.10.11 |
땅꼬마의 JAVA Math.random() 활용 점심메뉴 뽑기! (0) | 2022.08.31 |