Spring발행일 2024. 7. 18.원본 https://blog.naver.com/jword_/223517087809 ↗

[자바 스프링] JPA 스펙과 ORM에 대해 알아보자 (with 어노테이션)

[자바 스프링] JPA 스펙과 ORM에 대해 알아보자 (with 어노테이션) — #자바스프링 #JAVASPRING #JPA #JPA스팩 #JPA란 #JPA어노테이션 #ORM #objectrel...

#Spring#Naver Blog

#자바스프링 #JAVASPRING #JPA #JPA스팩 #JPA란 #JPA어노테이션 #ORM #objectrelationalmapping

#개발자의도구들

🚨📝 📖 📒

​

AI스쿨 msa기반 java 백엔드 코스 중에 공부한 내용을 작성하였습니다

\* 현재 Spring 프로젝트를 진행 중입니다. 전체적인 목차를 보시려면 여기를 눌러주세요.

이미지

왜 JPA를 사용해야하는가?

JDBC의 한계

이전글을 통해 자바 어플리케이션과 JDBC를 연결하여 직접 SQL 쿼리를 날린 경험이 있습니다.

public void putText(String key, String value) { String sql = "INSERT INTO texts (ID, value) VALUES (?, ?)";​ try { PreparedStatement preparedStatement = connection.prepareStatement(sql); preparedStatement.setString(1, key); preparedStatement.setString(2, value);​ int effectedRows = preparedStatement.executeUpdate();​ if (effectedRows > 0) { System.out.println("A new row has been inserted successfully."); } else { System.out.println("A new row insertion failed"); } } catch (SQLException e) { System.out.println("DataBase Manger: putText err: " + e.getMessage()); }}

지금은 크게 문제가 없어보입니다만, 데이터베이스 구조가 더 복잡해진다면, 그만큼 처리해야할 SQL쿼리도 많아지겠죠? 또한, 자바에서는 보통 Object를 사용하여 자료를 관리하는데 이는 DataBase의 데이터 사이의 자연스러운 불일치가 발생할 수 밖에 없습니다.

더 세세한 한계점은 많겠지만, 우선 여기서는 JDBC는 복잡성이 높아져 발생할 있는 문제를 내포하고 있다는 것을 기억해두시면 될 것 같습니다.

​

JPA란?

JPA는 Jave Pesistence API의 약어로, 영속성 계층을 위한 API로 보시면 될 것 같습니다. 즉 JPA를 사용한다는 것은 이미 내부적으로 구현된 Persistency Layer를 사용한다는 것으로 보면 될 것 같습니다.

​

JPA는 자체적으로만 보자면 표준 스펙입니다. 즉 JPA라는 청사진이 존재하고, 이 청사진 대로 구현한 라이브러리를 JPA 라이브러리라고 할 수 있습니다. 대표적인 예로 Hibernate가 있습니다.(하지만 여기엔 비밀이 있지요)

ORM

JPA는 ORM이라는 특징을 가지는데 이는 Object-Relational Mapping의 약자로, 데이터베이스 테이블과 자바 Object를 매핑해주는것을 의미합니다.

이미지

JPA를 사용하면 손쉽게 원하는 객체를 DB에 매핑되도록 구현할 수 있습니다. 이는 JDBC의 한계인 자연스러운 불일치를 해결할 수 있게 해줍니다.

Logic

JPA는 API로서의 기능을 수행하는데, JDBC에서 하나 하나 적어줘야하는 SQL문을 개발자가 하나도 작성하지 않아도 DB의 기본적인 CRUD기능을 수행할 수 있습니다. 이는 개발자로 하여금 온전히 개발에만 더 집중할 수 있도록 돕는 이점도 있습니다.

​

JPQL

JPQL은 JPA와 함께 사용하여, DB에서의 좀 더 복잡한 로직을 처리할 수 있도록 돕습니다. 이 부분에 관해서는 나중에 따로 정리를 할 예정입니다.

​

​

이외에도 트랜잭션, 캐싱, 라이프 사이클 call back등 다양한 이점을 가지고 있습니다.

JPA @어노테이션

JPA를 사용할때 어노테이션으로 간단하게 table과 자바 Object를 매칭시킬 수 있습니다. 여기서는자주 사용하는 @위주로 몇가지만 정리하고 넘어가겠습니다.

​

@Entity

클래스가 데이터베이스 테이블에 매핑되는 엔티티임을 명시합니다. 클래스명이 테이블명으로 사용됩니다.

​

@Table

엔티티 클래스에 사용되어, 실제 DB에서 사용할 테이블 이름을 지정할 수 있습니다.

​

@id

클래스의 속성(필드)에 지정하여, 해당 속성이 Primary key임을 지정합니다. 각 엔티티는 하나 이상의 @id 어노테이션을 가져야합니다.

​

@GeneratedValue

pimary key를 어떻게 생성할것인지를 정합니다. 주로 auto count를 사용할 때 사용됩니다.

​

@Column

엔티티 클래스 속성(필드)에 사용되어 해당 속성이 DB테이블의 column 임을 지정합니다. 이름, 길이, NULL여부, 유니크 여부 등을 설정 할 수 있습니다.

​

@ManyToOne @OneToMany @ManyToMany @OneToOne

Entity별 관계를 지정할 때 사용됩니다. 이 부분은 조금 복잡하니 나중에 따로 정리해볼 예정입니다.