[Spring Boot Tutorial] 1. spring boot 시작하기 + 초기세팅

2019. 8. 1. 15:46Spring/Spring Boot Tutorial

300x250
반응형

Spring boot ??

최소한의 설정으로 production레벨의 스프링 기반 애플리케이션을 개발할 수 있도록 도와주는 스프링 프로젝트입니다.

다양한 기능들이 xml이나 JavaConfig 설정을 하지 않아도 자동으로 설정됩니다.

기존에 xml이나 JavaConfig에서 설정해야했던 복잡한 Configuration 설정을 예약된 프로퍼티 키 값에 설정 하는 것만으로 대체할 수 있습니다.(구성의 외부화)

  • database 설정 (단일 database의 경우)
  • log4j 설정 (로그 설정)
  • thymeleaf 설정 ( 문서 prefix, suffix 설정 )

필수적으로 설정해야할 Configuration 설정이 매우 간편해져, 프로젝트 세팅에 들이는 시간을 최소화 하며 궁극적인 개발에 집중할 수 있도록 해줘서 기존의 Spring MVC Project보다 쉽게 웹개발을 할 수 있습니다.


이번 포스팅에서는 Spring Boot 로 웹 개발을 하기 전에 미리 세팅해두면 편리한 몇몇 세팅들에 대해 다룹니다.

Spring Boot Tutorial 과정은 demo라는 프로젝트를 구성하면서 진행 되며, 빌드도구는 Maven, IDE는 Eclipse 을 사용합니다.


  1. 초기 세팅
    1. Lombok 설정하기
    2. Build Automatically 해제 (수동 빌드하기)
    3. Maven Repository 설정
  2. spring boot를 이용한 간단한 프로젝트
    1. spring boot 프로젝트 생성
    2. 앱 실행
    3. active profile 설정

1. 초기 세팅

1.1. lombok 설정

lombok은 Model 클래스에서 기계적으로 작성하는 getter, setter, toString, NoArgsConstructor 등의 메서드 생성을 자동으로 처리해주는 라이브러리입니다.

물론~ 직접 손으로 작성해도 무방하지만, 코드를 깔끔하게 만들어 비즈니스 메서드를 한눈에 보이게 만들어 준다는 점과 반복적인 노동을 줄여준다는 점에서 lombok을 사용하는 것을 권장합니다.

https://projectlombok.org/download
위의 사이트에서 롬복을 다운받은 후, 이클립스 또는 STS 실행파일을 연동을 합니다.

롬복을 Eclipse나 STS와 연동시키는 방법은 lombok.jar 파일을 Eclipse.exe, STS.exe 파일이 위치한 폴더 내에 저장하고, ini파일의 맨 하단에 아래의 코드를 직접 추가하면 됩니다.

-vmargs
-javaagent:lombok.jar

1.2. Build Automatically 해제 (수동 빌드하기)

03

이클립스에서 workspace를 생성했을 때, 프로젝트 빌드는 기본적으로 자동빌드 설정이 되어있습니다.

내가 원하는 시점에 빌드를 하는 것이 더 명확하고, 또 빌드가 되지 않아 프로그램에 수정한 사항이 적용되지 않는 문제도 종종 발생하기도 하기 때문에 빌드는 수동으로 하는 것을 추천합니다.

빌드 단축키 : Ctrl + B (Windows OS), Command + B (Mac OS)
이 단축키를 외워두면 개발 속도가 월등히 상승되니 외워두는걸 추천합니다.


1.3. Maven Repository 설정

workspace를 생성했을 때, Default로 바라보고 있는 Maven Repository 경로는
로그인계정 홈디렉터리/.m2/repository 입니다.

spring 프로젝트를 한 개만 만들거라면, 이 Repository 디렉토리에 모든 의존성 라이브러리를 다운받아도 문제가 없겠지만, 여러개의 workspace를 생성할 경우 각 프로젝트 환경별 의존성 라이브러리 설정 차이로 충돌 에러가 발생되는 경우도 종종 있습니다.
그리고, repository를 별도로 구성하면, workspace별로 필요한 의존성 라이브러리를 별도로 관리할 수 있으며, 다른 곳으로 분리하기도 편리합니다.
따라서, workspace별로 repository 폴더를 별도로 설정합시다.

Windows > Preferences > Maven > User Settings

Maven User Settings 초기

Maven User Settings 설정 전

여기에서, User Settings를 변경해주면 됩니다.
여기서 나오는 settings.xml의 태그를 통해 경로를 가져옵니다.

