New World

[JAVA #7] Framework 본문

Self-Study/Study

[JAVA #7] Framework

hyeovi 2022. 10. 6. 21:14
728x90
반응형

Framework

  • 특정 형태의 소프트웨어 문제를 해결하기 위해 상호 협력하는 클래스 프레임과 인터페이스 프레임의 집합
  • 특정한 틀을 만들어놓고 거기에 살을 붙여 놓음으로써 프로그램을 만들어 작업시간을 줄여주는 것
  • 프레임워크는 특정 개념들의 추상화를 제공하는 여러 클래스나 컴포넌트로 구성
  • 프레임워크는 이렇게 추상적인 개념들이 문제를 해결하기 위해 같이 작업하는 방법을 정의
  • 프레임워크 컴포넌트 들은 재사용이 가능
  • 프레임워크는 좀 더 높은 수준에서 패턴을 조작
 

컴포넌트와 모듈의 차이

컴포넌트
- 작은 영역에서 서로 관련되어 있고 다용도로 사용이 가능
- UI를 제어하는 타이머같은 Back단에서 스레드를 보조

모듈
- 외부 인터페이스가 없는 복합적인 수요기능에서 실행될 수 있는 단위
- 데이터베이스나 이메일 같은 통합적인 기능을 제공하면서 라이브러리처럼 사용될 수 있는 것들
 
* 프레임워크가 중요한 이유
객체지향 개발을 하게 되면서 개발자의 취향에 따라 다양한 프로그램이 나왔는데 프로그램 개발에 투입되는 개발자도 점점 늘어남에 따라 전체 시스템의 통합성, 일관성이 부족하게 되었기 때문이다. 그래서 개발자의 자유를 제한하기 위해 프레임워크를 도입
 
프레임워크가 가져야할 특징
a. 개발자들이 따라야할 가이드라인을 가진다.
b. 개발할 수 있는 범위가 정해져 있다.
c. 개발자를 위한 다양한 도구들이 지원된다.
 
프레임워크의 장/단점
장점 - 개발 시간을 줄일 수 있고 오류로부터 자유로울 수 있다.
단점 - 프레임워크에 너무 의존하면 개발 능력이 떨어져서 프레임워크 없이 개발하는 것이 불가능

스프링 프레임워크(Spring Framework)

스프링 프레임워크(Spring Framework)란?

자바 앤터프라이즈 개발을 편리하게 해주는 경량급 오픈소스 애플리케이션 프레임워크로 애플리케이션을 개발하는데 필요한 기능들을 포괄적으로 제공하기 때문에 개발자들은 개발에 집중할 수 있습니다.

 

스프링 특징

a. 경량 컨테이너로서 자바 객체를 직접 관리.
   각각의 객체 생성, 소멸과 같은 라이프 사이클을 관리하며 스프링으로부터 필요한 객체를 얻어올 수 있다.
b. 스프링은 POJO(Plain Old Java Object) 방식의 프레임워크.
   일반적인 J2EE 프레임워크에 비해 구현을 위해 특정한 인터페이스를 구현하거나 상속을 받을 필요가 없어 기존에 존재하는 라이브러리 등을 지원하기에 용이하고 객체가 가볍다.
c. 스프링은 제어의 역행(IoC : Inversion of Control)을 지원.
   컨트롤의 제어권이 사용자가 아니라 프레임워크에 있어서 필요에 따라 스프링에서 사용자의 코드를 호출한다.
d. 스프링은 의존성 주입(DI : Dependency Injection)을 지원
   각각의 계층이나 서비스들 간에 의존성이 존재할 경우 프레임워크가 서로 연결시켜준다.
e. 스프링은 관점 지향 프로그래밍(AOP : Aspect-Oriented Programming)을 지원
   트랜잭션이나 로깅, 보안과 같이 여러 모듈에서 공통적으로 사용하는 기능의 경우 해당 기능을 분리하여 관리 가능
f. 스프링은 영속성과 관련된 다양한 서비스를 지원
   iBatis나 Hibernate 등 이미 완성도가 높은 데이터베이스 처리 라이브러리와 연결할 수 있는 인터페이스를 제공한다.
g. 스프링은 확장성이 높음.
   스프링 프레임워크에 통합하기 위해 간단하게 기존 라이브러리를 감싸는 정도로 스프링에서 사용이 가능하기 때문에 수많은 라이브러리가 이미 지원되고 있고 사용되는 라이브러리를 별도로 분리하기도 용이

Spring MVC의 구조와 처리과정

  1. DispatcherServlet : 어플리케이션으로 들어오는 모든 Request를 받는 관문입니다. Request를 실제로 처리할 Controller에게 전달하고 그 결과값을 받아서 View에게 전달하여 적절한 응답등 생성할 수 있도록 흐름을 제어한다.
  2. HandlerMapping : Request URL 각각을 어떤 Controller가 실제로 처리할 것인지 찾아주는 역할을 합니다.
  3. Controller : Request를 직접 처리한 후 그 결과를 다시 DispatcherServlet 에게 돌려줍니다.
  4. ModelAndView : Controller가 처리한 결과와 그 결과를 보여줄 View에 관한 정보를 담고 있는 객체입니다.
  5. ViewResolver : View 관련 정보를 갖고 실제 View를 찾아주는 역할을 합니다.
  6. View : Controller가 처리한 결과값을 보여줄 View를 생성합니다.

Spring IoC의 역할

객체의 생성부터 Life Cycle을 관리하고 제어해주는 것을 말합니다. 즉, 제어권이 스프링 프레임워크로 넘어오게 되면서 DI(의존성 주입), AOP(관점 지향 프로그래밍) 등을 가능하게 합니다.

Spring Container의 역할

컨테이너는 보통 객체의 Life Cycle을 관리하며, 생성된 인스턴스에게 추가적인 기능을 제공하도록 하는 것입니다. 다시 말해, 컨테이너란 작성한 코드의 처리과정을 위임받은 독립적인 존재라고 생각하면 됩니다.

컨테이너의 종류로는 BeanFactory, ApplicationContext가 있고 ApplicationContext가 조금 더 많은 기능을 가지고 있습니다.

Spring과 SpringBoot의 차이

SpringBoot는 Spring Framework에서 사용하는 프로젝트를 간편하게 셋업할 수 있는 서브 프로젝트입니다. 독립 컨테이너에서 동작할 수 있기 때문에 embeded tomcat이 자동으로 실행됩니다.

SpringBoot만의 특징

  • 애플리케이션을 신속하게 세팅할 수 있습니다.
  • 추가 WAS 설치 없이 embeded tomcat으로 실행합니다.
  • 번거로운 개발 세팅을 대신 해줍니다.

 

스프링 시큐어리티란?

스프링 기반의 어플리케이션의 보안(인증과 권한, 인가)을 담당하는 스프링 하위 프레임워크이다. 주로 서블릿 필터와 이들로 구성된 필터체인으로의 위임모델을 사용한다. 보안과 관련해서 체계적으로 많은 옵션을 제공해주기 때문에 개발자 입장에서는 일일이 보안관련 로직을 생성하지 않아도 된다.

 

POJO란?

POJO(Plain Old Java Object)란 평범한 자바 객체라는 의미입니다. 어떤 자바 객체가 있는데, 이 객체를 사용하기 위해서 상속을 받아야 한다거나, 인터페이스를 구현해야 한다거나, 어노테이션을 적용해야 한다거나 하는 제약조건이 없는 객체라는 뜻입니다. Java에서 제공하는 API 외에 종속되지 않아 특정 환경에 종속되지 않아 코드가 간결하고 테스트 자동화에 유리하며 스프링에서는 도메인과 비즈니스 로직을 수행하는 대상이 POJO대상이 될 수 있다.

MVC 패턴

객체지향프로그래밍에서, MVC란 사용자 인터페이스를 성공적이며 효과적으로 데이터 모형에 관련 시키기 위한 방법론 또는 설계 방식 중 하나

 

MVC 패턴

- 목적 코드의 재사용에 유용하며 사용자 인터페이스와 응용프로그램 개발에 소요되는 시간을 현저하게 줄여주는 형식

 

MVC 구성요소
Model

프로그램 내부 상태 즉 프로그램 데이터, 소프트웨어 응용과 그와 관련된 고급 클래스 내의 논리적 데이터 기반 구조를 표현. 이 목적 모형은 사용자 인터페이스에 관한 어떠한 정보도 가지고 있지 않다.

 

View

사용자 인터페이스 내의 구성요소들을 표현(사용자에게 보여지는 화면)

 

Controller

Model과 View를 연결하고 있는 클래스를 대표, Model과 View 내의 클래스들 간 정보 교환하는데 사용 (데이터와 비즈니스 로직간의 상호작용)

Spring MVC의 구조와 처리과정

  1. DispatcherServlet : 어플리케이션으로 들어오는 모든 Request를 받는 관문입니다. Request를 실제로 처리할 Controller에게 전달하고 그 결과값을 받아서 View에게 전달하여 적절한 응답등 생성할 수 있도록 흐름을 제어
  2. HandlerMapping : Request URL 각각을 어떤 Controller가 실제로 처리할 것인지 찾아주는 역할
  3. Controller : Request를 직접 처리한 후 그 결과를 다시 DispatcherServlet 에게 돌려줍니다.
  4. ModelAndView : Controller가 처리한 결과와 그 결과를 보여줄 View에 관한 정보를 담고 있는 객체
  5. ViewResolver : View 관련 정보를 갖고 실제 View를 찾아주는 역할
  6. View : Controller가 처리한 결과값을 보여줄 View를 생성

 

MVC 1 VS MVC 2

MVC1
웹브라우저의 요청을 jsp가 받아서 처리하는 구조
jsp에 비즈니스 로직을 처리하기 위한 코드와 결과를 보여주기위한 출력관리가 뒤섞여있으며 단순한 페이지 작성으로 쉽게 구현이 가능하지만 로직의 재사용이 힘들어 유지보수 문제가 있다

MVC2
웹브라우저의 요청을 하나의 서블릿이 받고, 요청을 알맞게 처리한 뒤 결과를 jsp에 포워딩
비즈니스 로직 처리부분을 모듈화 시킨 구조

 

  • ? Spring MVC 설명
  • ? Spring MVC 에서 요청이 들어왔을 때부터 응답이 나갈 때까지의 흐름을 설명해주세요.
  • ? ControllerAdvice가 무엇인가요?
  • ? Interceptor와 Filter 차이
  • ? Field 주입과 생성자 주입, Setter 주입
  • ? Spring Web MVC에서 요청이 들어와서 Database까지의 흐름

 

? Spring Web MVC의 Dispatcher Servlet의 동작 원리에 대해서 간단히 설명해주세요.

? Spring Web MVC에서 요청 마다 Thread가 생성되어 Controller를 통해 요청을 수행할텐데, 어떻게 1개의 Controller만 생성될 수 있을까요?
? Filter는 Servlet의 스펙이고, Interceptor는 Spring MVC의 스펙입니다. Spring Application에서 Filter와 Interceptor를 통해 예외를 처리할 경우 어떻게 해야 할까요?

? MVC 패턴에 대해 설명해주세요

 
반응형
Comments