본문 바로가기
카테고리 없음

(취업스터디 3,4,5일차)

by hbIncoding 2023. 5. 12.

1. JPA의 영속성 컨텍스트

 1) JPA : 자바 진영에서 ORM 기술 표준으로 사용되는 인터페이스의 모음, 실제적으로 구현된 것이 아니라 구현된 클래스와 매핑을 해주기 위해 사용되는 프레임워크

 2) 영속성 컨텍스트

  • 엔티티를 영구 저장하는 환경
  • 애플리케이션과 DB 사이에서 객체를 보관하는 논리적 개념

 3) 엔티티의 생명주기

  • 비영속(new/transient): 영속성 컨텍스트와 전혀 관계가 없는 상태
  • 영속(managed): 영속성 컨텍스트에 저장된 상태
  • 준영속(detached): 영속성 컨텍스트에 저장되었다가 분리된 상태
  • 삭제(removed): 삭제된 상태

 4) 영속성 컨텍스트의 특징

  • 식별자 값 : 연속성 컨텍스트는 엔티티를 식별자 값으로 구분하며, 영속 상태는 반드시 식별자 값이 있어야 한다.
  • flush : 트랜잭션을 커밋하는 순간 영속성 컨텍스트에 새로 저장된 엔티티를 데이터 베이스에 반영하는데 이것을 flush라고 한다.
  • 장점
    • 1차 캐시 : 1차 캐시의 키는 식별자 값이고 값은 텐티티 인스턴스이다.
    • 동일성 보장 : 엔티티의 동일성을 보장한다.
    • 트랜잭션을 지원하는 쓰기 지연 : 트랜잭션이 끝날때 모아둔 쿼리를 한번에 DB에 보낸다.
    • 변경 감지 : JPA로 엔티티 수정 시 단순히 엔티티를 조회해서 데이터를 변경하면 된다.
    • 지연 로딩 : 불필요한 쿼리 안날림

2. 제네릭과 제네릭을 사용하는 이유

  • 클래스 내부에서 지정하는 것이 아닌 외부에서 사용자에 의해 탑이이 지정된는 것
  • 특정 타입을 미리 지정해주는 것이 아닌 필요에 의해 지정할 수 있도록 하는 일반(Generic) 타입

1) 장점

  • 잘못된 타입이 들어올 수 있는 것을 컴파일 단계에서 방지
  • 클래스 외부에서 타입을 지정해주어 타입을 체크하고 변환해줄 필요가 없다. 관리가 편하다
  • 비슷한 기능을 지원하는 경우 코드의 재사용성이 높아진다.

 

3. LIst, Set, Map, HashMap의 차이

1) LIst : 저장공간이 필요에 의해 자동으로 늘어난다(순서가 있는 저장공간)

  • 특징 : 순서가 있고, 중복을 허용
  • 장점 : 가변적인 배열, 배열이 자동으로 늘어난다.
  • 단점 : 원하는 데이터가 뒤쪽에 위치하는 경우 검색 속도가 느려진다.
  • 방식 : equals()를 이용한 데이터 검색

2) Set : 집합, 순서가 없고 중봅 데이터를 허용하지 않는다.

  • 특징 : 순서가 없고, 중복을 허용하지 않는다.
  • 장점 : 빠른 속도
  • 단점 : 정렬하기 위해선 별도의 처리가 필요하다.
  • 방식 : equals()를 이용한 데이터 검색

3) Map : 키와 데이터를 같이 저장

  • 특징 : 키와 값으로 데이터를 저장하며, 순서가 없고, 키는 중복이 안된다.
  • 장점 : 빠른 속도
  • 단점 : key 검색 속도가 검색 속도를 좌우
  • 방식 : equals()를 이용한 데이터 검색

1) HashMap : index번호 대신 키값으로 값을 찾는 맵형태의 자료구조도 iterator 클래스를 이용해 키값을 순서대로 iterator에 저장해두면 순서대로 데이터 추출이 가능

  • Map을 implements한 클래스로서 중복을 허용하지 않는다.
  • key와 value의 쌍으로 이루어지며 key또는 value값으로써 null을 허용한다.

 

4. Spring Container

1) 스르링 컨테이너란?

  • 스프링에서 자바 객체들을 관리하는 공간
  • 자바 객체는 스프링에서는 빈(Bean)이라고 한다.
  • 빈의 생성부터 소멸까지 개발자 대신 관리해주는 곳

2) 컨테이너의 종류

  • BeanFactory와 ApplicationContext가 있다.
  • ApplicationContext 컨테이너가 BeanFactory의 기능을 포괄하면서 추가적인 기능을 제공하기에 대부분 ApplicationContext를 사용한다.

 

5. Rest Client

  • Spring에서 제공하는 HTTP 통신에 사용할 수 있는 템플릿
    • 쉽게 말하면 HTTP 통신을 할 수있는 Rest한 Client이다.
  • RestTemplate와 WebClient 두 타입의 빈을 등록해 주는 것이 아니라 빌더를 등록해준다.
    • 빌더를 주입받아서 필요할 때 마다 REST 클라이언트를 빌드해서 사용해야한다.

 1)RestTemplate

  • Blocking I/O 기반의 Synchronous API
  • RestTemplateAutoConfiguration
  • 프로젝트에 spring-web 모듈이 있다면 RestTemplateBuilder를 빈으로 등록

 2)WebClient

  • Non-Blocking I/O 기반의 Asynchronous API
  • WebClientAutoConfiguration
  • 프로젝트에 spring-webflux 모듈이 있다면 WebClient.Builder를 빈으로 등록

6. @SpringBootTest와 @WebMvcTest의 차이

 1)@SpringBootTest

  • 어플리케이션 전체를 로드하고 테스트를 실행하는데 사용
  • 모든 구성 요소를 로드하기 때문에 느릴 수 가 있다.

 2)@WebMvcTest

  • 웹 계층에 대한 테스트를 위해 사용된다.
  • 컨트롤러, 플터, 컨버터, 유효성 검사 등과 같은 웹 계층 관련 구성 요소만 로드 된다.
  • 따라서 비교적 빠르게 테스트를 수행 할 수 있다.