코드스테이츠 백엔드 부트캠프 46일차 - [Spring MVC] JDBC 기반 데이터 액세스 계층1

wish17·2023년 2월 17일
0
post-thumbnail

Daily Coding 25번

Math.pow를 사용하지 않고 거듭제곱을 구하시오.

public long power(int base, int exponent) {
        if(exponent==0) return 1;
        --exponent;
        return base*power(base,exponent)%94906249;
    }

모든 테스트케이스 통과 but 시간복잡도 O(logN)을 만족하지 못했다.

public long power2(int base, int exponent) { // 시간복잡도 bad
        long base2 = base;
        int exponent2 = exponent;
        long result = 1;

        while (exponent2>1){
            if(exponent2%2==0){
                base2= base2*base2%94906249;
                exponent2 = exponent2/2;
            }else{
                result = result*base2%94906249;
                --exponent2;
            }
        }

        return result*base2%94906249;
    }

모든 테스트케이스 통과 && 시간복잡도 = O(logN)


[Spring MVC] JDBC 기반 데이터 액세스 계층

JDBC

  • 데이터를 데이터베이스에 저장 및 업데이트 하거나 데이터베이스에 저장된 데이터를 사용할 수 있도록 해주는 Java에서 제공하는 표준 API
  • JDBC API를 사용해서 다양한 벤더(Oracle, MS SQL, MySQL 등)의 데이터베이스와 연동 가능

일반적인 드라이버 -> 데이터베이스 과정

Connection 객체 = DB와 연결되는 객체

Statement 객체 = SQL 쿼리문을 실행하기 위해 사용하는 객체

위와 같은 방식으로 하면 속도가 느려서 Connection Pool을 사용한다.

Connection Pool

  • 미리 만든 Connection을 보관하고 필요할 때 꺼내주는 역할을 하는 관리자
    • Connection 객체를 생성하는데 시간이 오래 걸려서 로딩 시점에 미리 만들어두고 사용한다.


Spring Data JDBC

SQL 중심 기술

  • SQL 쿼리문을 애플리케이션 내부에 직접적으로 작성하여 DB에 접근하는 기술
  • ex. mybatis, Spring JDBC 등

객체(Object) 중심 기술 - ORM(Object-Relational Mapping)

  • 모든 데이터를 객체(Object) 관점으로 바라보는 기술
  • Java 객체(Object)를 SQL 쿼리문으로 자동 변환 한 후에 DB에 접근
  • JPA, Spring Data JDBC 등

Spring Data JDBC

  • 데이터와 java object를 연계하기 위해 제공되는 Spring Data의 라이브러리 중 하나
  • ORM 기술을 사용

Spring Data JDBC를 사용하기 위해서는 build.gradle의 dependencies에 아래와 같은 의존 라이브러리를 추가해야한다.

dependencies {
	implementation 'org.springframework.boot:spring-boot-starter-data-jdbc'
	runtimeOnly 'com.h2database:h2' // 데이터관리 쉽게하기 위해서 인메모리(In-memory) DB인 H2를추가
}

인메모리(In-memory) DB H2 사용방법

인메모리(In-memory) DB

  • 메모리 안에 데이터를 저장하는 데이터베이스
    • 메모리 = 휘발성 저장공간(껏다키면 사라짐)
  • 테스트 환경에서 주로 사용
  1. H2 인메모리 DB를 사용하기 위해서 application.properties 파일 확장자를 application.yml로 바꾸고 아래 코드를 입력해 설정을 추가한다.
spring:
  h2:
    console:
      enabled: true
      path: /h2     // Context path 변경
  datasource:
    url: jdbc:h2:mem:test     //#JDBC URL 변경
  sql:
    init:
      schema-locations: classpath*:db/h2/schema.sql // 테이블 생성 파일 경로

추가한 뒤에 프로젝트 실행시키면 아래와 같이 나온다.

  1. 웹브라우저에서 localhost:8080/h2를 입력

  1. JDBC URL란에 1번에서 나온 실행결과에 있는 jdbc:h2:mem:test를 입력 후 Connect 버튼 누르기

H2 Browser 로그인 성공!


간단한 실습

풀코드 GitHub

사용기능

CrudRepository 인터페이스

  • 데이터베이스에 CRUD(데이터 생성, 조회, 수정, 삭제) 작업을 진행하기 위해 Spring에서 지원해주는 인터페이스

@ID

  • 사용한 멤버변수가 엔티티의 고유 식별자 역할을 하게 만드는 애너테이션
  • Primary key로 지정한 column(열)에 해당된다는 의미를 부여하는 애너테이션

schema.sql 파일 (MESSAGE 테이블 생성 스크립트)

CREATE TABLE IF NOT EXISTS MESSAGE (
    message_id bigint NOT NULL AUTO_INCREMENT,
    message varchar(100) NOT NULL,
    PRIMARY KEY (message_id)
);

포인트 개념

  • 엔티티(Entity) 클래스 이름은 데이터베이스 테이블의 이름에 매핑되고, 엔티티 클래스 각각의 멤버 변수는 데이터베이스 테이블의 컬럼에 매핑된다.

  • application.yml 파일의 설정 정보 등록을 통해 데이터베이스 설정, 데이터베이스의 초기화 설정 등의 다양한 설정을 할 수 있다.

  • application.properties 방식보다 application.yml 방식이 선호되는 추세다.

실습결과

0개의 댓글