티스토리 뷰

면접 질문

[면접준비] JDBC

lkh's 2019. 3. 18. 17:48

JDBC


자바에서 데이터베이스에 접속할 수 있도록 지원해주는 API 이다. JDBC는 데이터베이스에서 자료를 쿼리하는 방법을 제공한다.

JDBC가 개발되기 전에는, 각각의 데이터베이스마다(Mysql, Mssql, Oracle ..) 각각의 쿼리문을 사용하였고, 개발의 불편함이 존재했다. 데이터베이스를 변경하면 쿼리를 모두 

수정해야하는 문제도 발견했다. 그래서 JDBC가 개발되었으며, JDBC 드라이버가 자바의 요청을 DBMS가 이해할 수 있는 프로토콜로 변환해주는 어댑터 역할을 수행한다.

대체로 관계형 데이터베이스 서버로의 연결을 제공하며, 각 DBMS에 맞는 JDBC 드라이버가 필요하다.




Java Application에서 사용하는 JDBC Driver Manager와 DBMS에 의존하는 JDBC Driver를 분리한 것에 의해 JDBC는 DBMS와 독립적인 환경을 제공한다.  

 - JDBC API : Java Application과 JDBC Manager와의 연결 인터페이스. Java Application과 DB 서버에 접속, SQL 실행, SQL 실행 결과 확인 

 - JDBC Driver Manager : Java Application이 사용하는 DB에 맞는 드라이버를 찾아서 JDBC 초기화

 - JDBC Driver :  각 DB 제작업체에서 만든 드라이버로서, JDBC를 지원하는 어떠한 데이터베이스에도 접속 가능
   
자바의 요청을 DBMS가 이해할 수 있는 프로토콜로 변환해주는 어댑터 역할을 수행


2. JPA


ORM은 객체와 관계형 데이터베이스를 연결해주는 것을 의미한다. 그리고 ORM 표준을 자바로 구현하기 위한 인터페이스가 JPA이다. 

그리고 JPA 구현체로 Hibernate가 존재한다. JPA가 가지고 있는 장점은 무엇일까?


 - 생산성 : 추상화된 메소드를 통해 쿼리를 처리할 수 있기 때문에 개발자는 비즈니스 로직에만 집중 가능하다. 그러나 동시에 단점이 되기도 한다.

   JPA의 쿼리는 복잡한 쿼리보다는 실시간 처리용 쿼리에 더 최적화되어 있다. 그렇기 때문에 이럴 경우에는 Mybatis가 더 유리하다.

 - 유지보수 : SQL을 수정하는 경우, Mybatis 경우에는 쿼리뿐만 아니라, DAO도 같이 수정을 해야 한다. 하지만 JPA는 해당 객체만 수정하면 된다. 

 - 프로시저가 많은 시스템에서는 ORM의 객체지향적인 성향을 활용하기 어려움


[출처 : https://gmlwjd9405.github.io/2018/12/25/difference-jdbc-jpa-mybatis.html]

[출처 : https://github.com/WeareSoft/tech-interview/blob/master/contents/db.md#orm%EC%9D%B4%EB%9E%80]


3. Primary Key vs Unique Key vs Foreign Key


Primary Key, Unique Key 모두 튜플을 구별할 수 있는 유일한 키이지만, Primary Key는 NULL 허용되지 않지만, Unique Key는 NULL 허용된다.

그리고 Unique Key의 NULL은 오직 한개만 가능하다. Foreign Key는 다른 테이블의 튜플을 식별할 수 있는 키이다.

복합키는 튜플을 구별할 수 있는 유일한 키로, 한개 이상의 필드로 구성되어 있으며, 복합키가 기본키가 되었을 경우 외래키가 참조 가능하다.

본인의 참조키는 항상 기본키가 되지 않을 수 있다. 단 1 : 1의 관계는 예외이다.

예 : 댓글 테이블에서 참조키로 질문의 기본키를 가질 수 있는데, 댓글의 참조키는 유니크하지 않기 때문이다.


4. Relation vs Table


기본키와 후보키와 같이 튜플을 구별할 수 있는 키가 존재해야하며, 각 애트리뷰트들이 단일 값을 가져야만 릴레이션이라고 할 수 있다.

단일 값이라는 것은 mail 이라는 애트리뷰트에는 @naver @gmail 두개를 가져서는 안된다는 것이다.


5. 카디널리티


인덱스의 카디널리티는 튜플의 칼럼에 대한 중복의 갯수를 의미한다. 칼럼의 중복도가 높으면 카디널리니가 낮다고 하며, 칼럼의 중복이 낮으면 카디널리티가 높다.

예를들어, 주민등록번호는 개인을 식별할 수 있는 유일한 키이기 때문에 중복도 낮고, 카디널리티가 높다.

이처럼 카디널리티가 높은 칼럼에 대해서는 인덱스를 추가하는 것이 유일하다. 이처럼 카디널리티는 쿼리문의 튜닝 기준으로 사용 가능하다.


튜플의 카더널리티는 튜플 갯수, 릴레이션의 카더널리티는 관계 차수 (1 : 1. 1 : N, N : 1, N: M)






공지사항
최근에 올라온 글
최근에 달린 댓글
Total
Today
Yesterday
«   2024/05   »
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
글 보관함