/springBootStudy

스프링, 스프링 부트 공부 공간

Primary LanguageJava

springBootStudy

spring-core

  • 학습강의: 스프링 핵심원리 -기본편

배운 것

  • 스프링이 만들어진 이유
 * 스프링은 자바 언어 기반 프레임워크
 * 자바언어의 가장 큰 특징- 객체지향언어
 * 스프링은 좋은 객체지향 애플리케이션을 개발할 수 있게 도와주는 프레임 워크
  • 순수한 Java 코드에서 spring 프레임 워크를 통한 spring 사용법 학습

  • 좋은 객체지향 설계의 5가지 원칙(SOLID)의 내용을 익히고 코드로 학습

    • SRP :단일 책임 원칙
    • OCP :개방 폐쇄 원칙
    • LSP :리스코프 치환 원칙
    • ISP :인터페이스 분리 원칙
    • DIP :의존관계 역전 원칙
  • IOC,DI가 왜 필요한지에 대한 이해

    • 다형성만으로 좋은 객체지향 설계를 할수 없음
    • IOC,DI를 활용해, 좋은 객체지향 설계 가능
  • 스프링 컨테이너와 스프링 빈

    • 스프링 컨테이너를 생성하는 방법과 빈을 조회하는 방법에 대해 학습
    • 스프링 컨테이너에 빈을 등록하는 방법 2가지 (자바코드,xml)에 대해 학습
    • BeanFactory와 Application에 대한 학습
  • 싱글톤 컨테이너

    • 싱글톤 패턴

    • 싱글톤을 사용하는 이유

    • 싱글톤 방식의 주의점

      1. 특정 클라이언트에 의존적 필드가 있으면 안됨
      2. 특정 클라이언트가 값을 변경할 수 있는 필드가 존재하면 안됨
      3. 가급적 읽기만 가능하도록
      4. 필드 대신 자바에서 공유되지 않은 지역변수, 파라미터 등을 사용

data-jpa

  • 학습강의: 스프링 데이터 JPA

    배운 것

    • 순수 JPA 기반 리포지토리와 스프링 데이터 JPA 인터페이스의 차이
    • 스프링 데이터 JPA는 도메인에 특화되지 않은 기본적인 CRUD 구현체를 제공
    • 도메인에 특화된 쿼리를 사용하고 싶을 경우(쿼리 메소드 기능)

      • 메소드 이름으로 쿼리 생성
      • JPA NamedQuery
      • @Query
    • 페이징과 정렬

      • 스프링 데이터 JPA에서 제공하는 페이징 방법 (Pageable 을 매개변수로 받아 페이징을 사용)
      • 반환값에 따라 Count 쿼리 사용여부를 결정할 수 있음.
       * 반환값이 Page인 경우 토탈 페이지 쿼리가 나감.
       * 반환값이 Slice인 경우 조회할 데이터 개수+1 개를 조회하여 그 다음 데이터가 존재하는지 유무만 알려줌
       * 반환값이 List 인 경우 조회할 데이터를 페이징 처리만 함
      
    • 벌크성 수정쿼리

      * @Modifying 사용 (주의할 점: 벌크성 쿼리를 사용할 경우, 영속성 컨텍스트에 있는 엔티티 상태와 DB에 존재하는 엔티티 상태값이 다를 수 있음) 
      
        * 권장방법:  @Modifying(clearAutomatically = true)로 벌크성쿼리를 날린후, 영속성컨텍스트를 자동으로 지워준다. 
      
    • @EntityGraph

      * fetch join을 간단하게 사용할 수 있도록 만들어진 기능
      * 쿼리메소드 기능에서 메소드 이름으로 쿼리를 생상할때, fetch join 을 사용하고 싶다면 ? @EntityGraph를 사용
      

Spring MVC

  • 스프링 MVC구조파악
    • 서블릿을 통해 스프링 MVC구조와 동일한 구조를 만들어봄
    • DispatcherServlet,핸들러 매핑, 핸들러 어댑터, 뷰 리졸버, 뷰 사용이유와 구조 파악