[코배웹] Part 1 스프링 부트 도전하기

지윤·2021년 7월 1일
0

Spring

목록 보기
1/7

한 달 동안 '코드로 배우는 스프링 부트 웹 프로젝트'라는 책을 통해 스터디📚를 하기로 했다. 개인적인 용도로 나중에 다시 찾아보기 쉽게 정리해두려고 한다.

개발 도구

  • IntelliJ
  • MariaDB
  • Spring boot
  • Gradle
  • Spring Data JPA
  • Thymeleaf

build.gradle 설정

dependencies {
    implementation 'org.springframework.boot:spring-boot-starter-data-jpa'
    implementation 'org.springframework.boot:spring-boot-starter-web'
    compileOnly 'org.projectlombok:lombok'
    developmentOnly 'org.springframework.boot:spring-boot-devtools'
    runtimeOnly 'org.mariadb.jdbc:mariadb-java-client'
    annotationProcessor 'org.projectlombok:lombok'
    testImplementation 'org.springframework.boot:spring-boot-starter-test'
    //JUnit4 추가
    testImplementation("org.junit.vintage:junit-vintage-engine") {
        exclude group: "org.hamcrest", module: "hamcrest-core"}

}

커넥션 풀

프로젝트를 실행하면 로그에 HikariPool...로 시작하는 부분을 볼 수 있는데 스프링 부트가 기본적으로 이용하는 커넥션 풀이 HiKariCP 라이브러리를 이용하기 때문이다. 스프링 부트가 모든 것을 자동으로 설정해준다.
커넥션 풀에 대한 개념 및 사용하는 이유 등에 대해서는 블로그 참고


Spring Data JPA

ORM(Object Relational Mapping)

객체지향 패러다임을 관계형 데이터베이스에 보존하는 기술
개체와 클래스를 통해 객체지향과 관계형 데이터베이스는 유사한 특징을 가지는 것을 알 수 있다. 이런 특징에 기초하여 객체지향을 자동으로 관계형 데이터베이스에 맞게 처리해주는 기법에 대해 고민한 결과 탄생한 것이 ORM이다.

JPA(Java Persistece API)

ORM을 Java 언어에 맞게 사용하는 '스펙'이다.
이 스펙을 구현한 대표적인 구현체가 Hibernate 프레임워크이다. 스프링 부트는 이 구현체를 이용한다.

구성: Spring Date JPA -> Hibernate -> JDBC -> DB

Spring Data JPA 개발에 필요한 것은 아래 두가지이다.

1. JPA를 통해 관리되는 객체(엔티티 객체)를 위한 엔티티 클래스
2. 엔티티 객체들을 처리하는 기능을 가진 Repository 인터페이스

- Repository 인터페이스를 상속 받으면 기본적인 CRUD, 페이징/정렬 기능을 별도 코드없이 처리할 수 있다.

Spring Data JPA를 위한 application.yml 설정

spring:
  datasource:
    url: jdbc:mariadb://localhost:13306/bootex
    username: bootuser
    password: bootuser
    driver-class-name: org.mariadb.jdbc.Driver

  jpa:
    hibernate:
      ddl-auto: update
    properties:
      hibernate:
        format_sql: true
    show_sql: true

logging.level:
  org.hibernate.SQL: debug

쿼리 메서드 기능과 @Query

쿼리메서드
메서드의 이름 자체가 쿼리의 구문으로 처리되는 기능

  • select를 하는 작업이면 List 타입이나 배열 이용 가능
  • 파라미터에 Pageable 타입을 넣는 경우에는 무조건 Page<'E'> 타입 반환

@Query
SQL과 유사하게 엔티티 클래스의 정보를 이용해서 쿼리를 작성하는 기능

  • 조인이나 복잡한 조건을 처리해야 하는 경우 사용
  • 필요한 데이터만 선별적으로 추출하는 기능이 가능
  • 데이터베이스에 맞는 순수한 SQL을 사용하는 기능
  • DML 등을 처리하는 기능(@Modifying와 함께 사용)
profile
헬로🙋‍♀️

0개의 댓글