[Java] Spring boot[3] - Controller로 페이지 띄우기

RedPanda·2022년 12월 5일
0

[Java] Spring Boot

목록 보기
1/5
post-thumbnail

백엔드에서 기초적으로 사용하는 MVC 패턴에 대해 공부해보고자 한다. MVC패턴이란 Model, View, Controller의 패턴을 기반으로 프로젝트를 구현해야 한다는 일종의 규칙이다.

Model은 DB, View는 프론트 화면, Controller는 API같은 기능을 말한다.
이번 포스팅에서는 Controller를 구성해보고자 한다.

디렉토리 Setting (수정)

본격적으로 서버를 만들기 전에 Spring의 틀부터 잡아보자.
틀은 앞서 말한 것과 별개로 Controller, Entity, Repository, Service가 있다. DB를 사용하는 것까지는 이것으로 충분하기에 여기까지만 만들고자 한다.
templates에서 boardWrite.html 파일을 만들어 넣어주도록 하자. 이 페이지는 메인 페이지가 된다.

  • Controller는 API로 요청이 왔을 때 이곳에서 처리한다. RESTful한 요청을 전부 처리해준다.
  • Entity는 받을 데이터들을 DB에 맞게 저장할 때 그 것들을 캡슐화(객체화)하여 정의해놓은 곳을 말한다.
  • Service는 Controller에서 기능에 대한 모든 처리를 할 수 없기 때문에 Service에서 세부적인 기능들을 꺼내올 수 있도록 하는 것을 말한다.
  • Repository는 JPA를 사용할 수 있도록 만들어놓은 Interface를 모아놓은 곳인 것 같다. 자세한 것은 배우면서 정리하도록 하자.

port 번호 설정은 /resource/application.properties 에서 해준다. nodeJS의 .env파일과 유사한 것 같다.
포트번호를 지정해주지 않으면 8080으로 접속할 수 있다.

server.port = 8000 // 다음 코드를 properties에 넣어준다.

어노테이션과 Mapping

'@'라는 표현을 처음보는 사람이 있을 것이다. 어노테이션이라 읽는데 나도 이번에 처음봐서 조금 알아보았다. 이를 메소드나 필드 앞에 붙이면 특정한 기능을 수행할 수 있게 된다. 자세한 부분은 아래의 링크를 참고하자.

https://honeyinfo7.tistory.com/56

각 경로에 대한 Mapping을 할 때에도 어노테이션을 사용한다.

@GetMapping(String Url) : Get 요청이 들어왔을 때 URL에 따라 메소드를 호출시킨다. ex) GetMapping("/")
@ResponseBody : 응답 값의 Body에 return할 값을 넣으면 그대로 반환된다.
@PostMapping(String Url) : Post 요청이 들어왔을 때 URL에 따라 메소드를 호출시킨다.

package com.study.demo.controller;

import org.springframework.stereotype.Controller;
import org.springframework.web.bind.annotation.GetMapping;
import org.springframework.web.bind.annotation.PostMapping;
import org.springframework.web.bind.annotation.ResponseBody;

@Controller
public class BoardController {

    // 값 리턴 시에 responsebody를 달아 준다
    @GetMapping("/")
    // Body가 있으면 return되는 값을 화면에 출력 또는 프론트에 값을 넘겨준다.
    @ResponseBody
    public String main(){
        return "Hello World";
    }

    // 페이지 매핑 시 string+ '.html' 파일을 찾아 랜더링해줌
    @GetMapping("/board")
    public String boardWriteForm(){
        return "boardWrite";
    }
}

처음 localhost로 진입하면 화면에 리턴된 String만 뜨게 된다. 이를 html에서 호출하려면 thymeleaf로 가져와야 한다. 이는 다음에 설명하고 아래의 코드를 index.html에 추가하도록 한다.

<!doctype html>
<html lang="en" xmlns:th="http://www.thymeleaf.org">
<head>
    <meta charset="UTF-8">
    <meta name="viewport"
          content="width=device-width, user-scalable=no, initial-scale=1.0, maximum-scale=1.0, minimum-scale=1.0">
    <meta http-equiv="X-UA-Compatible" content="ie=edge">
    <title>Document</title>
</head>
<body>
    <div th:text="${hello}"></div>
</body>
</html>

이상하게도 hello만 리턴했는데 index.html이 불러와졌다.
index.html이라 그런건가 해서 이름을 바꿔도 같았다. 왜그런지 추후에 질문해보아야겠다.

profile
끄적끄적 코딩일기

0개의 댓글