📢 공지합니다
이 게시글은 메인 페이지에 항상 고정되어 표시됩니다.
필자가 약 1년 6개월 전에 작성한 내용을 리메이크 해봤다.
https://balhae.tistory.com/118
섹션1 JDBC 이해
최코딩의 개발 섹션1 JDBC 이해 본문 스프링/스프링 DB 섹션1 JDBC 이해 seung_ho_choi.s 2023. 10. 22. 00:26
balhae.tistory.com
https://balhae.tistory.com/121
섹션2 커넥션풀과 데이터소스 이해
최코딩의 개발 섹션2 커넥션풀과 데이터소스 이해 본문 스프링/스프링 DB 섹션2 커넥션풀과 데이터소스 이해 seung_ho_choi.s 2023. 10. 27. 22:56
balhae.tistory.com
과거에는 DB 벤더마다 각자 다르게 연결해야 했음.
예를 들어, MySQL은 MysqlConnection, Oracle은 OracleConnection을 사용했기 때문에
DB가 바뀌면 코드도 죄다 바꿔야 했음.
개발자는 DB 종류에 종속되어 있었고, 유지보수가 매우 힘들었음.
JDBC는 **DB 벤더와 상관없이 동작하는 "표준 인터페이스"를 제공함.
개발자는 오직 아래의 인터페이스만 알면 됨:
Connection conn = DriverManager.getConnection(...);
Statement stmt = conn.createStatement();
ResultSet rs = stmt.executeQuery(...);
이 인터페이스에 맞춰서
MySQL은 MysqlDriver, Oracle은 OracleDriver를 자바에서 자동으로 호출함.
즉, 개발자는 DB가 뭐든 상관없이 JDBC 표준만 사용하면 된다!
자바 애플리케이션에서 DB와 통신하는 대표적인 두 가지 방식은:
<select id="getUser" resultType="User">
SELECT * FROM users WHERE id = #{id}
</select>
비유:
너가 직접 쓴 쿼리를 전달하면, 대신 전화 걸고 처리해주는 통역사 느낌
User user = new User("홍길동");
entityManager.persist(user);
비유:
"피자 먹고 싶어요!"라고 말하면, 비서(Hibernate)가 알아서 전화 걸고 메뉴 고르고 주문까지 다 해줌
| 구분 | SQL Mapper (MyBatis) | ORM (JPA + Hibernate) |
| SQL 작성 | 개발자가 직접 작성 | Hibernate가 자동 생성 |
| 제어 권한 | 쿼리 하나하나 직접 제어 가능 | 추상화된 트랜잭션 처리 |
| 러닝 커브 | 상대적으로 쉬움 | 처음엔 어려움, 익숙해지면 생산성 ↑ |
| 유지보수 | 복잡한 쿼리 유리 | 도메인 중심 모델 유리 |
| 대표 예시 | Mapper.xml | @Entity, @Repository |
3-way handshake란?
클라이언트와 서버가 서로 “연결할게요” → “오케이” → “진짜 시작하자”
라는 3단계 통신 확인 과정
DB와 애플리케이션(또는 드라이버) 사이의 통신 라인
하나의 Connection 객체는 DB와 직접 연결된 TCP 세션
❗ 결과: 응답 속도 저하 + 트래픽 몰리면 서버 뻗음
미리 DB 드라이버를 통해 커넥션을 여러 개 생성해두고, 재사용하는 기술
커넥션 풀로부터 커넥션을 꺼내주는 인터페이스
→ 개발자는 dataSource.getConnection()만 호출하면 됨
| 기술 요소 | 실생활 비유 |
| 애플리케이션 코드 | 고객 (KT와 문의사항 있음) |
| JDBC 인터페이스 | 전화 통화 규칙 (표준 통신 방식) |
| MySQL 드라이버 | KT 전화기 |
| 커넥션 | 전화선 한 줄 (직접 연결된 라인) |
| 커넥션 풀 | 콜센터에 설치된 전화선 10줄 |
| HikariCP | 콜센터 관리자 (전화선 꺼내주고 관리) |
| DataSource | 콜센터 접수창구 (전화선 요청 인터페이스) |
| DB | KT 직원 (실제 주문 처리 담당) |
| 기술 전화는 누가 거니? | 전화선 누가 연결하나? | 말은 누가 하나? | 특징 |
| JDBCTemplate | 개발자가 직접 | 개발자가 직접 SQL 작성 | 수동, 반복 많음 |
| MyBatis | 프레임워크가 전화 | 개발자가 SQL 작성 | SQL 자유도 높음 |
| JPA + Hibernate | Hibernate가 전화 | Hibernate가 SQL 생성 | 객체 중심 추상화 |
다음 시간에는 JPA에 관해 구체적으로 알아보겠습니다.
| 데이터베이스의 지식 (0) | 2025.06.11 |
|---|---|
| N+1문제 (1) | 2025.06.10 |
| SSR, CSR, SSG 등 (0) | 2025.05.17 |
| JWT vs 세션 (0) | 2025.05.15 |
| 운영체제의 핵심 개념: 프로그램, 프로세스, 스레드 (0) | 2025.05.13 |