Spring Boot 웹 프로젝트 만들기

프로그래밍/스프링프레임워크 2019. 6. 13. 22:53
반응형

Spring Boot를 사용하여 웹 프로젝트를 만들고, 간단한 웹페이지를 출력하는 예제를 해보겠습니다. 스프링 부트는 한번도 해본적이 없는데, 여기저기 글들을 읽다보면 스프링부트가 많이 쓰이고 있는 것 같았습니다. 실제로 처음 스프링 부트를 사용해서 웹 애플리케이션을 처음 만들어본 상황에서는 장점을 잘 모르겠습니다. 좀 공부해보고 정말 장점이 있는지 확인을 해봐야 할 것 같습니다.

Sprng Boot를 사용해서 웹프로젝트를 만드는 방법은 알아보니 STS(Spring Tool Suite)나 전자정부표준프레임웍크 3.8에는 Spring Boot 프로젝트 템플릿이 있어서 그걸 사용하면 되는데 일반 Eclipse에는 프로젝트 템플릿이 없어서 Spring Initializr 사이트에서 템플릿을 다운로드 받아서 import 하는게 편할것 같습니다.

이 글의 예제는 전자정부표준프레임워크 3.8 개발툴을 사용해서 테스트 했습니다. 전체 예제 소스는 글 하단에 추가 했습니다.


- File -> New -> Other...를 선택해서 참을 띄웁니다. Spring Boot -> Spring Starter Project를 선택합니다.


- 프로젝트 설정 창입니다.


+ Type : Maven - 프로젝트 빌드 및 의존성 관리에 Maven 을 사용합니다. Gradle을 선택할 수도 있습니다.
+ Packaging: Jar - 패키징을 Jar로 하도록 설정합니다. War로도 설정할 수 있습니다.
+ Java Version: 8 - 자바는 1.8을 사용합니다.
+ Language: Javav - 언어는 Java를 사용합니다. Kotlin을 선택할 수도 있습니다.
+ Group com.tistory.offbyone - 자신에게 맞는 값을 넣으면 됩니다. 보통 도메인을 사용합니다.
+ Artifact: spring-boot-test - Mave 아티팩트명인데, 이것이 프로젝트명이 됩니다.
+ Version: 0.0.1-SNAPSHOT - 프로젝트의 버전입니다.
+ Description: Demo project for Spring Boot - 프로젝트 설명입니다.
+ Package : com.tistory.offbyone.springboot - 초기 소스들이 만들어질 기본 패키지명 입니다.


- 프로젝트의 의존성을 설정합니다(필요한 라이브러리들을 선택합니다).

+ Spring Boot Version: 2.1.5 - 현재 최신 버전 입니다.
+ Avaliable: 여기에 검색어를 입력하면 선택할 수 있는 라이브러리들의 리스트를 검색할 수 있습니다. 이 예제에서는 Spring Web Starter 하나만 선택합니다.

 

 

- Site Info입니다.

실제로 앞에서 설정한 정보를 가지고, https://start.spring.io 사이트에서 다운 받는것 같습니다.



- 프로젝트 템플릿이 없을때 Spring Initializr 사이트에서 프로젝트 템플릿을 다운 받는 방법입니다.

https://start.spring.io에 들어가서 앞에서 설정 했던 정보들과 같이 프로젝트 정보를 입력합니다.


- 의존성(Dependencies)에 역시 앞에서와 같이 Spring Web Starter를 선택하고 다운로드해서 이클립스에서 import하면 됩니다.


- 프로젝트가 만들어 졌습니다.

그런데 에러가 발생하고 있습니다. pom.xml 파일 첫줄에서 에러라고 표시되고 있습니다.


- 에러를 잡고, 웹 애플리케이션 실행을 위한 의존성을 추가합니다.

+ 앞의 에러는 Spring Boot 2.1.5에 maven-jar-plugin 3.1.2가 사용되고 있는데 뭔가 맞지 않는 것이 있어서 입니다. <properties>에 <maven-jar-plugin.version>을 3.1.1로 오버라이드해 줍니다.

 

<properties>
    <java.versionb>1.8</java.version>
    <maven-jar-plugin.version>3.1.1</maven-jar-plugin.version>
