Notice
Recent Posts
Recent Comments
Link
일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
1 | 2 | 3 | 4 | |||
5 | 6 | 7 | 8 | 9 | 10 | 11 |
12 | 13 | 14 | 15 | 16 | 17 | 18 |
19 | 20 | 21 | 22 | 23 | 24 | 25 |
26 | 27 | 28 | 29 | 30 | 31 |
Tags
- jpa 활용2 - api 개발 고급
- 스프링 db1 - 스프링과 문제 해결
- 자바의 정석 기초편 ch6
- 자바의 정석 기초편 ch2
- 자바의 정석 기초편 ch5
- 스프링 mvc2 - 검증
- 스프링 mvc2 - 로그인 처리
- 자바의 정석 기초편 ch13
- 2024 정보처리기사 수제비 실기
- @Aspect
- 자바의 정석 기초편 ch8
- 스프링 입문(무료)
- 게시글 목록 api
- 자바의 정석 기초편 ch7
- 자바의 정석 기초편 ch12
- 코드로 시작하는 자바 첫걸음
- 스프링 mvc1 - 서블릿
- 자바의 정석 기초편 ch9
- 2024 정보처리기사 시나공 필기
- jpa - 객체지향 쿼리 언어
- 자바의 정석 기초편 ch11
- 자바의 정석 기초편 ch4
- 스프링 mvc1 - 스프링 mvc
- 자바의 정석 기초편 ch3
- 자바의 정석 기초편 ch14
- 타임리프 - 기본기능
- 스프링 mvc2 - 타임리프
- 스프링 db2 - 데이터 접근 기술
- 스프링 고급 - 스프링 aop
- 자바의 정석 기초편 ch1
Archives
- Today
- Total
나구리의 개발공부기록
스프링 부트 스타터와 라이브러리 관리, 라이브러리 직접 관리, 스프링 부트 라이브러리 버전 관리, 스프링 부트 스타터 본문
인프런 - 스프링 완전정복 코스 로드맵/스프링 부트 - 핵심 원리와 활용
스프링 부트 스타터와 라이브러리 관리, 라이브러리 직접 관리, 스프링 부트 라이브러리 버전 관리, 스프링 부트 스타터
소소한나구리 2024. 11. 21. 11:18출처 : 인프런 - 스프링 부트 - 핵심 원리와 활용(유료) / 김영한님
유료 강의이므로 정리에 초점을 두고 코드는 일부만 인용
1. 라이브러리 직접 관리
1) 라이브러리 관리의 어려움
- 프로젝트를 처음 시작하면 어떤 라이브러리들을 사용할지 고민하고 선택해야함
- 스프링 Web, 내장 톰캣, JSON 처리기, 로거 등등 수많은 라이브러리를 선택해야하며 버전까지도 고민해야함
- 더 심각한 문제는 각 라이브러리들끼리 호환이 잘 되는 버전도 있지만 잘 안되는 버전도 있음
- 과거에는 이런 문제들 때문에 처음 프로젝트를 세팅하는데 상당히 많은 시간을 소비했음
- 스프링 부트는 개발자가 라이브러리들을 편리하게 사용할 수 있는 기능들을 제공함
2) 라이브러리 직접 관리
(1) 과거의 라이브러리 관리 방법
- 직접 라이브러리를 하나하나 고르고 설정하는 방법 실습
- 스프링 웹과 내장 톰캣을 사용하는 웹 애플리케이션이라고 가정
- 제공된 프로젝트를 복사해서 사용
(2) build.gradle 확인
- 스프링으로 간단한 웹 애플리케이션을 실행하려면 생각보다 수많은 라이브러리가 필요함
- 스프링 웹 MVC, 내장 톰캣, JSON처리, 스프링 부트 관련, LOG, YML 등등 다양한 라이브러리가 사용됨
plugins {
id 'org.springframework.boot' version '3.0.2'
id 'java'
}
group = 'hello'
version = '0.0.1-SNAPSHOT'
sourceCompatibility = '17'
//스프링 부트 외부 라이브러리 버전 변경
//ext['tomcat.version']='10.1.4'
configurations {
compileOnly {
extendsFrom annotationProcessor
}
}
repositories {
mavenCentral()
}
dependencies {
//1. 라이브러리 직접 지정
//스프링 웹 MVC
implementation 'org.springframework:spring-webmvc:6.0.4'
//내장 톰캣
implementation 'org.apache.tomcat.embed:tomcat-embed-core:10.1.5'
//JSON 처리
implementation 'com.fasterxml.jackson.core:jackson-databind:2.14.1'
//스프링 부트 관련
implementation 'org.springframework.boot:spring-boot:3.0.2'
implementation 'org.springframework.boot:spring-boot-autoconfigure:3.0.2'
//LOG 관련
implementation 'ch.qos.logback:logback-classic:1.4.5'
implementation 'org.apache.logging.log4j:log4j-to-slf4j:2.19.0'
implementation 'org.slf4j:jul-to-slf4j:2.0.6'
//YML 관련
implementation 'org.yaml:snakeyaml:1.33'
}
tasks.named('test') {
useJUnitPlatform()
}
** 참고
- io.spring.dependency-management 플러그인은 일부로 적용하지 않았는데 뒤에서 설명함
(3) HelloController - 실행해보기
- controller패키지 생성 후 작성,
- 간단한 컨트롤러를 만들어서 동작하는지 확인해보면 정상적으로 라이브러리들이 실행되어 동작함
package hello.controller;
@RestController
public class HelloController {
@GetMapping("/hello-spring")
public String hello() {
return "hello spring!";
}
}
(4) 라이브러리 직접 선택시 발생하는 문제
- 웹 프로젝트를 하나 설정하기위해서 이렇게 수 많은 라이브러리를 알아야하며 추가로 각각의 라이브러리의 버전까지 골라서 선택해야함
- 눈에 보이지 않은 가장 어려운 문제는 각 라이브러리들 간에 서로 호환이 잘 되는 버전도 있지만 호환이 잘 안되는 버전도 있다는 점인데 개발자가 라이브러리의 버전을 선택할 때 이런 부분까지 고려하는 것은 매우 어려움
2. 스프링 부트 라이브러리 버전 관리
1) 스프링 부트의 라이브러리 버전 관리
- 스프링 부트는 개발자 대신에 수 많은 라이브러리의 버전을 직접 관리해줌
- 개발자는 원하는 라이브러리만 고르고 라이브러리의 버전을 생략해도 되며 스프링 부트가 부트 버전에 맞춘 최적화된 라이브러리 버전을 선택해줌
(1) build.gradle 수정
- plugins에 io.spring.dependency-management 플러그인을 사용하면 버전 관리 기능을 사용할 수 있음
- 버전 관리 기능을 추가하였으므로 dependencies의 라이브러리에 버전을 모두 제거하면 부트의 버전과 최적화된 라이브러리 버전을 선택해줌
plugins {
id 'org.springframework.boot' version '3.0.2'
id 'io.spring.dependency-management' version '1.1.0' // 추가
id 'java'
}
// 기존 동일
dependencies {
//2. 스프링 부트 라이브러리 버전 관리
//스프링 웹, MVC
implementation 'org.springframework:spring-webmvc'
//내장 톰캣
implementation 'org.apache.tomcat.embed:tomcat-embed-core'
//JSON 처리
implementation 'com.fasterxml.jackson.core:jackson-databind'
//스프링 부트 관련
implementation 'org.springframework.boot:spring-boot'
implementation 'org.springframework.boot:spring-boot-autoconfigure'
//LOG 관련
implementation 'ch.qos.logback:logback-classic'
implementation 'org.apache.logging.log4j:log4j-to-slf4j'
implementation 'org.slf4j:jul-to-slf4j'
//YML 관련
implementation 'org.yaml:snakeyaml'
}
(2) 실행
- 실행해보면 이전과 같이 정상적으로 동작하는 것을 확인할 수 있음
(3) dependency-management 버전 관리
- io.spring.dependency-management 플러그인을 사용하면 spring-boot-dependencies에 있는 bom 정보를 참고함
- spring-boot-dependencies는 스프링 부트 gradle 플러그인에서 사용하기 때문에 일반적으로 개발자의 프로젝트에서 별도의 명령없이는 보이지 않음
(4) 버전 정보 bom
- github링크
- 링크의 build.gradle 문서안에 보면 bom이라는 항목이 있는데 각각의 라이브러리에 대한 버전이 명시되어있으며 물론 스프링 부트의 버전에 따라 모두 정해놓은 것이기에 스프링 부트의 버전을 바꿔서 확인해보면 라이브러리의 버전도 바뀜
** 참고
- 스프링 부트가 관리하는 외부 라이브러리 버전을 확인하는 방법
- 스프링 공식 사이트에서 스프링 부트가 관리하는 외부 라이브러리 버전을 확인할 수 있으나 스프링 부트가 관리하지 않는 외부 라이브러리도 있는데, 그런 라이브러리들은 버전 정보를 직접 적어주어야 함
- 아직 잘 알려지지 않았거나 대중적이지 않은 라이브러리들이 이런 경우가 있음
(5) 정리
- 스프링 부트가 제공하는 버전 관리는 스프링 자신을 포함해서 수 많은 외부 라이브러리의 버전을 최적화 해서 관리해주기에 개발자는 스프링 부트 자체의 버전만 지정하면됨
- 그리고 스프링 부트가 해당 스프링 부트 버전에 맞는 각 라이브러리의 호환성을 테스트 했기 때문에 안전하게 사용할 수 있음(물론 100% 완벽할 순 없음)
3. 스프링 부트 스타터
1) 스프링 부트 스타터 제공
- 앞서 보았듯이 웹 프로젝트를 하나 실행하려면 생각보다 수 많은 라이브러리가 필요한데 개발자 입장에서는 일반적으로 많이 사용하는 대중적인 라이브러리들을 포함해서 간단하게 시작하고 싶을 수 있음
- 스프링 부트는 이런 문제를 해결하기 위해 프로젝트를 시작하는데 필요한 관련 라이브러리를 모아둔 스프링 부트 스타터를 제공함
- 스프링 부트 스타터덕분에 누구나 쉽고 편리하게 프로젝트를 시작할 수 있게됨
(1) build.gradle 수정
- dependencies에 아래의 설정 한줄로 지금까지 직접 넣어주었던 모든 라이브러리가 포함됨
- spring-boot-starter-web라이브러리는 편리하게 의존성을 모아둔 세트이므로 관련 의존성 세트가 한번에 들어오며 스타터도 다른 스타터를 가질 수 있음
- 스프링과 웹을 사용하고 싶으면 spring-boot-starter-web을 입력해주면 스프링 웹 MVC, 내장 톰캣, JSON 처리, 스프링 부트 관련, LOG, YML 등등 을 모두 가져옴
- 스프링과 JPA를 사용하고 싶으면 spring-boot-starter-jpa를 입력해주면 스프링 데이터 JPA, 하이버네이트 등등을 모두 가져옴
// 기존 설정 동일
dependencies {
//3. 스프링 부트 스타터
implementation 'org.springframework.boot:spring-boot-starter-web'
}
(2) 스프링 부트 스타터 - 이름 패턴
- spring-boot-starter-*
- 패턴을 알고 있으면 관련된 스타터를 쉽게 찾게 도와줌
- 공식: spring-boot-starter-*
- 비공식: thirdpartyproject-spring-boot-starter
- ex) mybatis-spring-boot-starter
(3) 자주 사용하는 스프링 부트 스타터
- 보통은 직접 스타터를 입력하지 않고 스타터 사이트를 통해 스타터를 검색하여 프로젝트를 생성
- spring-boot-starter : 핵심 스타터, 자동 구성, 로깅, YAML
- spring-boot-starter-jdbc : JDBC, HikariCP 커넥션풀
- spring-boot-starter-data-jpa : 스프링 데이터 JPA, 하이버네이트
- spring-boot-starter-data-mongodb : 스프링 데이터 몽고
- spring-boot-starter-data-redis : 스프링 데이터 Redis, Lettuce 클라이언트
- spring-boot-starter-thymeleaf : 타임리프 뷰와 웹 MVC
- spring-boot-starter-web : 웹 구축을 위한 스타터, RESTful, 스프링 MVC, 내장 톰캣
- spring-boot-starter-validation : 자바 빈 검증기(하이버네이트 Validator)
- spring-boot-starter-batch : 스프링 배치를 위한 스타터
- 스프링 부트 스타터의 전체 목록
(4) 라이브러리 버전 변경
- 외부 라이브러리의 버전을 변경하고 싶을 때 build.gradle에 아래와 같은 형식으로 입력해주면 편리하게 변경할 수 있음
- 스프링 부트가 관리하는 외부 라이브러리 버전 변경에 필요한 속성값
- 스프링 부트가 관리하는 외부 라이브러리의 버전을 변경하는 일은 거의 없지만 가끔 문제가 발생하기도 하므로 알아두면 좋음
ext['tomcat.version'] = '10.1.4' // dependencies위에 입력해주면 됨
dependencies{
// ... 라이브러리 목록
}