스프링 부트의 3가지 핵심 기능
- 의존성 관리 간소화
- 배포 간소화
- 자동 설정
1.1.1 스프링 부트 스타터는 특정 기능을 사용하기 위해 의존성이 맞는 라이브러리 버전들 묶음을 제공해서, 특정 기능 사용을 위한 외부 라이브러리 관리를 수월하게 해준다.
ex : spring-boot-starter-web 같은 스타터를 추가하면, 기능 사용을 위해 라이브러리 호환 체크(테스트)가 완료된 의존성들을 수월하게 가져온다.
-> 전반적으로 스프링 부트의 스타터 개념은 의존성을 간소화하고 애플리케이션에 기능 전체를 추가하는 데 필요한 작업을 줄여준다. 그리고 테스트, 유지보수, 업그레이드에 드는 오버헤드를 크게 줄여준다.
1.1.2 배포 간소화 - 실행 가능한 JAR
예전 데이터베이스 엑세스가 가능한 애플리케이션을 만들기 위해서는 아래와 같은 작업이 필요하다고 한다.
1. 애플리케이션 서버를 설치하고 설정한다
2. 데이터베이스 드라이버를 설치한다
3. 데이터베이스 커넥션을 생성한다.
4. 커넥션 풀을 생성한다
5. 애플리케이션을 빌드하고 테스트한다
6. 애플리케이션과 애플리케이션의 의존성을 애플리케이션에 배포한다.
스프링부트는 번거로운 배포 프로세스의 많은 부분을 한 단계로 간소화 했다.
스프링부트는 모든 의존성이 포함된 실행가능한 JAR를 생성해주어 배포를 용이하게 해준다.
<java -jar SpringBootAppName.jar> 명령으로 실행가능한 jar를 실행할 수 있다.
1.1.3 자동 설정 - 스프링 부트의 '마법'
대표적으로 데이터베이스 연결, 작업 완료 후 데이터베이스 연결 작업 종료 와 같은 작업들을 자동으로 해준다
그리고 application.yml 파일에서 서버 포트 설정이나, 데이터베이스 설정 등을 입력하면 자동으로 적용해 주는 부분들을 말하는 것 같음.
스프링 부트의 프로젝트인 스프링 데이터(Spring Data)를 보면, 보통 데이터베이스에 엑세스할 때마다 그 데이터베이스에 연결해야 한다. 또 애플리케이션 작업을 완료하면 잠재적인 문제 발생을 방지하기 위해 연결을 종료해야 한다.
데이터베이스에 연결된 동안에는 읽기, 쓰기 쿼리로 데이터베이스에 수많은 작업을 요청하는데, 쿼리를 적절히 사용하기 위해선 약간의 노력이 필요하다.
자동 설정으로 위 모든 것이 간소화된다고 상상해봐라. 데이터베이스를 자동으로 연결하고, 애플리케이션이 종료되면 연결도 자동으로 종료된다. 간단한 컨벤션으로 코드를 쉽게 커스터마이제이션해서 복잡한 맞춤형 쿼리를 효율적이고 일관되게 생성한다.
이런 식으로 코드에 접근하는 방식을 '설정보다 관습' 이라고 하기도 하는데, 처음에 익힐때는 번거로울 수 있지만, 이전에 유사한 기능을 구현하면서 매우 간단하고 반복적인 작업을 위해 수백 개의 엄청난 setup/teardown/configuration 코드를 반복적으로 작성했던 경험에 비추어보면, 이 방식은 매우 참신하고 효율적이다.
스프링부트는 '설정보다 관습' 이라고 하는 정신을 추구한다.
또한 스프링 기술을 만드는 팀은 '개발자 우선 환경' 설정을 제공하는데 노력을 집중하고 있다.
개발자는 수많은 설정 작업이 아니라 비즈니스 로직을 만드는 작업에 집중할 때 가장 생산적이다.
스프링 부트의 다른 프로젝트, 스프링 클라우드 스트림(Spring Cloud Stream) 을 예로 들면, 개발자는 RabbitMQ나 Apache Kafka 같은 메시징 플랫폼에 연결할 때, 호스트이름, 포트, 자격 증명 등의 특정 설정을 지정한다.
'개발자 우선 환경' 은 로컬호스트, 기본 포트 등의 기본값을 지정하지 않아도 개발자가 로컬에서 작업하기 편한 기본값을 제공한다.
이는 로컬 개발 환경에서는 거의 100% 일관성이 있기 때문에 의미 있는 '의견'이다.
하지만 프로덕션 환경에서는 플랫폼과 호스팅 환경이 매우 다양해서 구체적인 값을 제공해야 한다.
'책 내용 정리 > [책] 처음부터 제대로 배우는 스프링 부트' 카테고리의 다른 글
2장. 도구 선택 및 시작 (0) | 2023.09.14 |
---|
댓글