스프링부트란?

GaEun Kim·2023년 5월 13일
0

Spring Boot

목록 보기
1/4
post-thumbnail

스프링 프레임워크(Spring Framework)

자바(Java)기반의 애플리케이션 프레임워크로 엔터프라이즈급 애플리케이션을 개발하기 위한 다양한 기능을 제공. 스프링은 목적에 따라 다양한 프로젝트를 제공하는데, 그중 하나가 스프링 부트(Spring Boot)이다.

스프링 프레임워크 : 설계와 구현을 재사용 가능하도록 협업화된 형태로 제공하는 소프트웨어 환경

엔터프라이즈급 개발 : 기업환경을 대상으로 하는 개발. 네이버나 카카오톡 같은 대규모 데이터를 처리하는 환경을 엔터프라이즈 환경이라고 부름. 스프링은 이 환경에 알맞게 설계돼 있어 개발자는 애플리케이션을 개발할 떄 많은 요소를 프레임워크에 위임하고 비즈니스 로직을 구현하는 데 집중할 수 있음.

제어 역전(IOC)

사용하려는 객체를 선언하고 해당 객체의 의존성을 생성한 후 객체에서 제공하는 기능을 사용.

객체를 생성하고 사용하는 일련의 작업을 개발자가 직접 제어하는 구조

일반적인 자바 코드에서의 객체 사용법

// 일반적인 자바 코드에서의 객체 사용법

@RequestController
public class NoDIController {

	private MyServiece service = new MyServieceImpl();

	@GetMapping("/no-di/hello")
	public String getHello() {
		return service.getHello();
	}
}

제어 역전(IoC; Inversion of Control)을 특징으로 하는 스프링은 기존 자바 개발 방식과 다르게 동작.

따라서 IoC를 적용한 환경에서는 사용할 객체를 직접 생성하지 않고 객체의 생명주기 관리를 외부(스프링 컨테이너(Spring container) 또는 Ioc 컨테이너(Ioc Container))에 위임.

객체의 관리를 컨테이너에 맡겨 제어권이 넘어간 것을 제어 역전이라고 부르며, 제어 역전을 통해 의존성 주입(DI; Dependency Injection), 관점 지향 프로그래밍(AOP; Aspect-Oriented Programming) 등이 가능

의존성 주입(DI)

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

스프링에서 의존성을 주입하는 방법

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

스프링에서는 @Autowired라는 어노테이션(annotaion)을 통해 의존성을 주입할 수 있음
스프링 4.3 이후 버전은 생성자를 통해 의존성을 주입할 때 @Autowired 어노테이션 생략 가능

// 생성자를 통한 의존성 주입

@RestController
public class DIController{
	
    MyService myService;
    
    @Autowired
    public DIContorller(MyService myService) {
    	this.myService = myService;
    }
    
    @GetMapping("/di/hello")
    public String getHello() {
    	return myService.getHello();
    }
    
}
//필드 객체 선언을 통한 의존성 주입

@RestController
public class FieldInjectionController {
	
    @Autowired
    private MyService myService;
}
// setter 메서드를 통한 의존성 주입
@RestController
public class SetterInjectionController {
	
    MyService myService;
    
    @Autowired
    public void setMyService(MyService myService) {
    	this.myService = myService
    }
}

스프링 공식 문서에서 권장하는 의존성 주입 방법은 생성자를 통해 의존성을 주입받는 방식임. 다른 방식과는 다르게 생성자를 통해 의존성을 주입받는 방식은 레퍼런스 객체 없이는 개체를 초기화할 수 없게 설계할 수 있기 때문

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

관점을 기준으로 묶어 개발하는 방식 즉 여러 비즈니스 로직에서 반복되는 부가 기능을 하나의 공통 로직으로 처리하도록 모듈화해 삽입하는 방식

관점이란 어떤 기능을 구현할 떄 그 기능을 '핵심 기능'(비즈니스 로직을 구현하는 과정에서 비즈니스 로직이 처리하려는 목적 기능)과 '부가 기능'(핵심 기능인 비즈니스 로직 사이에 로깅 처리를 하거나 트랜잭션을 처리하는 코드)으로 구분해 각각을 하나의 관점으로 보는 것

OOP(객체 지향 프로그래밍) : 각 기능을 재사용 가능한 개별 객체로 구성해 프로그래밍하는 것

  • 추상화(abstraction) : 프로그래머들이 특정코드를 사용할 때 필수적인 정보를 제외한 세부사항을 가리는 것
  • 캡슐화(encapsulation) : 객체의 일부 구현 내용에 대한 외부로부터의 직접적인 액세스를 차단하는 것, 객체의 속성과 그것을 사용하는 행동을 하나로 묶는 것
  • 상속(inheritance) : 두 클래스 사이에 부모자식 관계를 설정하는 것
  • 다형성(polymorphism) : 하나의 변수가 서로 다른 클래스의 인스턴스를 가르킬 수 있는 성질


위 사진은 OOP 형식으로 작성한 비즈니스 로직의 예시임
OOP 방식의 애플리케이션 로직은 핵심 기능을 구현한 두 로직에 동일한 코드가 포함된다.


위 사진은 AOP 방식의 애플리케이션 로직의 예시임
AOP 방식은 여러 비즈니스 로직에서 반복되는 부가 기능을 하나의 공통 로직으로 처리하도록 모듈화해 삽입
스프링 AOP의 목적은 OOP와 마찬가지로 모듈화해서 재사용 가능한 구성을 만드는 것이고, 모듈화된 객체를 편하게 적용할 수 있게 함으로써 개발자가 비즈니스 로직을 구현하는 데만 집중할 수 있게 도와주는 것

profile
꼬마개발자

2개의 댓글

comment-user-thumbnail
2023년 11월 20일

Transaction nods에서 Main route의 과부하 발생 시 전체 로직이 손상될 수 있나요?

1개의 답글

관련 채용 정보