오늘은 gradle 의존 관계에 대해 알아보자.
먼저 Gradle이 뭘까?
Gradle은 오픈소스 빌드 자동화 툴이다.
Gradle 은 거의 모든 타입의 소프트웨어를 빌드 할 수 있다.
1. High Performance
Gradle 은 실행시켜야만 하는 task 외에는 다른 불필요한 동작은 하지 않는다. 또, build cache를 사용함으로써 이전 task output 을 재사용 할 수 있다.
마지막으로 build cache를 공유하여 성능을 높일 수 있다.
2. JVM Foundation
Gradle은 JVM 에서 실행되고 ,JVM 을 실행하려면 JDK를 설치해야 한다.
따라서 Java Standard API를 빌드 로직에 사용할 수 있다. 또한 Gradle을 다양한 플랫폼에서 실행할 수 있다.
3. Conventions
Gradle은 Maven으로 부터 의존 라이브러리 기능을 차용했다.
따라서 컨벤션을 따라 자바 프로젝트와 같은 일반적인 유형의 프로젝트를 쉽게 빌드 할 수 있다.
4. Extensibility
Gradle을 확장하면 고유의 task 타입을 제공하거나 모델을 빌드할 수 있다.
5. IDE, Build Scan support
Android Studio, IntelliJ IDEA, Eclipse 등의 IDE에서 Gradle을 임포트하여 사용할 수 있다. 그리고 빌드를 모니터링할 수 있는 Build Scan을 지원한다.
의존성은 모듈로 제공되는데 이 모듈들을 저장하고 있는 곳을 repository 라고 한다. 레포지토리는 원격이 될 수도 있고 로컬이 될 수도 있다.
Gradle 에게 어디서 의존성을 가지고 올 것인지 알려줄 때는 레포지토리 선언을 통해서 할 수 있다.
Gradle은 특정 task를 실행시키기 위해 필요한 의존성들을 런타임시에 원격으로 다운로드 받거나 로컬에서 가져온다. 멀티프로젝트를 구성했을 때 다른 프로젝트에서 가져온다. 이 과정을 dependency resolution 이라고 한다.
향후에 불필요한 네트워크 호출을 하지 않기 위해 dependency cache 라는 로컬 캐시에 저장한다.
라이브러리 의존성 설정은 build.gradle 스크립트 파일에서 할 수 있다.
- spring-boot-starter-web
● spring-boot-starter-tomcat: 톰캣 (웹서버)
● spring-webmvc: 스프링 웹 MVC
- spring-boot-starter-thymeleaf : 타임리프 템플릿 엔진(View)
- spring-boot-starter-data-jpa
● spring-boot-starter-aop
● spring-data-jpa: 스프링 데이터 JPA
● hibernate + JPA: 하이버네이트 + JPA
● spring-boot-starter-jdbc
HikariCP **커넥션 풀** (부트 2.0 기본)
ps) 커넥션 풀?
웹 컨테이너(WAS)가 실행되면서 DB와 미리 connection(연결)을 해놓은 객체들을 pool에 저장해두었다가.
클라이언트 요청이 오면 connection을 빌려주고, 처리가 끝나면 다시 connection을 반납받아 pool에 저장하는 방식을 말합니다.
커넥션 풀을 왜 사용하나요?
자바에서 DB에 직접 연결해서 처리하는 경우(JDBC) 드라이버(Driver)를 로드하고 커넥션(connection) 객체를 받아와야 한다. 그러면 매번 사용자가 요청을 할 때마다 드라이버를 로드하고 커넥션 객체를 생성하여 연결하고 종료하기 때문에 매우 비효율적이다. 이런 문제를 해결하기 위해서 커넥션풀(DBCP)를 사용한다.
- spring-boot-starter-logging
● logback, slf4j
- spring-boot-starter-test
● junit : 테스트 프레임워크
● mockito :목 라이브러리
● assertj :테스트 코드를 좀 더 편하게 작성하게 도와주는 라이브러리
● spring-test :스프링 통합 테스트 제공
다음에 또 알아보자