Maven에 관한 설정에 관련된 파일의 기본 양식은 apache-maven 사이트의 apache-maven-x.x.x-bin 폴더 내의 settings.xml 를 이용하면 됩니다.

settings.xml 파일에서 <localRepository> 태그에 대한 주석을 해제하고, 태그 내부에 경로를 설정해주면 됩니다.

<?xml version="1.0" encoding="UTF-8"?>
<settings xmlns="http://maven.apache.org/SETTINGS/1.0.0"
          xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
          xsi:schemaLocation="http://maven.apache.org/SETTINGS/1.0.0 http://maven.apache.org/xsd/settings-1.0.0.xsd">
  <localRepository>D:\jini_box\java\repository-java3</localRepository>
</settings>

저의 경우, 이 workspace의 repository 폴더에 settings.xml 파일을 넣고, localRepository를 repository 폴더경로를 썼습니다.
아래의 그림을 참고하시면 이해가 쉬울 것입니다.


Maven User Settings 변경후

Maven User Settings 설정 후


2. spring boot를 이용한 간단한 프로젝트

2.1. spring boot 프로젝트 생성

Maven User Settings 초기

spring boot 프로젝트(Spring Starter Project)를 생성합니다.

01

프로젝트 생성시, Spring Starter Project Dependencies를 미리 import 할 수 있습니다.

Spring Starter Project Dependencies는 스프링 부트에서 특정 기능을 사용하는데에 필요한 필수 라이브러리의 묶음 dependency라고 생각하면 됩니다.

Web, DevTools, Lombok dependencies 선택한 후 프로젝트를 생성합시다.

<dependency>
  <groupId>org.springframework.boot</groupId>
  <artifactId>spring-boot-starter-web</artifactId>
</dependency>

<dependency>
  <groupId>org.springframework.boot</groupId>
  <artifactId>spring-boot-devtools</artifactId>
  <scope>runtime</scope>
  <optional>true</optional>
</dependency>
<dependency>
  <groupId>org.projectlombok</groupId>
  <artifactId>lombok</artifactId>
  <optional>true</optional>
</dependency>

프로젝트 생성 후, pom.xml 에 들어가면 우리가 추가했던 web, DevTools, Lombok에 관한 의존성 라이브러리가 추가된것을 확인할 수 있습니다.

※ 참고로, dependency 추가는 프로젝트 생성시엔 생략하고 나중에 pom.xml에서 직접 추가해줘도 됩니다.


<parent>
    <groupId>org.springframework.boot</groupId>
    <artifactId>spring-boot-starter-parent</artifactId>
    <version>2.1.13.RELEASE</version>
    <relativePath/>
</parent>

스프링부트 스타터 dependency는 각 dependency별로 따로 버전을 설정하지 않아도 spring-boot-starter-parent의 버전에 필요한 dependency 버전을 자동으로 로드합니다.


2.2. 앱 실행

여러 복잡한 Spring 설정을 하기 이전에, 프로젝트가 정상적으로 생성되었는지 확인해보기 위해 demo project!! 를 출력하는 api 를 만들어 앱을 실행해봅니다.

프로젝트를 최초 생성시의 java 패키지 모습은 아래와 같습니다.

java package 전

여기에 TestController를 추가해봅시다.

package me.jiniworld.demo.controllers;

import org.springframework.web.bind.annotation.GetMapping;
import org.springframework.web.bind.annotation.RestController;

@RestController
public class TestController {

  @GetMapping("/")
  public String index() {
    return "demo project!!";
  }
}

우리가 프로젝트를 생성할 때 packaging을 Jar로 설정했습니다.
패키징을 Jar로 선택할 경우, 빌드시 실행가능한 jar파일(실행가능한 아카이브 패키징)을 만들어 줍니다.

기존에 War파일의 경우, WAS 에 deploy(배포)한 후 실행했었다면, Jar는 단독 앱으로 실행이 가능하다는 점에서 보다 편리합니다.

이제는 앱을 WAS에 올리지 않고, Boot Dashboard에서 바로 실행시키면 됩니다.

Boot Dashboard

그리고 http://localhost:8080 에 접속해보면.

Boot Dashboard

우리가 설정했던 메시지가 출력되는 것을 확인할 수 있습니다.


2.3. active profile 설정

Spring Boot의 핵심은 xml 또는 JavaConfig로 설정해야 했던 주요 작업들을 프로퍼티 설정만으로 끝낼 수 있다는 점입니다.

