티스토리 뷰

개인공부/Spring

스프링2

날따라해봐요요롷게 2022. 5. 12. 22:05
  • Spring Core 인 Bean과 Container의 관계를 알고 있습니다.

스프링은 좋은 객체 지향 어플리케이션을 만들 수 있도록 도와주는 하나의 프레임워크 입니다.

따라서 스프링의 핵심은 객체 지향입니다.

이러한 객체 지향의 방향으로 스프링의 bean과 container는 스프링의 core입니다.

 

스프링 컨테이너 는 객체의 생명주기를 관리, 생성된 인스턴스들에게 추가적인 기능을 제공하도록 하는 것 인스턴스 생성부터 소멸까지의 인스턴스 생명주기 관리를 개발자가 아닌 컨테이너가 대신 해줍니다.
객체관리 주체가 프레임워크(Container)가 되기 때문에 개발자는 로직에 집중할 수 있는 장점이 있습니다.

그렇다면 스프링 Bean은 무엇인가?

Bean 은 스프링 컨테이너에 등록된 객체를 말한다.

따라서 스프링 컨테이너는 Bean(객체)을 관리 감독한다고 말할 수 있다.


  • 스프링의 특징인 IoC/DI 를 알고 있습니다.

스프링이 객체 지향 프로그램을 돕는 프레임워크 라고 하는 이유는 바로 IoC/DI의 특징을 갖고 있기 때문입니다.

 

스프링에서는 객체의 생성과 관계설정, 사용, 제거 등의 작업을 코드 대신 독립된 컨테이너가 담당한다.

이를 컨테이너가 코드 대신 객체에 대한 제어권을 갖고 있다고 해서 IoC라고 부른다. (제어권 역전)

-> 코드가 객체를 제어하는 것에서 컨테이너가 제어한다고 하여 Inversion Of Control


그래서 스프링 컨테이너를 IoC 컨테이너라고도한다.

 

DI(의존성 주입)는 각 객체간의 의존관계를 빈 설정(Bean Definition) 정보를 바탕으로 컨테이너가 주입해주는 것을 말한다.


  • Spring AOP를 알고 있습니다.

AOP는 Aspect Oriented Programming의 약자로 관점 지향 프로그래밍이라고 불린다.
관점 지향은 어떤 로직을 기준으로 핵심적인 관점, 부가적인 관점으로 나누어서 보고 그 관점을 기준으로 각각 모듈화하겠다는 것이다.
여기서 모듈화란 어떤 공통된 로직이나 기능을 하나의 단위로 묶는 것을 말한다. 

예로들어 핵심적인 관점은 결국 우리가 적용하고자 하는 핵심 비즈니스 로직이 된다.
또한 부가적인 관점은 핵심 로직을 실행하기 위해서 행해지는 데이터베이스 연결, 로깅, 파일 입출력 등을 예로 들 수 있다.

AOP에서 각 관점을 기준으로 로직을 모듈화한다는 것은 코드들을 부분적으로 나누어서 모듈화하겠다는 의미다.
이때, 소스 코드상에서 다른 부분에 계속 반복해서 쓰는 코드들을 발견할 수 있는 데 이것을 흩어진 관심사 (Crosscutting Concerns)라 부른다.
위와 같이 흩어진 관심사를 Aspect로 모듈화하고 핵심적인 비즈니스 로직에서 분리하여 재사용하겠다는 것이 AOP의 취지다.

 

AOP 적용 방식

  • 컴파일 시점
  • 클래스 로딩 시점
  • 런타임 시점(프록시)

AOP 용어 정리

# 조인 포인트(Join point)

  • 어드바이스가 적용될 수 있는 위치, 메소드 실행, 생성자 호출, 필드 값 접근, static 메서드 접근 같은 프로그램 실행 중 지점
  • 조인 포인트는 추상적인 개념이다. AOP를 적용할 수 있는 모든 지점이라 생각하면 된다.
  • 스프링 AOP는 프록시 방식을 사용하므로 조인 포인트는 항상 메소드 실행 지점으로 제한된다.

# 포인트컷(Pointcut)

  • 조인 포인트 중에서 어드바이스가 적용될 위치를 선별하는 기능
  • 주로 AspectJ 표현식을 사용해서 지정
  • 프록시를 사용하는 스프링 AOP는 메서드 실행 지점만 포인트컷으로 선별 가능

 

# 타켓(Target)

  • 어드바이스를 받는 객체, 포인트컷으로 결정

 

# 어드바이스(Advice)

  • 부가 기능
  • 특정 조인 포인트에서 Aspect에 의해 취해지는 조치
  • Around(주변), Before(전), After(후)와 같은 다양한 종류의 어드바이스가 있음

