* SQL 중심 기술
: 애플리케이션에서 DB에 접근하기 위해 SQL 쿼리문을 애플리케이션 내부에 직접적으로 작성하는 것이 중심이 되는 기술
>> 과거에 많이 사용했으며, 현재는 객체 중심의 기술로 이전하고 있음
: Ex) mybatis, Spring JDBC
*객체(Object) 중심 기술 (ORM, Object-Relation Mapping)
: 데이터를 SQL 쿼리문 위주로 생각하는 것이 아닌 모든 데이터를 객체(Object) 관점으로 바라보는 기술
: SQL 중심 기술처럼 직접적으로 내부에 SQL 쿼리문을 작성하는 것이 아닌 JAVA 객체(Object)를 이용해 애플리케이션 내부에서 java Object를 SQL 쿼리문으로 자동 변환하여 DB와 테이블에 접근함
: Ex) JPA(Java Persistence API) - 실무에서 많이 사용, Spring Data JDBC - 심플함
[Spring Data JDBC]
: ORM 기술을 사용하며, JPA보다 기술적 복잡도를 낮춘 기술로 심플함
: 애플리케이션 규모가 크지 않고, 복잡하지 않을 경우 JPA 보다 Spring Data JDBC가 더 뛰어난 생산성을 보일 수 있음
: Data에 접근하는 일관된 접근 방식을 먼저 접하며 이후 Spring Data JPA를 이해하는데 많은 도움을 줌
- Spring Data JDBC 적용 순서 -
1. build.gradle에 사용할 DB를 위한 의존 라이브러리를 추가
2. application.yml 파일에 사용할 DB에 대한 설정
3. schema.sql 파일에 필요한 테이블 스크립트를 작성
4. application.yml 파일에서 schema.sql파일을 읽어 테이블을 생성할 수 있도록 설정 추가
5. DB의 테이블과 매핑할 Entity 클래스를 작성
6. 작성한 Entity 클래스를 기반으로 DB의 작업을 처리할 Repository 인터페이스를 작성
7. 작성된 Repository 인터페이스를 Service 클래스에서 사용할 수 있도록 DI 합니다.
8. DI 된 Repository의 메서드를 사용해서 Service 클래스에서 DB에 CRUD 작업을 수행합니다.
추가)
1. 의존 라이브러리를 추가
: 인메모리 DB인 H2를 사용하기 위해 설정 추가
* 인메모리(In-memory) DB
: 메모리 안에 데이터를 저장하는 DB
: 메모리는 휘발성이기 때문에 애플리케이션이 실행되는 동안만 데이터를 저장하며, 중지할 경우 데이터가 모두 삭제됨
>> 운영환경이 아닌 테스트 환경에 있어서 테스트에 필요한 데이터 이외의 쓸데없는 데이터는 테이블에 없는 것이 테스트의 정확도에서 유리하기 때문에 인메모리를 사용하기에 로컬 테스트 환경에서는 인메모리 DB 사용을 권장
2. application.yml 파일에 H2 Browser활성화 설정 추가
: Spring에서 application.properties 또는 application.yml 파일을 통해 Spring에서 사용하는 다양한 설정 정보 입력이 가능
: .yml 파일은 설정 정보를 depth 별로 입력할 수 있는 더 나은 방법을 제공하기 때문에 .properties 파일 확장자를 .yml 파일 확장자로 변경 진행 (Shift+F6)
: H2관련 설정 추가
3. H2 DB 정상 동작 유무 확인
: 'H2 console abailable at' / h2 console '.Database available at' jdbc:h2/;mem:26d0d5d3-dcef-47f8-8e6b-67898bcdcfbd0'라는 로그는 H2 DB를 정상적으로 사용할 준비가 되었으며, 웹 브라우저로 접속해 DB 관리가 가능함을 의미
4. H2 DB 디폴트 설정 문제점
: H2 DB는 애플리케이션 재시작 할때 마다 애플리케이션 로그에 출력되는 URL이 매번 바뀌기 때문에 application.yml 파일에 H2에 대한 추가 설정을 하여 해결
- Context path 변경을 통해 간결하게 설정
- JDBC URL 변경
'공부 자료 > Spring' 카테고리의 다른 글
[Spring MVC] JPA / 영속성 컨텍스트 관련 JPA API (0) | 2022.11.01 |
---|---|
[Java MVC] DDD(Domain Driven Design) (0) | 2022.10.30 |
[Spring MVC] About JDBC(Java Database Connectivity) (0) | 2022.10.27 |
[Spring MVC] 체크 예외(Checked Exception), 언체크 예외(Unchecked Exception) (0) | 2022.10.26 |
[Spring MVC] Spring MVC 예외 처리 (@ExceptionHandler, @RestControllerAdvice) (0) | 2022.10.25 |