[React/연습] #03. React back-end 세팅 (2)

Updated:

이 글에 이어서 백엔드 서버를 구축하자.

MyBatis

이제 DB 작업을 할 때 MyBatis 프레임워크로 사용하도록 설정을 바꾼다.

dependencies 및 properties 수정

build.gradle의 dependencies에 아래의 내용을 추가하게 되면 이전 글에서처럼 h2-console은 접속이 불가능해진다고 한다.

implementation 'org.bgee.log4jdbc-log4j2:log4jdbc-log4j2-jdbc4:1.16'
implementation 'org.mybatis.spring.boot:mybatis-spring-boot-starter:3.0.1'

또한 application.properties 파일은 싹 지우고 다음의 내용을 copy and paste 한다.

# H2 Database
spring.h2.console.enabled=true
spring.h2.console.settings.web-allow-others=true
#spring.datasource.driver-class-name=org.h2.Driver
spring.datasource.driver-class-name=net.sf.log4jdbc.sql.jdbcapi.DriverSpy
#spring.datasource.url=jdbc:h2:mem:testdb
spring.datasource.url=jdbc:log4jdbc:h2:mem:testdb
# JPA
spring.jpa.hibernate.ddl-auto=create-drop
spring.jpa.show-sql=true
spring.jpa.generate-ddl=true
spring.jpa.defer-datasource-initialization=true
# Mybatis
mybatis.mapper-locations=classpath:mapper/**.xml
mybatis.configuration.map-underscore-to-camel-case=true
mybatis.configuration.call-setters-on-nulls=false
# 쿼리 로그 관련 설정
logging.level.jdbc.sqlonly=OFF
logging.level.jdbc.sqltiming=INFO
logging.level.jdbc.resultsettable=OFF
logging.level.jdbc.audit=OFF
logging.level.jdbc.resultset=OFF
logging.level.jdbc.connection=OFF

그리고 application.properties와 같은 위치에 log4jdbc.log4j2.properties 파일을 생성한다.

log4jdbc.spylogdelegator.name=net.sf.log4jdbc.log.slf4j.Slf4jSpyLogDelegator
log4jdbc.dump.sql.maxlinelength=0

Mapper 생성

BoardEntity.java 파일을 만들었던 db 폴더 안에 BoardMapper.java 파일을 만든다.

import org.apache.ibatis.annotations.Mapper;

@Mapper
public interface BoardMapper {
    List<BoardEntity> getBoardList();
}

그리고 resources 폴더에 mapper 폴더를 만들고 board.xml 파일을 생성한다. 여기서 주의할 점은 namespaceresultType 이름을 내 프로젝트명에 맞게 써야 한다는 점이다. (그대로 복붙 x)

<?xml version="1.0" encoding="UTF-8" ?>
<!DOCTYPE mapper PUBLIC "-//mybatis.org//DTD Mapper3.0//EN" "http://mybatis.org/schema/mybatis-3-mapper.dtd">

<mapper namespace="com.example.practice.db.BoardMapper">
    <select id="getBoardList" resultType="com.example.practice.db.BoardEntity">
        SELECT IDX
        , TITLE
        , CONTENTS
        , CREATED_BY
        , CREATED_AT
        FROM TB_BOARD
    </select>
</mapper>

Controller

MyBatis Mapper의 동작을 구현하기 위해 Controller를 만들 차례다.

컨트롤러 맛보기

메인 클래스와 같은 위치에 컨트롤러 클래스 BoardController.java 파일을 만든다.

import org.springframework.web.bind.annotation.GetMapping;
import org.springframework.web.bind.annotation.RestController;

import com.example.practice.db.BoardEntity;
import com.example.practice.db.BoardMapper;

import lombok.RequiredArgsConstructor;

@RequiredArgsConstructor
@RestController
public class BoardController {
    private final BoardMapper boardMapper;

    @GetMapping("/board")
    List<BoardEntity> getBoardList() {
        return boardMapper.getBoardList();
    }
}

@GetMapping annotation을 쓰게 되면 데이터를 조회하는 URL을 지정할 수 있다.
이 예제에서는 localhost:8080/board로 접속하면 TB_BOARD에 저장된 데이터를 조회할 수 있다.

여기까지 하고 서버를 실행하면 다음과 같은 결과가 나타난다.

terminal

browser

터미널에선 TB_BOARD가 잘 생성됐다고 뜨고, 브라우저에서는 데이터가 json 형태로 뿌려진다.


참고자료

Leave a comment