nyximos.log

Spring Boot + MySQL + JPA + Thymeleaf 로 CRUD 구현하기 02 Controller에서 데이터 반환 본문

Programming/Spring Boot

Spring Boot + MySQL + JPA + Thymeleaf 로 CRUD 구현하기 02 Controller에서 데이터 반환

nyximos 2022. 8. 1. 15:16

Spring Boot + Gradle + MySQL + JPA + Thymeleaf  환경에서 간단한 CRUD 예제를 만들어보자

이번 포스팅에서는 Controller에서 페이지와 데이터를 반환할 것이다.

Postman 사용방법도 겸사겸사 알아보자.

 

 

주요 기능

회원가입

로그인

게시글 등록

게시글 수정

게시글 삭제

게시글 조회 (일반 회원 조회수와 운영자 회원 조회수 따로 구분)

게시글 추천 

 

 

 

 

 

프로젝트 구조

 

/src/main 폴더 내에는 javaresources 폴더가 있다.

 

/src/main/java

일반적인 자바 소스 등록

하위 패키지 구성은 개발자마다 다르다.

 

나는 Config, Controller, Service, Repository, Domain,  Util 패키지를 생성할 것이다.

이전 포스팅에서 소개하지 않은 폴더가 두가지 있는데

Config 패키지에서는 Security 등 각종 설정 파일을 넣어두고

Util 패키지에서는 문자열 처리, 날짜 처리등 비즈니스 로직과 독립된 기능을 넣어둔다.

 

위에서 말했듯이 개발자마다 프로젝트 구조가 다르기 때문에

패키지 명이 다른 것은 물론이고

config 패키지를 만들지 않는다거나, exception, dao 등의 패키지를 추가할 수 있다.

 

따라서 다른 사람의 프로젝트를 볼 때는 프로젝트 구조를 파악하는 것이 중요하다. 

 

 

기본 구조가 생각 안 난다면 아래 포스팅을 참고하자.

꼭 숙지하고 넘어가도록 하자.

https://nyximos.tistory.com/82

 

Spring Boot + MySQL + JPA + Thymeleaf 로 CRUD 구현하기 00 - 개발 환경 구성, 서버 개발 과정

Spring Boot + Gradle + MySQL + JPA + Thymeleaf  환경에서 간단한 CRUD 예제를 만들어보자 백엔드 로직을 쉽게 이해하고자 디자인은 최소한으로 하여 작업할 예정이다. 프로젝트 생성에 앞서 프로젝트 개발

nyximos.tistory.com

 

/src/main/resources

리소스 파일 저장

 

static : HTML, CSS, JS 등 정적인 웹리소스

templates : 타임리프 등 템플릿 기반의 웹리소스 저장

application.properties : 프로젝트 전체에서 사용할 프로퍼티 정보들을 저장한 파일

 

 

/src/test/java

테스트 케이스 작성

 

 

/src/main/java/com/study/프로젝트명 위치에서 오른쪽 마우스 클릭

New - Package 를 눌러 다음과 같이 생성해준다.

패키지명은 소문자로 등록해주자.

 

 

 

 

 

 

spring 서버에서 클라이언트에게 데이터를 넘겨줄 때 여러가지 방법이 있다.

1. 동적인 페이지를 구성해서 클라이언트에게 반환

2. Ajax로 요청해서 Json을 반환

 

 

크게 이렇게 두가지 방법으로 나뉜다.

앞으로 차근차근 해보도록 하자.

 

 

 

1. 정적 페이지 반환

/src/main/resources/static 폴더에 index.html 폴더를 생성하자.

<!DOCTYPE html>
<html lang="ko">
<head>
    <meta charset="UTF-8">
    <title>Title</title>
</head>
<body>
  <h1>idnex</h1>
</body>
</html>

 

 

 

서버 실행

서버 실행 후 http://localhost:포트번호/  주소로 들어갔을 때 다음과 똑같은 창이 뜨면 성공!

 

 

 

2. 동적 페이지 반환

/src/main/resources/templates 폴더에 hello.html 폴더를 생성 후 아래 코드를 작성한다.

/src/main/resources/static 에서 image 폴더를 생성후 화면에 띄울 아무 이미지를 저장해둔다.

<!DOCTYPE html>
<html lang="ko" xmlns:th="http://www.thymeleaf.org">
<head>
    <meta charset="UTF-8">
    <title>Hello</title>
