[Spring] 스프링 프레임워크 start

yedy·2023년 6월 16일
0

[Spring]

목록 보기
1/7
post-thumbnail

✔️ 프레임워크란 ?

프레임워크 정의

  • 사전적 의미는 '어떤 것을 구성하는 구조 또는 뼈대'
  • SW적 의미로는 '기능을 미리 클래스나 인터페이스 등으로 만들어 제공하는 반제품'

프레임워크 장점

  • 일정한 기준에 따라 개발이 이루어지므로 개발 생산성과 품질이 보장된 애플리케이션을 개발할 수 있음
  • 개발 후 유지보수 및 기능의 확장성에서도 고품질 보장

전체적인 큰 틀을 몰라도 일부를 작성할 수 있게 해주는 것이 프레임워크야!

컨테이너(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라는 용어를 더 많이 사용함

📍 스프링의 의존성 주입 방법

  1. 생성자의 의한 주입
  2. setter에 의한 주입


서블릿은 기본적으로 브라우저에 요청 발생 시 메모리에 로드됨
최초로 요청을 한 사람은 결과를 늦게 받게 됨.
로드 시간 단축을 위해 "로드온스타트업" 기능을 제공한다!!

스프링 설정 파일을 xml에 Bean태그로 설정 -> 내가 선언 bean 들이 모두 한번에 로드 된다! -> 자원낭비( 스프링의 단점 )
그래서 자원낭비 방지를 위해 lazy-init이라는 속성을 이용해서 bean을 언제 실행할지 지정 가능!!

한두번 사용하거나 지금 당장은 안쓰는 애들을 미리 로딩해버리면 속도가 느려져!

false로 설정하면 프로젝트 시작하자마자 바로 서버에 업로드 된다!
true로 설정하면 요청 or 사용할때만 업로드
default는 false랑 동일해.. 바로 서버로 올린다!!

profile
공주 개발자

0개의 댓글