Spring - Spring Boot 사용하기

제훈·2024년 8월 12일

Spring

목록 보기
7/18
post-thumbnail

Spring의 방대한 데이터를 간단하게 사용할 수 있게끔 해주는 SpringBoot를 인텔리제이에서 사용해보자.

Spring Boot

Spring Boot의 Dependencies

Spring Web
Spring Boot Devtools
thymeleaf

예제 진행을 위해 3개의 라이브러리를 사용해보려고 한다.

Chap01AutoConfigurationLectureSourceApplication

package com.jehun.chap01;

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

@SpringBootApplication
public class Chap01AutoConfigurationLectureSourceApplication {

    public static void main(String[] args) {
        SpringApplication.run(Chap01AutoConfigurationLectureSourceApplication.class, args);
    }
}

applicatoin.properties

test.value=abc
test.username=jehun

스프링에서의 main을 실행하면 @SpringBootApplication의 설정 정보로 인해
1. 톰캣이 켜진다 -> 서블릿 컨테이너가 켜진다. 디스패처 서블릿 (Bean X) 또한 톰캣 내부에 뜨게 된다.
2. 그 이후 IoC Container가 켜져 우리가 등록한 Bean 들 또한 컨테이너에 등록한다.

  • 지금은 application.properties에 적은 데이터들이 가져와져서 실행했을 때 보이게 된 것

참고 : embedded.tomcat 부분이 내장 톰켓을 의미한다. 현재는 8080 포트로 돼 있다.


하지만 요즘은 properties 파일을 잘 사용하지 않는다..
반복되는 코드가 많아질 수 있어서 가독성이 떨어질 가능성도 있기 때문이다.
그래서 yaml 파일에 대해 알아보자.

application.yml

test:
  value: def
  age: 10

value는 위의 properties 파일과 겹친다. 누가 더 우선순위인지 알아보자.

우선순위가 properties 에게 밀리긴 한다. 그렇기 때문에 yaml 파일을 사용할 것인데 겹치면 헷갈릴 수도 있기 때문에 하나만 택한다.

properties 파일 삭제

  • 왜 yaml을 쓰느냐
  1. 한글 작성이 용이하다.
  2. 들여쓰기 (가독성에 좋다) 사용, 동일한 코드 반복 줄여줌 (중복 X)
  3. 주석을 작성할 수 있고,들여쓰기를 기준으로 주석처리를 할 수 있다.

포트 변경하려면 yml 파일에서

server:
	port: 8888

이런 식으로 변경해주면 바뀌게 된다.


Spring Request Mapping 테스트

GET 요청

/menu/register 경로의 GET 요청을 받아보자.

Chap02RequestMappingLectureSourceApplication

package com.jehun.chap02;

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

@SpringBootApplication
public class Chap02RequestMappingLectureSourceApplication {

    public static void main(String[] args) {
        SpringApplication.run(Chap02RequestMappingLectureSourceApplication.class, args);
    }

}

MethodMappingTestController

package com.jehun.chap02;

import org.springframework.stereotype.Controller;
import org.springframework.ui.Model;
import org.springframework.web.bind.annotation.GetMapping;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RequestMethod;

@Controller
public class MethodMappingTestController {

//    @GetMapping("/menu/register")
    @RequestMapping(value = "/menu/register", method= RequestMethod.GET)
    public String registerMenu() {
        System.out.println("/menu/register 경로의 GET 요청 받아보기");

        return "mappingResult";
    }
}

resources/static/index.html

<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <title>Title</title>
</head>
<body>
    <h1>Spring Request Mapping 테스트</h1>
    <h2>1. 메소드에 요청 매핑하기</h2>
    <h3>GET: /menu/register</h3>
    <button onclick="location.href='/menu/register'">GET 메뉴 등록 요청</button>

</body>
</html>

resources/template/mappingResult.html

<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <title>Title</title>
</head>
<body>
	<h3>응답 페이지</h3>
</body>
</html>

브라우저에서 localhost:8080/

버튼 누른 뒤

이런 상태에서 이제 model을 추가하면서 다른 방식으로도 할 수 있다.

mappingResult.html 수정

<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <title>Title</title>
</head>
<body>
<!--    <h3>응답 페이지</h3>-->
    <h3 th:text="${message}"></h3>
</body>
</html>

MethodMappingTestController 수정

	@RequestMapping(value = "/menu/register", method= RequestMethod.GET)
    public String registerMenu(Model model) {
        System.out.println("/menu/register 경로의 GET 요청 받아보기");

        model.addAttribute("message", "신규 메뉴 등록용 핸들러 메소드 호출하고 응답한 페이지");

        return "mappingResult";
    }

실행 결과


POST 요청

컨트롤러에 추가

//    @PostMapping("/menu/modify")
    @RequestMapping("/menu/modify")
    public String modifyMenu(Model model) {
        model.addAttribute("message", "POST 방식의 메뉴 수정용 핸들러 메소드 호출함...");

        return "mappingResult";
    }

index.html 에도 button 아래에 추가

<h3>POST: /menu/modify</h3>
<form action="/menu/modify" method="post">
    <button type="submit">POST 메뉴 수정 요청</button>
</form>


한 번 더 해보기

컨트롤러에 추가

    @GetMapping("/menu/delete")
    public String getDeleteMenu(Model model) {
        model.addAttribute("message", "GET 방식의 메뉴 삭제용 핸들러 메소드 호출함");

        return "mappingResult";
    }

    @PostMapping("/menu/delete")
    public String postDeleteMenu(Model model) {
        model.addAttribute("message", "POST 방식의 메뉴 삭제용 핸들러 메소드 호출함");

        return "mappingResult";
    }

index.html에 추가

<h3>GET: /menu/delete</h3>
<button onclick="location.href='/menu/delete'">GET 메뉴 삭제 요청</button>

<h3>POST: /menu/delete</h3>
<form action="/menu/delete" method="post">
    <button>POST 메뉴 삭제 요청</button>
</form>

실행해보면 둘다 잘 될 것이다.

profile
백엔드 개발자 꿈나무

0개의 댓글