본문 바로가기

3주차 . 스프링/3주차 - 스프링 그 여정

[SPRING] 2. JPA - 1

1. 배울부분

 

2. JPA란?

(참고용 블로그 - https://dbjh.tistory.com/77)
JPA는 자바 진영에서 ORM(Object-Relational Mapping) 기술 표준으로 사용되는 인터페이스의 모음이다
SQL을 직접쓰지않고 CRUD(Create, Read, Update, Delete)를 method로 처리할 수 있도록 도와주는 일종의 번역기

 

ORM(Object-Relational Mapping)
우리가 일반 적으로 알고 있는 애플리케이션 Class와 RDB(Relational DataBase)의 테이블을 매핑(연결)한다는 뜻이며, 
기술적으로는 어플리케이션의 객체를 RDB 테이블에 자동으로 영속화 해주는 것이라고 보면된다.

 

장점

  1. sql문이 아닌 method로 CRUD를 조작가능하고, 개발자는 객체모델을 이용하여 비즈니스 로직을 구성하는데만 집중할 수 있다고함.
  2. Query와 같이 필요한 선언문, 할당 등의 부수적인 코드가 적음, 각종 객체에 대한 코드를 별도로 작성하여 코드의 가독성을 높임.
  3. 객체지향적인 코드 작성이 가능함. 객체지향적 접근만 고려하면 되기에 효율성이 좋다.
  4. 매핑하는 정보를 Class로 명시되었기 때문에 ERD의존도를 낮출수 있고 유지보시 및 리팩토링에 유리함.
    ※ERD (Entity Relationship Diagram)(참고블로그 https://mjn5027.tistory.com/43)
    E-R 다이어그램이라고 불리며, ERD 라고 줄여 명하기도함.
    영어 약자 그대로 '​존재하고 있는 것(Entity)(데이터)들의 관계(Relationship)을 나타낸 도표(Diagram)' 이다. 데이터들의 관계를 나타낸 도표
  5. 데이터베이스 간의 변환이 있을때, 새로 쿼리를 짜야하는 경우가 생기지만, ORM을 사용한다면 쿼리를 수정할 필요가 없다.

 

단점

  1. 프로젝트의 규모가 크고 복잡하여 설계가 잘못된 경우, 속도 저하 및 일관성을 무너뜨리는 문제점이 생길 수 있음.
  2. 복잡하고 무거운 Query는 속도를 위해 별도의 튜닝이 필요하기 때문에 결국 SQL문을 써야할 수도 있음.
  3. 학습비용이 비쌈.

 

 

3. JPA 시작하기

Domain(or Entity)

RDBMS 에서 Table에 해당하는 역할

Repository

RDBMS 에서 SQL의 역할을 함

도메인 패키지 생성이후 Person.java , PersonRepository 생성

 

3_1. src ▶ main ▶ java ▶ com.sparta.week02_1에 models 패키지 생성. (강의에선 왜 Domain 패키지를 만들지?)

3_2. Person.jave, PersonRepository.java 파일 생성

3_3. Person.java 코드작성

Person.java

  • @Entity : 스프링에게 데이터베이스기준으로 테이블의 역할을 하는 클래스
  • @NoArgsConstructor : 기본생성자를 대신 생성해줌.
  • @Column : 테이블 하나의 컬럼(열)
  • @Id : ID값, Primary Key로 식별자 지정
  • @GeneratedValue(strategy = GenerationType.Auto) 생성될때마다 자동증가 명령문
    SQL문에서 ATUO_INCREMENT와 같음
  • id, name, address의 private 기본설정 후 변수를 선언, name, address는 getter함수 생성
    id변수는 데이터베이스에서 사용하는거라 Getter와 Setter함수가 필요없다.

Alt+Enter 키 사용하여 import 오류 해결

※ Person.java이미지를 보면 @Entity, @Id 밑에 빨간줄이 뜨면서 에러가 뜨는데, 이럴때는 alt+enter키를 누르면 임포트오류를 해결 할 수있다. 대부분 첫번째로 제시하는 해결방법이 맞음.

 

 

3_4. PersonRepository.java 코드작성

PersonRepository.java

  • extends를 이용하여 JpaRepository의 기능을 PersonRepository에 가져와서 사용한다.
  • JPA는 SQL을 알려주는것인데, 그뒤에 어떤 것를 대상으로 어떤 것을 식별할것인지를 설정해주어야한다.
    여기에서는 형태가 Long인 Person을 가져와서 사용한다.라고 생각하면 된다.
  • 위 과정을 마치면 JPA 사용할 준비를 마침.

 

※Interface

  • JPA는 Repository를 통해서만 사용이 가능함.
  • 인터페이스는 클래스에서 맴버가 빠진, 메소드 모음집이라고 볼 수 있다.
    그러나 여기서 나오는 메소드는 JPA에서 미리 작성된 가져와 사용하는 것이다.

 

3_5. SQL을 볼 수 있도록 application.properties 세팅하기.

application.properties

  1. src ▶ main ▶ resources ▶application.properties
  2. spring.jpa.show-sql=true 입력 
    스프링이 JPA로 작동 할 때, SQL을 보여달라는 의미.
    JPA가 SQL을 자바 명령어를 SQL로 바꿔서 직접 실행.

 

4. JPA 사용하기

Week021Application

4_1. 현재 작업파일인 Week021Application에 JPA 사용법이 들어갈예정이다. 첨부이미지에 나와있는 파란색 코드는 JAP사용을 위해 임의로 만든코드이며 중요한 것은 아래 노란박스에 들어갈 JPA 사용법이다.

 

4_2 Repository 만들기

Week021Application.java

    1. 클래스 Person 변수 person1을 생성, 기입할 변수 값들 지정

 

 

2,3 레포지 메서드 선택 활성화

    2, 3. repository. 생성, 출력
       레포지를 활성화시 첨부 이미지와 같은 직관적인 메소드가 나온다. save(insert), findAll(select) 사용메소드 선택.

 

    4. 2번에서 insert한 내용을 3번에서 보기위해 selcet를 불러오기 위해서는 자료 형태인 리스트를 사용한다

       List<Person(자료형태)>를 사용하여 리스트 형태로 저장해준다.

5. 출력값

    5. for문을 사용한 리스트 불러오기

 

 

이후 h2에 들어가보면 서버에 PERSON이 만들어지고 select * from person; 문을 입력하여 확인하면 해당코드가 SQL에 입력된것을 확인할 수 있음.

 

JPA -1 여기까지

 

 

 

 

 

 

 

 

'3주차 . 스프링 > 3주차 - 스프링 그 여정' 카테고리의 다른 글

[SPRING] 6. API-GET  (0) 2022.03.22
[SPRING] 5. Lombok, DTO  (0) 2022.03.22
[SPRING] 4. JPA-2  (0) 2022.03.22
[SPRING] 3. 생성일자, 수정일자  (0) 2022.03.21
[SPRING] 1. RDBMS  (0) 2022.03.20