zepinos
18k
2019-03-05 09:37:24
1
530

[펌] [JOOQ-02] JOOQ 에 대해서 좀 더 알아보기


출처: https://zepinos.tistory.com/54 [zepinos BLOG]




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 을 대체하려는 노력 역시 존재했습니다. LINQ 나 Scala 의 SLICK 와 같은 시도도 존재하고 있으며 Java 에서도 QueryDSL 존재합니다. 하지만, JOOQ 수준으로 SQL 을 처리하지 않기 때문에 RDBMS 을 완벽하게 제어하는 것은 매우 어렵습니다.


그렇다면, 왜 JDBC 을 이용해 직접 질의하지 않고 JOOQ 을 쓰는 것일까요? 가장 큰 이유는 Type Safety 하지 않고 구문 자체의 안전성이 떨어진다는게 가장 큽니다. 프롤로그와 JOOQ-01 문서에서도 확인할 수 있지만, Text 로 작성된 내용을 Java 에서 검증한다는 것은 어렵습니다. 뿐만 아니라 PreparedStatement 을 이용해 Parameter 을 Binding 할 때에도 안정성이 떨어집니다. 이러한 문제를 해결하기 위해 과거부터 SQL 을 추상화하려는 노력이 있어왔지만, SQL 은 사실 추상화되면 안되기 때문에 JOOQ 가 현재 나와있는 여러 해결책(Solution) 중에서는 가장 낫다고 개인적으로 평가합니다.


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


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

3
0
  • 댓글 1

  • 앙앙이
    3k
    2019-03-05 10:00:09

      "SQL 은 SQL 처럼 다루어져야 한다" 는 말씀 백번 공감합니다.

    0
  • 로그인을 하시면 댓글을 등록할 수 있습니다.