스프링 게시판 API 만들기 2

🌎·2023년 5월 15일
0

스프링 공부

목록 보기
3/11

1. 특정 게시판 조회 API 만들기

특정 한 게시판을 조회하는 API를 만들어 보려고 한다.

먼저 Service 코드부터 작성해보자.

    @Override
    public Board findOne(int id) {
        return repository.findById(id)
                .orElseThrow(() -> new IllegalArgumentException("not found : " + id));
    }

findById 는 CrudRepository 에 있는 메소드이다.
id 를 기반으로 Board를 탐색한다.
서비스 코드를 작성했으니 컨트롤러를 작성해보자.

    @GetMapping("/{id}")
    public ResponseEntity<Board> findOneBoard(@PathVariable int id) {
        Board board = boardService.findOne(id);
        return ResponseEntity.status(HttpStatus.OK)
                .body(board);
    }

이러면 벌써 게시글 하나 조회하는 API는 작성이 완료되었다. JPA를 이용하니 더욱더 간단하다.

2. 게시판 수정 API 만들기

게시판 수정 API도 위와 마찬가지로 하면 되지만, 한 가지 단계를 더 추가해야한다.
이전에 만들었던 Board DTO 객체에 update 메소드를 추가해준다.

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

그 후 이전에 했던 방법과 마찬가지로 각각 서비스와 컨트롤러 부분 코드를 작성해준다.

    @Override
    @Transactional
    public Board update(int id, BoardRequest boardRequest) {
        Board board = repository.findById(id)
                        .orElseThrow(() -> new IllegalArgumentException("not found : " + id));
        board.update(boardRequest.getTitle(), boardRequest.getContent());
        return board;
    }

그런데 업데이트 메소드를 보면 위에 @Transactional 이 붙은 것을 확인할 수가 있다.
이 어노테이션은 매칭한 메서드를 하나의 트랜잭션으로 묶어준다.
예를 들어 내가 A의 계좌에 돈을 송금하면 A의 계좌엔 돈이 입금 되어야 하는데, 돈이 송금되고 나서 시스템이 멈춰버리면 돈은 감쪽같이 사라지게 된다. 그렇기 때문에 이 두가지 작업을 하나로 묶어서, 즉, 트랜잭션으로 묶어서 한 단위로 실행하게끔 만드는 것이다.
여기서는 Board를 읽어오는 단위와 수정해주는 단위를 하나로 묶어서 작업한 것이다.

    @PutMapping("/{id}")
    public ResponseEntity<Board> updateBoard(@PathVariable int id, @RequestBody BoardRequest boardRequest) {
        Board board = boardService.update(id, boardRequest);
        return ResponseEntity.status(HttpStatus.OK)
                .body(board);
    }

컨트롤러는 이전과 다를바가 없다.

3. 게시판 삭제 API 만들기

삭제도 마찬가지로 별 다를게 없다.
각 서비스 코드와 컨트롤러 코드를 작성해 주자.

    @Override
    public void delete(int id) {
        repository.deleteById(id);
    }
    @DeleteMapping("/{id}")
    public ResponseEntity<Void> deleteBoard(@PathVariable int id) {
        boardService.delete(id);
        return ResponseEntity.status(HttpStatus.OK)
                .build();
    }

삭제를 마지막으로 CRUD API를 다 만들었다!
끝 -*

profile
영차영차

0개의 댓글