구리

Spring Boot 개념 및 Gradle 프로젝트 생성 본문

SPRING BOOT

Spring Boot 개념 및 Gradle 프로젝트 생성

guriguriguri 2021. 7. 12. 21:51

 

Spring Boot란?

스프링 프레임워크를 사용하는 프로젝트를 아주 간편하게 설정할 수 있는 스프링 프레임웍의 서브 프로젝트라고 할 수 있습니다.

 

Spring Boot의 장점은?

- 스프링 프레임 워크를 사용 하면 많은 XML 설정파일등을 작성 하는 등 설정하는 방법이 어려운 편이기 때문에 보통 검색을 통해 설정 내용을 복사 하거나, 기존 설정파일들을 복붙하기 일수였습니다.

 하지만 스프링 부트는 반복되는 개발환경 구축을 위한 코드작성등의 노력을 줄여주고 쉽고 빠르게 프로젝트를 설정할 수 있도록 도와줍니다.

 

- 프로젝트 환경 구축에서 큰 영역을 차지하는 비기능적인 기능들을 기본적으로 제공합니다.

   (내장형 서버, 시큐리티, 측정, 상태 점검, 외부 설정)

 

 

Spring Boot Architecture

  • Controller Layer : UI 에서 요청을 받고 응답을 전달합니다.
  • Service Layer : 비즈니스 로직을 구현합니다.
  • Repository Layer : 데이터베이스에서 가져올 쿼리를 구현. JPA를 이용하는 경우 정해진 규칙에 따라서 메소드를 사용하거나, 만들어놓으면 적절한 쿼리를 수행할 수 있습니다.
  • Domain Layer : 실제로 데이터베이스 물리 테이블과 1:1 매핑이 되어 바인딩 되어 있습니다.

 

 

인텔리제이 실행 > File > New > Project 

- Location : 프로젝트가 저장될 경로로 원하는 곳으로 지정해줍니다.

- Build System : 프로젝트 빌드 및 의존성 관리 선택

- Group : 자신의 프로젝트를 식별해주는 고유의 아이디입니다. 보통 도메인을 사용합니다.

- Artifact : 버전 정보를 생략한 이름으로 생각하면 됩니다. Name 값이 변경될시 자동으로 변경됩니다.

 위와 같이 생성하게 되면 com.example.test라는 초기 소스들이 만들어질 기본 패키지가 생성됩니다.

 

 

Spring boot 버전 수정 및 dependency 추가

 

Spring dev tools : Property Defaults, Automatic Restart, Live Reload 등 기능 제공

 

- Property Defaults : Spring에서 제공하는 thymeleaf는 기본적으로 캐싱 기능을 사용하기에 thymeleaf 파일을 수정하더라도반영되지 않기에  Application cache 설정값을 false로 수정해야 하지만 dev tools는 이런 작업을 제공합니다. 예를 들어 템플릿 엔진의 캐싱 기능을 개발 단계에서 자동으로 꺼주기에 개발자는 설정 파일을 건드리지 않아도 됩니다.

 

- Automatic Restart : 파일 수정 후 저장을 하면, Classpath에 존재하는 파일의 변경을 감지하고, 자동으로 서버를 restart 해줍니다.

 

- Live Reload : JS 파일을 수정하기만 해도 자동으로 브라우저가 새로 고침 되는 기능

 

Lombok : Java의 라이브러리로 반복되는 메소드를 어노테이션을 사용해 자동으로 작성해주는 라이브러리입니다.

 

 

[프로젝트 구조]

1. src/main/java 

기존의 스프링 프로젝트와 마찬가지로 클래스, 인터페이스 등 자바 파일이 위치하는 디렉터리입니다. 

 

2. TestApplication 클래스

package com.bjy.test;

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

@SpringBootApplication
public class TestApplication {

    public static void main(String[] args) {
        SpringApplication.run(TestApplication.class, args);
    }
}

해당 파일은 프로젝트 생성시 프로젝트 이름을 이용한 ~~Application 파일이 생성됩니다.

main 메서드는 SpringApplication.run 메서드를 호출해서 웹 애플리케이션을 실행하는 역할을 합니다.

@SpringBootAplication은 3가지 어노테이션으로 구성되어 있습니다.

 

어노테이션 설명
@EnableAutoConfiguration 스프링 부트는 개발에 필요한 몇 가지 필수적인 설정들의 처리가 되어 있는데요,
해당 애너테이션에 의해 다양한 설정들의 일부가 자동으로 완료됩니다.
@ComponentScan 스프링 부트는 해당 애너테이션에 의해 자동으로 컴포넌트 클래스를 검색하고,
스프링 애플리케이션 콘텍스트(IoC 컨테이너)에 빈(Bean)으로 등록합니다.
(의존성 주입 과정 편리)
@Configuration 해당 애너테이션이 선언된 클래스는 자바 기반의 설정 파일로 인식됩니다.
스프링 4 버전부터 자바 기반의 설정이 가능하게 되었으며,
XML 설정에 어마 무시한 시간을 소모하지 않아도 됩니다.

 

3. src/main/resources

스프링 부트에는  templates 폴더, static 폴더, application.properties 파일이 기본적으로 생성됩니다.

 

폴더 및 파일 설명
templates 기존의 스프링은 HTML 내에 자바 코드를 삽입하는 방식의 JSP를 사용하여 디렉터리의 위치도 웹 디렉터리에 해당하는 src/main/webapp 안에 존재하였습니다.
하지만,  이러한 방식은 war 파일로 패키지화되었을 경우에만 정적 리소스를 정상적으로 사용할 수 있다고 합니다.
그러한 이유로 스프링 부트는 src/main/resources 디렉터리 내에서 화면과 관련된 파일을 관리하는 것으로 생각할 수 있습니다.
스프링 부트는 타임리프(Thymeleaf) 템플릿 엔진의 사용을 권장하는데요,
타임리프는 JSP와 마찬가지로 HTML 내에서 데이터를 처리하는 데 사용됩니다.

static 해당 폴더에는 css, fonts, images, plugin, scripts 등의 정적 리소스 파일이 위치합니다.
application.properties 해당 파일은 웹 애플리케이션을 실행하면서 자동으로 로딩되는 파일입니다.
예를 들어 톰캣(Tomcat)과 같은 WAS(포트 번호, 콘텍스트 패스 등)의 설정이나,
데이터베이스 관련 정보 등 각각으로 분리되어 있는 XML 또는 자바 기반의 설정을 해당 파일에 Key-Value 형식으로 지정해서 처리할 수 있습니다.

 

4. src/test/java

해당 디렉토리의 com.bjy 패키지에 TestApplicationTests 클래스가 자동으로 생성됩니다.

기존의 스프링과 달리, 복잡한 설정 없이 각각의 개발 단계에 알맞은 테스트를 진행할 수 있습니다.

 

5. build.gradle

기존의 스프링은 pom.xml에 여러 개의 dependency를 추가해서 라이브러리를 관리하는 방식의 메이븐(Maven)을 사용하였지만 

그레이들은 단 한줄의 코드로 라이브러리를 추가할 수 있습니다.

해당 파일에 추가한 라이브러리는 Project and External Dependencies에서 확인할 수 있습니다.