|  JPA

- JPA란, 자바에서 사용하는 ORM 기술 표준을 말한다.

* ORM : 객체와 RDBMS를 매핑해주는 기술

- JPA는 인터페이스의 모음으로, Hinernate / EclipseLink / DataNucleus가 이 명세를 구현했다.

 

|  JPA를 왜 쓸까?

1. SQL 중심 개발 -> Object 중심 개발

2. 생산성 : 데이터의 CRUD가 훨씬 쉬워진다.

저장 : jpa.persist(entity)

조회 : jpa.find(pk)

수정 : entity.setName(" ")

삭제 : jpa.remove(entity)

3. 유지보수 : 필드 변경 시 모든 SQL 수정 --> 필드를 하나만 더 추가

4. 패러다임 불일치 해결

rf. 객체와 관계형 DB의 차이

  객체 SQL
상속 객체 상속 관계 Table 슈퍼 타입 - 서브 타입 (Pk - Fk)
연관관계 참조 사용 (ex. member.getTeam()) 외래 키를 사용 (양방향 조인이 가능)
객체 그래프 탐색 상속 관계에서 부모 타입 사용 가능 서로 pk,fk를 통해 조인된 테이블끼리만 가능
비교하기 같은 참조값을 가진 객체는 서로 == 같다고 표현 동일한 트랜잭션에서 조회한 엔터티여야만 같다고 표현

5. 성능 :

(1) 1차 캐시와 동일성 보장

: JPA를 쓸 경우에 하나의 트랜잭션에서 다음 트랜잭션으로 넘어가기 전에 잠시 동안 캐시를 해주는 기능이 있다.

(2) 트랜잭션을 지원하는 쓰기 지연

insert JDBC BATCH SQL 기능을 통해 commit() 전까지 insert를 모아 한번에 전송한다.
update/delete update, delete로 인한 row 락 시간 최소화 - update, delete 후 바로 commit()

(3) 지연 로딩

* 일반적으로 지연 로딩으로 먼저 코딩 후, 최적화를 위해 자주쓰는 두 객체간 연관관계를 즉시 로딩으로 변경한다.

지연 로딩 객체가 실제 사용될 때에 로딩한다.

-- A 테이블을 조회, B 테이블을 조회 ... 식으로 지연하여 조회
즉시 로딩 Join을 통해 연관 객체를 미리 묶어 조회

-- A join B 를 통해 바로 조회 

6. 데이터 접근 추상화와 벤더 독립성

7. 표준

 

|  역사

- JPA는 Java Persistence API 의 줄임말

- 이클립스 재단에서 가져가면서 Jakarta Persistence API 로 명칭 변경

- 과거에 EJB ORM이 있었다. --> 하이버네이트 (오픈 소스) --> JPA (자바 표준)

 

|  특징

- Annotation을 통해 매핑

- 기본형 타입에 대한 매핑 지원

- 밸류 타입에 대한 매핑 가능

- 클래스 간 연관관계 : 1:1, 1:N, N:1, N:M

- 상속 매핑 지원

 

 

[ 출처 ]

인프런 강의, [ 자바 ORM 표준 JPA 프로그래밍 - 기본편 ] 을 들은 후 정리한 내용입니다.

 

 

 

 

|  개요

- 영속성이란, 프로그램이 종료된 이후에도 한 번 처리한 데이터는 DB에 영구적으로 반영된 상태여야 함을 뜻한다.

- 자바를 통해서 DB와 소통하는 방식은 다양한데,

  그 중에서 Persistence Framework를 사용하면 Object를 통해 SQL문을 만들 수 있다.

- Persistence Framework는 크게 1) SQL Mapper 2) ORM 으로 나뉠 수 있으며, 두번째 방식이 현재 가장 많이 사용되는 방식이다.

 

[ 영속성이란? ]

영속성이란, 데이터를 생성한 프로그램이 종료된 후에도 사라지지 않는 데이터 특성

[ 출처 ] 위키백과

 

[ 자바에서 데이터를 저장하는 방법 ]

- JDBC 프로그래밍 (순수 Java)

- Spring JDBC

- Persistence Framework : Hibernate, MyBatis....
  - 크게 SQL Mapper와 ORM으로 나뉜다.

 

[ Persistence Framework의 종류 ]

구분 내용 프레임워크명
SQL Mapper SQL mapper를 통해 sql <-> object Mybatis, JdbcTemplates(Spring)
ORM ORM을 통해 sql <-> object JPA, Hibernate

 

|  ORM

- Object Relational Mapping : 객체 관계 매핑의 약자

- 객체와 DB의 관계를 매핑해주는 도구를 말한다.

장점 - 직관적인 코딩을 통해 가독성을 높히고, 비즈니스 로직에 집중할 수 있어 생산성이 높아진다.
- 재사용 및 유지보수의 편리성 증가
- DBMS에 대한 종속성이 저하된다.
단점 - 완벽한 ORM만으로만 서비스를 구현하기 어렵다.
- 프로시저가 많은 시스템에서는 ORM의 객체 지향적인 장점을 활용하기 어렵다.

 

