백앤드/SpringBoot + Java 간간한 백앤드 예제

[SpringBoot + Java] 프로젝트 생성 + 실행

맏리믓 2023. 7. 10. 16:06

서론

- 전에 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를 입력 해 주면 설정한 페이지가 뜨는것을 확인 할 수 있다.