Spring / Spring Boot 알아가기

Doridam·2023년 5월 31일
1

Spring🌱 & Boot 🌼

목록 보기
1/12
image.jpg1image.jpg2

Spring🌱

EJB (Enterprise Java Beans) 를 사용했다가 낮은 개발생산성을 인해 만든것이 Spring 이다.

다양한 편의성을 제공하여 개발을 편하게 해주는 엔터프라이즈용 경량급 프레임워크임.

👍 경량급

  • 프레임워크 자체는 무겁지만 라이브러리나 많은 인터페이스로 구현이 되어 있기 때문에
    실제 작성 코드가 적어 경량급으로 칭함.

특징

POJO (plain Old Java Object) : 순수한 Java 만을 사용한 객체를 뜻함.

Spring이 탄생하게된 이유.
EJB (Enterprise Java Beans) 를 사용했다가 낮은 개발생산성을 인해 만든것이 Spring 이다.
순수한 자바객체로 특정 라이브러리, 환경, 프레임워크에 의존하지 않고 종속되지 않게 해야하는 개발론.


IoC (Inversion of Control) : "제어의 역전" / DI (dependency Injection) : "의존성 주입"

  • 의존관계로 사용될 클래스를 직접 생성하는게 아닌 외부로부터 필요한 때에 생성하는것. IoC 컨테이너에서 관리된다.

  • DI와 같은 작업을 개발자가 하는게 아닌 프레임워크가 해준다.

  • 보통 3가지 방법을 통해 DI를 할 수 있다.
  1. 생성자 주입 : 생성자를 통한 의존성 주입. 스프링에서 권장하는 방법
class A {
	private final B b;
    // 생성자를 통한 주입
    public A(B b){
    this.b = b;
    }
}
  1. 필드 주입 : 필드에 @Autowired 어노테이션을 사용한 주입.
class A {
	@Autowired
    private B b;
}
  1. Setter 주입 : 가변객체를 주입해야할 상황에서 사용됨 / 거의 없음
class A {
	@Autowired
    public void setB(B b){
    	this.b = b;
    }
}

☝ 기본적으로 생성자 주입이 권장된다.

순환참조 예방

**Application 작동시점**에서 순환참조를 확인할 수 있다.
※ Spring Boot 2.6 부터는 순환참조가 기본적으로 허용되지 않기 때문에 
이하 버전에서만 효과가 있다.

불변성 보장

Application 실행 시점에서 의존성이 주입되고 final 키워드를 사용하여 다른 방법과 달리
객체의 불변성 을 보장할 수 있다.

테스트의 편리함

컴파일 시점의 객체를 주입받아 테스트 코드 작성이 가능하고, 누락 객체가 있을 경우 
컴파일 시점에서 확인되기 때문에 테스트를 보다 쉽게 할 수 있다.

AOP (Aspect Oriented Programming) : "관점 지향 프로그래밍"

공통으로 사용되는 기능 혹은 로직을 분리하여 재사용, 유지보수가 용이하게 하는것.
@Aspect 어노테이션을 사용하며

	@Aspect
   	class A{
    	// Around: 타켓의 실행 전후로 처리 됨
    	@Around("b()")
		public void test(){
      		// b() 메소드의 적용될 코드
        }
        // Before: 타켓이 실행 전 처리 됨
        @Before("b()")
        public void test2(){
      		// 생략
        }
        // After Returning: 타겟이 실행 후 처리 됨
        @After Returning("b()")
        public void test3(){
  		// 생략
        }
        // After Throwing: 타겟이 예외를 발생시키면 처리 됨
        @After Throwing("b()")
        public void test4(){
  		// 생략
        }
	}

이와 같이 실행, 예외처리 이벤트 발생시 처리되게 할 수 있다.


PSA (Portable Service Abstraction) : "간편한 추상화 서비스"

같은 추상화 계층내에 다른 서비스로 비즈니스 로직의 수정없이 교체가 가능하다.

   의존성을 spring-boot-starter-web > spring-boot-starter-webflux로
   변경만 해도 tomcat이 아닌 netty로 실행이 가능하다.
   ↳ 스프링에서 서비스가 추상화된 인터페이스를 제공해주기 때문

장점

정형화 :

  • 라이브러리, 추상화 인터페이스 등 정형화된 부분으로 일정 수준 이상의 품질을 유지하고 생산성이 증가한다.


IoC / DI :

  • 개발자가 해야할 부분을 프레임워크가 해줌으로써 생산성이 증가한다.


Spring Boot 🌼

설정이 간편한 스프링기반 프레임워크

기본적인 부분은 스프링과 동일함.

spring initializr 를 통해 만들거나 InteillJ와 같은 IDE를 통해 프로젝트 생성가능

장점

내장 WAS :

  • 프로젝트내에 WAS를 가지고 있어 간편함.

    spring-boot-starter-web이 Tomcat을 내장
    spring-boot-starter-webflux의 경우 netty로 설정가능


자동 환경설정 :

  • application.properties에 DB, View, logging 등 간편하게 설정 할 수 있음.


배포 :

  • Jar로 프로젝트 빌드가 가능하다.

    Jar로 빌드하여 간단한 배포가 가능함.

profile
도리도리담담 🐤🐥🐤🐥🐣🐣

0개의 댓글