📚 JDBC 프로그램
- 'Java Database Connectivity'의 약자
- 자바 프로그램과 데이터베이스를 네트워크 상에서 연결해 데이터를 교환하는 프로그램
- JDBC 드라이버를 통해 해당 프로그램 작성 가능
📚 JDBC 프로그램 작성 순서
- 네트워크를 통해 데이터베이스와 연결 맺기
- 데이터베이스에 보낼 SQL을 작성하고 전송하기
- 필요하다면 데이터베이스가 보낸 결과를 받아서 처리하기
- 데이터베이스와 연결을 종료하기
✏️ 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
'개발 공부 중! > Spring' 카테고리의 다른 글
[자바 웹개발] Chap 01. 웹 프로그래밍의 시작 (0) | 2024.01.16 |
---|---|
[스프링5 입문] Chap 08. DB 연동 (0) | 2024.01.12 |
[스프링5 입문] Chap 07. AOP 프로그래밍 (2) | 2024.01.08 |
[스프링5 입문] Chap 06. 빈 라이프사이클과 범위 (0) | 2024.01.07 |
[스프링5 입문] Chap 05. 컴포넌트 스캔 (2) | 2024.01.06 |