[React/연습] #02. React back-end 세팅 (1)

Updated:

이제 이 블로그를 참고해서 백엔드 서버를 구축하려고 한다.

build.gradle <= 의존성(dependency) 주입

백엔드 프로젝트로 가서 build.gradle 파일을 수정할 것이다. build.gradle 파일을 처음으로 열어보면 dependencies 부분이 이렇게 생겼다:

dependencies {
	implementation 'org.springframework.boot:spring-boot-starter-thymeleaf'
	implementation 'org.springframework.boot:spring-boot-starter-web'
	testImplementation 'org.springframework.boot:spring-boot-starter-test'
}

첫 번째 포스팅에서 프로젝트를 생성할 때 설정했던 대로 되어있는 것이다.
여기에 DB 기본 세팅에 필요한 JPA와 자바 개발에 필요한 Lombok 의존성을 추가하려고 한다.

dependencies {
	// lombok 의존성 추가
	compileOnly 'org.projectlombok:lombok'
  annotationProcessor 'org.springframework.boot:spring-boot-configuration-processor'
  annotationProcessor 'org.projectlombok:lombok'

	// jpa 의존성 추가 (for database)
  implementation 'org.springframework.boot:spring-boot-starter-data-jpa'
  implementation 'com.h2database:h2:1.4.193'

	implementation 'org.springframework.boot:spring-boot-starter-thymeleaf'
	implementation 'org.springframework.boot:spring-boot-starter-web'
	testImplementation 'org.springframework.boot:spring-boot-starter-test'
}

application.properties

src/main/resources/으로 가면 application.properties 파일이 있다.
처음에 이 파일은 아무것도 없는 빈 파일인데, 여기에 아래의 코드를 추가한다.

# 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.url=jdbc: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

SQL문

그리고 application.properties와 같은 위치에 import.sql 파일을 생성하고 아래의 코드를 copy and paste 한다.

DROP TABLE IF EXISTS TB_BOARD CASCADE;
CREATE TABLE TB_BOARD (IDX BIGINT GENERATED BY DEFAULT AS IDENTITY, CONTENTS VARCHAR(255), CREATED_AT TIMESTAMP, CREATED_BY VARCHAR(255), TITLE VARCHAR(255), PRIMARY KEY (IDX));

INSERT INTO TB_BOARD (IDX, TITLE, CONTENTS, CREATED_BY, CREATED_AT) VALUES (1, '게시글 제목1', '게시글 내용1', '작성자1', NOW());
INSERT INTO TB_BOARD (IDX, TITLE, CONTENTS, CREATED_BY, CREATED_AT) VALUES (2, '게시글 제목2', '게시글 내용2', '작성자2', NOW());
INSERT INTO TB_BOARD (IDX, TITLE, CONTENTS, CREATED_BY, CREATED_AT) VALUES (3, '게시글 제목3', '게시글 내용3', '작성자3', NOW());
INSERT INTO TB_BOARD (IDX, TITLE, CONTENTS, CREATED_BY, CREATED_AT) VALUES (4, '게시글 제목4', '게시글 내용4', '작성자4', NOW());
INSERT INTO TB_BOARD (IDX, TITLE, CONTENTS, CREATED_BY, CREATED_AT) VALUES (5, '게시글 제목5', '게시글 내용5', '작성자5', NOW());
INSERT INTO TB_BOARD (IDX, TITLE, CONTENTS, CREATED_BY, CREATED_AT) VALUES (6, '게시글 제목6', '게시글 내용6', '작성자6', NOW());
INSERT INTO TB_BOARD (IDX, TITLE, CONTENTS, CREATED_BY, CREATED_AT) VALUES (7, '게시글 제목7', '게시글 내용7', '작성자7', NOW());
INSERT INTO TB_BOARD (IDX, TITLE, CONTENTS, CREATED_BY, CREATED_AT) VALUES (8, '게시글 제목8', '게시글 내용8', '작성자8', NOW());
INSERT INTO TB_BOARD (IDX, TITLE, CONTENTS, CREATED_BY, CREATED_AT) VALUES (9, '게시글 제목9', '게시글 내용9', '작성자9', NOW());
INSERT INTO TB_BOARD (IDX, TITLE, CONTENTS, CREATED_BY, CREATED_AT) VALUES (10, '게시글 제목10', '게시글 내용10', '작성자10', NOW());
INSERT INTO TB_BOARD (IDX, TITLE, CONTENTS, CREATED_BY, CREATED_AT) VALUES (11, '게시글 제목11', '게시글 내용11', '작성자11', NOW());
INSERT INTO TB_BOARD (IDX, TITLE, CONTENTS, CREATED_BY, CREATED_AT) VALUES (12, '게시글 제목12', '게시글 내용12', '작성자12', NOW());

이 코드는 TB_BOARD 테이블과 데이터를 생성하는 H2 Database 기반 SQL문이다. 참고한 블로그에 있는 코드를 그대로 긁어왔다.

붙여넣기 한 다음엔 테이블 생성하는 코드 부분은 주석 처리한다. VS Code에서 주석 처리하는 단축키는 command⌘+/ 이다.

Entity 클래스 생성

이제 java로 넘어와서 Entity 클래스를 생성해 볼 건데, 그 전에 파일을 분류해두기 위해 폴더를 구성해 놓는다.

src/main/의 패키지로 이동해서 Main 클래스가 있는 위치에 db, dto, util 폴더를 만든다.

backend-tree

그리고 db 폴더 안에 BoardEntity.java 파일을 만든다.

import java.util.Date;

import javax.persistence.*;

import org.hibernate.annotations.DynamicInsert;
import org.hibernate.annotations.DynamicUpdate;

import lombok.AllArgsConstructor;
import lombok.Builder;
import lombok.Data;
import lombok.NoArgsConstructor;

@Data
@AllArgsConstructor
@NoArgsConstructor
@Builder
@Entity
@Table(name = "TB_BOARD")
@DynamicInsert
@DynamicUpdate
public class BoardEntity {
    @Id
    @GeneratedValue(strategy = GenerationType.IDENTITY)
    private Long idx;
    private String title;
    private String contents;
    private String createdBy;
    private Date createdAt;
}

참고로 import 부분은 annotation 코드를 쓸 때 자동으로 불러와진다.

이제 서버를 실행해 본다.
서버를 실행하려면 첫 포스팅에서 했던 것처럼 Main 클래스가 있는 ~~Application.java 파일을 열어서, main문 위에 있는 Run 버튼을 클릭한다.

back-end-java

프로젝트가 잘 실행되고 있다면 터미널 창에 이런 내용이 뜬다.

back-end-running

이런 상태에서 브라우저를 열어 localhost:8080/h2-console에 접속하면 아래와 같은 화면이 뜬다.

h2-console

여기서 JDBC URLjdbc:h2:mem:testdb를 입력하고, 유저네임에는 sa를 입력한 다음에 Test Connection 버튼을 눌러본다. 이때 Test successful라는 글씨가 뜨면 접속이 가능한 상태이므로, Connect 버튼을 눌러서 접속한다.

h2-console

그러면 왼쪽에 TB_BOARD 테이블이 있는 것을 확인할 수 있다.
또한 SQL statement 입력 칸에 SELECT 문을 작성하면 다음과 같이 TB_BOARD의 데이터가 잘 출력된다.

tb-board


참고자료

Leave a comment