Spring

찬비의 개발블로그·2021년 11월 2일
0

spring 특징

  • 경량 컨테이너로서 자바 객체를 직접 관리
    • 각각의 객체 생성, 소멸과 같은 라이프 사이클을 관리하며 스프링으로부터 필요한 객체를 얻을 수 있다.
  • 제어의 역행(IoC)
  • 의존성 주입(DI)
  • 관점 지향 프로그래밍(AOP)
  • POJO 방식 프레임워크
  • PSA

IOC(Inversion of Control)

  • 메소드나 객체의 호출작업을 개발자가 결정하는 것이 아니라, 외부에서 결정되는 것을 의미
  • 객체의 의존성을 역전시켜 객체 간의 결합도를 줄이고 유연한 코드를 작성할 수 있게 하여 가독성 및 코드 중복, 유지 보수를 편하게 할 수 있게 한다.
  • 기존의 객체 생성시에는 클래스 내부에서 의존성 객체를 생성했다면, spring에서는 스스로 만드는 것이 아니라 제어권을 스프링에게 위임하여 스프링이 만들어놓은 객체를 주입한다.
  • 스프링이 모든 의존성 객체를 스프링이 실행될 때 다 만들어주고 필요한곳에 주입시켜줌으로써 Bean들은 싱글톤 패턴의 특징을 가진다.

DI(Dependency Injection)

  • 의존관계 주입 기능으로, 객체를 직접 생성하는 게 아니라 외부에서 생성한 후 주입 시켜주는 방식
  • DI를 통해서 모듈 간의 결합도가 낮아지고 유연성이 높아진다
  • 위 그림에서 두번째 방식이 의존성 주입의 예시
  • A 객체에서 B, C 객체를 사용(의존)할 때 A객체에서 직접 생성하는 것이 아니라 외부(IoC컨테이너)에서 생성된 B, C 객체를 주입시켜 setter 혹은 생성자를 통해 사용하는 방식
  • 스프링에서는 객체를 Bean 이라고 부르며, 프로젝트가 실행될 때 사용자가 Bean으로 관리하는 객체들의 생성과 소멸에 관련된 작업을 자동적으로 수행해주는데 객체가 생성되는 곳을 Bean 컨테이너라고 부른다
  • 필드 주입, setter 주입, 생성자 주입 (3가지 방법 / 생성자 주입을 권장)

Spring Bean 등록 방법

  • 컴포넌트 스캔과 자동 의존관계 설정
  • 자바 코드로 직접 스프링 빈 등록하기
  • xml 설정파일을 이용(요즘 거의 사용안함)

Component Scan

  • @Component 를 가진 모든 대상을 가져와서 빈에 등록하기 위해 찾는 과정
  • 기본적인 컴포넌트 스캔 대상
    • @Component : 컴포넌트 스캔에서 사용
    • @Controller : 스프링 MVC 컨트롤러에서 사용
    • @Service : 스프링 비즈니스 로직에서 사용
    • @Repository : 스프링 데이터 접근 계층에서 사용
    • @Configuration : 스프링 설정 정보에서 사용

https://velog.io/@neity16/Spring-%ED%95%B5%EC%8B%AC-%EC%9B%90%EB%A6%AC-%EA%B8%B0%EB%B3%B8%ED%8E%B8-6-%EC%BB%B4%ED%8F%AC%EB%84%8C%ED%8A%B8-%EC%8A%A4%EC%BA%94Component-Scan-DI

AOP(Aspect Oriented Programming)

  • 업무 로직을 포함하는 기능을 핵심기능
  • 핵심 기능을 도와주는 부가적인 기능을 부가기능
  • AOP는 애플리케이션에서의 관심사의 분리, 핵심적인 기능에서 부가적인 기능을 분리한다.
  • 분리한 부가기능을 Aspect라는 모듈형태로 만들어서 설계하고 개발하는 방법
  • 프록시 패턴
    • Spring AOP는 프록시 패턴이라는 디자인 패턴을 사용해서 AOP 효과를 낸다
    • 프록시 패턴을 사용하면 어떤 기능을 추가하려 할때 기존 코드를 변경하지 않고 기능을 추가할 수 있다.
    • 어떤 클래스가 Spring AOP 의 대상이라면 그 기존 클래스의 빈이 만들어질 때 Spring AOP가 프록시를 자동으로 만들고 원본 클래스 대신 프록시를 빈으로 등록한다. 그리고 원본 클래스가 사용되는 지점에서 프록시를 대신 사용한다.

https://shlee0882.tistory.com/206

https://atoz-develop.tistory.com/entry/Spring-%EC%8A%A4%ED%94%84%EB%A7%81-AOP-%EA%B0%9C%EB%85%90-%EC%9D%B4%ED%95%B4-%EB%B0%8F-%EC%A0%81%EC%9A%A9-%EB%B0%A9%EB%B2%95

PSA (Portable Service Abstraction)

  • 추상화 계층을 사용하여 어떤 기술을 내부를 숨시고 개발자에게 편의성을 제공해주는 것이 서비스 추상화
  • 하나의 추상화로 여러 서비스를 묶어둔 것을 Spring에서 PSA라고 한다

https://sabarada.tistory.com/127

MVC(Model, View, Controller)

  • 하나의 애플리케이션, 프로젝트를 구성할 때 그 구성요소를 세가지의 역할로 구분한 패턴
  • 사용자가 controller를 조작하면 controller는 model을 통해서 데이터를 가져오고 그 정보를 바탕으로 시각적인 표현을 담당하는 view를 제어해서 사용자에게 전달하게 된다
  • 모델(Model)
    • 애플리케이션의 정보, 데이터
    • 또한 이러한 데이터, 정보들의 가공을 책임지는 컴포넌트
  • 뷰(View)
    • 데이터 및 객체의 입력, 그리고 보여주는 출력을 담당
    • 사용자 인터페이스 요소
  • 컨트롤러(Controller)
    • 데이터와 사용자 인터페이스 요소들을 잇는 다리역할
    • 사용자가 데이터를 클릭하고, 수정하는 것에 대한 이벤트들을 처리하는 부분
    • 사용자가 접근한 URL 에 따라 요청을 파악한다. URL에 맞는 Method를 호출하여 서비스와 함께 비지니스 로직을 처리한다. 최종적으로 나온 결과는 모델에 저장하고 뷰에 던져준다.
  • 동작방식
  • https://jseoposh.tistory.com/9
  • https://aridom.tistory.com/61

pojo (몰라)

profile
혼자 공부하면서 정리하는 블로그

0개의 댓글