[spring boot] 게시판 예제-요구사항 분석

Momenter·2021년 7월 12일
0

Spring Boot

목록 보기
5/15

게시판 요구사항 분석하기

  • 게시판 기능
    • 게시글 조회
    • 게시글 등록
    • 게시글 수정
    • 게시글 삭제
  • 회원기능
    • 구글/네이버 로그인
    • 로그인한 사용자 글 작성 권한
    • 본인작성 글에 대한 권한 관리

프로젝트에 Spring Data Jpa 적용하기

bulid.gradle에 의존성 추가하기

dependencies {
    compile('org.springframework.boot:spring-boot-starter-web')
    compile('org.springframework.boot:spring-boot-starter-mustache')
    compile('org.projectlombok:lombok')
    compile('org.springframework.boot:spring-boot-starter-data-jpa') //이번포스팅에 추가된 라이브러리
    compile('com.h2database:h2') //이번포스팅에 추가된 라이브러리
    testCompile('org.springframework.boot:spring-boot-starter-test')
}

1 spring-boot-starter-data-jpa

  • 스프링 부트용 Spring Data Jpa 추상화 라이브러리 입니다.
  • 프로젝트의 스프링 부트 버젠에 맞춰 자동으로 JPA관련 라이브러리들의 버전을 관리해 줍니다.

2 h2

  • 인메모리 관계형 데이터베이스입니다.
  • 별도의 설치 필요 없이 프로젝트 의존성만으로 관리할 수 있습니다.
  • 애플리케이션을 재시작할때마다 초기화 된다는 점을 이용하혀 테스트 용도로 많이 사용합니다.

domain 패키지 생성 및 Posts 클래스 작성


위와 같이 패키지 생성 후 Posts클래스를 생성 해줍니다.

Posts 클래스 작성

package com.momenting.book.springboot.domain.posts;

import lombok.Builder;
import lombok.Getter;
import lombok.NoArgsConstructor;

import javax.persistence.Column;
import javax.persistence.Entity;
import javax.persistence.GeneratedValue;
import javax.persistence.Id;

@Getter
@NoArgsConstructor
@Entity // 테이블과 링크될 클래스임을 나타냄 테이블이름은 posts
public class Posts {

    @Id //해당 테이블의 PK필드가 될 녀셕에게 붙힌다.
    @GeneratedValue //PK생성 규칙을 나타냄
    private Long id;

    @Column(length = 500, nullable = false)
    private  String title;

    @Column(columnDefinition = "TEXT", nullable = false)
    private String content;

    private String author;

    @Builder
    public Posts(String title, String content, String author) {
        this.title = title;
        this.content = content;
        this.author = author;
    }

    public void update(String title, String content) {
        this.title = title;
        this.content = content;
    }
}

Entity 클래스에서는 setter를 생성하지 않습니다.

Setter가 없는데 어떻게 DB에 값을 삽입할 수 있을까?
 생성자를 통해 최종적으로 값을 채운 후 DB에 삽입을 한다.
 @Builder를 통해제공되는 빌더 클래스를 생성자 대신 사용합니다.
 빌더 클래스를 사용한다면 어느 필드에 어떤 값을 채워야 할지 명확하게 인지를 할 수 있습니다.

@Builder

해당 클래스의 빌더 패턴 클래스를 생성
생성자 상단에 선언시 생성자에 포함된 필드만 빌더에 포함

Posts 클래스로 Database 접근할 JpaRepository 생성하기

위와 같이 PostsRepository라는 이름으로 인터페이스로 생성해줍니다.

MyBatis에서 Dao라고 불리는 DB 접근자를 JPA에서는 Repository라고 부르며 인터페이스로 생성해줍니다.

PostsRepository 작성하기

JpaRepository<Entity, PK타입>을 상속하면 기본적인 CRUD 메소드가 자동으로 생성됩니다. 
*주의해야할 점*
Entity 클래스와 기본 Entity Repository는 함께 위치 해야한다.
Entity 클래스는 기본 Entity Repository없이는 제대로 역할을 할 수 없다.
package com.momenting.book.springboot.domain.posts;

import org.springframework.data.jpa.repository.JpaRepository;

public interface PostsRepository extends JpaRepository<Posts, Long> {
}
profile
순간을 기록하는 개발자

0개의 댓글