똑같은 삽질은 2번 하지 말자

Spring Boot 개념다지기 No.2 본문

Spring/Spring Boot

Spring Boot 개념다지기 No.2

곽빵 2020. 4. 19. 16:19

오늘도 공부를 시작해 보자!

 

Spring Boot의 프로젝트 구조

 

스프링 부트의 프로젝트 구조.. 음 아직 이것저것 추가안해서 아무것도 없는 상황이지만,

일단 대표적으로 java, resources 두개의 폴더가 보이는데, java에는 말그대로 자바코드로 이루어진 모든게 들어가고

resources는 자바코드가 아닌 모든 파일이 들어간다.

resources에는 ClassPath prefix 를 이용하면 쉽게 접근이 가능

 

그리고 Main Class? 라고 불러야하나 그 친구의 위치가 중요하다.

밑의 사진의 친구가 중요한게 저 클래스가 제일 상위의 패키지에 있어야 그 밑에 있는 여러 Bean들이

자동으로 등록이 되는거다.

 

 

한눈에 보는 구조
@SpringBootApplication 어노테이션을 따라가서 찍은 사진

위 사진을 보면 이게 실행되면 ComponentScan이 이루어지는걸 볼 수 있다.

 

 

Spring Boot 의존성 관리

 

그리고 보면 pom.xml에 딱히 Version을 기입한적이 없는데 잘 돌아가는 걸까?

spring-boot-starter-parent -> 첫날에 정의한 pom.xml의 이 친구를 따라가보면

spring-boot-dependencies가 보인다. 여기에 들어가보면 수많은 라이브러리가 보이는데 (버전이 기입된)

여기서 가져오는거다.

 

또 parent를 받아서 쓰면 의존성관리 뿐만아니라 UTF-8 설정 플러그인 설정, 다양한 기능이 많기때문에

받아 쓰는걸 권장한다. (dependencyManagement 쓰지 않고)

 

 

Spring Boot 의존성 활용

 

간단하다..dependencies에 

 

 

이렇게 추가하면 된다.

 

무슨 의존성이 있는가 검색하고 싶을때는 이 사이트에 가서 ㄱㄱ

https://mvnrepository.com/

 

Maven Repository: Search/Browse/Explore

bboss http an http cluster lb component. Last Release on Apr 18, 2020

mvnrepository.com

 

 

version 관리가 안되는건 version까지 써 줘야되고

version 관리가 되고있는데 version을 바꾸고 싶을때는,

이렇게 properties 속성을 추가해서 내가 사용하고 싶은 버전을 쓰면된다.

이건 spring-boot-dependencies 에 들아가면 있는걸 복붙해서 내가 버젼만 5.0.7 -> 5.0.6 으로 바꾼 것

 

자동설정이해

@EnableAutoConfiguration 

 

@EnableAutoConfiguration (@SpringBootApplication 안에 숨어 있음) 

빈은 사실 두 단계로 나눠서 읽힘 

 

1단계: @ComponentScan 

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

같은 애들이 읽히고

 

2단계: @EnableAutoConfiguration

 

META_INF 파일 안 spring.factories의

org.springframework.boot.autoconfigure.EnableAutoConfiguration  안에 있는 목록들 읽어들인다.

@Configuration (자바 설정)

@ConditionalOnXxxYyyZzz  -> 이 컨디션에 따라 읽히거나 안 읽히거나 한다.

 

이렇게 1단계 2단계로 나누어져 있는데, 혹시나도 Bean이 겹치는 경우는

ConditionalOn 요놈으로 조정 하면 된다. Bean있으면 하지마라 뭐 이런식으로? => @ConditionalOnMissingBean

 

 

@ConfigurationProperties -> 이건 application.properties 에서 빈 재정의를 하기 싫을때 쓰는 어노테이션..

 

 

 

Comments