본문으로 바로가기

목차

    0. 환경

    1. Spring Boot 프로젝트 생성

    https://start.spring.io 에 접속해 필요한 환경에 맞게 Spring Boot 프로젝트를 정의해 다운로드합니다.

    1.1. 프로젝트 정의

    다음과 같이 정의합니다.

    • Project
      • Gradle Project
    • Language
      • Java
    • Spring BOOT
      • 2.5.5 (미정식 버전을 제외하고 최신 버전을 사용하면 됩니다.)
    • Project Metadata
      • Group: hello (원하는 대로 지정해도 됩니다.)
      • Artifact: hello-spring (원하는 대로 지정해도 됩니다.)
      • Name (그대로 사용)
      • Description (그대로 사용)
      • Package Name (그대로 사용)
      • Packaging: Jar
      • Java: 11
    • Dependencies
      • Spring Web
      • Thymeleaf(html 웹 템플릿 엔진)

    1.2. 프로젝트 다운로드

    • GENERATE 클릭해 다운로드합니다.
    • 다운로드 후 압축도 해제해 둡니다.

    Spring page

     


    2. Spring Boot 열기(IntelliJ)

    2.1. Spring Boot Project 열기(IntelliJ)

    • 압축을 풀어 둔 Spring Boot Project를 IntelliJ로 열어줍니다.
    • 라이브러리 다운로드가 필요해 시간이 좀 걸립니다.

    IntelliJ Project Open

    2.2. Spring Boot Project 구조

     Project Tree

    주요 디렉터리 및 파일

    [.idea]: 인텔리제이가 사용하는 설정 파일 디렉터리

    [gradle]: gradle 관련 디렉터리

    [src/main]: 메인 디렉터리

    [src/main/java]자바 파일이 있는 디렉터리

    [src/main/resource]: xml properties등과 같은 설정 파일과 html 등이 있는 디렉터리

    [src/test]: 테스트 디렉터리(따로 테스트 경로가 있는 걸로 봐서 테스트 소스는 매우 중요하다는 것을 알 수 있습니다.)

    [build.gradle]: gradle 파일로 프로젝트의 버전 설정하고 라이브러리를 다운로드할 수 있는 파일입니다.

    [.gitignore]: git 관련 파일

     

    build.gradle 파일 내용

    plugins {
    	id 'org.springframework.boot' version '2.5.5'
    	id 'io.spring.dependency-management' version '1.0.11.RELEASE'
    	id 'java'
    }
    
    group = 'hello'
    version = '0.0.1-SNAPSHOT'
    sourceCompatibility = '11'
    
    //파일을 다운로드 받는 저장소
    repositories {
    	mavenCentral()
    }
    
    //사용할(다운로드 필요한) 의존성 라이브러리 파일
    dependencies {
    	implementation 'org.springframework.boot:spring-boot-starter-thymeleaf'
    	implementation 'org.springframework.boot:spring-boot-starter-web'
    	testImplementation 'org.springframework.boot:spring-boot-starter-test'
    }
    
    test {
    	useJUnitPlatform()
    }

     


    3. IntelliJ 설정

    • 프로젝트 실행 전 성능 등을 위해 간단한 IntelliJ 설정을 합니다. 

    3.1. 프로젝트 자바 버전 확인(JDK)

    • 프로젝트가 원하는 자바 버전으로 잘 설정되어있는지 확인해봅니다. (Java 11)
    • File > Project Structure > Project > Project SDK
    • 버전이 맞지 않다면 변경해줍니다.

    JDK 확인

    3.2. 자바 직접 실행 설정

    • 빠른 실행 속도를 위해 자바로 직접 실행하도록 설정을 변경합니다.
    • Preferences > Build, Execution, Deployment > Build Tools > Gradle  

    실행 방법 변경

     


    4. Spring Boot 실행

    4.1. 컨트롤러 생성

    • 실행 테스트를 위해 @RestController 어노테이션을 이용해 컨트롤러를 생성합니다.
    • Spring Boot 실행 클래스와 패키지 경로를 통해 접근이 가능한 경로에 컨트롤러 클래스를 생성합니다.

    [컨트롤러 소스]

    package hello.hellospring;
    
    import org.springframework.web.bind.annotation.GetMapping;
    import org.springframework.web.bind.annotation.RestController;
    
    import java.util.HashMap;
    
    @RestController
    public class HomeController {
    
        @GetMapping(value = "/")
        public HashMap<String, String> test(){
            HashMap<String, String> test = new HashMap<String, String>();
            test.put("project_version","2.5.5");
            test.put("java_version","11");
    
            return test;
        }
    }

    4.2. 라이브러리 추가

    • 컨트롤러 호출 시 HashMap이 Json Data Return이 안 될 경우에만 추가하셔도 됩니다. 일반적으로 위에서 프로젝트 파일 다운로드 시 선언한 Spring Web이랑 thymeleaf의 의존성 파일을 Gradle로 자동으로 설치가 될 것입니다.
    • 호출된 컨트롤러의 HashMap 데이터를 Json으로 파싱 하기 위해 필요한 라이브러리를 build.gradle에 추가해줍니다.
    • jackson-core: implementation group: 'com.fasterxml.jackson.core', name: 'jackson-core', version: '2.12.3'
    • jackson-databind: implementation group: 'com.fasterxml.jackson.core', name: 'jackson-databind', version: '2.12.3'
    dependencies {
    	implementation 'org.springframework.boot:spring-boot-starter-thymeleaf'
    	implementation 'org.springframework.boot:spring-boot-starter-web'
    	testImplementation 'org.springframework.boot:spring-boot-starter-test'
    	// https://mvnrepository.com/artifact/com.fasterxml.jackson.core/jackson-core
    	implementation group: 'com.fasterxml.jackson.core', name: 'jackson-core', version: '2.12.3'
    	// https://mvnrepository.com/artifact/com.fasterxml.jackson.core/jackson-databind
    	implementation group: 'com.fasterxml.jackson.core', name: 'jackson-databind', version: '2.12.3'
    }

    4.3. 프로젝트 실행

    • Spring Boot 실행 클래스를 실행합니다.
    • 실행 클래스 파일은 프로젝트 생성 시 생성되어있는 클래스 파일이고 main() 메서드를 가진 파일입니다.

    4.4. 실행 결과

    • 브라우저를 이용해 컨트롤러로 설정한 경로로 접근합니다.

     


    5. 빌드하고 실행하기

    콘솔로 현재 프로젝트 디렉터리로 이동합니다.(터미널, 윈도우 명령 프롬프트, powershell 등)

    #pwd
    /Users/veneas/Desktop/dev/hello-spring
    
    # ll
    total 48
    -rw-r--r--@  1 hjs  staff   1.4K 10 10 05:29 HELP.md
    drwxr-xr-x  10 hjs  staff   320B 10 10 21:17 build
    -rw-r--r--@  1 hjs  staff   952B 11  3 00:02 build.gradle
    drwxr-xr-x@  3 hjs  staff    96B 10 10 05:29 gradle
    -rwxr-xr-x@  1 hjs  staff   7.9K 10 10 05:29 gradlew
    -rw-r--r--@  1 hjs  staff   2.7K 10 10 05:29 gradlew.bat
    drwxr-xr-x   4 hjs  staff   128B 10 17 23:04 out
    -rw-r--r--@  1 hjs  staff    34B 10 10 05:29 settings.gradle
    drwxr-xr-x   3 hjs  staff    96B 10 30 14:51 sql
    drwxr-xr-x@  4 hjs  staff   128B 10 10 05:29 src

    이동 후 다음 명령어를 실행해 확인합니다.

    1. ./gradlew build (윈도우 사용자: gradlew.bat 로 빌드)
    2. cd build/libs
    3. java -jar hello-spring-0.0.1-SNAPSHOT.jar
    4. 스프링 부트가 잘 실행이 되었는지 확인(웹 브라우저를 통해 localhost:8080으로 접근하면 페이지가 나타납니다.)
    [ 1. 빌드(실행 파일 생성) ]
    # ./gradlew build
    Starting a Gradle Daemon (subsequent builds will be faster)
    
    > Task :test
    2021-11-04 21:27:57.570  INFO 1491 --- [ionShutdownHook] j.LocalContainerEntityManagerFactoryBean : Closing JPA EntityManagerFactory for persistence unit 'default'
    2021-11-04 21:27:57.575  INFO 1491 --- [ionShutdownHook] com.zaxxer.hikari.HikariDataSource       : HikariPool-1 - Shutdown initiated...
    2021-11-04 21:27:57.623  INFO 1491 --- [ionShutdownHook] com.zaxxer.hikari.HikariDataSource       : HikariPool-1 - Shutdown completed.
    
    BUILD SUCCESSFUL in 29s
    7 actionable tasks: 7 executed
    
    [ 2. 생성된 파일 경로로 이동 ]
    # cd build/libs
    
    # ll
    total 79928
    -rw-r--r--  1 hjs  staff    20K 11  4 21:27 hello-spring-0.0.1-SNAPSHOT-plain.jar
    -rw-r--r--  1 hjs  staff    39M 11  4 21:27 hello-spring-0.0.1-SNAPSHOT.jar
    
    [ 3. 스프링 부트 실행(jar 파일 실행) ]
    # java -jar hello-spring-0.0.1-SNAPSHOT.jar
    
    
      .   ____          _            __ _ _
     /\\ / ___'_ __ _ _(_)_ __  __ _ \ \ \ \
    ( ( )\___ | '_ | '_| | '_ \/ _` | \ \ \ \
     \\/  ___)| |_)| | | | | || (_| |  ) ) ) )
      '  |____| .__|_| |_|_| |_\__, | / / / /
     =========|_|==============|___/=/_/_/_/
     :: Spring Boot ::                (v2.5.5)
    
    2021-11-04 21:30:16.294  INFO 1558 --- [           main] h.hellospring.HelloSpringApplication     : Starting HelloSpringApplication using Java 11.0.11 on veneas-MacBookAir.local with PID 1558 (/Users/veneas/Desktop/dev/hello-spring/build/libs/hello-spring-0.0.1-SNAPSHOT.jar started by hjs in /Users/veneas/Desktop/dev/hello-spring/build/libs)
    2021-11-04 21:30:16.298  INFO 1558 --- [           main] h.hellospring.HelloSpringApplication     : No active profile set, falling back to default profiles: default
    2021-11-04 21:30:17.980  INFO 1558 --- [           main] .s.d.r.c.RepositoryConfigurationDelegate : Bootstrapping Spring Data JPA repositories in DEFAULT mode.
    2021-11-04 21:30:18.120  INFO 1558 --- [           main] .s.d.r.c.RepositoryConfigurationDelegate : Finished Spring Data repository scanning in 124 ms. Found 1 JPA repository interfaces.
    2021-11-04 21:30:20.041  INFO 1558 --- [           main] o.s.b.w.embedded.tomcat.TomcatWebServer  : Tomcat initialized with port(s): 8080 (http)
    2021-11-04 21:30:20.067  INFO 1558 --- [           main] o.apache.catalina.core.StandardService   : Starting service [Tomcat]
    2021-11-04 21:30:20.067  INFO 1558 --- [           main] org.apache.catalina.core.StandardEngine  : Starting Servlet engine: [Apache Tomcat/9.0.53]
    2021-11-04 21:30:20.207  INFO 1558 --- [           main] o.a.c.c.C.[Tomcat].[localhost].[/]       : Initializing Spring embedded WebApplicationContext
    2021-11-04 21:30:20.207  INFO 1558 --- [           main] w.s.c.ServletWebServerApplicationContext : Root WebApplicationContext: initialization completed in 3742 ms
    2021-11-04 21:30:20.769  INFO 1558 --- [           main] o.hibernate.jpa.internal.util.LogHelper  : HHH000204: Processing PersistenceUnitInfo [name: default]
    2021-11-04 21:30:20.865  INFO 1558 --- [           main] org.hibernate.Version                    : HHH000412: Hibernate ORM core version 5.4.32.Final
    2021-11-04 21:30:21.263  INFO 1558 --- [           main] o.hibernate.annotations.common.Version   : HCANN000001: Hibernate Commons Annotations {5.1.2.Final}
    2021-11-04 21:30:21.441  INFO 1558 --- [           main] com.zaxxer.hikari.HikariDataSource       : HikariPool-1 - Starting...
    2021-11-04 21:30:21.536  INFO 1558 --- [           main] com.zaxxer.hikari.HikariDataSource       : HikariPool-1 - Start completed.
    2021-11-04 21:30:21.577  INFO 1558 --- [           main] org.hibernate.dialect.Dialect            : HHH000400: Using dialect: org.hibernate.dialect.H2Dialect
    2021-11-04 21:30:22.610  INFO 1558 --- [           main] o.h.e.t.j.p.i.JtaPlatformInitiator       : HHH000490: Using JtaPlatform implementation: [org.hibernate.engine.transaction.jta.platform.internal.NoJtaPlatform]
    2021-11-04 21:30:22.626  INFO 1558 --- [           main] j.LocalContainerEntityManagerFactoryBean : Initialized JPA EntityManagerFactory for persistence unit 'default'
    2021-11-04 21:30:23.723  WARN 1558 --- [           main] JpaBaseConfiguration$JpaWebConfiguration : spring.jpa.open-in-view is enabled by default. Therefore, database queries may be performed during view rendering. Explicitly configure spring.jpa.open-in-view to disable this warning
    2021-11-04 21:30:24.413  INFO 1558 --- [           main] o.s.b.a.w.s.WelcomePageHandlerMapping    : Adding welcome page: class path resource [static/index.html]
    2021-11-04 21:30:24.864  INFO 1558 --- [           main] o.s.b.w.embedded.tomcat.TomcatWebServer  : Tomcat started on port(s): 8080 (http) with context path ''
    2021-11-04 21:30:24.877  INFO 1558 --- [           main] h.hellospring.HelloSpringApplication     : Started HelloSpringApplication in 9.713 seconds (JVM running for 10.57)
    2021-11-04 21:31:00.905  INFO 1558 --- [nio-8080-exec-1] o.a.c.c.C.[Tomcat].[localhost].[/]       : Initializing Spring DispatcherServlet 'dispatcherServlet'
    2021-11-04 21:31:00.906  INFO 1558 --- [nio-8080-exec-1] o.s.web.servlet.DispatcherServlet        : Initializing Servlet 'dispatcherServlet'
    2021-11-04 21:31:00.907  INFO 1558 --- [nio-8080-exec-1] o.s.web.servlet.DispatcherServlet        : Completed initialization in 1 ms

     

    참고 강의

    https://www.inflearn.com/course/스프링-입문-스프링부트/dashboard

     

    [무료] 스프링 입문 - 코드로 배우는 스프링 부트, 웹 MVC, DB 접근 기술 - 인프런 | 강의

    스프링 입문자가 예제를 만들어가면서 스프링 웹 애플리케이션 개발 전반을 빠르게 학습할 수 있습니다., 스프링 학습 첫 길잡이! 개발 공부의 길을 잃지 않도록 도와드립니다. 📣 확인해주세

    www.inflearn.com