티스토리 뷰
스프링부트 프로젝트 생성하는 방법이라면..
https://start.spring.io/ 👈이 사이트로만 해왔는데
방법은 되게 다양했습니다😲
Maven 프로젝트 생성
Gradle 프로젝트 생성
Spring CLI
Spring Intializr
Maven 프로젝트 생성🌳
Maven 프로젝트의 경우, pom 파일로 정의가 이루어집니다!
웹 문서가 html로 작성을 하면 브라우저가 html 파일을 읽어 DOM을 만드는 것처럼
pom.xml을 작성하면 Maven이 Project Object Model 이라는 객체를 만드는 것입니다.
그리고 해당 POM에 의해서 프로젝트에 필요한 것을 다운받아 프로젝트 구성이 됩니다.
xml로 프로젝트에 대한 스트립트을 정의하면 Maven이 알아서 빌드해줍니다👍
Maven 프로젝트 식별을 위해 Maven coordinates을 사용합니다.
- groupId, artifactId, version
Maven은 프로젝트에서 미리 정의된 Build Life Cycle이 존재합니다.
간단하게만 살펴보면
validate
clean 후 validate
package
빌드, 테스트 후 마지막에 jar 파일을 패키징➡️타겟 폴더 확인 가능
clean
타겟이 다 지워짐
test
테스트 위한 비륻 후 target 만들어짐! jar 파일 없음
install
로컬 레포에 jar가 copy가 됨.(배포할 수 있게 됨)
(자세한 내용은 공식문서 참고!)
Transitive Dependencies
의존성의 의존성
의존이 여러 개 겹치면, 가장 최신의 version 정보를 사용하게 됩니다!
예) a가 b를 참조하고, b가 c를 참조한다면, a는 c를 transitive 의존성으로 간주한다.
터미널에 mvn dependency:tree 입력 시 트리 확인 가능!
의존 범위(Dependency Scope)
기본은 compile이며, 이외에도 provieded, runtime, system, test가 있습니다.
Maven에서 멀티 모듈 적용하기
Maven은 멀티 모듈을 지원합니다!
아래와 같이 모듈을 정의한 후, Create Module을 누르면
service-a와 service-b 모듈이 만들어집니다!
추가된 모듈의 pom.xml에 부모 속성을 명시해줍니다.
Gradle 프로젝트 생성🌳
Gradle 프로젝트의 경우, gradle 파일로 정의가 이루어집니다! 👉Maven과의 가장 큰 차이점
프로젝트 생성 시, build.gradle.kts를 확인할 수 있습니다.
Task
- Maven의 Multiple Module과 비슷하게 하나 이상의 프로젝트를 지원합니다.
- 클래스를 컴파일하거나 Jar을 생성하거나 하는 build를 위해 하는 작업이라고 보면 됩니다.
Plugin
- 그래들에 실제 태스크와 주요한 기능들을 추가하게 하는건 바로 플러그인들입니다.
지금까지 알아본 생성 방법은
프로젝트 생성 후, 수동으로 pom과 gradle을 건드려 세팅하는 방법이었습니다.
나머지 방법들도 알아봅시다!
Spring CLI🌳
spring-boot-cli 설치 후, 환경 변수 설 정 시 사용 가능합니다.
// 프로젝트 만들기
spring init --build maven -j 16 -g org.prgms -a kdt-spring-demo -n kdt-spring-demo
// 인텔리제이 실행
idea kdt-spring-demo
Spring Initalizr🌳
인텔리제이의 기능을 활용하여 프로젝트를 쉽게 생성해 볼 수 있습니다!
지금까지 스프링부트 프로젝트를 생성하는 다양한 방법에 대해 정리해보았습니다!
각자 편한 방법으로 생성해보면 좋을 것 같습니다😀
'백엔드 > SpringBoot' 카테고리의 다른 글
Fetch Join과 비동기로 283배 시간 단축하기! (0) | 2024.01.21 |
---|---|
LazyInitializationException 왜 발생하고, 어떻게 해결할까🧐 (0) | 2024.01.06 |
@Transactional 어노테이션을 뜯어보자. (+ 테스트 시 주의할 점) (0) | 2023.12.11 |
[SpringBoot] @Repository와 같은 빈이 생성되는 클래스에서 @Value로 주입받은 변수를 생성자에서 써도 될까? (1) | 2023.10.19 |
프레임워크를 사용하는 이유는 무엇일까? (0) | 2023.10.13 |