티스토리 뷰

Web 개발

[Web] Spring Boot with JPA (0-2) JPA 란?

코딩브론즈 2021. 8. 26. 21:13

JPA 란?

  • JPA : Java Persistence API 
    • Persistence : 영속성. 데이터를 생성한 프로그램의 실행이 종료되더라도 사라지지 않는 데이터의 특성. 파일 시스템, 관계형 데이터베이스 혹은 객체 데이터베이스 등을 활용하여 구현한다.
    • Ram 은 휘발성. PC 끄면(or 꺼지면) 사라진다. 따라서 비휘발성이 되기 위해선 하드디스크에 기록해야 하는데 그 역할을 DBMS에서 한다.
    • API
      • Application : 프로그램
      • Programming : 프로그래밍
      • Interface : 인터페이스
        • 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 등은 굉장히 자주 쓰이는 반복적인 일이다. 이런 것들을 할때 어떤일이 벌어지냐
      1. Java -> Database 커넥션을 요청
      2. Database에서 요청을 확인하고 세션을 열어줌 -> 커넥션 완성
      3. Java -> DB 쿼리전송
      4. DB -> Java 쿼리에 맞는 데이터 만들어서 응답.
      5. 이때 DB와 Java의 데이터 타입이 다르므로 Java Object로 변경해야 함
      6. 연결된 세션을 끊기
      7. 연결된 커넥션을 끊기
    • 이런 반복적인 CRUD 노가다를 JPA가 단순하게 처리하도록 도와준다! 
  • 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프로 이해하고 넘어가는것은 아무래도 힘들것같다. 하지만 적어도 조금 정리한 후 프로젝트를 만드는것과 무지성 개발과는 큰 차이가 있을거라고 생각한다.

공지사항
최근에 올라온 글
최근에 달린 댓글
Total
Today
Yesterday
링크
«   2024/05   »
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
글 보관함