인프런/스프링 입문

1. 스프링 부트 프로젝트 생성 ~ 실행, build.gradle,프로젝트 설정 팁,라이브러리 살펴보기

backend dev 2022. 10. 3.

스프링 시작하기

 

https://start.spring.io/

해당 사이트에서

스프링부트의 버전, 언어 , dependency등을 선택하여 쉽게 스프링 프로젝트를 생성하여 시작할 수 있다.

 강의를 따라 다음과 같이 생성하였다.

Project

 

maven(메이븐)과 gradle을 선택하는 부분이다.

둘다 빌드관리 도구이고 간단하게 알아본 결과 다음과 같다.

참고 https://dev-coco.tistory.com/65

 

메이븐(Maven)과 그래들(Gradle)의 개념 및 비교

스프링과 스프링부트를 공부 하려던 중 maven과 gradle을 알게되었습니다. maven과 gradle이 빌드관리도구인 것은 알고있지만 자세한 개념은 모르기에 maven과 gradle 각각의 개념과 정확한 차이점을 알

dev-coco.tistory.com

 

Maven

  • POM(Project Object Model) 이라는 프로젝트 객체 모델을 가지고있는 파일을 이용한다. => pom.xml

Gradle

  • 빌드속도가 maven보다 10~100배 가량 더 빠름
  • 요즘 대세임
  • build.gradle파일의 가독성이 pom.xml보다 좋고 스크립트 길이가 훨씬 짧다.

고로 Gradle을 선택하여 진행한다.

 

 

Spring Boot 

버전을 선택하는 부분이고 Snapshot이라던지 m5이런게 붙은거는 아직 개발중인 느낌이고

안정적인 최신버전은 자동으로 선택되어있다. 그냥 진행하면된다.

 

 

Project Metadata

metadata란 데이터에 관한 구조화된 데이터로 , 다른 데이터를 설명해주는 데이터 즉 데이터에 대한 데이터이다.

 

그렇다면 Proeject Metadata는 프로젝트에 관한 정보라고 생각하면 될듯하다.

Packaging

어플리케이션을 쉽게 배포하고 동작시킬수 있도록 패키징 방식을 정하는 부분이다.

jar는 .jar의 압축파일형식을 가지고 압축을 따로 해제하지 않아도 JDK(java development kit)에서 접근하여 사용이 가능하다고 한다. 

기본적으로 jar가 선택되어있으므로 jar로 진행한다.

 

jar와 war의 자세한내용은 아래 블로그에서 살펴본다. 

https://velog.io/@maldaliza/JAR-WAR%EB%9E%80

 

JAR, WAR란?

JAR는 Java Archive의 약자로 자바에서 사용되는 압축 파일의 한 형태로, 작동 방식은 흔히 자료를 압축하는 .zip과 유사..jar는 압축을 따로 해제하지 않아도 JDK(Java Development Kit)에서 접근하여 사용이

velog.io

https://hye0-log.tistory.com/27

 

[Spring Boot]배포 방법 비교 (JAR vs WAR)

스프링 부트의 장점 중 하나는 실행 가능한 JAR (Executable Jar)로 빌드하여 프로젝트를 바로 실행시킬 수 있다는 점이다. 실제로 스프링부트 관련 문서를 보다 보면 "Executable Jar"라는 단어를 많이 볼

hye0-log.tistory.com

 

Dependencies

이 부분에서 원하는대로 dependency를 추가해줄수있다.

여기서는 강의내용를 따라서 Spring web (웹프로젝트를 만들기 위해서)

Thymeleaf(타임리프)라는 뷰 템플릿 엔진을  추가했다. ( 백엔드쪽에서 클라이언트에게 응답할 브라우저 화면을 만들어 주는 역할)

 

타임리프에 관한 자세한 정보는 다음 블로그를 참조하자.

https://maenco.tistory.com/entry/Thymeleaf-Thymeleaf%EB%9E%80

 

[Thymeleaf] Thymeleaf란

(참고: Spring Boot를 기준으로 작성된 글입니다) 백엔드 서버에서 HTML을 동적으로 렌더링(SSR)할 때 사용하는 Thymeleaf(타임리프)가 뭔지 살펴보고자 한다 Thymeleaf란 타임리프는 뷰 템플릿 엔진으로 JSP

maenco.tistory.com

https://myeongdev.tistory.com/20

 

[Spring Boot] Thymeleaf 란? 타임리프 문법 정리

Thymeleaf 정리 타임리프 공식 사이트 템플릿 엔진(Template Engine) 웹 서비스를 만들 떄에는 서버의 데이터와 정적자원(html, css, image)을 조합해야 한다. 서버에서 데이터를 보내 웹 서비스를 만드는 방

myeongdev.tistory.com

 

 

설정완료 후 Generate를 누르면 압축파일이 다운받아진다. 
압축을 풀고 인텔리제이에서 해당 폴더를 열면 프로젝트를 시작할 준비가 된것이다.

 

 

 


build.gradle 

build.gradle 파일안에 코드를 대략적으로 살펴본다.

plugins {
	id 'org.springframework.boot' version '2.7.4' // start.spring.io에서 선택한 스프링부트 버전
	id 'io.spring.dependency-management' version '1.0.14.RELEASE' // 사용하는 스프링부트에 버전에 따라 의존성 관리를 해주는 부분
	id 'java' // 언어선택 자바했던거
}

