[ Spring 프레임워크 개요 ]
(만든사람 왈 : 개발자에게 봄이 왔어,, 해서 Spring 이라고,,)
1.
SpringBoot
>>
스프링을 편리하게 사용할 수 있도록 기능을 지원 해주는 기술.
1) 단독으로 실행할 수 있는 스프링 어플리케이션을 쉽게 생성
2) Tomcat 같은 웹 서버를 내장해서 별도의 웹 서버를 설치 하지 않아도 된다
3) 손쉬운 빌드 구성을 위한 starter 종속성을 제공 한다
4) 스프링과 3rd party (외부) 라이브러리를 자동 구성 한다
5) 메트릭, 상태 확인, 외부 구성 같은 프로덕션 준비 기능을 제공 한다
6) 관례에 의한 간결한 설정을 한다
2.
프레임워크란 ?
== 골격
예시) 리모콘, 인형
개발자들끼리의 기준이며, 유지 보수 용이의 장점을 지니게 된다.
3.
프레임워크를 사용함으로써 생기는 장점
1) 유지 보수 용이
2) 개발 시간 단축 == 개발 비용 절감
3) 개발자 역량의 상향평준화 == 획일화
4) 재사용성 증가
4.
스프링 프레임워크란 ?
IoC와 AOP를 지원하는 경량의 프레임워크 !
경량 == POJO 중심
5.
POJO
↕
Not POJO (Servlet, Listener, Filter, ..)
예시)
JSP 팀 프로젝트 때, (중간프로젝트) 경량으로 Servlet을 사용 했다.
>> FrontController 한개만 생성해서 사용 했다.
>> API, 비동기처리 기능 등을 구현할 때에도, Servlet을 추가로 사용 했다.
6.
IoC란 ?
Inversion of Control 의 줄인말로,
"제어의 역전 (역행)" 이라는 의미로,
말 그대로 메서드나 객체의 호출작업을 개발자가 결정하는 것이 아니라,
외부에서 결정되는 것을 의미 한다.
즉,
개발자가 new (객체화, 인스턴스화)를 제어 하지 않는다 !
프레임워크에게 제어권을 넘겨주는것을 의미 한다.
7.
new를 왜 직접 하지 않을까 ?
★ 코드에 new가 작성되어 있으면, "결합도" 가 높아지므로, 유지 보수 불리 ★
★ 코드에 new를 작성한다 ? 메모리를 사용 한다는 의미 ★
해결방법 01 : 다형성 개념을 활용 하기.
해결방법 02 : SW 개발 디자인 패턴을 사용 하기.
(MVC, Factory, Singleton, ..)
8.
Factory 패턴 이란 ?
객체를 생성하는 코드를 캡슐화 하여,
== new 키워드와 관련된 코드를 은닉 (Hiding)
사용자로부터 필요한 객체의 이름을 받아, 객체 자체를 반환하는 로직을 의미 한다.
코드를 단 한글자도 변경 하지 않아도, 결과가 (화면) 달라진다 !
9.
어쩌구.xml
>> 설정 파일 이다.
객체를 생성해주는 설정 파일 이다.
src/main/resources 내부에 만든다.



예시)

