Exposed는 Kotlin 언어에서 사용되는 SQL 라이브러리로, 데이터베이스와의 상호작용을 보다 간단하고 직관적으로 처리할 수 있도록 도와줍니다. 이 라이브러리는 SQL 쿼리 작성을 Kotlin DSL로 표현할 수 있게 해주어, JDBC를 보다 효율적으로 사용하려는 개발자들에게 유용합니다.
주요 특징:
Kotlin DSL (Domain-Specific Language):
SQL 쿼리나 테이블 정의를 Kotlin 코드로 작성할 수 있어, SQL 문법을 Kotlin 코드 스타일로 보다 자연스럽게 표현할 수 있습니다.
객체 관계 매핑(ORM) 기능 제공:
Exposed는 ORM과 유사한 방식으로 객체와 데이터베이스 테이블 간 매핑을 처리할 수 있으며, 객체 지향 방식으로 SQL을 다룰 수 있습니다.
JDBC 기반:
Exposed는 기본적으로 JDBC를 활용하여 데이터베이스와 연결하고, 직접적인 SQL 쿼리를 작성할 수
있습니다. 이 방식은 JPA와 같은 ORM보다 더 낮은 레벨에서 작업할 수 있습니다.
쿼리 빌딩:
SQL 쿼리를 Kotlin 코드로 빌드할 수 있어서, 동적 쿼리 생성이나 복잡한 쿼리도 쉽게 구성할 수 있습니다.
특징 | JPA | Exposed |
---|---|---|
개발 속도 | 빠르게 개발 가능 (자동으로 엔티티 매핑, CRUD 작업 제공) | 개발자가 더 많은 작업을 해야 함 (SQL 직접 작성) |
추상화 수준 | 고수준 추상화 제공 (엔티티 객체와 데이터베이스 테이블 매핑) | 저수준 추상화 제공 (직접 SQL 작성, 더 세밀한 제어 가능) |
유지보수 | 엔티티 클래스 기반으로 유지보수가 편리하고, 객체지향적 접근 | 코드가 간결하고, 쿼리 작성에 유연성을 제공하지만 객체지향적이지 않음 |
성능 | ORM이 추가적인 추상화로 인해 성능이 떨어질 수 있음 (특히 복잡한 쿼리) | 직접 SQL을 작성하므로 성능에 대한 세밀한 조정 가능 |
배우기 쉬운 정도 | Java 개발자에게 익숙하고 표준 API로 쉽게 배울 수 있음 | Kotlin 개발자에게 익숙하고 직관적이지만, JPA보다는 조금 더 배우기 어려울 수 있음 |
쿼리 최적화 | JPA가 제공하는 쿼리 최적화 기능이 한정적일 수 있음, 복잡한 쿼리에서 성능 이슈 발생 가능 | SQL을 직접 작성하여 최적화가 가능하지만, 더 많은 코드 작성 필요 |
라이브러리/도구 | 많은 툴과 라이브러리에서 지원, 예: Spring Data JPA | Kotlin에서 주로 사용되며, 일부 도구에서만 지원 |
특징 | JPA | Exposed |
---|---|---|
복잡성 | 설정이 복잡할 수 있으며, 엔티티 간 관계 정의와 매핑이 번거로울 수 있음 | SQL을 직접 작성해야 하므로, 코드가 복잡할 수 있고, 관리가 어려울 수 있음 |
유연성 부족 | 자동화된 기능이 많아서, 복잡한 쿼리나 커스터마이징에 제약이 있을 수 있음 | 더 많은 유연성을 제공하지만, 직접 관리해야 할 부분이 많아져서 실수할 여지가 있음 |
학습 곡선 | JPA와 Hibernate의 복잡한 설정과 개념을 익히는 데 시간이 걸릴 수 있음 | Exposed는 Kotlin에 익숙하지 않은 개발자에게는 적응이 필요할 수 있음 |
디버깅 | JPA는 쿼리와 객체 매핑 간의 문제를 추적하기 어려울 수 있음 | 직접 SQL을 작성하므로 디버깅이 상대적으로 쉬운 반면, 버그를 찾는 데 시간이 걸릴 수 있음 |