ABOUT ME

-

Today
-
Yesterday
-
Total
-
  • 스프링 2주차 복습
    스파르타 강의 정리 2023. 11. 14. 20:58

     

     

     

    IoC와 DI는 객체지향의 SOLID 원칙  그리고 GoF의 디자인패턴과 같은 설계원칙 및 디자인패턴이다.

    IoC는 설계원칙에 해당하고, DI는 디자인패턴에 해당한다.

     

    설계원칙은 백엔드에선 SOLID가 대부분이긴한데,  관점(BE, FE등) 에 따라 설계원칙에 대해 다르게 느낄 수 있다.

    (현재 내 기준에서는 SOLID원칙만 신경쓰면 된다.)

     

     


     

    필드 주입, 메소드 주입, 생성자 주입의 차이

     

    객체를 만들때 가장 중요한건 추후에 변경이 없어야한다는 전제(객체의 불변성)가 깔려있다.

    객체를 만들면 각자도생을 할 수 있도록 만드는 것이 중요하다.

     

    ex. 맥북을 업데이트할때마다 센터에 가서 업데이트를 해야한다면?

     

     

    가장 권장하는 생성자 주입의 경우

    그냥 바뀐 생성자를 받아오기만 하면 된다.

    변경이 가장 적어서 좋다.  (객체의 불변성을 잘 지킬 수 있음 + final 사용가능)

    이 말은 역할분리가 잘 되어있다고도 볼 수 있다.

     

    메소드 주입, 필드 주입은 생성자 주입에 비해 변경이 많아서 추천하지 않는 방식이다.

     

     


     

    @Autowired

    생성자 선언이 하나일때만 생략가능

    @Component나 이 애너테이션이 달린 애너테이션이 달려있어야 주입가능

     

     


     

     

    Q.  그러면 스프링이 빈을 등록할때 데드락이 걸릴 수 있는거 아니야?

    A.  스프링은 빈을 등록하는 과정에서 데드락이 발생하지 않도록 설계되어 있다.

    데드락은 다중 스레드환경에서 발생하는데

     

    스프링은 대부분의 경우 단일 스레드에서 동작하기 때문에 그런 문제는 발생하지 않는다.

     

    또한 빈을 등록할때 빈의 초기화 순서를 조절하기 위해 BeanDefinition을 사용하여

    순서를 조절하여 데드락이 발생하지 않도록 보장한다.

     

     

     


     

     


    Auto_increment
    = @GeneratedValue(strategy = GenerationType.IDENTITY)

     

     


     

    영속성 컨텍스트

     

     

    엔티티는 무조건 영속성 컨텍스트 안에 저장된다.

    다만 영속성 컨텍스트를 사용하지않고 엔티티를 다루는 예외적 경우도 존재하는데

     

    1. DTO나 프로젝션 등에서 일시적인 데이터 전달

      영속성 컨텍스트의 관리를 받을 필요없이 DB에서 직접 필요한 정보만을 조회하여 일시적으로 사용하는 경우

     

    2. 캐싱이 필요없는 경우

      한번 조회한 데이터를 그대로 사용하고 더이상 조회할 필요가 없는 경우

     

    3. 일괄 수정 또는 삭제

      트랜잭션의 범위를 벗어나서 데이터를 변경해야할 때이므로

     

    하지만 일반적으로는 영속성 컨텍스트를 사용하여 엔티티를 관리하는 것이 바람직하다.

     

     

     

    영속성 컨텍스트에 접근을 위해서는 엔티티매니저가 필요하다.

    (엔티티매니저는 엔티티매니저팩토리를 통해 생성된다.)

    엔티티매니저팩토리는 일반적으로 DB 하나당 하나만 생성되어 애플리케이션이 동작하는 동안 사용된다.

     

     

     


     

    트랜잭션 (Transation) 이란?

    DB 데이터들의 무결성과 정합성을 유지하기 위한 하나의 논리적 개념

    (DB 데이터를 안전하게 관리하기 위해)

     


     

     

    애너테이션 정리

     

     

    @MappedSuperClass

    JPA 엔티티 클래스들이 해당 추상 클래스를 상속할 경우

    추상클래스에 선언한 멤버변수를 컬럼으로 인식해준다.

    자바의 상속과 똑같은 개념

     

     

    @EntityListeners(AuditingEntityListener.class)

    Auditing 기능을 포함시켜주는 애너테이션

     

     

    @CreatedDate   이 애너테이션은   @Column(updatable = false)  를 추가해야 최소생성시간이 변경되지 않는다.

     

    @Temporal(TemporalType.TIMESTAMP)

    이건 자바의 DATE나 CALENDAR 같은 날짜 데이터를 매핑할때 사용한다.

     

    TemporalType.은 세가지가 있다  DATE(2023-11-11),  TIME(11:11:11),   TIMESTAMP(2023-11-11T11:11:11.343434)

     

     

    JpaAuditing 기능을 사용하기 위해선 스프링부트에 알려야한다. 

    @SpringBootApplication 애너테이션 위에  @EnableJpaAuditing 달아주면 된다.

    '스파르타 강의 정리' 카테고리의 다른 글

    스프링 1주차 복습  (0) 2023.11.13
    Entity 연관관계, @OneToOne  (0) 2023.11.10
    회원가입 구현 및 Filter  (0) 2023.11.08
    3-5, 3-6 JWT  (0) 2023.11.07
    3-3, 3-4 인증과 인가 / 쿠키와 세션  (0) 2023.11.07
Designed by Tistory.