스프링 부트란?

사공광열·2023년 7월 14일
0

SpringBoot

목록 보기
1/8

스프링 프레임워크

스프링 프레임워크(Spring Framework): 자바(Java) 기반의 어플리케이션 프레임워크

  • 엔터프라이즈급(기업 환경을 대상) 애플리케이션을 개발하기 위한 다양한 기능
  • 현재 우리나라의 전자정부 표준 프레임워크의 기반 기술로 채택
  • 공공기관 웹 서비스를 개발할때 사용
  • 현재 우리나라의 전자정부 표준 프레임워크의 기반 기술로 채택
  • 오픈소스

제어 역전(IoC)

일반적인 자바 개발
객체의 의존성을 생성후 객체에서 제공하는 기능, 쉽게 말해 객채를 생성해서 일련의 작업들을 개발자가 직접 제어합니다.
제어 역전(IoC)
객체를 직접 생성 하지 않고 객체의 생명주기 관리를 외부에 위임합니다.
쉽게 말해 스프링 컨테이너 또는 IoC 컨테이너에 객체 관리를 제어권이 넘어가면 제어 역전이라고 합니다.
  • 의존성 주입(DI: Dependency Injection)
  • 관점 지향 프로그래밍(AOP: Aspect-Oriented Programing)

의존성 주입(DI)

사용할 객체를 직접 생성하지 않고 외부 컨테이너가 생성한 객체를 주입받아 사용하는 방식
  • 생성자를 통한 의존성 주입
  • 필드 객체 선언을 통한 의존성 주입
  • setter 메서드 통한 의존성 주입
어노테이션
@Autowired라는 어노테이션을 사용해 의존성을 주입
//생성자를 통한 의존성 주입
@RestController
public class DIController{
    Myservice myService;
    @Autowired
    public DIController(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)

AOP들어가기전 OOP(객체지향 프로그램밍, Object-Oriented Programming)
  • 추상화(abstraction)
  • 캡슐화(encapsulation)
  • 상속(inheritance)
  • 다형성(polymorphism
이것을 잘 사용할수록 있게 하는것을 AOP입니다.

AOP는 관점을 기준으로 묶어서 개발하는 방식입니다. 예를 들어 어떤 기능을 구현하고자 할떄 "핵심 기능", "부가기능"을 각각 구분해서 하나의 관점으로 보는것입니다.

핵심기능은 비즈니스 로직을 구현하는 과정에서 비즈니스 로직이 처리하는 목적 기능입니다. 예를들어 클라이언트로 부터 상품 정보 등록을 요청을 받아 데이터베이스에 저장 그리고 그 상품 정보를 조회 하는 비즈니스 로직을 구현합니다.
  • 상품 정보를 데이터베이스에 저장
  • 저장된 상품 정보 데이터를 보여주는 코드가 핵심 기능입니다.

OOP 방식으로 핵심 기능을 수행하기 위해 로직, 로깅, 트랜직션 등의 코드를 작성합니다. 이와 보다시피 상품정보 등록 기능과 상품정보 조회 기능은 엄연히 다른 기능으로, 각자 로직이 구현돼 있습니다. 하지만 유지보수 목적이나 데이터베이스 접근을 할때 동일한 기능이 수행할 확률이 높습니다. 따라서 동일한 코드가 포함된다는 것입니다.

AOP의 관점에서 부가 기능은 핵심 기능이 어떤 기능인지 무관하게 로직이 수행 되기전 후에 수행되기만 하면돼서 위와같이 여러 비즈니스 로직에 반복되는 부가 기능을 하나로 묶어서 공통 로직으로 처리해서 모듈에 삽입하는 방식입니다.

  • 컴파일 과정에서 삽입하는 방식
  • 바이트코드를 메모리에 로드하는 과정에 삽입하는 방식
  • 프락시 패턴을 이용한 방식

의존성 관리

스프링 프레임워크에서는 각 모듈의 의존성을 직접 설정해야 하고 또한 호환되는 버전을 명시해야 정상 작동이 됩니다.

스프링부트에서는 불편함을 해소 하기위해 "spring-boot-starter"의존성을 인해 각 라이브러리의 기능과 관련해서 자주 사용되고 서로 호환되는 버전의 모듈 조합을 제공합니다.

  • spring-boot-starter-web: 스프링 MVC를 사용하는 RESTful 애플리케이션을 만들기 위한 의존성입니다. 기본으로 내장 톰캣이 포함돼 있어 jar 형식으로 실행 가능합니다.
  • spring-boot-starter-test: JUnit Jupiter, Mockito 등의 테스트용 라이브러리 포함합니다.
  • spring-boot-jdbc: HikariCP 커넥션 풀을 활용한 JDBC 기능을 제공합니다.
  • spring-boot-starter-security: 스프링 시큐리티(인증, 권한, 인가 등) 기능을 제공합니다.
  • spring-boot-starter-data-jpa: 하이버네이트를 활용한 JPA 기능을 제공합니다.
  • spring-boot-starter-cache: 스프링 프레임워크의 캐시 기능을 지원합니다.

자동 설정

스프링부트에서 스프링 프레임워크 기능을 사용하기위한 자동설정(Auto Configuration)을 지원해서 라이브러리를 실행하는데 필요한 환경을 자동으로 찾아줍니다.
@SpringBootApplication
public class SpringBootApplication{


    public static void main(String[] args){
        SpringtApplication.run(SpringBootApplication.class, args);
    }
}

SpringBootApplication 어노테이션 입니다. 여로 어노테이션을 합쳐놓은 인터페이스입니다.

  • @SpringBootConfiguration
  • @EnableAutoConfiguration
  • @ComponentScan
스프링부트가 실행이 되면 우선 @ComponentScan 어노테이션이 시리즈 어노테이션 붙은 클래스를 빈에 등록합니다. @Component 어노테이션 시리즈들은
  • @Controller
  • @RestController
  • @Service
  • @Repository
  • @Configuration

내장 WAS

스프링 부트의 각 웹 애플리케이션에 내장 WAS(Web Application Server) 가 존재합니다. 가장 기본적인 의존성이 spring-boot-starter-web이 톰캣 내에 내장합니다.

모니터링

개발이 끝나고 이제 서비스를 운영할때 시스템에 사용되는 스레드, 메모리, 세션등들을 모니터링을 해야해서 스프링 부트 액추에이터 도구가 있습니다.
profile
Interactive Developer

0개의 댓글