개요
개발 목적
- React와 SpringBoot를 학습한다.
- API 사용법을 학습한다.
- 이미지 저장을 위한 클라우드를 학습한다.
개발 환경
- 언어: JAVA, JavaScript, SQL
- 사용 툴: STS 4.8.1.RELEASE, VSCode, MySQL Workbench 8.0
- 사용 라이브러리 및 API: SpringBoot, React, CLOVA Document OCR
- DB: MySQL
테이블 구조
프로젝트 구조
오류 및 문제점
1. No matching variant of org.springframework.boot:spring-boot-gradle-plugin:3.1.0 was found.
- 문제점: STS4.8 Spring Boot 3.1.0 버전에서 Gradle 타입으로 프로젝트를 생성하면 프로젝트가 생성되지 않는다.
- 해결 방안: build.gradle에서 spring boot 버전을 낮춘다.
id 'org.springframework.boot' version '3.1.0'
id 'org.springframework.boot' version '2.4.5'
2. Error creating bean with name 'dataSource' defined in class path resource
- 문제점: Spring Boot와 MySQL 연결 시 MySQL 드라이버를 찾을 수 없다.
- 해결 방안: dependency를 Maven 중앙 저장소의 값으로 변경한다.
dependencies {
implementation group: 'com.mysql', name: 'mysql-connector-j', version: '8.0.32'
}
3. JPA Default value
- 문제점: JPA를 만들 때 default 값을 설정해도 builder를 통해 생성하면 기본 생성자를 호출하기 때문에 null 값이 들어간다.
- 해결 방안: Builder.Default를 사용한다.
@Column(columnDefinition = "VARCHAR(255) default '브론즈'")
private String userLevel;
public UserVO() {
this.userLevel = userLevel == null ? "브론즈" : this.userLevel;
}
@DynamicInsert
public class UserVO{
@ColumnDefault("브론즈")
private String userLevel;
}
@Builder.Default
private String userLevel = "브론즈";
4. JPA @ManyToOne
- 문제점: follow 테이블의 follower, following 둘 다 user 테이블에서 참조한다.
- 해결 방안: 각각 ManyToOne 연관관계를 설정한다.
public class FollowVO {
@Id
@GeneratedValue(strategy = GenerationType.AUTO)
private Long followNo;
@ManyToOne
@JoinColumn(name="follower")
private UserVO follower;
@ManyToOne
@JoinColumn(name="following")
private UserVO following;
}
진행 상황
1. DB 사용자 설정
create user trippers@'%' identified by '1234';
grant all privileges on triprecorder.* to trippers@'%';
create database triprecorder;
2. Spring Boot 환경설정
3. JPA를 이용해 user, profile, follow 테이블 생성
참고 자료