이전 포스팅에서는 Repository 파일의 코드를 간단하게 짜봤습니다.
Service 파일은 그렇게 만든 Repository를 관리하는 곳입니다.
먼저 코드부터 보고 갈게요.
이 파일입니다!
↓
package com.homepage.board.service;
import java.util.NoSuchElementException;
import org.springframework.stereotype.Service;
import com.homepage.board.entity.Post;
import com.homepage.board.dto.PostRequestDto;
import com.homepage.board.repository.BoardRepository;
import lombok.RequiredArgsConstructor;
@Service
@RequiredArgsConstructor
public class BoardService{
private final BoardRepository boardRepository;
public PostResponseDto getPostById(Long postId) {
Post post=boardRepository.findById(postId).orElseThrow(()->
new NoSuchElementException("게시물이 존재하지 않습니다."));
PostResponseDto postResponseDto=PostResponseDto.builder()
.id(post.getId())
.title(post.getTitle())
.content(post.getContent())
.category(post.getCategory())
.build();
return postResponseDto;
}
}
BoardService.java의 전반적인 코드입니다.
import 하는 부분까지 전부 보여드릴게요
Post의 id값을 받아서 일치하는 Post값을 전부 가져오는 코드입니다.
@Service
이 파일을 서비스 레이어로 등록하는 어노테이션입니다.
스프링한테 내가 이걸 Service 역할을 하는 코드로 쓸거라고 알려주는 거예요.
스프링은 이런 것들을 모아서 알아서 내부 로직을 생성합니다.
(@가 붙은 것들을 어노테이션이라고 해요.
어노테이션은 주석이라는 뜻으로
특정 기능들을 주석으로 붙임으로써 사용 가능하게 해주는 기술입니다.)
private final BoardRepository boardRepository;
BoardRepository 앞에 final이 붙어 있습니다.
이는 바로 위에 있는 @RequiredArgsConstructor 어노테이션이 적용되어서
자동으로 생성자가 주입됩니다.
public PostResponseDto getPostById(Long postId) {
반환형이 PostResponseDto입니다.DB에서 Post값을 가져와서PostResponseDto로 전환한 다음 반환할 겁니다.DB의 데이터를 그대로 보내주는 것은 언제나 조심해야 합니다.
Post post=boardRepository.findById(postId).orElseThrow(()->
new NoSuchElementException("게시물이 존재하지 않습니다."));
우린 BoardRepository에 findById라는 메서드를 설정하지 않았습니다.
하지만 에러가 뜨지 않아요.
BoardRepository에서 상속받은 JpaRepository를 타고 올라가면 findById가 숨어 있습니다.
그걸 우린 그대로 사용한 거예요.
불러온 post 값이 없다면 orElseThrow가 실행되고
그 안에 넣어둔 NoSuchElementException가 발생합니다..
그런 데이터는 없다고 예외를 발생시키는 거죠.
PostResponseDto postResponseDto=PostResponseDto.builder()
.id(post.getId())
.title(post.getTitle())
.content(post.getContent())
.category(post.getCategory())
.build();
postResponseDto에 선언해둔 @Builder 어노테이션을 사용합니다.
postResponseDto의 필드값을 메서드 체인으로 사용할 수 있어요.
post의 데이터를 추출하여 postResponseDto에 넣어줬어요.
그리고 그렇게 가져온 postResponseDto값을 return 하면 Service의 역할은 끝납니다.
앞으로 우리는 Service에 다양하고 복잡한 로직을 추가할 거예요.
그렇다고 해도 많이 어려운 내용은 없으니 힘내봅시다^^
'[spring]스프링' 카테고리의 다른 글
[Spring 게시판] 9. JPA 환경에서 스프링 실행 + DataSource 연결 에러 (0) | 2023.08.01 |
---|---|
[Spring 게시판] 8. 기본 폴더 구조 정리5 (controller 파일 생성) (0) | 2023.07.27 |
[Spring 게시판] 6. 기본 폴더 구조 정리3 (repository 파일 생성) (0) | 2023.07.11 |
[Spring 게시판] 5. 기본 폴더 구조 정리2 (entity, dto 파일 생성) (0) | 2023.07.10 |
[Spring 게시판] 4. 기본 폴더 구조 정리1 (0) | 2023.07.10 |