[스프링부트 #8] BoardService 실습 코드 핵심 정리

게시판 만드는 프로젝트의 Service 계층에서 실습한 코드의 핵심을 정리하였습니다.
도경원's avatar
Aug 09, 2025
[스프링부트 #8] BoardService 실습 코드 핵심 정리

1. BoardService 클래스

역할은 게시판의 비즈니스 로직을 처리한다. BoardRepository에 의존함.
Controller → Service → Repository → Entity에 의존함.
주요 책임은 비즈니스 로직을 처리하고 트랜잭션 관리, 응답 DTO 생성이다.
응답 DTO 생성은 서비스 말고 컨트롤러에 책임을 가져가도 되지만, 여기서는 서비스의 책임이다.

2. 주요 메서드

메서드명
설명
트랜잭션
DTO 사용
비고
게시글목록()
모든 게시글 조회 후 ListResponseDTO로 변환
응답 DTO 직접 생성
조회 전용
게시글상세(int id)
게시글 단건 조회 후 DetailResponseDTO로 변환
응답 DTO 직접 생성
조회 전용
게시글쓰기(BoardSaveRequestDTO reqDTO)
게시글 저장
요청 DTO에서 필요한 값만 꺼냄
INSERT
게시글삭제(int id)
ID로 게시글 삭제
-
DELETE
게시글수정(int id, BoardUpdateRequestDTO reqDTO)
게시글 수정, 성공 여부 반환
요청 DTO에서 값 꺼냄
UPDATE (결과로 row 수 확인)

3. 전체 실습 코드

public class BoardService { private final BoardRepository boardRepository; public List<BoardListResponseDTO> 게시글목록() { List<Board> boardList = boardRepository.findAll(); List<BoardListResponseDTO> resDTO = new ArrayList<>(); for (Board board : boardList) { BoardListResponseDTO boardListResponseDTO = new BoardListResponseDTO(); boardListResponseDTO.setId(board.getId()); boardListResponseDTO.setTitle(board.getTitle()); resDTO.add(boardListResponseDTO); } return resDTO; } public BoardDetailResponseDTO 게시글상세(int id) { Board board = boardRepository.findById(id); BoardDetailResponseDTO resDTO = new BoardDetailResponseDTO(); resDTO.setId(board.getId()); resDTO.setTitle(board.getTitle()); resDTO.setContent(board.getContent()); return resDTO; } @Transactional public void 게시글쓰기(BoardSaveRequestDTO reqDTO) { boardRepository.save(reqDTO.getTitle(), reqDTO.getContent()); } @Transactional public void 게시글삭제(int id) { boardRepository.deleteById(id); } @Transactional public boolean 게시글수정(int id, BoardUpdateRequestDTO reqDTO) { int rows = boardRepository.update(id, reqDTO.getTitle(), reqDTO.getContent()); return rows == 1; } }
  • DTO에 종속되지 않도록 필요한 값만 꺼내서 Repository에 넘긴다.
notion image
  • 조회 메서드는 DTO로 직접 가공해서 반환 → Controller는 비즈니스에 집중 안 해도 됨
notion image
  • @Transactional을 쓰는 위치가 정확함 → write 작업에만 적용
  • 메서드 네이밍이 명확함 (게시글쓰기, 게시글삭제, 게시글수정) → 비즈니스 의도가 잘 드러남
Controller에서 받은 DTO는 꼭 Service에 직접 넘기지 말고, 필요한 값만 꺼내서 넘겨야 한다.
Service는 View나 Request 형식에 절대 종속되면 안 된다. 그래야 진짜로 재사용 가능한 비즈니스 계층이 된다.
 
Share article

Gyeongwon's blog