Backend/Spring

[Spring Boot + JPA ①] 기본 게시판 실습 (스프링부트 입문 / Spring Data JPA / 스프링부트 기초 / CRUD 실습 / 인텔리제이)

비전공자 기록광 2021. 8. 18. 18:54
반응형

이번에는 스프링 부트 + 스프링데이터 JPA 로 기본 crud 게시판 실습을 진행해보려 한다.

 

▶ JSP로 CRUD 게시판 만들기

2021.02.04 - [IT 독학/WEB] - [JSP ②] JSP 실습 - CRUD게시판 구현하기 ( jdbc연결 / sql 파일 생성 / / 웹개발 기초 / 웹개발 독학 )

 

▶ JSP로 MVC 패턴의 게시판 만들기

2021.02.12 - [IT 독학/WEB] - [JSP_MVC ①] MVC 패턴으로 CRUD 게시판 구현하기 ( dto / dao / 웹개발 기초 / 웹개발 독학 / 백엔드 / 웹 프로그래밍)

 

▶ Servlet으로 MVC 패턴의 게시판 만들기

2021.03.17 - [IT 독학/WEB] - [Servlet ①] 기본 게시판 구현하기 ( 서블릿 / mvc 패턴 / servlet interface 이용 / 웹개발 기초 / 웹개발 독학 / 백엔드 / 웹 프로그래밍)

 

 

▶ Spring으로 MVC 패턴의 게시판 만들기

2021.04.18 - [IT 독학/WEB] - [Spring _MVC ①] CRUD 게시판 구현 개발환경 설정 (STS / MVC 패턴 / Mybatis / 스프링 입문 / 백엔드 / 웹개발)

 

 

 

앞서 회원 기능 실습을 통해 스프링부트와 JPA의 기본 동작 구조에 대해 공부했다.

2021.07.12 - [IT 독학/WEB] - [Spring Boot ①] 회원 기능 실습 - Repository (스프링부트 입문 / JPA / 스프링부트 기초 / CRUD 실습 / 인텔리제이)

 

 

이 실습은 이 책을 참고하며 진행했다. 

 

https://book.naver.com/bookdb/book_detail.nhn?bid=15871738

 

스프링 부트와 AWS로 혼자 구현하는 웹 서비스

가장 빠르고 쉽게 웹 서비스의 모든 과정을 경험한다.경험이 실력이 되는 순간!이 책은 제목 그대로 스프링 부트와 AWS로 웹 서비스를 구현합니다. JPA와 JUNIT 테스트, 그레이들, 머스테치, 스프링

book.naver.com

 

설명이 친절한 책이니 추천한다.

 

 

 

스프링부트 + JPA 기본 CRUD 게시판 실습

1. 웹 프로젝트 생성

https://start.spring.io/

 

 

책에선 템플릿 엔진을 머스테치로 썼지만 나는 thymeleaf로 진행했다.

이미 thymeleaf를 공부하고 있어서...

 

 

압축을 풀어 build.gradle을 열어줬다.

 

 

 

2. 기본 화면 생성 (home.html)

 

2-1. home.html 생성

home 화면을 가볍게 만들어준다.

 

 

2-2. HomeController.java 생성

 

 

그리고 실행해주면 이렇게 잘 뜨는 걸 확인할 수 있다.

 

 

물론 게시판에 들어가도 아무것도 안뜬다.

 

일단 게시글을 작성해주는 기능(C기능)을 먼저 해보겠다.

 

 

3. 도메인 & 레포지토리 생성

3-1. Posts.java 클래스 생성

 

domain 패키지 생성 > posts  패키지 생성 > Posts 클래스 생성

 

일단 게시판 글에 관한 엔터티를 만들어줬다.

 

 

기본적인 JPA어노테이션을 해줬다. 

 

 

그리고 롬복 어노테이션을 추가해줬다. 

 

✨ 생성자를 빠르게 생성하는 단축키 :  Alt + insert 

 

여기서 중요한 건 getter메소드는 만들었지만, setter 메소드를 만들지 않았다는 점이다.

entity 클래스에서는 무작정 setter 메소드를 만드는 것 보다 값 변경이 필요하면 @Builder를 통해 그에 관한 메소드를 추가하는 방법을 지향한다. 

 

 

3-2. PostsRepository.java 인터페이스 생성

 

 

같은 domain 패키지 > posts 패키지에 PostsRepository를 생성해줬다.

그리고 JpaRepository를 상속받아줬다.

 

이는 스프링 데이터 JPA로 일반 JPA와는 다르다.

 

JpaRepository<Entity클래스, PK 타입> 을 상속받으면 기본 CRUD 메소드가 자동 생성된다는 장점이 있다.

 

 

4. Dto 생성

일단 controller와 service에서 사용할 dto를 만들어준다.

dto는 domain과 같지 않다. 내용이 비슷해도 성격이 다르다.

 

domain은 DB와 밀접한, 중요한 entity 클래스가 들어있다.

dto는 직접 화면에서 받고 넘기는 객체들이다. 

 

entity 객체들은 한번 정의하면 그 내용이 유지되어야 한다. 사용자에 의해 내용이 변하면 안된다.

그렇기 때문에 dto를 사용하는 것이다.

 

4-1. PostsSaveRequestDto.java

 

web 패키지 생성 > dto 패키지 생성 >PostsSaveRequestDto.java 클래스 생성

 

 

거의 entity 클래스와 비슷하지만 entity 클래스로 데이터를 주고받을 수 없다. (정의된 내용이 변하면 안되기 때문이다)

 

이 dto가 저장될 때 entity로 변환되어 저장되어야 하기 때문에 toEntity 메소드도 만들어줬다.

 

 

4-2. PostsResponseDto.java 

 

조회 시 사용할 dto를 만들어준다. 

 

entity를 dto화 시켜주는 메소드도 역시 추가해줬다.

 

 

 

5. 컨트롤러 생성

 

 

web 패키지 생성 > PostsApiController.java 생성

 

 

@RestController선언을 해주고 PostService를 가져와 save 메소드를 완성하기 위해 bean을 주입받는다.

 

 

6. 서비스 생성

 

 

service 패키지 생성 > posts 패키지 생성 > PostsService.java 생성

 

 

게시글 내용을 담은 dto를 받아와 entity화 시켜 save해주고 

잘됐는지 보기 위해 게시글 id를 반환해줬다.

 

 

이 글쓰기 기능이 잘 만들어졌는지는 테스트 코드로 진행한다.

다음편에서 계속...

 

반응형