- 학습강의: 스프링 핵심원리 -기본편
- 스프링이 만들어진 이유
* 스프링은 자바 언어 기반 프레임워크
* 자바언어의 가장 큰 특징- 객체지향언어
* 스프링은 좋은 객체지향 애플리케이션을 개발할 수 있게 도와주는 프레임 워크
-
순수한 Java 코드에서 spring 프레임 워크를 통한 spring 사용법 학습
-
좋은 객체지향 설계의 5가지 원칙(SOLID)의 내용을 익히고 코드로 학습
- SRP :단일 책임 원칙
- OCP :개방 폐쇄 원칙
- LSP :리스코프 치환 원칙
- ISP :인터페이스 분리 원칙
- DIP :의존관계 역전 원칙
-
IOC,DI가 왜 필요한지에 대한 이해
- 다형성만으로 좋은 객체지향 설계를 할수 없음
- IOC,DI를 활용해, 좋은 객체지향 설계 가능
-
스프링 컨테이너와 스프링 빈
- 스프링 컨테이너를 생성하는 방법과 빈을 조회하는 방법에 대해 학습
- 스프링 컨테이너에 빈을 등록하는 방법 2가지 (자바코드,xml)에 대해 학습
- BeanFactory와 Application에 대한 학습
-
싱글톤 컨테이너
-
싱글톤 패턴
-
싱글톤을 사용하는 이유
-
싱글톤 방식의 주의점
- 특정 클라이언트에 의존적 필드가 있으면 안됨
- 특정 클라이언트가 값을 변경할 수 있는 필드가 존재하면 안됨
- 가급적 읽기만 가능하도록
- 필드 대신 자바에서 공유되지 않은 지역변수, 파라미터 등을 사용
-
- 학습강의: 스프링 데이터 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를 사용
- 스프링 MVC구조파악
- 서블릿을 통해 스프링 MVC구조와 동일한 구조를 만들어봄
- DispatcherServlet,핸들러 매핑, 핸들러 어댑터, 뷰 리졸버, 뷰 사용이유와 구조 파악