본문 바로가기
개발 관련 공부/스프링부트 핵심 가이드

01 스프링 부트란?

by 슴새 2023. 9. 30.
반응형

1.1 스프링 프레임워크

스프링 프레임워크: 자바에서 가장 많이 사용하는 프레임워크

 

스프링의 특징

- 제어 역전(IoC)

객체의 관리를 컨테이너에 맡겨 제어권이 넘어간 것을 제어 역전이라고 부른다.

제어 역전을 통해 의존성 주입(DI), 관점 지향 프로그래밍(AOP)가 가능해진다.

 

그러니까 객체의 생명주기 관리 등을 컨테이너 라는 것이 해주고, 개발자는 비지니스 로직을 작성하는데만 집중할 수 있다.

 

- 의존성 주입(DI)

제어 역전의 방법 중 하나

사용할 객체를 new 로 생성하는 것이 아니라, 외부 컨테이너가 생성한 객체를 주입받아 사용한다.

 

의존성 주입에는 3가지 방법이 있다.

- 생성자 주입

- 필드 객체 선언을 통한 주입

- 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 SetterInjectionController {

        MyService myService;

        @Autowired
        public void setMyService(MyService myService) {
            this.myService = myService;
        }

    }

setter 주입 방식

 

@RestController
    public class SetterInjectionController {

        @Autowired
        MyService myService;
 
    }

필드 객체 선언 방식

 

 

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

핵심 기능을 구현한 로직들에 공통으로 구현하는 로직이 있을 수 있다.

내 생각에, 예를 들어  rest api 설계시 암호화된 파라미터를 받아서 복호화 후 핵심 로직 처리 후 result 값을 다시 암호화해서 보낸다거나 하면, 이런 암복호화 부분은 핵심로직과 관계없이 항상 수행해야 할 가능성이 있다.

 

이처럼 여러 비지니스 로직에서 반복되는 부가 기능을 하나의 공통 로직으로 처리하도록 모듈화해 삽입하는 방식을 AOP 라고 한다.

참고: https://g1etistory.tistory.com/157

 

[스프링 입문] 섹션 7 AOP

AOP가 필요한 상황 AOP가 무엇인지 살펴보기에 앞서... 먼저 회원가입 시간, 회원 조회 시간을 측정하고 싶다고 하자. public Long join(Member member) { long start = System.currentTimeMillis(); try { validateDuplicateMembe

g1etistory.tistory.com

 

1.2 스프링 프레임워크 vs 스프링 부트

스프링 부트는 스프링보다 각종 설정에 있어서 훨씬 간편하다.

내장 was 를 가지고 있어 특별한 설정 없이도 톰캣을 실행할 수 있다.

심지어 모니터링도 더 쉽다고 함!

그냥 부트가 모든 면에서 더 좋은 것 같다.

반응형

댓글