# 애스펙트(Aspect)

  • 어드바이스 + 포인트컷을 모듈화 한 것
  • @Aspect 를 생각하면 됨
  • 여러 어드바이스와 포인트 컷이 함께 존재

# 어드바이저(Advisor)

  • 하나의 어드바이스와 하나의 포인트 컷으로 구성
  • 스프링 AOP에서만 사용되는 특별한 용어


# 위빙(Weaving)

  • 포인트컷으로 결정한 타켓의 조인 포인트에 어드바이스를 적용하는 것
  • 위빙을 통해 핵심 기능 코드에 영향을 주지 않고 부가 기능을 추가 할 수 있음
  • AOP 적용을 위해 애스펙트를 객체에 연결한 상태
    - 컴파일 타임(AspectJ compiler)
    - 로드 타임
    - 런타임, 스프링 AOP는 런타임, 프록시 방식

  • Spring MVC 를 이용해 프로젝트를 진행하였습니다.

스프링 mvc 는 모델 - 뷰 - 컨트롤러(Model - View - Controller, MVC)로 소프트웨어공학에서 사용되는 아키텍쳐 패턴으로 MVC 패턴의 주 목적은 Business logic과 Presentation logic을 분리하기 위함이다.
MVC패턴을 사용하면, 사용자 인터페이스로부터 비지니스 로직을 분리하여 애플리케이션의 시각적 요소나 그 이면에서 실행되는 비지니스 로직을 서로 영향 없이 쉽게 고칠 수 있는 애플리케이션을 만들 수 있다.

 

Model 은 '데이터' 디자인을 담당한다.

View 는 '실제로 렌더링되어 보이는 페이지' 를 담당한다.

Controller 는 사용자의 요청을 받고, 응답을 주는 로직을 담당한다.

 

수행 순서

요청 -> 프론트 컨트롤러 -> 핸들러 매핑 -> 핸들러 어댑터 -> 컨트롤러 -> 로직 수행(서비스) -> 컨트롤러 -> 뷰 리졸버 -> 응답(jsp, html)

 

  • 컨트롤러 중에서도, 맨 앞단에서 유저의 유청을 받는 컨트롤러를 프론트 컨트롤러라고 한다.
    • DispatcherServlet 객체가 이 역할을 한다.
    • 본격적으로 로직에 들어오기 전에, 요청에 대한 선처리 작업을 수행한다.
    • ex. 지역 정보 결정, 멀티파트 파일 업로드 처리 등
  • 프론트 컨트롤러는 요청을 핸들러 매핑을 통해 해당 요청을 어떤 핸들러가 처리해야하는지를 매핑한다.
    • HandlerMapping 객체가 핸들러 매핑에 대한 정보를 담고있다.
  • 이렇게 매핑된 핸들러를 실제로 실행하는 역할은 핸들러 어댑터가 담당한다.
    • HandlerAdapter 객체가 이 역할을 한다.
  • 컨트롤러는 해당 요청을 처리하는 로직을 담고있다.
    • 보통 요청의 종류 혹은 로직의 분류에 따라 내부적으로 Service 단위로 나누어 모듈화 한다.
    • 각 서비스에서는 DB 접근할 수 있는 Repository 객체를 이용하여 데이터에 접근할 수 있다.
  • 컨트롤러는 서비스에서의 로직 처리 후, 결과를 뷰 리졸버를 거쳐 뷰 파일을 렌더링하여 내보낸다.
    • ViewResolver 객체가 이 역할을 한다.

 


출처 : https://catsbi.oopy.io/f52511f3-1455-4a01-b8b7-f10875895d5b

 

스프링 MVC - 구조 이해

목차

catsbi.oopy.io

https://dailyheumsi.tistory.com/159

 

[부스트코스 웹 프로그래밍] 스프링 MVC

부스트코스 웹 프로그래밍 BE 영상을 보며 공부한 것을 간단히 정리한다. 1. Spring MVC Spring MVC 란 Spring 프레임워크에서 제공하는 웹 모듈이다. MVC 는 Model-View-Controller 의 약자로, 기본 시스템 모듈..

dailyheumsi.tistory.com

 

 

 

'개인공부 > Spring' 카테고리의 다른 글

Spring Security - WebSecurity, HttpSecurity  (0) 2022.05.12
면접 준비 - spring framework  (0) 2022.05.11
스프링1  (0) 2022.05.09
CRUD 구현  (0) 2021.11.02
설정 - ORACLE DB  (0) 2021.09.15
공지사항
최근에 올라온 글
최근에 달린 댓글
Total
Today
Yesterday
링크
«   2024/09   »
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
글 보관함