[DB] JDBC, DBCP, ORM, Mybatis, JPA, Hibernate에 대해
자바로 앱을 만들다보면 데이터베이스 관련해서 자주 접하는 기술들이 있다. 앞으로 주로 사용할 기술을 집중적으로 학습해야겠지만, 레거시 프로젝트를 마주하는 상황을 대비해서 간단하게라도 짚고 넘어가면 좋을 것 같은 내용을 정리했다.
[JDBC] Java Database Connectivity
자바 데이터베이스 연결. MySQL, Oracle, MariaDB등 데이터베이스에 맞는 드라이버를 로드해 '커넥션 객체 생성->쿼리 수행->연결 해제' 순서로 사용함. 작성해야하는 코드량이 많고 쿼리도 직접 작성해야 하기 때문에 요즘엔 거의 쓰지 않는다.
[DBCP] Database Connection Pool
데이터베이스 커넥션 풀. 지정한 양만큼의 커넥션 객체를 생성해 풀에 저장해두고 필요할때마다 쓰고 반납하는 기술.
클라이언트가 늘어나서 풀에 보관된 커넥션 개수가 모자랄 경우 커넥션이 반납될때까지 대기상태로 진입함. 맥스 커넥션 개수를 알잘딱하게 조절하면 과도한 커넥션을 생성해 서버가 터지는 불상사를 방지할 수 있음.
[ORM] Object Relational Mapping
객체 관계 매핑. 객체와 데이터베이스의 테이블을 매핑(연결)하는 기술.
[iBatis, Mybatis]
ORM과는 조금 차이가 있다. SQL Mapper로서 Object Mapping 기술을 이용하는 프레임워크이다. xml파일에 sql을 직접 쿼리를 작성하고, 그 과정에서 파라미터와 결과물을 어느 자바객체로 매핑할지 직접 컨트롤해야 한다. 국내에선 Mybatis가 많이 쓰였지만 최근 JPA로 많이 대체되고 있다. MyBatis는 JPA와 달리 직접 쿼리를 작성하기때문에 SQL에 능숙하다면 JPA보다 유용할 수도 있다. 하지만 간단한 쿼리마저 직접 작성해야 하고, 오타에 취약하다는 단점이 있다.
[JPA] Java Persistence API
자바의 ORM 기술 표준. 인터페이스의 집합이다. 쿼리를 직접 작성하지 않아도 되고, 일일이 객체와 매핑해줄 필요 없이 객체가 DB데이터에 직접적으로 연결된다. 쿼리를 직접 짜야할 상황이 오면 QueryDSL을 사용하면 된다. 단점이라면 러닝커브가 있고, 쿼리를 직접 짜고 xml파일에 따로 분리해 놓는게 편했던 사람이라면 오히려 익숙해지까지 시간이 걸릴수도 있다.
[Hibernate]
가장 많이 사용하는 JPA 인터페이스의 구현체 중 하나이다.