#02 DB세팅 (feat. MySql 세팅, Spring Entity)

김대진·2023년 3월 20일
0

Sekkison Project

목록 보기
3/22
post-thumbnail

DB 구성도

draw.io를 통해 구성할 테이블을 작성해주었다.

MySQL


cmd를 열고 MySQL에 접속한다.

mysql -u root -p
비밀번호 입력

아래 코드에서 DB이름과 아이디, 비밀번호만 넣어 입력하면, MySql에 빈 데이터베이스가 생성된다.

CREATE DATABASE 데이터베이스이름 default CHARACTER SET UTF8;
CREATE USER '아이디'@'localhost' IDENTIFIED BY '비밀번호';
GRANT ALL PRIVILEGES ON 데이터베이스이름.* TO '아이디'@'localhost';
FLUSH PRIVILEGES;

이 작업은 데이터베이스를 생성하고, 유저를 만들어 해당 데이터베이스에 권한을 부여하는 작업이다.

MySql 데이터베이스와 스프링 프로젝트를 연결할 차례이다. 먼저 Intellij 우측 데이터베이스 탭을 클릭한 후, Data Source -> MySql을 선택하자

이후 +를 눌러 앞에서 설정했던 MySql DB와 ID, PW를 세팅해 주면 된다.

이제 Springboot와 MySql의 연동이 끝났다.

Table & Entity 생성

우리 프로젝트의 엔티티 클래스 경로는
src/main/java/com.example.sekkison/user/User.class 이다.
클래스를 만들었다면, 안에 내용물을 채워넣을 차례이다.
아래는 우리 프로젝트의 User 엔티티 예시이다.

User.class

@Entity
@Table(name = "users")
@Data
@Builder
@NoArgsConstructor
@AllArgsConstructor
public class User extends BaseEntity {

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

    @Column(name = "username", unique = true)
    private String username;

    @Column(name = "password", nullable = false)
    private String password;

    @Column(name = "name", unique = true)
    private String name;

    @Column(name = "phone", nullable = false, unique = true)
    private String phone;

    @Column(name = "gender", nullable = false)
    private Character gender;

    @Column(length=500, name = "content")
    @ColumnDefault("''")
    private String content;

    @Column(name = "pos_x")
    private Double posX;

    @Column(name = "pos_y")
    private Double posY;

    @Column
    private String api;

    @Transient
    private String memo;
}

이 코드는 Java 언어를 사용하여 객체-관계 매핑(Object-Relational Mapping, ORM)을 위한 엔티티(Entity) 클래스를 정의한 것이다.

해당 클래스는 users라는 이름의 데이터베이스 테이블과 매핑되도록 만들었으며, 클래스 상단의 어노테이션은 왠만하면 그대로 쓰는 편이다.

다음으로 클래스 멤버 변수의의 어노테이션에 대해 정리해 보겠다

@Id
엔티티의 고유 식별자 값이다.

@GeneratedValue
strategy = GenerationType.IDENTITY 옵션을 통해 자동으로 unique하며 증가하도록 생성되게 설정한다.

@Column
Spring에서 자체적으로 @Entity 클래스 아래의 @Column 변수는 데이터베이스에 저장할 수 있도록 해 준다.
name, nullable, unique, length등등을 설정할 수 있다.

@ColumnDefault
User엔티티에 사용되지는 않았지만, 초기값으로 null이 세팅되는 @Column과 다르게 디폴트값을 넣어 준다.

@Transient
데이터베이스에 저장되지 않는 변수이다. 우리 프로젝트에서는 DTO(데이터 전달 객체)로서의 역할을 수행하기 위해 만들어 놓았다.

기본적으로 이정도만 알아도 대부분의 DB세팅은 할 수 있을 것이다.

최상단의 draw.io 데이터베이스대로, 9개의 엔티티를 만들었다.

profile
만재 개발자

0개의 댓글