처음부터 차근차근

[Spring] SpringBoot Starter를 통해 프로젝트 생성 본문

FrameWork/Spring

[Spring] SpringBoot Starter를 통해 프로젝트 생성

HangJu_95 2023. 12. 16. 23:27
728x90

이번 포스트는 Spring을 통해 간단한 Project를 만들어보기 위해 기록하였습니다.

Express와는 너무 다른 언어이기 때문에 (Nest는 약간 비슷하더라..?) 한번 공부해보겠습니다.

주의! 이 포스트는 기초를 위한 포스팅입니다.

프로젝트 생성

SpringBoot start 사이트로 들어가서 스프링 프로젝트를 생성합니다.

https://start.spring.io/

나는 dependencies를 이렇게 적어뒀다.

 

먼저 왼쪽에 보면 체크해야 할 것들이 보입니다.

  • Project : Gradle - Groovy로 선택해줍니다.(코틀린 쓸 거 아니면..)
  • Language : Java
  • Spring Boot : 3.2.0으로 선택
  • 나머지 Group과 Artifact를 마음대로 적어주면 됩니다.
  • Package는 Jar, Java version 은 17로 적어줍니다.

오른쪽에는 Dependencies를 추가할 수 있습니다.

여러가지가 존재했는데, 김영한님의 강의를 따라하기 때문에 Spring Web과 Thymeleaf를 추가해줍니다.

초기에 dependency를 추가할 수 있다.

이렇게 Dependencies를 추가하고 GENERATE 버튼을 눌러주면, Spring boot Starter가 알아서 Dependencies에 추가한 내역들을 자동으로 라이브러리에 설치해줍니다.

(해당 Dependencies와 관련있는 Library도 알아서 추가해준다)

Spring 구조 확인

먼저 다운로드 받은 프로젝트를 압축 해제하고,

IntelliJ를 통해서 Open을 하는데, 해당 폴더 안의 build.gradle을 선택해줍니다.

처음 프로젝트 생성 후 Open할 때
초기 폴더 생성 시

처음 프로젝트를 생성하고 폴더를 열어보면, 신기한 것들이 많이 나왔습니다.

Gradle??

여기저기 폴더에 보면 Gradle이 많이 나옵니다.

그냥 한번 심심해서 build.gradle을 한번 열어봤습니다.

생긴게.. Package.JSON이랑 비슷한데?

한번 열어보니.. Nest 프로젝트를 진행하면서 자주보는 Package.JSON이랑 비슷하게 보였습니다.

지금은 간단하게, Gradle이 빌드 자동화와 dependencies 관리 등 자동화를 위한 Tool이라고 생각하자.

 

저 위에 repositories는 뭔가 알아봤는데,

mavenCentral()을 통해 NPM과 같은 역할을 하는 거라고 생각하면 편합니다.

https://mvnrepository.com/

들어가보니 다양한 library가 존재했습니다.

SpringBoot App 실행해보기

// src/main/java/hello.hellospring/helloSpringApplication.java

package hello.hellospring;

import org.springframework.boot.SpringApplication;
import org.springframework.boot.autoconfigure.SpringBootApplication;

@SpringBootApplication
public class HelloSpringApplication {

	// Java에서는 psvm이 필수입니다.
    public static void main(String[] args) {
		// SpringApplication을 실행시켜주는 메서드
        // Nest로 치면, main.ts에 존재하는 코드와 동일합니다.
        SpringApplication.run(HelloSpringApplication.class, args);
	}

}

지금은 어렵게 생각하지 않고, SpringApplication.run을 통해 내가 작성한 코드를 실행시키는 것으로 생각하시면 편합니다.

library 확인해보기

우측 상단에 Gradle(코끼리)를 클릭하시면, 내가 무슨 Library를 어디서 쓰고 있는지 확인할 수 있습니다.

Spring.Io 활용

Nest도 Doc가 있듯이, Spring도 Docs가 존재합니다.

https://spring.io/

Spring boot 안내

간단한 MVC 만들기

Static page 생성

Spring은 MVC Pattern에 최적화 되어있다고 많이 들었는데, 어떻게 사용하는지 한번 직접 해보겠습니다.

(해당 포스트는 thymeleaf Template Enging을 사용하였습니다.)

 

먼저 Static page를 만들어줄 겁니다.

resourece/static/index.html

<!DOCTYPE HTML>
<html lang = 'ko'>
<head>
    <title>Hello</title>
    <meta http-equiv="Content-Type" content="text/html; charset=UTF-8" />
</head>
<body>
Hello
<a href="/hello">hello</a>
</body>
</html>

index.html을 만들어서 간단한 정적 홈페이지를 만들어봤습니다.

localhost:8080을 들어가면 정적 홈페이지가 나옵니다.

MVC 패턴 적용

이번에는 Controller와 View를 이용하여, 정말 간단한 MVC 패턴을 만들어보겠습니다.

(사실 이정도면 V와 C만 있는 정도..)

//controller/HelloController.java
@Controller
public class HelloController {

    @GetMapping("hello")
    public String hello(Model model) {
    	// model 내 data라는 속성에 hello!!를 넣어줍니다.
        model.addAttribute("data", "hello!!");
        // return에 해당하는 view model을 String으로 입력하면 자동으로 Mapping이 됩니다.
        return "hello";
    }
}

Resource/templates/hello.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="'안녕하세요. ' + ${data}" >안녕하세요. 손님</p>
</body>
</html>

 

이렇게 만들면, 실제로 잘 동작하는데, 동작 원리가 어떤것인지 간단하게 그림을 통해 알아보겠습니다.

스프링 동작 원리, 참고: 스프링 입문_김영한

  • 컨트롤러에서 리턴 값으로 문자를 반환하면, viewResolver가 문자에 해당하는 html을 알아서 찾아서 처리합니다.
    • 스프링 부트 템플릿엔진이 기본적으로 viewName을 알아서 Mapping합니다.