</properties>

 

+ 웹 애플리케이션 실행을 위한 의존성을 추가합니다.

 

<dependency>
    <groupId>org.apache.tomcat.embed</groupId>
    <artifactId>tomcat-embed-jasper</artifactId>
    <scope>provided</scope>
</dependency>

 


- 웹 파일을 위한 폴더를 생성하고, 뷰 리졸버(View Resolver)를 설정합니다.

웹 파일을 위한 폴드를 생성합니다.

+ /src/main/webapp 폴더 만듭니다.
+ /src/main/webapp/WEB-INF 폴더를 만듭니다.
+ /src/main/webapp/WEB-INF/jsp 폴더를 만듭니다.

/src/main/resources/application.properties 파일에 뷰 리졸버를 설정합니다.

 

spring.mvc.view.prefix=/WEB-INF/jsp/ 
spring.mvc.view.suffix=.jsp 

 


- 컨트롤러를 만듭니다.

이 테스트용 컨트롤러는 하는 일은 없고 뷰로 바로 넘어가게 되어 있습니다.

 

package com.tistory.offbyone.springboot.web; 

import org.springframework.stereotype.Controller; 
import org.springframework.web.bind.annotation.RequestMapping; 

@Controller 
public class WelcomeController { 
    @RequestMapping("/welcome") 
    public String welcome() { 
        return "welcome"; 
    } 
} 




- jsp 파일을 생성합니다.


- 애플리케이션을 실행합니다.

프로젝트 생성시 SpringBootTestApplication.java 파일이 생성 되어 있습니다. 이 파일에 마우스 오른쪽 키를 누르고, Run As -> Java Application으로 실행합니다.


- 웹 브라우저로 실행해 봅니다.

컨트롤러에 맵핑되어 있는 URL인 http://localhost:8080/welcome 을 호출합니다.


Spring Boot를 사용해서 간단한 스프링 웹 애플리케이션 프로젝트를 만들어 보았습니다. Spring Boot의 장점이 무엇인지 아직은 잘 모르겠네요. 실제로 간단한 기능을 만들어 보면서 확인해 봐야 겠습니다.


전체 예제 소스:

 

spring-boot-test.zip
0.06MB

------------------------

2019-10-07 내용 추가

 

Spring Boot 애플리케이션은 독립실행이 가능 합니다. 이 글의 예제를 jar파일로 만들어서 실행해 보았습니다. 실행을 다음 명령으로 할 수 있습니다.

 

C:\> java -jar spring-boot-test-0.0.1-SNAPSHOT.jar

 

프로그램 실행 후 웹 브라우저로 요청해본 결과 404 not found에러가 발생하였습니다. Spring Boot는 처음이라 이것저건 테스트해본 결과 WEB-INF 폴더에 파일을 넣을 경우 jar로 패키징하여 독립실행할 경우 파일을 찾지 못하는 것 같습니다.

 

필요한 파일을 src/main/resources 폴더 아래에 넣어서 테스트해본 결과 제대로 실행되었습니다.

 

아마도 독립실행이 아니라 다른 웹서버에 배포할 수 있도록 war 파일로 만든다면  WEB-INF 폴더도 사용할 수 있을것 같습니다. jar와  war 패키징의 차이점을 좀 더 확인해보고 관련해서 글을 올려 보겠습니다.

반응형

