Q. 궁금증
gradle에서 library를 어떻게 다운로드 받는지 저번 글에서 간단하게 알아봤다.
build.gradle 에 들어가면
repositories {
mavenCentral()
}
dependencies {
implementation 'org.springframework.boot:spring-boot-starter-thymeleaf'
implementation 'org.springframework.boot:spring-boot-starter-web'
testImplementation 'org.springframework.boot:spring-boot-starter-test'
}
이런 코드가 있는데, 이 설정파일에서 어떤 것을 어디서 다운로드 받는지 설정해두었다.
처음 spring boot 로 프로젝트 생성할 때, dependencies 를 선택하면 자동으로 spring boot에서 build.gradle 파일에 이런 코드를 생성한다.
dependencies에 적힌 libraries를 repositories{ } 에서 받아온다.
지금 같은 경우는 mavenCentral( ) 이라는 곳에서 받는다고 적어둔 것이다.
하지만 여기서 궁금증이 생길 것이다.
분명 우리가 dependencies에서 받아오기로 한 library는 총 2개이다
하지만, 우리의 프로젝트에 있는 external libraries에는 수없이 많은 libraries가 있다.
우린 분명 2개 다운받으라고 했는데 왜 이렇게 많은 libraries가 다운받아진 것일까?
A. DI
intellij 기준으로 창의 맨 왼쪽 아래에 있는 네모 2개 겹친 아이콘을 누르자.
그러면 오른쪽 상단에 gradle이 생긴다.
그걸 클릭하면
이렇게 gradle이 해당 hello-spring 프로젝트에서 어떤 것들을 했는지 보여준다.
여기 dependencies 를 보면 우리가 선택한 2개의 libraries가 있다.
그리고 그 library를 눌러보면
안에 이렇게 많은 libraries가 있다.
이건 안에 속했다는 개념이 아니라, DI 의존성이 주입된 것들을 같이 다운받아줬다는 개념이다.
즉, 우리가 선택한 spring web 과 thymeleaf 를 다운받아서 사용하기 위해서는 수없이 많은 의존성을 가지는 libraries를 같이 다운받아야 한다.
gradle에서는 그것들을 알아서 우리 대신 처리해준다.
그렇기에 우리가 편하게 코드를 짤 수 있는 것이다.
(+a) spring library 조금 더 살펴보기
한번 기본적인 libraries를 조금 더 살펴보자.
(1) spring-boot-starter-web
: 우리가 처음에 spring boot 에서 spring web 을 선택했던 그것이다.
이 library가 DI하고 있는 library 중 핵심은 2가지가 있다. (물론 많은 library가 DI되어 있지만)
spring-boot-starter-tomcat
spring-webmvc
이렇게 2가지이다.
(2) spring-boot-starter-thymeleaf
: 타임리프 template engine 이다. view 단을 다루는 엔진이다
(3) spring-boot-starter (공통)
: spring boot + spring core + logging
구조는
=> spring-boot-starter
=> spring-boot
=> spring-core
=> spring-boot-starter-logging
=> logback , slf4j
요즘엔 거의 spring logging 에서 logback + slf4j 가 표준에 가깝게 많이 사용한다고 한다.
(4) spring-boot-starter-test (테스트용 라이브러리)
: junit (거의 표준으로 junit5를 사용함)
: spring-test (스프링 통합 테스트 지원)
'Web > Spring' 카테고리의 다른 글
[Gradle] 4. 빌드 & 실행 (0) | 2022.02.23 |
---|---|
[Gradle] 3. 간단한 view 단을 띄워보자 (0) | 2022.02.23 |
[Gradle] 1. spring boot 프로젝트 만들기 (0) | 2022.02.22 |
7. [스프링] Bean 과 Singleton(싱글톤)의 관계 (0) | 2022.02.02 |
6. 스프링 설정 파일 (applicationContext.xml) 분리해서 관리하기 (0) | 2022.02.02 |