[Java] Spring boot[5] - DB 연동하기

RedPanda·2022년 12월 7일
0

[Java] Spring Boot

목록 보기
4/5

오늘은 MVC중에서 Models를 공부해보고자 한다.
백엔드 서버와 DB를 연동하는 것은 서버의 기초라고 할 수 있다.
++) 이전에 시도했던 연동방법과 다르게 Gradle에서 연동하고자 한다. 연동하는 방법은 어렵지 않기에 메소드를 활용하여 데이터를 추가하는 것까지 해보고자 한다.

기본 설정

기본적인 설정은 이미 이전 포스팅에서 다루었다.
application.properties에 MariaDB를 연결해주는 코드를 작성해보자. 이 코드를 작성하기 전에 MariaDB가 컴퓨터에 깔려있어야 하며, password, username을 알고있어야 한다. 기본포트는 3306이다.

spring.datasource.driver-class-name=org.mariadb.jdbc.Driver
spring.datasource.username=root
spring.datasource.password=root
spring.datasource.url=jdbc:mariadb://localhost:3306/board

Mac에 mariaDB 설치

MariaDB Documents
https://mariadb.com/kb/ko/installing-mariadb-on-macos-using-homebrew/

기존의 mySQL이 깔려있는 사람은 MariaDB로 연동하려해도 충돌이 나게 된다. 다음을 따라하며 mariaDB 연동을 해보자.

brew install mariadb		# brew로 mariaDB 설치
brew unlink mysql		# mysql과의 충돌을 피하도록 unlink
mysql.server start		# db서버 실행
brew services start mariadb			# mariaDB 실행
sudo mysql -uroot -p		# 비밀번호 입력 필요

마지막으로 workbench나 dbeaver에 연결시켜서 초기 세팅을 마무리한다.

Post로 DB에 데이터 추가

DB 세팅을 마쳤으니 본격적으로 사용해보자. 이전에 세팅했던 boardWrite.html에서 제목과 내용을 입력받아 DB에 추가해보자.

1. Entity 설정

우선 DB의 칼럼에 맞게 객체를 만들어줄 class를 세팅해보자.
Entity 디렉토리에 Board.class라는 파일을 만들어준다.
id 값은 Auto Increment이기 때문에 필요한 어노테이션을 달아준다.(Id, GeneratedValue, GenerationType)

@Data를 사용하면 'get+필드명'으로 데이터를 가져올 수 있다.

// Entity로 Object 세팅
package com.study.demo.entity;


import lombok.Data;

import javax.persistence.Entity;
import javax.persistence.GeneratedValue;
import javax.persistence.GenerationType;
import javax.persistence.Id;

@Data
@Entity
public class Board {

    @Id
    @GeneratedValue(strategy = GenerationType.IDENTITY)
    private Integer id;

    private String title;

    private String content;
}

2. Repository 설정

JPA를 사용할 수 있도록하는 JpaRepository를 상속받아 사용자 인터페이스를 만들었다. DB에 저장할 Entity와 PK의 자료형을 제네릭에 넣어준다.

// JPA Repository 인터페이스
package com.study.demo.repository;

import com.study.demo.entity.Board;
import org.springframework.data.jpa.repository.JpaRepository;
import org.springframework.stereotype.Repository;

@Repository
public interface BoardRepository extends JpaRepository<Board, Integer> {}

3. Service 구현

JPA로 DB에 실질적인 작업을 맡을 Service를 구현해보자. 우선 JpaRepository를 불러온다. 또한 @Autowired로 인터페이스를 서로 공유하도록 한다.(어떻게 작동하는지도 차차 알아가보고자 한다.)
write 메소드를 만들어 매개로받은 board 객체를 저장한다.(INSERT)

// Controller에서 사용할 method 설정
package com.study.demo.service;

import com.study.demo.entity.Board;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Service;
import com.study.demo.repository.BoardRepository;

@Service
public class BoardService {

    @Autowired
    private BoardRepository boardRepository;

    public void write(Board board){
        boardRepository.save(board);
    }
}

4. Controller 구현

마지막으로 위에서 설정한 것들을 사용할 Controller를 구현해보자.
Controller에서 @PostMapping으로 url과 body를 받는다. body는 따로 파라미터에 들어오며, 파라미터는 Entity의 클래스 형식에 맞춰 들어온다. Service에서 구현한 메소드를 호출하여 들어온 데이터들을 호출한다.
'getId()'처럼 @Data를 사용하여 일부만 호출하는 것도 가능하다.

//Controller
package com.study.demo.controller;


import com.study.demo.entity.Board;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Controller;
import org.springframework.ui.Model;
import org.springframework.web.bind.annotation.GetMapping;
import org.springframework.web.bind.annotation.PostMapping;
import org.springframework.web.bind.annotation.ResponseBody;
import com.study.demo.service.BoardService;

@Controller
public class BoardController {

    @Autowired
    private BoardService boardService;

    // 값 리턴 시에 responsebody를 달아 준다
    @GetMapping("/")
    @ResponseBody
    public String main(){
        String hello = "Hello World";
        return hello;
    }

    // 페이지 매핑 시 확장자(html) 제외하고 text 리턴
    @GetMapping("/board")
    public String boardWriteForm(){
        return "boardWrite";
    }

    @GetMapping("/board/get-list")
    public String boardList(Model model){
        model.addAttribute("list", boardService.boardList());
        return "boardList";
    }

    // 게시글 가져오는 POST 요청
    @PostMapping("/board/add-board")
    public String addBoardWrite(Board board){

        System.out.println(board.getId());
        boardService.write(board);

        return "";
    }
}

여담

편리한 어노테이션이 많아 알고만 있으면 정말 편하게 코드를 짤 수 있을 것 같다. 얼른 다른 것도 만들어보고 싶다.

profile
끄적끄적 코딩일기

0개의 댓글