그러니 프로퍼티 설정에 대해서 꼭 알고 넝어가야겠죠?

resources

기본적으로 resources 폴더 내에 application.properties 파일이 자동 생성되어있습니다.

spring boot는 src/main/resources 내의 application.properties 또는 application.yml 파일을 프로퍼티 파일로 자동으로 인식합니다.

※ 만일, 프로퍼티명 이나 프로퍼티 경로를 변경하고 싶다면 별도의 설정을 추가해야합니다.

저는 properties 파일이 아닌 yml파일로 프로퍼티를 구성할 것이기 때문에 application.properties를 지우고 application.yml 파일을 생성했습니다.

참고로 yml파일이나 properties의 프로퍼티 설정 방식은 거의 유사하며, key를 작성하는 방법에서 약간의 차이점만 있을 뿐입니다.

spring:
  profiles:
    active: local
  thymeleaf:
    mode: HTML
    encoding: UTF-8
    check-template-location: true
    prefix: classpath:/templates/
    suffix: .html
    cache: false
spring.profiles.active=local
spring.thymeleaf.mode=HTML
spring.thymeleaf.encoding=UTF-8
spring.thymeleaf.check-template-location=true
spring.thymeleaf.prefix=classpath:/templates/
spring.thymeleaf.suffix=.html
spring.thymeleaf.cache=false

1번째가 yml 작성방식이고, 2번째는 properties 작성방식입니다.
본인이 더 편리한 작성방식을 따르면 됩니다.


프로퍼티 설정에 관한 설명은 해야할 설명은 매우 방대하므로 과정을 진행하면서 설정해야할 프로퍼티를 하나씩 소개하도록 할 것입니다.
이 포스트에서는 active profile에 관한 설명만 합니다.

기본 active 프로퍼티 설정을 하지 않으면 아래와 같은 로그가 찍힙니다.

profile active

활성화된 프로파일을 설정해봅시다.

spring:
 profiles:
  active: local

---
spring:
  profiles: local

custom:
  title: "local title"

---
spring:
  profiles: prod

custom:
  title: "prod title"

yaml 에서는 블록처리를 --- 로 합니다.

  • 첫번째 블록에서 어떤 프로파일을 활성화 할 것 인지 설정
  • 두번째 블럭에는 local 프로파일 설정
  • 세번째 블럭에는 prod 프로파일 설정

위와 같이 블록처리하면 하나의 application.yml에서 active 를 변경하는 것으로 프로파일 활성화를 변경 할 수 있습니다.

( 각 프로파일을 분리하는 것은 다음에 포스트를 추가할 예정입니다. )


local 프로파일을 활성화 한 후 앱을 실행하면, 로그 출력이 아래와 같이 바뀝니다.

profile active2

블록으로 구분한 2개의 프로파일이 정상적으로 작동하는지 테스트 해보기 위해 위에 추가한 custom.title을 이용하여 페이지 출력을 해보겠습니다.

@Value("${spring.profiles.active}")
private String profilesActive;

@Value("${custom.title}")
private String title;

@GetMapping("/title")
public String title() {
  return title + " - " +profilesActive;
}

@Value 애너테이션을 이용하여 프로퍼티 값을 가져옵니다.
그리고 앱을 실행시킨 후 url 을 접속하면

profile active3

활성화 프로퍼티를 prod로 변경할 경우에는 prod title - prod 가 출력됩니다.


++

  • No active profile set, falling back to default profiles: default
  • application.yml 하나의 파일에 프로파일 여러개 설정
  • Maven Repository 별도 설정
300x250
반응형
  • 프로필사진
    ㅋㅋㅋㅋㅋㅋ2021.02.05 10:24

    finish와 동시에 importing getting stared content 오류가 납니다....
    에휴~ 일주일동안 검색해도
    정확한 정보를 알려주는 멘토가 없네요.

    • 프로필사진
      Favicon of https://blog.jiniworld.me BlogIcon jiniya222021.02.08 09:52 신고

      lombok 라이브러리 위치나 빌드 유무, Maven Update 유무에 의한 에러 현상이 아닐까 싶습니다.
      설명이 미흡한것 같아 해당 사항에 대해서 글을 새로 작성하였으며, 내려받을 수 있는 코드링크도 추가하였으니 참고하셔서 차례대로 다시 따라해보시길 바랍니다.
      https://blog.jiniworld.me/125