[TIL] Spring boot 기초 개념 with spring

ssook·2023년 9월 20일
0

TIL

목록 보기
7/17
post-thumbnail

스프링부트 핵심 가이드를 읽고 간략하게 정리한 글입니다.

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

    (+) 엔터프라이즈급 개발이란?
    기업 환경을 대상으로 하는 개발로, 대규모 데이터를 처리하는 환경을 의미함.

IoC (제어 역전)

일반적인 자바 개발의 경우, 사용하려는 객체를 선언하고 해당 객체의 의존성을 생성한 다음 객체에서 제공하는 기능을 사용함.
객체를 생성하고 사용하는 일련의 작업을 개발자가 직접 제어하는 구조임.

하지만, 제어 역전은 사용할 객체를 직접 생성하지 않고 객체의 생명주기 관리를 외부(스프링 컨테이너, IoC 컨테이너)에 위임함.

객체의 관리를 컨테이너에 맡겨 제어권이 넘어간 것을 제어 역전이라고 부르며, 제어 역전을 통해 의존성 주입 / 관점 지향 프로그래밍 등이 가능해 짐.

DI (의존성 주입)

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

스프링에서 의존성을 주입받는 방법은 아래와 같이 3가지가 있음.

  1. 생성자를 통한 의존성 주입
  2. 필드 객체 선언을 통한 의존성 주입
  3. setter 메서드를 통한 의존성 주입

스프링에서는 @Autowired 라는 annotation을 통해 의존성을 주입할 수 있음.
스프링 공식 문서에서 권장하는 의존성 주입 방법은 생성자를 통해 의존성을 주입받는 방식임.

다른 방식과는 다르게 생성자를 통해 의존성을 주입받는 방식은 레퍼런스 객체 없이는 객체를 초기화할 수 없게 설계할 수 있기 때문.

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

AOP는 OOP를 더욱 잘 사용하도록 돕는 개념임.

AOP는 관점을 기준으로 묶어 개발하는 방식을 의미함.
관점이란 어떤 기능을 구현할 대 그 기능을 핵심 기능과 부가 기능으로 구분해 각각을 하나의 관점으로 보는 것을 의미함.

AOP의 관점에서는 부가 기능은 핵심 기능이 어떤 기능인지에 무관하게 로직이 수행되기 전 또는 후에 수행되기만 하면 됨.
여러 비즈니스 로직에서 반복되는 부가 기능을 하나의 공통 로직으로 처리하도록 모듈화해 삽입하는 방식을 AOP라고 함.

이러한 AOP를 구현하는 방법은 크게 3가지가 있음.

1. 컴파일 과정에 삽입하는 방식
2. 바이트 코드를 메모리에 로드하는 과정에 삽입하는 방식
3. proxy pattern을 이용한 방식

이 중 스프링은 proxy 패턴을 통해 AOP 기능을 제공하고 있음.

애플리케이션 개발에 필요한 모듈만 선택해서 사용하게끔 설계되어 있음.


의존성 관리

스프링 부트에서는 이와 같은 불편함을 해소하기 위해 spring-boot-starter라는 의존성을 제공함.

여기에 해당되는 라이브러리를 간략하게 소개하면 아래와 같음.
세팅할 때 참고해 두자.

  • spring-boot-starter-web
    스프링 MVC를 사용하는 RESTful 애플리케이션을 만들기 위한 의존성임.

  • spring-boot-starter-test
    JUnit Jupiter, Mockito 등의 테스트 라이브러리를 포함함.

  • spring-boot-starter-jdbc
    HikariCP 커넥션 풀을 활용한 JDBC 기능을 제공함.

  • spring-boot-starter-security
    스프링 시큐리티(인증, 권한, 인가 등) 기능을 제공함.

  • spring-boot-starter-data-jpa
    하이버네이트를 활용한 JPA 기능을 제공함.

  • spring-boot-starter-cache
    스프링 프레임워크의 캐시 기능을 지원함.


자동 설정

스프링 부트는 스프링 프레임워크의 기능을 사용하기 위한 자동 설정을 지원함.

  • @SpringBootApplication 어노테이션

기능 위주로 보면 크게 다음 3개의 annotation을 합쳐놓은 구성

  • @SpringBootConfiguration
  • @EnableAutoConfiguration
  • @ComponentScan

스프링 부트 애플리케이션이 실행되면,

  1. 우선 @ComponentScan 어노테이션이 @Component 시리즈 어노테이션이 붙은 클래스를 발견해 bean을 등록함.

  2. @EnableAutoConfiguration 어노테이션을 통해 spring-boot-autoconfigure 패키지 안에 spring.factories 파일을 추가해 다양한 자동 설정이 일부 조건을 거쳐 적용됨.


내장 WAS

스프링 부트의 각 웹 어플리케이션에는 내장 WAS가 존재함.
웹 애플리케이션을 개발할 때 가장 기본이 되는 의존성인 spring-boot-starter-web의 경우 톰캣을 내장함.

스프링 부트의 자동 설정 기능은 톰캣에도 적용되므로 특별한 설정 없이도 톰캣을 실행함.


모니터링

개발이 끝나고 서비스를 운영하는 시기에는 해당 시스템이 사용하는 스레드, 메모리, 세션 등의 주요 요소들을 모니터링 해야 함.

스프링 부트에는 스프링 부트 액추에이터라는 자체 모니터링 도구가 있음.

profile
개발자에서, IT Business 담당자로. BrSE 업무를 수행하고 있습니다.

0개의 댓글