Spring과 SpringBoot의 정의 및 관련 단어 정리(Bean, 컨테이너 등)

LeeYulhee·2023년 7월 24일
1

👉Spring과 SpringBoot


📌 Spring이란?

  • 설명
    • Spring의 주요 목표는 Java 애플리케이션 개발을 간편하게 만들고, 유지 보수를 쉽게 하기 위한 것

  • 장점
    • 강력한 IoC 컨테이너와 AOP 지원, 풍부한 데이터 접근과 트랜잭션 관리 기능, 풍부한 서드파티 라이브러리와 통합, 웹 MVC 지원, 유연한 구조 등
    • 잘 정리된 문서와 광범위한 커뮤니티 지원

  • 단점
    • 시작 시간과 메모리 사용량이 비교적 높을 수 있음
    • 학습 곡선이 높을 수 있음

📌 Spring 의 주요 기능은?

  • Inversion of Control (IoC) 컨테이너
    • Spring의 핵심 기능 중 하나로, 객체의 생성과 관리를 담당
    • IoC 컨테이너를 통해 개발자는 객체 간의 의존성을 쉽게 관리할 수 있으며, 이를 통해 코드의 결합도를 낮추고 유연성을 높일 수 있음

  • Aspect-Oriented Programming (AOP)
    • AOP는 특정 로직을 공통 모듈로 만들어서 여러 코드에 쉽게 적용할 수 있도록 함
    • 이를 통해 중복 코드를 줄이고, 코드의 가독성을 높일 수 있음

  • 데이터 접근과 트랜잭션 관리
    • Spring Framework는 JDBC, JPA 등 다양한 데이터 접근 기술을 지원
    • 또한 선언적 트랜잭션 관리를 제공하여 데이터의 일관성을 보장하고, 데이터 관련 코드를 간결하게 만들 수 있음

  • MVC 웹 애플리케이션 개발
    • Spring MVC는 Model-View-Controller 디자인 패턴을 따르는 웹 애플리케이션 개발 프레임워크
    • 개발자는 이를 통해 손쉽게 웹 애플리케이션을 개발할 수 있음

  • 통합 지원
    • Spring Framework는 JMS, E-mail, 스케쥴링 등 다양한 엔터프라이즈 서비스를 지원
    • 이를 통해 복잡한 기술을 쉽게 사용할 수 있음

📌 SpringBoot란?

  • 설명
    • Spring 기반의 애플리케이션을 쉽고 빠르게 개발할 수 있도록 도와주는 프레임 워크
    • ‘Convention over Configuration’ 원칙을 따르며, 개발자가 복잡한 설정을 하지 않아도 기본적인 설정을 제공하므로 개발 시간을 크게 줄일 수 있음

📌 SpringBoot 의 주요 기능은?

  • 자동 구성(Auto-configuration)
    • SpringBoot는 classpath 설정, 다른 bean, 다양한 프로퍼티 설정에 기초하여 Spring 애플리케이션에 대한 합리적인 기본 설정을 제공

  • 스타터 의존성(Starter Dependencies)
    • SpringBoot는 ‘starters’라는 의존성 집합을 제공하여 Maven이나 Gradle 설정을 간소화하고, 통합을 쉽게 만듦

  • 내장 서버(Enbedded Servers)
    • Tomcat, Jetty, Undertow 등의 내장 서버를 통해 독립 실행형 Java 애플리케이션으로 배포 가능하게 함

  • 상태 체크 및 외부 구성(Health checks & Externalized Configuration)
    • SpringBoot는 애플리케이션 상태 체크 기능을 제공
    • 외부 구성을 통해 애플리케이션의 동작 방식을 변경하는 데 도움이 됨

  • 애플리케이션 모니터링
    • SpringBoot Actuator를 통해 애플리케이션의 상세 정보를 모니터링하고 관리할 수 있음

📌 Spring을 대체할 수 있는 프레임 워크

