WebApplication

[Spring] 스프링 작동 원리 및 어노테이션 개념 정리

coolcode 2022. 7. 27. 13:50

스프링 프레임워크 >> '경량프레임워크'

특정기능 위주로 간단한 jar파일 등을 이용해 모든 개발이 가능하도록 구성된 프레임워크(객체생성의 편의성이 높다)

oop구조 기반 + 의존성(하나의 객체가 다른 객체의 상태에 따라 영향을 받는 것 =결합도)주입

applicationContext가 필요한 객체들을 생성하고 객체를 주입하는 역할을 함 (객체=)

Ø  스프링을 이용하면 객체와 객체를 분리해서 생성하고 객체들을 엮는 wiring 작업

+ 여러 종류의 프레임워크를 혼용해서 사용할 수 있음

Pojo기반 구성(자바빈즈는 pojo구조를 따라 만들어짐) / 의존성 주입을 통한 객체 간의 관계 구성

aop지원 / mvc구조 /was에 종속적이지 않은 개발 환경

 

aop:: 비즈니스 로직은 아니지만 보안/로그/트랜잭션처럼 반드시 처리가 필요한 부분::횡단관심사

:: 횡단관심사를 모듈로 분리하는 패러다임

(반복코드를 줄이고 핵심 비즈니스 로직에 집중할 수 있는 방법 제공

프로젝트마다 다른 관심사(특정어드바이스)적용하여 코드의 수정을 최소화

트랜잭션(쪼갤 수 없는 업무 처리의 최소단위) 두개의 기능을 하나로 묶어서 처리 ex ) 이체 = 출금+입금

 

** lombok은 컴파일 시점에 sts compiler를 사용하여 소스코드에 대한 자동생성을 해주는 역할을 하기 때문에 pom.xml에 추가하기 이전에 sts의 실행경로에 별도로 설치해주어야 함

반면 다른 log4j junit테스트 같은 일반 라이브러리들은 런타임시점에 사용하기 때문에 pom.xml에만 추가해주면 됨

배포할 때는 lombok이 빠지게 되는 이유

 

스프링의 작동 원리

>> 클라이언트로부터 요청을 받으면 DispatcherServlet에서 HandlerMapping을 통해 Controller로 위임처리 > 위임처리 받은 Controller는 비즈니스 로직처리 후 ViewResolver를 통해 View로 데이터를 전달한다

모델과 뷰를 넘기면 컨트롤러의 책임이 끝남(컨트롤러가 DispatcherServlet에 돌려줘야 하는 정보는 모델과 뷰)

 

** encodeuricomponent(‘바꾸려는 문자열’)

이스케이핑 처리:: URI로 데이터를 전달하기 위해서 문자열을 인코딩

 

- 상대경로
   1  '/'    ->
최상위 디렉토리로 이동.(Web root)
   2  './'   ->
현재 파일의 디렉토리
   3  '../'  ->
한단계 위의 상위 디렉토리로 이동

- 만약 두단계 상위 디렉토리로 이동하려면 '../../'

 

@controller 컨트롤러 선언(추가속성x)

:: 파라미터 자동 수집 기능 제공

 

@requestMapping 현재 클래스의 모든 메서드들의 기본 url경로

Ø  추가 속성 : method :: get / post

@requestMapping의 축약형 > @getMapping @postMapping

Ø  @log4j > lombok어노테이션

Ø  Spring legacy 프로젝트는 기본으로 log4j가 추가되어 있어 별도 설정x

 

@configuration > 자바설정시 해당 클래스의 인스턴스를 이용해서 설정파일을 대신함

 

@component > 스프링에서 관리해야 하는 대상 객체임을 표시하는 어노테이션

@autowired > 객체간 서로 엮어주는 역할

Root-context.xml 은 스프링 프레임워크에서 관리해야 하는 객체를 설정하는 파일

@component @setter 를 통해 의존성 주입 대상 객체임을 알리고 rootcontext.xml에서 context-component- scan 태그로 의존성 주입할 클래스가 있는 패키지를 지정해준다

 

Application context라는 이름의 객체가 만들어짐 > 스프링은 자신이 생성하고 관리해야 하는 객체에 대한 설정을 확인하기 위해 root-context.xml을 확인한다

context-component- scan 태그에 있는 패키지를 스캔한다 > 해당 패키지 에 있는 클래스 중 @component 어노테이션이 존재하는 클래스의 인스턴스를 생성하고 빈으로 등록한다

의존성 주입이 필요한 객체에 @autowired 어노테이션을 붙여주면 스프링은 해당 객체의 참조를 요청한 클래스 객체에 빈을 주입한다