티스토리 뷰

반응형

2019/02/28 - [Programming/JOOQ] - [JOOQ-01] JOOQ 맛보기


Web 프로그래밍이 perl 을 앞세워 CGI 의 영역에서 서비스 되던 시기에는 RDBMS 을 이용해서 데이터를 처리하기 보다는 예전처럼 서버의 파일시스템에 Text 파일을 만들어 데이터를 다루는게 더 일반적인 시기가 있었습니다. 하지만, MySQL 을 위시한 무료 RDBMS 가 성능을 높여가고 Web 프로그래밍의 구성 방법이 바뀌어가면서 Web 프로그래밍 시 RDBMS 가 항상 포함되는건 당연한 것처럼 여겨지는 시대가 되었습니다. 현재에는 RDBMS 의 한계를 극복하기 위해 NoSQL 제품들이 나오고 있지만, 아직까진 RDBMS 의 아성은 굳건하기만 합니다. Web 의 유행으로 인해 대중화된 RDBMS 은 더 이상 Web 만의 전유물이 아니게 되었고 기업 내 서비스에 머물던 RDBMS 의 활용이 일반 사용자들이 사용하는 환경까지 널리 사용되어오고 있습니다.

이러한 RDBMS 을 위해, 가장 높은 사용율을 자랑하는 Web 시대의 언어라 불리는(비록 시작은 가정용 전자기기를 위한 것이었지만) Java 은 JDBC 을 시작으로 SQL 을 잘 다루기 위한 여러가지 기술을 지원해왔습니다.


RDBMS 을 다루는 근간은 SQL(Structured Query Language) 입니다. 1973 년 처음 발표된 이후 RDBMS 에서 빠질 수 없는 존재가 되어왔고 오랜 시간동안 잘 다듬어져 왔습니다. 다시 말해, RDBMS 을 이용하기 위한 가장 적합한 언어는 SQL 입니다. 하지만 SQL 와 Java 사이에는 차이점이 많았고, 서로 간의 차이점을 줄이면서 통신을 할 수 있는 인터페이스가 여럿 사용되어 왔었습니다. 그리고 최근 Java 에서도 ORM 을 위한 표준을 JPA 로 정해지면서 널리 사용되고 있습니다.

JPA 의 구현체로 가장 널리 사용되고 있으며 그 이전까지 거의 유일한 Java 의 ORM 으로 여겨지던 Hibernate 가 개발되기 전까지는 SQL 을 이용한 프로그래밍이 가장 유용한 방법으로 인식되어 왔습니다. JPA 이후 Hibernate, JDO, Criteria Query 등은 SQL 자체를 숨기기 위해 노력하고 있으며 JPQL, HQL, JDOQL 및 여러가지 하위 Query Language 로 Query 사용을 최소화하려고 하고 있습니다.

그러나 SQL 을 모두 대체할 수 없기 때문에 불편한 상황이 많이 발생하였고, 이러한 형태의 기술들을 구현할 때 SQL 에 좀 더 가까운 형태로 Java 에서 사용할 수 있는 기술이 적합함을 깨닫게 되었고, JOOQ 가 그러한 고민의 결과물 중 하나입니다.


한편, ORM 와 다른 형태로 SQL 을 대체하려는 노력 역시 존재했습니다. C# 의 LINQ 나 Scala 의 SLICK 와 같은 시도도 존재하고 있으며 Java 에서도 QueryDSL 존재합니다. 하지만, JOOQ 수준으로 SQL 을 처리하지 않기 때문에 RDBMS 을 제어하는 것은 매우 어렵습니다.


그렇다면, 왜 JDBC 을 이용해 직접 질의하지 않고 JOOQ 을 쓰는 것일까요? 가장 큰 이유는 Type Safety 하지 않고 구문 자체의 안전성이 떨어진다는게 가장 큽니다. 프롤로그JOOQ-01 문서에서도 확인할 수 있지만, Text 로 작성된 내용을 Java 에서 검증한다는 것은 어렵습니다. 뿐만 아니라 PreparedStatement 을 이용해 Parameter 을 Binding 할 때에도 안정성이 떨어집니다. 이러한 문제를 해결하기 위해 과거부터 SQL 을 추상화하려는 노력이 있어왔지만, SQL 은 사실 완벽히 추상화되면 안되기 때문에 JOOQ 가 현재 나와있는 여러 해결책(Solution) 중에서는 가장 낫다고 개인적으로 평가합니다. 일례로 JPA Data Repository 에서 findByName() 와 같은 추상화는 Query 로 어떻게 변경될지 예상은 되지만, 더욱 복잡해진다면 예측하기 어려운 형태로 명명될 수도 있고, 원하는 컬럼만 조회하기도 힘듭니다.

SQL 은 RDBMS 을 가장 잘 다룰 수 있는 방법이면서 Java 와 같이 객체지향적인 것이 아닙니다. SQL 은 SQL 처럼 다루어져야 하기 때문에, 이러한 사상을 잘 이해하고 있는 JOOQ 을 권장합니다.


JOOQ 은 무료 버전과 상용 버전이 별도로 존재합니다. 무료 버전에서는 이름있는 무료 RDBMS 을 사용할 수 있고, 상용 버전에서는 유명한 상용 RDBMS 을 지원합니다. 지원하는 RDBMS 을 확인하여 어떠한 버전을 이용할지 결정하는 것이 가장 일반적이고, 개발 지원이 필요하다면 상용 버전을 구입하는 것을 고려하면 됩니다.


2019/03/05 - [Programming/JOOQ] - [JOOQ-03] 테스트 DB 을 생성하고 JOOQ 객체 생성하기


반응형
댓글
반응형
공지사항
최근에 올라온 글
최근에 달린 댓글
Total
Today
Yesterday
«   2024/03   »
1 2
3 4 5 6 7 8 9
10 11 12 13 14 15 16
17 18 19 20 21 22 23
24 25 26 27 28 29 30
31
글 보관함