본문 바로가기
개발 공부 중!/Spring

[자바 웹개발] Chap 02. 웹과 데이터베이스

by 김evelyn 2024. 1. 21.

📚 JDBC 프로그램

  • 'Java Database Connectivity'의 약자
  • 자바 프로그램과 데이터베이스를 네트워크 상에서 연결해 데이터를 교환하는 프로그램
  • JDBC 드라이버를 통해 해당 프로그램 작성 가능

 

📚 JDBC 프로그램 작성 순서

  1. 네트워크를 통해 데이터베이스와 연결 맺기
  2. 데이터베이스에 보낼 SQL을 작성하고 전송하기
  3. 필요하다면 데이터베이스가 보낸 결과를 받아서 처리하기
  4. 데이터베이스와 연결을 종료하기

✏️ DDL (Data Definition Language)

: 데이터베이스에서 실행하는 SQL 중 특정한 방식의 테이블을 생성하거나 객체들을 생성할 때 사용하는 SQL 종류

 

✏️ DML과 쿼리문 간의 차이점

DML 쿼리문
의미 : insert/update/delete문 의미 : select문
몇 개의 데이터가 처리되었는지 숫자로 결과 반환 데이터를 반환

 


📚 JDBC 프로그래밍을 위한 API와 용어들

 

✏️ Connection

  • Connection 인터페이스는 데이터베이스와 네트워크 상의 연결을 의미
  • Connection은 반드시 close()해야 한다 -> 데이터베이스 연결이 종료되지 않으면 새로운 연결을 받을 수 없다

 

✏️ Statement/PreparedStatement

  • JDBC에서 SQL을 데이터베이스로 보내기 위해 사용하는 타입
  • Statement와 PreparedStatement의 공통점 : SQL을 전달한다.
  • Statement와 PreparedStatement의 차이점
Statement PreparedStatement
SQL문 내부에 모든 데이터를 같이 전송하는 방식 SQL문을 미리 전달하고 나중에 데이터를 보내는 방식
(실제 개발에서는 이것만 이용하는 것이 관례)

 

✏️ ResultSet

  • PreparedStatement를 이용해 쿼리를 실행했을 때, 데이터베이스에서 반환하는 데이터를 읽어 들이기 위해 해당 인터페이스를 이용
  • getInt(), getString() 등의 메서드를 이용해 필요한 타입으로 데이터를 읽어 들인다.

 

✏️ Connection Pool과 DataSource

  • Connection Pool : 미리 Connection들을 생성해서 보관하고, 필요할 때마다 꺼내 쓰는 방식
  • SQL을 여러번 실행할수록 성능 저하 => JDBC에서는 보통 Connection Pool을 이용해 이 문제를 해결한다.

 

 

✏️ DAO (Data Access Object)

  • 데이터를 전문적으로 처리하는 객체
  • 일반적으로 데이터베이스의 접근과 처리를 전담하는 객체를 의미
  • DAO는 주로 VO를 단위로 처리
  • DAO를 호출하는 객체는 DAO가 내부에서 어떤 식으로 데이터를 처리하는지 알 수 없도록 구성

 

✏️VO (Value Object) 혹은 엔티티 (Entity)

  • 데이터를 객체라는 단위로 처리하는 객체지향 프로그램
  • 엔티티 : 데이터베이스에서 하나의 데이터를 의미
  • 자바에서는 테이블과 유사한 구조의 클래스를 만들어 객체로 처리하는 방식 사용 → 이때 만든 객체는 ‘값을 보관하는 용도’라는 의미에서 VO라고 불린다.
  • DTO와 VO의 차이점
DTO VO
각 계층을 오고 가는데 사용되는 택배 상자 데이터베이스의 엔티티를 자바 객체로 표현한 것
getter/setter를 이용해 자유롭게 데이터 가공 데이터 자체를 의미하기 때문에 getter만을 주로 이용

 


 

📚 Lombok의 @Cleanup

  • 이 애너테이션이 추가된 변수는 해당 메서드가 끝날 때 close()가 호출되는 것을 보장
  • Lombok 라이브러리에 종속적인 코드를 작성하게 된다는 부담이 있긴 하지만 매우 간결함을 보장

 

📚 ModelMapper 라이브러리

  • DTO ⇒ VO, VO ⇒ DTO 변환할 때 사용하는 라이브러리
  • getter/setter 등을 이용해서 객체의 정보를 다른 객체로 복사하는 기능을 제공

📚 Log4j2의 핵심적인 개념

  • 어펜더
    • 로그를 어떤 방식으로 기록할 것인지를 의미 (콘솔창에 출력할 것인지, 파일로 출력할 것인지)
  • 레벨
    • 로그의 ‘중요도’ 개념

출처: 자바 웹 개발 워크북


실제 개발은 DAO ⇒ Service ⇒ Controller의 순서대로 진행되는 것이 일반적이다

이번 주차 코드의 단점

  • 여러개의 컨트롤러를 작성하는 번거로움
  • 동일한 로직의 반복적인 사용
  • 예외처리의 부재
  • 반복적인 메서드 호출

Chap 2 코드는 아래 링크에서 확인 가능합니다!

 

https://github.com/EvelynKimm/SpringSelfStudy/tree/master/JavaWebBook/jdbcex