티스토리 뷰
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 객체 생성하기
'Programming > JOOQ' 카테고리의 다른 글
[JOOQ-04] 좀 더 복잡한 질의 실행해보기 (0) | 2019.03.05 |
---|---|
[JOOQ-03] 테스트 DB 을 생성하고 JOOQ 객체 생성하기 (0) | 2019.03.05 |
[JOOQ-01] JOOQ 맛보기 (0) | 2019.02.28 |
[프롤로그] JOOQ 을 사용하게 된 계기 (0) | 2019.02.28 |
JOOQ 에서 POJO 을 이용해 입력/수정을 해보자 (0) | 2018.12.18 |
- Total
- Today
- Yesterday
- RestTemplate
- 외장 WAS
- OracleJDK
- git
- 프로젝트 규모
- jooq
- Spring Boot
- Redmine
- docker
- boot
- 도입기
- NoSQL
- Phabricator
- Spring
- proxmox
- messages.properties
- 워드프레스
- KDE
- couchbase
- paging
- 내장 WAS
- java config
- Nas
- Spring MVC
- 엘지
- SI
- 클라우드플레어
- 페이징
- manjaro
- 시니어 프로그래머
일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
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 |