</head>
<body>
    <h1>hello world!</h1>
    <h3 th:text="${name}"></h3>
    <img th:src="${img}">
</body>
</html>

 

 

<html lang="ko" xmlns:th="http://www.thymeleaf.org">

html 태그 내에 xmlns 속성에 thymeleaf와 관련된 속성값이 지정되어 있다.

Thymeleaf는 기존 text나 class 등  기존 속성 앞에 th: 를 붙여주고 속성 값을 지정해준다.

 

더 많은 사용법이 알고 싶다면 공식 문서를 활용하자.

프로젝트를 진행하면서 타임리프 문법때문에 막힐때가 분명 올텐데 영어라고 피하지말고 공식문서를 자주 찾아보도록 하자 

https://www.thymeleaf.org/doc/tutorials/3.0/usingthymeleaf.html#what-is-thymeleaf

 

Tutorial: Using Thymeleaf

1 Introducing Thymeleaf 1.1 What is Thymeleaf? Thymeleaf is a modern server-side Java template engine for both web and standalone environments, capable of processing HTML, XML, JavaScript, CSS and even plain text. The main goal of Thymeleaf is to provide a

www.thymeleaf.org

 

 

 

 

Controller

controller 패키지에 WebController 라는 이름의 자바 클래스를 생성한 후 아래 코드를 작성한다.

복붙하지말고 직접 치도록 하자.

 

    @GetMapping("/hello")
    public String hello(Model model) {
        model.addAttribute("name", "내이름");
        model.addAttribute("img", "image/파일명");
        return "hello";
    }

 

@Controller와 @GetMapping 이 빨간색으로 뜰 경우

해당 위치에서 Alt + Enter 를 누르면 인텔리제이가 해결 방법을 찾아준다.

import class 하면 import 문을 자동으로 생성해준다.

mac OS : ⌥ ⏎ 

 

@Controller

컨트롤러 클래스 내의 메소드의 리턴타입으로 문자열을 사용했을 때,

문자열에 해당하는 View를 찾아서 클라이언트에게 반환해준다.

 

@GetMapping("/")

GET 방식으로 "/" 요청이 들어왔을 때 실행될 메소드라는 뜻이다.

@RequestMapping(value="/", method=RequestMethod.GET)을 사용해도 동일하다.

 

 

hello 함수에 파라미터로 Model을 받아온다.

model.addAttribute(String name, Object value);

model 객체에 data를 담을 수 있다.

첫번째 매개변수에는 key가 될 속성명을, 두번째 매개변수에는 data를 넣어준다.

이렇게하면 반환하려는 View에 속성명에 맞는 data가 전달된다.

 

각자 이름과 이미지 파일명을 수정한 후 서버를 실행해보자.

 

 

 

 

 

3. JSON 반환

controller 패키지에 ApiController 라는 이름의 자바 클래스를 생성한 후 아래 코드를 작성 후 서버를 실행해주자.

@RestController
@RequestMapping("/api")
public class ApiController {
    
    @GetMapping("/name")
    public String name() {
        return "내이름";
    }
    
}

 

@RestController

REST 방식의 응답을 처리하는 컨트롤러를 구현할 수 있다.

 

@RequestMapping

메소드 뿐만 아니라 클래스 단위에도 해당 어노테이션을 사용할 수 있다.  

 

 

 

 

Postman을 실행 후 Workspace를 생성해준다.

 

 

+ 버튼 누르면 요청을 생성할 수 있다.

 

GET 방식으로 보내는지 확인해주고 주소를 입력후 Send를 해보자.

 

결과는 404 Not Found 에러가 뜬다.

해당 주소에 매핑되는 리소스를 찾을 수 없다는 뜻이다.

이럴 때는 먼저 URL이 정확한지 확인해본다.

 

 

 

이상한 점을 발견했다면 수정해서 다시 요청을 날려보자 !

답을 보지 않고 고민해보자.

 

 

 

 

 

더보기

 

 

요청 주소가  "http://localhost:8086/name"라고 되어 있다.

 

컨트롤러 클래스 단위에 @RequestMapping을 사용하여 "/api" 주소를 매핑했기 때문에

http://localhost:8086/api/name 주소로 요청을 해야한다!

 

 

 

 

 

성공 !

이번 시간에는 String만 반환했지만 보통 클래스 단위로 전달된다.

 

 

 

 

 

글에서 이해가 안되는 부분이 있다면 댓글로 알려주세요 😶