Spring을 포함해서, 이들 모두 복잡한 애플리케이션 개발을 단순화하고 생산성을 높이는 목표를 공유
  ➡️ 목표를 달성하기 위해 다른 방법과 특징을 갖고 있음

  • ⚡Quarkus
    • 설명
      • Quarkus는 Java를 위한 Kubernetes 네이티브 프레임워크로, GraalVM 및 HotSpot을 위한 가벼운 Java 애플리케이션을 개발할 수 있음
      • 즉각적인 부팅 시간, 적은 메모리 소비 등이 특징
    • 장점
      • 빠른 시작 시간과 적은 메모리 사용량
      • GraalVM과 HotSpot 최적화, Kubernetes 네이티브 프레임워크로서 컨테이너 운영 환경에 특화
    • 단점
      • 아직은 비교적 새로운 플랫폼이라서 생태계와 커뮤니티가 Spring에 비해 덜 발전되어 있을 수 있음

  • ⚡Micronaut
    • 설명
      • Micronaut은 클라우드 네이티브 애플리케이션 개발을 위한 모던 JVM 기반 프레임워크
      • 빠른 시작 시간, 메모리 절약, 빌드 시간에 의존성 주입을 해결하는 등의 특징을 가짐
    • 장점
      • 빠른 시작 시간과 적은 메모리 사용량, 빌드 시간에 의존성 주입과 AOP 처리를 수행하여 런타임 성능을 개선
      • 클라우드 네이티브 애플리케이션에 특화
    • 단점
      • 마찬가지로 비교적 새로운 플랫폼이므로 생태계와 커뮤니티가 Spring에 비해 덜 발전되어 있을 수 있음

  • ⚡Vert.x
    • 설명
      • Vert.x는 이벤트 드리븐 아키텍처를 지원하는 JVM 기반 툴킷
      • Vert.x는 비동기 I/O 작업에 최적화되어 있으며, 다양한 언어를 지원
    • 장점
      • 이벤트 드리븐 아키텍처를 지원하여 높은 성능을 달성할 수 있으며, 다양한 언어를 지원
    • 단점
      • Vert.x만의 독특한 프로그래밍 모델에 적응하는 데 시간이 걸릴 수 있음

  • ⚡Jakarta EE (Java EE)
    • 설명
      • Jakarta EE는 대형 엔터프라이즈 애플리케이션을 개발하기 위한 서버 측 표준 플랫폼
      • 일부 개발자들은 Spring보다 Jakarta EE를 선호하며, Jakarta EE는 특히 큰 조직에서 많이 사용됨
    • 장점
      • 산업 표준이며, 대형 엔터프라이즈 애플리케이션 개발에 많이 사용
      • 광범위한 API를 제공하고, 거대한 커뮤니티와 시장 점유율
    • 단점
      • 높은 시작 시간과 메모리 사용량, 그리고 무겁고 복잡한 기능 집합으로 인한 복잡도가 있을 수 있음


👉단어의 정의 및 질문 정리


📌 Spring 컨테이너란?

  • Spring 컨테이너는 Spring 프레임워크의 핵심 부분으로, 빈(Bean) 생명주기를 관리
  • 컨테이너는 빈을 생성하고, 빈 간의 의존성을 처리하고, 빈을 구성하고, 빈을 파괴하는 역할을 함
  • 인풋을 가지고 실행되는 시스템을 만드는 것을 나타냄
  • 해당 용어는 Spring 프레임워크의 IoC 컨테이너를 의미함

📌 IoC 란?

  • IoC(Inversion of Control) = 제어의 역전
  • 원래는 객체가 필요한 곳에 직접 객체를 생성했지만, 제어의 역전은 다른 객체를 직접 생성하거나 제어하는 것이 아니라 외부에서 관리하는 객체를 가져와 사용하는 것

📌 IoC 컨테이너란?

  • IoC(Inversion of Control) 컨테이너는 객체의 생명주기와 의존성을 관리하는 컨테이너
  • Spring의 IoC 컨테이너는 객체 생성, 의존성 주입, 생명주기 관리를 담당
  • 개발자가 직접 객체의 생성과 관리를 수행하는 것이 아니라 컨테이너가 이를 대신 수행