|  언어별 ORM 종류

 

|  JPA와 Hibernate, Spring Persistence API

- JPA는 Java Persistece API의 약자로, 말 그대로 인터페이스이자 명세를 의미한다.

- 그리고 JPA를 구현한 것이, Hibernate이다. 

- Spring Data JPA는 Spring 프레임워크에서 사용할 수 있게, JPA를 한단계 추상화시킨 모듈이다. 

출처:https://suhwan.dev/2019/02/24/jpa-vs-hibernate-vs-spring-data-jpa/

 

 

 

[참고 및 출처]

https://gmlwjd9405.github.io/2019/02/01/orm.html

https://hanamon.kr/orm%EC%9D%B4%EB%9E%80-nodejs-lib-sequelize-%EC%86%8C%EA%B0%9C/

https://azderica.github.io/00-db-orm/

https://suhwan.dev/2019/02/24/jpa-vs-hibernate-vs-spring-data-jpa/

|  정규화와 비정규화에 대한 개념이 정리된 포스팅이 있어 가져와 보았다.

https://owlyr.tistory.com/20

 

[데이터베이스] 정규화 vs. 비정규화(반정규화)

💡 정규화 vs. 비정규화(반정규화) 데이터베이스 정규화 데이터베이스 비정규화 데이터베이스 비정규화(Denormalization, 반정규화)란 무엇인가? 장점, 단점 비정규화 대상 주의점 정규화(Normalized)란

owlyr.tistory.com

 

|  간단 요약

정규화란, RDBMS에서의 데이터의 중복을 최소화하는 작업을 말한다. 

> 정규화를 많이 하게 되면 조인을 많이 해야하는 단점이 있다.

비정규화란, 반면 의도적으로 데이터를 중복시키거나, 데이터를 그룹핑함으로써, 성능을 최적화하는 작업이다.

  SQL 문법 실제 처리 순서  
1 SELECT  count(*) as c FROM  member 테이블에서
직업이 개발자인 사람들을 추출
2 FROM  member SELECT 
3 WHERE  job = '개발자' WHERE
4 GROUP BY nationality GROUP BY 국적에 따라 그룹핑
5 HAVING avg(salary) >= 3000 HAVING 평균 연봉이 3000 이상인 경우로 한정
6 ORDER BY c ORDER BY 순서 지정

 

** WHERE와 HAVING의 차이점

  WHERE HAVING
위치 FROM 뒤에 GROUP BY 뒤에
언제 SELECT한 레코드의 조건 정의 그룹화되어 만들어진 레코드 집합의 조건 정의

 

 

[ 참조 및 출처 ]

부트캠프 수업 참조

https://m.blog.naver.com/PostView.naver?isHttpsRedirect=true&blogId=likemony&logNo=221183607855 

https://wikidocs.net/3943

|  소스 트리에서 클론이 안 될 때

- 스터디를 하다가도 한 번 이런 이슈가 있었는데

- 내가 경험한 원인은 gitHub에서 저장소를 private로 등록을 한 상태로 SSH를 통해 클론을 하려고 해서였다.

- 다른 원인으로는 gitHub가 보안을 강화하면서 소스트리로 클론을 할 때 인증을 한 번 더 요구할 때에 이런 이슈가 발생하기도 한다고 한다. 그럴 때엔 plink.exe를 통해 이슈를 해결하라고.. (최하단의 참조 확인하기)

 

|  해결하기

[1] 소스트리의 [도구] - [SSH 키 생성 또는 불러오기] 를 누른다.

 

[2] 아래와 같이 PuttyGen이 나타나는데, 여기서 [Load]를 누른다.

 

[3] 파일 보기를 [All Files]로 바꾼 뒤에 깃허브에 등록한 ssh 인증키(.pub 말고 다른 거) 를 가져온다.

[4] 가져오면 아래와 같이 나타나는데, [Save private key]를 누르면 .ppk 파일로 자동 변환된다.

[5] 이 상태에서 소스트리를 껐다가 다시 키면, 클론할 때 알아서 윈도우창에서 SSH 인증키를 등록하라고 뜨는데,

     이 때, 불러오기로 .ppk 파일을 등록해주면 된다.

 

[ 참조 ]

SSH key 파일로 개인 private key 생성 https://blog.dalso.org/article/ssh-key-to-ppk-convert

소스트리 사용 시 git 주소 인식 인 될 때 https://marobiana.tistory.com/169

'Git,Github' 카테고리의 다른 글

[Git/Github] fail to push to ~~ 해결하기  (0) 2022.09.29
Git, Github 정리  (0) 2022.09.27
[Git/Github] 소스트리로 클론하기  (0) 2022.09.23
[Git/Github] 저장소(Repository)  (0) 2022.09.23
[Git/Github] Git의 기본 동작 원리  (0) 2022.09.23

+ Recent posts