[Spring Data JPA Tutorial] 1. spring boot 프로젝트 생성 및 초기세팅

2021. 2. 8. 11:33Spring/Spring Data JPA Tutorial

반응형
  1. Spring Boot?
  2. 초기 세팅
    1. Lombok 설정하기
    2. Build Automatically 해제 (수동 빌드하기)
    3. Maven Repository 설정
  3. spring boot를 이용한 간단한 프로젝트
    1. pring boot 프로젝트 생성
      1. Spring Starter Project 생성
      2. 프로젝트 설정정보를 정의
      3. Spring Starter Project Dependencies 추가
      4. Maven Repository update
    2. 실행 테스트
      1. 간단한 Rest api 추가
      2. 실행
    3. 프로퍼티 설정
      1. properties? yml?
      2. profile active 프로퍼티 설정
      3. server port 프로퍼티 설정

1. Spring Boot?

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

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

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

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

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


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

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


1. 초기 세팅

2.1. lombok 설정

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

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

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

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

08

-vmargs
-javaagent:lombok.jar

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

03

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

내가 원하는 시점에 빌드를 하는 것이 더 명확하고, 또 빌드가 되지 않아 프로그램에 수정한 사항이 적용되지 않는 문제도 종종 발생하기도 하기 때문에 빌드는 수동으로 하는 것을 추천합니다.
단, 자동 빌드를 해제했을 경우 서버를 실행하기 전에 직접 빌드를 해줘야합니다.

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


2.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-demo</localRepository>
</settings>

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


01

Maven User Settings 설정 후


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

3.1. spring boot 프로젝트 생성

3.1.1. Spring Starter Project 생성

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

02

3.1.2. 프로젝트 설정정보를 정의

Type에 빌드도구 Maven을 선택하고, Java 버전 8과 Packaging 형식을 Jar로 지정합니다.

03

보유하고 있는 도메인이 있다면 Group과 Package에 도메인을 설정하면 좋습니다.
저의 경우 보유하고 있는 jiniworld.me 도메인에 demo 레코드를 설정하여 demo.jiniworld.me 주소에 해당 웹서비스를 올릴 예정이기 때문에 위와 같이 설정하였습니다.


3.1.3. Spring Starter Project Dependencies 추가

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

04

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

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

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

<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>

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


<parent>
	<groupId>org.springframework.boot</groupId>
	<artifactId>spring-boot-starter-parent</artifactId>
	<version>2.4.2</version>
	<relativePath/> <!-- lookup parent from repository -->
</parent>

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

3.1.4. Maven Repository update

05

프로젝트 생성 완료후 Maven을 업데이트합니다.

pom.xml에 maven repository를 추가하는 경우 eclipse상에서 추가한 라이브러리를 내려받기 위해서는 Maven Update과정이 반드시 필요합니다.

이 후 과정에서도 pom.xml 페이지의 dependencies 정보가 수정되었을 때에는 반드시 Maven Update를 실행해야합니다.


3.2. 실행 테스트

3.2.1. 간단한 Rest api 추가

여러 복잡한 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!!";
  }
}

프로그램 빌드를 수동으로 하도록 변경했기 때문에 코드를 수정한 후 앱을 실행하기 전에 직접 빌드를 해줘야 합니다.

Windows OS: Ctrl + B
Mac OS: Command + B


3.2.2. 실행

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

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

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

13

프로젝트 마우스 우클릭 → Run As → Spring Boot App 실행


실행 후 http://localhost:8080 에 접속해보면.

Boot Dashboard

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


3.3 프로퍼티 설정

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

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

3.3.1. properties? yml?

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

yml 작성방식


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

properties 작성방식

둘은 동일하게 작동되므로 본인에게 더 편리한 작성방식을 사용하면 됩니다.

3.3.2. profile active 프로퍼티 설정

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

profile active

프로퍼티에 active 속성을 설정하여 로그 출력 결과의 변화를 확인해봅시다.

spring:
 profiles:
  active: local

spring.profiles.active 속성 값을 local로 설정하고 서버를 시작해봅니다.

06

로그에서 active된 프로파일 값이 local이라고 출력되었습니다.

spring.profiles.active 속성 값을 prod로 설정한다면 아래와 같이 prod가 출력됩니다.

07


3.3.3. server port 프로퍼티 설정

실행 가능한 Jar 형식으로 패키징을 할 경우, Spring Boot 내장 톰켓 서버를 이용하여 서비스를 제공합니다.

이 내장 톰캣에 대한 설정도 프로퍼티를 통해 할 수 있습니다.

server:
  port: 8989

12

Spring Boot 앱을 실행해보면 위와 같이 8989 포트 위로 서비스가 올려진것을 확인할 수 있습니다.

애플리케이션의 이름까지 포함하여, 현재까지 설정한 프로퍼티 설정값은 아래와 같습니다.

spring:
  application:
    name: demo
  profiles:
    active: local
server:
  port: 8989

이 밖에도, Spring Boot 에서는 약속된 프로퍼티 설정을 통해 구성설정을 간단히 할 수 있도록 편의를 제공하는 부분이 많습니다.
이에 대한 부분은 과정을 진행하면서 하나씩 소개하도록 하겠습니다.

GitHub에서 demo 프로젝트(v1.0.0)를 다운받아 볼 수 있습니다.


++

  • Spring Boot2 초기 세팅
  • Spring Boot2 시작하기
  • Maven Repository 별도 설정
728x90
반응형