1.Spring boot와 Spring framework의차이
Spring frameWork와 Spring boot의 가장큰 차이는 설정 부분이다.
Spring boot는 설정의 많은 부분의 자동화를 지원한다.
대표적으로
Spring boot안에는 tomcat,jetty와 같은 WAS가 내장 되어잇다.
spring boot start depency만 추가 해주면 설정된다.
2.MVC
Model := 데이터 관리 및 비즈니스 로직을 처리하는 부분 Dao,DTO,Service
Veiew := 요청에 대한 응답 페이지 (tymeleaf 등을로 화면을 구성하기도 한다,Rest api 서버라면 json으로 구성되기도 한다.)
Controller := 사용자 요청을 처리
경량 컨테이너로서 자바 객체를 직접 관리
제어 역전(IOC)라는 기술을 통해 어플리케이션의 느슨한 결합을 만들어준다. 객체의 제어권을 사용자가 아닌 스프링 컨테이너에게 넘긴다.
의존성 (DI) 주입
객체를 BEAN으로 등록하면 스프링 IOC컨테이터 관리 대상 객체가 된다.
객체간 의존성이 발생할때 스프링컨테이너가 서로 연결 시켜준다.
AOP (관점 지향 프로그래밍)
트랜잭션이나 로깅,보안과 같이 여러 모듈에서 사용하는 기능을 분리하여 관리 할수 있게 돕는다.
5.@RequestBody,@RequestParam,@modelAttribute(body와 parameter를 객체에 저장하기 위해 사용)
@RequestBody : 사용자의 요청한 JOSN형태의 HTTP BODY 데이터를 JAVA객체로 반환해준다.
@RequestParam : 1개의 http 요청 파라미터를 받기 위해 사용
defuault 값이 true이므로 사용시 반드시 1개이상의 파라미터가 필요
없을 시 400에러
@modelAttribute : http body와 http parameter들을 생성자에 주입하기 위해 사용(이때 getter/setter 사용)
*GETTER/SETTER
말 그대로 객체의 값을 저장하거나 가져올때 사용
GET,SET메서드를 통해 캡슐화가 가능해 진다.
필드 값은 Private로 선언 되어 외부에서 변경이 불가능하게 한다.
6.제어 역전(ioc)
모든 객체에대한 생성,사이클 제어권을 스프링 ioc컨테이너에게 위임한다.
ioc컨테이너가 관리하려면 객체들을 bean객체로 만들어야한다.
bean으로 만드는 방법
1. 어노테이션을 등록하여 application-context.xml conponent-scan 방법 (스테리오타입 @controller,@Repository,@Service,@Component)
1.의존성 주입 방법 3가지
1-1. 생성자 주입(권장) - 순솬참조, 불변성 가짐, 테스트에 용이
1-2. 필드 주입
1-3. 세터 주입
1-4. @Autowird 어노테이션으로 주입
@Autowired사용 한다.
-객체 생성시 필요한 빈을 찾아 주입해준다.
이때 구현체가 여러개 존재하면 에러가 발생하는데 구분하기 위해
@Qualifier로 구분한다.
컨 - > bean -> 의존성 -> 메서드 호출 -> 사용 -> 콜백 메서드 ->종료
스프링은 3가지 방법으로 빈의 생명주기를 관리합니다.
1. 인터페이스(initializingBean,DisposableBean)
2. 설정 정보 의 초기화 메서드
3. @PostConstruct, @PreDestroy 어노테이션
Lombok이란 코드를 자동완성 해주는 라이브러리
getter/setter/생성자에 대한 코드를 자동완성해준다.
VO,BO,DAO,DTO
VO (Value Object): 실제 데이터만 저장하는 바구니 역할
DTO(Data Transfer Object) : 각 계층간 데이터를 전달할때 데이터를 담는 바구니
여기서 계층은 Controller layer, Bussiness layer, Persistent layer
DAO(Data Access Object) : DB접근을 위한 객체
대용량 트래픽장애시
SCALE-UP (서버의 성능을 높인다), SCALE-OUT(서버의 수를 늘린다)
Spring의 싱글톤 패턴
스프링에서 bean생성시 싱글톤으로 생성
요청이 들어올때마다 객체를 생성하지않고, 미리 만들어진 객체를 활용한다.
이로써 객체지향적 개발을 할수잇고, 테스트에 용이합니다.
12.프로토 타입 패턴
프로토 타입 빈은 요청할때마다 새로운 객체를 생성해 나아간다.
생성방법은 @Scope("prototype")으로 생성
13 @Transactional
@Transactional을 메서드 또는 클래스에 명시하면
AOP를 통해 인터페이스 또는 객체를 상속한 Proxy객체가 생성된다.
proxy 객체의 메서드를 호출하면 Target 메서드 전후 로 트랜잭션처리를 한다.
@Transactional에 readOnly속성을 사용하는 이유
수정,삭제에 대한 작업이 아닌 조회 목적일때 사용한다.
영속성 테이블에서 엔티티를 관리할 필요가 없기때문에 readOnly를 활용하여 메모리 성능을 높일수 있다.
JPA N+1문제와 발생하는 이유 그리고 해결방법
N+1이란 1번의 쿼리를 날렸을때 N번의 쿼리 결과가 발생하는 것을 말합니다.
해결방법
Fetch join
발생하는 이유
연관관계를 가진 엔티티를 조회할때 한쪽 테이블만 조회하고 연결된 다른 테이블은 따로 조회 하기 때문에 발생한다.
Fetch join을 사용하면 미리 두 테이블을 join하여 한번에 모든 데이터를 가져온다.