Spring

[Spring] 스프링 프레임워크

웹코린이 2023. 8. 4. 10:24
728x90

스프링 프레임워크란 ?

IoC와 AOP를 지원하는 경량의 프레임워크를 말한다.

 

IoC (Inversion of Control) : 제어의 역행 말한다.

 

여기서 제어의 역행이란 ?

개발자가 new(객체화)를 제어하는 것이 아닌, 프레임워크에게 제어권을 넘겨주는 것을 의미한다.
즉, 컨테이너를 활용하여 객체화를 하는 것을 의미한다.
                               new를 담당하는 것 == 컨테이너 == 객체의 생성 및 관리를 담당

 

개발자가 직접 객체화를 하지 않고 스프링 프레임워크에게 제어권을 넘겨주는 이유는

코드에 new가 작성되어 있으면 결합도가 높아지기 때문이다. 결합도가 높아지면 유지보수에 불리해지는 이유 때문에 제어권을 넘겨준다.

따라서 스프링 프레임워크이 객체화를 하게 되면 결합도를 낮춰주고, 응집도를 높여주는 코드가 되는 것이므로 유지보수에 유리해지고, 코드 자체가 가벼워지기 때문에 경량화 될 수 있다.

 

 이에 대한 해결방법이 2가지가 있는데,

  • 첫번째로는 다형성을 활용하여 해결하는 것이다. 하나의 Interface를 만들어 implements를 활용하여 다형성으로 해결하는 방법
  • 두번째로는 SW 개발 디자인 패턴( MVC / Factory / Singleton ...) 등을 활용하는 것이다.
    • 이 방법은 메모리 전체에 같은 타입의 객체를 1개만 생성하기 때문에 코드가 보다 가벼워진다.
    • Factory 패턴을 활용하는 방법도 있는데, Factory 패턴이란 객체를 생성하는 코드를 캡슐화하여 사용자로부터 필요한 객체의 이름을 받아 객체 자체를 반환하는 로직을 말한다.
      • 이 말은 코드를 한글자도 변경하지 않아도 결과(return값)가 바뀐다. 따라서 재컴파일을 안하기 때문에 속도가 빨라진다.

 

 

경량화 하기 위해 경량인 것과 경량이 아닌 것에 대해 알아보면 아래와 같다.

  • 경량인 것(POJO)
    • 일반적으로 흔히 생성할 수 있는 클래스를 의미한다.
  • 경량이 아닌 것(NOT POJO)
    • Servlet 클래스를 의미한다.

스프링 프레임워크에서는 경량화를 위해 NOT POJO를 최소화하고 POJO를 최대화 하는 것이 목적이다.

 

 

설정 파일은 .xml OR @[ 어노테이션 ] resources 파일에서 작성한다.

  • web.xml 파일에서는 톰캣(서블릿 컨테이너) 관련 설정 파일을 관리한다.
  • pom.xml 스프링 관련 설정 파일과 .jar 파일들을 관리한다.

 

설정하는 방법

  <bean> 태그로 객체화를 개발자를 대신하여 해준다.

예시: <bean class="test.GalaxyPhone" id="galaxy"/>
java 형식 : GalaxyPhone galaxy = new GalaxyPhone();
  • 디폴트로 pre-loading 방식을 사용한다. (즉시 로딩 방식을 의미)
    • 또한, 설정을 하면 lazy-init 방식을 할 수도 있다. (지연 로딩 방식을 의미)
  • 디폴트로 scop="singleton" 객체를 1개만 메모리에 생성하고 해당 객체를 재사용함
    • 이를 싱글톤 ( Singleton ) 패턴이라고 한다.

 

 

applicationContext.xml

개발자가 직접 생성하는 .xml 파일을 의미한다.
스프링 관련 설정 파일과 스프링 컨테이너 관련 설정 파일을 관리할 수 있다.

 

 

컨테이너

객체를 생성하는 주체를 의미한다.
개발자가 .xml 파일에서 설정만 해주면 객체화는 스스로 관리한다.
객체 생성 및 관리를 스스로 처리한다. (즉, Set 도 스스로 진행함)
Ex) @Component("apple")

 

 

 

톰캣 & 서블릿 컨테이너

톰캣은 서버와 동시에 "서블릿 컨테이너" 의 역할도 해준다.
@WebServlet()이 있다면 객체화를 해준다.
new 뿐만 아니라 생성 시점, 호출 시점 등도 관리해준다.

 

<bean> POJO 를 관리하는 것 : 스프링 컨테이너

@Servlet (not POJO) 를 관리하는 것 : 서블릿 컨테이너

728x90