노승현
Spring 이란? 본문
Spring 을 기반으로 한 웹 프레임 워크
회사 내 자체 개발한 프레임 워크
=> Spring 기반
Spring 프레임 워크가 뭔가요?
IoC 와 AOP 를 지원하는 경량의 프레임 워크
낮은 결합도와 높은 응집도를 가지는 코드
: 제어의 역행 즉, new 를 개발자가 하지않고 컨테이너가 수행하는 기능과 관점 지향 프로그래밍
즉, 공통로직을 별도의 클래스로 모듈화하여 올바른 시기에 호출하는 기능을 수행하는,
경량의 POJO 를 다루는 컨테이너를 제공하는 프레임 워크
IoC 가 뭔가요? : 코드에서 new 를 제거 하는 것
Inversion of Control
제어의 역행
제어를 중간 프로젝트까지 개발자가 담당함
HM <- Action / 요청 <-> Action
Spring 에서는 제어를 프레임 워크에게 맡길 예정
컨테이너를 통해 제어를 수행할 것
서블릿 컨테이너 == 웹 서버, 톰캣
서블릿 클래스만 생성 가능 했음
FrontController
비동기 처리 로직 클래스
컨테이너란?
객체를 생성하거나
객체를 관리하는 주체
관리 == 호출 시점을 정하는 것
or 객체 소멸시점을 정하는 것
Spring 프레임 워크에서 사용하는 컨테이너 => Spring 컨테이너
POJO 일반 (자바객체 생성 가능)
DTO, DAO, Action
제어 : 객체를 생성(및 관리) 함 == new
코드에 new 가 없는 것이 좋은 것
컨테이너가 new 를 해주는 것이 좋다.
C 파트는 new 라는 연산자를 사용하면 안된다.
HM 안에 new 코드들 => 스프링 컨테이너로 대신할 예정 => POJO 인데 가능? O
AOP가 뭔가요?
Aspect-Oriented Programming
관점 지향 프로그래밍
<-> OOP(객체 지향 프로그래밍)
xx 지향 프로그래밍
1) 절차 지향 : 순서대로 진행하는 방식
일의 처리 순서가 가장 중요
알고리즘
성능 - 속도
2) 객체 지향 : 모듈(클래스) 단위로 코드를 구성하는 방식
설계, 객체가 중요
학생,카드, 캐릭터, xxx 기능 Action, …
성능 - 메모리(Heap) : 싱글톤, 팩토리, …
%%%%%%%%%%%%% 개발팁
ctrl C,V 를 한다면?
개선할 여지가 있다는 뜻
3) 관점 지향 기존의 기능개발은 “핵심로직”을 중심으로 개발되었습니다.
비즈니스 메서드, CRUD, 핵심 관심
다양한 CRUD 에 공통적으로 적용되는 로직을 따로 모듈화 해서 저장호출 가능해짐
Spring 컨테이너가 AOP 를 지원해주기 때문에!!!
공통로직(횡단관심)을 별도의 클래스 메서드로 작성하게 됩니다.
JDBCUtill : 공통로직을 별도로 관리해주던 클래스
경량이란 뭔가요? 다루는 객체가 가볍다 == POJO
사용 되는 메모리 자체가 적다 == 싱글톤 패턴을 활용
프레임 워크란 뭔가요?
프레임 워크 vs 라이브러리 vs API 차이가 뭔가요?
프레임 워크를 활용했을 때의 장점이 뭔가요?
SpringMVC 이미 적용된 프로젝트를 하나 생성해 줌 == 구현이 빨라짐
몰라도 쓸 수 있다 == 개발자의 실력이 상향 평준화됨
일관성이 유지되기 쉬움
유지보수 용이
결합도(Coupling) 에 대하여…
결합도를 나주기 위한 다양한 개발자들의 노력이 있어왔습니다.
1. 인터페이스를 활용하는 방법
-> 객체가 변경되어도
메서드를 추가 변경하지 않아도 괜찮다
: DTO
2. 팩토리 패턴을 활용하는 방법
-> 코드에 new 가 있었는데,
new 가 없어짐
: HM
인터페이스
Action
DAO 류 인터페이스 제작
내부 로직이 유사한 경우
AOP 를 적용해 볼 수 있는 타이밍
(1) 컨테이너는 설정파일을 필요로 합니다.
.xml
서블릿 컨테이너(톰캣, 웹서버) => web.xml
(2) 스프링 컨테이너 역시 설정파일(.xml) 을 필요로합니다.
applicationContext.xml
(3) applicationContext.xml 설정파일은 루트 엘리먼트
<beans>
</beans>
(4) 각종 설정들을 루트 엘리먼트 안에 <>(태그)로 작성
1) <bean></bean>
2) …
(5) <bean> 이란?
new 를 대신 해주는 태그
결합도가 낮아집니다.
<bean class=“클래스명” id = “객체명” />
Phone phone = new Phone();
<bean class=“test.Phone” id=“phone” />
Handler = new HandlerMapper();
<bean class=“controller.common.HandlerMapper” id=”handler” />
무명의 객체를 만들때에는 id를 쓰지 않는다
Mappings.put(“/main.do”, new MainAction()); >> new MainAction()
<bean class=“controller”.action.MainAction” />
규칙 1 : id 값은 중복 허용 x
규칙 2 : <bean> 을 통해 new 된 객체들은 Heap 메모리 영역에 저장됨
+) 싱글톤을 알아서 해주는 것은 아니다.
(6) 싱글톤을 알아서 해주는 것은 아님
교재에 “<bean>이 싱글톤을 유지해준다.”
phone 이라는 이름의 객체가 다시 요구 되었을 때,
기존의 phone을
미리 메모리에 load(적재)되어있던 phone 객체를 다시 준다.
<bean class=“test.Phone” id=“phone” />
<bean class=“test.Phone” id=“phone2” />
에러는 아니지만 권장은 하지 않는다.
한 번 phone, phone2 객체를 생성 했다면
다음에 다른 곳에서 phone을 요청했을 때에
이미 만들어둔 객체를 준다.
(7) <bean> 에 등록된 객체들을 스프링 컨테이너가 구동될 때 한 번에 Heap 메모리에 load(적재)
한 번에 객체 생성함
스프링 컨테이너가 구동될 때 딱 한 번만 new == 싱글톤
이후 호출되면 (팩토리 패턴을 활용해서) 요청하는 객체를 전달 : Look Up
(8) <bean> 태그의 다양한 속성
<bean class=“” id=“” initMethod=“” />
initMethod : 생성자 역할을 해줄 메서드를 new 하는 타이밍에 호출할 수 있음
== 멤버변수 초기화 역할을 해줄 메서드
<bean class=“” id=“” lazy-init=“true” />
지연 로딩 방식
모든 <bean> 은 컨테이너 구동시점에 new 됨
해당 객체를 사용하는 시점에 new 하고 싶을 때 작성
== 클라이언트(Client, 브라우저, 사용자)가 호출하는 시점
<bean class=“” id=“” scope=“singleton” /> <-> <bean class=“” id=“” scope=“prototype” />
해당 객체를 사용할 때마다 새로 New 하고 싶을 때 작성
.xml 의 구조
<>(태그)로 구성됨
루트 엘리먼트(최상위 태그)
<web-app>
</web-app>
각종 설정들이 <> 로 작성되어 있음
전략적으로 사용해야 하거나 or 멤버변수가 없는 객체
DAO
DTO : 얘는 딴 설정 씀
'Spring' 카테고리의 다른 글
DBCP (0) | 2024.03.05 |
---|---|
Spring MVC ver.2 로 변환하기 (1) | 2024.03.05 |
ASPECT 란? (1) | 2024.03.04 |
Spring 파일 생성 및 흐름 이해 (2) | 2024.02.28 |
DI 의존성 주입이란? (0) | 2024.02.28 |