관리 메뉴

한다 공부

[Spring] 스프링부트 프로젝트 시작하기 본문

Dev/Java

[Spring] 스프링부트 프로젝트 시작하기

사과당근 2022. 10. 31. 16:39

스프링은 초기 설정이 아주 어려운데, 스프링부트의 출시로 손 쉽게 (?) 설정을 할 수 있게 되었다. 이러한 스프링 부트의 초기 설정을 해보자!

 

우선 프로그래밍 코드를 작성할 수 있는 IDE인 IntelliJ를 설치하자

https://www.jetbrains.com/ko-kr/idea/download/#section=windows

 

다운로드 IntelliJ IDEA: 우수성과 인체 공학이 담긴 JetBrains Java IDE

 

www.jetbrains.com

여기서 다운받을 수 있으며, 학생 인증을 통해 Ultimate 버전을 무료로 사용할 수 있다.

 

그리고 JDK를 설치하자.

아무생각없이 JDK 19가 최신 버전이라 다운받았는데, 이후 Gradle과 버전 충돌이 났다. (Gradle이란? 일종의 빌드 자동화 시스템

그래서 JDK 17로 다시 다운을 받았다

https://www.oracle.com/java/technologies/downloads/#jdk17-windows

 

Download the Latest Java LTS Free

Subscribe to Java SE and get the most comprehensive Java support available, with 24/7 global access to the experts.

www.oracle.com

 

다시 인텔리제이로 돌아가, 실행을 해보자

아래의 화면에서 New Project 클릭

 

아래와 같이 Spring Initializr에서 프로젝트 이름, 위치, 언어, 타입 (나는 Gradle을 사용했다. Gradle이 나중에 개발된거라 그런지 Maven보다 성능이 좋고 더 편리하다고 한다), Group이름, JDK 버전 (17 사용), Java 버전 (17 사용), Packaging 설정을 해주었다. 나머지는 기본적으로 되어있는 대로 따라갔다.

 

[ 추가 ]

지금은 type이 Grade-Groovy, Gradle-Kotlin, Maven 으로 선택지가 바뀌었는데 이 경우 Grade-Groovy를 선택하면 된다.

 

Next를 누른 후, dependency 설정을 해주었다. 나는 웹 사이트를 만들고자 해서 Spring Web 을 추가하였다.

설정을 마치고 Create를 하면 된다.

 

몇분의 시간이 지나면 성공적으로 프로젝트를 생성한 것을 볼 수 있다. (시간이 좀 걸림)

JDK19로 했을 땐 계속 생성에 오류가 나서 애를 먹었지만 JDK17로 재설치 한 후에는 오류가 생기기 않았다.

 

어노테이션등을 제공하고 (@Getter, @Setter) 생성자를 자동으로 설치해주는 도구인 롬복 (Lombok) 을 설치해야한다.

하지만 인텔리제이를 사용하면 자동으로 설치가 되어있다.

상단의 File -> Settings -> Plugins 에 들어가서, Installed 를 누른 후 롬복을 검색해서 enable 상태인지 확인해보자

 

[ 추가 ]

build.gradle에서 dependencies 부분에 아래 두 줄을 추가해주자

(Reload Gradle도 해주어야한다! build.gradle를 수정하면 reload를 해주어야 적용이 된다. 뒤에서 한번에 reload를 하도록 하겠다!)

compileOnly 'org.projectlombok:lombok'
annotationProcessor 'org.projectlombok:lombok'

 

[ 추가 ]

그리고 Settings -> Compiler -> Annotation Processors 들어가서 Enable annotation processing을 체크해준다.

대략적인 설치는 모두 끝났다!

 

추가적으로, 프로그램을 변경한 후 자동으로 서버를 재시작하게 하고 싶다면 Spring Boot Devtools 를 설치하면 된다.

build.gradle 파일에 들어가, dependencies 맨 아랫줄에 한 줄을 추가하자

developmentOnly 'org.springframework.boot:spring-boot-devtools'

추가를 했다면 Reload Gradle Project를 눌러 새로고침을 해 적용을 해보자

 

인텔리제이에서도 자바, 템플릿등의 변경이 일어났을 때 자동으로 변경사항을 반영할 수 있도록 설정해보자.

File -> Settings -> Build, Execution, Deployment -> Compiler 에 들어가서

Build project automatically 를 체크하자.

 

그리고 Advanced Settings에 들어가 Allow auto-make...를 체크하자

 

여기까지하면 끝이다!


추가적으로, 백엔드 API 서버를 만드는 것이 아니라, HTML을 사용해서 화면 부분도 스프링부트로 작업하는 것이라면

템플릿 엔진인 타임리프를 설정해주어야 아주 유용하다.

 

우선, HTML과 같은 템플릿 파일을 변경하고 나서 자동으로 적용되도록 하려면

application.properties에 다음과 같은 코드를 추가해야 한다.

spring.thymeleaf.cache=false
spring.thymeleaf.prefix=file:src/main/resources/templates/

 

그 다음, 타임리프를 사용하기 위해 타임리프를 설치해주도록 하자.

build.gradle의 dependencies에

implementation 'org.springframework.boot:spring-boot-starter-thymeleaf'
implementation 'nz.net.ultraq.thymeleaf:thymeleaf-layout-dialect'

위 코드를 추가해주면 된다.

 

그런데 템플릿 엔진이란 무엇인가?

Django 를 사용해서 처음으로 웹 개발을 했었기 때문에,

템플릿 엔진이 왜 필요한지 의문점을 가지게 되었다.

 

왜냐하면 Django 에서는 별도의 설정없이 기본적으로 탑재된 템플릿 엔진을 사용할 수 있기 때문이다!

(나도 모르게 템플릿 엔진을 사용하고 있었기 때문에, 모든 프레임워크에 기본적으로 탑재되어 있는줄 알았다.)

 

예를 들어 HTML에 상품 전체 목록을 띄우고 싶다고 가정해보자.

그러면 내가 가진 상품 데이터 전체를 HTML에 전달을 해주어야한다.

 

Django에서는 view에서 원하는 데이터를 을 담아 return 해주면, HTML에서 별도의 설정 없이

{% for product in product_list %}

(위와 같은 템플릿 언어를 사용해서) 전체 상품 목록을 가지고 올 수 있다.

 

그렇지만 스프링에서 해당 기능을 사용하려면 별도의 설정을 해주어야한다.

즉 이때 사용되는게 템플릿 엔진이며 많은 템플릿 엔진이 있지만 그 중 타임리프를 사용하고자 하는 것이다!!

 

HTML에 데이터를 전달해주기 위해 타임리프라는 템플릿 엔진을 사용한 결과, HTML에 들어가는 코드는 아래와 같다.

<tr th:each="product : ${productList}">

타임리프의 반복문 코드이다. Django의 템플릿 언어와는 문법이 확실히 다르다!

 

그렇지만 이러한 일부 문법을 제외한 나머지 부분은 HTML을 그대로 사용해주면 되기 때문에 아주 편하다!!

 

타임리프 문법은 따로 공부하지 않고 필요한 것을 그때 그때 찾아 적용해도 개발하는데에 있어서 큰 불편함이 없었다. (개인적 견해)