[SpringBoot + Java] 프로젝트 생성 + 실행
서론
- 전에 Runjob(ThreeMovie) 프로젝트를 진행 하며 springboot 를 사용 했을 때는 상황에 필요한 지식만을 검색하며 진행 하였다.
- 프로젝트를 끝내고 나니 배운 것은 많았지만 springboot 에 대한 체계가 잡히지 않은 채로 너무 중구난방 식으로 지식을 머리에 대려 박은 느낌이 들었다.
- 이번 기회에 체계적으로 SpringBoot 를 학습 해 보고자 블로그를 작성 해 보려고 한다.
들어가며
- SpringBoot 를 공부 하기 위해 우선 프로젝트를 생성 해 볼 것이다.
- 그 후 생성된 SpringBoot 프로젝트의 구조를 간략하게 살펴 본 후
- 실행과 원하는 웹페이지를 띄워 보는 작업을 해 볼 것이다.
프로젝트 생성
- Intellij 유료버전을 사용 시 프로젝트 생성 방법은 2가지가 있다.
- 하나는 Intellij 의 기능을 이용하여 프로젝트를 생성 하는 것이고,
- 두번째는 https://start.spring.io/ 사이트를 이용하여 생성 하는 것이다.
[Intellij 사용시]
- 우선 Intellij 에서 (new -> project) 를 통해 새로운 프로젝트 생성 UI 를 띄워 준다.
- 그 후 좌측 탭에서 Spring Initializr 를 선택 해 원하는 프로젝트의 이름을 입력 해 준다.
- 이후 우측 화면에서 Language(Java), Type(Gradle - Groovy), JDK(17), Java(17) 을 본인 프로젝트에 맞게 설정 해 준다.
본인은 괄호 안의 값으로 설정 함
- Next 를 눌러 SpringBoot 설정 페이지로 넘어 간다.
- 넘어간 페이지에선 SpringBoot 의 버전(3.1.1), Dependencies를 선택 하는 창이 뜬다.
여기서 Dependencies 는 프로젝트에서 사용할 라이브러리 정도로 생각 하면 된다.
이번 프로젝트에선 아래의 라이브러리를 기본으로 사용 할 것이다.
. Web/Spring Web
. Template Engines/Thymeleaf
[Intellij를 사용하지 않을 시]
- https://start.spring.io/ 사이트로 들어가 준다.
- 들어가게 되면 위에서 하는설정과 비슷한 페이지가 뜨게 된다.
- 똑같이 Project(Gradle - Groovy), Language(Java), SpringBoot(3.1.1), Java(17),
Dependencies 를 2개 선택 해 주고( . Web/Spring Web . Template Engines/Thymeleaf)
- GENERATE 버튼을 눌러 준다.
- 그럼 .zip 파일을 다운 받게 되는데 이를 압축 해제 하여 사용 하는 IDE 에서 열어 주면 된다.
프로젝트 구조
- 생성 후 프로젝트를 열게 되면 Dependencies 에 추가 되었던 라이브러리와 그들과 의존관계에 있는 라이브러리를 모두 다운 받게 된다.
- 다운이 끝난 후 폴더 구조를 살펴 보면 src, build.gradle, .... 등 다양한 파일이 보이게 된다.
- 여기서 중요한 파일, 디렉토리를 살펴 보자면
. src : 이후 프로그래머가 코드를 작성하는 공간
. main : 패키지와 API 등 여러 기능을 추가하는 작업 공간
. test : 실제 서비스 하기 전 test를 위한 test 코드를 추가하는 공간
. build.gradle : 프로젝트의 여러 설정 값, 사용하는데 필요한 라이브러리 등이 기록 되어 있음
라고 알고 있으면 될듯 싶다.
프로젝트 실행
- 아무 작업도 하지 않은 상태라도 실행은 가능 하다.
- 아주 전에 java 로 알고리즘을 풀때 처럼 java 는 기본적으로 main 에서 부터 시작한다.
- 이 프로젝트에서 main 은 "src/main/java/[프로젝트 이름]/~Application" 파일을 열면 볼 수 있다.
package com.example.springlearn;
import org.springframework.boot.SpringApplication;
import org.springframework.boot.autoconfigure.SpringBootApplication;
@SpringBootApplication
public class SpringLearnApplication {
public static void main(String[] args) {
SpringApplication.run(SpringLearnApplication.class, args);
}
}
- 따라서 지금 상태로도 main 만 실행 하면 프로젝트가 실행 된다.
- Application 을 run 한 후 Web 에서 "localhost:8080" 을 입력 하면 페이지가 뜬다.
뷰 설정을 통해 화면 띄우기
- SpringBoot 는 "main/resource/static/index.html" 을 생성 해 주면 이를 "welcome page" 로 자동으로 사용한다.
- 여기서 welcome page 란 아무 정보도 넘기지 않고 도메인 만으로(여기선 localhost:8080 만 쳤을 때) 의 화면이다.
- 위에서 말한 디렉토리에 index.html 을 생성 하고 아무 html 코드를 입력 해 보자. 그럼 설정 한 대로 화면이 잘 뜬다.
GET 으로 API 호출(controller)
- 원하는 대로 동작 하는 화면을 만들어 보자
- 보통 이를 컨트롤러라고 칭하기 때문에 프로젝트 패키지 바로 아래에 "controller" 라는 디렉토리를 생성 한 후 "HelloController" 라는 이름의 파일을 하나 생성 해 준다.
- 여기서 GetMapping 안의 "hello" 는 url 에서 localhost:8080/hello 했을 때 바로 아래의 hello 함수가 실행 되게 해 준다.
//HelloController.java
package com.example.springlearn.controller;
import org.springframework.stereotype.Controller;
import org.springframework.ui.Model;
import org.springframework.web.bind.annotation.GetMapping;
@Controller
public class HelloController {
@GetMapping("hello")
public String hello(Model model){
model.addAttribute("data", "hello!!"); // hello.html 의 data 에 hello!! 를 대입
return "hello";// templates/hello 에 리턴 해 주게 됨
}
}
- 여기에 연동 되는 페이지를 만들기 위해 "main/resource/templates/hello.html" 을 하나 생성 해 준다.
이때 html 의 파일명인 hello 는 controller 의 return 값인 hello 와 동일 해야 연동이된다.
<!DOCTYPE HTML>
<html xmlns:th="http://www.thymeleaf.org">
<head>
<title>Hello</title>
<meta http-equiv="Content-Type" content="text/html; charset=UTF-8" />
</head>
<body>
<p th:text="'hihi. ' + ${data}"> hihi</p>
</body>
</html>
재 실행
- 재 실행 하고 (run) 웹에서 localhost:8080/hello를 입력 해 주면 설정한 페이지가 뜨는것을 확인 할 수 있다.