일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
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 |
- 증감연산자
- switch-case문
- java조건문
- 데이터타입
- java
- else if문
- for문 369게임
- 알고리즘
- 로또 프로그램
- #완전수구하기
- 삼항 연산자
- JAVA기초
- 이진수
- 복합대입연산자
- #이차원배열
- 피보나치수열
- 논리연산자
- 2차원배열
- 비교연산자
- #Java
- plusgame
- switch문
- 변수의특징
- 소인수분해
- #알고리즘
- 연산자
- 팩토리얼
- if문
- #java_festival
- 별찍기
- Today
- Total
숭어 개발 블로그
[Spring] Spring 이란? & 동작 흐름 본문
Spring Framework란?
자바 플랫폼을 위한 오픈소스 애플리케이션 프레임워크로서 엔터프라이즈급 애플리케이션을 개발하기 위한 모든 기능을 종합적으로 제공하는 경량화된 솔루션입니다.
엔터프라이즈급 개발이란 뜻대로만 풀이하면 기업을 대상으로 하는 개발이라는 말입니다. 즉, 대규모 데이터 처리와 트랜잭션이 동시에 여러 사용자로 부터 행해지는 매우 큰 규모의 환경을 엔터프라이즈 환경이라 일컫습니다.
Spirng Framework는 경량 컨테이너로 자바 객체를 담고 직접 관리합니다. 객체의 생성 및 소멸 그리고 라이프 사이클을관리하며 언제든 Spring 컨테이너로 부터 필요한 객체를 가져와 사용할 수 있습니다.
이는 Spirng이 IOC 기반의 Framework임을 의미합니다.
Spring Framework는 IOC기반이다. IOC란?
IOC는 Inversion of Control의 약자로 말 그대로 제어의 역전입니다. 그럼 제어의 역전이란 무엇일까요?
일반적으로 지금까지 프로그램은
객체 결정 및 생성 -> 의존성 객체 생성 -> 객채 내의 메소드 호출 하는 작업을 반복했습니다.
이는 각 객체들이 프로그램의 흐름을 결정하고 각 객체를 구성하는 작업에 직접적으로 참여한 것입니다.
즉, 모든 작업을 사용자가 제어하는 구조인 것입니다.
하지만 IOC에서는 이 흐름의 구조를 바꿉니다. IOC에서의 객체는 자기가 사용할 객체를 선택하거나 생성하지 않는다. 또한 자신이 어디서 만들어지고 어떻게 사용되는지 또한 모릅니다. 자신의 모든 권한을 다른 대상에 위임함으로 써 제어권한을 위임받은 특별한 객체에 의해 결정되고 만들어집니다.
즉, 제어의 흐름을 사용자가 컨트롤 하지 않고 위임한 특별한 객체에 모든 것을 맡기는 것입니다.
IOC란 기존 사용자가 모든 작업을 제어하던 것을 특별한 객체에 모든 것을 위임하여 객체의 생성부터 생명주기 등 모든 객체에 대한 제어권이 넘어 간 것을 IOC, 제어의 역전 이라고 합니다.
IOC의 구성요소 DI와 DL
IOC는 DI와 DL의 의해 구현됩니다.
DL(Dependency Lookup) - 의존성 검색
컨테이너에서는 객체들을 관리하기 위해 별도의 저장소에 빈을 저장하는데 저장소에 저장되어 있는 개발자들이 컨테이너에서 제공하는 API 를 이용하여 사용하고자 하는 빈 을 검색하는 방법입니다.
DI(Dependency Injection) - 의존성 주입
의존성 주입이란 객체가 서로 의존하는 관계가 되게 의존성을 주입하는 것입니다. 객체지향 프로그램에서 의존성 이란 하나의 객체가 어떠한 다른 객체를 사용하고 있음을 의미합니다. 그렇다면 IOC에서의 DI는 무엇일까요?
바로 각 클래스 사이에 필요로 하는 의존관계를 빈 설정 정보를 바탕으로 컨테이너가 자동으로 연결해 주는 것입니다.
Spring Framework의 특징 POJO
Spring Framework의 특징 AOP
※ Spring Framework의 흐름 ※
1. URL을 통해서 사용자의 Request(요청)이 가장 먼저 일어난다. ex> 로그인, 회원가입, 글쓰기 등등...
2. Dispatcher Servlet에서 모든 요청을 받아들인다.( JSP&Servlet의 FrontController 역할 : .do 를 통해 받아들인다. )
- Dispatcher Servlet은 web.xml안의 <servlet> 태그안에 있으며 스프링 특정영역 안에서 객체화되어 올라간다.
3. Dispatcher Servlet은 요청과 응답만 해준다.
- 실질적인 일을 하는곳은 Controller ( POJO : Plain Old Java Object <자바의 오래된 객체> )
- Controller 는 class로 되어있다.
4. Dispatcher Servlet에서 일을 시키는 Controller(POJO)를 찾아가야하는데
Handler Mapping이 urlMapping 값을 통해 찾아준다.
- urlMapping값을 통해 찾는 3가지 조건
첫번째 조건
- 여러 Package에서 Controller를 찾으려면 scan을 해야한다.
servlet-context.xml안의
< context:component-scan base-package = "컨트롤러가 있는 패키지이름 " / >
==> "컨트롤러가 있는 패키지 " 에 모든 컨트롤러가 있으니 여기서 @(annotation)이 있는 객체들을 모두 scan 해라

