스프링부트 프로젝트 설정하기

Hyunsoo Kim·2024년 7월 12일
0

스프링부트

목록 보기
1/2
post-thumbnail

최근 새로운 프로젝트를 시작하면서 새로운 개발 환경을 세팅해야 했다.

그 과정에서 스프링부트 프로젝트를 설정해야 했는데, 기본 세팅 방법을 기록해두려고 한다.

1. spring initializr 세팅

spring initializr는 프로젝트를 구축할 때 기본 세팅을 쉽게 진행할 수 있도록 도와주는 사이트다. 초기 프로젝트를 세팅할 때, 해당 사이트를 통해 빠르게 구축할 수 있었다.

참고로 인텔리제이는 유료 버전에서만 spring initializr 사용이 가능하다.

1) Project

  • Gradle, Maven 중 사용할 빌드 프로그램을 선택한다.

Maven

  • XML 기반 설정: Maven은 pom.xml 파일을 사용하여 프로젝트의 종속성 및 빌드 구성을 정의한다.
  • 의존성 관리: 중앙 저장소에서 필요한 라이브러리를 자동으로 다운로드하고 관리한다.
  • 라이프사이클: 표준화된 빌드 라이프사이클(compile, test, package, install, deploy 등)을 제공한다.
  • 광범위한 플러그인 지원: 다양한 플러그인으로 기능을 확장할 수 있다.

장점

  • 표준화된 구조와 절차로 인해 일관성이 있다.
  • 오래된 프로젝트나 대규모 프로젝트에서 널리 사용되고 있다.
  • 방대한 문서와 커뮤니티 지원이 있다.

단점

  • XML 파일의 구조가 복잡해질 수 있으며, 설정 파일이 길어질 수 있다.
  • 유연성이 상대적으로 떨어질 수 있다.

Gradle

  • DSL 기반 설정: Groovy 또는 Kotlin DSL을 사용하여 build.gradle 파일에서 설정을 정의한다.
  • 의존성 관리: Maven과 유사하게 중앙 저장소에서 필요한 라이브러리를 자동으로 다운로드하고 관리한다.
  • 높은 유연성: 다양한 방식으로 빌드 프로세스를 커스터마이징할 수 있다.
  • 빠른 빌드: Gradle의 Incremental Build 및 Build Cache 기능을 통해 빌드 속도가 빠르다.

장점

  • 설정 파일이 간결하고 읽기 쉽다.
  • 높은 유연성으로 복잡한 빌드 프로세스를 쉽게 관리할 수 있다.
  • 최신 기술 및 툴과의 호환성이 좋다.

단점

  • 설정 파일이 매우 유연하여 일관성이 떨어질 수 있다.
  • Maven에 비해 비교적 덜 표준화되어 있다.

2) Language

  • Java, Kotlin, Groovy 중 사용할 언어를 선택한다.

3) Spring Boot

  • 사용할 스프링부트 버전을 선택한다. SNAPSHOT은 아직 개발 단계에 있는 버전이기 때문에, 선택할 때 신중하게 고려해야 한다.

4) Project Metadata

  • 프로젝트별로 설정해야 하는 메타 데이터들이다.

Group

  • 회사명을 보통 입력하나, 회사마다 정해진 양식이 있다면 해당 양식을 사용해야 한다.

Artifact

  • 프로젝트의 아티팩트 ID를 나타낸다. 보통 프로젝트 이름 또는 모듈 이름으로 설정한다.

Name

  • 프로젝트 이름으로 설정한다.

Description

  • 프로젝트에 관한 설명을 포함한다. 생략해도 무방하다.

Package Name

  • 프로젝트의 기본 패키지 이름을 세팅하는 구간이다. 보통 Group과 Artifact를 설정하면 자동으로 지정해 준다.

Packaging

  • 빌드된 프로젝트 아티팩트의 포장 방식을 나타낸다. JAR 또는 WAR를 선택한다. jar와 war는 모두 java의 jar 옵션을 이용해 생성된 압축 파일으로 애플리케이션을 쉽게 배포하고 동작할 수 있도록 관련 파일을 패키징한 것이다.

Jar

  • JAVA 어플리케이션이 동작할 수 있도록 자바 프로젝트를 압축한 파일
  • Class (JAVA리소스, 속성 파일), 라이브러리 파일을 포함한다.
  • JRE(JAVA Runtime Environment)만 있어도 실행 가능하다.

War

  • Servlet / Jsp 컨테이너에 배치할 수 있는 웹 애플리케이션(Web Application) 압축파일 포맷
  • 웹 관련 자원을 포함한다 (JSP, Servlet, JAR, Class, XML, HTML, Javascript)
  • 사전 정의된 구조를 사용한다 (WEB-INF, META-INF)
  • 별도의 웹서버(WEB) or 웹 컨테이너(WAS)가 필요하다
  • 즉, JAR파일의 일종으로 웹 애플리케이션 전체를 패키징 하기 위한 JAR 파일이다.

