본문 바로가기
JAVA/Spring

Spring boot로 migration하기 전 고려해볼 것들?(+스프링부트 개념정리)

by lumayi 2021. 10. 18.

새로운 프로젝트를 착실히 진행해나가고 있는 요즘,

하나의 영상을 보고 이대로 해도 되는게 맞나? 라는

생각이 들었다...

 

며칠전 배민 우테코 영상에서

이제는 작별을 해줘야할 기술들에 대한 언급이 잠깐 있었는데

그것은 바로 jsp와 jquery였다...

 

나는 jsp의 기능을 완전히 쓰고 있진않았지만,

그래도 view를 jsp확장자로 처리하고 있었고,

jquery도 좋은게 있으면 가끔 쓰기도 했었는데...

 

이게 실무에서는 쓰지않고 죽은 기술이라고하니... 

이대로 프로젝트를 진행해도 되는건가...

이렇게 공부를 하는 것이 나에게 도움이 되는건가..

라는 생각이 들었다.

 

그래서 실무에서 쓰는 기술로 공부를 하자라는 생각에

spring대신 boot, jsp대신 Thymeleaf로 진행해보기로 했다.

 

그렇게 migration을 준비하던 와중,

좋은 글을 봤다.

 

https://brunch.co.kr/@springboot/91

 

스프링 부트 전환 - 리스크 최소화 작업

- 소심한 개발자가 스프링 부트 전환할 때는 이렇게 하면 된다. | 지난주에 작업 했던 스프링 부트로 전환 과정을 간단하게 글로 남긴다. 참고로, 회사 소스는 보안상 외부에 글로 남길수가 없

brunch.co.kr

 

스프링부트로 전환하기전에

이 개념들을 모른다면 진행하지 말라던 글을 읽고,

다시 개념들을 찬찬히 공부해보기로 했다.

 

-XML Bean 설정 방법

-Java @Bean 어노테이션 설정 방법

-Java -@Component, @ComponentScan 개념 이해

-스프링 DI 기본 개념

-@SpringBootApplication 어노테이션이란?

-Autoconfiguration 개념 이해

 

약 이렇게 6가지의 필수 기본 개념이 있다.

저번 포스팅에서 1,2,3에 대한 이야기를 했으니 오늘은 4,5,6에 대해 공부해보려한다.

https://suzyalrahala.tistory.com/36

 

[Spring] Spring Bean이란?(+bean을 등록하는 방법)

Spring Bean을 이해하려면 제어의 반전(Inversion Of Control)에 대한 이해가 선행되어야 한다! 저번에 Spring에 대해서 공부를 하면서 제어의 반전(IOC)라는 특성을 공부했었는데 요약하자면, 개발자가 일

suzyalrahala.tistory.com

(1,2,3에 대한 내용의 포스팅)

 

 

Spring DI란 무엇일까?

DI는 Dependency Injection으로 의존성 주입이다.

 

우리가 직접 클래스와 객체를 생성할 때, 그 객체들 사이에 의존성을 만들어준다고 볼 수 있다.

저번 포스팅에서 말했던 제어의 역전(IoC) 개념이 다시 나오게 되는데,

의존성을 스프링이 만드는 것이 바로 스프링 DI이다.

 

 

그렇다면 의존성은 어떻게 만들 수 있을까?

 

첫 번째 방법으로는

Main에서 클래스의 객체를 직접 생성하는 방법이 있고,

 

두 번째 방법으로는

스프링 DI의 방식인 클래스에서는 기능만 만들고,

다른 클래스에서 파라미터 등 필요한 속성들을 setter로 만들어서

xml파일에서 bean으로 그 속성들을 쉽게 제어할 수 있는 것이 스프링 의존성 주입이다.

 

기능의 수정이 필요해도 Main에서 모든 코드를 고치지 않고도,

xml 파일의 속성만 바꾸어 주는 것으로 간단하게 수정이 가능하다!

 

이것이 바로 의존성 주입의 장점.

객체들간의 의존도(=결합도)를 낮춰준다!

클래스의 수정이 있어도 메인 클래스에서 다 찾아서 하나하나 수정하지 않아도 된다는 것!

 

((두 가지 방법의 자세한 코드 예시는 여기로

: https://private.tistory.com/39

정리를 굉장히 잘해주셨다!))

 

 

다음으로

@SpringBootAnnotation이란?

@SpringBootConfiguration + @EnableAutoConfiguration + @ComponentScan

의 조합이라고 하는데 이게 뭐지??

하나하나씩 뜻을 알아보고 조합이 의미하는게 뭔지 알아보자!

 

AutoConfiguration이 포함되어 있으니

자동적으로 마지막의 개념까지 완성이 되겠다!

 

 

먼저 @SpringBootConfiguration이란?

객체 설정을 담당하는 클래스라고 Bean Factory에게 알려주는 역할을 하는 @Configuration이 있다.

@SpringBootConfiguration도 같은 역할을 하지만

차이점은 Configuration과 달리 으로 구성을 찾을 수 있다는 것이다!

 

 

두 번째로 @EnableAutoConfiguration이란?

Bean을 정의하면 그 bean들은 spring-boot-autoconfigure이라는 폴더안에 위치하게 된다.

그렇게 정의되어있는 Bean들을 가져와서 등록해주는 스프링부트의 핵심 기능이다!

 

 

그리고 마지막으로 @ComponentScan이란?

이것도 저번 포스팅에서 익혔던 어노테이션인데,

빈으로 등록하고 싶은 컴포넌트가 있을 때 알려주는 역할의 어노테이션이다.

현재 위치의 패키지 안에서 래와 같은 클래스들을 찾아서 빈으로 등록한다!

@Component
@Configuration
@Repository
@Service
@Controller
@RestController

 

그래서 즉 @SpringBootAnnotation이란
자동으로 객체 설정을 담당하는 클래스를 찾고,
정의 된 빈들을 읽어오고 등록, 생성하는 역할을 하는 것이다!

 

그리고 스프링은

이 어노테이션 아래부터 설정을 읽어나가기 때문에

항상 프로젝트의 최상단에 위치해야한다.

 

 

참고 사이트:

https://private.tistory.com/39

https://coooding.tistory.com/33

반응형