📌 Spring 컨텍스트(Context)란?

  • Spring 컨텍스트는 Spring 컨테이너의 확장으로서, 애플리케이션 실행 환경을 제공
  • Spring 프레임워크에서 제공하는 IoC 컨테이너의 구현체 중 하나
  • Spring 컨텍스트는 IoC 컨테이너의 역할을 수행하며, 애플리케이션의 설정 정보를 바탕으로 빈(Bean) 객체들을 생성, 관리하고 의존성 주입을 수행
  • Spring 컨텍스트는 AOP(Aspect-Oriented Programming), 이벤트 공개, 리소스 로딩 등과 같은 추가적인 서비스를 제공

📌 애플리케이션 컨텍스트란?

  • 애플리케이션 컨텍스트는 Spring의 IOC 컨테이너를 더 고수준에서 확장한 것으로, 스프링에서 애플리케이션 런타임 환경을 나타냄
  • 이 컨텍스트는 빈 팩토리 기능 외에도 메세지 소스 처리(국제화 지원), 이벤트 발행, 애플리케이션 계층에서의 특정 문맥에 대한 접근 등 다양한 기능 제공

📌 Bean이란?

  • Bean은 Spring IoC 컨테이너에서 관리되는 객체
  • 이들은 Spring 컨테이너에서 생성, 구성, 관리되며, 의존성은 자동으로 주입됨

📌 Java Bean과 Spring Bean의 차이점?

  • Java Bean은 재사용 가능한 컴포넌트로, getter와 setter를 가지고 있는 POJO(Plain Old Java Object)
  • 반면, Spring Bean은 Spring IoC 컨테이너에 의해 인스턴스화, 조립, 관리되는 객체

📌 Spring 프레임워크가 관리하는 Bean을 모두 나열하려면?

  • Spring에서 제공하는 ApplicationContext 인터페이스의 getBeanDefigitionNames 메서드를 사용하면 등록된 모든 빈의 이름을 가져올 수 있음

📌 여러 개의 Bean을 사용할 수 있는지?

  • Spring은 기본적으로 빈 이름으로 빈을 조회하며, 같은 타입의 빈이 여러 개 있다면 이름을 지정해서 원하는 빈을 가져올 수 있음
  • 만약 빈의 우선순위를 결정해야 한다면 @Primary 어노테이션을 사용해서 우선순위를 지정할 수 있음

📌 Spring이 객체를 만들게 할 수 있는가?

  • Spring은 빈의 정의에 따라 객체를 만들 수 있음
  • 이는 Spring IoC 컨테이너가 빈 설정 파일(XML, Java, Config 등)을 읽고, 해당 정의에 따라 빈을 생성, 초기화, 조립하는 방식으로 작동
  • 이렇게 Spring이 관리하는 빈은 의존성 주입(DI)을 통해 다른 빈과 연동되며, Spring 컨테이너가 빈의 생명주기를 관리

📌 의존성이란?

  • 객체 지향 프로그래밍에서 주로 사용되는 개념
  • 한 객체가 다른 객체 없이 제대로 된 기능을 수행할 수 없을 때, 그 객체는 다른 객체에 ‘의존’한다고 말함
    • ⇒ 이러한 관계를 ‘의존성’이라고 부름

📌 의존성 주입(DI)이란?

  • 객체 지향 프로그래밍에서 의존성을 관리하는 방법 중 하나
  • 의존성을 어떻게 처리하냐에 따라 ‘의존성 주입’이라는 개념이 등장
    • 일반적으로 객체는 자신이 의존하는 객체를 직접 생성하거나 찾아서 사용하는데, 이런 방식은 코드 간의 결합도가 높아져 변경이 어려워짐
      • 자동차가 엔진을 직접 만들어 사용하면, 엔진의 종류나 생성 방식이 바뀔 때마다 차도 바뀌어야 함
    • 이 문제를 해결하기 위해 의존성 주입 사용
  • 객체가 다른 객체와 상호 작용하는 데 필요한 ‘의존성’을 직접 생성하거나 검색하는 대신 외부 시스템이 이를 제공하는 것
  • 이를 통해 코드 간의 느슨한 결합이 가능해져 유지 보수와 테스트가 용이해짐
profile
공부 중인 신입 백엔드 개발자입니다

1개의 댓글

comment-user-thumbnail
2023년 7월 24일

글 잘 봤습니다.

답글 달기