- 일반적으로 애플리케이션 서버와 DB 서버간의 통신은
1. 커넥션 연결 (애플리케이션 -> DB 서버)
2. SQL 전달 (애플리케이션 -> DB 서버)
3. 처리 결과 응답 (DB 서버 -> 애플리케이션 서버)
의 큰 세 가지 축으로 이루어진다.

- 애플리케이션 개발자 입자에서 고역인 것은 이런 애플레케이션 <-> DB 간 통신 방식이 DB 벤더에 따라 모두 다르다는 것이다. 즉 서로 다른 언어, 비유하자면 MySql은 한국어, Oracle은 영어, PostgresSQL은 독일어 등등... 서로 다른 언어로 통신하기 때문에 아~주먼 과거의 개발자들은 DB를 바꾸게 되면 애플리케이션 코드에서도 위 세 가지 통신을 위한 코드들을 모두 새로 배워서 바꿔야했다(한국어 쓰다가 독일어 배워서 쓰고...).

- 위와 같은 고역을 해결하기 위해서 자바에서 애플리케이션 개발자들 사용하라고 통일된 interface를 만들어주었는데 그게 JDBC 라고 할 수 있다. 자바에서는 이 interface만 제공하고 실제 통신하는 구현체는 각 밴더에서 만들어 배포하는 것이다.(이것을 JDBC driver라고 부른다.) 이 JDBC 가 만들어진 이후의 개발자들은 상기한 세 가지 통신을 위해서 통일된 interface만 사용하고(interface에만 의존) 실제 통신은 JDBC driver에서 담당한다고 생각하면 되겠다. 즉 운전자(개발자)는 기어와 브레이크, 악셀레이터만 밟고 운전하기만 하면 되고, 그게 실제로 동력을 생산해서 차를 움직이게 하는 것은 서로 다른 형태로 구현된 엔진(디젤인지 가솔린이든지 LPG이던지 전기차던지...)인 것과 비슷하다고 할 수 있다.

- 아직도 조금 부족한 부분이, 각 DB 마다 SQL 문법을 다르게 쓰는 부분이 꽤 있는데 ANSI로 공통적인 부분들은 통일을 이루었지만 아직 paging처럼 완전히 차이나는 부분들도 많아서 DB 변경 시에 SQL 코드 자체는 수정을 해줘야 하는 부분이 있다. 이부분도 JPA로 많은 부분을 해소할 수 있다고 한다.
- 현대의 개발에서는 JDBC 역시 직접 사용하는 경우는 거의 없고 ORM, SQLMapper 와 같은 JDBC 기능들을 추상화한 기술을 이용한다. ORM 기술에는 대표적으로 JPA가 있는데 자바 진영의 ORM 표준 기술이며 SQLMapper 방식에는 대표적으로 MyBatis가 있다.
'Database > Spring DB 접근 1' 카테고리의 다른 글
4. 스프링과 문제해결 - 스프링 트랜잭션 처리 (0) | 2022.07.25 |
---|---|
3. 트랜잭션 이해 (0) | 2022.07.03 |
2. Connection Pool 과 DataSource 의 이해 (0) | 2022.06.22 |