일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
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 |
- 공격그래프
- Mac
- decap
- NMAP
- ip forwarding
- dnsenum
- 액티브스캐닝
- 대학원
- 무선채널
- recon-ng
- 넷크래프트
- Social Network in Game
- 계정 탈취
- Shift + ESC
- Container
- 패시브스캐닝
- SecurityMetric
- Mimikatz
- AttackGraph
- 프로젝트
- davtest
- OIDC
- Kublet
- airdecap-ng
- 강의
- 화이트해커
- cgroups
- 보안
- Chrome 작업관리자
- OpenID Connect
- Today
- Total
네른
5. Spring Framework 특징 본문
Spring Framework
스프링 프레임워크는 자바 플랫폼을 위한 오픈소스 앱 프레임워크로, 동적 웹 사이트를 개발하기 위한 기능들을 제공한다.
스프링 프레임워크가 가진 특징은 다음과 같다.
1. 경량 컨테이너로 구성되어있으며, 자바 객체를 관리할 수 있음
- 객체의 생성, 소멸과 같은 라이프사이클을 관리할 수 있음
2. Inversion of Control(제어의 역전)
- 본래 프로그램은 개겣를 만들고 메소드를 호출하는 과정을 사용자가 구성한 대로 진행됨
- 그러나 스프링은 프로그램의 제어권이 프레임워크 자체에 있어, 필요에 따라 스프링이 사용자의 코드를 호출하는 구성이다.
- 즉, 특별한 제어 객체에게 결정권을 위임하고, 해당 객체가 결정을 알아서 진행한다.
3. Dependency Injection(의존성 주입)
- 본래 서비스간 의존성은 사용자가 설정하였으나, 스프링은 서비스간 의존성이 필요한 경우에 프레임워크가 이를 연결해준다.
- 이를 수행하기 위해 필요한 것 중 하나가 의존성 검색(Dependency Lookup)
4. AOP(Aspect-Oriented Programming) : 관점 지향 프로그래밍
- 여러 모듈에서 공통적으로 사용하는 기능인 경우, 해당 기능을 별도의 객체로 분리하여 관리하는 방식
- 이를 통해 모듈과 코드 중복을 방지할 수 있으며 유지보수가 용이하다.
5. 트랜잭션 관리
- 설정파일을 이용하거나, 별도의 프로그래밍을 통한 트랜잭션 관리를 지원한다.
6. MVC model 구조
- 모델-뷰-컨트롤러의 구조를 띄며, 서블릿(WAS에서 사용하는 그 서블릿)이 요청들을 적절하게 서비스에 분산시킨다. 여기서의 서블릿은 스프링MVC 상위에 있으며, 모델 뷰 컨트롤러를 통합적으로 관리한다.
- 생성된 결과는 다양한 형식의 뷰를 통해 표기되며, 모델은 데이터를 처리하는 부분을 담당한다.
- 해당 구조에서, 모델과 뷰는 자신을 제외한 요소에 대한 정보를 알지 못한다.
- 그러나 컨트롤러 부분은 모든 정보를 안다.(그래야 데이터들을 넘겨주지)
- Dispatcher Servlet 이라고 하는 큰 서블릿이 요청을 컨트롤러에게 던지면, 모델을 통해 이를 처리하고 뷰가 리넡된다. 그러면 이 서블릿은 이를 띄우고 사용자에게 제공한다.
* 서블릿은 WAS의 서블릿으로, 스프링 프레임워크를 포함한 다양한 것들을 담당한다.
(구조가 생각보다 어렵다. 더 찾아봐야될 것 같다.)
7. batch 처리 가능
- Quartz 기반의 병렬처리가 가능하여 확장성, 코딩에의 장점이 있다.
8. POJO(Plain Old Java Object)
- 객체지향 언어를 객체지향답게!
- 특정 규약에 종속되지 않고, 특정 환경에 종속되지 않는 객체를 의미한다.
- 그렇다고 상속을 안받거나 하는 것은 아니라, 특정 라이브러리, 프레임워크로부터 상속을 강제받지 않는 객체를 의미한다.
- 다시말해, 일종의 Bean이지만, 상속이 강제되지 않는 Bean 인 것
(Bean은 뭐 예를들어 변수는 프라이빗으로 선언되고 이에 접근하는 것은 setter, getter 함수 등을 통해서만 가능해야 하는 일종의 객체 구현 방식을 의미)
- 스프링에서는 이러한 POJO를 Bean이라고 칭한다.
- 이러한 Bean에 대한 정보는 별도의 xml파일에 저장되며, 컨테이너가 해당 파일을 읽고 Bean을알아서관리한다.사용자는 이러한 Bean을 getBean()과 같은 함수를 통해 사용할 수 있다.
- Bean은 Singleton or Prototype의 형태로 생성할 수 있다.
(Singleton이란 해당 빈이 단 하나의 객체를 생성하기에 매 참조마다 동일한 객체를 참조하는 것. Prototype은 해당 빈이 요청될 때 마다 새로운 객체를 생성하고 호출하는 것.)
전체 동작 과정은
요청이 큰 서블릿(DispatchServlet)에 들어오고, 해당 서블릿이 컨트롤러를 호출해 필요한 일을 시킨다.
컨트롤러는 서비스를 호출하고 서비스는 모델(빈으로 이루어진 데이터)을 활용해 로직을 처리한다.
(필요한 핵심 로직은 서비스가 처리하는거라고 보면 될 듯. 컨트롤러는 말그대로 컨트롤 하는거고, 모델은 getter setter를 통해 데이터에 접근할 수 있는 빈 으로 보면 되는 것 같은데)
이후 컨트롤러는 서비스에 의해 나타난 결과를 서블릿에게 전달하고 서블릿이 이를 뷰로 보여주게 된다.
'궁금 > 아무거나' 카테고리의 다른 글
4. Container(컨테이너), Kubernetes(쿠버네티스) (0) | 2020.06.17 |
---|---|
3. WAS (0) | 2020.06.17 |
[아무거나] 2. Windows Active Directory (Directory Service) (0) | 2017.12.04 |
[아무거나] 1. SMTP, POP Protocol (0) | 2017.09.20 |