참고로 SpringBoot를 사용한다면 보통 JAR를 선택하여 서비스하는 편이 좋다.

Java

  • 프로젝트에 사용할 JAVA 버전을 선택한다.

5) Dependencies

프로젝트에 사용할 코드나 라이브러리를 미리 세팅할 수 있다. 프로젝트를 세팅할 때 보통 Lombok과 Spring Web은 기본적으로 선택하는 걸 추천하는 편이다. 다른 라이브러리는 필요한 것만 세팅하면 된다.

GENERATE

모든 세팅이 끝났다면 화면 하단의 GENERATE 버튼을 클릭한다. 그럼 자동으로 기본 세팅된 프로젝트가 다운로드될 것이다. 해당 프로젝트를 git와 개발환경(인텔리제이, 이클립스 등)에 연결하여 사용하면 된다.


2. 프로젝트 기본 세팅

기본 패키지를 설정한 이후엔 프로젝트 별로 기본 세팅이 필요하다. 이건 공통된 사항이 아니니 참고만 하자.

Application.yml으로 변경

프로젝트를 빌드하면 resource 경로 안에 'application.properties'가 기본으로 세팅되어 있을 것이다. 나는 'application.yml'으로 이름을 변경하여 사용했다.


JSP 적용

최근 JSP는 점점 사용하지 않는 추세이지만, 백엔드 개발자라 프론트엔드를 최대한 가볍게 다루며 프로젝트를 진행하고 싶다면 JSP도 나쁘지 않은 선택이다.

다만 스프링부트는 JSP를 따로 세팅해주어야 한다. 스프링부트 3.0 이상은 javax 대신 jakarta 패키지를 사용해줘야 한다.

build.gradle

implementation 'org.apache.tomcat.embed:tomcat-embed-jasper'
implementation 'jakarta.servlet:jakarta.servlet-api'
implementation 'jakarta.servlet.jsp.jstl:jakarta.servlet.jsp.jstl-api'
implementation 'org.glassfish.web:jakarta.servlet.jsp.jstl'

application.yml

spring:
  mvc:
    view:
      prefix: /WEB-INF/views/
      suffix: .jsp

경로 세팅

  • webapp/WEB-INF/views 경로 폴더를 생성한다.

배너 디자인

배너 디자인 사이트에서 원하는 배너를 만든다.

banner.txt 설정

resources 파일 아래 banner.txt 파일을 만들어 배너를 붙여넣는다.

application.yml 설정

spring:
  banner:
    location: classpath:banner.txt

Logback 설정

application.yml 설정

logging:
  level:
    root: info  #warn, info, debug

logback-spring.xml 생성

  • 프로젝트 별로 필요한 기능에 따라 설정해야 한다. 아래는 예제다.
<?xml version="1.0" encoding="UTF-8" ?>
<configuration>

    <property name="CONSOLE_PATTERN" value="%d{yyyy-MM-dd HH:mm:ss.SSS} %magenta([%thread]) %highlight([%-3level]) %logger{5} - %msg %n" />

    <!-- Console appender 설정 -->
    <appender name="STDOUT" class="ch.qos.logback.core.ConsoleAppender">
        <encoder>
            <Pattern>${CONSOLE_PATTERN}</Pattern>
        </encoder>
    </appender>


    <logger name="jdbc" level="OFF" additive="false">
        <appender-ref ref="STDOUT"/>
    </logger>
    <logger name="jdbc.sqlonly" level="DEBUG" additive="false" >
        <appender-ref ref="STDOUT"/>
    </logger>
    <logger name="jdbc.sqltiming" level="OFF" additive="false" >
        <appender-ref ref="STDOUT"/>
    </logger>
    <logger name="org.hibernate.SQL" level="DEBUG" additive="false">
        <appender-ref ref="STDOUT"/>
    </logger>
    <logger name="com.example.todolist.controller" level="DEBUG" additive="false" >
        <appender-ref ref="STDOUT"/>
    </logger>
    <logger name="com.example.todolist.service" level="DEBUG" additive="false" >
        <appender-ref ref="STDOUT"/>
    </logger>
    <logger name="com.example.todolist.domain" level="DEBUG" additive="false" >
        <appender-ref ref="STDOUT"/>
    </logger>

    <root level="INFO">
        <appender-ref ref="STDOUT"/>
    </root>
</configuration>
profile
다부진 미래를 만들어가는 개발자

0개의 댓글