프레임워크 정의
프레임워크 장점
전체적인 큰 틀을 몰라도 일부를 작성할 수 있게 해주는 것이 프레임워크야!
컨테이너(container)란?
📍 스프링의 특징
- 가볍고 배우기 쉽고 경량 컨테이너의 기능을 수행
- 제어 역행(Ioc, Inversion of Control) 기술을 이용해 애플리케이션 간의 느슨한 결합을 제어함
- 의존성 주입(DI, Dependency Injection) 기능을 지원함
- 관점 지향(AOP, Aspect-Oriented Programming) 기능을 이용해 자원 관리함
- 영속성과 관련된 다양한 서비스를 지원함
- 수 많은 라이브러리와의 연동 기능을 지원함
강한 결합은 좋은 방법이 X !! 수정, 삽입, 삭제 시 다른 코드에 영향이 미친다면.. 좋은 코드가 아니다!
인터페이스를 적용한 게시판 기능
-> 1차 인터페이스 사용해서 의존성 낮춰줌!!!
public class BoardServiceImpl implements BoardService{
BoardDAO boardDAO;
public BoardService(){
boardDAO = new BoardOracleDAOImpl();
}
}
-> 갑자기 mysql과 연동을 해야돼! 그러면 기존의 BoardOracleDAOImpl 클래스를 변경할 필요 없이 BoardDAO 인터페이스를 구현한 또 다른 BoardMySqlDAOImpl 클래스를 구현한 후 BoardServiceImpl에서 사용!!
but 인터페이스를 사용해도 BoardServiceImpl 클래스 자체는 여전히 소스 코드에서 직접 수정해야 함
📍 의존성 주입 장점
클래스 간의 의존 관계를 최소화하여 코드를 단순화 할 수 있음
애플리케이션을 더 쉽게 유지 및 관리할 수 있음
기존 구현 방법은 개발자가 직접 코드 안에서 객체의 생성과 소멸을 제어했지만 의존성 주입은 객체의 생성, 소멸과 객체 간의 의존 관계를 컨테이너가 제어함
📍 제어의 역전(Inversion Of Control)
기존 코드에서는 개발자가 직접 객체를 제어했지만 스프링에서는 객체의 제어를 스프링이 직접 담당!
IoC의 종류도 여러 가지이며, 일반적으로 스프링에서는 DI로 IoC의 기능을 구현하므로 IoC보다는 DI라는 용어를 더 많이 사용함
📍 스프링의 의존성 주입 방법
서블릿은 기본적으로 브라우저에 요청 발생 시 메모리에 로드됨
최초로 요청을 한 사람은 결과를 늦게 받게 됨.
로드 시간 단축을 위해 "로드온스타트업" 기능을 제공한다!!
스프링 설정 파일을 xml에 Bean태그로 설정 -> 내가 선언 bean 들이 모두 한번에 로드 된다! -> 자원낭비( 스프링의 단점 )
그래서 자원낭비 방지를 위해 lazy-init이라는 속성을 이용해서 bean을 언제 실행할지 지정 가능!!
한두번 사용하거나 지금 당장은 안쓰는 애들을 미리 로딩해버리면 속도가 느려져!
false로 설정하면 프로젝트 시작하자마자 바로 서버에 업로드 된다!
true로 설정하면 요청 or 사용할때만 업로드
default는 false랑 동일해.. 바로 서버로 올린다!!