본문 바로가기
프로젝트/스프링 부트와 AWS로 혼자 구현하는 웹 서비스_실습

스프링 부트와 AWS로 혼자 구현하는 웹 서비스 05

by dudung__ 2023. 8. 12.

03. 스프링 부트에서 JPA java persistence API로 DB 다루기

 

03_1 JPA  java persistence API 란?

우선 API란?!


- 개념

API는 애플리케이션 소프트웨어를 빌드하고 통합하기 위한 정의 및 프로토콜 세트인 애플리케이션 프로그래밍 인터페이스(Application Programming Interface)를 뜻합니다.

 

- 작동방식 

API를 사용하면 구현 방식을 알지 못하는 제품 또는 서비스와도 통신할 수 있으며 애플리케이션 개발을 간소화하여 시간과 비용을 절약할 수 있습니다. 새로운 툴과 제품을 설계하거나 기존 툴과 제품을 관리할 때 API를 사용하면 유연성을 높이고 설계, 관리, 사용 방법을 간소화하며 혁신의 기회를 얻을 수 있습니다.

 

출처:https://www.redhat.com/ko/topics/api/what-are-application-programming-interfaces


 

 

 

 

현대 웹 앱에서 관계형 데이터 베이스 RDS relational database의 중요도가 높아짐에따라 프로젝트에 SQL의 비중이 급격하게 높아졌다 - RDS가 SQL만을 인식하기 때문에

 

이에 JAVA의 특징인 객체 지향적인 프로그래밍이 희석되고, DB 모델링에 집중하게됨

( JAVA - 객체지향 프로그래밍 언어 => 메세지를 기반으로 기능/속성을 한 곳에서 관리하는 기술
RDS - 관계형 데이터 베이스 => 어떻게 데이터를 저장할지에 초점이 맞춰진 기술 )

 

특히나, 상속 관계에 대한 구현을 RDS로 할수는 없음 

 

JPA는 이렇게 다른 두개를 중간에서 연결하는 역할을 하는 API임

==> 따라서 개발자들은,  SQL에 맞춘 코드를 짜지 않아도 된다는 말이 된다

 

 

 

 

03_2 프로젝트에 Spring Data JPA 적용하기

 

우선 build.gradle에 의존성부터 넣어줌

 

// JPA
implementation 'org.springframework.boot:spring-boot-starter-data-jpa'

// h2 database
runtimeOnly 'com.h2database:h2'


    implementation 'org.springframework.boot:spring-boot-starter-data-jpa'
=> JPA 추상화 라이브러리 

=> 스프링 부트 버전에 맞춰 자동으로 JPA 관련 라이브러리 버전 관리

 


    runtimeOnly 'com.h2database:h2'

=> 인메모리 RDS

=> 별도의 설치 x => 프로젝트 의존성만으로 관리가 가능함

=> 메모리에서 실행 => 앱을 재실행할때 초기화됨 => 테스트 용으로 많이 사용함

 

 

 

 

 

도메인을 담을 패키지와 / post 패키지,클래스를 만듬

 

 


import lombok.Builder;
import lombok.Getter;
import lombok.NoArgsConstructor;

import jakarta.persistence.Entity;
import jakarta.persistence.Column;
import jakarta.persistence.GeneratedValue;
import jakarta.persistence.GenerationType;
import jakarta.persistence.Id;

@Getter //6
@NoArgsConstructor //5
@Entity //1
public class Posts {
    @Id //2
    @GeneratedValue(strategy = GenerationType.IDENTITY) //3
    private Long id;

    @Column(length = 500, nullable = false ) //4
    private String title;


    @Column(columnDefinition = "TEXT", nullable = false)
    private String content;

    private String author;



    @Builder //7
    public Posts(String title, String content, String author) {
        this.title = title;
        this.content = content;
        this.author = author;

    }


}

 

 

여기서 문제가 됐던 사항은, 책에는 javax.persistence에 있는 것들을 import 해오라고 되어있었다

하지만, 여러번 확인을 해봐도, 빨간줄의 오류에, symbol오류가 계속 떴다

 

그래서 구글링을 해보니 javax.* -> jakarta.*로 바뀐것을 확인할 수 있었다

이걸 본 후, 코드를 작성해보니 오류 없이 코드가 작성되었다