.xml 파일에는 원칙적으로 주석 처리를 하지 않는다.
(연습을 위해 작성..)
<bean class = "test.GalaxyPhone" id = "galaxy"/>
위의 .xml 파일 내부의 코드는 아래의 코드와 동일한 코드 이다.
GalaxyPhone galaxy = new GalaxyPhone();
------------------------------------------------------------------------------------
<bean class = "test.IPhone" id = "apple"/>
위의 .xml 파일 내부의 코드는 아래의 코드와 동일한 코드 이다.
IPhone apple = new IPhone();
------------------------------------------------------------------------------------
즉, <bean> 태그를 사용해서, new를 표현 할 수 있다.
(개발자 대신에 new를 해준다)
10.
디폴트로 pre-loading 방식을 사용 한다.
(즉시 로딩 방식)
설정이 필요하다면,
lazy-init 방식을 할 수도 있다.
(지연 로딩 방식)
lazy-init 방식이란 ?
1) 객체를 디폴트로 바로 생성 하지 않음.
2) LookUp 했을 때 객체화 한다.
( 원하는 객체를 줘 ~ 라고 요청 하는 자체를 "LookUp (룩업) 한다" 라고 말한다. )
( 즉, 객체를 어떠한 키워드로 찾는 행위 == LookUp )
즉, 필요 할 때만, 객체화 한다.
11.
디폴트로 객체를 1개만 메모리에 생성하고, 해당 객체를 재사용 한다.
(메모리 전체에 같은 타입의 객체를 1개만 생성 == 재사용)
명시 하지 않아도, 디폴트가 scope = "singleton" 이다.
이러한 방식을 "싱글톤 패턴" 이라고 한다. == Singleton
만약에,
prototype 으로 바꾸고 싶으면,
scope = "prototype" 으로 명시 하면 된다.
(근데, 이거 웹 개발 에서 사용 할 일 없다)
12.
컨테이너 (Container)
== 객체를 생성하는 주체.
== 개발자가 (.xml) 설정만 해주면, new를 스스로 관리 한다.
== "객체 생성 및 관리를 스스로 처리" 한다.
(객체의 생성 시점과 소멸 시점을 스스로 처리 한다)
(필터 클래스랑 리스너 클래스를 생각 하면 유사 하다)
13.
★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★
1) 의존성 (Dependency), 의존 관계
예시)
갤럭시폰은 갤럭시워치 객체 없이는 메서드 수행이 불가능 !
즉, 의존 관계가 되었다 !
2) 의존주입 (DI, Dependency Injection)
== 의존성주입
갤럭시폰은 갤럭시워치를 주입 받아야 한다.
즉, new 키워드를 통해 초기화를 해야 한다.
(생성자 호출을 해야 한다 ~)
>> 생성자를 주입 시키던가 ! (자바 때 이렇게 했다)
>> setter을 주입 시키던가 ! (JSP 때 이렇게 했다)
Spring은 무슨 방법으로 ?
>> 그때 그때 유리한 방법으로 둘다 사용 한다 ~
>> Contructor Injection
>> Setter Injection
★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★
14.
그동안 FrontController 에서 상황은 아래와 같다.
1. doAction() 메서드는 static 메서드가 아니다.
즉, 인스턴스 메서드 라는 것이다. (클래스 메서드 XXX)
2. 그렇다는것은 객체화를 해야 사용이 가능 하는 말이다.
3. 어? 그러면, new FrontController(); 를 해줬어야 하는데,
그동안 한번도 안하고 doAction() 메서드를 사용 했네 ?
>>
@WebServlet() (어노테이션)
유사 new 이다.
web.xml 이랑 약속이 되어 있다.
톰캣 == 서블릿 컨테이너
톰캣 내부에 서블릿 컨테이너가 주체 이다.
== 서블릿을 new 해주는 주체 이다.
1. 톰캣은 서버에 기능을 하고, 동시에,
"서블릿 컨테이너" 의 역할도 해주고 있었다 !
2. @WebServlet() 이 있다면 new 를 해준다 ~
3. new 뿐만 아니라, 생성 시점, 호출 시점, 소멸 시점, 등도 관리가 가능 하다.
Q.
doAction()이 되고 있었네 ?
객체가 있었다는거네 ?
누가 객체화 (new) 해줬어 ?
=> 서블릿 컨테이너 (톰캣) (== 주체)
<bean> 태그로 POJO 클래스 에서 객체화 해주는 아이
>> 스프링 컨테이너
@Servlet 어노테이션으로 FrontController 서블릿 에서 객체화 해주는 아이
>> 서블릿 컨테이너 (톰캣)
'Spring 프레임워크 > 이론' 카테고리의 다른 글
Spring MVC 패턴의 구조 파악 (Model 파트) (0) | 2023.08.02 |
---|---|
Spring MVC 패턴의 구조 파악 (Controller 파트) (0) | 2023.08.02 |
IoC 로 객체를 호출 하기 (어노테이션 & .xml) (0) | 2023.08.01 |
Spring 프레임워크 기본 개념 (개요) 2 (0) | 2023.08.01 |
Spring 프레임워크 설치 및 기본 세팅 (0) | 2023.07.31 |