민팽로그

spring 프레임워크 본문

📚소소한 스터디

spring 프레임워크

민팽 2023. 4. 22. 12:38

프레임워크 vs 라이브러리

프레임워크와 라이브러리의 가장 큰 차이 -> 코드의 흐름을 제어하는 쪽이 어디에 있는가?

프레임워크

소프트웨어를 개발하기 위한 기본 뼈대를 미리 만들어 놓은 것.

개발자는 프레임워크가 요구하는 방식대로 프로그램을 만들게 됨.

개발자가 만든 코드를 프레임워크가 호출해 주어 생명주기를 프레임워크가 관리함. 프레임워크가 제어의 흐름을 가지고 있음.

 

라이브러리

개발자가 단순히 호출하여 사용하는 도구들을 모아놓은 집합.

개발자가 코드의 흐름을 직접 관리.

 

Spring 프레임워크

자바로 앤터프라이즈급 애플리케이션을 만들 때 사용하는 오픈 소스 프레임워크.

개발자가 low level에 신경쓰지 않고 비즈니스 로직을 개발하는데 전념할 수 있도록 해줌.

스프링 프레임워크는 경량 컨테이너로, 자바 객체들의 라이프사이클을 관리함(spring container, ioc container). -> 특정 객체가 의존 관계에 있는 다른 객체를 직접 생성할 필요 없이 주입받아 사용하면 됨

 

spring framework 구조

spring 삼각형: 엔터프라이즈 애플리케이션 개발을 쉽게 할 수 있도록 도와주는 spring의 핵심

  1. POJO 
  2. PSA
  3. IoC/DI
  4. AOP

POJO(Plan Old Java Object)

오래된 자바 오브젝트.

특정 환경이나 기술에 종속적이지 않은 객체지향 원리에 충실한 자바 객체 -> 테스트 용이, 다른 기술에 대한 종속성 감소.

 

PSA(Portable Service Abstraction)

환경/세부 기술과는 관계 없이 일관된 방식으로 기술에 접근할 수 있는 환경을 제공해주는 설계 원칙.

ex) jpa의 구현체는 하이버네이트 -> spring data jpa로 한 단계 더 추상화된 jpa를 사용함.

 

IoC(Inversion of Control)/DI(Dependency Injection)

스프링이 갖고 있는 핵심 기능.

자바 객체의 제어권을 스프링 프레임워크가 갖고 있음.

객체 결합도를 낮추고 유연한 애플리케이션을 만들 수 있음 → 한 클래스를 변경하면 다른 쪽 클래스도 같이 변경해야 하는 일이 줄어듦.

DI를 통해 느슨한 연결을 구현해낼 수 있음.

 

- IoC: 제어의 역전, 객체 생성부터 시작하여 생명주기의 관리를 개발자가 직접 하는 것이 아니라 프레임워크가 하게 됨.

- ID: 의존성 주입, 객체를 이용하려 할 때 필요한 의존 객체를 프레임워크가 주입해줌. Field 주입, Setter 주입, Constructor 주입 세가지로 주입 가능.

 

AOP(Aspect Oriented Programming)

문제를 바라보는 관점을 기준으로 프로그래밍 하는 기법.

핵심 기능과 공통 기능으로 나뉘는 문제가 있을 때, 공통 기능 모듈을 여러 곳에 쉽게 적용할 수 있음.

 

Spring Core

spring 프레임워크의 핵심 기능을 제공. core 컨테이너의 주요 컴포넌트는 Bean Factory. IoC/DI 기능, 빈 클래스 관리 기능 등을 지원하는 영역. Spring을 컨테이너로 만든 것이 spring core의 BeanFactory.

 

Container

객체의 생성~소멸의 라이프 사이클을 관리, 라이프사이클을 기본으로 애플리케이션 사용에 필요한 주요 기능을 제공.

컨테이너가 있으면 서비스 객체를 사용하기 위해 Factory 또는 싱글톤 패턴을 직접 구현하지 않아도 됨.

 

BeanFactory: Bean 등록, 생성, 조회, 반환을 관리. getBean()메소드가 정의되어 있는 인터페이스.

ApplicationContext: BeanFactory를 확장한 인터페이스. BeanFactory + 추가 기능 제공. ApplicationContext를 구현한 클래스는 여러 종류가 있음.

Bean: 스프링 IoC 방식으로 관리하는 객체. 기본적으로 싱글톤 방식으로 생성됨.

@Component, @Repository, @Service, @Controller: 빈 갯수가 증가할수록 XML 파일에 빈을 모두 관리하는 것이 힘듦 -> 어노테이션으로 빈 등록 가능. 빈 이름은 클래스 이름의 첫 글자를 소문자로 바꾼 것을 기본으로 사용. 해당 어노테이션을 사용 시 컴포넌트 스캔 설정을 해주어야 인식될 수 있음.

 

 

 

 

 

 

 

 

reference

https://jins-dev.tistory.com/entry/Spring-PSAPortable-Service-Abstraction%EC%9D%98-%EA%B0%9C%EB%85%90

'📚소소한 스터디' 카테고리의 다른 글

[Economius, 이코노미어스] 개발 일지  (0) 2023.10.22
졸프 선수지식  (0) 2022.03.13
C++ 정수 최대/최소값 - climits  (0) 2022.02.27
연구과제 참고 목록 2  (0) 2021.12.20
[web] SOP와 CORS  (0) 2021.12.20
Comments