Notice
Recent Posts
Recent Comments
Link
«   2025/08   »
1 2
3 4 5 6 7 8 9
10 11 12 13 14 15 16
17 18 19 20 21 22 23
24 25 26 27 28 29 30
31
Tags
more
Archives
Today
Total
관리 메뉴

노승현

Spring 이란? 본문

Spring

Spring 이란?

nsh95 2024. 2. 27. 08:28

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