코딩 공부/Spirngboot

[JPA] 개념

sintory-04 2025. 1. 10. 16:35

DB에 데이터를 기록하기 위해서는 자바언어로는 이해하지 못한다.

DB는 SQL이라는 언어를 사용하기 때문이다.

 

DB에 어떻게 자바 언어를 내릴 수 있나? 바로 JPA(JAVA PERSISTENCE API) - 자바언어로 DB명령을 내리는 도구가 필요하다.

데이터를 객체 지향적으로 관리할 수 있게 해준다.

JPA 의 핵심 도구는 

Entity와 Repository가 있다.

Entity는 자바객체를 DB가 이해할 수 있게 만든 것으로, 이를 기반으로 테이블이 만들어진다.

Repository는 엔티티가 DB 속 테이블에 저장 및 관리될 수 있게 하는 인터페이스이다.

그리하여, 과정을 얘기하자면 DTO를 Entity로 변환하고 이를 Repository를 이용해 Entity를 DB에 저장하게 하여야한다.


항상 내 것으로 만들기 위해서는 복습이 중요하다.

처음부터 다시 구상해보자.

 

1. 뷰페이지를 만든다.

- 뷰 페이지: 하나의 틀 templete 로 만들어 두고, 여기에 변수를 삽입해 서로 다른 페이지를 보여주는 기술.

- mvc 패턴: 화면에 보여주고, 클라이언트의 요청을 받아 처리하고, 데이터를 관리하는 역할을 영역별로 나누어 하는 기법.

  (model-view-controller pattern)

- 뷰 템플릿의 생성 위치는 src>main>resources>templetes 디렉터리에 만듦.

- 머스태치 mustache 뷰 템플릿 확장자는 mustache임.

* 페이지의 실행 흐름

- 클라이언트가 url라는 요청을 주면 controller가 요청을 받음. 

> 요청에 해당하는 메서드 수행 > 뷰 템플릿 페이지에서 사용할 변수를 등록하기 위해 모델 객체를 매개변수로 가져옴.

> 모델에서 사용할 변수 등록 > 변수값에 따라 서로 다른 뷰 템플릿 출력

> return 에는 파일 이름만을 작성하면 되는데, 서버가 알아서 src>main>resources>templetes 디렉터리에 있는 뷰 템플릿 페이지를 찾아 브라우저로 전송해줌.

* 페이지를 레이아웃에 따라 나누어서 설계 가능함.

> 템플릿 파일 안에 layouts 이라는 폴더 생성 후, header와 footer 생성

> {{/layouts>header}} 이런식으로 접근 가능.

@GetMapping("url")
public String function(Model model) {
	model.addAttribute("name","name");
	return"mustachefileName";
}

 

 

2. 컨트롤러 만들기

 

3. DTO를 만들기

- DTO란 데이터를 담아둘 그릇이라고 생각하면 쉬움.

- 폼 데이터를 실어 보낸 데이터는 서버의 컨트롤러가 객체에 담아 냄.

- 이 객체를 DTO라고 함. DTO로 받은 데이터는 최종적으로 DB에 저장됨.

package com.example.firstproject.dto;

import com.example.firstproject.entity.Article;

public class ArticleForm {

  private String title;
  private String content;
  public ArticleForm(String title, String content) {
    this.title = title;
    this.content = content;
  }

  @Override
  public String toString() {
    return "ArticleForm{" +
            "title='" + title + '\'' +
            ", content='" + content + '\'' +
            '}';
  }


  public Article toEntity() {
    return new Article(null,title,content);
  }
}

 

* JPA 도구: 핵심 도구로 엔티티와 레퍼지토리가 있음. 

4. Entity를 만들기

-  Entity는 데이터를 자바 객체로 만들기 위한 것.

package com.example.firstproject.entity;

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

@Entity
public class Article {
  @Id // 엔티티의 대푯값 지정
  @GeneratedValue // 자동 생성 기능
  private Long id;

  @Column
  private String title;

  @Column
  private String content;


  // 객체의 생성 및 초기화를 위해 생성자 추가
  public Article(Long id, String title, String content) {
    this.id = id;
    this.title = title;
    this.content = content;
  }

  @Override
  public String toString() {
    return "Article{" +
            "id=" + id +
            ", title='" + title + '\'' +
            ", content='" + content + '\'' +
            '}';
  }
}

 

 

5. repository 를 만들기.

- Repository Entity가 DB 속 테이블에 저장 관리 될수 있게 하는 인터페이스

> 인터페이스로 선언해야함.

package com.example.firstproject.repository;

import com.example.firstproject.entity.Article;
import org.springframework.data.repository.CrudRepository;

public interface ArticleRepository extends CrudRepository<Article, Long>{

}

CrudRepository 속에는 아래와 같은 메서드 들이 있음.

@NoRepositoryBean
public interface CrudRepository<T, ID> extends Repository<T, ID> {
  <S extends T> S save(S entity);
  <S extends T> Iterable<S> saveAll(Iterable<S> entities);
  Optional<T> findById(ID id);
  boolean existsById(ID id);
  Iterable<T> findAll();
  Iterable<T> findAllById(Iterable<ID> ids);
  long count();
  void deleteById(ID id);
  void delete(T entity);
  void deleteAllById(Iterable<? extends ID> ids);
  void deleteAll(Iterable<? extends T> entities);
  void deleteAll();
}

 

1. 폼데이터를 받는 객체인 DTO

2. DTO가 엔티티로 변환돼 저장

3. 리파지터리가 엔티티를 DB에 저장해 saved 라는 엔티티변수에 봔환.

'코딩 공부 > Spirngboot' 카테고리의 다른 글

[단일, 리스트 데이터 조회] 회원가입 조회  (0) 2025.01.11
[Data조회과정과 생성과정]  (0) 2025.01.11
[DTO 실습]  (0) 2025.01.10
[MVC패턴] 기본 개념  (0) 2025.01.08
[spring initializr] 시작 세팅  (0) 2024.12.31