티스토리 뷰
JPA 란?
- JPA : Java Persistence API
- Persistence : 영속성. 데이터를 생성한 프로그램의 실행이 종료되더라도 사라지지 않는 데이터의 특성. 파일 시스템, 관계형 데이터베이스 혹은 객체 데이터베이스 등을 활용하여 구현한다.
- Ram 은 휘발성. PC 끄면(or 꺼지면) 사라진다. 따라서 비휘발성이 되기 위해선 하드디스크에 기록해야 하는데 그 역할을 DBMS에서 한다.
- API
- Application : 프로그램
- Programming : 프로그래밍
- Interface : 인터페이스
- cf) 프로토콜 vs 인터페이스
- 인터페이스 : 무조건 지켜야하는 약속. 상하관계가 존재함.
- 프로토콜 : 서로 동등한 약속.
- cf) 프로토콜 vs 인터페이스
- 즉, JPA 란 Java 프로그래밍을 할때 영구적으로 데이터를 저장하기 위해 필요한 API 이다.
- JPA는 ORM 기술이다.
- ORM : Object Relational Mapping. 쉽게말하면 오브젝트를 데이터베이스에 연결하는 어떤 방법론.
- Java가 들고있는 데이터 타입과 Database에 있는 데이터 타입이 다르다.(ex. VARCHAR) 따라서 Database에 있는 테이블을 모델링 해야한다. 기존에는 Database의 테이블을 먼저 생성하고 그 테이블을 모델링하는 과정을 거쳤다. 말을 지어보자면 TRM(Table Relational Mapping) 이겠지? ORM은 반대이다. Class로 먼저 데이터 타입을 만들고 그 클래스를 통해 Database의 테이블을 자동생성할 수 있다. 이때 필요한 것이 JPA의 인터페이스이다.
- 결론은, 인터페이스의 규칙을 지키며 Class를 만들고 실행을 하면 Database에서 테이블이 자동으로 생성되게하는 기법을 ORM이라고 하는것이다.
- JPA는 반복적인 CRUD 작업을 생략하게 해준다.
- select, selectAll, delete, update, insert 등은 굉장히 자주 쓰이는 반복적인 일이다. 이런 것들을 할때 어떤일이 벌어지냐
- Java -> Database 커넥션을 요청
- Database에서 요청을 확인하고 세션을 열어줌 -> 커넥션 완성
- Java -> DB 쿼리전송
- DB -> Java 쿼리에 맞는 데이터 만들어서 응답.
- 이때 DB와 Java의 데이터 타입이 다르므로 Java Object로 변경해야 함
- 연결된 세션을 끊기
- 연결된 커넥션을 끊기
- 이런 반복적인 CRUD 노가다를 JPA가 단순하게 처리하도록 도와준다!
- select, selectAll, delete, update, insert 등은 굉장히 자주 쓰이는 반복적인 일이다. 이런 것들을 할때 어떤일이 벌어지냐
- JPA는 영속성 컨텍스트를 가지고있다.
- 영속성 : 데이터를 영구적으로 저장 (DB에)
- 컨텍스트 : 모든것에 달라붙을 수 있다. 그 대상의 모든정보. 정도로 해석하면 될듯
- 자바가 DB에 정보를 저장하고 가져오는 일련의 모든 정보를 영속성 컨텍스트를 통해 확인할 수 있다.
- 자바는 항상 영속성 컨텍스트를 통해서 DB에 데이터를 저장하고, DB의 데이터 또한 영속성 컨텍스트를 통해 자바로 넘어온다. 이때 영속성 컨텍스트에서 일어나는 모든 일들은 자동으로 처리가 된다.
- JPA는 DB와 OOP의 불일치성을 해결하기 위한 방법론을 제공한다. (DB 는 객체 저장 불가능)
- DB는 기본 자료형만 가질 수 있다. (int, varchar 등등) 하지만 Class는 객체를 가질 수 있다. ORM을 하게 되면 모델링의 과정에서 자바가 주도권을 가지게된다. JPA는 객체를 가진 클래스를 자동으로 Database로 매핑해준다. (자동으로 외래키를 심어준다.)
- JPA는 OOP 관점에서 모델링을 할 수 있게 해준다. (상속, 콤포지션, 연관관계)
- 상속 및 콤포지션을 통해 클래스가 짧아진다.
- 방언처리가 용이하여 Migration 하기 좋다. 유지 보수에도 좋다.
- Spring을 하는데 JPA를 통해 DB에 접근한다. 이때 MySQL, 마리아DB, 오라클 등등 어떤 DB를 갈아 끼워도 상관없다. <- 추상화 객체를 쓰기 때문
- JPA는 쉽지만 어렵다. 새로운 개념이 많이나와서 알면알수록 어렵다.
출처 : https://www.youtube.com/playlist?list=PL93mKxaRDidG_OIfRQ4nztPQ13y74lCYg
후기
기본 개념을 익힌다는 단순한 마음가짐으로 Spring에 대하여 공부하는데 그 과정은 전혀 단순하지 않았다. 프로토콜과 인터페이스의 차이, ORM기법, 영속성 컨텍스트등 심화하면 끝도 없는 내용들이 쏟아졌다. 이 모든 내용을 100프로 이해하고 넘어가는것은 아무래도 힘들것같다. 하지만 적어도 조금 정리한 후 프로젝트를 만드는것과 무지성 개발과는 큰 차이가 있을거라고 생각한다.
'Web 개발' 카테고리의 다른 글
[Web] Spring Boot with JPA (0-4) web.xml 이 하는일 (0) | 2021.08.27 |
---|---|
[Web] Spring Boot with JPA (0-3) 소켓 통신과 Apachi Tomcat (0) | 2021.08.26 |
[Web] Spring Boot with JPA (0-1) Spring 이란? (0) | 2021.08.26 |
[Web] 웹 개발 A to Z (3) Vue 프로젝트 생성 (0) | 2021.02.14 |
[Web] 웹 개발 A to Z (2) GitHub 연동 (0) | 2021.02.14 |
공지사항
최근에 올라온 글
최근에 달린 댓글
- Total
- Today
- Yesterday
링크
TAG
- Spring Boot
- 시뮬레이션
- BFS
- 알고리즘
- 구현
- java
- 그리디
- DFS
- S2
- Spring
- 리액트 네이티브
- PriorityQueue
- 백준
- 백트래킹
- g4
- 자바
- 우선순위큐
- 다익스트라
- 리액트
- G5
- SWEA
- map
- 문자열
- S3
- 현꾸라지
- 코딩새내기
- react native
- react
- 객체지향
- laugh4mile
일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
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 |
글 보관함