댓글을 달아 주세요

  • tt 2020.05.07 17:48  댓글주소  수정/삭제  댓글쓰기

    <maven-jar-plugin.version>3.1.1.</maven-jar-plugin.version>
    오타가 하나있는데 버전설정하는 부분에서 3.1.1 뒤에 . 이 들어있어요
    간결하게 과정 설명 잘해주셔서 감사합니다



  • as 2020.10.14 17:19  댓글주소  수정/삭제  댓글쓰기

    Exception in thread "main" java.lang.NoClassDefFoundError: org/springframework/core/env/EnvironmentCapable

    계속해서 이렇게만 뜨는데 해결 방법이 없을까요

    • pentode 2020.11.19 17:26 신고  댓글주소  수정/삭제

      글에 첨부된 예제를 변경없이 수행 했는데도 이러한 에러가 발생한다면 maven update를 실행하고 해보시고, 그래도 안된다면 maven 로컬 리포지터리(.m2 하위폴더) 를 삭제하고 해보세요. 성공하시길 바랄께요.

  • 콩콩시 2020.12.23 12:05 신고  댓글주소  수정/삭제  댓글쓰기

    잘 설명된 글 보고 갑니다~
    구독하기 누르고 갑니다!
    시간되시면 놀러오셔서 좋은정보 나누고 맞구독하면서 서로 소통했으면 좋겠습니다 :)

  • 슬토끼 2021.01.18 12:16 신고  댓글주소  수정/삭제  댓글쓰기

    잘 봤습니다~!

  • ㅋㅋㅋㅋㅋㅋ 2021.02.05 13:40  댓글주소  수정/삭제  댓글쓰기

    1. 항목 미표시
    os, java 버전 등 환경에 따라
    표시되는 항목이 전부 다릅니다.
    저는 spring web start가 없습니다.

    2. 프로젝트 오류
    finish하면
    import getting started content
    라는 메시지도 표시됩니다.

    약 20군데 사이트를 돌아다녀보니
    정확한 정보를 알려주는 곳이 한군데도 없네요...

    intelliJ, 일반 이클립스, sts, gradle, maven 전부 cross 확인하는데
    정확하게 되는 곳이 없네요...

    답답하네요...

    • pentode 2021.02.06 02:53 신고  댓글주소  수정/삭제

      안녕하세요. 방문해 주셔서 감사합니다.^^

      질문 내용이 상세하지 않아 답변 하기가 좀 애매하지만 최대한 상황을 상상하며 예기해 보겠습니다.

      1. 항목 미표시
      네. 맞습니다. 버전에 따라 지원되는 항목이 다를 수 있겠습니다. 특히 Spring Boot 버전에 따라 지원되는 항목의 갯수나 항목의 이름이 다를 수 있습니다.

      이 글에서 Spring Web Starter는 현재 2.4버전대에서는 Spring Web으로 이름이 바뀌었네요.

      자신이 사용할 OS, JAVA, Spring Boot, Servlet, JSP 등 기술셋의 버전을 상호 호환되도록 잘 설정해야 합니다.

      2. 프로젝트 오류

      finish 하면 import getting started content 라는 메세지가 표시되는게 정상입니다. 이 메세지는 앞에서 설정한 내용을 기반으로 프로젝트 템플릿을 https://start.spring.io사이트에서 내려받게 되는데 이 과정을 보여줍니다. 즉 인터넷이 연결되어 있어야 됩니다.

      질문 내용만으로는 프로젝트 오류라고 한것이 spring.io 사이트에서 데이터를 내려받는 도중에 오류가 나는것인지, 프로젝트가 생성되기는 하는데, 생성된 프로젝트에 오류가 있는것인지 모르겠네요.

      이클립스 상에서의 모든 오류는 스택트레이스와 같은 좀 더 상세한 오류메세지도 있을것입니다. 그러한 오류 메세지를 잘 읽어보시면 도움이 될 것입니다.

      Spring Boot 프로젝트로 테스트를 하는데는 STS가 잘 지원이 되는것 같습니다. 일반 이클립스에는 STS 플러그인을 설치하는게 사용하기 편합니다.

      성공하시길 바라겠습니다.

  • 어렵다 2021.02.14 00:38  댓글주소  수정/삭제  댓글쓰기

    뭔 차이인진 모르겠는데, @Controller 를 @RestController로 변경하니 404에러에서 벗어났습니다.... 안되는 분들 참고하시길

    • pentode 2021.02.16 23:14 신고  댓글주소  수정/삭제

      안녕하세요.
      이글의 예제 소스를 그대로 사용해도 404오류가 발생하는가요?

      @RestController는 Restful 서비스를 구현하기 위한 것으로 JSON 형식의 데이터를 반환하는데 사용됩니다.

      html 데이터를 반환할 경우 @Controller로 처리하고 오류를 잡아야 할 것입니다.

      방문해 주셔서 감사합니다.