본문 바로가기

spring boot/JPA

[ JPA ] 프로젝트 생성 + 라이브러리

 

 

 

 우선 JPA를 사용하는 이유 부터 생각해보자

 

어떤 프레임워크든 데이터베이스와의 연동이 필요하다.

예전 개발자들은 JDBC API로 직접 코딩을 한다던가,

여러모로 귀찮은 방법으로 하나하나 연동하고 값을 넣고, 받아오는 방식으로 개발을 진행했다.

한국에서 점유율이 높은 MyBatis도 mapper를 통해 직접 쿼리문을 작성해야 한다. 

이런 과정을 좀더 간략하게 좀더 쉽게 할수있는 방법이 JPA이다

 

JPA를 사용하면 데이터중심의 설계에서 객체중심의 설계를 할 수있다.

 

MyBatis를 계속해서 사용해왔던 내입장에서 생각해보면 내가 했던 개발이 정말 데이터중심이었다는걸 새삼 느꼈다.

 

그렇다고 무턱대고 JPA를 건들여서는 안된다. 

간단하고 편리해보이는만큼 까다롭고 신중하게 사용해야 한다

그래서 강의를 들으면서 배워야겠다고 생각했고, 앞으로의 포스트는 강의내용을 바탕으로 작성될것이다

 

 


 

 

프로젝트 생성 : spring boot starter 사용

 

 

 

gradle - groovy 
Java 17
Spring Boot 3.2.0
Dependencies : Spring web , Thymeleaf, Spring Data JPA, H2 Database, Lombok

 

 

generate 생성 후, intelliJ에서 해당 폴더의 build.gradle 파일로 열기

 

>> 처음실행때는 라이브러리 설치로 시간이 좀 걸린다.

 

데이터베이스는 연습용으로 좋은 H2를 사용할것이다.

 

 

 

 

build.gradle 파일을 보면 프로젝트 생성시 디펜던시를 미리 추가했기 때문에 내용이 잘 들어왔있는걸 확인할 수 있다.

plugins {
    id 'java'
    id 'org.springframework.boot' version '3.2.0'
    id 'io.spring.dependency-management' version '1.1.4'
}

group = 'jpabook'
version = '0.0.1-SNAPSHOT'

java {
    sourceCompatibility = '17'
}

configurations {
    compileOnly {
       extendsFrom annotationProcessor
    }
}

repositories {
    mavenCentral()
}

dependencies {
    implementation 'org.springframework.boot:spring-boot-starter-data-jpa'
    implementation 'org.springframework.boot:spring-boot-starter-thymeleaf'
    implementation 'org.springframework.boot:spring-boot-starter-web'
    compileOnly 'org.projectlombok:lombok'
    runtimeOnly 'com.h2database:h2'
    annotationProcessor 'org.projectlombok:lombok'
    testImplementation 'org.springframework.boot:spring-boot-starter-test'
    
}

tasks.named('test') {
    useJUnitPlatform()
}

 

거기에 강의내용에서 test가 JUnit4로 이루어지기 때문에 따로 추가해준다.

testImplementation("org.junit.vintage:junit-vintage-engine") {
       exclude group: "org.hamcrest", module: "hamcrest-core"
    }

추가하지 않으면 JUnit5로 실행된다고 한다.

 

 

intelliJ 플러그인에서 lombok을 설치해주자.

그 다음에 

Preferences >  Annotation Processors 검색 > Enable annotation processing 체크 (재시작)

설정에서 어노테이션 프로세서 검색하고 어노테이션 처리 활성화 체크해준뒤 확인 

그럼 이제 롬복이 제대로 사용이 되는지 확이해보자

 

임의의 파일을 만들고

package jpabook.jpashop;

import lombok.Getter;
import lombok.Setter;

@Getter @Setter
public class Hello {
    private String data;
}

 

이렇게 생성이 되는지 확인하면 끝 ! 

프로젝트 기본 생성은 완료했다

 

 

 


프로젝트의 라이브러리를 하나하나 살펴보자! 

그냥 코딩해도 되겠지만, 어떤 라이브러리가 어떻게 쓰이는지 아는게 좋지않을까

 

 

 

스프링 부트 라이브러리

 

ⓐ spring-boot-starter-web

· spring-boot-starter-tomcat  : 톰캣(웹 서버)

· spring-webmvc : 스프링 웹 MVC

 

ⓑ spring-boot-starter-thymeleaf : 타임리프 템플릿 엔진(View)

 

ⓒ spring-boot-starter-data-jpa

· spring-boot-starter-aop

· spring-boot-starter-jdbc

  > HikariCP 커넥션 풀 (부트 2.0 기본)

· hibernate + JPA : 하이버네이트 + JPA 

 

( 하이버네이트는 자바 언어를 위한 ORM 프레임워크이고 JPA의 구현체로, JPA 인터페이스를 구현하고 내부적으로 JDBC API를 사용한다.

하이버네이트는 자바객체를 통해 데이터베이스가 Oracle, MySql, MSSQL 등 에 상관없이 다룰수 있도록 하는 추상화를 목표로 한다. )

 

· spring-data-jpa : 스프링 데이터 JPA

 

ⓓ spring-boot-starter(공통) : 스프링부트 + 스프링 코어 + 로깅

· spring-boot > spring-core

· spring-boot-starter-logging > logback, slf4j

 

 

 

 

테스트 라이브러리

 

ⓐ spring-boot-starter-test

· junit : 테스트 프레임워크

· mockito : 목 라이브러리 

· assertj : 테스트 코드를 좀 더 편하게 작성하게 도와주는 라이브러리

· spring-test : 스프링 통합 테스트 지원

 

ⓑ 핵심 라이브러리

· 스프링 MVC

· 스프링 ORM ( 객체와 DB테이블을 매핑 )

· JPA, 하이버네이트

· 스프링 데이터 JPA

 

ⓒ 기타 라이브러리 

· H2 데이터베이스 클라이언트

· 커넥션 풀:  부트 기본은 HikariCP

· WEB(thymeleaf)

· 로깅 slf4j & Logback

· 테스트