728x90
게시판 목록 데이터 만들기
vue-frontboard에서 보여줄 데이터 목록을 생성합니다.
resources 아래에 import.sql 파일을 생성하고 아래 내용을 붙여넣습니다.
/* import.sql */
INSERT INTO BOARD (IDX, TITLE, CONTENTS, AUTHOR, CREATED_AT) VALUES (1, '게시글 제목1', '게시글 내용1', '작성자1', '2022-02-18 23:24:00');
INSERT INTO BOARD (IDX, TITLE, CONTENTS, AUTHOR, CREATED_AT) VALUES (2, '게시글 제목2', '게시글 내용2', '작성자2', '2022-02-18 23:24:00');
INSERT INTO BOARD (IDX, TITLE, CONTENTS, AUTHOR, CREATED_AT) VALUES (3, '게시글 제목3', '게시글 내용3', '작성자3', '2022-02-18 23:24:00');
INSERT INTO BOARD (IDX, TITLE, CONTENTS, AUTHOR, CREATED_AT) VALUES (4, '게시글 제목4', '게시글 내용4', '작성자4', '2022-02-18 23:24:00');
INSERT INTO BOARD (IDX, TITLE, CONTENTS, AUTHOR, CREATED_AT) VALUES (5, '게시글 제목5', '게시글 내용5', '작성자5', '2022-02-18 23:24:00');
INSERT INTO BOARD (IDX, TITLE, CONTENTS, AUTHOR, CREATED_AT) VALUES (6, '게시글 제목6', '게시글 내용6', '작성자6', '2022-02-18 23:24:00');
INSERT INTO BOARD (IDX, TITLE, CONTENTS, AUTHOR, CREATED_AT) VALUES (7, '게시글 제목7', '게시글 내용7', '작성자7', '2022-02-18 23:24:00');
INSERT INTO BOARD (IDX, TITLE, CONTENTS, AUTHOR, CREATED_AT) VALUES (8, '게시글 제목8', '게시글 내용8', '작성자8', '2022-02-18 23:24:00');
INSERT INTO BOARD (IDX, TITLE, CONTENTS, AUTHOR, CREATED_AT) VALUES (9, '게시글 제목9', '게시글 내용9', '작성자9', '2022-02-18 23:24:00');
INSERT INTO BOARD (IDX, TITLE, CONTENTS, AUTHOR, CREATED_AT) VALUES (10, '게시글 제목10', '게시글 내용10', '작성자10', '2022-02-18 23:24:00');
frontboard에서 호출하고 데이터를 전달할 수 있도록 컨트롤러와 서비스를 생성합니다.
아래 프로젝트 구조에 맞게 패키지 및 클래스 파일들을 생성합니다.
DB 작업을 진행할 Entity와 Repository를 생성합니다.
entity/BoardEntity.java
import lombok.AllArgsConstructor;
import lombok.Builder;
import lombok.Data;
import lombok.NoArgsConstructor;
import javax.persistence.*;
import java.time.LocalDateTime;
@Data
@AllArgsConstructor
@NoArgsConstructor
@Builder
@Table(name="BOARD")
@Entity
public class BoardEntity {
@Id
@GeneratedValue(strategy = GenerationType.IDENTITY)
private Long idx;
private String title;
private String contents;
private String author;
private LocalDateTime createdAt;
}
entity/BoardRepository.java
import org.springframework.data.jpa.repository.JpaRepository;
public interface BoardRepository extends JpaRepository<BoardEntity, Long> {
}
web/dtos/BoardDto.java
import lombok.AllArgsConstructor;
import lombok.Builder;
import lombok.Data;
import lombok.NoArgsConstructor;
import java.io.Serializable;
@Data
@AllArgsConstructor
@NoArgsConstructor
@Builder
public class BoardDto implements Serializable {
private Long idx;
private String title;
private String contents;
private String author;
private String createdAt;
}
web/BoardController.java
import com.example.vuebackboard.entity.BoardEntity;
import com.example.vuebackboard.services.BoardService;
import com.example.vuebackboard.web.dtos.BoardDto;
import lombok.RequiredArgsConstructor;
import lombok.extern.slf4j.Slf4j;
import org.springframework.web.bind.annotation.*;
import java.util.List;
@Slf4j
@RequiredArgsConstructor
@CrossOrigin
@RestController
public class BoardController {
private final BoardService boardService;
@GetMapping("/board/list")
public List<BoardDto> boardList() { return boardService.getBoardList(); }
@GetMapping("/board/{id}")
public BoardDto getBoard(@PathVariable Long id) {
return boardService.getBoard(id);
}
@PostMapping("/board")
public BoardEntity create(@RequestBody BoardDto boardDto) {
return boardService.create(boardDto);
}
@PatchMapping("/board")
public BoardEntity update(@RequestBody BoardDto boardDto) {
return boardService.update(boardDto);
}
@DeleteMapping("/board/{id}")
public void delete(@PathVariable Long id) {
boardService.delete(id);
}
}
services/BoardService.java
import com.example.vuebackboard.entity.BoardEntity;
import com.example.vuebackboard.entity.BoardRepository;
import com.example.vuebackboard.web.dtos.BoardDto;
import lombok.RequiredArgsConstructor;
import lombok.extern.slf4j.Slf4j;
import org.springframework.stereotype.Service;
import java.time.LocalDateTime;
import java.time.format.DateTimeFormatter;
import java.util.ArrayList;
import java.util.List;
@Slf4j
@RequiredArgsConstructor
@Service
public class BoardService {
private final BoardRepository boardRepository;
/**
* 게시글 목록 가져오기
*/
public List<BoardDto> getBoardList() {
List<BoardEntity> boardEntities = boardRepository.findAll();
List<BoardDto> dtos = new ArrayList<>();
for (BoardEntity entity : boardEntities) {
BoardDto dto = BoardDto.builder()
.idx(entity.getIdx())
.author(entity.getAuthor())
.title(entity.getTitle())
.contents(entity.getContents())
.createdAt(entity.getCreatedAt().format(DateTimeFormatter.ofPattern("yyyy-MM-dd hh:mm:ss")))
.build();
dtos.add(dto);
}
return dtos;
}
/**
* 게시글 가져오기
*/
public BoardDto getBoard(Long id) {
BoardEntity entity = boardRepository.findById(id).orElseThrow(() -> new RuntimeException("게시글을 찾을 수 없습니다."));
return BoardDto.builder()
.idx(entity.getIdx())
.title(entity.getTitle())
.contents(entity.getContents())
.author(entity.getAuthor())
.createdAt(entity.getCreatedAt().format(DateTimeFormatter.ofPattern("yyyy-MM-dd hh:mm:ss")))
.build();
}
/**
* 게시글 등록
*/
public BoardEntity create(BoardDto boardDto) {
BoardEntity entity = BoardEntity.builder()
.title(boardDto.getTitle())
.contents(boardDto.getContents())
.author(boardDto.getAuthor())
.createdAt(LocalDateTime.now())
.build();
return boardRepository.save(entity);
}
/**
* 게시글 수정
*/
public BoardEntity update(BoardDto boardDto) {
BoardEntity entity = boardRepository.findById(boardDto.getIdx()).orElseThrow(() -> new RuntimeException("게시글을 찾을 수 없습니다."));
entity.setTitle(boardDto.getTitle());
entity.setContents(boardDto.getContents());
return boardRepository.save(entity);
}
/**
* 게시글 삭제
*/
public void delete(Long id) {
BoardEntity entity = boardRepository.findById(id).orElseThrow(() -> new RuntimeException("게시글을 찾을 수 없습니다."));
boardRepository.delete(entity);
}
}
기본적인 CRUD를 작업해볼 수 있는 백엔드 서버를 구성했습니다.
해당 프로젝트는 이번 게시판 실습을 위한 프로젝트이며 Spring Data JPA 를 사용하였습니다.
서버를 부팅하여 이상이 없는지 확인합니다.
주의사항
이번 포스팅에서 작업한 서버는 개발용이므로 테스트/운영 환경에 맞게 yml 파일등을 재구성해야 합니다.
특히 jpa.hibernate.ddl-auto 등의 설정으로 인해 서버가 시작 / 종료될 때 테이블이 생성 / 삭제되므로 주의하시기 바랍니다.
728x90
'개발 > 게시판 만들기' 카테고리의 다른 글
[Vue] Vue.js 게시판 만들기 7 - 게시글 상세보기 (0) | 2022.03.01 |
---|---|
[Vue] Vue.js 게시판 만들기 6 - 게시판 목록 출력 (3) | 2022.02.28 |
[Vue] Vue.js 게시판 만들기 4 - 게시판 목록 화면 구성 (5) | 2022.02.28 |
[Vue] Vue.js 게시판 만들기 3 - 레이아웃 분할 (10) | 2022.02.21 |
[Vue] Vue.js 게시판 만들기 2 - Backend 프로젝트 생성 (4) | 2022.02.21 |
댓글