group = 'hello' // 프로젝트 메타데이터에서 그룹네임 지정했던것
version = '0.0.1-SNAPSHOT' // ?
sourceCompatibility = '11' // 자바 버전 선택했던 부분 , compatibility ->호환성 , 자바 11버전선택했었믐

repositories {
	mavenCentral()  //  디펜던시 추가했던 starter- ~  라이브러리들을 가져오기위한 곳
}

dependencies {
	implementation 'org.springframework.boot:spring-boot-starter-thymeleaf' //thymeleaf 선택했던거 라이브러리를 가져오는부분.
	implementation 'org.springframework.boot:spring-boot-starter-web' // 스프링부트 웹 선택했던거
	testImplementation 'org.springframework.boot:spring-boot-starter-test' // 테스트 라이브러리는 자동으로 추가된다.
}

tasks.named('test') {
	useJUnitPlatform()
}

plugins

플러그인 이란 특정작업을 하기위해 모아놓은 Gradle Task들의 묶음이다.  

위에서는 스프링프레임워크 ,스프링 의존성관리 부분의 대한 플러그인 , 자바 플러그인 이 추가되어있다.

 

참고

https://kotlinworld.com/323

 

[Gradle] Plugin이란 무엇인가? 플러그인 이해하고 Custom Plugin 만들기

Gradle Plugin이란? Plugin이란 Gradle Task의 집합이다. Gradle Task는 어플리케이션 빌드부터 테스트까지 다양한 작업을 수행하는 작업 단위를 뜻한다. *만약 Task에 대한 이해가 부족하다면 다음글을 참조

kotlinworld.com

repositories

각종 의존성(dependency,= 라이브러리)들을 어떤 원격저장소에서 받을지 정해주는 부분.

또는 오픈 소스 라이브러리를 호스팅하는 저장소라고 설명할 수 있다.

 

참고

https://jhy156456.tistory.com/entry/Android-maven-jcenter-vs-mavenCentral

 

[Android] maven jcenter vs mavenCentral

jCenter에 안드로이드 라이브러리 배포하기 Android Library GearSlider를 만든 후 jcenter에 배포한 경험을 공유하기 위해 글을 작성합니다. 구글에 검색하여 나온 블로그 글을 참조했는데 중간에 막히는

jhy156456.tistory.com

 

build.gradle과 다른 설정파일은 추가적인 공부가 필요해보인다.

 


어플리케이션 실행해보기

 

HelloSpringApplication 파일을 Run해보면

실행후 나오는 결과창

다양한 정보가 Run탭에 뜨는데 여기서 스프링부트가 8080포트로 실행됬음을 알 수있고

웹브라우저에서 localhost:8080 또는 127.0.0.1:8080을 치면

 

다음과 같은 페이지가 뜨면 성공

이런 페이지가 나오면 잘 실행되고있다고 알면된다.

 

 

스프링부트 어플리케이션

package hello.hellospring;

import org.springframework.boot.SpringApplication;
import org.springframework.boot.autoconfigure.SpringBootApplication;

@SpringBootApplication // 스프링부트어플리케이션 어노테이션
public class HelloSpringApplication {

	public static void main(String[] args) {
		SpringApplication.run(HelloSpringApplication.class, args); 
		// 스프링어플리케이션 클래스를 매개변수로 받는 해당 명령어를 실행하여 스프링부트를 어플리케이선을 실행한다.


	}

}

스프링부트는 톰캣을 내장하고있고 스프링부트 어플리케이션을 실행할때 같이 실행된다고 한다.

 

번외 ) 프로젝트 설정 팁

Files -> Settings -> gradle검색 후 아래사진과 같이 설정

다음과 같이 설정한다.

Gradle을 통해서 실행하면 좀 느린데 인텔리제이로 바꿔주면 자바로 실행시켜줘서 훨씬 빨리 

스프링부트 어플리케이션이 실행된다고 한다!!

(프로젝트마다 설정해줘야함)

 


라이브러리 살펴보기

dependency를 보면 지금 3가지밖에 가져오지않았지만

 

실제로 가져와진 라이브러리를 살펴보면 (External Libraries)

엄청 많다.

 

우리는 3가지정도만 가져오려고했지만 이렇게 많은 이유는 

예를들어

implementation 'org.springframework.boot:spring-boot-starter-web' 

이렇게 starter-web만 가져온다하더라도

starter-web은 tomcat이라던지와 같은 다른 라이브러리를 의존하기때문에 의존성이 있는 관련된 모든 라이브러리를 끌어다 오고 그 끌어다온 라이브러리에 의존적인 라이브러리를 끌어다오기때문에 

external libraries에 뭔가 가득한것이다.

 

 

gradle에서 가져온 라이브러리의 의존성을 확인할수있다.

Gradle 탭에서 라이브러리들의 의존성을 확인할 수 있다.

build.gradle에서 3가지만 implementation했는데 그 각각의 라이브러리들과 의존관계라서 가져온것들과

그 의존관계인 라이브러리가 다른 라이브러리와 의존관계라서 가져온것들을 확인할수 있는부분이다.

(*)모양된것은 중복이기 때문에 그렇게 보이는것.

 

강의 내용


 

댓글