DB공부를 다시 하게됐다.
프로젝트 할떄마다 DB하나파고 그 DB에 해당하는 URL,id,passoword 를 넣고 데이터를 넣다 뺐다 하는게 내가 아는 전부인것 같은 느낌이였다.
콘솔창이 올라갈때마다 모르는 DB정보도 많았고 이사님께서 DB기초공부를 다시 하라고 하셔서 DB를 처음 배울때부터 JDBC 부터 다시하게 됐다.
JDBC는 지금 실무에서는 직접적으로 쓰지는 않지만 지금 사용하고 있는 DB의 기초가 되는 뿌리같은 존재이다. 예전 DB를 처음 배울때 JDBC를 잠깐 배우고 넘어간적이 있지만 그것이 전부이다. 이번기회에 한번 더 확인 해보자
- 커넥션연결 : TCP/IP 연결
- SQL전달 : 쿼리문 수행
- 결과 응답 : 그 결과 응답
JDBC는 표준 인터페이스며 각각 구현한 드라이버들이 존재 한다.
원하는 DB의 드라이버를 가져다가 사용만 하면된다.
=> 애플리케이션 로직은 JDBC 표준 인터페이스에만 의존함으로 다른종류의 데이터베이스로 변경을해도 드라이버만 바꿔주면 나머지 코드변경없이 사용할수 있다.
=> 하지만 각각의 데이터베이스마다 SQL,데이터타타입 등의 일부 사용법은 다르다. 그래서 결국 데이터베이스를 변경하면 JDBC코드는 변경하지 않아도 괜찮지만 SQL은 해당 데이터베이스에 맞도록 변경 해야한다.
2.ORM
=> JDBC를 개발자가 직접 다룰 필요가 없어진다.
순수 JDBC만을 이용해 디비 연결을 해보자(H2 세팅은 생략)
필요 정보들을 입력해주면 DriverManager가 DB에 해당하는 Driver을 찾아준다. 여기서는 h2 Driver을 찾아주었다.
각각의 Driver들에게 DriverManager이 데이터를 넘겨준다(URL,USERNAME,PASSWORD)
이 데이터를 처리할수 있는 Driver가 반환된다.
JDBC 코드에 대한 자세한 설명은 생략한다. 주의해야 할점은 DriverManager.getConnection() 으로 외부와 통신(TCP/IP) 할경우 꼭 리소스를 닫아줘야한다는점.
리소스 닫는 와중에도 exception 이 발생하면 나머지가 닫히지 않기 때문에 try-catch 처리해줘야함
문자열에 쿼리문을 작성해 직접 넣어 sql injection 공격이 올수 있으므로 꼭 바인딩 방식으로 해줘야 한다. (PreparedStatement 사용 이유)