Skip to content

Latest commit

 

History

History
38 lines (33 loc) · 2.63 KB

week3_dajin.md

File metadata and controls

38 lines (33 loc) · 2.63 KB

Sopt 3주차 - Database

✨ JDBC

Java application과 DB가 소통하기 위한 API

  • JDBC Driver : Java와 특정 DB 간의 연결을 가능하게 해주는 소프트웨어
  • Connection : DB와의 실제 연결을 나타낸다. => DB에 명령 전달
  • Statement : SQL쿼리를 실행하기 위한 객체 => SQL문 실행
  • ResultSet : SELECT쿼리를 통해 얻은 결과 데이터를 담은 객체 => DB에서 읽은 정보를 application에 적용
  1. Connection을 맺는다
    • DB와 Java application 연결 설정
  2. 쿼리를 작성한다
    • SQL 쿼리는 String 형태로 작성해서 전달
    • PreparedStatement : 쿼리를 변수로 설정하는 것. 코드가 더 안전해지고, SQL Injection 공격(쿼리를 조작해 이상한 명령이 실행되게 하는거..)도 예방
      • SQL쿼리를 처음 실행할 때 DB에서 미리 컴파일한다. 이후 동일한 쿼리를 여러번 실행할때는 이미 컴파일된 쿼리를 재사용한다.(속도 빨라짐)
      • 값이 문자열이나 숫자로만 해석된다(인젝션 방지)
  3. 쿼리를 요청한다
    • 객체를 사용하여 SQL문을 실행하면 DB가 결과를 돌려준다.
  4. 응답을 클래스에 바인딩한다
    • DB에서 받아온 데이터를 Java 객체에 맞게 변환하는 과정이다. ResultSet을 통해 각 열과 행의 데이터를 읽고, 필요한 경우 Java 객체로 변환하여 사용한다.
  5. Connection을 종료한다
    • DB와의 연결은 제한된 자원이기 때문에 사용 후 반드시 반환하여 리소스를 절약해야한다.

✨ JPA - Hibernate

ORM을 표준화한 인터페이스

JPA의 구현체 중 하나

  • 객체 지향 프로그래밍에서 사용하는 객체를 DB의 테이블과 연결
  • JPA는 ORM을 위한 자바 표준 Interface이고, Hibernate는 JPA를 구현한 ORM 프레임워크.
    • SQL을 직접 작성하지 않고 객체와 데이터베이스 테이블 간의 매핑을 설정하고 CRUD작업을 도와준다.
  • FK를 강제한다 -> 테이블 간의 관계를 DB 수준에서 강제하여 잘못된 참조 데이터가 들어가는 것을 방지하겠다는 의미이다.

✨ JDBC - Transaction

DB에서 처리 흐름을 보장하는 장치

  • 트랜잭션이 성공적으로 완료되면 모든 변경 사항을 DB에 커밋하고, 예외가 발생하면 롤백하여 이전 상태로 돌아간다.
  • 데이터를 조회만 한다면 생략하는게 좋다.
    • DB 변경이 발생하지 않기 때문에 굳이 묶어서 작업할 필요가 없다.
    • DB 조회하는 동안에도 잠금을 사용해 자원을 보호하면 서버 자원이 불필요하게 사용되므로 성능에 좋지 않다.