이번에는 스프링 부트 + 스프링데이터 JPA 로 기본 crud 게시판 실습을 진행해보려 한다.
▶ JSP로 CRUD 게시판 만들기
2021.02.04 - [IT 독학/WEB] - [JSP ②] JSP 실습 - CRUD게시판 구현하기 ( jdbc연결 / sql 파일 생성 / / 웹개발 기초 / 웹개발 독학 )
▶ JSP로 MVC 패턴의 게시판 만들기
▶ Servlet으로 MVC 패턴의 게시판 만들기
▶ Spring으로 MVC 패턴의 게시판 만들기
앞서 회원 기능 실습을 통해 스프링부트와 JPA의 기본 동작 구조에 대해 공부했다.
이 실습은 이 책을 참고하며 진행했다.
https://book.naver.com/bookdb/book_detail.nhn?bid=15871738
설명이 친절한 책이니 추천한다.
스프링부트 + JPA 기본 CRUD 게시판 실습
1. 웹 프로젝트 생성
책에선 템플릿 엔진을 머스테치로 썼지만 나는 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를 반환해줬다.
이 글쓰기 기능이 잘 만들어졌는지는 테스트 코드로 진행한다.
다음편에서 계속...
댓글