목차
0. 환경
- m1 macbook
- IntelliJ IDEA(m1) - 202102
- java 11(AdoptOpenJDK-11.0.11)
- 자바를 설치하지 않았다면 아래의 링크를 활용해주세요.
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 클릭해 다운로드합니다.
- 다운로드 후 압축도 해제해 둡니다.
2. Spring Boot 열기(IntelliJ)
2.1. Spring Boot Project 열기(IntelliJ)
- 압축을 풀어 둔 Spring Boot Project를 IntelliJ로 열어줍니다.
- 라이브러리 다운로드가 필요해 시간이 좀 걸립니다.
2.2. Spring Boot Project 구조
주요 디렉터리 및 파일
[.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
- 버전이 맞지 않다면 변경해줍니다.
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
이동 후 다음 명령어를 실행해 확인합니다.
- ./gradlew build (윈도우 사용자: gradlew.bat 로 빌드)
- cd build/libs
- java -jar hello-spring-0.0.1-SNAPSHOT.jar
- 스프링 부트가 잘 실행이 되었는지 확인(웹 브라우저를 통해 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
'Backend > 코드로 배우는 스프링 부트' 카테고리의 다른 글
[코드로 배우는 스프링 부트] 5. 스프링 빈과 의존관계 (자바 코드로 직접 스프링 빈 등록하기) (0) | 2021.11.01 |
---|---|
[코드로 배우는 스프링 부트] 4. 스프링 빈과 의존관계 (컴포넌트 스캔과 자동 의존관계 설정) (0) | 2021.10.26 |
[코드로 배우는 스프링 부트] 3-2. 회원 관리 예제 (서비스, DI) (0) | 2021.10.25 |
[코드로 배우는 스프링 부트] 3-1. 회원 관리 예제 (도메인, 리포지토리) (0) | 2021.10.24 |
[코드로 배우는 스프링 부트] 2. Spring 웹 개발 기초(정적 컨텐츠, MVC, API) (0) | 2021.10.17 |