스프링 프레임워크

김하영·2023년 5월 20일

출처: 스프링 부트 핵심 가이드 - 장정우 지음
https://www.aladin.co.kr/shop/wproduct.aspx?ItemId=296591989

스프링 프레임워크는?

스프링은 자바 언어를 이용해 엔터프라이즈급 개발을 편리하게 만들어주는 '오픈소스 경량급 애플리케이션 프레임워크'이다.

  • 자바 기반의 애플리케이션 프레임워크로 엔터프라이즈급 애플리케이션을 개발하기 위한 다양한 기능을 제공함. 스프링은 목적에 따라 다양한 프로젝트를 제공하는데, 그중 하나가 스프링 부트임.
  • 가치: 애플리케이션 개발에 필요한 기반을 제공해서 개발자가 비즈니스 로직 구현에만 집중할 수 있게끔 하는것

1. 제어의 역전(IoC)

제어의 역전: 객체의 관리를 컨테이너에 맡겨 제어권이 넘어간 것

  • 일반적인 자바개발 : 개발자가 직접 제어하는 구조! 객체선언 -> 해당객체 의존성 생성 -> 객체에서 제공하는기능 사용
  • 스프링: 객체의 생명주기 관리를 외부(스프링 컨테이녀, IoC컨테이너)에 위임
  • 제어의 역전을 통해 의존성주임(DI), 관점지향 프로그래밍(AOP)가 가능해짐

2. 의존성 주입(DI)

의존성 주입: 제어역전의 방법 중 하나로 사용할 객체를 직접 생성하지 않고 외부 컨테이너가 생성한 객체를 주입받아 사용하는 방식

  • 의존성 주입받는 방법
    • 생성자를 통한 의존성 주입 - 레퍼런스 객체 없이는 객체를 초기화 할 수 없게 설계 할수 있으므로 공식문서에서 권장
    • 필드 객체선언을 의존성 주입
    • setter 메서드를 통한 의존성 주입

3. 관점 지향 프로그래밍(AOP)

AOP: 여러 비즈니스로직에서 반복되는 부가 기능을 하나의 공통 로직으로 처리하도록 모듈화해 합입하는 방식
AOP 목적 : 모듈화 해서 재사용 가능한 구성을 만드는 것, 모듈화된 객체를 편하게 적용할 수 있게 함으로써 개발자가 비즈니스 로직 구현에만 집중할 수 있게끔 한다.

  • AOP는 관점을 기준으로 묶어개발하는 방식
    • 관점 : 어떤 기능을 구현할때,그 기능을 '핵심기능'과 '부가기능'으로 구분해 각각을 하나의 관점으로 보는것
    • 핵심기능 : 디비에 데이터를 저장하거나 데이터를 보여주는 코드와 같이 비즈니스 로직이 처리하려는 목적기능
    • 부가기능 : 비즈니스 로직 사이에 로깅처리나 트랜잭션을 처리하는 코드
  • OOP 방식 : 객체마다 핵심기능을 수행하기 위한 로직과 함께 부가 기능인 로깅, 트랜잭션등의 코드 작성 - 핵심기능을 구현한 로직마다 동일한 코드가 포함됨
  • AOP관점 : 부가기능은 핵심기능이 어떤 기능인지에 무관하게 로직이 수행되지 전 또는 후에 수행되기만 하면됨
  • AOP 구현 방식
    • 컴파일 과정에 삽입하는 방식
    • 바이트코드를 메모리에 로드하는 과정에 삽입하는 방식
    • 프락시 패턴을 이용한 방식 - 스프링이 AOP기능 제공하는 방식

스프링부트

스프링에서 필요한 모듈을 추가하다보면 설정이 복잡해지는 문제를 해결하기위해 등장한 것이 스프링부트!

  • 의존성 관리:
    • 스프링 프레임워크: 개발에 필요한 각 모듈의 의존성 직접 설정
    • 스프링 부트 : 'springboot-starter'라는 의존성 제공하여 자주사용되고 서로 호환되는 버전의 모듈 조합 제공 => 개발자는 라이브러리 호환 문제 해결!
  • 자동설정 : 어플리케이션에 추가된 라이브러리를 실행하는데 필요한 환경설정을 알아서 찾아준다. 즉, 어플리케이션을 개발하는데 필요한 의존성을 추가하면 프레임워크가 이를 자동으로 관리해준다.
  • 내장 WAS : 스프링 부터의 각 웹 어플리케이션에는 내장 WAS가 존재한다. 스프링부터의 자동설정기능은 톰갯에도 적용되므로 특별한 설정없이 톰캣을 실행할 수 있다.(필요에 따라서 다른 웹서버로 대체할 수도 있음)
  • 모니터링 : 해당시스템이 사용하는 스레드, 메모리, 세션 등 주요 요소를 모니터링 할 수 있는 스프링부트 액츄에이터라는 자체 모니터링 도구를 제공함.
profile
백엔드 개발자로 일하고 싶어요 제발

0개의 댓글