Tiny Bunny [Spring] Spring 내용 정리 - 솜님의 블로그
솜님의 블로그
카테고리
작성일
2024. 10. 6. 03:25
작성자
겨울솜사탕

pom.xml

- 스프링 컨테이너 설정 파일이다.

 

 

applicationContext.xml

- 컨테이너 설정 파일임을 알 수 있다.

-  GenericXmlApplicationContext은 실무에서 사용하지 않는 실습용이다.

 

 

컨테이너란?

1. 개발자를 대신해서

2. 객체를 생성(관리) 해주는 것

   - 생성 == new

- 서블릿 컨테이너 (톰캣)

   new FC(); / fc.doGet(); / fc.doPost();

 

 

IoC

제어의 역행

"apple" 호출한 new 와 "samsung"을 호출한 new가 다름

<bean class = "test.Iphone" id="apple">
	<property name="watch" ref="aw" />
	<property name="num" value="1234" />
</bean>
	
<bean class = "test.GalaxyPhone" id="samsung">
	<constructor-arg ref="gw" />
</bean>

 

"apple"를 호출한 new

- Setter 주입

: Web에서는 대부분 Setter 주입,

  사용자에게 더 나은 경험을 제공하기 위함

  == bean(객체)이 생성(new)되다가 예외가 발생하는 것을 방지할 수 있음.

- Setter 주입을 할 땐 기본 생성자를 활용한다!!

 

"samsung"을 호출한 new

- 생성자 주입

 

 

DI (의존성 주입)

의존성? == 어떤 메서드를 수행할 때 필요로 한다.

ex1) Controller에게 DAO 의존성이 있다.

ex2) DAO에게 conn, pstmt 의존성이 있다.

==> 어떤 객체 없이는 동작을 못한다.

 

 

@ 어노테이션 (애너테이션) 사용

.xml 파일로 <bean> 해서 객체를 new 하고 있었는데, 

설정파일의 내용이 너무 과다해지면서 개발자들에게 불편함이 생김..

ex) bean을 몇만 개 혹은 그 이상 작성했는데, 어느 날 한 가지 기능이 안 됨!!

     누가 xml 건든 게 아닌지 의심 >> 설정파일 확인해서 Action 검색하는데 해당 이름이 안 나옴

     >> 그런데 어느 날 갑자기 기능이 다시 동작함.

     >> 이름이 다른 상태로 new가 되고 있었다는 뜻!

 

이런 불편함을 해소하기 위해 @어노테이션 사용!!

하지만 어노테이션도 .xml에서 나온 것이다. 근본이 xml임!

 

 

web.xml

톰캣 서블릿 컨테이너가 자동으로 new 해주던 게 딱 하나 있는데,

 >> FrontController이다.

Servlet 파일을 만들면 web.xml에 태그가 자동으로 추가된다.

 

현재 우리가 FC를 new 하지 않았기 때문에 bean이 있어야 하는데

내용이 확인되지 않는다.

이는 누군가가 설정을 해주었다는 의미인데, 

FC 파일을 확인해 보면 @WebServlet 어노테이션이 해당 역할을 대신해주고 있음을 알 수 있다.

 

 

 

 

🍀 내용 정리!
1. 컨테이너란?
     개발자 대신 객체를 생성, 관리해 주는 것
2. 스프링 프레임워크를 한마디로 요약하면?
     IoC와 AOP를 지원하는 경량(POJO)의 프레임워크
3. IoC란?
     제어의 역행
     제어권을 컨테이너에게 준다는 뜻 (컨테이너가 new 한다는 뜻)
4. 컨테이너가 1개 == 톰캣(서블릿 컨테이너)
     서블릿 타입의 객체만 new
     new FrontController();
5. 컨테이너는 .xml(설정파일)이 있어야 동작을 함.
     컨테이너와 xml은 1:1이다.
    실습 때 factory(컨테이너) => applicationContext.xml
    서블릿 컨테이너(톰캣) => web.xml
    스프링 => pom.xml
6. 컨테이너가 new == <bean>
7. .xml 과도한 설정 → @ 어노테이션 설정을 개발
    Setter주입처럼 .xml이 다소 올드하다 보니까,
    @ 설정이 있다면 .xml 보다는 @ 으로 설정하는 것이 좋음!!