JaPark Bug World

[SpringBoot] 스프링부트3 시작하기 본문

개발새발/스프링부트3 백엔드 개발자 되기

[SpringBoot] 스프링부트3 시작하기

JAstory 2024. 4. 8. 09:51

2.1 스프링과 스프링 부트

스프링의 등장

엔터프라이즈 애플리케이션은 대규모의 복잡한 데이터를 관리하는 애플리케이션을 의미한다. 소프트웨어 분야가 발전하면 엔터프라이즈 애플리케이션은 점점 복잡해졌다. 많은 사용자의 요청을 동시에 처리해야 하므로 서버 성능과 안정성, 보안이 매우 중요하다. 이런 것들을 신경쓰면서 비즈니스 로직까지 개발하기가 매우 어려워 개발에만 집중 할 수 있도록 2003년 6월 스프링 프레임워크가 등장했다. 스프링 프레임워크는 서버 성능, 안정성, 보안을 매우 높은 수준으로 제공하는 도구이다.

 

스프링을 더 쉽게 만들어 주는 스프링 부트

스프링은 장점이 많은 개발 도구이지만 설정이 매우 복잡하다는 단점이 있다. 이러한 단점을 보완하기 위해 스플이 부트를 출시 했다. (2013년 4월) 스프링부트는 스프링을 프레임워크를 더 쉽고 빠르게 이용할 수 있도록 만들어주는 도구이다. 개발자가 조금 더 비즈니스 로직 개발에만 집중할 수 있도록 만들어준다.

  • 스프링부트의 주요 특징
    • 톰캣, 제티, 언더토우 같은 웹 애플리케이션 서버가 내장되어 있어 따로 설치를 하지않아도 독립적으로 실행 가능
    • 빌드 구성을 단순화하는 스프링 부트 스타터 제공
    • XML 설정을 하지 않고 자바 코드로 모두 작성 할 수 있음
    • JAR를 이용해서 자바 옵션만으로도 배포가 가능
    • 애플리케이션의 모니터링 및 관리 도구인 스프링 액츄에이터(spring actuator)를 제공
    • 스프링부트는 스프링에 속한 도구이다.
  • 차이점 1. 구성의 차이
    • 스프링은 애플리케이션 개발에 필요한 환경을 수동으로 구성하고 정의해야한다.
    • 스프링부트는 코어와 스프링 MVC의 모든 기능을 자동으로 로드하므로 수동으로 개발 환경을 구성할 필요가 없다.
  • 차이점 2. 내장 WAS의 유무
    • 스프링 애플리케이션은 일반적으로 톰캣과 같은 WAS에서 배포
    • 하지만 스프링부트는 WAS를 자체적으로 가지고 있음, 그래서 jar파일만 만들면 별도로 WAS를 설정하지 않아도 애플리케이션 실행 가능
  스프링 스프링 부트
목적 엔터프라이즈 애플리케이션 개발을 더 쉽게 만들기 스프링의 개발을 더 빠르고 쉽게 하기
설정 파일 개발자가 수동 구성 자동 구성
XML 일부 파일은 직접 생성하고 관리 사용하지 않음
인메모리 데이터베이스 지원 지원하지 않음 자동 설정 지원
서버 프로젝트를 띄우는 서버를 별도로 수동 설정 내장형 서버를 제공해 별도의 설정이 필요 없음

 

2.2 스프링 콘셉트 공부하기

스프링의 중요한 콘셉트라 할 수 있는 제어의 역전과 의존성 주입을 먼저 알아보고 스프링 컨테이너와 빈에 대한 개념을 알아보자.

 

제어의 역전과 의존성 주입

스프링은 모든 기능의 기반을 제어의 역전(IoC)과 주입(DI)에 두고 있다.

 

IoC란?

Inversion of Control을 줄인 표현이며 직역하면 제어의 역전이다. 자바에서는 코드를 작성해 객체를 생성할 때 객체가 필요한 곳에서 직접 생성을 했다. 제어의 역전은 다른 객체를 직접 생성하거나 제어하는 것이 아니라 외부에서 관리하는 객체가 가져와 사용하는 것을 말한다.

// 자바에서의 객체 생성
public class A {
        b = new B();
    }

// 스프링 컨테이너가 객체를 관리하는 방식
    public class A {
        private B b;
    }

 

DI란?

제어의 역전을 구현하기 위해 사용하는 방법이 DI이다. Dependency Injection이며, 직역하면 의존성 주입이다. DI는 어떤 클래스가 다른 클래스에 의존한다는 뜻이다. @Autowired라는 애너테이션을 사용하게 스프링 컨테이너에 있는 빈이라는 것을 주입하는 역할을 한다. 빈은 스프링 컨테이너에서 관리하는 객체를 말한다. 

public class A {
    // A에서 B를 주입받음
    @Autowired
    B b;
}

 

IoC/DI 개념은 스프링의 핵심 개념이라고 말할 수 있을만큼 중요하기 때문에 반드시 이해하고 넘어가야한다.

저도 이 개념이 잘 안잡혀서 블로그에 정리를 하게 된 계기가 되었습니다........ 

 

빈과 스프링 컨테이너

스프링 컨테이너란?

스프링 컨테이너는 빈을 생성하고 관리한다. 즉, 빈이 생성되고 소멸되기까지의 생명주기를 이 스프링 컨테이너가 관리하는 것이다. @Autowired같은 애너테이션을 사용해 빈을 주입받을 수 있게 DI를 지원한다. 

 

빈이란?

MyBean이라는 클래스에 @Component  애너테이션을 붙이면 MyBean 클래스가 빈으로 등록이 된다. 쉽게, 스프링에서 제공해주는 객체라고 생각하면 된다.

// 클래스 Mybean 빈으로 등록
@Component
public class MyBean {
}

 

관점 지향 프로그래밍 (AOP, Aspect-Oriented programming)

스프링에서 또 하나 중요한 개념으로 AOP가 있다. Aspect Oriented Programming 직역하면 관점 지향 프로그래밍이다. 프로그래밍에 대한 관심을 핵심 관점, 부가 관점으로 나누어서 관심 기준으로 모듈화 하는 것을 의미한다. 프로그래머는 핵심 관점 코드에만 집중할 수 있게 할 뿐만 아니라. 프로그램의 변경과 확장에도 유연하게 대응이 가능하다.

해당 내용의 이해는 책을 직접 보는 것을 권장 드립니다!

 

이식 가능한 서비스 추상화

PSA(Portable Service Abstraction), 스프링에서 제공하는 다양한 기술들을 추상화해 개발자가 쉽게 사용하는 인터페이스를 말한다. 예를 들어 스프링에서 데이터베이스에 접근하기 위한 기술로 JPA, MyBatis, JDBC같은 것들이 있는데 어떤 기술을 사용하든 일관된 방식으로 데이터베이스에 접근하도록 인터페이스를 지원한다. 

 

한줄로 요약하자면,

IoC 객체의 생성과 관리를 개발자가 아닌 프레임워크가 대신 하는 것
DI 외부에서 객체를 주입받아 사용하는 것
AOP 프로그래밍을 할 때 핵심 관점과 부가 관점을 나누어서 개발
PSA 어느 기술을 사용하던 일관된 방식으로 처리하는 것

 


스프링부트3 백엔드 개발자 되기: 자바 편 책(저자 신선영)을 참고하여 정리한 내용입니다.