자바측에서

jpa mybatis 모두 애매하다

jpa가 아직도 완성작이나 성숙한 환경, 전천후 환경이 되지 못할 뿐더러

jpa나사좀 빠졌으니 mybatis메인으로가죠?
하기엔

마이바티스는 디프리케이트됐다.

그리고

sql 의 dsl화라던지

dbms 종류에 무관한 쿼리작성

이런 기능들이 다 좀 제한적임.

그래서 db 억세서를 이것저것 섞어쓰기도 하고...




근데 결국

ORM은 필요하다.

마바로 진행할순 없어 생산성 좆박거든.

결국 ORM써야돼.

근데 ORM이 좀 fit이 안맞아서 한계가 있음.

그래서 마바로 구멍 채워야돼


이거 어케 해결하는지 아냐?

나는 이 딜레마땜에 항상 존나 빡쳤었다

나 불완전한거 못참거든.


정답이 뭐냐면

ORM의 O가 뭐냐?

결국 객체거든?

그리고 이것은 한번 가져온 객체는 불변값이 아닌 변화하는 상태로 간주하고

그걸 나타내는 대표적인것이 바로

영속성컨텍스트라는 1차캐쉬다.

변경감지를 포함해서, ORM은 끄집어온 엔티티를 트랜잭션 내에서 격리된 환경을 조성해서 상태를 추적한다.


그러면 이 해결방식은 간단함

O가 아니면 됨.

함수형은 RDBMS와 궁합이 아주 좋다.


마이바티스처럼 raw query와 그대로 호환되면서도 그 결과물은 jpa처럼 함수형 데이터타입에 그대로 꼭 맞추어 들어온다.

캐쉬도 필요없다

함수형은 트랜잭션 내부에서 객체의 상태를 추적하지 않는다


외래키나 Lazy fetching은 어떨까?

분명 jpa의 객체탐색은 편리하다.
프록시를 통한 lazy getter는 편리하다.

흠....
확실히 그점은 orm이 함수형 db 억세서들보다 편리함
근데 실제 코딩하다보면

프록시로 레이지펫칭 안쓰고
내가 사용할 포션에 대해서는 전부 fetch join하는 경우가 대다수임.

그래서 사실상... 결국 처음 가져올때 내가 사용할 부분 명시하는게 맞음.

그렇다고 jpa에서 eager 를 쓰라는게 아님.
eager쓰면 내가 명시하지 않은 부분도 다가져와버림.


그러니까 결국 lazy박고 일일히 fetch join할바에야

sql 쿼리로 직접 조인해서 갖고오는게 맘편해.


그래서 함수형 디비억세서를 사용하면

일단 그냥 깔끔하다.

현대화되고 잘 래핑된, 절차지향매핑대신 함수형 매핑을 쓰는 마이바티스를 쓸 수 있는건데

요게 참 좋아 ㅇㅇ