경희대학교 컴퓨터공학부 하계 리턴 백엔드(스프링부트) 스터디 3주차 - 트랙장 최현영

  1. H2 및 Spring Data JPA 의존 라이브러리 추가
dependencies {
		...
    runtimeOnly 'com.h2database:h2'
		implementation 'org.springframework.boot:spring-boot-starter-data-jpa'
		...
}

설치한 H2 데이터베이스를 사용하기 위해서는 설정을 해야 한다. application.properties 파일을 application.yml 파일로 이름 변경(수정)하자.

⇒ 해당 파일을 리팩토링 들어가서 이름 변경하면 이름이 변경된다.

스크린샷 2023-08-06 오후 9.57.21.png

[파일명: /returnStudy/src/main/resources/application.yml]

# DATABASE
spring:
  datasource:
    driver-class-name: org.h2.Driver  # 데이터베이스 접속시 사용하는 드라이버이다. Database를 H2로 사용하겠다는 것을 명시한다.
    url: jdbc:h2:~/test  # 데이터베이스 접속을 위한 경로이다.
    username: sa # (사용자명은 기본 값인 sa로 설정한다.)
    password: #로컬 개발 용도로만 사용하기 때문에 패스워드를 설정하지 않았다.

	jpa:
    hibernate:
      ddl-auto: create
    properties:
      hibernate:
        show_sql: true
        format_sql: true
	h2:
    console:
      enabled: true #H2 콘솔의 접속을 허용할지를 설정
      path: /console #콘솔 접속을 위한 URL 경로이다.

스크린샷 2023-07-28 오후 10.23.36.png

개발 환경에서는 보통 update 모드를 사용하고 운영환경에서는 none 또는 validate 모드를 사용한다.

  1. ORM(Object Relational Mapping)

    1. 자바의 객체와 RDB의 테이블을 자동으로 1:1 매핑해준다.
    2. 자바의 클래스와 같은 객체지향 관점과 데이터베이스와 같은 데이터 중심 관점에서의 패러다임 불일치가 발생하는데 이를 해결한다.
      1. 패러다임 불일치
        • 세분성 : 테이블 수와 엔티티 클래스의 수가 서로 다를 수 있다.
        • 상속성 : RDBMS에서는 상속이라는 개념이 없다
        • 식별성 : 데이터베이스는 기본키와 같은 식별자로 동일성을 정의하지만, 자바의 경우 두 객체의 값이 같을지라도 참조값이 다르다면 다르다고 판별할 수 있다.
        • 연관성 : 객체지향관점에서는 객체를 참조함으로써 연관성(의존성)을 나타내지만, RDBMS에서는 외래키만으로 연관성을 표현할 수 있다. 즉, 데이터베이스에서는 외래키만으로 양방향 연관관계를 표현할 수 있지만, 객체간에는 단방향만 가짐으로 불일치가 발생한다.
          • 객체가 양방향을 가지기 위해서는 서로가 의존 객체를 필드로 지니고 있어야지 성립함
    3. ORM을 통해 쿼리문이 아닌 메서드로 데이터를 조작할 수 있다.
    4. ORM을 사용하면 내부에서 SQL 쿼리를 자동으로 생성해 주므로 직접 작성하지 않아도 된다. 즉, 자바만 알아도 데이터베이스에 질의할 수 있다.
    5. ORM을 이용하면 데이터베이스 종류에 상관 없이 일관된 코드를 유지할 수 있어서 프로그램을 유지·보수하기가 편리하다. 또한 내부에서 안전한 SQL 쿼리를 자동으로 생성해 주므로 개발자가 달라도 통일된 쿼리를 작성할 수 있고 오류 발생률도 줄일 수 있다.
  2. JPA(Java Persistence API)

    1. JPA는 자바 진영에서 ORM(Object-Relational Mapping)의 기술 표준 명세서
      1. 실제로 동작하는 것[구현체]이 아닌 어떻게 동작해야하는지 메커니즘을 정리한 명세서이다.
    2. 내부적으로 JDBC[데이터베이스에 접속할 수 있도록 해주는 자바 API]를 사용한다.
      1. 기존에는 직접 SQL문을 작성하여 의존성이 높아 개발의 효율이 떨어짐
      2. JPA는 메서드를 통해 자동으로 SQL을 짜줌
    3. JPA의 대표적인 구현체인 하이버네이트를 주로 사용
  3. Spring Data JPA

    1. Spring Data JPA는 하이버네이트를 조금 더 사용하기 쉽게 모듈화 해놓은 것
      1. CRUD 처리에 필요한 인터페이스를 제공(메서드 제공)하며, 하이버네이트의 엔티티 매니저를 직접 다루지 않고 리파지토리를 정의해 사용함으로써 스프링이 알아서 적합한 쿼리를 대신 생성해줌
      2. 엔티티 매니저 : 엔티티를 관리하는 객체
    2. 우리는 Spring Data JPA를 통해 데이터베이스의 상태를 변화시켜 줄 것이다.
  4. 롬복 익히기