Spring 입문 230224 #3 JPA/ORM

김춘복·2023년 2월 24일
0

Spring 공부

목록 보기
3/14
post-custom-banner

JPA

어플리케이션이 DB를 직접 다룰 때의 문제점

  1. 번거롭다.
    db에 직접 접속해 테이블을 만들고 쿼리를 직접 만들고 jdbc api로 실행해주고 번거롭다.

  2. SQL의존적이라 변경에 취약
    단순한 변경에도 쿼리문 직접 수정하고 자바 객체에 값을 넣어야 하고 반복적인 일이 많다.

  3. 객체지향 모델과 관계형 DB의 패러다임 불일치가 발생한다.

  • DB의 데이터가 더 정형화되어있으면서 상속의 개념이 없다.
  • 자바는 객체와 참조로, DB는 테이블사이의 관계(FK)로 연관관계를 표현하고 처리한다.

ORM

: 이러한 패러다임 불일치에서 기인한 문제들과 반복적이고 번거로운 어플리케이션 단에서의 쿼리작업을 줄여주기 위해 ORM(객체 관계 매핑)기술이 등장한다.

JPA

: Java Persistence API. 자바 ORM 기술에 대한 표준 명세

  • JPA가 수행하는 작업
  1. 쿼리를 자동으로 만들어준다.
  2. 어플리케이션 계층에서 SQL의존성을 줄여 번거로운 작업 단축.
  3. 패러다임 불일치를 해결
  4. 특정상황 제외하고는 최적화가 되어있어 성능도 좋다.
  5. 방언(dialog)도 지원해준다. 표준sql 준수하면 jpa가 알아서 방언들 처리해준다.
  • 여기에 대해 궁금하면 '영속성 컨텍스트'에 대해 공부해보기

  • JPA 예시

@Entity // DB 테이블 역할을 합니다.
public class User {
		// ID가 자동으로 생성 및 증가합니다.
	  @Id
    @GeneratedValue(strategy = GenerationType.AUTO)
    private Long id;

    // nullable: null 허용 여부
    // unique: 중복 허용 여부 (false 일때 중복 허용)
    @Column(nullable = false, unique = true)
    private String username;

    @Column(nullable = false)
    private String password;

    @Column(nullable = false, unique = true)
    private String email;

    @Column(nullable = false)
    @Enumerated(value = EnumType.STRING)
    private UserRoleEnum role;

    @Column(unique = true)
    private Long kakaoId;
}

이렇게 자바에서 클래스를 작성하면

  • IDEMAILKAKAO_IDPASSWORDROLEUSERNAME

아래와 같은 테이블이 위처럼 DB에 만들어 진다.

profile
Backend Dev / Data Engineer
post-custom-banner

0개의 댓글