티스토리 뷰

🍃 스프링

[SPRING] JPA

홓옇 2023. 6. 5. 04:44

 

https://ghrnwjd.tistory.com/entry/JAVA-JPA-ORM

 

[SPRING] JPA, ORM

[ JPA ] JPA ( Java Persistence API )로 자바 진영의 ORM 기술 표준이다. JPA는 인터페이스의 모음이다. (JPA 2.1 기준 HIbernate, EclipseLink, DataNucleus 의 표준 명세를 구현했다.) [ ORM ] ORM (Object-Relational Mapping) 로

ghrnwjd.tistory.com

 

저번글에 이어서 작성해보려고 합니다.

JPA

JPA는 자바 진영의 ORM 기술 표준이다.

 

객체와 테이블의 차이로 책에서 가장 이해가 잘 되었던 구문은 연관관계에 대한 설명이었다.
객체는 참조를 통해 접근하고 참조에 접근하여 연관된 객체를 조회하지만 테이블은 외래키를 사용하여 연관관계를 가지고 조인을 사용하여 연관된 테이블을 조회한다.

•  JPA가 제공하는 API를 사용하면 객체를 DB에 저장하고 관리할 때, 개발자가 직접 SQL을 작성하지 않아도 된다.
•  JPA가 개발자 대신 적절한 SQL을 생성해서 DB에 전달하고, 객체를 자동으로 Mapping 해준다.

 

또한 JPA는 내부적으로 JDBC API를 사용하는데 JDBC는 DB 프로그래밍을 위한 API이며 DB종류에 상관없이 지원한다.

JPA 구조

JPA: 자바 진영의 ORM 기술에 대한 API 표준 명세

Hibernate: JPA의 구현체이고, 내부적으로 JDBC를 이용한다. ORM 프레임워크로 10년이상 개발되고 있다.

Spring Data JPA: JPA를 사용하기 쉽게 스프링에서 제공하는 모듈로 내부적으로 JPA 구현체를 이용한다.

 

현재 @Repository Annotation을 사용하여 DB에 접근하는 것은 Spring Data JPA를 사용하는 것이다.

 

@Repository
public interface UserRepository extends JpaRepository<User, String> {

}

기본적으로 제공해주는 메서드는 다음과 같다.

1. save()
2. findOne()
3. findAll()
4. count()
5. delete()

 

JPA 명명규칙

findBy, countBy, removeBy, deleteBy 등 다양한 규칙이 있다.

 

프론트엔드에서 DB접근을 하면 안될까

현재 React, SpringBoot로 프로젝트를 진행하고 있는데 React에서 직접 DB를 접근할 수도 있을텐데라는 생각이 들었다.

실제로 찾아보니 Javascript 전용 ORM 기술중 하느인 sequelize도 있었다.

 

DB접근방식을 두가지로 나눌 수 있는데 2-tier, 3-tier 구조가 있다.

2-tier 구조로 설계시 보안, 유지보수의 어려움이 존재하여 클라이언트와 DB사이의 어플리케이션 서버를 두어 단점을 보완한다고 한다.

 

 

참고자료

 

https://docs.spring.io/spring-data/jpa/docs/1.10.1.RELEASE/reference/html/#jpa.sample-app.finders.strategies

 

Spring Data JPA - Reference Documentation

Example 11. Repository definitions using Domain Classes with mixed Annotations interface JpaPersonRepository extends Repository { … } interface MongoDBPersonRepository extends Repository { … } @Entity @Document public class Person { … } This example

docs.spring.io

 

https://nerim.tistory.com/9

 

왜 프론트에서 바로 DB에 접근하면 안될까?

introduction 처음 풀스택 토이프로젝트를 시작하고 DB를 먼저 작성했다. 이후, 프론트 코드를 작성하며 필요한 DB쿼리들을 바로 받아오면 되겠다는 생각을 했다. 즉, 프론트엔드↔데이터베이스 통

nerim.tistory.com

 

'🍃 스프링' 카테고리의 다른 글

[SPRING] 컬렉션  (0) 2023.07.30
[SPRING] Entity, DTO  (0) 2023.07.24
[SPRING] 외부 REST api 사용하기  (0) 2023.05.20
[SPRING] IntelliJ 설정  (0) 2023.05.15
[SPRING] 남의 코드 이해하기  (1) 2023.05.07
공지사항
최근에 올라온 글
최근에 달린 댓글
Total
Today
Yesterday
링크
«   2024/12   »
1 2 3 4 5 6 7
8 9 10 11 12 13 14
15 16 17 18 19 20 21
22 23 24 25 26 27 28
29 30 31
글 보관함