94일차 JPA 심화

LeeJaewon·2023년 2월 1일
0

강의영상을 보다가 가물가물 하거나 생소한 것 위주로 정리를 해보았다.

@Autowired ?

필요한 의존 객체의 "타입"에 해당하는 Bean을 찾아 주입한다.

  • 생성자
  • setter
  • 필드

Autowired는 기본값이 true이기 때문에 의존성 주입을 할 대상을 찾지 못한다면 애플리케이션 구동에 실패한다.

생성자 의존성 주입

생성자 주입은 생성자에 의존성 주입을 받고자 하는 field를 나열하는 방법으로, 권고되는 방법의 하나 이다. 생성자 주입을 하면 좋은 이유에 대해서 자세히 알고 싶다면 여기에서 확인할 수 있습니다.

장점

  • 필수적으로 사용해야 하는 레퍼런스 없이는 인스턴스를 만들지 못하도록 강제함
  • Spring 4.3 이상부터는 생성자가 하나인 경우 @Autowired를 사용하지 않아도 됨
  • Circular Dependency / 순환 참조2 의존성을 알아 차릴 수 있음
  • 생성자에 점차 많은 의존성이 추가 될 경우 리팩토링 시점을 감지 할 수 있음
  • 의존성 주입 대상 필드를 final로 불편 객체 선언할 수 있음
  • 테스트 코드 작성시 생성자를 통해 의존성 주입이 용이함

단점

  • 어쩔 수 없는 순환 참조는 생성자 주입으로 해결하기 어려움
  • 이러한 경우에는 나머지 주입 방법 중에 하나를 사용
  • 가급적이면 순환 참조가 발생하지 않도록 하는 것이 더 중요

필드 의존성 주입

멤버 필드에 @Autowired annotation을 선언하여 주입받는 방법이다.

장점

  • 가장 간단한 선언 방식

단점

  • 의존 관계가 눈에 잘 보이지 않아 추상적이고, 이로 인해 의존성 관계가 과도하게 복잡해질 수 있음
  • 반대로 Constructor injection과 Setter injection은 의존성을 명확하게 커뮤니케이션 함
  • 이는 SRP / 단일 책임 원칙에 반하는 안티패턴
  • DI Container와 강한 결합을 가져 외부 사용이 용이하지 않음
  • 단위 테스트시 의존성 주입이 용이하지 않음
  • 의존성 주입 대상 필드가 final 선언 불가

Setter 의존성 주입

setter 메소드에 @Autowired annotation을 선언하여 주입받는 방법이다.(메소드 이름을 setter 대신에 다른 걸로 하여도 주입은 가능하지만 좋은 방법은 아니다)

장점

  • 의존성이 선택적으로 필요한 경우에 사용
  • 생성자에 모든 의존성을 기술하면 과도하게 복잡해질 수 있는 것을 선택적으로 나눠 주입 할 수 있게 부담을 덜어줌
  • 생성자 주입 방법과 Setter 주입 방법을 적절하게 상황에 맞게 분배하여 사용

단점

  • 의존성 주입 대상 필드가 final 선언 불가

ORM - Object Relational Mapping

  • 객체와 관계형 데이터베이스의 데이터를 자동으로 매핑(연결)해주는 것을 말한다.

    • 객체 지향 프로그래밍은 클래스를 사용하고, 관계형 데이터베이스는 테이블을 사용한다.
    • 객체 모델과 관계형 모델 간에 불일치가 존재한다.
    • ORM을 통해 객체 간의 관계를 바탕으로 SQL을 자동으로 생성하여 불일치를 해결한다.
  • 데이터베이스 데이터 <—매핑—> Object 필드

    • 객체를 통해 간접적으로 데이터베이스 데이터를 다룬다.
  • Persistant API라고도 할 수 있다.

    • Ex) JPA, Hibernate 등

1차 캐시 - 영속성 컨텍스트

  • 쓰기지연
    두 개의 쿼리가 날아갈 것을 하나의 쿼리로 합쳐 준다.
  • 영속성 4가지 상태
    비영속 > 영속 > 준영속 | 삭제
    persist() = save merge() = update 랑 같은 의미
    commit()가 일어나야 DB에 쿼리가 반영 된다

@Enumerated(EnumType.STRING) 기본은 ORDINAL (0, 1) 등으로 표시하는데 중간에 값의 위치가 바뀌거나
새로운 값이 들어오게 되면 데이터가 틀어지기 때문에 실무에서는 사용하지 않음. -> STRING으로 받음

profile
한 걸음 한 걸음 꾸준히

0개의 댓글