Project/SpringBoot+JPA 게시판

[SpringBoot + JPA 게시판 만들기] 프로젝트 생성 및 환경 설정 + 엔티티(Entity) 생성 - 2

장용석 2024. 2. 13. 00:54

 

🔥 프로젝트 생성

Spring initializer 를통해 버전 정보, 언어, 이름, 의존성 등을 설정하고 프로젝트를 생성해줍니다. 

 

💡 Dependencies

Lombok : 어노테이션을 사용하여 getter, setter와 같은 반복되는 형식적인 코드를 줄이기 위해 의존성 설정합니다.
Spring Web : Spring MVC, Apache Tomcat 등 웹개발에 필요한 의존성을 제공합니다.

Thymeleaf : Thymeleaf 템플릿 엔진 사용하여 View를 렌더링 하기위해 의존성 설정합니다.Spring Data JPA : JPA를 사용하기 위해 의존성 설정합니다.( 🚨 아직 Spring Data JPA를 배우지 않았기 때문에 JPA만으로 개발하도록 하겠습니다. )

MariaDB Driver : mariaDB를 사용하기 위해 의존성 설정합니다.Validation : 입력 데이터를 미리 검증(Validation) 하기위해 설정합니다.
Spring Boot DevTools: 애플리케이션을 다시 시작하지 않고 수정된 부분을 반영하여 리로딩 하거나 설정 파일의 변경을 감지하고 반영 하는 등 개발할 때 편의 기능을 제공한다.

 

생성한 프로젝트를 build.gradle을 통해 불러옵니다.바로 실행하게되면 아래와같은 에러가 뜨게되는데 데이터베이스의 소스를 설정해 주지 않아 발생한 에러입니다.

application.yml 데이터베이스 초기 설정을 해줍니다. ( 처음에는 properties지만 yml이 더 보기편해 변경하였습니다.)

추가적으로 개발을 위해 DDL 자동생성 기능을 활성화 하여 어플리케이션 실행 시점에 자동으로 테이블을 만들 수 있도록 합니다.

데이터베이스로 요청하는 sql쿼리문을 로그로 확인 할 수 있도록 로깅 레벨을 debug로 설정해줍니다.

 

✔ Domain 생성, 연관관계 매핑

📁 디렉토리 구조

Member.java

package com.project.board.domain;

import jakarta.persistence.*;
import lombok.Getter;

@Entity
@Getter
public class Member extends BaseEntity{

    @Id @GeneratedValue
    @Column(name = "MEMBER_ID")
    private Long id;

    private String password;

    private String name;

    @Embedded
    private Address address;

    @Enumerated(EnumType.STRING)
    private Gender gender;

}

@Entity : JPA가 Entity클래스라는 것을 알 수 있도록 어노테이션을 사용하여 표시합니다.

@Id : 엔티티의 PrimaryKey값을 설정합니다.

@GeneratedValue : JPA가  Sequence를 사용하여 id값을 설정하도록 합니다

@Embeded : 값 타입의 사용을 표시합니다.

@Enumerated : Enum타입을 표시합니다 (EnumType.STRING)속성을 통해 저장될 때 Enum타입의 이름으로 저장 될 수 있도록 설정합니다.

 

Post.java

package com.project.board.domain;

import jakarta.persistence.*;
import lombok.Getter;
import lombok.Setter;

@Entity
@Getter @Setter
public class Post extends BaseEntity{

    @Id @GeneratedValue
    @Column(name = "POST_ID")
    private Long id;

    private String title;

    private String content;

    @ManyToOne
    @JoinColumn(name = "MEMBER_ID")
    private Member member;

}

@ManyToOne : Post와 Member는 N : 1 즉, ManyToOne 의 관계이기 때문에 어노테이션을 사용하여 관계를 매핑합니다.

@JoinColumn : 대상 테이블(Member)의 PK를 설정 테이블(Post)의 FK로 설정합니다, name 속성은 FK컬럼의 이름을 설정합니다.( 이는 단순히 이름을 설정해주는 것이고 사용할 외래키를 설정하는 것이 아닙니다, 또한 생략하더라도 내부적으로 매핑 규칙과 컬럼명  'Entity이름_id'와 같은 형식으로 정의하는 규칙이 존재하기 때문에 가능합니다.

그리고 명시적으로 컬럼명을 기제함으로써 가독성을 높일 수 있습니다. )

 

📌

모든 프로젝트 소스코드는 깃허브를 통해 올리고 점점 더 추가해 나가겠습니다.

 

GitHub - Rookie8294/project_board: SpringBoot + JPA 를 활용하여 CRUD 게시판 프로젝트

SpringBoot + JPA 를 활용하여 CRUD 게시판 프로젝트. Contribute to Rookie8294/project_board development by creating an account on GitHub.

github.com