두번째
@Controller :
- 여기가POJO (일을 하는곳임을 명시) 이다.

세번째
@RequestMapping :
- 이 기능을 실행 시켜라
5. Handler Mapping 은 단순히 찾는 역할뿐 ,
- Controller(POJO)를 실행 시키려면 Handler Adapter가필요하다.
6. Handler Adapter통해 요청한 Controller 를 실행(ex>로그인, 회원가입, 글쓰기 등) 시키면,
- 사용자의 요청(ex>게시글조회, 작성 등) 을 수행하기위해 DataBase에 접근이 필요하다.
7. ======================== DB 접근 및 작업========================
< pom.xml에(필요한 API 등록) >
- DB에 접근을 쉽게 도와주는 프레임 워크 MyBatis !!
(기존 자바의 서블릿에서는 dao통해 커넥션, SQL문 작성 등등 을 실행 했었음)
# MyBatis 안의 DBCP의 종류 중 대표인 HikariCP가 커넥션을 만든다.
# HikariCP 안에는 JDBC가 숨어있다.
DBCP : Data Base Connection Pool
- ==> 미리 Connection 생성 후 대여와 반납 ( 사용자가 몰렸을때를 방지 )
- DB와 미리 connection(연결)을 해놓은 객체들을 pool에 저장해두었다가,
- 클라이언트 요청이 오면 connection을 빌려주고, 처리가 끝나면 다시 connection을 반납받아 pool에 저장하는 방식
root-context.xml 내 DB연결과정
1.config (커넥션)객체 생성
- 드라이버 잡아주기
- url주소
- ID 설정
- PW 설정
2. dataSource객체를 만들때 config(커넥션)를 생성
3.DAO역할인 SessionFactory : sql 처리 기능
4. SQL문 실행
POJO(일을하는곳)와 .XML(SQL문 작성하는곳)을 연결(Mapping) 하는 >> Mapper(Interface)
< POJO < === > Mapper < === > .xml >
# POJO ==> Mapper.java(인터페이스) ==> Mapper.xml 흐름 #
myBatis와 Mapper.xml의 연결과정
- root.xml의 <mybatis : scan> : 이패키지에서 .xml을 찾아라 ==> 그러면 myBatis의 HikariCP가 연결
====================== 여기까지 DB처리 끝 =======================
8. 인터페이스 내 메소드를 사용하기 위해선 객체를 생성해야 하지만 인터페이스는 객체를 생성 할 수 없다.
그래서 필드만 만들어 놓고 스프링 어느 메모리 영역에 인터페이스 객체를 만들어 주입 받아서 사용한다.
이걸 주입 받기 위해서 @Autowired(어노테이션) 또는 @Inject를 사용한다.
이걸 의존성 주입 (DI : Dependencyt Inject) 라고 한다.
=============기능 (일) 처리끝=============
9. 일처리가 끝난 Controller는 이동해야할 페이지 이름 ==> view name만 넘겨준다
10. 이동해야할 정보(ex>게시글정보) 가 있다면 Model에 저장하여 가져온다.
이때 해당 메소드의 매개변수에 정의해두면 Model을 쓸 수있다.
11. 최종적으로 jsp로 이동하기 위해서는 / WEB-INF / views / 페이지명.jsp 과 같은 완전한 경로가 필요한데
이 작업을 servlet-context.xml의 View Resolver가 자동으로 해준다.
View Resolver는
- prefix (접두사)로 / WEB-INF / views /
- suffix(접미사)로 . jsp 를 완성 시켜준다.
12. Response(응답)
- View Resolver에서 완성된 jsp주소
- Model에 저장된 정보
이렇게 만들어진 최종 View ( jsp페이지) 는 Dispatcher Servlet을 통해 사용자에게 Respons(응답) 해주게 된다.
마지막으로
파란색 영역 : 스프링에서 제공된 영역 ( 개발자들이 못건들인다>> 프레임워크 )
보라색 영역 : 개발자 컨트롤 부분 ( 일정영역 안에서 개발해라 >> 중구난방 개발을 막는다. )
연두색 영역 : 수정 할 수도있고 안 할 수도 있고~
일부 출처 :
https://khj93.tistory.com/entry/Spring-Spring-Framework%EB%9E%80-%EA%B8%B0%EB%B3%B8-%EA%B0%9C%EB%85%90-%ED%95%B5%EC%8B%AC-%EC%A0%95%EB%A6%AC
'Spring' 카테고리의 다른 글
[Spring] jsp 에서 EL식으로 다양한 영역 데이터 출력 (0) | 2023.08.01 |
---|---|
[Spring] Maven / Gradle 차이 특징 (0) | 2023.08.01 |
[Spring] 스프링 환경설정 (3) | 2022.10.18 |
[Spring] 게시판 만들기 (2) _< 게시글 불러오기 > (1) | 2022.10.14 |
[Spring] 게시판 만들기 (1) _< 필요한 파일 생성 > (1) | 2022.10.06 |